PageSourceSearch

https://www.euronics.it/on/demandware.static/Sites-euronics-Site/-/it_IT/v1790236292937/js/productDetail.js

js euronics.it collected 2026-09-24 08:51:05 UTC 326,395 bytes, 101 lines download raw bytes

vendor: 978 bytes, line 1
1!function(n){var e={};function t(a){if(e[a])return e[a].exports;var s=e[a]={i:a,l:!1,exports:{}};return n[a].call(s.exports,s,s.exports,t),s.l=!0,s.exports}t.m=n,t.c=e,t.d=function(n,e,a){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:a})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var s in n)t.d(a,s,function(e){return n[e]}.bind(null,s));return a},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s="./cartridges/int_app/cartridge/client/default/js/productDetail.js")}({
1"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/criteoTracking.js":
2/*!************************************************************************************************!*\
3  !*** ../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/criteoTracking.js ***!
4  \************************************************************************************************/
5/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\nfunction trackBeacon(url) {\n    if (url) {\n        fetch(url).catch(e => {\n            console.log(e);\n        });\n    }\n}\n\nmodule.exports = {\n    trackBeacon: trackBeacon\n}\n\n//# sourceURL=webpack:///../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/criteoTracking.js?")},
5"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/chargerFeaturesModal.js":
6/*!**************************************************************************************************************!*\
7  !*** ../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/chargerFeaturesModal.js ***!
8  \**************************************************************************************************************/
9/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\nconst Swal = __webpack_require__(/*! sweetalert2 */ \"../euronics/node_modules/sweetalert2/dist/sweetalert2.all.js\");\n\n/**\n * @param {JQuery} $trigger - Element with .charger-modal-trigger inside .charger-included-block\n */\nfunction openChargerFeaturesModal($trigger) {\n    var $block = $trigger.closest('.charger-included-block');\n    if (!$block.length) {\n        $block = $trigger.closest('.charger-pdp-block').find('.charger-included-block');\n    }\n    var $source = $block.find('.charger-features-modal-source');\n    var html = $source.length ? $source.html() : '';\n    if (!html || !String(html).trim()) {\n        return;\n    }\n    Swal.fire({\n        customClass: {\n            container: 'sa2emodal charger-features-modal'\n        },\n        showClass: {\n            popup: 'animate__animated animate__fadeIn'\n        },\n        closeButtonHtml: '<i class=\"icon-cancel\"></i>',\n        html: html,\n        width: 879,\n        heightAuto: true,\n        background: '#ffffff',\n        showCloseButton: true,\n        showConfirmButton: fal
9se,\n        showCancelButton: false\n    });\n}\n\n$(document).on('click', '.charger-modal-trigger', function (e) {\n    e.preventDefault();\n    openChargerFeaturesModal($(this));\n});\n\n$(document).on('keydown', '.charger-modal-trigger', function (e) {\n    if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        openChargerFeaturesModal($(this));\n    }\n});\n\n\n//# sourceURL=webpack:///../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/chargerFeaturesModal.js?")},
9"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/detail.js":
10/*!************************************************************************************************!*\
11  !*** ../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/detail.js ***!
12  \************************************************************************************************/
13/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\nconst Swal = __webpack_require__(/*! sweetalert2 */ \"../euronics/node_modules/sweetalert2/dist/sweetalert2.all.js\");\n__webpack_require__(/*! shave/dist/jquery.shave */ \"../euronics/node_modules/shave/dist/jquery.shave.js\");\nvar scrollToElement = __webpack_require__(/*! scroll-to-element */ \"../euronics/node_modules/scroll-to-element/index.js\");\nwindow.scrollToElement = scrollToElement;\nvar base = __webpack_require__(/*! base/product/detail */ \"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js\");\nvar productTotalPrice = 0;\nvar criteoTracking = __webpack_require__(/*! ../criteoTracking */ \"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/criteoTracking.js\");\n\nvar services = __webpack_require__(/*! ./services */ \"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/services.js\");\nconst stickybits = __webpack_require__(/*! stickybits */ \"../euronics/node_modules/stickybits/dist/stickybits.es.js\").default;\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n    if (url) {\n        $.ajax({\n            url: url,\n            method: 'GET',\n            success: function () {\n                // reporting urls hit on the server\n            },\n            error: function () {\n                // no reporting urls hit on the server\n            }\n        });\n    }\n}\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n    var pid;\n\n    if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n        pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n    } else if ($('.product-set-detail').length || $('.product-set').length) {\n        pid = $($el).closest('.product-detail').find('.product-id').text();\n    } else {\n        pid = $($el).attr(\"data-pid\") ? $($el).attr(\"data-pid\") : $('.product-detail:not(\".bundle-item\")').data('pid');\n    }\n\n    return pid;\n}\n\nfunction getAddToCartUrl() {\n    return $('.add-to-cart-url').val();\n}\n\n$.addToCartSwogo = function (products, actionType) {\n    var addToCartUrl = $('.add-to-cart-url').val();\n    var pids = [];\n    var hasProducts = products || \"\";\n    var isOrderNow = false;\n    if (actionType == \"orderNow\") {\n        isOrderNow = true;\n    }\n\n    if (hasProducts) {\n        if (hasProducts.length > 0) {\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            hasProducts = JSON.parse(hasProducts);\n            for (var i = 0; i < hasProducts.length; i++) {\n                var obj = {\n                    pid: hasProducts[i],\n                    qty: 1\n                };\n                pids.push(obj);\n            }\n\n            var form = {\n                pidsObj: JSON.stringify(pids),\n                pid: undefined,\n                childProducts: \"\",\n                quantity: \"1\"\n            };\n\n            if (isOrderNow) {\n                form.rurl = \"showCart\";\n            }\n\n            $('body').trigger('updateAddToCartFormData', form);\n\n            if (addToCartUrl) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\
13n                        handlePostCartAdd(data);\n                        $('body').trigger('product:afterAddToCart', data);\n                        $.spinner().stop();\n                        if (isOrderNow) {\n                            window.location.href = data.redirectURL;\n                        } else {\n                            miniCartReportingUrl(data.reportingURL);\n                        }\n                    },\n                    error: function () {\n                        $.spinner().stop();\n                    }\n                });\n            }\n        }\n    }\n\n};\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\n\nfunction handlePostCartAdd(response) {\n    $('.minicart').trigger('count:update', response);\n    var messageType = response.error ? 'alert-danger' : 'alert-success';\n    // show add to cart toast\n    if (response.newBonusDiscountLineItem &&\n        Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n        chooseBonusProducts(response.newBonusDiscountLineItem);\n    } else {\n\n        var device = window.getComputedStyle(\n            document.querySelector('body'), ':after'\n        ).getPropertyValue('content').replace(/[^a-zA-Z ]/g, \"\");\n\n        if (device === 'mobile') {\n            Swal.fire({\n                title: \"<span class='body-small font-bold' style='margin-bottom:0px;color:white;'><i class='icon-correct body-small mr-2'></i> Aggiunto al carrello</span>\",\n                position: \"center\",\n                width: 199,\n                padding: '15px',\n                background: '#1d428a',\n                showCancelButton: fal
13se,\n                showCloseButton: false,\n                customClass: {\n                    container: 'addToCartSwal',\n                    header: 'addToCartSwalHeader'\n                },\n                showConfirmButton: false,\n                timer: 3000,\n            })\n        } else {\n            $(\".minicart\").trigger(\"mouseenter\");\n            setTimeout(() => {\n                if ($(\".minicart:hover\").length == 0) {\n                    $(\".minicart\").trigger(\"mouseleave\")\n                }\n            }, 3000);\n        }\n\n    }\n}\n\nfunction loadToastMessageAddToCart() {\n    $('.addToCartModalFeedback').removeClass('d-none');\n    setTimeout(() => {\n        $('.addToCartModalFeedback').addClass('d-none');\n    }, 2000);\n}\n\nbase.addToCart = function () {\n\n    function openServiceModal({\n        startStep = 1,\n        clickBtnAddToCart = false,\n        removeChangeStep = false,\n    } = {}) {\n        const html = $('#modalServices').html();\n        Swal.fire({\n            customClass: {\n                container: 'sa2emodal services-modal'\n            },\n            showClass: {\n                popup: 'animate__animated animate__fadeIn'\n            },\n            closeButtonHtml: '<i class=\"icon-cancel\"></i>',\n            html: html,\n            width: 879,\n            heightAuto: false,\n            showCloseButton: true,\n            showConfirmButton: fal
13se,\n            showCancelButton: false,\n            willOpen: () => {\n                if (clickBtnAddToCart) {\n                    $('.services-modal button.swal2-close').addClass('closeAddToCart');\n                    $('.services-modal button.addToCartServices').attr('data-from', 'addToCart');\n                    $('.services-modal .close-modal').text('');\n                    $('.services-modal .infomessage-add-to-cart').text('');\n                } else {\n                    $('.services-modal button.addToCartServices').addClass('d-none');\n                    $('.services-modal button.addToCartServices').attr('data-from', 'banner');\n                }\n\n                // Attiva il giusto step\n                if (startStep === 1) {\n                    services.updateModalWithOneStep(2, removeChangeStep);\n\n                } else if (startStep === 2) {\n                    services.updateModalWithOneStep(1, removeChangeStep);\n\n                }\n\n                const einsteinSliders = document.querySelectorAll('.services-product-slider');\n                servicesProductSlider(einsteinSliders);\n            }\n        });\n    }\n\n    // Clic su \"Aggiungi un servizio\" → Step 1\n    $(document).on('click', '.open-service-modal-step-2', function (e) {\n        e.preventDefault();\n        openServiceModal({\n            startStep: 1\n        });\n    });\n\n    // Clic su \"Seleziona un piano\" → Step 2\n    $(document).on('click', '.open-service-modal-step-1', function (e) {\n        e.preventDefault();\n        openServiceModal({\n            startStep: 2\n        });\n    });\n\n    let isAddToCartInProgress = false;\n    $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function (e, data) {\n        if (isAddToCartInProgress) {\n            console.warn('Blocked double execution');\n            return;\n        }\n\n        var dataModelId = '';\n\n        if($(this).hasClass('add-to-cart')) {\n            if ($(this).attr('data-triggered') === 'true') {\n                dataModelId = window.localStorage.getItem('tradeInModelId');\n            } else {\n                window.localStorage.removeItem('tradeInModelId');\n                window.localStorage.removeItem('bonus2025Enabled');\n                dataModelId = '';\n            }\n        }\n\n        var button = $(this);\n\n        isAddToCartInProgress = true;\n        setTimeout(() => {\n            isAddToCartInProgress = false;\n        }, 500); // evitare doppio click mouse\n\n        if (button.hasClass('productHasServices') && $('.pdp-sticky-modal').is(\":visible\") || button.hasClass('productHasServices') && !Swal.isVisible()) {\n            if(button.hasClass('open-step-1')) {\n                openServiceModal({\n                    startStep: 1,\n                    clickBtnAddToCart: true,\n                    removeChangeStep: true,\n                });\n            };\n\n            if(button.hasClass('open-step-2')) {\n                openServiceModal({\n                    startStep: 2,\n                    clickBtnAddToCart: true,\n                    removeChangeStep: false,\n                });\n            };\n\n        } else {\n            var addToCartUrl;\n            var pid;\n            var $this = $(this);\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            pid = getPidValue($(this));\n\n            var $productContainer = $(this).closest('.product-detail');
13\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n            }\n\n            //var selectedServices = $('.services-' + pid).attr(\"data-selected\");\n\n            if ($(this).parents('.tile-hover-show').length == 0) {\n                var selectedServices = services.getAdditionalServicesPopup();\n            }\n\n            var redirect = data && data.redirect ? data.redirect : null;\n            //gestione aggiunta a carrello da content slot services\n            var isServiceTile = $(this).parents('.modal-services-wrapper .slot-suggestions').length > 0;\n\n            addToCartUrl = getAddToCartUrl();\n            var isSponsored = $(this).attr(\"data-sponsored\");\n            var criteoPageUid = $(\"input[name=criteoPageUid]\").val();\n            var pageFrom = window.pageType || '';\n            var token = $($(this)).attr(\"data-token\") ? $($(this)).attr(\"data-token\") : null;\n\n            var form = {\n                pageFrom: pageFrom,\n                pid: pid,\n                token: token,\n                pageuid: criteoPageUid,\n                isSponsored: isSponsored,\n                pidsObj: undefined,\n                childProducts: JSON.stringify(selectedServices),\n                quantity: \"1\",\n                modelId: dataModelId,\n                bonusEnabled: window.localStorage.getItem('bonus2025Enabled'),\n            };\n\n            button.removeAttr('data-triggered');\n\n            if (!$('.bundle-item').length) {\n                form.options = \"\";\n            }\n\n            var basketUrl = $(this).data(\"basketurl\");\n\n            $(this).trigger('updateAddToCartFormData', form);\n            if (addToCartUrl) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\
13n\n                        if (!redirect && !isServiceTile) {\n                            Swal.close();\n                            handlePostCartAdd(data);\n                        }\n\n                        if ($this.parents('.tns-item').length > 0) {\n                            var url = $this.parents('.tns-item').attr('data-onbasketbeacon') ? $this.parents('.tns-item').attr('data-onbasketbeacon') : $this.parents('.tns-item').attr('data-onbasket');\n                            criteoTracking.trackBeacon(url);\n                        } else if ($this.parents('.sponsor').length > 0) {\n                            criteoTracking.trackBeacon($this.parents('.sponsor').attr('data-onbasket'));\n                        }\n\n                        //JS INTERFACE PER APP\n\n                        try {\n                            if (data.appMobile) {\n                                data.appMobile === 'app-mobile-android' ?\n                                    window.euronicsInterface.updateCartBadge() :\n                                    window.webkit.messageHandlers.updateCartBadge.postMessage({});\n                            }\n                        } catch (error) {\n                            console.log(\"JS INTERFACE APP\");\n                        }\n\n\n                        $('body').trigger('product:afterAddToCart', data);\n                        $.spinner().stop();\n                        //GTM Object\n                        GTM_TrackingAddToCart(basketUrl, pid);\n                        miniCartReportingUrl(data.reportingURL);\n                        var serbviceobj = [];\n                        $(\".sticky-container .services-total-price .icon-correct\").each(function (e, i) {\n                            serbviceobj = $(i).data(\"serviceinfo\");\n                            GTM_addToCartService(serbviceobj, 'product page');\n                        });\n\n                        if (redirect) {\n                            location.href = redirect;\n                        } else if (data.redirectUrl) {\n                            location.href = data.redirectUrl;\n                        }\n\n                        if (isServiceTile) {\n                            loadToastMessageAddToCart();\n                        }\n                    },\n                    error: function () {\n                        $.spinner().stop();\n                    }\n                });\n            }\n        }\n    });\n    //Add To Cart for the Offer Section on PDP\n\n    $(document).on(\"click\", 'button.add-to-cart-offer', function () {\n        var addToCartUrl;\n        var pids = [];\n        var isOrderNow = $(this).hasClass(\"orderNowProductBundle\");\n\n        $('body').trigger('product:beforeAddToCart', this);\n\n        var bundle = this.closest(\".bundle\");\n        var dataId = $(bundle).find(\".product-tile-pd[data-pid]\");\n\n        for (var i = 0; i < dataId.length; i++) {\n            var obj = {\n                pid: $(dataId[i]).attr(\"data-pid\"),\n                qty: 1\n            };\n            pids.push(obj);\n        }\n\n        addToCartUrl = getAddToCartUrl();\n\n        var form = {\n            pidsObj: JSON.stringify(pids),\n            pid: undefined,\n            childProducts: \"\",\n            quantity: \"1\"\n        };\n\n        if (isOrderNow) {\n            form.rurl = \"showCart\";\n        }\n\n        if (!$('.bundle-item').length) {\n            form.options = \"\";\n        }\n\n        $(this).trigger('updateAddToCartFormData', form);\n        if (addToCartUrl) {\n            $.ajax({\n                url: addToCartUrl,\n                method: 'POST',\n                data: form,\n                success: function (data) {\
13n\n                    handlePostCartAdd(data);\n                    $('body').trigger('product:afterAddToCart', data);\n                    $.spinner().stop();\n                    GTM_addToCardBundle(isOrderNow);\n                    if (isOrderNow) {\n                        window.location.href = data.redirectURL;\n                    } else {\n                        miniCartReportingUrl(data.reportingURL);\n                    }\n                },\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        }\n    })\n}\n\n//START=data-component=\"imageCarouselPdp\"//\n$('.carousel-item').each(function () {\n    if ($('.carousel-item').length > 1) {\n        $('.carousel-control').show();\n    } else {\n        $('.carousel-control').hide();\n    }\n});\n//FINISH=data-component=\"imageCarouselPdp\"//\n\n$(\".iconProduct .selection > i.icon-share\").on(\"click\", function () {\n    $(this).prev('.tool-tip').addClass('active');\n});\n\n$('.iconProduct .selection > .tool-tip > .iconToolTip > i.icon-cancel').on(\"click\", function () {\n    $('.tool-tip').removeClass('active');\n});\n\n//Scroll to configuration\nvar heightGap = $(document).width() > 767 ? 180 : 100;\n$(document).on(\"click\", \".mpf-list>.mpf-item>.features\", function () {\n    var tabName = $(this).data(\"section\") || '';\n    GTM_trackPDPTabs(tabName);\n\n    scrollToElement(\".technicalSpecificationsDescription\", {\n        offset: -(heightGap),\n        duration: 900\n    });\n\n    if (heightGap == 100) {\n        $(\".technicalSpecificationsDescription .collapsed\").trigger('click')\n    }\n    return false;\n});\n$(document).on(\"click\", \".mpf-list>.mpf-item>.description\", function () {\n    var tabName = $(this).data(\"section\") || '';\n    GTM_trackPDPTabs(tabName);\n    var el = $(\".technicalSpecificationsDescription\").length > 1 ? document.getElementsByClassName('technicalSpecificationsDescription')[1] : document.getElementsByClassName('technicalSpecificationsDescription')[0];\n    scrollToElement(el, {\n        offset: -(heightGap),\n        duration: 900\n    });\n    if (heightGap == 100) {\n        $(el).find('.collapsed').trigger('click')\n    }\n    return false;\n});\n$(document).on(\"click\", \".mpf-list>.mpf-item>.technicalInfo\", function () {\n    var tabName = $(this).data(\"section\") || '';\n    GTM_trackPDPTabs(tabName);\n\n    scrollToElement(\".technicalSpecificationsRow\", {\n        offset: -(heightGap),\n        duration: 900\n    });\n    if (heightGap == 100) {\n        $(\".technicalSpecificationsRow .collapsed\").trigger('click')\n    }\n    return false;\n});\n/* $(document).on(\"click\",\".mpf-list>.mpf-item>.reviews\",function () {\n    var tabName = $(this).data(\"section\") || '';\n    GTM_trackPDPTabs(tabName);\n\n    var el = document.getElementsByClassName('technicalSpecificationsDescription')[2];\n\n    scrollToElement(el, {\n        offset: -(heightGap),\n        duration: 900\n    });\n    return false;\n});\n */\n\n\n// function cutTechnicalSpec() {\n//     const $container = $('.newProductDetailContainer .techSpeContainer .techSpeItem');\n//     const $titles = $('.newProductDetailContainer .techSpeContainer .techSpeItem .h6');\n//     const $lists = $('.newProductDetailContainer .techSpeContainer .techSpeItem ul');\n\n//     if ($container.length === 0 || $titles.length < 2 || $lists.length < 2) {\n//         $('.technicalSpecificationsRow .showMoreSpec').addClass('d-none');\n//         return;\n//     }\n\n//     const firstSpec = $container[0] && $container[0].offsetHeight || 0;\n//     const secSpecTitle = $titles[1] && $titles[1].offsetHeight || 0;\n//     const secSpecChildren = $lists[1] && $lists[1].offsetHeight || 0;\n//     const secSpecChildrenCount = $lists[1] && $lists[1].childElementCount || 1;\n\n//     const multiply = secSpecChildrenCount < 2 ? 1 : 2;\n\n//     const cut = firstSpec + secSpecTitle + (secSpecChildren / secSpecChildrenCount) * multiply + 81;\n\n//     $('.newProductDetailContainer #body-technicalSpecifications').css({\n//         height: cut,\n//         overflow: 'hidden'\n//     });\n\n//     if ($titles.length < 2 || !$titles[2]) {\n//         $('.technicalSpecificationsRow .showMoreSpec').addClass('d-none');\n//     }\n// }\n\nfunction cutTechnicalSpec() {\n\n    const $container = $('.newProductDetailContainer .techSpeContainer .techSpeItem');\n    if ($container.length === 0) {\n        console.warn('No techSpeItem container found');\n        $('.technicalSpecificationsRow .showMoreSpec').addClass('d-none');\n        return;\n    }\n\n    let liCount = 0;
13\n    let cutHeight = 0;\n    let stop = false;\n\n    $container.each(function (index, item) {\n        const $title = $(item).find('.techSpeItemTitle');\n        const $lis = $(item).find('ul.techSpeBack > li');\n\n        let liConsumedInThisBlock = 0;\n\n        if ($title.length && !stop) {\n            const h = $title.eq(0).outerHeight(true);\n            cutHeight += h;\n        }\n\n        for (let i = 0; i < $lis.length && !stop; i++) {\n            const li = $lis[i];\n            const h = $(li).outerHeight(true);\n            cutHeight += h;\n            liCount += 1;\n            liConsumedInThisBlock += 1;\n\n            if (liCount >= 5) {\n                stop = true;\n            }\n        }\n\n        // Aggiungiamo il margin-bottom SOLO se abbiamo consumato **tutti** i li di questo blocco\n        if (!stop && liConsumedInThisBlock === $lis.length) {\n            cutHeight += 25;\n        }\n\n        if (stop) return false; // break\n    });\n\n    // Extra margine\n    const extra = 48; //mt5 sezione\n    cutHeight += extra;\n\n    // Applica altezza e overflow\n    $('.newProductDetailContainer #body-technicalSpecifications').css({\n        height: cutHeight,\n        overflow: 'hidden'\n    });\n\n    // Mostra il \"Mostra tutte le specifiche\" solo se ci sono più di 5 li\n    const totalLi = $('.newProductDetailContainer .techSpeContainer .techSpeRow').length;\n    if (totalLi > 5) {\n        $('.technicalSpecificationsRow .showMoreSpec').removeClass('d-none');\n    } else {\n        $('.technicalSpecificationsRow .showMoreSpec').addClass('d-none');\n    }\n}\n\n\n// $('.technicalSpecificationsRow .input-wrapper input').on('keypress', function () {\n//     // if ($('.technicalSpecificationsRow .input-wrapper input')[0].value.length == 0) {\n//     //     $('.technicalSpecificationsRow .input-wrapper .submit-button, .technicalSpecificationsRow .input-wrapper, .technicalSpecificationsRow .input-wrapper input').removeClass('keypress');\n//     //     $('.technicalSpecificationsRow .input-wrapper .submit-button').text('');\n//     // } else {\n//     $('.technicalSpecificationsRow .input-wrapper .submit-button').removeClass('ongoing');\n//     $('.technicalSpecificationsRow .input-wrapper .submit-button').attr('data-position', '0');\n//     $('.technicalSpecificationsRow .input-wrapper .submit-button, .technicalSpecificationsRow .input-wrapper, .technicalSpecificationsRow .input-wrapper input').addClass('keypress');\n//     var searchFocus = $('.technicalSpecificationsRow .input-wrapper .submit-button').data('search-focus');\n//     $('.technicalSpecificationsRow .input-wrapper .submit-button').text(searchFocus);\n//     // }\n// })\n\n$('.technicalSpecificationsRow .input-wrapper input').on('focus', function () {\n    $('.technicalSpecificationsRow .input-wrapper .submit-button').removeClass('ongoing');\n    $('.technicalSpecificationsRow .input-wrapper .submit-button').attr('data-position', '0');\n    $('.technicalSpecificationsRow .input-wrapper .submit-button, .technicalSpecificationsRow .input-wrapper, .technicalSpecificationsRow .input-wrapper input').addClass('keypress');\n\n    var searchFocus = $('.technicalSpecificationsRow .input-wrapper .submit-button').data('search-focus');\n    $('.technicalSpecificationsRow .input-wrapper .submit-button').text(searchFocus);\n});\n\n$('.technicalSpecificationsRow .showMoreSpec').on('click', function () {\n    $(this).toggleClass('show');\n    var showText = $(this).data('show');\n    var hideText = $(this).data('hide');\n\n    if ($(this).hasClass('show')) {\n        cutTechnicalSpec();\n        $(this).text(showText);\n        let position = $('#body-technicalSpecifications')[0].getBoundingClientRect();\n        window.scrollTo(position.left, position.top + window.scrollY - 150);\n    } else {\n        $('.newProductDetailContainer #body-technicalSpecifications').css(\"height\", 'auto');\n        $('.newProductDetailContainer #body-technicalSpecifications').css(\"overflow\", 'unset');\n        $(this).text(hideText);\n    }\n});\n\n$(document).on('input', '.technicalSpecificationsRow .input-wrapper .tech-search-field', function () {\n    const $this = $(this);\n    const value = $.trim($this.val());\n\n    // se c’è almeno 1 carattere e non ho già sparato l’evento\n    if (value.length >= 1 && !$this.data('gtm-fired')) {\n        const $parent = $this.closest('.newProductDetailContainer');\n        var data = {\n            productCategory: $parent.data('productcategory') || '',\n            productName: $parent.data('productname') || '',\n            productId: $parent.data('pid') || ''\n        };\n\n        GTM_techSearchField(data);\n\n        // per evitare più push dallo stesso campo\n        $this.data('gtm-fired', true);\n    }\n});\n\n// gestione Enter: submit simulato\n$(document).on('keydown', '.technicalSpecificationsRow .input-wrapper .tech-search-field', function (e) {\n    if (e.key === 'Enter') {\n        e.preventDefault();\n        $(this).siblings('.submit-button').trigger('click');\n    }\n});\n\n$(document).on('click', '.technicalSpecificationsRow .input-wrapper .submit-button', function () {\n    const $button = $(this);\n    const $input = $('.technicalSpecificationsRow .tech-search-field');\n    const inputVal = $input.val().trim();\n    const lastSearch = $button.attr('data-last-search') || '';\n\n    if (inputVal !== '') {\n        // Se il testo dell'input è cambiato, resetto la ricerca\n        if (inputVal !== lastSearch) {\n            $button.removeClass('ongoing').attr('data-position', '0');\n            $('.techSpeContainer .active').removeClass('active');\n        }\n\n        if (!$button.hasClass('ongoing')) {\n            $button.attr('data-last-search', inputVal); // salvo la nuova ricerca\n            const list = $('.techSpeItem').children();\n            const text = inputVal.toUpperCase();\n\n            list.each(function () {\n                const $item = $(this);\n                const itemText = $item.text().toUpperCase();\n\n                if (itemText.includes(text)) {\n                    if ($('.technicalSpecificationsRow .showMoreSpec').hasClass('show')) {\n                        $('.technicalSpecificationsRow .showMoreSpec').trigger('click');\n                    }\n\n                    if ($item.children().length === 0) {\n                        $item.addClass('active');\n                    } else {\n                        $item.children().each(function () {\n                            if ($(this).text().toUpperCase().includes(text)) {\n                                $(this).addClass('active');\n                            }\n                        });\n                    }\n                }\n            });\n\n            const $results = $('.techSpeContainer .active');\n            if ($results.length > 0) {\n                $('.technicalSpecificationsRow .input-wrapper .error-noresult').addClass('d-none');\n                $results[0].scrollIntoView({\n                    behavior: 'smooth',\n                    block: \"start\",\n                    inline: \"center\"\n                });\n            } else {\n                $('.technicalSpecificationsRow .input-wrapper .error-noresult').removeClass('d-none');\n            }\n\n            $button.addClass('ongoing');\n\n        } else {\n            // Scroll tra i risultati trovati\n            let i = parseInt($button.attr('data-position') || '0', 10);\n            const $results = $('.techSpeContainer .active');\n            const next = (i + 1) % $results.length;\n\n            $results[next].scrollIntoView({\n                behavior: 'smooth',\n                block: \"start\",\n                inline: \"center\"\n            });\n\n            $button.attr('data-position', next);\n        }\n    } else {\n        $('.techSpeContainer .active').removeClass('active');\n        $button.removeClass('ongoing').attr('data-position', '0').removeAttr('data-last-search');\n    }\n});
13\n\n\n\nfunction cutTextDescription() {\n    $('.newProductDetailContainer #body-textDescription').css(\"height\", '777px');\n    $('.newProductDetailContainer #body-textDescription').css(\"overflow\", \"hidden\");\n}\n\nfunction showTextDescription() {\n    $('.newProductDetailContainer #body-textDescription').css(\"height\", 'auto');\n    $('.newProductDetailContainer #body-textDescription').css(\"overflow\", 'unset');\n}\n\n$('.showMoreDescription').on('click', function () {\n    $(this).toggleClass('show');\n    $('.box-shadow').toggleClass('show');\n    var showText = $(this).data('show');\n    var hideText = $(this).data('hide');\n\n    if ($(this).hasClass('show')) {\n        cutTextDescription();\n        $(this).text(showText);\n        let position = $('.newProductDetailContainer #body-textDescription')[0].getBoundingClientRect();\n        window.scrollTo(position.left, position.top + window.scrollY - 150);\n    } else {\n        showTextDescription();\n        $(this).text(hideText);\n    }\n\n    const $container = $('#body-textDescription');\n\n    if ($container.hasClass('expanded')) {\n        // Nasconde tutto\n        $container.removeClass('expanded');\n        cutTextDescription(); // Richiama la funzione per tagliare\n        $(this).text($(this).data('show'));\n    } else {\n        // Mostra tutto\n        $container.addClass('expanded');\n        $container.css({\n            height: 'auto',\n            overflow: 'unset'\n        });\n        $(this).text($(this).data('hide'));\n    }\n});\n\nconst descriptionSelectors = [\n  \"#ContainerIcecat\",\n  \"#ccs-explore-product\",\n  \"#flix-inpage\",\n  \"#target\",\n  \".loadbeeTabContent\",\n];\n\nfunction hasVisibleContent($el) {\n  if (!$el || $el.length === 0) return false;\n\n  const children = $el\n    .children()\n    .not(\"script, style, link, noscript\")\n    .filter(function () {\n      const $child = $(this);\n\n      // Escludi iframe con display: none\n      if ($child.is(\"iframe\") && $child.css(\"display\") === \"none\") {\n        return false;\n      }\n\n      return true;\n    });\n\n  // Se ha più di 1 figlio significativo, è valido\n  if (children.length > 1) return true;\n\n  // Se ha solo uno ed è diverso da .body-textDescription, è valido\n  if (children.length === 1 && !children.is(\".body-textDescription\"))\n    return true;\n\n  // Se ha solo .body-textDescription, controlla se almeno c’è un testo sensato\n  if (children.length === 1 && children.is(\".body-textDescription\")) {\n    return children.text().trim().length > 50;\n  }\n\n  return false;\n}\n\nfunction anyContentPresent() {\n  return descriptionSelectors.some((selector) => {\n    const $el = $(selector);\n    const result = hasVisibleContent($el);\n    return result;\n  });\n}\n\n$(window).on(\"load\", function () {\n  // Product security link - append to technical info section\n  if ($(\".productSecurityContainer\").length > 0) {\n    var content = $(\".productSecurityContainer\").html();\n    $(\"#body-technicalSpecifications .techSpeContainer\").append(content);\n    // $(content).insertAfter($('#body-technicalSpecifications .techSpeContainer'));\n  }\n\n  cutTechnicalSpec();\n  cutCompareTable();\n  selectCompareDifferences();\n\n  if (!anyContentPresent()) {\n    $(\".showMoreDescription\").addClass(\"d-none\");\n    showTextDescription();\n    return; // Esce subito se non c'è nessun contenuto\n  }\n\n  for (let selector of descriptionSelectors) {\n    const $el = $(selector);\n    if (hasVisibleContent($el)) {\n      $(\".showMoreDescription\").addClass(\"d-none\");\n      cutTextDescription();\n      break;\n    }\n  }\n});\n\n$(window).on(\"scroll\", function () {\n  if (!anyContentPresent()) return;\n\n  const $description = $(\"#body-textDescription\");\n\n  // ❗ Se è già stato espanso, non fare nulla\n  if ($description.hasClass(\"expanded\")) return;\n\n  for (let selector of descriptionSelectors) {\n    const $el = $(selector);\n    if (hasVisibleContent($el)) {\n      $(\".showMoreDescription\").removeClass(\"d-none\");\n      cutTextDescription();\n      break;\n    }\n  }\n});\n\n$(window).on(\"scroll\", function () {\n  if (window.device == \"desktop\") {\n    var $stickyBar = $(\"#pdpStickyBar\");\n    var $featuresName = $(\".newProductDetailContainer .productFeaturesName\");\n    if ($stickyBar.length && $featuresName.length) {\n      if (!$featuresName.isInViewport()) {\n        $stickyBar.find(\".left-content .name\").removeClass(\"d-none\");\n        $stickyBar.find(\".right-content\").removeClass(\"d-md-none\");\n      } else {\n        $stickyBar.find(\".left-content .name\").addClass(\"d-none\");\n        $stickyBar.find(\".right-content\").addClass(\"d-md-none\");\n      }\n    }\n  }\n});
13\n\n// function cutCompareTable() {\n//     var $table = $('.compare-table');\n//     var $section0Header = $('.compare-table .section-header.section-0')[0];\n//     var $section1Header = $('.compare-table .section-header.section-1')[0];\n\n//     if ($table.length === 0 || !$section0Header || !$section1Header) {\n//         $('.compare.showMoreSpec').addClass('d-none');\n//         return;\n//     }\n\n//     var firstComparisonTitle = $section0Header.offsetHeight;\n//     var firstComparisonRows = $('.compare-table .tech-info-row.section-0');\n//     var secondComparisonRows = $('.compare-table .tech-info-row.section-1');\n\n//     var firstComparisonHeight = 0;\n//     var secondComparisonHeight = 0;\n\n//     var secondComparisonRowChild = (secondComparisonRows.length > 0 && secondComparisonRows[0])\n//         ? secondComparisonRows[0].childElementCount\n//         : 0;\n\n//     var secondComparisonTitle = $section1Header.offsetHeight;\n\n//     var tableToggleEl = $('.table-toggle')[0];\n//     var productInfoEl = $('.table-product-info')[0];\n//     var reviewInfoEl = $('.table-review-info')[0];\n//     var shippingInfoEl = $('.table-shipping-info')[0];\n\n//     var tableToggle = tableToggleEl ? tableToggleEl.offsetHeight : 0;\n//     var productInfo = productInfoEl ? productInfoEl.offsetHeight : 0;\n//     var reviewInfo = reviewInfoEl ? reviewInfoEl.offsetHeight : 0;\n//     var shippingInfo = shippingInfoEl ? shippingInfoEl.offsetHeight : 0;\n\n//     for (var i = 0; i < firstComparisonRows.length; i++) {\n//         firstComparisonHeight += firstComparisonRows[i] ? firstComparisonRows[i].offsetHeight : 0;\n//     }\n\n//     for (var j = 0; j < 2 && j < secondComparisonRows.length; j++) {\n//         secondComparisonHeight += secondComparisonRows[j] ? secondComparisonRows[j].offsetHeight : 0;\n//     }\n\n//     var multiply = secondComparisonRowChild < 2 ? 1 : 2;\n\n//     var cut = productInfo + reviewInfo + shippingInfo + tableToggle +\n//               firstComparisonTitle + firstComparisonHeight +\n//               secondComparisonTitle + secondComparisonHeight;\n\n//     $('.newProductDetailContainer .compare-table-container').css({\n//         height: cut,\n//         'overflow-y': 'hidden'\n//     });\n\n//     var allHeaders = $('.compare-table .section-header');\n//     if (allHeaders.length < 2 || !allHeaders[2]) {\n//         $('.compare.showMoreSpec').addClass('d-none');\n//     }\n// }\n\nfunction cutCompareTable() {\n  $(\".compare-table-container .product-header .product-name\").shave(90);\n\n  const $table = $(\".compare-table\");\n  const $rows = $(\".compare-table tr.tech-info-row\");\n\n  if ($table.length === 0 || $rows.length === 0) {\n    $(\".compare.showMoreSpec\").addClass(\"d-none\");\n    console.warn(\"❌ Nessuna riga di confronto trovata\");\n    return;\n  }\n\n  let cutHeight = 0;\n  let rowCount = 0;\n  let techRowIndexes = [];\n\n  // Somma le altezze delle prime 5 righe .tech-info-row\n  $rows.each(function (i, row) {\n    if (rowCount >= 5) return false;\n    const h = $(row).outerHeight(true);\n    cutHeight += h;\n    rowCount++;\n    techRowIndexes.push($(row).index());\n  });\n\n  // Includi solo section-header che si trovano prima o nello stesso gruppo delle prime 5 tech-info-row\n  $(\".compare-table tr.section-header\").each(function () {\n    const headerIndex = $(this).index();\n    if (headerIndex < Math.max(...techRowIndexes)) {\n      const h = $(this).outerHeight(true);\n      cutHeight += h;\n    }\n  });\n\n  // Aggiunge le altre sezioni (se presenti)\n  const blocks = [\n    \".table-product-info\",\n    \".table-review-info\",\n    \".table-shipping-info\",\n    \".table-toggle\",\n  ];\n\n  blocks.forEach((sel) => {\n    const el = $(sel)[0];\n    if (el) {\n      const h = el.offsetHeight;\n      cutHeight += h;\n    }\n  });\n\n  // Applica altezza e overflow\n  $(\".compare-table-container\").css({\n    height: cutHeight + \"px\",\n    \"overflow-y\": \"hidden\",\n  });\n\n  // Mostra o nasconde il pulsante\n  if ($rows.length > 5) {\n    $(\".compare.showMoreSpec\").removeClass(\"d-none\");\n  } else {\n    $(\".compare.showMoreSpec\").addClass(\"d-none\");\n  }\n}\n\n$(\".compare.showMoreSpec\").on(\"click\", function () {\n  $(this).toggleClass(\"show\");\n  var showText = $(this).data(\"show\");\n  var hideText = $(this).data(\"hide\");\n\n  if ($(this).hasClass(\"show\")) {\n    cutCompareTable();\n    $(this).text(showText);\n    let position = $(\"#confronta\")[0].getBoundingClientRect();\n    window.scrollTo(position.left, position.top + window.scrollY - 150);\n  } else {\n    $(\".newProductDetailContainer .compare-table-container\").css(\n      \"height\",\n      \"auto\",\n    );\n    $(\".newProductDetailContainer .compare-table-container\").css(\n      \"overflow-y\",\n      \"unset\",\n    );\n    $(this).text(hideText);\n  }\n});\n\nfunction selectCompareDifferences() {\n  $(\".compare-table tr.tech-info-row\").each(function () {\n    const $row = $(this);\n    const $cells = $row.find(\"td\");\n\n    if ($cells.length === 0) return;\n\n    // Estrai il testo della prima .tab\n    const firstValue = $cells.first().find(\".tab\").text().trim();\n\n    // Verifica se tutti i td hanno lo stesso valore nella .tab\n    const allSame = $cells.toArray().every((td) =>
13 {\n      const cellValue = $(td).find(\".tab\").text().trim();\n      return cellValue === firstValue;\n    });\n\n    if (allSame) {\n      $cells.addClass(\"same\");\n      $row.find(\"th\").addClass(\"same\");\n      $row.addClass(\"same-row\");\n    }\n  });\n}\n\n$(document).on(\"ready\", function () {\n  cutTechnicalSpec();\n  cutCompareTable();\n  selectCompareDifferences();\n});\n\n$(document).ready(function () {\n  const $checkboxMobile = $(\"#flagDiffMobile\");\n  const $checkboxDesktop = $(\"#flagDiffDesktop\");\n\n  function updateUI(checked) {\n    // Mostra/nasconde righe same-row\n    $(\"tr.same-row\").toggle(!checked);\n\n    // Sincronizza entrambi i checkbox\n    $checkboxMobile.prop(\"checked\", checked);\n    $checkboxDesktop.prop(\"checked\", checked);\n\n    // Reset altezza tabella\n    $(\".newProductDetailContainer .compare-table-container\").css({\n      height: \"auto\",\n      \"overflow-y\": \"unset\",\n    });\n\n    // Aggiorna testo bottone showMoreSpec\n    const hideText = $(\".compare.showMoreSpec\").data(\"hide\");\n    if (hideText) $(\".compare.showMoreSpec\").text(hideText);\n\n    // Aggiorna riga finale visibile\n    $(\".tech-info-row\").removeClass(\"last-visible-row\");\n    const $visibleRows = $(\".tech-info-row:visible\");\n    if ($visibleRows.length > 0) {\n      $visibleRows.last().addClass(\"last-visible-row\");\n    }\n  }\n\n  // Ascolta cambiamenti su entrambi\n  $checkboxMobile.on(\"change\", function () {\n    updateUI($(this).is(\":checked\"));\n  });\n\n  $checkboxDesktop.on(\"change\", function () {\n    updateUI($(this).is(\":checked\"));\n  });\n\n  // Permetti il toggle anche cliccando sul contenitore\n  $(\".differences-toggle\").on(\"click\", function (e) {\n    if ($(e.target).is(\"input\") || $(e.target).is(\"label\")) return;\n    const isChecked = $(this).find('input[type=\"checkbox\"]').prop(\"checked\");\n    updateUI(!isChecked);\n  });\n});\n\n$(document).ready(function () {\n  $(\"input#flagDiff\").on(\"change\", function () {\n    if ($(this).is(\":checked\")) {\n      $(\"tr.same-row\").hide();\n    } else {\n      $(\"tr.same-row\").show();\n    }\n  });\n});\n\n$(document).ready(function () {\n  var viewSize = $(window).width();\n  if (viewSize > 768) {\n    $(\".line-item-name\").shave(69);\n  }\n\n  //scroll to the ratings\n  if ($(\"#body-reviews\").length > 0) {\n    $(document).on(\"click\", \".gotoratings\", function () {\n      if (device == \"mobile\") {\n        window.topscroll = -150;\n        if ($('[data-target=\"#body-reviews\"]').hasClass(\"collapsed\")) {\n          $('[data-target=\"#body-reviews\"]').trigger(\"click\");\n        }\n      } else {\n        window.topscroll = -250;\n        if (\n          !$('[data-target=\"#body-technicalSpecifications\"]').hasClass(\n            \"collapsed\",\n          )\n        ) {\n          $('[data-target=\"#body-technicalSpecifications\"]').trigger(\"click\");\n        }\n        if (!$('[data-target=\"#body-textDescription\"]').hasClass(\"collapsed\")) {\n          $('[data-target=\"#body-textDescription\"]').trigger(\"click\");\n        }\n      }\n      setTimeout(() => {\n        scrollToElement(\"#body-reviews\", {\n          offset: window.topscroll,\n          duration: 900,\n        });\n      }, 400);\n    });\n  } else {\n    $(\".gotoratings\").hide();\n  }\n\n  // Impedisci la chiusura accidentale se si clicca ovunque nella modale (tranne la X)\n  $(document).on(\"click\", \"#productModal\", function (e) {\n    const $target = $(e.target);\n\n    // Se si è cliccato sul backdrop (fuori dalla .modal-dialog), blocca la chiusura\n    const clickedOnDialog = $target.closest(\".modal-dialog\").length > 0;\n    const clickedOnClose = $target.closest(\".close\").length > 0;\n\n    // Solo se NON si è cliccato sul dialog o sulla X\n    if (!clickedOnDialog && !clickedOnClose) {\n      e.stopImmediatePropagation();\n      e.preventDefault();\n    }\n  });\n\n  $(document).on(\"show.bs.modal\", \"#productModal\", function (e) {\n    const modalInstance = $(this).data(\"bs.modal\");\n    if (modalInstance) {\n      modalInstance._config.backdrop = \"static\";\n      modalInstance._config.keyboard = false;\n    }\n\n    var triggerElement = $(e.relatedTarget);\n    if (triggerElement.length) {\n      $(\"#productModal #images-tab\").tab(\"show\"); // Forza la tab attiva\n    } else {\n      $(\"#productModal #videos-tab\").tab(\"show\");\n    }\n\n    if (stickyInstance) {\n      stickyInstance.cleanup();\n      stickyInstance = null;\n    }\n  });\n\n  $(document).on(\"hide.bs.modal\", \"#productModal\", function () {\n    initStickyIfNeeded();\n\n    var video = $(\".video-item>iframe\");\n    if (video.length) {\n      var url = video.attr(\"src\");\n      video.attr(\"src\", \"\");\n      setTimeout(() =>
13 {\n        video.attr(\"src\", url);\n      }, 250);\n    }\n  });\n\n  for (let i = 0; i < $(\".carousel-indicators-slider\").length; i++) {\n    const sliderList = document.querySelectorAll(\".scrollable-carousel-\" + i);\n    let isDown = false;\n    let startX;\n    let scrollLeft;\n\n    sliderList.forEach(function (slider) {\n      $(\".scrollable-carousel-\" + i).bind(\"touchstart\", (e) => {\n        isDown = true;\n        startX = e.changedTouches[0].pageX - slider.offsetLeft;\n        scrollLeft = slider.scrollLeft;\n      });\n\n      $(\".scrollable-carousel-\" + i).bind(\"touchend\", (e) => {\n        isDown = false;\n        $(\".scrollable-carousel-\" + i).removeClass(\"active\");\n      });\n\n      $(\".scrollable-carousel-\" + i).on(\"touchmove\", (e) => {\n        $(\".scrollable-carousel-\" + i).addClass(\"active\");\n        const x = e.changedTouches[0].pageX - slider.offsetLeft;\n        const walk = (x - startX) * 2; //scroll-fast\n        $(slider).scrollLeft(scrollLeft - walk);\n      });\n    });\n  }\n\n  //Switch Video function\n\n  // if ($('.carousel-indicators-slider').eq(0).children(\".list-inline-item\").length > 2) {\n  //     var video = $('.carousel-indicators-slider').eq(0).find('.video-item');\n  //     if (video.length) {\n  //         $('.carousel-indicators-slider').eq(0).children(\".list-inline-item\").eq(2).before(video);\n  //         $('.carousel-indicators-slider').eq(0).children(\".list-inline-item\").each(function (i, e) {\n  //             if (i > 2) {\n  //                 $(e).find(\"a\").attr(\"data-slide-to\", i - 1);\n  //             }\n  //         })\n  //     }\n\n  //     var videoModal = $('.carousel-indicators-slider').eq(1).find('.video-item');\n  //     if (videoModal.length) {\n  //         $('.carousel-indicators-slider').eq(1).children(\".list-inline-item\").eq(2).before(videoModal);\n  //         $('.carousel-indicators-slider').eq(1).children(\".list-inline-item\").each(function (i, e) {\n  //             if (i > 2) {\n  //                 $(e).find(\"a\").attr(\"data-slide-to\", i - 1);\n  //             }\n  //         })\n  //     }\n  // }\n\n  // Disable sticky sidebar if Younited enabled or desktop < 1920px (fix view on small desktop)\n  // if ($('.younited-container').length > 0 || viewSize < 1920) {\n  //     $('.first-view').addClass('nosticky');\n  //     if (viewSize > 1024) {\n  //         var sidebarHeight = $('[data-component=productCartSettings]').outerHeight();\n  //         $('.first-view.nosticky .product-section').css('min-height', sidebarHeight);\n  //     } else {\n  //         $('.first-view.nosticky .product-section').removeAttr('style');\n  //     }\n  // }\n\n  // Promo price banner sticky mobile\n  if ($(\".promo-price-banner\").length > 0) {\n    if (viewSize < 768) {\n      var stickybarHeight = $(\"[data-component=cartOnMobile]\").outerHeight();\n      $(\".promo-price-banner\").css(\"bottom\", stickybarHeight);\n    }\n\n    $(\".promo-price-banner\").on(\"click\", \"[data-href]\", function () {\n      var url = $(this).data(\"href\");\n      location.href = url;\n    });\n  }\n\n  let stickyInstance;\n\n  function initStickyIfNeeded() {\n    if (window.innerWidth > 1024 && !stickyInstance) {\n      stickyInstance = stickybits(\".leftStickyColumn\", {\n        stickyBitStickyOffset: 150,\n      });\n    } else if (window.innerWidth <= 1024 && stickyInstance) {\n      stickyInstance.cleanup(); // distrugge lo sticky\n      stickyInstance = null;\n    }\n  }\n\n  // Init on load\n  initStickyIfNeeded();\n\n  function stickyMobileTop() {\n    const stickyElement = document.getElementById(\"pdpStickyTop\");\n    if (!stickyElement) {\n      return;\n    }\n    const container = document.querySelector(\".newProductDetailContainer\");\n\n    function handleSticky() {\n      const stickyTopOffset = stickyElement.offsetTop;\n      const scrollTop = window.scrollY || window.pageYOffset;\n      const containerTop = container.offsetTop;\n      const containerBottom = containerTop + container.offsetHeight;\n      const stickyHeight = stickyElement.offsetHeight;\n\n      const stickyTriggerPoint = stickyTopOffset;\n\n      if (\n        scrollTop >= stickyTriggerPoint &&\n        scrollTop + stickyHeight < containerBottom\n      ) {\n        stickyElement.classList.add(\"sticky-fixed\");\n      } else if (scrollTop < stickyTriggerPoint) {\n        stickyElement.classList.remove(\"sticky-fixed\");\n      }\n    }\n\n    window.addEventListener(\"scroll\", handleSticky);\n    window.addEventListener(\"resize\", handleSticky);\n  }\n\n  stickyMobileTop();\n\n  // Re-init on resize\n  window.addEventListener(\"resize\", function () {\n    initStickyIfNeeded();\n  });\n\n  $(\".dimension-tab-wrapper.has-tab .tab\").on(\"click\", function () {\n    const $wrapper = $(this).closest(\".dimension-tab-wrapper\");\n\n    $wrapper.find(\".tab\").removeClass(\"active\");\n    $(this).addClass(\"active\");\n\n    const isIncasso = $(this).hasClass(\"tab-incasso\");\n\n    $wrapper.find(\".dimension-image\").removeClass(\"active\");\n    $wrapper\n      .find(isIncasso ? \".image-incasso\" : \".image-freestanding\")\n      .addClass(\"active\");\n  });\n\n  $(\".js-toggle-tooltip\").on(\"click\", function (e) {\n    $(\".custom-tooltip\").toggleClass(\"d-none\");\n  });\n\n  $(document).on(\"click\", function (e) {\n    if (!$(e.target).closest(\".js-toggle-tooltip, .custom-tooltip\").length) {\n      $(\".custom-tooltip\").addClass(\"d-none\");\n    }\n  });\n});\n\n$(document).on(\"click\", \".video-item\", function (e) {\n    e.preventDefault();\n    // Apro la modale\n    $('#productModal').modal('show');\n});\n\n$('a[data-toggle=\"tab\"][href=\"#images\"]').on('shown.bs.tab', function (e) {\n    // Quando torni sul tab immagini resetta lo slider\n    // $('#custCarouselModal').carousel(0); // Torna alla prima immagine\n    // $('#custCarouselModal .carousel-inner .carousel-item').removeClass('active');\n    // $('#custCarouselModal .carousel-inner .carousel-item').first().addClass('active');\n\n    // $('.thumbnail-modal .list-inline-item').removeClass('active');\n    // $('.thumbnail-modal .list-inline-item').first().addClass('active');\n});
13\n\n$(document).on('click', '.pdpStickyOptions', function() {\n    var html = $('#modalPdpSticky').html();\n    Swal.fire({\n        customClass: {\n            container: 'sa2emodal pdp-sticky-modal'\n        },\n        showClass: {\n            popup: 'animate__animated animate__fadeIn'\n        },\n        closeButtonHtml: '<i class=\"icon-cancel\"></i>',\n        html: html,\n        padding: '15px',\n        background: '#ffffff',\n        heightAuto: false,\n        showCloseButton: true,\n        showConfirmButton: false,\n        showCancelButton: false\n    });\n});\n\n\n$(window).on('load', function () {\n    //schemaDataProduct\n\n    var bvData = $(\"#bv-jsonld-aggregate-rating-data\")\n    var bvDataReview = $(\"#bv-jsonld-reviews-data\")\n\n    var sfccData = $(\"#sfcc-product-data\")\n\n    if (sfccData && sfccData.length > 0) {\n        var itemReviewedData = JSON.parse(sfccData.html());\n\n        if (bvData && bvData.length > 0) {\n        var bvDataInner = JSON.parse(bvData.html())\n            bvDataInner.aggregateRating.itemReviewed = itemReviewedData;\n\n            var entireDataString = JSON.stringify(bvDataInner);\n            sfccData.html(entireDataString)\n            $(\"#bv-jsonld-aggregate-rating-data\").remove();\n        }\n        if (bvDataReview && bvDataReview.length > 0) {\n            var sfccDataInner = JSON.parse(sfccData.html())\n            var bvDataInner = JSON.parse(bvDataReview.html())\n            for (var review of bvDataInner.review) {\n                review.itemReviewed = itemReviewedData;\n            }\n            var entireData = $.extend(bvDataInner, sfccDataInner);\n\n            var entireDataString = JSON.stringify(entireData);\n            sfccData.html(entireDataString)\n            $(\"#bv-jsonld-reviews-data\").remove();\n        }\n    }\n\n    // Gestione scroll verso #offerteCombinate dopo caricamento componenti asincroni (Swogo)\n    // Lo script in page.isml head ha già: rimosso hash dall'URL, bloccato scrollTo/scrollIntoView\n    if (window._pendingAnchorScroll === '#offerteCombinate') {\n      var anchorTarget = document.getElementById('offerteCombinate');\n      var swogoContainer = document.getElementById('swogo-bundle-1');\n\n      if (swogoContainer && anchorTarget) {\n        // ResizeObserver: aspetta che Swogo finisca di renderizzare (dimensioni stabili)\n        var resizeDebounce = null;\n        var pdpResizeObserver;\n        var fallbackTimer = setTimeout(function () {\n          try {\n            if (pdpResizeObserver) pdpResizeObserver.disconnect();\n          } catch (e) {}\n          if (window._restoreAndScroll) window._restoreAndScroll(anchorTarget);\n        }, 3000);\n\n        pdpResizeObserver = new ResizeObserver(function () {\n          clearTimeout(resizeDebounce);\n          resizeDebounce = setTimeout(function () {\n            try {\n              pdpResizeObserver.disconnect();\n            } catch (e) {}\n            clearTimeout(fallbackTimer);\n            if (window._restoreAndScroll)\n              window._restoreAndScroll(anchorTarget);\n          }, 200);\n        });\n        pdpResizeObserver.observe(swogoContainer);\n      } else {\n        // Swogo non presente: ripristina e scrolla subito\n        if (window._restoreAndScroll) window._restoreAndScroll(anchorTarget);\n      }\n    }\n});\n\nmodule.exports = base;\n\n\n//# sourceURL=webpack:///../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/detail.js?")},
13"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/services.js":
14/*!**************************************************************************************************!*\
15  !*** ../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/services.js ***!
16  \**************************************************************************************************/
17/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n \nfunction enableOtherServicesButton() {\n    if ($('.services-modal .stepTwo').hasClass('d-none')) {\n        $('.services-modal .other-services').removeClass('d-none');\n    } else {\n        $('.services-modal .other-services').addClass('d-none');\n    }\n}\n \nfunction updateServices(id, name, type, mode, remove) {\n    var selectedServices = $('.services-modal .modal-services-wrapper .footer-services').attr('data-services');\n    selectedServices = JSON.parse(selectedServices);\n \n    if (remove) {\n        $('.services-modal .selected-services-list .services-list #' + type).remove();\n        delete selectedServices[type];\n    } else {\n        if (type) {\n            selectedServices[type] = id;\n       \n            if ($('.services-modal .selected-services-list .services-list #' + type).length > 0) {\n                $('.services-modal .selected-services-list .services-list #' + type).text(name);\n            } else {\n                $('.services-modal .selected-services-list .services-list').append('<li id=\"' + type + '\">' + name + '</li>');\n            }\n        } else {\n            switch (mode) {\n                case 'add':\n                    selectedServices[id] = id;\n                    $('.services-modal .selected-services-list .services-list').append('<li id=\"' + id + '\">' + name + '</li>');\n                    break;\n                case 'remove':\n                    $('.services-modal .selected-services-list .services-list #' + id).remove();\n                    delete selectedServices[id];\n   \n                default:\n                    break;\n            }\n        }\n     }\n \n    var selectedServicesN = Object.keys(selectedServices).length;\n \n    if (selectedServicesN > 0) {\n        $('.services-modal .footer-services .selected-services').removeClass('invisible');\n        $('.services-modal .selctedServicesCount').text(selectedServicesN);\n \n        $('.services-modal button.addToCartServices').removeClass('d-none');\n        $('.services-modal .infomessage-add-to-cart').removeClass('d-none');\n        $('.services-modal .close-modal').addClass('d-none');\n \n        if (selectedServicesN == 1) {\n            $('.services-modal .singleService').removeClass('d-none');\n            $('.services-modal .multipleServices').addClass('d-none');\n        } else {\n            $('.services-modal .multipleServices').removeClass('d-none');\n            $('.services-modal .singleService').addClass('d-none');\n        }\n \n        $('.services-modal .reset-services').removeClass('d-none');\n        $('.services-modal .other-services').addClass('d-none');\n \n    } else {\n        $('.services-modal .footer-services .selected-services').addClass('invisible');\n \n        $('.services-modal .reset-services').addClass('d-none');\n \n        enableOtherServicesButton();\n \n        if ($('.services-modal button.addToCartServices').attr('data-from') == 'banner') {\n            $('.services-modal button.addToCartServices').addClass('d-none');\n            $('.services-modal .infomessage-add-to-cart').addClass('d-none');\n        }\n    }\n \n    $('.services-modal .modal-services-wrapper .footer-services').attr('data-services', JSON.stringify(selectedServices));\n}\n \nfunction clearServices() {\n    $('.modal-services-wrapper .footer-services').attr('data-services', '{}');\n    $('.selected-services-list .services-list').empty();\n \n    $('.selected-services-list').removeClass('open');\n    $('.footer-services .selected-services').addClass('invisible');\n}\n \nfunction choiceSelection() {\n    $(document).on('click', '.choice-selector', function (e, data) {\n        var $target = $(this).attr('data-target') || $(this).find('input').attr('data-target');\n \n        if($(this).data('pdf')) {\n            var tieteamPdf = $(this).data('pdf');\n            $(this).parent().parent().find('.icon-pdf').attr('href', tieteamPdf)\n        }\n \n        if ($(this).attr('data-target')) {\n            $(this).prop('checked', true);\n        } else {\n            $(this).find('input').prop('checked', true);\n        }\n \n         $(this).parents('.service-card').removeClass('selected');\n \n        $(this).parents('.service-card').find('.description-wrapper .descr').addClass('d-none');\n \n        if (data && data.init) {\n            $($target).removeClass('d-none');\n        } else {\n            $('.services-modal ' + $target).removeClass('d-none');\n            if ($('.services-modal ' + $target).find('.choice-selection .btn').hasClass('selected')) {\n                // $(this).parents('.service-card').addClass('selected');\n            }\n        }\n    });\n \n    $(document).on('click', '.choice-selection .btn', function (e) {\n        var textAdd = $(this).attr('data-add');\n        $(this).parents('.service-card').find('.choice-selection .btn').removeClass('selected').html('').text(textAdd);\n        var obj = $('.services-modal .modal-services-wrapper .footer-services').attr('data-services', JSON.stringify(obj));\n        var $inputChecked = $(this).parents('.service-card').find('input
17:checked');\n        var name = $inputChecked.attr('name');\n        var id = $inputChecked.attr('data-id');\n\n        if (obj[0].dataset.services.indexOf(id) < 0) {\n            var textAdd = $(this).attr('data-add');\n                var textAdded = $(this).attr('data-added');\n     \n                $(this).parents('.service-card').removeClass('selected');\n                $(this).removeClass('selected').html('').text(textAdd);\n                $(this).addClass('selected').html(textAdded);\n                $(this).parents('.service-card').addClass('selected');\n     \n                $('.reset-services').removeClass('d-none');\n                $('.services-modal .other-services').addClass('d-none');\n                var $inputChecked = $(this).parents('.service-card').find('input:checked');\n                updateServices($inputChecked.attr('data-id'), $inputChecked.attr('data-name'), $inputChecked.attr('name'), null, false);\n        } else {\n                var textAdd = $(this).attr('data-add');\n                var textAdded= $(this).attr('data-added');\n                $(this).parents('.service-card').addClass('selected');\n                $(this).addClass('selected').html('').text(textAdded);\n                $(this).removeClass('selected').html(textAdd);\n                $(this).parents('.service-card').removeClass('selected');\n           \n                $('.services-modal .other-services').addClass('d-none');\n                   \n                var $input = $(this).parents('.service-card').find('input');\n                updateServices($input.attr('data-id'), $input.attr('data-name'), $input.attr('name'), null, true);\n        }\n\n        if (obj[0].dataset.services.indexOf(name) < 0) {\n            $(this).parents('.service-card').find('.choice-selection .btn').removeClass('selected').html('').text(textAdd);\n        }\n}\n       \n    );\n \n    $(document).on('change', '.additionalServiceOption', function (e) {\n        var mode = null;\n        var $parentElement = $(this).parents('.accordion-element');\n \n        if ($(this).is(':checked')) {\n            $parentElement.addClass('selected');\n            mode = 'add';\n        } else {\n            $parentElement.removeClass('selected');\n            mode = 'remove';\n        }\n \n        updateServices($(this).attr('value'), $(this).attr('name'), null, mode, false);\n    });\n}\n \nfunction resetServices() {\n    $(document).on('click', '.reset-services', function (e) {\n        $(this).addClass('d-none');\n \n        if ($('.services-modal .stepTwo').hasClass('d-none')) {\n            $('.services-modal .other-services').removeClass('d-none');\n            $('.services-modal .close-modal').addClass('d-none');\n        }\n \n        $('.services-modal .choice-selection .btn, .service-card').removeClass('selected');\n \n        $('.services-modal .additionalServiceOption').prop('checked', false);\n        $('.services-modal .accordion-element').removeClass('selected');\n \n        var textAdd = $('.services-modal .choice-selection .btn').attr('data-add');\n        $('.services-modal .choice-selection .btn').text(textAdd);\n \n        clearServices();\n    });\n}\n \nfunction handleSteps() {\n    $(document).on('click', '.other-services', function (e) {\n        nextStep();\n    });\n \n    $(document).on('click', '.view-stepOne', function (e) {\n        $('.services-modal .stepOne, .tab-section').removeClass('d-none');\n        $('.services-modal .stepTwo').addClass('d-none');\n        $('.services-modal .close-modal').addClass('d-none');\n        $('.selected-services-list').removeClass('open');\n        $('.selected-services-list').removeClass('w-40');\n        $('.selected-services-toggler').removeClass('open');\n \n        $(this).addClass('d-none');\n \n        $('.services-modal .stepTwoTitle').addClass('d-none');\n        $('.services-modal .stepOneTitle').removeClass('d-none');\n \n        if ($('.services-modal .reset-services').hasClass('d-none')) {\n            $('.services-modal .other-services').removeClass('d-none');\n        }\n    });\n \n    $(document).on('click', '.addToCartServices', function (e) {\n        e.preventDefault();    \n        const $modal = $(this).closest('.services-modal');    \n        $modal.find('.selected-services-list').removeClass('open');\n        $modal.find('.selected-services-toggler').removeClass('open');\n    \n        const $stepTwo = $modal.find('.stepTwo');\n    \n        if ($stepTwo.length > 0 && $stepTwo.hasClass('d-none')) {\n            nextStep();\n        } else {\n            const redirect = $(this).attr('data-redirect');\n            $('.product-cart-settings').find('.add-cart-container button.add-to-cart').trigger('click', { redirect });\n            Swal.showLoading();\n        }\n    });\n \n    $(document).on('click', '.swal2-close.closeAddToCart', function (e) {\n        e.preventDefault();    \n        clearServices();\n    \n        $('.product-cart-settings').find('.add-cart-container button.add-to-cart').trigger('click');\n    });\n \n    $(document).on('click', '.close-modal', function (e) {\n        e.preventDefault();
17\n        Swal.fire({\n            showConfirmButton: false\n        }).close();\n    });\n}\n \nfunction nextStep() {\n    $('.services-modal .stepOne, .tab-section').addClass('d-none');\n    $('.services-modal .stepTwo').removeClass('d-none');\n \n    $('.services-modal .stepOneTitle').addClass('d-none');\n    $('.services-modal .stepTwoTitle').removeClass('d-none');\n \n    if ($('.services-modal .addToCartServices').hasClass('d-none')) {\n        $('.services-modal .close-modal').removeClass('d-none');\n    }\n \n    $('.services-modal .view-stepOne').removeClass('d-none');\n \n    $('.services-modal .other-services').addClass('d-none');\n}\n \nfunction viewServicesRecap() {\n    $(document).on('click', '.selected-services-toggler', function (e) {\n        $('.services-modal .selected-services-toggler').toggleClass('open');\n        $('.services-modal .selected-services-list').toggleClass('open');\n    });\n \n    $(document).on('click', '.selected-services-toggler', function (e) {\n \n        if ($('.services-modal .selected-services-list').hasClass('open')) {\n            if ($('.stepOne').hasClass('d-none') || $('.stepOne').length == 0) {\n                $('.services-modal .selected-services-list').addClass('w-40');\n            }\n        } else {\n            $('.services-modal .selected-services-list').removeClass('w-40');\n        }\n \n    });\n}\n \nfunction getAdditionalServicesPopup() {\n    var result = [];\n \n    var additionalServices = $('.services-modal .modal-services-wrapper .footer-services').attr('data-services');\n \n    if (additionalServices) {\n        additionalServices = JSON.parse(additionalServices);\n \n        if (Object.keys(additionalServices).length > 0) {\n            Object.keys(additionalServices).map(function (key) {\n                result.push({\n                    \"id\": additionalServices[key],\n                    \"quantity\": 1\n                })\n            });\n        }\n    }\n \n    return result;\n}\n \nfunction updateModalWithOneStep(stepNumber, removeChangeStep) {\n    console.log('REMOVE', removeChangeStep);\n    if (!stepNumber) return;\n\n    if (stepNumber === 1) {\n        // Mostra solo lo stepOne\n        $('.stepOne').removeClass('d-none');\n        $('.stepTwo').addClass('d-none');\n\n        $('.services-modal .stepOneTitle').removeClass('d-none');\n        $('.services-modal .stepTwoTitle').addClass('d-none');\n\n        // Rimuove elementi non necessari per visuale semplificata\n        $('.view-stepOne').addClass('d-none');\n        $('.other-services').removeClass('d-none');\n        $('.close-modal').addClass('d-none');\n\n    } else if (stepNumber === 2) {\n        // Mostra solo lo stepTwo\n        $('.stepOne').addClass('d-none');\n        $('.stepTwo').removeClass('d-none');\n\n        $('.services-modal .stepOneTitle').addClass('d-none');\n        $('.services-modal .stepTwoTitle').removeClass('d-none');\n\n        $('.view-stepOne').removeClass('d-none');\n        $('.other-services').addClass('d-none');\n        $('.tab-section').addClass('d-none');\n        $('.close-modal').removeClass('d-none');\n    }\n\n    if(removeChangeStep) {\n        $('.view-stepOne').addClass('d-none');\n    }\n}\n\nfunction openUrl(url) {\n    if (url) {\n        window.open(url, '_blank');\n    }\n}\n \nfunction contentSlotTileClick() {\n    $(document).on('click', '.modal-services-wrapper .link-pdp, .modal-services-wrapper .tile-name', function (e) {\n        e.preventDefault();\n \n        var url = $(this).closest('.link-pdp').attr('href');\n        openUrl(url)\n    });\n \n    $(document).on('click', '.modal-services-wrapper .pdp-link', function (e) {\n        e.preventDefault();\n \n        var url = $(this).find('a').attr('href');\n        openUrl(url)\n    });\n}\n \nfunction scrollToSpecialServices() {\n    $(document).on('click', '.tab-section .tab-service', function (e) {\n        var $target = $(this).attr('data-scroll-to');\n        var $element = $('.services-modal ' + $target)[0];\n \n        $element.scrollIntoView({\n            behavior: 'smooth'\n        });\n    });\n}\n \nfunction preselectSpecialServices() {\n    $(document).ready(function (e) {\n        $('.selection-wrapper').each((e, selection) =>
17 {\n            if ($(selection).find('.choice-selector input:checked').length == 0) {\n                $(selection).find('.choice-selector input').last().attr('checked', true);\n            }\n \n            $(selection).find('.choice-selector input:checked').trigger('click', {\n                init: true\n            });\n        });\n    })\n}\n \nmodule.exports = {\n    choiceSelection: choiceSelection,\n    resetServices: resetServices,\n    handleSteps: handleSteps,\n    viewServicesRecap: viewServicesRecap,\n    getAdditionalServicesPopup: getAdditionalServicesPopup,\n    updateModalWithOneStep: updateModalWithOneStep,\n    contentSlotTileClick: contentSlotTileClick,\n    scrollToSpecialServices: scrollToSpecialServices,\n    preselectSpecialServices: preselectSpecialServices\n}\n \n\n//# sourceURL=webpack:///../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/services.js?")},
17"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/wishlist.js":
18/*!**************************************************************************************************!*\
19  !*** ../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/wishlist.js ***!
20  \**************************************************************************************************/
21/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\nconst Swal = __webpack_require__(/*! sweetalert2 */ \"../euronics/node_modules/sweetalert2/dist/sweetalert2.all.js\");\nvar baseWishlist = __webpack_require__(/*! wishlist/product/wishlist */ \"../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js\");\nvar criteoTracking = __webpack_require__(/*! ../criteoTracking */ \"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/criteoTracking.js\");\n\nbaseWishlist.addToWishlist = function () {\n\t$(document).on('click', '.add-to-wish-list', function (e) {\n\t\te.preventDefault();\n\t\tvar $this = $(this);\n\t\tvar urlAdd = $(this).data('href');\n\t\tvar urlRemove = $(this).data('href-remove');\n\t\tvar button = $(this);\n\t\tvar pid = $(this).closest('.product-detail').attr('data-pid');\n\t\tvar aftermsg = button.find(\"[data-aftermsg]\").attr(\"data-aftermsg\") || \"\";\n\t\tvar thisDetails = $(this).closest('[data-productinfo]').attr('data-productinfo') || $(this).closest('[data-obj]').attr('data-obj');\n\t\tvar isActive = button.hasClass(\"active\");\n\t\tvar data = {};\n\t\tvar type = 'get';\n\t\tvar url;\n\t\tif (!isActive) {\n\t\t\tdata = {\n\t\t\t\tpid: pid\n\t\t\t}\n\t\t\ttype = 'post';\n\t\t\turl = urlAdd;\n\t\t} else {\n\t\t\turl = urlRemove;\n\t\t}\n\n\t\tif (!url || !pid) {\n\t\t\treturn;\n\t\t}\n\n\n\n\t\t$.spinner().start();\n\t\t$.ajax({\n\t\t\turl: url,\n\t\t\ttype: type,\n\t\t\tdataType: 'json',\n\t\t\tdata: data,\n\t\t\tsuccess: function (data) {\
21n\t\t\t\tif (data.error) {\n\t\t\t\t\tif (data.msg) {\n\t\t\t\t\t\tvar errorHtml = '<div class=\"alert alert-info alert-dismissible valid-cart-error fade show\" role=\"alert\">' +\n\t\t\t\t\t\t\t'<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">' +\n\t\t\t\t\t\t\t'<span aria-hidden=\"true\">&times;</span>' +\n\t\t\t\t\t\t\t'</button>' + data.msg + '</div>';\n\t\t\t\t\t\t$('.error-messaging').append(errorHtml);\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t$('.error-messaging').html(\"\");\n\t\t\t\t\t\t}, 5000);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (data.msg) {\n\t\t\t\t\t\tif (!isActive) {\n\t\t\t\t\t\t\tGTM_addToWishlist(thisDetails);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tSwal.fire({\n\t\t\t\t\t\t\ttitle: \"<h5 style='margin-bottom:0px;color:white'>\" + data.msg + \"</h5>\",\n\t\t\t\t\t\t\tposition: \"center\",\n\t\t\t\t\t\t\twidth: 300,\n\t\t\t\t\t\t\tpadding: '1em',\n\t\t\t\t\t\t\tbackground: '#1d428a',\n\t\t\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\t\t\tshowCloseButton: false,\n\t\t\t\t\t\t\tshowConfirmButton: fal
21se,\n\t\t\t\t\t\t\ttimer: 3000,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (aftermsg) {\n\t\t\t\t\t\tbutton.find(\"[data-aftermsg]\").text(aftermsg);\n\t\t\t\t\t}\n\n\t\t\t\t\t$('.add-to-wish-list').each(function () {\n\t\t\t\t\t\tvar $btn = $(this);\n\t\t\t\t\t\tvar $btnPid = $btn.closest('.product-detail').attr('data-pid');\n\t\t\t\t\t\tif ($btnPid === pid) {\n\t\t\t\t\t\t\tif (isActive) {\n\t\t\t\t\t\t\t\t$btn.removeClass(\"active\");\n\t\t\t\t\t\t\t\t$btn.closest('.product-detail').removeClass(\"active\");\n\t\t\t\t\t\t\t\t$btn.find(\"[data-aftermsg]\").text($btn.attr(\"data-beforemsg\") || \"Aggiungi ai preferiti\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$btn.addClass(\"active\");\n\t\t\t\t\t\t\t\t$btn.closest('.product-detail').addClass(\"active\");\n\t\t\t\t\t\t\t\tif (aftermsg) {\n\t\t\t\t\t\t\t\t\t$btn.find(\"[data-aftermsg]\").text(aftermsg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$.spinner().stop();\n\n\t\t\t\t// tracciamenti\n\t\t\t\tif ($this.parents('.tns-item').length > 0) {\n\t\t\t\t\tcriteoTracking.trackBeacon($this.parents('.tns-item').attr('data-onwishlistbeacon'));\n\t\t\t\t} else if ($this.parents('.sponsor').length > 0) {\n\t\t\t\t\tcriteoTracking.trackBeacon($this.parents('.sponsor').attr('data-onwishlist'));\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function (err) {\n\t\t\t\tvar errorHtml = '<div class=\"alert alert-danger alert-dismissible valid-cart-error fade show\" role=\"alert\">' +\n\t\t\t\t\t'<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">' +\n\t\t\t\t\t'<span aria-hidden=\"true\">&times;</span>' +\n\t\t\t\t\t'</button>' + err + '</div>';\n\t\t\t\t$('.error-messaging').append(errorHtml);\n\t\t\t\t$.spinner().stop();\n\t\t\t}\n\t\t});\n\t});\n}\n\n\nmodule.exports = baseWishlist;\n\n//# sourceURL=webpack:///../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/wishlist.js?")},
vendor: 1,781 bytes, lines 21-25
21"../euronics/node_modules/performance-now/lib/performance-now.js":
22/*!***********************************************************************!*\
23  !*** ../euronics/node_modules/performance-now/lib/performance-now.js ***!
24  \***********************************************************************/
25/*! no static exports found */function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(process) {// Generated by CoffeeScript 1.12.2\n(function() {\n  var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n  if ((typeof performance !== "undefined" && performance !== null) && performance.now) {\n    module.exports = function() {\n      return performance.now();\n    };\n  } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {\n    module.exports = function() {\n      return (getNanoSeconds() - nodeLoadTime) / 1e6;\n    };\n    hrtime = process.hrtime;\n    getNanoSeconds = function() {\n      var hr;\n      hr = hrtime();\n      return hr[0] * 1e9 + hr[1];\n    };\n    moduleLoadTime = getNanoSeconds();\n    upTime = process.uptime() * 1e9;\n    nodeLoadTime = moduleLoadTime - upTime;\n  } else if (Date.now) {\n    module.exports = function() {\n      return Date.now() - loadTime;\n    };\n    loadTime = Date.now();\n  } else {\n    module.exports = function() {\n      return new Date().getTime() - loadTime;\n    };\n    loadTime = new Date().getTime();\n  }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../link_app/node_modules/process/browser.js */ "./node_modules/process/browser.js")))\n\n//# sourceURL=webpack:///../euronics/node_modules/performance-now/lib/performance-now.js?')},
vendor: 2,659 bytes, lines 25-29
25"../euronics/node_modules/raf/index.js":
26/*!*********************************************!*\
27  !*** ../euronics/node_modules/raf/index.js ***!
28  \*********************************************/
29/*! no static exports found */function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(global) {var now = __webpack_require__(/*! performance-now */ \"../euronics/node_modules/performance-now/lib/performance-now.js\")\n  , root = typeof window === 'undefined' ? global : window\n  , vendors = ['moz', 'webkit']\n  , suffix = 'AnimationFrame'\n  , raf = root['request' + suffix]\n  , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n  raf = root[vendors[i] + 'Request' + suffix]\n  caf = root[vendors[i] + 'Cancel' + suffix]\n      || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n  var last = 0\n    , id = 0\n    , queue = []\n    , frameDuration = 1000 / 60\n\n  raf = function(callback) {\n    if(queue.length === 0) {\n      var _now = now()\n        , next = Math.max(0, frameDuration - (_now - last))\n      last = next + _now\n      setTimeout(function() {\n        var cp = queue.slice(0)\n        // Clear queue here to prevent\n        // callbacks from appending listeners\n        // to the current frame's queue\n        queue.length = 0\n        for(var i = 0; i < cp.length; i++) {\n          if(!cp[i].cancelled) {\n            try{\n              cp[i].callback(last)\n            } catch(e) {\n              setTimeout(function() { throw e }, 0)\n            }\n          }\n        }\n      }, Math.round(next))\n    }\n    queue.push({\n      handle: ++id,\n      callback: callback,\n      cancelled: false\n    })\n    return id\n  }\n\n  caf = function(handle) {\n    for(var i = 0; i < queue.length; i++) {\n      if(queue[i].handle === handle) {\n        queue[i].cancelled = true\n      }\n    }\n  }\n}\n\nmodule.exports = function(fn) {\n  // Wrap in a new function to prevent\n  // `cancel` potentially being assigned\n  // to the native rAF function\n  return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n  caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n  if (!object) {\n    object = root;\n  }\n  object.requestAnimationFrame = raf\n  object.cancelAnimationFrame = caf\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../link_app/node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///../euronics/node_modules/raf/index.js?")},
vendor: 5,804 bytes, lines 29-33
29"../euronics/node_modules/scroll-to-element/ease.js":
30/*!**********************************************************!*\
31  !*** ../euronics/node_modules/scroll-to-element/ease.js ***!
32  \**********************************************************/
33/*! no static exports found */function(module,exports){eval("// easing functions from \"Tween.js\"\nexports.linear = function(n){\n  return n;\n};\n\nexports.inQuad = function(n){\n  return n * n;\n};\n\nexports.outQuad = function(n){\n  return n * (2 - n);\n};\n\nexports.inOutQuad = function(n){\n  n *= 2;\n  if (n < 1) return 0.5 * n * n;\n  return - 0.5 * (--n * (n - 2) - 1);\n};\n\nexports.inCube = function(n){\n  return n * n * n;\n};\n\nexports.outCube = function(n){\n  return --n * n * n + 1;\n};\n\nexports.inOutCube = function(n){\n  n *= 2;\n  if (n < 1) return 0.5 * n * n * n;\n  return 0.5 * ((n -= 2 ) * n * n + 2);\n};\n\nexports.inQuart = function(n){\n  return n * n * n * n;\n};\n\nexports.outQuart = function(n){\n  return 1 - (--n * n * n * n);\n};\n\nexports.inOutQuart = function(n){\n  n *= 2;\n  if (n < 1) return 0.5 * n * n * n * n;\n  return -0.5 * ((n -= 2) * n * n * n - 2);\n};\n\nexports.inQuint = function(n){\n  return n * n * n * n * n;\n}\n\nexports.outQuint = function(n){\n  return --n * n * n * n * n + 1;\n}\n\nexports.inOutQuint = function(n){\n  n *= 2;\n  if (n < 1) return 0.5 * n * n * n * n * n;\n  return 0.5 * ((n -= 2) * n * n * n * n + 2);\n};\n\nexports.inSine = function(n){\n  return 1 - Math.cos(n * Math.PI / 2 );\n};\n\nexports.outSine = function(n){\n  return Math.sin(n * Math.PI / 2);\n};\n\nexports.inOutSine = function(n){\n  return .5 * (1 - Math.cos(Math.PI * n));\n};\n\nexports.inExpo = function(n){\n  return 0 == n ? 0 : Math.pow(1024, n - 1);\n};\n\nexports.outExpo = function(n){\n  return 1 == n ? n : 1 - Math.pow(2, -10 * n);\n};\n\nexports.inOutExpo = function(n){\n  if (0 == n) return 0;\n  if (1 == n) return 1;\n  if ((n *= 2) < 1) return .5 * Math.pow(1024, n - 1);\n  return .5 * (-Math.pow(2, -10 * (n - 1)) + 2);\n};\n\nexports.inCirc = function(n){\n  return 1 - Math.sqrt(1 - n * n);\n};\n\nexports.outCirc = function(n){\n  return Math.sqrt(1 - (--n * n));\n};\n\nexports.inOutCirc = function(n){\n  n *= 2\n  if (n < 1) return -0.5 * (Math.sqrt(1 - n * n) - 1);\n  return 0.5 * (Math.sqrt(1 - (n -= 2) * n) + 1);\n};\n\nexports.inBack = function(n){\n  var s = 1.70158;\n  return n * n * (( s + 1 ) * n - s);\n};\n\nexports.outBack = function(n){\n  var s = 1.70158;\n  return --n * n * ((s + 1) * n + s) + 1;\n};\n\nexports.inOutBack = function(n){\n  var s = 1.70158 * 1.525;\n  if ( ( n *= 2 ) < 1 ) return 0.5 * ( n * n * ( ( s + 1 ) * n - s ) );\n  return 0.5 * ( ( n -= 2 ) * n * ( ( s + 1 ) * n + s ) + 2 );\n};\n\nexports.inBounce = function(n){\n  return 1 - exports.outBounce(1 - n);\n};\n\nexports.outBounce = function(n){\n  if ( n < ( 1 / 2.75 ) ) {\n    return 7.5625 * n * n;\n  } else if ( n < ( 2 / 2.75 ) ) {\n    return 7.5625 * ( n -= ( 1.5 / 2.75 ) ) * n + 0.75;\n  } else if ( n < ( 2.5 / 2.75 ) ) {\n    return 7.5625 * ( n -= ( 2.25 / 2.75 ) ) * n + 0.9375;\n  } else {\n    return 7.5625 * ( n -= ( 2.625 / 2.75 ) ) * n + 0.984375;\n  }\n};\n\nexports.inOutBounce = function(n){\n  if (n < .5) return exports.inBounce(n * 2) * .5;\n  return exports.outBounce(n * 2 - 1) * .5 + .5;\n};\n\nexports.inElastic = function(n){\n  var s, a = 0.1, p = 0.4;\n  if ( n === 0 ) return 0;\n  if ( n === 1 ) return 1;\n  if ( !a || a < 1 ) { a = 1; s = p / 4; }\n  else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n  return - ( a * Math.pow( 2, 10 * ( n -= 1 ) ) * Math.sin( ( n - s ) * ( 2 * Math.PI ) / p ) );\n};\n\nexports.outElastic = function(n){\n  var s, a = 0.1, p = 0.4;\n  if ( n === 0 ) return 0;\n  if ( n === 1 ) return 1;\n  if ( !a || a < 1 ) { a = 1; s = p / 4; }\n  else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n  return ( a * Math.pow( 2, - 10 * n) * Math.sin( ( n - s ) * ( 2 * Math.PI ) / p ) + 1 );\n};\n\nexports.inOutElastic = function(n){\n  var s, a = 0.1, p = 0.4;\n  if ( n === 0 ) return 0;\n  if ( n === 1 ) return 1;\n  if ( !a || a < 1 ) { a = 1; s = p / 4; }\n  else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n  if ( ( n *= 2 ) < 1 ) return - 0.5 * ( a * Math.pow( 2, 10 * ( n -= 1 ) ) * Math.sin( ( n - s ) * ( 2 * Math.PI ) / p ) );\n  return a * Math.pow( 2, -10 * ( n -= 1 ) ) * Math.sin( ( n - s ) * ( 2 * Math.PI ) / p ) * 0.5 + 1;\n};\n\n// aliases\nexports['in-quad'] = exports.inQuad;\nexports['out-quad'] = exports.outQuad;\nexports['in-out-quad'] = exports.inOutQuad;\nexports['in-cube'] = exports.inCube;\nexports['out-cube'] = exports.outCube;\nexports['in-out-cube'] = exports.inOutCube;\nexports['in-quart'] = exports.inQuart;\nexports['out-quart'] = exports.outQuart;\nexports['in-out-quart'] = exports.inOutQuart;\nexports['in-quint'] = exports.inQuint;\nexports['out-quint'] = exports.outQuint;\nexports['in-out-quint'] = exports.inOutQuint;\nexports['in-sine'] = exports.inSine;\nexports['out-sine'] = exports.outSine;\nexports['in-out-sine'] = exports.inOutSine;\nexports['in-expo'] = exports.inExpo;\nexports['out-expo'] = exports.outExpo;\nexports['in-out-expo'] = exports.inOutExpo;\nexports['in-circ'] = exports.inCirc;\nexports['out-circ'] = exports.outCirc;\nexports['in-out-circ'] = exports.inOutCirc;\nexports['in-back'] = exports.inBack;\nexports['out-back'] = exports.outBack;\nexports['in-out-back'] = exports.inOutBack;\nexports['in-bounce'] = exports.inBounce;\nexports['out-bounce'] = exports.outBounce;\nexports['in-out-bounce'] = exports.inOutBounce;\nexports['in-elastic'] = exports.inElastic;\nexports['out-elastic'] = exports.outElastic;\nexports['in-out-elastic'] = exports.inOutElastic;\n\n\n//# sourceURL=webpack:///../euronics/node_modules/scroll-to-element/ease.js?")},
vendor: 2,659 bytes, lines 33-37
33"../euronics/node_modules/scroll-to-element/emitter.js":
34/*!*************************************************************!*\
35  !*** ../euronics/node_modules/scroll-to-element/emitter.js ***!
36  \*************************************************************/
37/*! no static exports found */function(module,exports,__webpack_require__){eval("function Emitter(obj) {\n  if (obj) return mixin(obj);\n};\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n    .push(fn);\n  return this;\n};\n\nEmitter.prototype.once = function(event, fn){\n  function on() {\n    this.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks['$' + event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks['$' + event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n\n  // Remove event specific arrays for event types that no\n  // one is subscribed for to avoid memory leak.\n  if (callbacks.length === 0) {\n    delete this._callbacks['$' + event];\n  }\n\n  return this;\n};\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n  var args = [].slice.call(arguments, 1)\n    , callbacks = this._callbacks['$' + event];\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks['$' + event] || [];\n};\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n\nif (true) {\n  module.exports = Emitter;\n}\n\n\n//# sourceURL=webpack:///../euronics/node_modules/scroll-to-element/emitter.js?")},
vendor: 1,703 bytes, lines 37-41
37"../euronics/node_modules/scroll-to-element/index.js":
38/*!***********************************************************!*\
39  !*** ../euronics/node_modules/scroll-to-element/index.js ***!
40  \***********************************************************/
41/*! no static exports found */function(module,exports,__webpack_require__){eval("var scroll = __webpack_require__(/*! ./scroll-to */ \"../euronics/node_modules/scroll-to-element/scroll-to.js\");\n\nfunction calculateScrollOffset(elem, additionalOffset, alignment) {\n  var body = document.body,\n      html = document.documentElement;\n\n  var elemRect = elem.getBoundingClientRect();\n  var clientHeight = html.clientHeight;\n  var documentHeight = Math.max( body.scrollHeight, body.offsetHeight,\n                                 html.clientHeight, html.scrollHeight, html.offsetHeight );\n\n  additionalOffset = additionalOffset || 0;\n\n  var scrollPosition;\n  if (alignment === 'bottom') {\n    scrollPosition = elemRect.bottom - clientHeight;\n  } else if (alignment === 'middle') {\n    scrollPosition = elemRect.bottom - clientHeight / 2 - elemRect.height / 2;\n  } else { // top and default\n    scrollPosition = elemRect.top;\n  }\n\n  var maxScrollPosition = documentHeight - clientHeight;\n  return Math.min(scrollPosition + additionalOffset + window.pageYOffset,\n                  maxScrollPosition);\n}\n\nmodule.exports = function (elem, options) {\n  options = options || {};\n  if (typeof elem === 'string') elem = document.querySelector(elem);\n  if (elem) return scroll(0, calculateScrollOffset(elem, options.offset, options.align), options);\n};\n\n\n//# sourceURL=webpack:///../euronics/node_modules/scroll-to-element/index.js?")},
vendor: 1,431 bytes, lines 41-45
41"../euronics/node_modules/scroll-to-element/scroll-to.js":
42/*!***************************************************************!*\
43  !*** ../euronics/node_modules/scroll-to-element/scroll-to.js ***!
44  \***************************************************************/
45/*! no static exports found */function(module,exports,__webpack_require__){eval("var Tween = __webpack_require__(/*! ./tween */ \"../euronics/node_modules/scroll-to-element/tween.js\");\nvar raf = __webpack_require__(/*! raf */ \"../euronics/node_modules/raf/index.js\");\n\nfunction scroll() {\n  var y = window.pageYOffset || document.documentElement.scrollTop;\n  var x = window.pageXOffset || document.documentElement.scrollLeft;\n  return { top: y, left: x };\n}\n\nfunction scrollTo(x, y, options) {\n  options = options || {};\n\n  // start position\n  var start = scroll();\n\n  // setup tween\n  var tween = Tween(start)\n    .ease(options.ease || 'out-circ')\n    .to({ top: y, left: x })\n    .duration(options.duration || 1000);\n\n  // scroll\n  tween.update(function(o){\n    window.scrollTo(o.left | 0, o.top | 0);\n  });\n\n  // handle end\n  tween.on('end', function(){\n    animate = function(){};\n  });\n\n  // animate\n  function animate() {\n    raf(animate);\n    tween.update();\n  }\n\n  animate();\n\n  return tween;\n}\n\nmodule.exports = scrollTo;\n\n\n//# sourceURL=webpack:///../euronics/node_modules/scroll-to-element/scroll-to.js?")},
vendor: 2,660 bytes, lines 45-49
45"../euronics/node_modules/scroll-to-element/tween.js":
46/*!***********************************************************!*\
47  !*** ../euronics/node_modules/scroll-to-element/tween.js ***!
48  \***********************************************************/
49/*! no static exports found */function(module,exports,__webpack_require__){eval("var ease = __webpack_require__(/*! ./ease */ \"../euronics/node_modules/scroll-to-element/ease.js\");\nvar Emitter = __webpack_require__(/*! ./emitter */ \"../euronics/node_modules/scroll-to-element/emitter.js\");\n\nfunction extend(obj, src) {\n  for (var key in src) {\n    if (src.hasOwnProperty(key)) obj[key] = src[key];\n  }\n  return obj;\n}\n\nfunction Tween(obj) {\n  if (!(this instanceof Tween)) return new Tween(obj);\n  this._from = obj;\n  this.ease('linear');\n  this.duration(500);\n}\n\nEmitter(Tween.prototype);\n\nTween.prototype.reset = function(){\n  this.isArray = Object.prototype.toString.call(this._from) === '[object Array]';\n  this._curr = extend({}, this._from);\n  this._done = false;\n  this._start = Date.now();\n  return this;\n};\n\nTween.prototype.to = function(obj){\n  this.reset();\n  this._to = obj;\n  return this;\n};\n\nTween.prototype.duration = function(ms){\n  this._duration = ms;\n  return this;\n};\n\nTween.prototype.ease = function(fn){\n  fn = 'function' == typeof fn ? fn : ease[fn];\n  if (!fn) throw new TypeError('invalid easing function');\n  this._ease = fn;\n  return this;\n};\n\nTween.prototype.stop = function(){\n  this.stopped = true;\n  this._done = true;\n  this.emit('stop');\n  this.emit('end');\n  return this;\n};\n\nTween.prototype.step = function(){\n  if (this._done) return;\n\n  var duration = this._duration;\n  var now = Date.now();\n  var delta = now - this._start;\n  var done = delta >= duration;\n\n  if (done) {\n    this._from = this._to;\n    this._update(this._to);\n    this._done = true;\n    this.emit('end');\n    return this;\n  }\n\n  var from = this._from;\n  var to = this._to;\n  var curr = this._curr;\n  var fn = this._ease;\n  var p = (now - this._start) / duration;\n  var n = fn(p);\n\n  if (this.isArray) {\n    for (var i = 0; i < from.length; ++i) {\n      curr[i] = from[i] + (to[i] - from[i]) * n;\n    }\n\n    this._update(curr);\n    return this;\n  }\n\n  for (var k in from) {\n    curr[k] = from[k] + (to[k] - from[k]) * n;\n  }\n\n  this._update(curr);\n  return this;\n};\n\nTween.prototype.update = function(fn){\n  if (0 == arguments.length) return this.step();\n  this._update = fn;\n  return this;\n};\n\nmodule.exports = Tween;\n\n\n//# sourceURL=webpack:///../euronics/node_modules/scroll-to-element/tween.js?")},
vendor: 4,506 bytes, lines 49-53
49"../euronics/node_modules/shave/dist/jquery.shave.js":
50/*!***********************************************************!*\
51  !*** ../euronics/node_modules/shave/dist/jquery.shave.js ***!
52  \***********************************************************/
53/*! no static exports found */function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n  shave - Shave is a javascript plugin that truncates multi-line text within a html element based on set max height\n  @version v2.5.10\n  @link https://github.com/yowainwright/shave#readme\n  @author Jeff Wainwright <[email protected]> (jeffry.in)\n  @license MIT\n**/\n(function (factory) {\n   true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) :\n  undefined;\n}((function () { 'use strict';\n\n  function shave(target, maxHeight) {\n    var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (typeof maxHeight === 'undefined' || isNaN(maxHeight)) throw Error('maxHeight is required');\n    var els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n    if (!els) return;\n    var character = opts.character || '&mldr;';\n    var classname = opts.classname || 'js-shave';\n    var spaces = typeof opts.spaces === 'boolean' ? opts.spaces : true;\n    var charclassname = opts.charclassname || 'js-shave-char';\n    var charHtml = \"<span class=\\\"\".concat(charclassname, \"\\\">\").concat(character, \"</span>\");\n    if (!('length' in els)) els = [els];\n\n    for (var i = 0; i < els.length; i += 1) {\n      var el = els[i];\n      var styles = el.style;\n      var span = el.querySelector(\".\".concat(classname));\n      var textProp = el.textContent === undefined ? 'innerText' : 'textContent'; // If element text has already been shaved\n\n      if (span) {\n        // Remove the ellipsis to recapture the original text\n        el.removeChild(el.querySelector(\".\".concat(charclassname)));\n        el[textProp] = el[textProp]; // eslint-disable-line\n        // nuke span, recombine text\n      }\n\n      var fullText = el[textProp];\n      var words = spaces ? fullText.split(' ') : fullText; // If 0 or 1 words, we're done\n\n      if (words.length < 2) continue; // Temporarily remove any CSS height for text height calculation\n\n      var heightStyle = styles.height;\n      styles.height = 'auto';\n      var maxHeightStyle = styles.maxHeight;\n      styles.maxHeight = 'none'; // If already short enough, we're done\n\n      if (el.offsetHeight <= maxHeight) {\n        styles.height = heightStyle;\n        styles.maxHeight = maxHeightStyle;\n        continue;\n      } // Binary search for number of words which can fit in allotted height\n\n\n      var max = words.length - 1;\n      var min = 0;\n      var pivot = void 0;\n\n      while (min < max) {\n        pivot = min + max + 1 >> 1; // eslint-disable-line no-bitwise\n\n        el[textProp] = spaces ? words.slice(0, pivot).join(' ') : words.slice(0, pivot);\n        el.insertAdjacentHTML('beforeend', charHtml);\n        if (el.offsetHeight > maxHeight) max = pivot - 1;else min = pivot;\n      }\n\n      el[textProp] = spaces ? words.slice(0, max).join(' ') : words.slice(0, max);\n      el.insertAdjacentHTML('beforeend', charHtml);\n      var diff = spaces ? \" \".concat(words.slice(max).join(' ')) : words.slice(max);\n      var shavedText = document.createTextNode(diff);\n      var elWithShavedText = document.createElement('span');\n      elWithShavedText.classList.add(classname);\n      elWithShavedText.style.display = 'none';\n      elWithShavedText.appendChild(shavedText);\n      el.insertAdjacentElement('beforeend', elWithShavedText);\n      styles.height = heightStyle;\n      styles.maxHeight = maxHeightStyle;\n    }\n  }\n\n  if (typeof window !== 'undefined') {\n    var plugin = window.$ || window.jQuery || window.Zepto;\n\n    if (plugin) {\n      plugin.fn.shave = function shavePlugin(maxHeight, opts) {\n        shave(this, maxHeight, opts);\n        return this;\n      };\n    }\n  }\n\n})));\n\n\n//# sourceURL=webpack:///../euronics/node_modules/shave/dist/jquery.shave.js?")},
vendor: 16,978 bytes, lines 53-57
53"../euronics/node_modules/stickybits/dist/stickybits.es.js":
54/*!*****************************************************************!*\
55  !*** ../euronics/node_modules/stickybits/dist/stickybits.es.js ***!
56  \*****************************************************************/
57/*! exports provided: default */function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/**\n  stickybits - Stickybits is a lightweight alternative to `position: sticky` polyfills\n  @version v3.7.11\n  @link https://github.com/yowainwright/stickybits#readme\n  @author Jeff Wainwright <[email protected]> (https://jeffry.in)\n  @license MIT\n**/\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n/*\n  STICKYBITS 💉\n  --------\n  > a lightweight alternative to `position: sticky` polyfills 🍬\n  --------\n  - each method is documented above it our view the readme\n  - Stickybits does not manage polymorphic functionality (position like properties)\n  * polymorphic functionality: (in the context of describing Stickybits)\n    means making things like `position: sticky` be loosely supported with position fixed.\n    It also means that features like `useStickyClasses` takes on styles like `position: fixed`.\n  --------\n  defaults 🔌\n  --------\n  - version = `package.json` version\n  - userAgent = viewer browser agent\n  - target = DOM element selector\n  - noStyles = boolean\n  - offset = number\n  - parentClass = 'string'\n  - scrollEl = window || DOM element selector || DOM element\n  - stickyClass = 'string'\n  - stuckClass = 'string'\n  - useStickyClasses = boolean\n  - useFixed = boolean\n  - useGetBoundingClientRect = boolean\n  - verticalPosition = 'string'\n  - applyStyle = function\n  --------\n  props🔌\n  --------\n  - p = props {object}\n  --------\n  instance note\n  --------\n  - stickybits parent methods return this\n  - stickybits instance methods return an instance item\n  --------\n  nomenclature\n  --------\n  - target => el => e\n  - props => o || p\n  - instance => item => it\n  --------\n  methods\n  --------\n  - .definePosition = defines sticky or fixed\n  - .addInstance = an array of objects for each Stickybits Target\n  - .getClosestParent = gets the parent for non-window scroll\n  - .getTopPosition = gets the element top pixel position from the viewport\n  - .computeScrollOffsets = computes scroll position\n  - .toggleClasses = older browser toggler\n  - .manageState = manages sticky state\n  - .removeInstance = removes an instance\n  - .cleanup = removes all Stickybits instances and cleans up dom from stickybits\n*/\nvar Stickybits = /*#__PURE__*/function () {\n  function Stickybits(target, obj) {\n    var _this = this;\n\n    var o = typeof obj !== 'undefined' ? obj : {};\n    this.version = '3.7.11';\n    this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser';\n    this.props = {\n      customStickyChangeNumber: o.customStickyChangeNumber || null,\n      noStyles: o.noStyles || false,\n      stickyBitStickyOffset: o.stickyBitStickyOffset || 0,\n      parentClass: o.parentClass || 'js-stickybit-parent',\n      scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window,\n      stickyClass: o.stickyClass || 'js-is-sticky',\n      stuckClass: o.stuckClass || 'js-is-stuck',\n      stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',\n      useStickyClasses: o.useStickyClasses || false,\n      useFixed: o.useFixed || false,\n      useGetBoundingClientRect: o.useGetBoundingClientRect || false,\n      verticalPosition: o.verticalPosition || 'top',\n      applyStyle: o.applyStyle || function (item, style) {\n        return _this.applyStyle(item, style);\n      }\n    };\n    /*\n      define positionVal after the setting of props, because definePosition looks at the props.useFixed\n      ----\n      -  uses a computed (`.definePosition()`)\n      -  defined the position\n    */\n\n    this.props.positionVal = this.definePosition() || 'fixed';\n    this.instances = [];\n    var _this$props = this.props,\n        positionVal = _this$props.positionVal,\n        verticalPosition = _this$props.verticalPosition,\n        noStyles = _this$props.noStyles,\n        stickyBitStickyOffset = _this$props.stickyBitStickyOffset;\n    var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? stickyBitStickyOffset + \"px\" : '';\n    var positionStyle = positionVal !== 'fixed' ? positionVal : '';\n    this.els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n    if (!('length' in this.els)) this.els = [this.els];\n\n    for (var i = 0; i < this.els.length; i++) {\n      var _styles;\n\n      var el = this.els[i];\n      var instance = this.addInstance(el, this.props); // set vertical position\n\n      this.props.applyStyle({\n        styles: (_styles = {}, _styles[verticalPosition] = verticalPositionStyle, _styles.position = positionStyle, _styles),\n        classes: {}\n      }, instance);\n      this.manageState(instance); // instances are an array of objects\n\n      this.instances.push(instance);\n    }\n  }\n  /*\n    setStickyPosition ✔️\n    --------\n    —  most basic thing stickybits does\n    => checks to see if position sticky is supported\n    => defined the position to be used\n    => stickybits works accordingly\n  */\n\n\n  var _proto = Stickybits.prototype;\n\n  _proto.definePosition = function definePosition() {\n    var stickyProp;\n\n    if (this.props.useFixed) {\n      stickyProp = 'fixed';\n    } else {\n      var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-'];\n      var test = document.head.style;\n\n      for (var i = 0; i < prefix.length; i += 1) {\n        test.position = prefix[i] + \"sticky\";\n      }\n\n      stickyProp = test.position ? test.position : 'fixed';\n      test.position = '';\n    }\n\n    return stickyProp;\n  }\n  /*\n    addInstance ✔️\n    --------\n    — manages instances of items\n    - takes in an el and props\n    - returns an item object\n    ---\n    - target = el\n    - o = {object} = props\n      - scrollEl = 'string' | object\n      - verticalPosition = number\n      - off = boolean\n      - parentClass = 'string'\n      - stickyClass = 'string'\n      - stuckClass = 'string'\n    ---\n    - defined later\n      - parent = dom element\n      - state = 'string'\n      - offset = number\n      - stickyStart = number\n      - stickyStop = number\n    - returns an instance object\n  */\n  ;\n\n  _proto.addInstance = function addInstance(el, props) {\n    var _this2 = this;\n\n    var item = {\n      el: el,\n      parent: el.parentNode,\n      props: props\n    };\n\n    if (props.positionVal === 'fixed' || props.useStickyClasses) {\n      this.isWin = this.props.scrollEl === window;\n      var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl);\n      this.computeScrollOffsets(item);\n      this.toggleClasses(item.parent, '', props.parentClass);\n      item.state = 'default';\n      item.stateChange = 'default';\n\n      item.stateContainer = function () {\n        return _this2.manageState(item);\n      };\n\n      se.addEventListener('scroll', item.stateContainer);\n    }\n\n    return item;\n  }\n  /*\n    --------\n    getParent 👨‍\n    --------\n    - a helper function that gets the target element's parent selected el\n    - only used for non `window` scroll elements\n    - supports older browsers\n  */\n  ;\n\n  _proto.getClosestParent = function getClosestParent(el, match) {\n    // p = parent element\n    var p = match;\n    var e = el;\n    if (e.parentElement === p) return p; // traverse up the dom tree until we get to the parent\n\n    while (e.parentElement !== p) {\n      e = e.parentElement;\n    } // return parent element\n\n\n    return p;\n  }\n  /*\n    --------\n    getTopPosition\n    --------\n    - a helper function that gets the topPosition of a Stickybit element\n    - from the top level of the DOM\n  */\n  ;\n\n  _proto.getTopPosition = function getTopPosition(el) {\n    if (this.props.useGetBoundingClientRect) {\n      return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop);\n    }\n\n    var topPosition = 0;\n\n    do {\n      topPosition = el.offsetTop + topPosition;\n    } while (el = el.offsetParent);\n\n    return topPosition;\n  }\n  /*\n    computeScrollOffsets 📊\n    ---\n    computeScrollOffsets for Stickybits\n    - defines\n      - offset\n      - start\n      - stop\n  */\n  ;\n\n  _proto.computeScrollOffsets = function computeScrollOffsets(item) {\n    var it = item;\n    var p = it.props;\n    var el = it.el;\n    var parent = it.parent;\n    var isCustom = !this.isWin && p.positionVal === 'fixed';\n    var isTop = p.verticalPosition !== 'bottom';\n    var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0;\n    var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent);\n    var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight;\n    var parentBottom = stickyStart + parent.offsetHeight;\n    it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0;\n    it.stickyStart = isTop ? stickyStart - it.offset : 0;\n    it.stickyChange = it.stickyStart + stickyChangeOffset;\n    it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight;\n  }\n  /*\n    toggleClasses ⚖️\n    ---\n    toggles classes (for older browser support)\n    r = removed class\n    a = added class\n  */\n  ;\n\n  _proto.toggleClasses = function toggleClasses(el, r, a) {\n    var e = el;\n    var cArray = e.className.split(' ');\n    if (a && cArray.indexOf(a) === -1) cArray.push(a);\n    var rItem = cArray.indexOf(r);\n    if (rItem !== -1) cArray.splice(rItem, 1);\n    e.className = cArray.join(' ');\n  }\n  /*\n    manageState 📝\n    ---\n    - defines the state\n      - normal\n      - sticky\n      - stuck\n  */\n  ;\n\n  _proto.manageState = function manageState(item) {\n    var _this3 = this;\n\n    // cache object\n    var it = item;\n    var p = it.props;\n    var state = it.state;\n    var stateChange = it.stateChange;\n    var start = it.stickyStart;\n    var change = it.stickyChange;\n    var stop = it.stickyStop; // cache props\n\n    var pv = p.positionVal;\n    var se = p.scrollEl;\n    var sticky = p.stickyClass;\n    var stickyChange = p.stickyChangeClass;\n    var stuck = p.stuckClass;\n    var vp = p.verticalPosition;\n    var isTop = vp !== 'bottom';\n    var aS = p.applyStyle;\n    var ns = p.noStyles;\n    /*\n      requestAnimationFrame\n      ---\n      - use rAF\n      - or stub rAF\n    */\n\n    var rAFStub = function rAFDummy(f) {\n      f();\n    };\n\n    var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub;\n    /*\n      define scroll vars\n      ---\n      - scroll\n      - notSticky\n      - isSticky\n      - isStuck\n    */\n\n    var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop;\n    var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck');\n    var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck');\n    var isStuck = scroll >= stop && state === 'sticky';\n    /*\n      Unnamed arrow functions within this block\n      ---\n      - help wanted or discussion\n      - view test.stickybits.js\n        - `stickybits .manageState  `position: fixed` interface` for more awareness 👀\n    */\n\n    if (notSticky) {\n      it.state = 'sticky';\n    } else if (isSticky) {\n      it.state = 'default';\n    } else if (isStuck) {\n      it.state = 'stuck';\n    }\n\n    var isStickyChange = scroll >= change && scroll <= stop;\n    var isNotStickyChange = scroll < change / 2 || scroll > stop;\n\n    if (isNotStickyChange) {\n      it.stateChange = 'default';\n    } else if (isStickyChange) {\n      it.stateChange = 'sticky';\n    } // Only apply new styles if the state has changed\n\n\n    if (state === it.state && stateChange === it.stateChange) return;\n    rAF(function () {\n      var _styles2, _classes, _styles3, _extends2, _classes2, _style$classes;\n\n      var stateStyles = {\n        sticky: {\n          styles: (_styles2 = {\n            position: pv,\n            top: '',\n            bottom: ''\n          }, _styles2[vp] = p.stickyBitStickyOffset + \"px\", _styles2),\n          classes: (_classes = {}, _classes[sticky] = true, _classes)\n        },\n        default: {\n          styles: (_styles3 = {}, _styles3[vp] = '', _styles3),\n          classes: {}\n        },\n        stuck: {\n          styles: _extends((_extends2 = {}, _extends2[vp] = '', _extends2), pv === 'fixed' && !ns || !_this3.isWin ? {\n            position: 'absolute',\n            top: '',\n            bottom: '0'\n          } : {}),\n          classes: (_classes2 = {}, _classes2[stuck] = true, _classes2)\n        }\n      };\n\n      if (pv === 'fixed') {\n        stateStyles.default.styles.position = '';\n      }\n\n      var style = stateStyles[it.state];\n      style.classes = (_style$classes = {}, _style$classes[stuck] = !!style.classes[stuck], _style$classes[sticky] = !!style.classes[sticky], _style$classes[stickyChange] = isStickyChange, _style$classes);\n      aS(style, item);\n    });\n  }\n  /*\n    applyStyle\n    ---\n    - apply the given styles and classes to the element\n  */\n  ;\n\n  _proto.applyStyle = function applyStyle(_ref, item) {\n    var styles = _ref.styles,\n        classes = _ref.classes;\n    // cache object\n    var it = item;\n    var e = it.el;\n    var p = it.props;\n    var stl = e.style; // cache props\n\n    var ns = p.noStyles;\n    var cArray = e.className.split(' '); // Disable due to bug with old versions of eslint-scope and for ... in\n    // https://github.com/eslint/eslint/issues/12117\n    // eslint-disable-next-line no-unused-vars\n\n    for (var cls in classes) {\n      var addClass = classes[cls];\n\n      if (addClass) {\n        if (cArray.indexOf(cls) === -1) cArray.push(cls);\n      } else {\n        var idx = cArray.indexOf(cls);\n        if (idx !== -1) cArray.splice(idx, 1);\n      }\n    }\n\n    e.className = cArray.join(' ');\n\n    if (styles['position']) {\n      stl['position'] = styles['position'];\n    }\n\n    if (ns) return; // eslint-disable-next-line no-unused-vars\n\n    for (var key in styles) {\n      stl[key] = styles[key];\n    }\n  };\n\n  _proto.update = function update(updatedProps) {\n    var _this4 = this;\n\n    if (updatedProps === void 0) {\n      updatedProps = null;\n    }\n\n    this.instances.forEach(function (instance) {\n      _this4.computeScrollOffsets(instance);\n\n      if (updatedProps) {\n        // eslint-disable-next-line no-unused-vars\n        for (var updatedProp in updatedProps) {\n          instance.props[updatedProp] = updatedProps[updatedProp];\n        }\n      }\n    });\n    return this;\n  }\n  /*\n    removes an instance 👋\n    --------\n    - cleanup instance\n  */\n  ;\n\n  _proto.removeInstance = function removeInstance(instance) {\n    var _styles4, _classes3;\n\n    var e = instance.el;\n    var p = instance.props;\n    this.applyStyle({\n      styles: (_styles4 = {\n        position: ''\n      }, _styles4[p.verticalPosition] = '', _styles4),\n      classes: (_classes3 = {}, _classes3[p.stickyClass] = '', _classes3[p.stuckClass] = '', _classes3)\n    }, instance);\n    this.toggleClasses(e.parentNode, p.parentClass);\n  }\n  /*\n    cleanup 🛁\n    --------\n    - cleans up each instance\n    - clears instance\n  */\n  ;\n\n  _proto.cleanup = function cleanup() {\n    for (var i = 0; i < this.instances.length; i += 1) {\n      var instance = this.instances[i];\n\n      if (instance.stateContainer) {\n        instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer);\n      }\n\n      this.removeInstance(instance);\n    }\n\n    this.manageState = false;\n    this.instances = [];\n  };\n\n  return Stickybits;\n}();\n/*\n  export\n  --------\n  exports StickBits to be used 🏁\n*/\n\n\nfunction stickybits(target, o) {\n  return new Stickybits(target, o);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (stickybits);\n\n\n//# sourceURL=webpack:///../euronics/node_modules/stickybits/dist/stickybits.es.js?")},
vendor: 148,373 bytes, lines 57-61
57"../euronics/node_modules/sweetalert2/dist/sweetalert2.all.js":
58/*!********************************************************************!*\
59  !*** ../euronics/node_modules/sweetalert2/dist/sweetalert2.all.js ***!
60  \********************************************************************/
61/*! no static exports found */function(module,exports,__webpack_require__){eval("/*!\n* sweetalert2 v10.16.11\n* Released under the MIT License.\n*/\n(function (global, factory) {\n   true ? module.exports = factory() :\n  undefined;\n}(this, function () { 'use strict';\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function (obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _extends() {\n    _extends = Object.assign || function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n\n      return target;\n    };\n\n    return _extends.apply(this, arguments);\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n\n    try {\n      Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _construct(Parent, args, Class) {\n    if (_isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n\n    return _construct.apply(null, arguments);\n  }\n\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return self;\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n      return call;\n    }\n\n    return _assertThisInitialized(self);\n  }\n\n  function _createSuper(Derived) {\n    var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n    return function _createSuperInternal() {\n      var Super = _getPrototypeOf(Derived),\n          result;\n\n      if (hasNativeReflectConstruct) {\n        var NewTarget = _getPrototypeOf(this).constructor;\n\n        result = Reflect.construct(Super, arguments, NewTarget);\n      } else {\n        result = Super.apply(this, arguments);\n      }\n\n      return _possibleConstructorReturn(this, result);\n    };\n  }\n\n  function _superPropBase(object, property) {\n    while (!Object.prototype.hasOwnProperty.call(object, property)) {\n      object = _getPrototypeOf(object);\n      if (object === null) break;\n    }\n\n    return object;\n  }\n\n  function _get(target, property, receiver) {\n    if (typeof Reflect !== \"undefined\" && Reflect.get) {\n      _get = Reflect.get;\n    } else {\n      _get = function _get(target, property, receiver) {\n        var base = _superPropBase(target, property);\n\n        if (!base) return;\n        var desc = Object.getOwnPropertyDescriptor(base, property);\n\n        if (desc.get) {\n          return desc.get.call(receiver);\n        }\n\n        return desc.value;\n      };\n    }\n\n    return _get(target, property, receiver || target);\n  }\n\n  var consolePrefix = 'SweetAlert2:';\n  /**\n   * Filter the unique values into a new array\n   * @param arr\n   */\n\n  var uniqueArray = function uniqueArray(arr) {\n    var result = [];\n\n    for (var i = 0; i < arr.length; i++) {\n      if (result.indexOf(arr[i]) === -1) {\n        result.push(arr[i]);\n      }\n    }\n\n    return result;\n  };\n  /**\n   * Capitalize the first letter of a string\n   * @param str\n   */\n\n  var capitalizeFirstLetter = function capitalizeFirstLetter(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n  };\n  /**\n   * Returns the array of object values (Object.values isn't supported in IE11)\n   * @param obj\n   */\n\n  var objectValues = function objectValues(obj) {\n    return Object.keys(obj).map(function (key) {\n      return obj[key];\n    });\n  };\n  /**\n   * Convert NodeList to Array\n   * @param nodeList\n   */\n\n  var toArray = function toArray(nodeList) {\n    return Array.prototype.slice.call(nodeList);\n  };\n  /**\n   * Standardise console warnings\n   * @param message\n   */\n\n  var warn = function warn(message) {\n    console.warn(\"\".concat(consolePrefix, \" \").concat(_typeof(message) === 'object' ? message.join(' ') : message));\n  };\n  /**\n   * Standardise console errors\n   * @param message\n   */\n\n  var error = function error(message) {\n    console.error(\"\".concat(consolePrefix, \" \").concat(message));\n  };\n  /**\n   * Private global state for `warnOnce`\n   * @type {Array}\n   * @private\n   */\n\n  var previousWarnOnceMessages = [];\n  /**\n   * Show a console warning, but only if it hasn't already been shown\n   * @param message\n   */\n\n  var warnOnce = function warnOnce(message) {\n    if (!(previousWarnOnceMessages.indexOf(message) !== -1)) {\n      previousWarnOnceMessages.push(message);\n      warn(message);\n    }\n  };\n  /**\n   * Show a one-time console warning about deprecated params/methods\n   */\n\n  var warnAboutDeprecation = function warnAboutDeprecation(deprecatedParam, useInstead) {\n    warnOnce(\"\\\"\".concat(deprecatedParam, \"\\\" is deprecated and will be removed in the next major release. Please use \\\"\").concat(useInstead, \"\\\" instead.\"));\n  };\n  /**\n   * If `arg` is a function, call it (with no arguments or context) and return the result.\n   * Otherwise, just pass the value through\n   * @param arg\n   */\n\n  var callIfFunction = function callIfFunction(arg) {\n    return typeof arg === 'function' ? arg() : arg;\n  };\n  var hasToPromiseFn = function hasToPromiseFn(arg) {\n    return arg && typeof arg.toPromise === 'function';\n  };\n  var asPromise = function asPromise(arg) {\n    return hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n  };\n  var isPromise = function isPromise(arg) {\n    return arg && Promise.resolve(arg) === arg;\n  };\n\n  var DismissReason = Object.freeze({\n    cancel: 'cancel',\n    backdrop: 'backdrop',\n    close: 'close',\n    esc: 'esc',\n    timer: 'timer'\n  });\n\n  var isJqueryElement = function isJqueryElement(elem) {\n    return _typeof(elem) === 'object' && elem.jquery;\n  };\n\n  var isElement = function isElement(elem) {\n    return elem instanceof Element || isJqueryElement(elem);\n  };\n\n  var argsToParams = function argsToParams(args) {\n    var params = {};\n\n    if (_typeof(args[0]) === 'object' && !isElement(args[0])) {\n      _extends(params, args[0]);\n    } else {\n      ['title', 'html', 'icon'].forEach(function (name, index) {\n        var arg = args[index];\n\n        if (typeof arg === 'string' || isElement(arg)) {\n          params[name] = arg;\n        } else if (arg !== undefined) {\n          error(\"Unexpected type of \".concat(name, \"! Expected \\\"string\\\" or \\\"Element\\\", got \").concat(_typeof(arg)));\n        }\n      });\n    }\n\n    return params;\n  };\n\n  var swalPrefix = 'swal2-';\n  var prefix = function prefix(items) {\n    var result = {};\n\n    for (var i in items) {\n      result[items[i]] = swalPrefix + items[i];\n    }\n\n    return result;\n  };\n  var swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'header', 'content', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error']);\n  var iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);\n\n  var getContainer = function getContainer() {\n    return document.body.querySelector(\".\".concat(swalClasses.container));\n  };\n  var elementBySelector = function elementBySelector(selectorString) {\n    var container = getContainer();\n    return container ? container.querySelector(selectorString) : null;\n  };\n\n  var elementByClass = function elementByClass(className) {\n    return elementBySelector(\".\".concat(className));\n  };\n\n  var getPopup = function getPopup() {\n    return elementByClass(swalClasses.popup);\n  };\n  var getIcon = function getIcon() {\n    return elementByClass(swalClasses.icon);\n  };\n  var getTitle = function getTitle() {\n    return elementByClass(swalClasses.title);\n  };\n  var getContent = function getContent() {\n    return elementByClass(swalClasses.content);\n  };\n  var getHtmlContainer = function getHtmlContainer() {\n    return elementByClass(swalClasses['html-container']);\n  };\n  var getImage = function getImage() {\n    return elementByClass(swalClasses.image);\n  };\n  var getProgressSteps = function getProgressSteps() {\n    return elementByClass(swalClasses['progress-steps']);\n  };\n  var getValidationMessage = function getValidationMessage() {\n    return elementByClass(swalClasses['validation-message']);\n  };\n  var getConfirmButton = function getConfirmButton() {\n    return elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.confirm));\n  };\n  var getDenyButton = function getDenyButton() {\n    return elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.deny));\n  };\n  var getInputLabel = function getInputLabel() {\n    return elementByClass(swalClasses['input-label']);\n  };\n  var getLoader = function getLoader() {\n    return elementBySelector(\".\".concat(swalClasses.loader));\n  };\n  var getCancelButton = function getCancelButton() {\n    return elementBySelector(\".\".concat(swalClasses.actions, \" .\").concat(swalClasses.cancel));\n  };\n  var getActions = function getActions() {\n    return elementByClass(swalClasses.actions);\n  };\n  var getHeader = function getHeader() {\n    return elementByClass(swalClasses.header);\n  };\n  var getFooter = function getFooter() {\n    return elementByClass(swalClasses.footer);\n  };\n  var getTimerProgressBar = function getTimerProgressBar() {\n    return elementByClass(swalClasses['timer-progress-bar']);\n  };\n  var getCloseButton = function getCloseButton() {\n    return elementByClass(swalClasses.close);\n  }; // https://github.com/jkup/focusable/blob/master/index.js\n\n  var focusable = \"\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\\\"0\\\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n\";\n  var getFocusableElements = function getFocusableElements() {\n    var focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])')) // sort according to tabindex\n    .sort(function (a, b) {\n      a = parseInt(a.getAttribute('tabindex'));\n      b = parseInt(b.getAttribute('tabindex'));\n\n      if (a > b) {\n        return 1;\n      } else if (a < b) {\n        return -1;\n      }\n\n      return 0;\n    });\n    var otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(function (el) {\n      return el.getAttribute('tabindex') !== '-1';\n    });\n    return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(function (el) {\n      return isVisible(el);\n    });\n  };\n  var isModal = function isModal() {\n    return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']);\n  };\n  var isToast = function isToast() {\n    return document.body.classList.contains(swalClasses['toast-shown']);\n  };\n  var isLoading = function isLoading() {\n    return getPopup().hasAttribute('data-loading');\n  };\n\n  var states = {\n    previousBodyPadding: null\n  };\n  var setInnerHtml = function setInnerHtml(elem, html) {\n    // #1926\n    elem.textContent = '';\n\n    if (html) {\n      var parser = new DOMParser();\n      var parsed = parser.parseFromString(html, \"text/html\");\n      toArray(parsed.querySelector('head').childNodes).forEach(function (child) {\n        elem.appendChild(child);\n      });\n      toArray(parsed.querySelector('body').childNodes).forEach(function (child) {\n        elem.appendChild(child);\n      });\n    }\n  };\n  var hasClass = function hasClass(elem, className) {\n    if (!className) {\n      return false;\n    }\n\n    var classList = className.split(/\\s+/);\n\n    for (var i = 0; i < classList.length; i++) {\n      if (!elem.classList.contains(classList[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  var removeCustomClasses = function removeCustomClasses(elem, params) {\n    toArray(elem.classList).forEach(function (className) {\n      if (!(objectValues(swalClasses).indexOf(className) !== -1) && !(objectValues(iconTypes).indexOf(className) !== -1) && !(objectValues(params.showClass).indexOf(className) !== -1)) {\n        elem.classList.remove(className);\n      }\n    });\n  };\n\n  var applyCustomClass = function applyCustomClass(elem, params, className) {\n    removeCustomClasses(elem, params);\n\n    if (params.customClass && params.customClass[className]) {\n      if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) {\n        return warn(\"Invalid type of customClass.\".concat(className, \"! Expected string or iterable object, got \\\"\").concat(_typeof(params.customClass[className]), \"\\\"\"));\n      }\n\n      addClass(elem, params.customClass[className]);\n    }\n  };\n  function getInput(content, inputType) {\n    if (!inputType) {\n      return null;\n    }\n\n    switch (inputType) {\n      case 'select':\n      case 'textarea':\n      case 'file':\n        return getChildByClass(content, swalClasses[inputType]);\n\n      case 'checkbox':\n        return content.querySelector(\".\".concat(swalClasses.checkbox, \" input\"));\n\n      case 'radio':\n        return content.querySelector(\".\".concat(swalClasses.radio, \" input:checked\")) || content.querySelector(\".\".concat(swalClasses.radio, \" input:first-child\"));\n\n      case 'range':\n        return content.querySelector(\".\".concat(swalClasses.range, \" input\"));\n\n      default:\n        return getChildByClass(content, swalClasses.input);\n    }\n  }\n  var focusInput = function focusInput(input) {\n    input.focus(); // place cursor at end of text in text input\n\n    if (input.type !== 'file') {\n      // http://stackoverflow.com/a/2345915\n      var val = input.value;\n      input.value = '';\n      input.value = val;\n    }\n  };\n  var toggleClass = function toggleClass(target, classList, condition) {\n    if (!target || !classList) {\n      return;\n    }\n\n    if (typeof classList === 'string') {\n      classList = classList.split(/\\s+/).filter(Boolean);\n    }\n\n    classList.forEach(function (className) {\n      if (target.forEach) {\n        target.forEach(function (elem) {\n          condition ? elem.classList.add(className) : elem.classList.remove(className);\n        });\n      } else {\n        condition ? target.classList.add(className) : target.classList.remove(className);\n      }\n    });\n  };\n  var addClass = function addClass(target, classList) {\n    toggleClass(target, classList, true);\n  };\n  var removeClass = function removeClass(target, classList) {\n    toggleClass(target, classList, false);\n  };\n  var getChildByClass = function getChildByClass(elem, className) {\n    for (var i = 0; i < elem.childNodes.length; i++) {\n      if (hasClass(elem.childNodes[i], className)) {\n        return elem.childNodes[i];\n      }\n    }\n  };\n  var applyNumericalStyle = function applyNumericalStyle(elem, property, value) {\n    if (value === \"\".concat(parseInt(value))) {\n      value = parseInt(value);\n    }\n\n    if (value || parseInt(value) === 0) {\n      elem.style[property] = typeof value === 'number' ? \"\".concat(value, \"px\") : value;\n    } else {\n      elem.style.removeProperty(property);\n    }\n  };\n  var show = function show(elem) {\n    var display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';\n    elem.style.display = display;\n  };\n  var hide = function hide(elem) {\n    elem.style.display = 'none';\n  };\n  var setStyle = function setStyle(parent, selector, property, value) {\n    var el = parent.querySelector(selector);\n\n    if (el) {\n      el.style[property] = value;\n    }\n  };\n  var toggle = function toggle(elem, condition, display) {\n    condition ? show(elem, display) : hide(elem);\n  }; // borrowed from jquery $(elem).is(':visible') implementation\n\n  var isVisible = function isVisible(elem) {\n    return !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n  };\n  var allButtonsAreHidden = function allButtonsAreHidden() {\n    return !isVisible(getConfirmButton()) && !isVisible(getDenyButton()) && !isVisible(getCancelButton());\n  };\n  var isScrollable = function isScrollable(elem) {\n    return !!(elem.scrollHeight > elem.clientHeight);\n  }; // borrowed from https://stackoverflow.com/a/46352119\n\n  var hasCssAnimation = function hasCssAnimation(elem) {\n    var style = window.getComputedStyle(elem);\n    var animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n    var transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n    return animDuration > 0 || transDuration > 0;\n  };\n  var contains = function contains(haystack, needle) {\n    if (typeof haystack.contains === 'function') {\n      return haystack.contains(needle);\n    }\n  };\n  var animateTimerProgressBar = function animateTimerProgressBar(timer) {\n    var reset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var timerProgressBar = getTimerProgressBar();\n\n    if (isVisible(timerProgressBar)) {\n      if (reset) {\n        timerProgressBar.style.transition = 'none';\n        timerProgressBar.style.width = '100%';\n      }\n\n      setTimeout(function () {\n        timerProgressBar.style.transition = \"width \".concat(timer / 1000, \"s linear\");\n        timerProgressBar.style.width = '0%';\n      }, 10);\n    }\n  };\n  var stopTimerProgressBar = function stopTimerProgressBar() {\n    var timerProgressBar = getTimerProgressBar();\n    var timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    timerProgressBar.style.removeProperty('transition');\n    timerProgressBar.style.width = '100%';\n    var timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n    var timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100);\n    timerProgressBar.style.removeProperty('transition');\n    timerProgressBar.style.width = \"\".concat(timerProgressBarPercent, \"%\");\n  };\n\n  // Detect Node env\n  var isNodeEnv = function isNodeEnv() {\n    return typeof window === 'undefined' || typeof document === 'undefined';\n  };\n\n  var sweetHTML = \"\\n <div aria-labelledby=\\\"\".concat(swalClasses.title, \"\\\" aria-describedby=\\\"\").concat(swalClasses.content, \"\\\" class=\\\"\").concat(swalClasses.popup, \"\\\" tabindex=\\\"-1\\\">\\n   <div class=\\\"\").concat(swalClasses.header, \"\\\">\\n     <ul class=\\\"\").concat(swalClasses['progress-steps'], \"\\\"></ul>\\n     <div class=\\\"\").concat(swalClasses.icon, \"\\\"></div>\\n     <img class=\\\"\").concat(swalClasses.image, \"\\\" />\\n     <h2 class=\\\"\").concat(swalClasses.title, \"\\\" id=\\\"\").concat(swalClasses.title, \"\\\"></h2>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.close, \"\\\"></button>\\n   </div>\\n   <div class=\\\"\").concat(swalClasses.content, \"\\\">\\n     <div id=\\\"\").concat(swalClasses.content, \"\\\" class=\\\"\").concat(swalClasses['html-container'], \"\\\"></div>\\n     <input class=\\\"\").concat(swalClasses.input, \"\\\" />\\n     <input type=\\\"file\\\" class=\\\"\").concat(swalClasses.file, \"\\\" />\\n     <div class=\\\"\").concat(swalClasses.range, \"\\\">\\n       <input type=\\\"range\\\" />\\n       <output></output>\\n     </div>\\n     <select class=\\\"\").concat(swalClasses.select, \"\\\"></select>\\n     <div class=\\\"\").concat(swalClasses.radio, \"\\\"></div>\\n     <label for=\\\"\").concat(swalClasses.checkbox, \"\\\" class=\\\"\").concat(swalClasses.checkbox, \"\\\">\\n       <input type=\\\"checkbox\\\" />\\n       <span class=\\\"\").concat(swalClasses.label, \"\\\"></span>\\n     </label>\\n     <textarea class=\\\"\").concat(swalClasses.textarea, \"\\\"></textarea>\\n     <div class=\\\"\").concat(swalClasses['validation-message'], \"\\\" id=\\\"\").concat(swalClasses['validation-message'], \"\\\"></div>\\n   </div>\\n   <div class=\\\"\").concat(swalClasses.actions, \"\\\">\\n     <div class=\\\"\").concat(swalClasses.loader, \"\\\"></div>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.confirm, \"\\\"></button>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.deny, \"\\\"></button>\\n     <button type=\\\"button\\\" class=\\\"\").concat(swalClasses.cancel, \"\\\"></button>\\n   </div>\\n   <div class=\\\"\").concat(swalClasses.footer, \"\\\"></div>\\n   <div class=\\\"\").concat(swalClasses['timer-progress-bar-container'], \"\\\">\\n     <div class=\\\"\").concat(swalClasses['timer-progress-bar'], \"\\\"></div>\\n   </div>\\n </div>\\n\").replace(/(^|\\n)\\s*/g, '');\n\n  var resetOldContainer = function resetOldContainer() {\n    var oldContainer = getContainer();\n\n    if (!oldContainer) {\n      return false;\n    }\n\n    oldContainer.parentNode.removeChild(oldContainer);\n    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n    return true;\n  };\n\n  var oldInputVal; // IE11 workaround, see #1109 for details\n\n  var resetValidationMessage = function resetValidationMessage(e) {\n    if (Swal.isVisible() && oldInputVal !== e.target.value) {\n      Swal.resetValidationMessage();\n    }\n\n    oldInputVal = e.target.value;\n  };\n\n  var addInputChangeListeners = function addInputChangeListeners() {\n    var content = getContent();\n    var input = getChildByClass(content, swalClasses.input);\n    var file = getChildByClass(content, swalClasses.file);\n    var range = content.querySelector(\".\".concat(swalClasses.range, \" input\"));\n    var rangeOutput = content.querySelector(\".\".concat(swalClasses.range, \" output\"));\n    var select = getChildByClass(content, swalClasses.select);\n    var checkbox = content.querySelector(\".\".concat(swalClasses.checkbox, \" input\"));\n    var textarea = getChildByClass(content, swalClasses.textarea);\n    input.oninput = resetValidationMessage;\n    file.onchange = resetValidationMessage;\n    select.onchange = resetValidationMessage;\n    checkbox.onchange = resetValidationMessage;\n    textarea.oninput = resetValidationMessage;\n\n    range.oninput = function (e) {\n      resetValidationMessage(e);\n      rangeOutput.value = range.value;\n    };\n\n    range.onchange = function (e) {\n      resetValidationMessage(e);\n      range.nextSibling.value = range.value;\n    };\n  };\n\n  var getTarget = function getTarget(target) {\n    return typeof target === 'string' ? document.querySelector(target) : target;\n  };\n\n  var setupAccessibility = function setupAccessibility(params) {\n    var popup = getPopup();\n    popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n    popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n\n    if (!params.toast) {\n      popup.setAttribute('aria-modal', 'true');\n    }\n  };\n\n  var setupRTL = function setupRTL(targetElement) {\n    if (window.getComputedStyle(targetElement).direction === 'rtl') {\n      addClass(getContainer(), swalClasses.rtl);\n    }\n  };\n  /*\n   * Add modal + backdrop to DOM\n   */\n\n\n  var init = function init(params) {\n    // Clean up the old popup container if it exists\n    var oldContainerExisted = resetOldContainer();\n    /* istanbul ignore if */\n\n    if (isNodeEnv()) {\n      error('SweetAlert2 requires document to initialize');\n      return;\n    }\n\n    var container = document.createElement('div');\n    container.className = swalClasses.container;\n\n    if (oldContainerExisted) {\n      addClass(container, swalClasses['no-transition']);\n    }\n\n    setInnerHtml(container, sweetHTML);\n    var targetElement = getTarget(params.target);\n    targetElement.appendChild(container);\n    setupAccessibility(params);\n    setupRTL(targetElement);\n    addInputChangeListeners();\n  };\n\n  var parseHtmlToContainer = function parseHtmlToContainer(param, target) {\n    // DOM element\n    if (param instanceof HTMLElement) {\n      target.appendChild(param); // Object\n    } else if (_typeof(param) === 'object') {\n      handleObject(param, target); // Plain string\n    } else if (param) {\n      setInnerHtml(target, param);\n    }\n  };\n\n  var handleObject = function handleObject(param, target) {\n    // JQuery element(s)\n    if (param.jquery) {\n      handleJqueryElem(target, param); // For other objects use their string representation\n    } else {\n      setInnerHtml(target, param.toString());\n    }\n  };\n\n  var handleJqueryElem = function handleJqueryElem(target, elem) {\n    target.textContent = '';\n\n    if (0 in elem) {\n      for (var i = 0; (i in elem); i++) {\n        target.appendChild(elem[i].cloneNode(true));\n      }\n    } else {\n      target.appendChild(elem.cloneNode(true));\n    }\n  };\n\n  var animationEndEvent = function () {\n    // Prevent run in Node env\n\n    /* istanbul ignore if */\n    if (isNodeEnv()) {\n      return false;\n    }\n\n    var testEl = document.createElement('div');\n    var transEndEventNames = {\n      WebkitAnimation: 'webkitAnimationEnd',\n      OAnimation: 'oAnimationEnd oanimationend',\n      animation: 'animationend'\n    };\n\n    for (var i in transEndEventNames) {\n      if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') {\n        return transEndEventNames[i];\n      }\n    }\n\n    return false;\n  }();\n\n  // https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n\n  var measureScrollbar = function measureScrollbar() {\n    var scrollDiv = document.createElement('div');\n    scrollDiv.className = swalClasses['scrollbar-measure'];\n    document.body.appendChild(scrollDiv);\n    var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n    document.body.removeChild(scrollDiv);\n    return scrollbarWidth;\n  };\n\n  var renderActions = function renderActions(instance, params) {\n    var actions = getActions();\n    var loader = getLoader();\n    var confirmButton = getConfirmButton();\n    var denyButton = getDenyButton();\n    var cancelButton = getCancelButton(); // Actions (buttons) wrapper\n\n    if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n      hide(actions);\n    } // Custom class\n\n\n    applyCustomClass(actions, params, 'actions'); // Render buttons\n\n    renderButton(confirmButton, 'confirm', params);\n    renderButton(denyButton, 'deny', params);\n    renderButton(cancelButton, 'cancel', params);\n    handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n\n    if (params.reverseButtons) {\n      actions.insertBefore(cancelButton, loader);\n      actions.insertBefore(denyButton, loader);\n      actions.insertBefore(confirmButton, loader);\n    } // Loader\n\n\n    setInnerHtml(loader, params.loaderHtml);\n    applyCustomClass(loader, params, 'loader');\n  };\n\n  function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n    if (!params.buttonsStyling) {\n      return removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n    }\n\n    addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); // Buttons background colors\n\n    if (params.confirmButtonColor) {\n      confirmButton.style.backgroundColor = params.confirmButtonColor;\n    }\n\n    if (params.denyButtonColor) {\n      denyButton.style.backgroundColor = params.denyButtonColor;\n    }\n\n    if (params.cancelButtonColor) {\n      cancelButton.style.backgroundColor = params.cancelButtonColor;\n    }\n  }\n\n  function renderButton(button, buttonType, params) {\n    toggle(button, params[\"show\".concat(capitalizeFirstLetter(buttonType), \"Button\")], 'inline-block');\n    setInnerHtml(button, params[\"\".concat(buttonType, \"ButtonText\")]); // Set caption text\n\n    button.setAttribute('aria-label', params[\"\".concat(buttonType, \"ButtonAriaLabel\")]); // ARIA label\n    // Add buttons custom classes\n\n    button.className = swalClasses[buttonType];\n    applyCustomClass(button, params, \"\".concat(buttonType, \"Button\"));\n    addClass(button, params[\"\".concat(buttonType, \"ButtonClass\")]);\n  }\n\n  function handleBackdropParam(container, backdrop) {\n    if (typeof backdrop === 'string') {\n      container.style.background = backdrop;\n    } else if (!backdrop) {\n      addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n    }\n  }\n\n  function handlePositionParam(container, position) {\n    if (position in swalClasses) {\n      addClass(container, swalClasses[position]);\n    } else {\n      warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n      addClass(container, swalClasses.center);\n    }\n  }\n\n  function handleGrowParam(container, grow) {\n    if (grow && typeof grow === 'string') {\n      var growClass = \"grow-\".concat(grow);\n\n      if (growClass in swalClasses) {\n        addClass(container, swalClasses[growClass]);\n      }\n    }\n  }\n\n  var renderContainer = function renderContainer(instance, params) {\n    var container = getContainer();\n\n    if (!container) {\n      return;\n    }\n\n    handleBackdropParam(container, params.backdrop);\n\n    if (!params.backdrop && params.allowOutsideClick) {\n      warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n    }\n\n    handlePositionParam(container, params.position);\n    handleGrowParam(container, params.grow); // Custom class\n\n    applyCustomClass(container, params, 'container'); // Set queue step attribute for getQueueStep() method\n\n    var queueStep = document.body.getAttribute('data-swal2-queue-step');\n\n    if (queueStep) {\n      container.setAttribute('data-queue-step', queueStep);\n      document.body.removeAttribute('data-swal2-queue-step');\n    }\n  };\n\n  /**\n   * This module containts `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n  var privateProps = {\n    promise: new WeakMap(),\n    innerParams: new WeakMap(),\n    domCache: new WeakMap()\n  };\n\n  var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n  var renderInput = function renderInput(instance, params) {\n    var content = getContent();\n    var innerParams = privateProps.innerParams.get(instance);\n    var rerender = !innerParams || params.input !== innerParams.input;\n    inputTypes.forEach(function (inputType) {\n      var inputClass = swalClasses[inputType];\n      var inputContainer = getChildByClass(content, inputClass); // set attributes\n\n      setAttributes(inputType, params.inputAttributes); // set class\n\n      inputContainer.className = inputClass;\n\n      if (rerender) {\n        hide(inputContainer);\n      }\n    });\n\n    if (params.input) {\n      if (rerender) {\n        showInput(params);\n      } // set custom class\n\n\n      setCustomClass(params);\n    }\n  };\n\n  var showInput = function showInput(params) {\n    if (!renderInputType[params.input]) {\n      return error(\"Unexpected type of input! Expected \\\"text\\\", \\\"email\\\", \\\"password\\\", \\\"number\\\", \\\"tel\\\", \\\"select\\\", \\\"radio\\\", \\\"checkbox\\\", \\\"textarea\\\", \\\"file\\\" or \\\"url\\\", got \\\"\".concat(params.input, \"\\\"\"));\n    }\n\n    var inputContainer = getInputContainer(params.input);\n    var input = renderInputType[params.input](inputContainer, params);\n    show(input); // input autofocus\n\n    setTimeout(function () {\n      focusInput(input);\n    });\n  };\n\n  var removeAttributes = function removeAttributes(input) {\n    for (var i = 0; i < input.attributes.length; i++) {\n      var attrName = input.attributes[i].name;\n\n      if (!(['type', 'value', 'style'].indexOf(attrName) !== -1)) {\n        input.removeAttribute(attrName);\n      }\n    }\n  };\n\n  var setAttributes = function setAttributes(inputType, inputAttributes) {\n    var input = getInput(getContent(), inputType);\n\n    if (!input) {\n      return;\n    }\n\n    removeAttributes(input);\n\n    for (var attr in inputAttributes) {\n      // Do not set a placeholder for <input type=\"range\">\n      // it'll crash Edge, #1298\n      if (inputType === 'range' && attr === 'placeholder') {\n        continue;\n      }\n\n      input.setAttribute(attr, inputAttributes[attr]);\n    }\n  };\n\n  var setCustomClass = function setCustomClass(params) {\n    var inputContainer = getInputContainer(params.input);\n\n    if (params.customClass) {\n      addClass(inputContainer, params.customClass.input);\n    }\n  };\n\n  var setInputPlaceholder = function setInputPlaceholder(input, params) {\n    if (!input.placeholder || params.inputPlaceholder) {\n      input.placeholder = params.inputPlaceholder;\n    }\n  };\n\n  var setInputLabel = function setInputLabel(input, prependTo, params) {\n    if (params.inputLabel) {\n      input.id = swalClasses.input;\n      var label = document.createElement('label');\n      var labelClass = swalClasses['input-label'];\n      label.setAttribute('for', input.id);\n      label.className = labelClass;\n      addClass(label, params.customClass.inputLabel);\n      label.innerText = params.inputLabel;\n      prependTo.insertAdjacentElement('beforebegin', label);\n    }\n  };\n\n  var getInputContainer = function getInputContainer(inputType) {\n    var inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input;\n    return getChildByClass(getContent(), inputClass);\n  };\n\n  var renderInputType = {};\n\n  renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = function (input, params) {\n    if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') {\n      input.value = params.inputValue;\n    } else if (!isPromise(params.inputValue)) {\n      warn(\"Unexpected type of inputValue! Expected \\\"string\\\", \\\"number\\\" or \\\"Promise\\\", got \\\"\".concat(_typeof(params.inputValue), \"\\\"\"));\n    }\n\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    input.type = params.input;\n    return input;\n  };\n\n  renderInputType.file = function (input, params) {\n    setInputLabel(input, input, params);\n    setInputPlaceholder(input, params);\n    return input;\n  };\n\n  renderInputType.range = function (range, params) {\n    var rangeInput = range.querySelector('input');\n    var rangeOutput = range.querySelector('output');\n    rangeInput.value = params.inputValue;\n    rangeInput.type = params.input;\n    rangeOutput.value = params.inputValue;\n    setInputLabel(rangeInput, range, params);\n    return range;\n  };\n\n  renderInputType.select = function (select, params) {\n    select.textContent = '';\n\n    if (params.inputPlaceholder) {\n      var placeholder = document.createElement('option');\n      setInnerHtml(placeholder, params.inputPlaceholder);\n      placeholder.value = '';\n      placeholder.disabled = true;\n      placeholder.selected = true;\n      select.appendChild(placeholder);\n    }\n\n    setInputLabel(select, select, params);\n    return select;\n  };\n\n  renderInputType.radio = function (radio) {\n    radio.textContent = '';\n    return radio;\n  };\n\n  renderInputType.checkbox = function (checkboxContainer, params) {\n    var checkbox = getInput(getContent(), 'checkbox');\n    checkbox.value = 1;\n    checkbox.id = swalClasses.checkbox;\n    checkbox.checked = Boolean(params.inputValue);\n    var label = checkboxContainer.querySelector('span');\n    setInnerHtml(label, params.inputPlaceholder);\n    return checkboxContainer;\n  };\n\n  renderInputType.textarea = function (textarea, params) {\n    textarea.value = params.inputValue;\n    setInputPlaceholder(textarea, params);\n    setInputLabel(textarea, textarea, params);\n\n    var getPadding = function getPadding(el) {\n      return parseInt(window.getComputedStyle(el).paddingLeft) + parseInt(window.getComputedStyle(el).paddingRight);\n    };\n\n    if ('MutationObserver' in window) {\n      // #1699\n      var initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n\n      var outputsize = function outputsize() {\n        var contentWidth = textarea.offsetWidth + getPadding(getPopup()) + getPadding(getContent());\n\n        if (contentWidth > initialPopupWidth) {\n          getPopup().style.width = \"\".concat(contentWidth, \"px\");\n        } else {\n          getPopup().style.width = null;\n        }\n      };\n\n      new MutationObserver(outputsize).observe(textarea, {\n        attributes: true,\n        attributeFilter: ['style']\n      });\n    }\n\n    return textarea;\n  };\n\n  var renderContent = function renderContent(instance, params) {\n    var htmlContainer = getHtmlContainer();\n    applyCustomClass(htmlContainer, params, 'htmlContainer'); // Content as HTML\n\n    if (params.html) {\n      parseHtmlToContainer(params.html, htmlContainer);\n      show(htmlContainer, 'block'); // Content as plain text\n    } else if (params.text) {\n      htmlContainer.textContent = params.text;\n      show(htmlContainer, 'block'); // No content\n    } else {\n      hide(htmlContainer);\n    }\n\n    renderInput(instance, params); // Custom class\n\n    applyCustomClass(getContent(), params, 'content');\n  };\n\n  var renderFooter = function renderFooter(instance, params) {\n    var footer = getFooter();\n    toggle(footer, params.footer);\n\n    if (params.footer) {\n      parseHtmlToContainer(params.footer, footer);\n    } // Custom class\n\n\n    applyCustomClass(footer, params, 'footer');\n  };\n\n  var renderCloseButton = function renderCloseButton(instance, params) {\n    var closeButton = getCloseButton();\n    setInnerHtml(closeButton, params.closeButtonHtml); // Custom class\n\n    applyCustomClass(closeButton, params, 'closeButton');\n    toggle(closeButton, params.showCloseButton);\n    closeButton.setAttribute('aria-label', params.closeButtonAriaLabel);\n  };\n\n  var renderIcon = function renderIcon(instance, params) {\n    var innerParams = privateProps.innerParams.get(instance);\n    var icon = getIcon(); // if the given icon already rendered, apply the styling without re-rendering the icon\n\n    if (innerParams && params.icon === innerParams.icon) {\n      // Custom or default content\n      setContent(icon, params);\n      applyStyles(icon, params);\n      return;\n    }\n\n    if (!params.icon && !params.iconHtml) {\n      return hide(icon);\n    }\n\n    if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n      error(\"Unknown icon! Expected \\\"success\\\", \\\"error\\\", \\\"warning\\\", \\\"info\\\" or \\\"question\\\", got \\\"\".concat(params.icon, \"\\\"\"));\n      return hide(icon);\n    }\n\n    show(icon); // Custom or default content\n\n    setContent(icon, params);\n    applyStyles(icon, params); // Animate icon\n\n    addClass(icon, params.showClass.icon);\n  };\n\n  var applyStyles = function applyStyles(icon, params) {\n    for (var iconType in iconTypes) {\n      if (params.icon !== iconType) {\n        removeClass(icon, iconTypes[iconType]);\n      }\n    }\n\n    addClass(icon, iconTypes[params.icon]); // Icon color\n\n    setColor(icon, params); // Success icon background color\n\n    adjustSuccessIconBackgoundColor(); // Custom class\n\n    applyCustomClass(icon, params, 'icon');\n  }; // Adjust success icon background color to match the popup background color\n\n\n  var adjustSuccessIconBackgoundColor = function adjustSuccessIconBackgoundColor() {\n    var popup = getPopup();\n    var popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n    var successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n\n    for (var i = 0; i < successIconParts.length; i++) {\n      successIconParts[i].style.backgroundColor = popupBackgroundColor;\n    }\n  };\n\n  var setContent = function setContent(icon, params) {\n    icon.textContent = '';\n\n    if (params.iconHtml) {\n      setInnerHtml(icon, iconContent(params.iconHtml));\n    } else if (params.icon === 'success') {\n      setInnerHtml(icon, \"\\n      <div class=\\\"swal2-success-circular-line-left\\\"></div>\\n      <span class=\\\"swal2-success-line-tip\\\"></span> <span class=\\\"swal2-success-line-long\\\"></span>\\n      <div class=\\\"swal2-success-ring\\\"></div> <div class=\\\"swal2-success-fix\\\"></div>\\n      <div class=\\\"swal2-success-circular-line-right\\\"></div>\\n    \");\n    } else if (params.icon === 'error') {\n      setInnerHtml(icon, \"\\n      <span class=\\\"swal2-x-mark\\\">\\n        <span class=\\\"swal2-x-mark-line-left\\\"></span>\\n        <span class=\\\"swal2-x-mark-line-right\\\"></span>\\n      </span>\\n    \");\n    } else {\n      var defaultIconHtml = {\n        question: '?',\n        warning: '!',\n        info: 'i'\n      };\n      setInnerHtml(icon, iconContent(defaultIconHtml[params.icon]));\n    }\n  };\n\n  var setColor = function setColor(icon, params) {\n    if (!params.iconColor) {\n      return;\n    }\n\n    icon.style.color = params.iconColor;\n    icon.style.borderColor = params.iconColor;\n\n    for (var _i = 0, _arr = ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']; _i < _arr.length; _i++) {\n      var sel = _arr[_i];\n      setStyle(icon, sel, 'backgroundColor', params.iconColor);\n    }\n\n    setStyle(icon, '.swal2-success-ring', 'borderColor', params.iconColor);\n  };\n\n  var iconContent = function iconContent(content) {\n    return \"<div class=\\\"\".concat(swalClasses['icon-content'], \"\\\">\").concat(content, \"</div>\");\n  };\n\n  var renderImage = function renderImage(instance, params) {\n    var image = getImage();\n\n    if (!params.imageUrl) {\n      return hide(image);\n    }\n\n    show(image, ''); // Src, alt\n\n    image.setAttribute('src', params.imageUrl);\n    image.setAttribute('alt', params.imageAlt); // Width, height\n\n    applyNumericalStyle(image, 'width', params.imageWidth);\n    applyNumericalStyle(image, 'height', params.imageHeight); // Class\n\n    image.className = swalClasses.image;\n    applyCustomClass(image, params, 'image');\n  };\n\n  var currentSteps = [];\n  /*\n   * Global function for chaining sweetAlert popups\n   */\n\n  var queue = function queue(steps) {\n    warnAboutDeprecation('Swal.queue()', \"async/await\");\n    var Swal = this;\n    currentSteps = steps;\n\n    var resetAndResolve = function resetAndResolve(resolve, value) {\n      currentSteps = [];\n      resolve(value);\n    };\n\n    var queueResult = [];\n    return new Promise(function (resolve) {\n      (function step(i, callback) {\n        if (i < currentSteps.length) {\n          document.body.setAttribute('data-swal2-queue-step', i);\n          Swal.fire(currentSteps[i]).then(function (result) {\n            if (typeof result.value !== 'undefined') {\n              queueResult.push(result.value);\n              step(i + 1, callback);\n            } else {\n              resetAndResolve(resolve, {\n                dismiss: result.dismiss\n              });\n            }\n          });\n        } else {\n          resetAndResolve(resolve, {\n            value: queueResult\n          });\n        }\n      })(0);\n    });\n  };\n  /*\n   * Global function for getting the index of current popup in queue\n   */\n\n  var getQueueStep = function getQueueStep() {\n    return getContainer() && getContainer().getAttribute('data-queue-step');\n  };\n  /*\n   * Global function for inserting a popup to the queue\n   */\n\n  var insertQueueStep = function insertQueueStep(step, index) {\n    if (index && index < currentSteps.length) {\n      return currentSteps.splice(index, 0, step);\n    }\n\n    return currentSteps.push(step);\n  };\n  /*\n   * Global function for deleting a popup from the queue\n   */\n\n  var deleteQueueStep = function deleteQueueStep(index) {\n    if (typeof currentSteps[index] !== 'undefined') {\n      currentSteps.splice(index, 1);\n    }\n  };\n\n  var createStepElement = function createStepElement(step) {\n    var stepEl = document.createElement('li');\n    addClass(stepEl, swalClasses['progress-step']);\n    setInnerHtml(stepEl, step);\n    return stepEl;\n  };\n\n  var createLineElement = function createLineElement(params) {\n    var lineEl = document.createElement('li');\n    addClass(lineEl, swalClasses['progress-step-line']);\n\n    if (params.progressStepsDistance) {\n      lineEl.style.width = params.progressStepsDistance;\n    }\n\n    return lineEl;\n  };\n\n  var renderProgressSteps = function renderProgressSteps(instance, params) {\n    var progressStepsContainer = getProgressSteps();\n\n    if (!params.progressSteps || params.progressSteps.length === 0) {\n      return hide(progressStepsContainer);\n    }\n\n    show(progressStepsContainer);\n    progressStepsContainer.textContent = '';\n    var currentProgressStep = parseInt(params.currentProgressStep === undefined ? getQueueStep() : params.currentProgressStep);\n\n    if (currentProgressStep >= params.progressSteps.length) {\n      warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n\n    params.progressSteps.forEach(function (step, index) {\n      var stepEl = createStepElement(step);\n      progressStepsContainer.appendChild(stepEl);\n\n      if (index === currentProgressStep) {\n        addClass(stepEl, swalClasses['active-progress-step']);\n      }\n\n      if (index !== params.progressSteps.length - 1) {\n        var lineEl = createLineElement(params);\n        progressStepsContainer.appendChild(lineEl);\n      }\n    });\n  };\n\n  var renderTitle = function renderTitle(instance, params) {\n    var title = getTitle();\n    toggle(title, params.title || params.titleText, 'block');\n\n    if (params.title) {\n      parseHtmlToContainer(params.title, title);\n    }\n\n    if (params.titleText) {\n      title.innerText = params.titleText;\n    } // Custom class\n\n\n    applyCustomClass(title, params, 'title');\n  };\n\n  var renderHeader = function renderHeader(instance, params) {\n    var header = getHeader(); // Custom class\n\n    applyCustomClass(header, params, 'header'); // Progress steps\n\n    renderProgressSteps(instance, params); // Icon\n\n    renderIcon(instance, params); // Image\n\n    renderImage(instance, params); // Title\n\n    renderTitle(instance, params); // Close button\n\n    renderCloseButton(instance, params);\n  };\n\n  var renderPopup = function renderPopup(instance, params) {\n    var container = getContainer();\n    var popup = getPopup(); // Width\n\n    if (params.toast) {\n      // #2170\n      applyNumericalStyle(container, 'width', params.width);\n      popup.style.width = '100%';\n    } else {\n      applyNumericalStyle(popup, 'width', params.width);\n    } // Padding\n\n\n    applyNumericalStyle(popup, 'padding', params.padding); // Background\n\n    if (params.background) {\n      popup.style.background = params.background;\n    }\n\n    hide(getValidationMessage()); // Classes\n\n    addClasses(popup, params);\n  };\n\n  var addClasses = function addClasses(popup, params) {\n    // Default Class + showClass when updating Swal.update({})\n    popup.className = \"\".concat(swalClasses.popup, \" \").concat(isVisible(popup) ? params.showClass.popup : '');\n\n    if (params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n      addClass(popup, swalClasses.toast);\n    } else {\n      addClass(popup, swalClasses.modal);\n    } // Custom class\n\n\n    applyCustomClass(popup, params, 'popup');\n\n    if (typeof params.customClass === 'string') {\n      addClass(popup, params.customClass);\n    } // Icon class (#1842)\n\n\n    if (params.icon) {\n      addClass(popup, swalClasses[\"icon-\".concat(params.icon)]);\n    }\n  };\n\n  var render = function render(instance, params) {\n    renderPopup(instance, params);\n    renderContainer(instance, params);\n    renderHeader(instance, params);\n    renderContent(instance, params);\n    renderActions(instance, params);\n    renderFooter(instance, params);\n\n    if (typeof params.didRender === 'function') {\n      params.didRender(getPopup());\n    } else if (typeof params.onRender === 'function') {\n      params.onRender(getPopup()); // @deprecated\n    }\n  };\n\n  /*\n   * Global function to determine if SweetAlert2 popup is shown\n   */\n\n  var isVisible$1 = function isVisible$$1() {\n    return isVisible(getPopup());\n  };\n  /*\n   * Global function to click 'Confirm' button\n   */\n\n  var clickConfirm = function clickConfirm() {\n    return getConfirmButton() && getConfirmButton().click();\n  };\n  /*\n   * Global function to click 'Deny' button\n   */\n\n  var clickDeny = function clickDeny() {\n    return getDenyButton() && getDenyButton().click();\n  };\n  /*\n   * Global function to click 'Cancel' button\n   */\n\n  var clickCancel = function clickCancel() {\n    return getCancelButton() && getCancelButton().click();\n  };\n\n  function fire() {\n    var Swal = this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _construct(Swal, args);\n  }\n\n  /**\n   * Returns an extended version of `Swal` containing `params` as defaults.\n   * Useful for reusing Swal configuration.\n   *\n   * For example:\n   *\n   * Before:\n   * const textPromptOptions = { input: 'text', showCancelButton: true }\n   * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })\n   * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })\n   *\n   * After:\n   * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })\n   * const {value: firstName} = await TextPrompt('What is your first name?')\n   * const {value: lastName} = await TextPrompt('What is your last name?')\n   *\n   * @param mixinParams\n   */\n  function mixin(mixinParams) {\n    var MixinSwal = /*#__PURE__*/function (_this) {\n      _inherits(MixinSwal, _this);\n\n      var _super = _createSuper(MixinSwal);\n\n      function MixinSwal() {\n        _classCallCheck(this, MixinSwal);\n\n        return _super.apply(this, arguments);\n      }\n\n      _createClass(MixinSwal, [{\n        key: \"_main\",\n        value: function _main(params, priorityMixinParams) {\n          return _get(_getPrototypeOf(MixinSwal.prototype), \"_main\", this).call(this, params, _extends({}, mixinParams, priorityMixinParams));\n        }\n      }]);\n\n      return MixinSwal;\n    }(this);\n\n    return MixinSwal;\n  }\n\n  /**\n   * Shows loader (spinner), this is useful with AJAX requests.\n   * By default the loader be shown instead of the \"Confirm\" button.\n   */\n\n  var showLoading = function showLoading(buttonToReplace) {\n    var popup = getPopup();\n\n    if (!popup) {\n      Swal.fire();\n    }\n\n    popup = getPopup();\n    var actions = getActions();\n    var loader = getLoader();\n\n    if (!buttonToReplace && isVisible(getConfirmButton())) {\n      buttonToReplace = getConfirmButton();\n    }\n\n    show(actions);\n\n    if (buttonToReplace) {\n      hide(buttonToReplace);\n      loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n    }\n\n    loader.parentNode.insertBefore(loader, buttonToReplace);\n    addClass([popup, actions], swalClasses.loading);\n    show(loader);\n    popup.setAttribute('data-loading', true);\n    popup.setAttribute('aria-busy', true);\n    popup.focus();\n  };\n\n  var RESTORE_FOCUS_TIMEOUT = 100;\n\n  var globalState = {};\n\n  var focusPreviousActiveElement = function focusPreviousActiveElement() {\n    if (globalState.previousActiveElement && globalState.previousActiveElement.focus) {\n      globalState.previousActiveElement.focus();\n      globalState.previousActiveElement = null;\n    } else if (document.body) {\n      document.body.focus();\n    }\n  }; // Restore previous active (focused) element\n\n\n  var restoreActiveElement = function restoreActiveElement(returnFocus) {\n    return new Promise(function (resolve) {\n      if (!returnFocus) {\n        return resolve();\n      }\n\n      var x = window.scrollX;\n      var y = window.scrollY;\n      globalState.restoreFocusTimeout = setTimeout(function () {\n        focusPreviousActiveElement();\n        resolve();\n      }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n      if (typeof x !== 'undefined' && typeof y !== 'undefined') {\n        // IE doesn't have scrollX/scrollY support\n        window.scrollTo(x, y);\n      }\n    });\n  };\n\n  /**\n   * If `timer` parameter is set, returns number of milliseconds of timer remained.\n   * Otherwise, returns undefined.\n   */\n\n  var getTimerLeft = function getTimerLeft() {\n    return globalState.timeout && globalState.timeout.getTimerLeft();\n  };\n  /**\n   * Stop timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   */\n\n  var stopTimer = function stopTimer() {\n    if (globalState.timeout) {\n      stopTimerProgressBar();\n      return globalState.timeout.stop();\n    }\n  };\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   */\n\n  var resumeTimer = function resumeTimer() {\n    if (globalState.timeout) {\n      var remaining = globalState.timeout.start();\n      animateTimerProgressBar(remaining);\n      return remaining;\n    }\n  };\n  /**\n   * Resume timer. Returns number of milliseconds of timer remained.\n   * If `timer` parameter isn't set, returns undefined.\n   */\n\n  var toggleTimer = function toggleTimer() {\n    var timer = globalState.timeout;\n    return timer && (timer.running ? stopTimer() : resumeTimer());\n  };\n  /**\n   * Increase timer. Returns number of milliseconds of an updated timer.\n   * If `timer` parameter isn't set, returns undefined.\n   */\n\n  var increaseTimer = function increaseTimer(n) {\n    if (globalState.timeout) {\n      var remaining = globalState.timeout.increase(n);\n      animateTimerProgressBar(remaining, true);\n      return remaining;\n    }\n  };\n  /**\n   * Check if timer is running. Returns true if timer is running\n   * or false if timer is paused or stopped.\n   * If `timer` parameter isn't set, returns undefined\n   */\n\n  var isTimerRunning = function isTimerRunning() {\n    return globalState.timeout && globalState.timeout.isRunning();\n  };\n\n  var bodyClickListenerAdded = false;\n  var clickHandlers = {};\n  function bindClickHandler() {\n    var attr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'data-swal-template';\n    clickHandlers[attr] = this;\n\n    if (!bodyClickListenerAdded) {\n      document.body.addEventListener('click', bodyClickListener);\n      bodyClickListenerAdded = true;\n    }\n  }\n\n  var bodyClickListener = function bodyClickListener(event) {\n    // 1. using .parentNode instead of event.path because of better support by old browsers https://stackoverflow.com/a/39245638\n    // 2. using .parentNode instead of .parentElement because of IE11 + SVG https://stackoverflow.com/a/36270354\n    for (var el = event.target; el && el !== document; el = el.parentNode) {\n      for (var attr in clickHandlers) {\n        var template = el.getAttribute(attr);\n\n        if (template) {\n          clickHandlers[attr].fire({\n            template: template\n          });\n          return;\n        }\n      }\n    }\n  };\n\n  var defaultParams = {\n    title: '',\n    titleText: '',\n    text: '',\n    html: '',\n    footer: '',\n    icon: undefined,\n    iconColor: undefined,\n    iconHtml: undefined,\n    template: undefined,\n    toast: false,\n    animation: true,\n    showClass: {\n      popup: 'swal2-show',\n      backdrop: 'swal2-backdrop-show',\n      icon: 'swal2-icon-show'\n    },\n    hideClass: {\n      popup: 'swal2-hide',\n      backdrop: 'swal2-backdrop-hide',\n      icon: 'swal2-icon-hide'\n    },\n    customClass: {},\n    target: 'body',\n    backdrop: true,\n    heightAuto: true,\n    allowOutsideClick: true,\n    allowEscapeKey: true,\n    allowEnterKey: true,\n    stopKeydownPropagation: true,\n    keydownListenerCapture: false,\n    showConfirmButton: true,\n    showDenyButton: false,\n    showCancelButton: false,\n    preConfirm: undefined,\n    preDeny: undefined,\n    confirmButtonText: 'OK',\n    confirmButtonAriaLabel: '',\n    confirmButtonColor: undefined,\n    denyButtonText: 'No',\n    denyButtonAriaLabel: '',\n    denyButtonColor: undefined,\n    cancelButtonText: 'Cancel',\n    cancelButtonAriaLabel: '',\n    cancelButtonColor: undefined,\n    buttonsStyling: true,\n    reverseButtons: false,\n    focusConfirm: true,\n    focusDeny: false,\n    focusCancel: false,\n    returnFocus: true,\n    showCloseButton: false,\n    closeButtonHtml: '&times;',\n    closeButtonAriaLabel: 'Close this dialog',\n    loaderHtml: '',\n    showLoaderOnConfirm: false,\n    showLoaderOnDeny: false,\n    imageUrl: undefined,\n    imageWidth: undefined,\n    imageHeight: undefined,\n    imageAlt: '',\n    timer: undefined,\n    timerProgressBar: false,\n    width: undefined,\n    padding: undefined,\n    background: undefined,\n    input: undefined,\n    inputPlaceholder: '',\n    inputLabel: '',\n    inputValue: '',\n    inputOptions: {},\n    inputAutoTrim: true,\n    inputAttributes: {},\n    inputValidator: undefined,\n    returnInputValueOnDeny: false,\n    validationMessage: undefined,\n    grow: false,\n    position: 'center',\n    progressSteps: [],\n    currentProgressStep: undefined,\n    progressStepsDistance: undefined,\n    onBeforeOpen: undefined,\n    onOpen: undefined,\n    willOpen: undefined,\n    didOpen: undefined,\n    onRender: undefined,\n    didRender: undefined,\n    onClose: undefined,\n    onAfterClose: undefined,\n    willClose: undefined,\n    didClose: undefined,\n    onDestroy: undefined,\n    didDestroy: undefined,\n    scrollbarPadding: true\n  };\n  var updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'onAfterClose', 'onClose', 'onDestroy', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'willClose'];\n  var deprecatedParams = {\n    animation: 'showClass\" and \"hideClass',\n    onBeforeOpen: 'willOpen',\n    onOpen: 'didOpen',\n    onRender: 'didRender',\n    onClose: 'willClose',\n    onAfterClose: 'didClose',\n    onDestroy: 'didDestroy'\n  };\n  var toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture'];\n  /**\n   * Is valid parameter\n   * @param {String} paramName\n   */\n\n  var isValidParameter = function isValidParameter(paramName) {\n    return Object.prototype.hasOwnProperty.call(defaultParams, paramName);\n  };\n  /**\n   * Is valid parameter for Swal.update() method\n   * @param {String} paramName\n   */\n\n  var isUpdatableParameter = function isUpdatableParameter(paramName) {\n    return updatableParams.indexOf(paramName) !== -1;\n  };\n  /**\n   * Is deprecated parameter\n   * @param {String} paramName\n   */\n\n  var isDeprecatedParameter = function isDeprecatedParameter(paramName) {\n    return deprecatedParams[paramName];\n  };\n\n  var checkIfParamIsValid = function checkIfParamIsValid(param) {\n    if (!isValidParameter(param)) {\n      warn(\"Unknown parameter \\\"\".concat(param, \"\\\"\"));\n    }\n  };\n\n  var checkIfToastParamIsValid = function checkIfToastParamIsValid(param) {\n    if (toastIncompatibleParams.indexOf(param) !== -1) {\n      warn(\"The parameter \\\"\".concat(param, \"\\\" is incompatible with toasts\"));\n    }\n  };\n\n  var checkIfParamIsDeprecated = function checkIfParamIsDeprecated(param) {\n    if (isDeprecatedParameter(param)) {\n      warnAboutDeprecation(param, isDeprecatedParameter(param));\n    }\n  };\n  /**\n   * Show relevant warnings for given params\n   *\n   * @param params\n   */\n\n\n  var showWarningsForParams = function showWarningsForParams(params) {\n    for (var param in params) {\n      checkIfParamIsValid(param);\n\n      if (params.toast) {\n        checkIfToastParamIsValid(param);\n      }\n\n      checkIfParamIsDeprecated(param);\n    }\n  };\n\n\n\n  var staticMethods = /*#__PURE__*/Object.freeze({\n    isValidParameter: isValidParameter,\n    isUpdatableParameter: isUpdatableParameter,\n    isDeprecatedParameter: isDeprecatedParameter,\n    argsToParams: argsToParams,\n    isVisible: isVisible$1,\n    clickConfirm: clickConfirm,\n    clickDeny: clickDeny,\n    clickCancel: clickCancel,\n    getContainer: getContainer,\n    getPopup: getPopup,\n    getTitle: getTitle,\n    getContent: getContent,\n    getHtmlContainer: getHtmlContainer,\n    getImage: getImage,\n    getIcon: getIcon,\n    getInputLabel: getInputLabel,\n    getCloseButton: getCloseButton,\n    getActions: getActions,\n    getConfirmButton: getConfirmButton,\n    getDenyButton: getDenyButton,\n    getCancelButton: getCancelButton,\n    getLoader: getLoader,\n    getHeader: getHeader,\n    getFooter: getFooter,\n    getTimerProgressBar: getTimerProgressBar,\n    getFocusableElements: getFocusableElements,\n    getValidationMessage: getValidationMessage,\n    isLoading: isLoading,\n    fire: fire,\n    mixin: mixin,\n    queue: queue,\n    getQueueStep: getQueueStep,\n    insertQueueStep: insertQueueStep,\n    deleteQueueStep: deleteQueueStep,\n    showLoading: showLoading,\n    enableLoading: showLoading,\n    getTimerLeft: getTimerLeft,\n    stopTimer: stopTimer,\n    resumeTimer: resumeTimer,\n    toggleTimer: toggleTimer,\n    increaseTimer: increaseTimer,\n    isTimerRunning: isTimerRunning,\n    bindClickHandler: bindClickHandler\n  });\n\n  /**\n   * Hides loader and shows back the button which was hidden by .showLoading()\n   */\n\n  function hideLoading() {\n    // do nothing if popup is closed\n    var innerParams = privateProps.innerParams.get(this);\n\n    if (!innerParams) {\n      return;\n    }\n\n    var domCache = privateProps.domCache.get(this);\n    hide(domCache.loader);\n    var buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n\n    if (buttonToReplace.length) {\n      show(buttonToReplace[0], 'inline-block');\n    } else if (allButtonsAreHidden()) {\n      hide(domCache.actions);\n    }\n\n    removeClass([domCache.popup, domCache.actions], swalClasses.loading);\n    domCache.popup.removeAttribute('aria-busy');\n    domCache.popup.removeAttribute('data-loading');\n    domCache.confirmButton.disabled = false;\n    domCache.denyButton.disabled = false;\n    domCache.cancelButton.disabled = false;\n  }\n\n  function getInput$1(instance) {\n    var innerParams = privateProps.innerParams.get(instance || this);\n    var domCache = privateProps.domCache.get(instance || this);\n\n    if (!domCache) {\n      return null;\n    }\n\n    return getInput(domCache.content, innerParams.input);\n  }\n\n  var fixScrollbar = function fixScrollbar() {\n    // for queues, do not do this more than once\n    if (states.previousBodyPadding !== null) {\n      return;\n    } // if the body has overflow\n\n\n    if (document.body.scrollHeight > window.innerHeight) {\n      // add padding so the content doesn't shift after removal of scrollbar\n      states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n      document.body.style.paddingRight = \"\".concat(states.previousBodyPadding + measureScrollbar(), \"px\");\n    }\n  };\n  var undoScrollbar = function undoScrollbar() {\n    if (states.previousBodyPadding !== null) {\n      document.body.style.paddingRight = \"\".concat(states.previousBodyPadding, \"px\");\n      states.previousBodyPadding = null;\n    }\n  };\n\n  /* istanbul ignore file */\n\n  var iOSfix = function iOSfix() {\n    var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n\n    if (iOS && !hasClass(document.body, swalClasses.iosfix)) {\n      var offset = document.body.scrollTop;\n      document.body.style.top = \"\".concat(offset * -1, \"px\");\n      addClass(document.body, swalClasses.iosfix);\n      lockBodyScroll();\n      addBottomPaddingForTallPopups(); // #1948\n    }\n  };\n\n  var addBottomPaddingForTallPopups = function addBottomPaddingForTallPopups() {\n    var safari = !navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i);\n\n    if (safari) {\n      var bottomPanelHeight = 44;\n\n      if (getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) {\n        getContainer().style.paddingBottom = \"\".concat(bottomPanelHeight, \"px\");\n      }\n    }\n  };\n\n  var lockBodyScroll = function lockBodyScroll() {\n    // #1246\n    var container = getContainer();\n    var preventTouchMove;\n\n    container.ontouchstart = function (e) {\n      preventTouchMove = shouldPreventTouchMove(e);\n    };\n\n    container.ontouchmove = function (e) {\n      if (preventTouchMove) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n    };\n  };\n\n  var shouldPreventTouchMove = function shouldPreventTouchMove(event) {\n    var target = event.target;\n    var container = getContainer();\n\n    if (isStylys(event) || isZoom(event)) {\n      return false;\n    }\n\n    if (target === container) {\n      return true;\n    }\n\n    if (!isScrollable(container) && target.tagName !== 'INPUT' && // #1603\n    !(isScrollable(getContent()) && // #1944\n    getContent().contains(target))) {\n      return true;\n    }\n\n    return false;\n  };\n\n  var isStylys = function isStylys(event) {\n    // #1786\n    return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n  };\n\n  var isZoom = function isZoom(event) {\n    // #1891\n    return event.touches && event.touches.length > 1;\n  };\n\n  var undoIOSfix = function undoIOSfix() {\n    if (hasClass(document.body, swalClasses.iosfix)) {\n      var offset = parseInt(document.body.style.top, 10);\n      removeClass(document.body, swalClasses.iosfix);\n      document.body.style.top = '';\n      document.body.scrollTop = offset * -1;\n    }\n  };\n\n  /* istanbul ignore file */\n\n  var isIE11 = function isIE11() {\n    return !!window.MSInputMethodContext && !!document.documentMode;\n  }; // Fix IE11 centering sweetalert2/issues/933\n\n\n  var fixVerticalPositionIE = function fixVerticalPositionIE() {\n    var container = getContainer();\n    var popup = getPopup();\n    container.style.removeProperty('align-items');\n\n    if (popup.offsetTop < 0) {\n      container.style.alignItems = 'flex-start';\n    }\n  };\n\n  var IEfix = function IEfix() {\n    if (typeof window !== 'undefined' && isIE11()) {\n      fixVerticalPositionIE();\n      window.addEventListener('resize', fixVerticalPositionIE);\n    }\n  };\n  var undoIEfix = function undoIEfix() {\n    if (typeof window !== 'undefined' && isIE11()) {\n      window.removeEventListener('resize', fixVerticalPositionIE);\n    }\n  };\n\n  // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n  // elements not within the active modal dialog will not be surfaced if a user opens a screen\n  // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n  var setAriaHidden = function setAriaHidden() {\n    var bodyChildren = toArray(document.body.children);\n    bodyChildren.forEach(function (el) {\n      if (el === getContainer() || contains(el, getContainer())) {\n        return;\n      }\n\n      if (el.hasAttribute('aria-hidden')) {\n        el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden'));\n      }\n\n      el.setAttribute('aria-hidden', 'true');\n    });\n  };\n  var unsetAriaHidden = function unsetAriaHidden() {\n    var bodyChildren = toArray(document.body.children);\n    bodyChildren.forEach(function (el) {\n      if (el.hasAttribute('data-previous-aria-hidden')) {\n        el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden'));\n        el.removeAttribute('data-previous-aria-hidden');\n      } else {\n        el.removeAttribute('aria-hidden');\n      }\n    });\n  };\n\n  /**\n   * This module containts `WeakMap`s for each effectively-\"private  property\" that a `Swal` has.\n   * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n   * This is the approach that Babel will probably take to implement private methods/fields\n   *   https://github.com/tc39/proposal-private-methods\n   *   https://github.com/babel/babel/pull/7555\n   * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n   *   then we can use that language feature.\n   */\n  var privateMethods = {\n    swalPromiseResolve: new WeakMap()\n  };\n\n  /*\n   * Instance method to close sweetAlert\n   */\n\n  function removePopupAndResetState(instance, container, returnFocus, didClose) {\n    if (isToast()) {\n      triggerDidCloseAndDispose(instance, didClose);\n    } else {\n      restoreActiveElement(returnFocus).then(function () {\n        return triggerDidCloseAndDispose(instance, didClose);\n      });\n      globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = false;\n    }\n\n    if (container.parentNode && !document.body.getAttribute('data-swal2-queue-step')) {\n      container.parentNode.removeChild(container);\n    }\n\n    if (isModal()) {\n      undoScrollbar();\n      undoIOSfix();\n      undoIEfix();\n      unsetAriaHidden();\n    }\n\n    removeBodyClasses();\n  }\n\n  function removeBodyClasses() {\n    removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n  }\n\n  function close(resolveValue) {\n    var popup = getPopup();\n\n    if (!popup) {\n      return;\n    }\n\n    resolveValue = prepareResolveValue(resolveValue);\n    var innerParams = privateProps.innerParams.get(this);\n\n    if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n      return;\n    }\n\n    var swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n    removeClass(popup, innerParams.showClass.popup);\n    addClass(popup, innerParams.hideClass.popup);\n    var backdrop = getContainer();\n    removeClass(backdrop, innerParams.showClass.backdrop);\n    addClass(backdrop, innerParams.hideClass.backdrop);\n    handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise\n\n    swalPromiseResolve(resolveValue);\n  }\n\n  var prepareResolveValue = function prepareResolveValue(resolveValue) {\n    // When user calls Swal.close()\n    if (typeof resolveValue === 'undefined') {\n      return {\n        isConfirmed: false,\n        isDenied: false,\n        isDismissed: true\n      };\n    }\n\n    return _extends({\n      isConfirmed: false,\n      isDenied: false,\n      isDismissed: false\n    }, resolveValue);\n  };\n\n  var handlePopupAnimation = function handlePopupAnimation(instance, popup, innerParams) {\n    var container = getContainer(); // If animation is supported, animate\n\n    var animationIsSupported = animationEndEvent && hasCssAnimation(popup);\n    var onClose = innerParams.onClose,\n        onAfterClose = innerParams.onAfterClose,\n        willClose = innerParams.willClose,\n        didClose = innerParams.didClose;\n    runDidClose(popup, willClose, onClose);\n\n    if (animationIsSupported) {\n      animatePopup(instance, popup, container, innerParams.returnFocus, didClose || onAfterClose);\n    } else {\n      // Otherwise, remove immediately\n      removePopupAndResetState(instance, container, innerParams.returnFocus, didClose || onAfterClose);\n    }\n  };\n\n  var runDidClose = function runDidClose(popup, willClose, onClose) {\n    if (willClose !== null && typeof willClose === 'function') {\n      willClose(popup);\n    } else if (onClose !== null && typeof onClose === 'function') {\n      onClose(popup); // @deprecated\n    }\n  };\n\n  var animatePopup = function animatePopup(instance, popup, container, returnFocus, didClose) {\n    globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n    popup.addEventListener(animationEndEvent, function (e) {\n      if (e.target === popup) {\n        globalState.swalCloseEventFinishedCallback();\n        delete globalState.swalCloseEventFinishedCallback;\n      }\n    });\n  };\n\n  var triggerDidCloseAndDispose = function triggerDidCloseAndDispose(instance, didClose) {\n    setTimeout(function () {\n      if (typeof didClose === 'function') {\n        didClose();\n      }\n\n      instance._destroy();\n    });\n  };\n\n  function setButtonsDisabled(instance, buttons, disabled) {\n    var domCache = privateProps.domCache.get(instance);\n    buttons.forEach(function (button) {\n      domCache[button].disabled = disabled;\n    });\n  }\n\n  function setInputDisabled(input, disabled) {\n    if (!input) {\n      return false;\n    }\n\n    if (input.type === 'radio') {\n      var radiosContainer = input.parentNode.parentNode;\n      var radios = radiosContainer.querySelectorAll('input');\n\n      for (var i = 0; i < radios.length; i++) {\n        radios[i].disabled = disabled;\n      }\n    } else {\n      input.disabled = disabled;\n    }\n  }\n\n  function enableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false);\n  }\n  function disableButtons() {\n    setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true);\n  }\n  function enableInput() {\n    return setInputDisabled(this.getInput(), false);\n  }\n  function disableInput() {\n    return setInputDisabled(this.getInput(), true);\n  }\n\n  function showValidationMessage(error) {\n    var domCache = privateProps.domCache.get(this);\n    var params = privateProps.innerParams.get(this);\n    setInnerHtml(domCache.validationMessage, error);\n    domCache.validationMessage.className = swalClasses['validation-message'];\n\n    if (params.customClass && params.customClass.validationMessage) {\n      addClass(domCache.validationMessage, params.customClass.validationMessage);\n    }\n\n    show(domCache.validationMessage);\n    var input = this.getInput();\n\n    if (input) {\n      input.setAttribute('aria-invalid', true);\n      input.setAttribute('aria-describedBy', swalClasses['validation-message']);\n      focusInput(input);\n      addClass(input, swalClasses.inputerror);\n    }\n  } // Hide block with validation message\n\n  function resetValidationMessage$1() {\n    var domCache = privateProps.domCache.get(this);\n\n    if (domCache.validationMessage) {\n      hide(domCache.validationMessage);\n    }\n\n    var input = this.getInput();\n\n    if (input) {\n      input.removeAttribute('aria-invalid');\n      input.removeAttribute('aria-describedBy');\n      removeClass(input, swalClasses.inputerror);\n    }\n  }\n\n  function getProgressSteps$1() {\n    var domCache = privateProps.domCache.get(this);\n    return domCache.progressSteps;\n  }\n\n  var Timer = /*#__PURE__*/function () {\n    function Timer(callback, delay) {\n      _classCallCheck(this, Timer);\n\n      this.callback = callback;\n      this.remaining = delay;\n      this.running = false;\n      this.start();\n    }\n\n    _createClass(Timer, [{\n      key: \"start\",\n      value: function start() {\n        if (!this.running) {\n          this.running = true;\n          this.started = new Date();\n          this.id = setTimeout(this.callback, this.remaining);\n        }\n\n        return this.remaining;\n      }\n    }, {\n      key: \"stop\",\n      value: function stop() {\n        if (this.running) {\n          this.running = false;\n          clearTimeout(this.id);\n          this.remaining -= new Date() - this.started;\n        }\n\n        return this.remaining;\n      }\n    }, {\n      key: \"increase\",\n      value: function increase(n) {\n        var running = this.running;\n\n        if (running) {\n          this.stop();\n        }\n\n        this.remaining += n;\n\n        if (running) {\n          this.start();\n        }\n\n        return this.remaining;\n      }\n    }, {\n      key: \"getTimerLeft\",\n      value: function getTimerLeft() {\n        if (this.running) {\n          this.stop();\n          this.start();\n        }\n\n        return this.remaining;\n      }\n    }, {\n      key: \"isRunning\",\n      value: function isRunning() {\n        return this.running;\n      }\n    }]);\n\n    return Timer;\n  }();\n\n  var defaultInputValidators = {\n    email: function email(string, validationMessage) {\n      return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');\n    },\n    url: function url(string, validationMessage) {\n      // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013\n      return /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');\n    }\n  };\n\n  function setDefaultInputValidators(params) {\n    // Use default `inputValidator` for supported input types if not provided\n    if (!params.inputValidator) {\n      Object.keys(defaultInputValidators).forEach(function (key) {\n        if (params.input === key) {\n          params.inputValidator = defaultInputValidators[key];\n        }\n      });\n    }\n  }\n\n  function validateCustomTargetElement(params) {\n    // Determine if the custom target element is valid\n    if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {\n      warn('Target parameter is not valid, defaulting to \"body\"');\n      params.target = 'body';\n    }\n  }\n  /**\n   * Set type, text and actions on popup\n   *\n   * @param params\n   * @returns {boolean}\n   */\n\n\n  function setParameters(params) {\n    setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm\n\n    if (params.showLoaderOnConfirm && !params.preConfirm) {\n      warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\\n' + 'https://sweetalert2.github.io/#ajax-request');\n    } // params.animation will be actually used in renderPopup.js\n    // but in case when params.animation is a function, we need to call that function\n    // before popup (re)initialization, so it'll be possible to check Swal.isVisible()\n    // inside the params.animation function\n\n\n    params.animation = callIfFunction(params.animation);\n    validateCustomTargetElement(params); // Replace newlines with <br> in title\n\n    if (typeof params.title === 'string') {\n      params.title = params.title.split('\\n').join('<br />');\n    }\n\n    init(params);\n  }\n\n  var swalStringParams = ['swal-title', 'swal-html', 'swal-footer'];\n  var getTemplateParams = function getTemplateParams(params) {\n    var template = typeof params.template === 'string' ? document.querySelector(params.template) : params.template;\n\n    if (!template) {\n      return {};\n    }\n\n    var templateContent = template.content || template; // IE11\n\n    showWarningsForElements(templateContent);\n\n    var result = _extends(getSwalParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams));\n\n    return result;\n  };\n\n  var getSwalParams = function getSwalParams(templateContent) {\n    var result = {};\n    toArray(templateContent.querySelectorAll('swal-param')).forEach(function (param) {\n      showWarningsForAttributes(param, ['name', 'value']);\n      var paramName = param.getAttribute('name');\n      var value = param.getAttribute('value');\n\n      if (typeof defaultParams[paramName] === 'boolean' && value === 'false') {\n        value = false;\n      }\n\n      if (_typeof(defaultParams[paramName]) === 'object') {\n        value = JSON.parse(value);\n      }\n\n      result[paramName] = value;\n    });\n    return result;\n  };\n\n  var getSwalButtons = function getSwalButtons(templateContent) {\n    var result = {};\n    toArray(templateContent.querySelectorAll('swal-button')).forEach(function (button) {\n      showWarningsForAttributes(button, ['type', 'color', 'aria-label']);\n      var type = button.getAttribute('type');\n      result[\"\".concat(type, \"ButtonText\")] = button.innerHTML;\n      result[\"show\".concat(capitalizeFirstLetter(type), \"Button\")] = true;\n\n      if (button.hasAttribute('color')) {\n        result[\"\".concat(type, \"ButtonColor\")] = button.getAttribute('color');\n      }\n\n      if (button.hasAttribute('aria-label')) {\n        result[\"\".concat(type, \"ButtonAriaLabel\")] = button.getAttribute('aria-label');\n      }\n    });\n    return result;\n  };\n\n  var getSwalImage = function getSwalImage(templateContent) {\n    var result = {};\n    var image = templateContent.querySelector('swal-image');\n\n    if (image) {\n      showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']);\n\n      if (image.hasAttribute('src')) {\n        result.imageUrl = image.getAttribute('src');\n      }\n\n      if (image.hasAttribute('width')) {\n        result.imageWidth = image.getAttribute('width');\n      }\n\n      if (image.hasAttribute('height')) {\n        result.imageHeight = image.getAttribute('height');\n      }\n\n      if (image.hasAttribute('alt')) {\n        result.imageAlt = image.getAttribute('alt');\n      }\n    }\n\n    return result;\n  };\n\n  var getSwalIcon = function getSwalIcon(templateContent) {\n    var result = {};\n    var icon = templateContent.querySelector('swal-icon');\n\n    if (icon) {\n      showWarningsForAttributes(icon, ['type', 'color']);\n\n      if (icon.hasAttribute('type')) {\n        result.icon = icon.getAttribute('type');\n      }\n\n      if (icon.hasAttribute('color')) {\n        result.iconColor = icon.getAttribute('color');\n      }\n\n      result.iconHtml = icon.innerHTML;\n    }\n\n    return result;\n  };\n\n  var getSwalInput = function getSwalInput(templateContent) {\n    var result = {};\n    var input = templateContent.querySelector('swal-input');\n\n    if (input) {\n      showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']);\n      result.input = input.getAttribute('type') || 'text';\n\n      if (input.hasAttribute('label')) {\n        result.inputLabel = input.getAttribute('label');\n      }\n\n      if (input.hasAttribute('placeholder')) {\n        result.inputPlaceholder = input.getAttribute('placeholder');\n      }\n\n      if (input.hasAttribute('value')) {\n        result.inputValue = input.getAttribute('value');\n      }\n    }\n\n    var inputOptions = templateContent.querySelectorAll('swal-input-option');\n\n    if (inputOptions.length) {\n      result.inputOptions = {};\n      toArray(inputOptions).forEach(function (option) {\n        showWarningsForAttributes(option, ['value']);\n        var optionValue = option.getAttribute('value');\n        var optionName = option.innerHTML;\n        result.inputOptions[optionValue] = optionName;\n      });\n    }\n\n    return result;\n  };\n\n  var getSwalStringParams = function getSwalStringParams(templateContent, paramNames) {\n    var result = {};\n\n    for (var i in paramNames) {\n      var paramName = paramNames[i];\n      var tag = templateContent.querySelector(paramName);\n\n      if (tag) {\n        showWarningsForAttributes(tag, []);\n        result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim();\n      }\n    }\n\n    return result;\n  };\n\n  var showWarningsForElements = function showWarningsForElements(template) {\n    var allowedElements = swalStringParams.concat(['swal-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']);\n    toArray(template.querySelectorAll('*')).forEach(function (el) {\n      if (el.parentNode !== template) {\n        // can't use template.children because of IE11\n        return;\n      }\n\n      var tagName = el.tagName.toLowerCase();\n\n      if (allowedElements.indexOf(tagName) === -1) {\n        warn(\"Unrecognized element <\".concat(tagName, \">\"));\n      }\n    });\n  };\n\n  var showWarningsForAttributes = function showWarningsForAttributes(el, allowedAttributes) {\n    toArray(el.attributes).forEach(function (attribute) {\n      if (allowedAttributes.indexOf(attribute.name) === -1) {\n        warn([\"Unrecognized attribute \\\"\".concat(attribute.name, \"\\\" on <\").concat(el.tagName.toLowerCase(), \">.\"), \"\".concat(allowedAttributes.length ? \"Allowed attributes are: \".concat(allowedAttributes.join(', ')) : 'To set the value, use HTML within the element.')]);\n      }\n    });\n  };\n\n  var SHOW_CLASS_TIMEOUT = 10;\n  /**\n   * Open popup, add necessary classes and styles, fix scrollbar\n   *\n   * @param params\n   */\n\n  var openPopup = function openPopup(params) {\n    var container = getContainer();\n    var popup = getPopup();\n\n    if (typeof params.willOpen === 'function') {\n      params.willOpen(popup);\n    } else if (typeof params.onBeforeOpen === 'function') {\n      params.onBeforeOpen(popup); // @deprecated\n    }\n\n    var bodyStyles = window.getComputedStyle(document.body);\n    var initialBodyOverflow = bodyStyles.overflowY;\n    addClasses$1(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto'\n\n    setTimeout(function () {\n      setScrollingVisibility(container, popup);\n    }, SHOW_CLASS_TIMEOUT);\n\n    if (isModal()) {\n      fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n      setAriaHidden();\n    }\n\n    if (!isToast() && !globalState.previousActiveElement) {\n      globalState.previousActiveElement = document.activeElement;\n    }\n\n    runDidOpen(popup, params);\n    removeClass(container, swalClasses['no-transition']);\n  };\n\n  var runDidOpen = function runDidOpen(popup, params) {\n    if (typeof params.didOpen === 'function') {\n      setTimeout(function () {\n        return params.didOpen(popup);\n      });\n    } else if (typeof params.onOpen === 'function') {\n      setTimeout(function () {\n        return params.onOpen(popup);\n      }); // @deprecated\n    }\n  };\n\n  var swalOpenAnimationFinished = function swalOpenAnimationFinished(event) {\n    var popup = getPopup();\n\n    if (event.target !== popup) {\n      return;\n    }\n\n    var container = getContainer();\n    popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);\n    container.style.overflowY = 'auto';\n  };\n\n  var setScrollingVisibility = function setScrollingVisibility(container, popup) {\n    if (animationEndEvent && hasCssAnimation(popup)) {\n      container.style.overflowY = 'hidden';\n      popup.addEventListener(animationEndEvent, swalOpenAnimationFinished);\n    } else {\n      container.style.overflowY = 'auto';\n    }\n  };\n\n  var fixScrollContainer = function fixScrollContainer(container, scrollbarPadding, initialBodyOverflow) {\n    iOSfix();\n    IEfix();\n\n    if (scrollbarPadding && initialBodyOverflow !== 'hidden') {\n      fixScrollbar();\n    } // sweetalert2/issues/1247\n\n\n    setTimeout(function () {\n      container.scrollTop = 0;\n    });\n  };\n\n  var addClasses$1 = function addClasses(container, popup, params) {\n    addClass(container, params.showClass.backdrop); // the workaround with setting/unsetting opacity is needed for #2019 and 2059\n\n    popup.style.setProperty('opacity', '0', 'important');\n    show(popup);\n    setTimeout(function () {\n      // Animate popup right after showing it\n      addClass(popup, params.showClass.popup); // and remove the opacity workaround\n\n      popup.style.removeProperty('opacity');\n    }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062\n\n    addClass([document.documentElement, document.body], swalClasses.shown);\n\n    if (params.heightAuto && params.backdrop && !params.toast) {\n      addClass([document.documentElement, document.body], swalClasses['height-auto']);\n    }\n  };\n\n  var handleInputOptionsAndValue = function handleInputOptionsAndValue(instance, params) {\n    if (params.input === 'select' || params.input === 'radio') {\n      handleInputOptions(instance, params);\n    } else if (['text', 'email', 'number', 'tel', 'textarea'].indexOf(params.input) !== -1 && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n      handleInputValue(instance, params);\n    }\n  };\n  var getInputValue = function getInputValue(instance, innerParams) {\n    var input = instance.getInput();\n\n    if (!input) {\n      return null;\n    }\n\n    switch (innerParams.input) {\n      case 'checkbox':\n        return getCheckboxValue(input);\n\n      case 'radio':\n        return getRadioValue(input);\n\n      case 'file':\n        return getFileValue(input);\n\n      default:\n        return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n    }\n  };\n\n  var getCheckboxValue = function getCheckboxValue(input) {\n    return input.checked ? 1 : 0;\n  };\n\n  var getRadioValue = function getRadioValue(input) {\n    return input.checked ? input.value : null;\n  };\n\n  var getFileValue = function getFileValue(input) {\n    return input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n  };\n\n  var handleInputOptions = function handleInputOptions(instance, params) {\n    var content = getContent();\n\n    var processInputOptions = function processInputOptions(inputOptions) {\n      return populateInputOptions[params.input](content, formatInputOptions(inputOptions), params);\n    };\n\n    if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n      showLoading(getConfirmButton());\n      asPromise(params.inputOptions).then(function (inputOptions) {\n        instance.hideLoading();\n        processInputOptions(inputOptions);\n      });\n    } else if (_typeof(params.inputOptions) === 'object') {\n      processInputOptions(params.inputOptions);\n    } else {\n      error(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \".concat(_typeof(params.inputOptions)));\n    }\n  };\n\n  var handleInputValue = function handleInputValue(instance, params) {\n    var input = instance.getInput();\n    hide(input);\n    asPromise(params.inputValue).then(function (inputValue) {\n      input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : \"\".concat(inputValue);\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    })[\"catch\"](function (err) {\n      error(\"Error in inputValue promise: \".concat(err));\n      input.value = '';\n      show(input);\n      input.focus();\n      instance.hideLoading();\n    });\n  };\n\n  var populateInputOptions = {\n    select: function select(content, inputOptions, params) {\n      var select = getChildByClass(content, swalClasses.select);\n\n      var renderOption = function renderOption(parent, optionLabel, optionValue) {\n        var option = document.createElement('option');\n        option.value = optionValue;\n        setInnerHtml(option, optionLabel);\n        option.selected = isSelected(optionValue, params.inputValue);\n        parent.appendChild(option);\n      };\n\n      inputOptions.forEach(function (inputOption) {\n        var optionValue = inputOption[0];\n        var optionLabel = inputOption[1]; // <optgroup> spec:\n        // https://www.w3.org/TR/html401/interact/forms.html#h-17.6\n        // \"...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)...\"\n        // check whether this is a <optgroup>\n\n        if (Array.isArray(optionLabel)) {\n          // if it is an array, then it is an <optgroup>\n          var optgroup = document.createElement('optgroup');\n          optgroup.label = optionValue;\n          optgroup.disabled = false; // not configurable for now\n\n          select.appendChild(optgroup);\n          optionLabel.forEach(function (o) {\n            return renderOption(optgroup, o[1], o[0]);\n          });\n        } else {\n          // case of <option>\n          renderOption(select, optionLabel, optionValue);\n        }\n      });\n      select.focus();\n    },\n    radio: function radio(content, inputOptions, params) {\n      var radio = getChildByClass(content, swalClasses.radio);\n      inputOptions.forEach(function (inputOption) {\n        var radioValue = inputOption[0];\n        var radioLabel = inputOption[1];\n        var radioInput = document.createElement('input');\n        var radioLabelElement = document.createElement('label');\n        radioInput.type = 'radio';\n        radioInput.name = swalClasses.radio;\n        radioInput.value = radioValue;\n\n        if (isSelected(radioValue, params.inputValue)) {\n          radioInput.checked = true;\n        }\n\n        var label = document.createElement('span');\n        setInnerHtml(label, radioLabel);\n        label.className = swalClasses.label;\n        radioLabelElement.appendChild(radioInput);\n        radioLabelElement.appendChild(label);\n        radio.appendChild(radioLabelElement);\n      });\n      var radios = radio.querySelectorAll('input');\n\n      if (radios.length) {\n        radios[0].focus();\n      }\n    }\n  };\n  /**\n   * Converts `inputOptions` into an array of `[value, label]`s\n   * @param inputOptions\n   */\n\n  var formatInputOptions = function formatInputOptions(inputOptions) {\n    var result = [];\n\n    if (typeof Map !== 'undefined' && inputOptions instanceof Map) {\n      inputOptions.forEach(function (value, key) {\n        var valueFormatted = value;\n\n        if (_typeof(valueFormatted) === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n\n        result.push([key, valueFormatted]);\n      });\n    } else {\n      Object.keys(inputOptions).forEach(function (key) {\n        var valueFormatted = inputOptions[key];\n\n        if (_typeof(valueFormatted) === 'object') {\n          // case of <optgroup>\n          valueFormatted = formatInputOptions(valueFormatted);\n        }\n\n        result.push([key, valueFormatted]);\n      });\n    }\n\n    return result;\n  };\n\n  var isSelected = function isSelected(optionValue, inputValue) {\n    return inputValue && inputValue.toString() === optionValue.toString();\n  };\n\n  var handleConfirmButtonClick = function handleConfirmButtonClick(instance, innerParams) {\n    instance.disableButtons();\n\n    if (innerParams.input) {\n      handleConfirmOrDenyWithInput(instance, innerParams, 'confirm');\n    } else {\n      confirm(instance, innerParams, true);\n    }\n  };\n  var handleDenyButtonClick = function handleDenyButtonClick(instance, innerParams) {\n    instance.disableButtons();\n\n    if (innerParams.returnInputValueOnDeny) {\n      handleConfirmOrDenyWithInput(instance, innerParams, 'deny');\n    } else {\n      deny(instance, innerParams, false);\n    }\n  };\n  var handleCancelButtonClick = function handleCancelButtonClick(instance, dismissWith) {\n    instance.disableButtons();\n    dismissWith(DismissReason.cancel);\n  };\n\n  var handleConfirmOrDenyWithInput = function handleConfirmOrDenyWithInput(instance, innerParams, type\n  /* type is either 'confirm' or 'deny' */\n  ) {\n    var inputValue = getInputValue(instance, innerParams);\n\n    if (innerParams.inputValidator) {\n      handleInputValidator(instance, innerParams, inputValue);\n    } else if (!instance.getInput().checkValidity()) {\n      instance.enableButtons();\n      instance.showValidationMessage(innerParams.validationMessage);\n    } else if (type === 'deny') {\n      deny(instance, innerParams, inputValue);\n    } else {\n      confirm(instance, innerParams, inputValue);\n    }\n  };\n\n  var handleInputValidator = function handleInputValidator(instance, innerParams, inputValue) {\n    instance.disableInput();\n    var validationPromise = Promise.resolve().then(function () {\n      return asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage));\n    });\n    validationPromise.then(function (validationMessage) {\n      instance.enableButtons();\n      instance.enableInput();\n\n      if (validationMessage) {\n        instance.showValidationMessage(validationMessage);\n      } else {\n        confirm(instance, innerParams, inputValue);\n      }\n    });\n  };\n\n  var deny = function deny(instance, innerParams, value) {\n    if (innerParams.showLoaderOnDeny) {\n      showLoading(getDenyButton());\n    }\n\n    if (innerParams.preDeny) {\n      var preDenyPromise = Promise.resolve().then(function () {\n        return asPromise(innerParams.preDeny(value, innerParams.validationMessage));\n      });\n      preDenyPromise.then(function (preDenyValue) {\n        if (preDenyValue === false) {\n          instance.hideLoading();\n        } else {\n          instance.closePopup({\n            isDenied: true,\n            value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n          });\n        }\n      });\n    } else {\n      instance.closePopup({\n        isDenied: true,\n        value: value\n      });\n    }\n  };\n\n  var succeedWith = function succeedWith(instance, value) {\n    instance.closePopup({\n      isConfirmed: true,\n      value: value\n    });\n  };\n\n  var confirm = function confirm(instance, innerParams, value) {\n    if (innerParams.showLoaderOnConfirm) {\n      showLoading(); // TODO: make showLoading an *instance* method\n    }\n\n    if (innerParams.preConfirm) {\n      instance.resetValidationMessage();\n      var preConfirmPromise = Promise.resolve().then(function () {\n        return asPromise(innerParams.preConfirm(value, innerParams.validationMessage));\n      });\n      preConfirmPromise.then(function (preConfirmValue) {\n        if (isVisible(getValidationMessage()) || preConfirmValue === false) {\n          instance.hideLoading();\n        } else {\n          succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n        }\n      });\n    } else {\n      succeedWith(instance, value);\n    }\n  };\n\n  var addKeydownHandler = function addKeydownHandler(instance, globalState, innerParams, dismissWith) {\n    if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n      globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = false;\n    }\n\n    if (!innerParams.toast) {\n      globalState.keydownHandler = function (e) {\n        return keydownHandler(instance, e, dismissWith);\n      };\n\n      globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n      globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n      globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n        capture: globalState.keydownListenerCapture\n      });\n      globalState.keydownHandlerAdded = true;\n    }\n  }; // Focus handling\n\n  var setFocus = function setFocus(innerParams, index, increment) {\n    var focusableElements = getFocusableElements(); // search for visible elements and select the next possible match\n\n    if (focusableElements.length) {\n      index = index + increment; // rollover to first item\n\n      if (index === focusableElements.length) {\n        index = 0; // go to last item\n      } else if (index === -1) {\n        index = focusableElements.length - 1;\n      }\n\n      return focusableElements[index].focus();\n    } // no visible focusable elements, focus the popup\n\n\n    getPopup().focus();\n  };\n  var arrowKeysNextButton = ['ArrowRight', 'ArrowDown', 'Right', 'Down' // IE11\n  ];\n  var arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp', 'Left', 'Up' // IE11\n  ];\n  var escKeys = ['Escape', 'Esc' // IE11\n  ];\n\n  var keydownHandler = function keydownHandler(instance, e, dismissWith) {\n    var innerParams = privateProps.innerParams.get(instance);\n\n    if (!innerParams) {\n      return; // This instance has already been destroyed\n    }\n\n    if (innerParams.stopKeydownPropagation) {\n      e.stopPropagation();\n    } // ENTER\n\n\n    if (e.key === 'Enter') {\n      handleEnter(instance, e, innerParams); // TAB\n    } else if (e.key === 'Tab') {\n      handleTab(e, innerParams); // ARROWS - switch focus between buttons\n    } else if ([].concat(arrowKeysNextButton, arrowKeysPreviousButton).indexOf(e.key) !== -1) {\n      handleArrows(e.key); // ESC\n    } else if (escKeys.indexOf(e.key) !== -1) {\n      handleEsc(e, innerParams, dismissWith);\n    }\n  };\n\n  var handleEnter = function handleEnter(instance, e, innerParams) {\n    // #720 #721\n    if (e.isComposing) {\n      return;\n    }\n\n    if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) {\n      if (['textarea', 'file'].indexOf(innerParams.input) !== -1) {\n        return; // do not submit\n      }\n\n      clickConfirm();\n      e.preventDefault();\n    }\n  };\n\n  var handleTab = function handleTab(e, innerParams) {\n    var targetElement = e.target;\n    var focusableElements = getFocusableElements();\n    var btnIndex = -1;\n\n    for (var i = 0; i < focusableElements.length; i++) {\n      if (targetElement === focusableElements[i]) {\n        btnIndex = i;\n        break;\n      }\n    }\n\n    if (!e.shiftKey) {\n      // Cycle to the next button\n      setFocus(innerParams, btnIndex, 1);\n    } else {\n      // Cycle to the prev button\n      setFocus(innerParams, btnIndex, -1);\n    }\n\n    e.stopPropagation();\n    e.preventDefault();\n  };\n\n  var handleArrows = function handleArrows(key) {\n    var confirmButton = getConfirmButton();\n    var denyButton = getDenyButton();\n    var cancelButton = getCancelButton();\n\n    if (!([confirmButton, denyButton, cancelButton].indexOf(document.activeElement) !== -1)) {\n      return;\n    }\n\n    var sibling = arrowKeysNextButton.indexOf(key) !== -1 ? 'nextElementSibling' : 'previousElementSibling';\n    var buttonToFocus = document.activeElement[sibling];\n\n    if (buttonToFocus) {\n      buttonToFocus.focus();\n    }\n  };\n\n  var handleEsc = function handleEsc(e, innerParams, dismissWith) {\n    if (callIfFunction(innerParams.allowEscapeKey)) {\n      e.preventDefault();\n      dismissWith(DismissReason.esc);\n    }\n  };\n\n  var handlePopupClick = function handlePopupClick(instance, domCache, dismissWith) {\n    var innerParams = privateProps.innerParams.get(instance);\n\n    if (innerParams.toast) {\n      handleToastClick(instance, domCache, dismissWith);\n    } else {\n      // Ignore click events that had mousedown on the popup but mouseup on the container\n      // This can happen when the user drags a slider\n      handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup\n\n      handleContainerMousedown(domCache);\n      handleModalClick(instance, domCache, dismissWith);\n    }\n  };\n\n  var handleToastClick = function handleToastClick(instance, domCache, dismissWith) {\n    // Closing toast by internal click\n    domCache.popup.onclick = function () {\n      var innerParams = privateProps.innerParams.get(instance);\n\n      if (innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.timer || innerParams.input) {\n        return;\n      }\n\n      dismissWith(DismissReason.close);\n    };\n  };\n\n  var ignoreOutsideClick = false;\n\n  var handleModalMousedown = function handleModalMousedown(domCache) {\n    domCache.popup.onmousedown = function () {\n      domCache.container.onmouseup = function (e) {\n        domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't\n        // have any other direct children aside of the popup\n\n        if (e.target === domCache.container) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n\n  var handleContainerMousedown = function handleContainerMousedown(domCache) {\n    domCache.container.onmousedown = function () {\n      domCache.popup.onmouseup = function (e) {\n        domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup\n\n        if (e.target === domCache.popup || domCache.popup.contains(e.target)) {\n          ignoreOutsideClick = true;\n        }\n      };\n    };\n  };\n\n  var handleModalClick = function handleModalClick(instance, domCache, dismissWith) {\n    domCache.container.onclick = function (e) {\n      var innerParams = privateProps.innerParams.get(instance);\n\n      if (ignoreOutsideClick) {\n        ignoreOutsideClick = false;\n        return;\n      }\n\n      if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {\n        dismissWith(DismissReason.backdrop);\n      }\n    };\n  };\n\n  function _main(userParams) {\n    var mixinParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    showWarningsForParams(_extends({}, mixinParams, userParams));\n\n    if (globalState.currentInstance) {\n      globalState.currentInstance._destroy();\n    }\n\n    globalState.currentInstance = this;\n    var innerParams = prepareParams(userParams, mixinParams);\n    setParameters(innerParams);\n    Object.freeze(innerParams); // clear the previous timer\n\n    if (globalState.timeout) {\n      globalState.timeout.stop();\n      delete globalState.timeout;\n    } // clear the restore focus timeout\n\n\n    clearTimeout(globalState.restoreFocusTimeout);\n    var domCache = populateDomCache(this);\n    render(this, innerParams);\n    privateProps.innerParams.set(this, innerParams);\n    return swalPromise(this, domCache, innerParams);\n  }\n\n  var prepareParams = function prepareParams(userParams, mixinParams) {\n    var templateParams = getTemplateParams(userParams);\n\n    var params = _extends({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131\n\n\n    params.showClass = _extends({}, defaultParams.showClass, params.showClass);\n    params.hideClass = _extends({}, defaultParams.hideClass, params.hideClass); // @deprecated\n\n    if (userParams.animation === false) {\n      params.showClass = {\n        popup: 'swal2-noanimation',\n        backdrop: 'swal2-noanimation'\n      };\n      params.hideClass = {};\n    }\n\n    return params;\n  };\n\n  var swalPromise = function swalPromise(instance, domCache, innerParams) {\n    return new Promise(function (resolve) {\n      // functions to handle all closings/dismissals\n      var dismissWith = function dismissWith(dismiss) {\n        instance.closePopup({\n          isDismissed: true,\n          dismiss: dismiss\n        });\n      };\n\n      privateMethods.swalPromiseResolve.set(instance, resolve);\n\n      domCache.confirmButton.onclick = function () {\n        return handleConfirmButtonClick(instance, innerParams);\n      };\n\n      domCache.denyButton.onclick = function () {\n        return handleDenyButtonClick(instance, innerParams);\n      };\n\n      domCache.cancelButton.onclick = function () {\n        return handleCancelButtonClick(instance, dismissWith);\n      };\n\n      domCache.closeButton.onclick = function () {\n        return dismissWith(DismissReason.close);\n      };\n\n      handlePopupClick(instance, domCache, dismissWith);\n      addKeydownHandler(instance, globalState, innerParams, dismissWith);\n      handleInputOptionsAndValue(instance, innerParams);\n      openPopup(innerParams);\n      setupTimer(globalState, innerParams, dismissWith);\n      initFocus(domCache, innerParams); // Scroll container to top on open (#1247, #1946)\n\n      setTimeout(function () {\n        domCache.container.scrollTop = 0;\n      });\n    });\n  };\n\n  var populateDomCache = function populateDomCache(instance) {\n    var domCache = {\n      popup: getPopup(),\n      container: getContainer(),\n      content: getContent(),\n      actions: getActions(),\n      confirmButton: getConfirmButton(),\n      denyButton: getDenyButton(),\n      cancelButton: getCancelButton(),\n      loader: getLoader(),\n      closeButton: getCloseButton(),\n      validationMessage: getValidationMessage(),\n      progressSteps: getProgressSteps()\n    };\n    privateProps.domCache.set(instance, domCache);\n    return domCache;\n  };\n\n  var setupTimer = function setupTimer(globalState$$1, innerParams, dismissWith) {\n    var timerProgressBar = getTimerProgressBar();\n    hide(timerProgressBar);\n\n    if (innerParams.timer) {\n      globalState$$1.timeout = new Timer(function () {\n        dismissWith('timer');\n        delete globalState$$1.timeout;\n      }, innerParams.timer);\n\n      if (innerParams.timerProgressBar) {\n        show(timerProgressBar);\n        setTimeout(function () {\n          if (globalState$$1.timeout && globalState$$1.timeout.running) {\n            // timer can be already stopped or unset at this point\n            animateTimerProgressBar(innerParams.timer);\n          }\n        });\n      }\n    }\n  };\n\n  var initFocus = function initFocus(domCache, innerParams) {\n    if (innerParams.toast) {\n      return;\n    }\n\n    if (!callIfFunction(innerParams.allowEnterKey)) {\n      return blurActiveElement();\n    }\n\n    if (!focusButton(domCache, innerParams)) {\n      setFocus(innerParams, -1, 1);\n    }\n  };\n\n  var focusButton = function focusButton(domCache, innerParams) {\n    if (innerParams.focusDeny && isVisible(domCache.denyButton)) {\n      domCache.denyButton.focus();\n      return true;\n    }\n\n    if (innerParams.focusCancel && isVisible(domCache.cancelButton)) {\n      domCache.cancelButton.focus();\n      return true;\n    }\n\n    if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) {\n      domCache.confirmButton.focus();\n      return true;\n    }\n\n    return false;\n  };\n\n  var blurActiveElement = function blurActiveElement() {\n    if (document.activeElement && typeof document.activeElement.blur === 'function') {\n      document.activeElement.blur();\n    }\n  };\n\n  /**\n   * Updates popup parameters.\n   */\n\n  function update(params) {\n    var popup = getPopup();\n    var innerParams = privateProps.innerParams.get(this);\n\n    if (!popup || hasClass(popup, innerParams.hideClass.popup)) {\n      return warn(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");\n    }\n\n    var validUpdatableParams = {}; // assign valid params from `params` to `defaults`\n\n    Object.keys(params).forEach(function (param) {\n      if (Swal.isUpdatableParameter(param)) {\n        validUpdatableParams[param] = params[param];\n      } else {\n        warn(\"Invalid parameter to update: \\\"\".concat(param, \"\\\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js\\n\\nIf you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md\"));\n      }\n    });\n\n    var updatedParams = _extends({}, innerParams, validUpdatableParams);\n\n    render(this, updatedParams);\n    privateProps.innerParams.set(this, updatedParams);\n    Object.defineProperties(this, {\n      params: {\n        value: _extends({}, this.params, params),\n        writable: false,\n        enumerable: true\n      }\n    });\n  }\n\n  function _destroy() {\n    var domCache = privateProps.domCache.get(this);\n    var innerParams = privateProps.innerParams.get(this);\n\n    if (!innerParams) {\n      return; // This instance has already been destroyed\n    } // Check if there is another Swal closing\n\n\n    if (domCache.popup && globalState.swalCloseEventFinishedCallback) {\n      globalState.swalCloseEventFinishedCallback();\n      delete globalState.swalCloseEventFinishedCallback;\n    } // Check if there is a swal disposal defer timer\n\n\n    if (globalState.deferDisposalTimer) {\n      clearTimeout(globalState.deferDisposalTimer);\n      delete globalState.deferDisposalTimer;\n    }\n\n    runDidDestroy(innerParams);\n    disposeSwal(this);\n  }\n\n  var runDidDestroy = function runDidDestroy(innerParams) {\n    if (typeof innerParams.didDestroy === 'function') {\n      innerParams.didDestroy();\n    } else if (typeof innerParams.onDestroy === 'function') {\n      innerParams.onDestroy(); // @deprecated\n    }\n  };\n\n  var disposeSwal = function disposeSwal(instance) {\n    // Unset this.params so GC will dispose it (#1569)\n    delete instance.params; // Unset globalState props so GC will dispose globalState (#1569)\n\n    delete globalState.keydownHandler;\n    delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569)\n\n    unsetWeakMaps(privateProps);\n    unsetWeakMaps(privateMethods);\n  };\n\n  var unsetWeakMaps = function unsetWeakMaps(obj) {\n    for (var i in obj) {\n      obj[i] = new WeakMap();\n    }\n  };\n\n\n\n  var instanceMethods = /*#__PURE__*/Object.freeze({\n    hideLoading: hideLoading,\n    disableLoading: hideLoading,\n    getInput: getInput$1,\n    close: close,\n    closePopup: close,\n    closeModal: close,\n    closeToast: close,\n    enableButtons: enableButtons,\n    disableButtons: disableButtons,\n    enableInput: enableInput,\n    disableInput: disableInput,\n    showValidationMessage: showValidationMessage,\n    resetValidationMessage: resetValidationMessage$1,\n    getProgressSteps: getProgressSteps$1,\n    _main: _main,\n    update: update,\n    _destroy: _destroy\n  });\n\n  var currentInstance;\n\n  var SweetAlert = /*#__PURE__*/function () {\n    function SweetAlert() {\n      _classCallCheck(this, SweetAlert);\n\n      // Prevent run in Node env\n      if (typeof window === 'undefined') {\n        return;\n      } // Check for the existence of Promise\n\n\n      if (typeof Promise === 'undefined') {\n        error('This package requires a Promise library, please include a shim to enable it in this browser (See: https://github.com/sweetalert2/sweetalert2/wiki/Migration-from-SweetAlert-to-SweetAlert2#1-ie-support)');\n      }\n\n      currentInstance = this;\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var outerParams = Object.freeze(this.constructor.argsToParams(args));\n      Object.defineProperties(this, {\n        params: {\n          value: outerParams,\n          writable: false,\n          enumerable: true,\n          configurable: true\n        }\n      });\n\n      var promise = this._main(this.params);\n\n      privateProps.promise.set(this, promise);\n    } // `catch` cannot be the name of a module export, so we define our thenable methods here instead\n\n\n    _createClass(SweetAlert, [{\n      key: \"then\",\n      value: function then(onFulfilled) {\n        var promise = privateProps.promise.get(this);\n        return promise.then(onFulfilled);\n      }\n    }, {\n      key: \"finally\",\n      value: function _finally(onFinally) {\n        var promise = privateProps.promise.get(this);\n        return promise[\"finally\"](onFinally);\n      }\n    }]);\n\n    return SweetAlert;\n  }(); // Dear russian users visiting russian sites. Let's have fun.\n\n\n  if (typeof window !== 'undefined' && /^ru\\b/.test(navigator.language) && location.host.match(/\\.(ru|su|xn--p1ai)$/)) {\n    var now = new Date();\n    var initiationDate = localStorage.getItem('swal-initiation');\n\n    if (!initiationDate) {\n      localStorage.setItem('swal-initiation', \"\".concat(now));\n    } else if ((now.getTime() - Date.parse(initiationDate)) / (1000 * 60 * 60 * 24) > 3) {\n      setTimeout(function () {\n        document.body.style.pointerEvents = 'none';\n        var ukrainianAnthem = document.createElement('audio');\n        ukrainianAnthem.src = 'https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3';\n        ukrainianAnthem.loop = true;\n        document.body.appendChild(ukrainianAnthem);\n        setTimeout(function () {\n          ukrainianAnthem.play()[\"catch\"](function () {// ignore\n          });\n        }, 2500);\n      }, 500);\n    }\n  } // Assign instance methods from src/instanceMethods/*.js to prototype\n\n\n  _extends(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor\n\n\n  _extends(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility\n\n\n  Object.keys(instanceMethods).forEach(function (key) {\n    SweetAlert[key] = function () {\n      if (currentInstance) {\n        var _currentInstance;\n\n        return (_currentInstance = currentInstance)[key].apply(_currentInstance, arguments);\n      }\n    };\n  });\n  SweetAlert.DismissReason = DismissReason;\n  SweetAlert.version = '10.16.7';\n\n  var Swal = SweetAlert;\n  Swal[\"default\"] = Swal;\n\n  return Swal;\n\n}));\nif (typeof this !== 'undefined' && this.Sweetalert2){  this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n\n\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\".swal2-popup.swal2-toast{flex-direction:column;align-items:stretch;width:auto;padding:1.25em;overflow-y:hidden;background:#fff;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row;padding:0}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;margin:0 .625em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container{padding:.625em 0 0}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:700}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex:1;flex-basis:auto!important;align-self:stretch;width:auto;height:2.2em;height:auto;margin:0 .3125em;margin-top:.3125em;padding:0}.swal2-popup.swal2-toast .swal2-styled{margin:.125em .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(100,150,200,.5)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:0 0!important}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none!important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:5px;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 transparent #2778c4 transparent}.swal2-styled{margin:.3125em;padding:.625em 1.1em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#2778c4;color:#fff;font-size:1em}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#d14529;color:#fff;font-size:1em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#757575;color:#fff;font-size:1em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:5px;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close:focus{outline:0;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto}.swal2-validation-message{align-items:center;justify-content:center;margin:0 -2.7em;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:.25em solid transparent;border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent!important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-left,body.swal2-no-backdrop .swal2-container.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-left,body.swal2-no-backdrop .swal2-container.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-left,body.swal2-no-backdrop .swal2-container.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}\");\n\n//# sourceURL=webpack:///../euronics/node_modules/sweetalert2/dist/sweetalert2.all.js?")},
61"../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js":
62/*!*******************************************************************************************************!*\
63  !*** ../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js ***!
64  \*******************************************************************************************************/
65/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the wishlist\n */\nfunction displayMessage(data, button) {\n    $.spinner().stop();\n    var status;\n    if (data.success) {\n        status = 'alert-success';\n    } else {\n        status = 'alert-danger';\n    }\n\n    if ($('.add-to-wishlist-messages').length === 0) {\n        $('body').append(\n        '<div class=\"add-to-wishlist-messages \"></div>'\n        );\n    }\n    $('.add-to-wishlist-messages')\n        .append('<div class=\"add-to-wishlist-alert text-center ' + status + '\">' + data.msg + '</div>');\n\n    setTimeout(function () {\n        $('.add-to-wishlist-messages').remove();\n        button.removeAttr('disabled');\n    }, 5000);\n}\n\nmodule.exports = {\n    addToWishlist: function () {\n        $('.add-to-wish-list').on('click', function (e) {\n            e.preventDefault();\n            var url = $(this).data('href');\n            var button = $(this);\n            var pid = $(this).closest('.product-detail').find('.product-id').html();\n            var optionId = $(this).closest('.product-detail').find('.product-option').attr('data-option-id');\n            var optionVal = $(this).closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n            optionId = optionId || null;\n            optionVal = optionVal || null;\n            if (!url || !pid) {\n                return;\n            }\n\n            $.spinner().start();\n            $(this).attr('disabled', true);\n            $.ajax({\n                url: url,\n                type: 'post',\n                dataType: 'json',\n                data: {\n                    pid: pid,\n                    optionId: optionId,\n                    optionVal: optionVal\n                }
65,\n                success: function (data) {\n                    displayMessage(data, button);\n                },\n                error: function (err) {\n                    displayMessage(err, button);\n                }\n            });\n        });\n    }\n};\n\n\n//# sourceURL=webpack:///../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js?")},
65"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js":
66/*!***************************************************************************************************************************!*\
67  !*** ../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js ***!
68  \***************************************************************************************************************************/
69/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n    setTabNextFocus: function (focusParams) {\n        var KEYCODE_TAB = 9;\n        var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n        if (!isTabPressed) {\n            return;\n        }\n\n        var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n        var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n        if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n            lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n            if ($('.product-quickview.product-set').length > 0) {\n                var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n                lastFocusableEl = linkElements[linkElements.length - 1];\n            }\n        }\n\n        if (focusParams.event.shiftKey) /* shift + tab */ {\n            if ($(':focus').is(firstFocusableEl)) {\n                lastFocusableEl.focu
69s();\n                focusParams.event.preventDefault();\n            }\n        } else /* tab */ {\n            if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n                firstFocusableEl.focus();\n                focusParams.event.preventDefault();\n            }\n        }\n    }\n};\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js?")},
69"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js":
70/*!***********************************************************************************************************************!*\
71  !*** ../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js ***!
72  \***********************************************************************************************************************/
73/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\nvar focusHelper = __webpack_require__(/*! ../components/focus */ \"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js\");\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n    var pid;\n\n    if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n        pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n    } else if ($('.product-set-detail').length || $('.product-set').length) {\n        pid = $($el).closest('.product-detail').find('.product-id').text();\n    } else {\n        pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n    }\n\n    return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n    var quantitySelected;\n    if ($el && $('.set-items').length) {\n        quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n    } else if ($el && $('.product-bundle').length) {\n        var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n        var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n        if (quantitySelectedModal.val() === undefined) {\n            quantitySelected = quantitySelectedPDP;\n        } else {\n            quantitySelected = quantitySelectedModal;\n        }\n    } else {\n        quantitySelected = $('.quantity-select');\n    }\n    return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n    return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n *     selected.  If there is no variant that corresponds to a specific combination of attribute\n *     values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n            attrValue.value + '\"]');\n        var $swatchButton = $attrValue.parent();\n\n        if (attrValue.selected) {\n            $attrValue.addClass('selected');\n            $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n        } else {\n            $attrValue.removeClass('selected');\n            $attrValue.siblings('.selected-assistive-text').empty();\n        }\n\n        if (attrValue.url) {\n            $swatchButton.attr('data-url', attrValue.url);\n        } else {\n            $swatchButton.removeAttr('data-url');\n        }\n\n        // Disable if not selectable\n        $attrValue.removeClass('selectable unselectable');\n\n        $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n    });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string}
73 attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n *     selected.  If there is no variant that corresponds to a specific combination of attribute\n *     values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n    var $attr = '[data-attr=\"' + attr.id + '\"]';\n    var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n    $defaultOption.attr('value', attr.resetUrl);\n\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer\n            .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n        $attrValue.attr('value', attrValue.url)\n            .removeAttr('disabled');\n\n        if (!attrValue.selectable) {\n            $attrValue.attr('disabled', true);\n        }\n    });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n *     swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n    // Currently, the only attribute type that has image swatches is Color.\n    var attrsWithSwatches = ['color'];\n\n    attrs.forEach(function (attr) {\n        if (attrsWithSwatches.indexOf(attr.id) > -1) {\n            processSwatchValues(attr, $productContainer, msgs);\n        } else {\n            processNonSwatchValues(attr, $productContainer);\n        }\n    });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n *                            attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n    var availabilityValue = '';\n    var availabilityMessages = response.product.availability.messages;\n    if (!response.product.readyToOrder) {\n        availabilityValue = '<li><div>' + response.resources.info_selectforstock + '</div></li>';\n    } else {\n        availabilityMessages.forEach(function (message) {\n            availabilityValue += '<li><div>' + message + '</div></li>';\n        });\n    }\n\n    $($productContainer).trigger('product:updateAvailability', {\n        product: response.product,\n        $productContainer: $productContainer,\n        message: availabilityValue,\n        resources: response.resources\n    });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n    if (!attributes) {\n        return '';\n    }\n\n    var html = '';\n\n    attributes.forEach(function (attributeGroup) {\n        if (attributeGroup.ID === 'mainAttributes') {\n            attributeGroup.attributes.forEach(function (attribute) {\n                html += '<div class=\"attribute-values\">' + attribute.label + ': '\n                    + attribute.value + '</div>';\n            });\n        }\n    });\n\n    return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery}
73 $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n    $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n    var carousel = $productContainer.find('.carousel');\n    $(carousel).carousel('dispose');\n    var carouselId = $(carousel).attr('id');\n    $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\"></div><a class=\"carousel-control-prev\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"prev\"><span class=\"fa icon-prev\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></a><a class=\"carousel-control-next\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"next\"><span class=\"fa icon-next\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('next') + '</span></a>');\n    for (var i = 0; i < imgs.length; i++) {\n        $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + ' image number ' + parseInt(imgs[i].index, 10) + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n        $('<li data-target=\"#' + carouselId + '\" data-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n    }\n    $($(carousel).find('.carousel-item')).first().addClass('active');\n    $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n    if (imgs.length === 1) {\n        $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n    }\n    $(carousel).carousel();\n    $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n *     attributes have been selected.  Used partially to\n *     determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n    var isChoiceOfBonusProducts =\n        $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n    var isVaraint;\n    if (response.product.variationAttributes) {\n        updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n        isVaraint = response.product.productType === 'variant';\n        if (isChoiceOfBonusProducts && isVaraint) {\n            $productContainer.parent('.bonus-product-item')\n                .data('pid', response.product.id);\n\n            $productContainer.parent('.bonus-product-item')\n                .data('ready-to-order', response.product.readyToOrder);\n        }\n    }\n\n    // Update primary images\n    var primaryImageUrls = response.product.images.large;\n    createCarousel(primaryImageUrls, $productContainer);\n\n    // Update pricing\n    if (!isChoiceOfBonusProducts) {\n        var $priceSelector = $('.prices .price', $productContainer).length\n            ? $('.prices .price', $productContainer)\n            : $('.prices .price');\n        $priceSelector.replaceWith(response.product.price.html);\n    }\n\n    // Update promotions\n    $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);
73\n\n    updateAvailability(response, $productContainer);\n\n    if (isChoiceOfBonusProducts) {\n        var $selectButton = $productContainer.find('.select-bonus-product');\n        $selectButton.trigger('bonusproduct:updateSelectButton', {\n            product: response.product, $productContainer: $productContainer\n        });\n    } else {\n        // Enable \"Add to Cart\" button if all required attributes have been selected\n        $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n            product: response.product, $productContainer: $productContainer\n        }).trigger('product:statusUpdate', response.product);\n    }\n\n    // Update attributes\n    $productContainer.find('.main-attributes').empty()\n        .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n *     etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n    if ($productContainer.parent('.bonus-product-item').length <= 0) {\n        var optionsHtml = quantities.map(function (quantity) {\n            var selected = quantity.selected ? ' selected ' : '';\n            return '<option value=\"' + quantity.value + '\"  data-url=\"' + quantity.url + '\"' +\n                selected + '>' + quantity.value + '</option>';\n        }).join('');\n        getQuantitySelector($productContainer).empty().html(optionsHtml);\n    }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n *         changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n    if (selectedValueUrl) {\n        $('body').trigger('product:beforeAttributeSelect',\n            { url: selectedValueUrl, container: $productContainer });\n\n        $.ajax({\n            url: selectedValueUrl,\n            method: 'GET',\n            success: function (data) {\
73n                handleVariantResponse(data, $productContainer);\n                updateOptions(data.product.optionsHtml, $productContainer);\n                updateQuantities(data.product.quantities, $productContainer);\n                $('body').trigger('product:afterAttributeSelect',\n                    { data: data, container: $productContainer });\n                $.spinner().stop();\n            },\n            error: function () {\n                $.spinner().stop();\n            }\n        });\n    }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n    return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n    var $html = $('<div>').append($.parseHTML(html));\n\n    var body = $html.find('.choice-of-bonus-product');\n    var footer = $html.find('.modal-footer').children();\n\n    return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n    $('.modal-body').spinner().start();\n\n    if ($('#chooseBonusProductModal').length !== 0) {\n        $('#chooseBonusProductModal').remove();\n    }\n    var bonusUrl;\n    if (data.bonusChoiceRuleBased) {\n        bonusUrl = data.showProductsUrlRuleBased;\n    } else {\n        bonusUrl = data.showProductsUrlListBased;\n    }\n\n    var htmlString = '\x3c!-- Modal --\x3e'\n        + '<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">'\n        + '<span class=\"enter-message sr-only\" ></span>'\n        + '<div class=\"modal-dialog choose-bonus-product-dialog\" '\n        + 'data-total-qty=\"' + data.maxBonusItems + '\"'\n        + 'data-UUID=\"' + data.uuid + '\"'\n        + 'data-pliUUID=\"' + data.pliUUID + '\"'\n        + 'data-addToCartUrl=\"' + data.addToCartUrl + '\"'\n        + 'data-pageStart=\"0\"'\n        + 'data-pageSize=\"' + data.pageSize + '\"'\n        + 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"'\n        + 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">'\n        + '\x3c!-- Modal content--\x3e'\n        + '<div class=\"modal-content\">'\n        + '<div class=\"modal-header\">'\n        + '    <span class=\"\">' + data.labels.selectprods + '</span>'\n        + '    <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\n        + '        <span aria-hidden=\"true\">&times;</span>'\n        + '        <span class=\"sr-only\"> </span>'\n        + '    </button>'\n        + '</div>'\n        + '<div class=\"modal-body\"></div>'\n        + '<div class=\"modal-footer\"></div>'\n        + '</div>'\n        + '</div>'\n        + '</div>';\n    $('body').append(htmlString);\n    $('.modal-body').spinner().start();\n\n    $.ajax({\n        url: bonusUrl,\n        method: 'GET',\n        dataType: 'json',\n        success: function (response) {\n            var parsedHtml = parseHtml(response.renderedTemplate);\n            $('#chooseBonusProductModal .modal-body').empty();\n            $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n            $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n            $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n            $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n            $('#chooseBonusProductModal').modal('show');\n            $.spinner().stop();\n        },\n        error: function () {\n            $.spinner().stop();\n        }\n    });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n    $('.minicart').trigger('count:update', response);\n    var messageType = response.error ? 'alert-danger' : 'alert-success';\n    // show add to cart toast\n    if (response.newBonusDiscountLineItem\n        && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n        chooseBonusProducts(response.newBonusDiscountLineItem);\n    } else {\n        if ($('.add-to-cart-messages').length === 0) {\n            $('body').append(\n                '<div class=\"add-to-cart-messages\"></div>'\n            );\n        }\n\n        $('.add-to-cart-messages').append(\n            '<div class=\"alert ' + messageType + ' add-to-basket-alert text-center\" role=\"alert\">'\n            + response.message\n            + '</div>'\n        );\n\n        setTimeout(function () {\n            $('.add-to-basket-alert').remove();\n        }, 5000);\n    }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n    var childProducts = [];\n    $('.bundle-item').each(function () {\n        childProducts.push({\n            pid: $(this).find('.product-id').text(),\n            quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n        });\n    });\n\n    return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery}
73 $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n    var options = $productContainer\n        .find('.product-option')\n        .map(function () {\n            var $elOption = $(this).find('.options-select');\n            var urlValue = $elOption.val();\n            var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n                .data('value-id');\n            return {\n                optionId: $(this).data('option-id'),\n                selectedValueId: selectedValueId\n            };\n        }).toArray();\n\n    return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n    if (url) {\n        $.ajax({\n            url: url,\n            method: 'GET',\n            success: function () {\n                // reporting urls hit on the server\n            },\n            error: function () {\n                // no reporting urls hit on the server\n            }\n        });\n    }\n}\n\nmodule.exports = {\n    attributeSelect: attributeSelect,\n    methods: {\n        editBonusProducts: function (data) {\
73n            chooseBonusProducts(data);\n        }\n    },\n\n    focusChooseBonusProductModal: function () {\n        $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n            $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n            $('#chooseBonusProductModal .close').focus();\n        });\n    },\n\n    onClosingChooseBonusProductModal: function () {\n        $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n            $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n        });\n    },\n\n    trapChooseBonusProductModalFocus: function () {\n        $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n            var focusParams = {\n                event: e,\n                containerSelector: '#chooseBonusProductModal',\n                firstElementSelector: '.close',\n                lastElementSelector: '.add-bonus-products'\n            };\n            focusHelper.setTabNextFocus(focusParams);\n        });\n    },\n\n    colorAttribute: function () {\n        $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n            e.preventDefault();\n\n            if ($(this).attr('disabled')) {\n                return;\n            }\n            var $productContainer = $(this).closest('.set-item');
73\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n\n            attributeSelect($(this).attr('data-url'), $productContainer);\n        });\n    },\n\n    selectAttribute: function () {\n        $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n            e.preventDefault();\n\n            var $productContainer = $(this).closest('.set-item');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n            attributeSelect(e.currentTarget.value, $productContainer);\n        });\n    },\n\n    availability: function () {\n        $(document).on('change', '.quantity-select', function (e) {\n            e.preventDefault();\n\n            var $productContainer = $(this).closest('.product-detail');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n            }\n\n            if ($('.bundle-items', $productContainer).length === 0) {\n                attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n                    $productContainer);\n            }\n        });\n    },\n\n    addToCart: function () {\n        $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n            var addToCartUrl;\n            var pid;\n            var pidsObj;\n            var setPids;\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n                setPids = [];\n\n                $('.product-detail').each(function () {\n                    if (!$(this).hasClass('product-set-detail')) {\n                        setPids.push({\n                            pid: $(this).find('.product-id').text(),\n                            qty: $(this).find('.quantity-select').val(),\n                            options: getOptions($(this))\n                        });\n                    }\n                });\n                pidsObj = JSON.stringify(setPids);\n            }\n\n            pid = getPidValue($(this));\n\n            var $productContainer = $(this).closest('.product-detail');
73\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n            }\n\n            addToCartUrl = getAddToCartUrl();\n\n            var form = {\n                pid: pid,\n                pidsObj: pidsObj,\n                childProducts: getChildProducts(),\n                quantity: getQuantitySelected($(this))\n            };\n\n            if (!$('.bundle-item').length) {\n                form.options = getOptions($productContainer);\n            }\n\n            $(this).trigger('updateAddToCartFormData', form);\n            if (addToCartUrl) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\n                        handlePostCartAdd(data);\n                        $('body').trigger('product:afterAddToCart', data);\n                        $.spinner().stop();\n                        miniCartReportingUrl(data.reportingURL);\n                    },\n                    error: function () {\n                        $.spinner().stop();\n                    }\n                });\n            }\n        });\n    },\n    selectBonusProduct: function () {\n        $(document).on('click', '.select-bonus-product', function () {\n            var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n            var pid = $(this).data('pid');\n            var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n            var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n            var totalQty = 0;\n            $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n                totalQty += $(this).data('qty');\n            });\n            totalQty += submittedQty;\n            var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n            var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n            if (totalQty <= maxPids) {\n                var selectedBonusProductHtml = ''\n                + '<div class=\"selected-pid row\" '\n                + 'data-pid=\"' + pid + '\"'\n                + 'data-qty=\"' + submittedQty + '\"'\n                + 'data-optionID=\"' + (optionID || '') + '\"'\n                + 'data-option-selected-value=\"' + (valueId || '') + '\"'\n                + '>'\n                + '<div class=\"col-sm-11 col-9 bonus-product-name\" >'\n                + $choiceOfBonusProduct.find('.product-name').html()\n                + '</div>'\n                + '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>'\n                + '</div>'\n                ;\n                $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n                $('.pre-cart-products').html(totalQty);\n                $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n            } else {\n                $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n            }\n        });\n    },\n    removeBonusProduct: function () {\n        $(document).on('click', '.selected-pid', function () {\n            $(this).remove();\n            var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n            var count = 0;\n            if ($selected.length) {\n                $selected.each(function () {\n                    count += parseInt($(this).data('qty'), 10);\n                });\n            }\n\n            $('.pre-cart-products').html(count);\n            $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n        });\n    },\n    enableBonusProductSelection: function () {\n        $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n            $('button.select-bonus-product', response.$productContainer).attr('disabled',\n                (!response.product.readyToOrder || !response.product.available));\n            var pid = response.product.id;\n            $('button.select-bonus-product', response.$productC
73ontainer).data('pid', pid);\n        });\n    },\n    showMoreBonusProducts: function () {\n        $(document).on('click', '.show-more-bonus-products', function () {\n            var url = $(this).data('url');\n            $('.modal-content').spinner().start();\n            $.ajax({\n                url: url,\n                method: 'GET',\n                success: function (html) {\n                    var parsedHtml = parseHtml(html);\n                    $('.modal-body').append(parsedHtml.body);\n                    $('.show-more-bonus-products:first').remove();\n                    $('.modal-content').spinner().stop();\n                },\n                error: function () {\n                    $('.modal-content').spinner().stop();\n                }\n            });\n        });\n    },\n    addBonusProductsToCart: function () {\n        $(document).on('click', '.add-bonus-products', function () {\n            var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n            var queryString = '?pids=';\n            var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n            var pidsObject = {\n                bonusProducts: []\n            };\n\n            $.each($readyToOrderBonusProducts, function () {\n                var qtyOption =\n                    parseInt($(this)\n                        .data('qty'), 10);\n\n                var option = null;\n                if (qtyOption > 0) {\n                    if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n                        option = {};\n                        option.optionId = $(this).data('optionid');\n                        option.productId = $(this).data('pid');\n                        option.selectedValueId = $(this).data('option-selected-value');\n                    }\n                    pidsObject.bonusProducts.push({\n                        pid: $(this).data('pid'),\n                        qty: qtyOption,\n                        options: [option]\n                    });\n                    pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n                }\n            });\n            queryString += JSON.stringify(pidsObject);\n            queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n            queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n            $.spinner().start();\n            $.ajax({\n                url: url + queryString,\n                method: 'POST',\n                success: function (data) {\
73n                    $.spinner().stop();\n                    if (data.error) {\n                        $('#chooseBonusProductModal').modal('hide');\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append('<div class=\"add-to-cart-messages\"></div>');\n                        }\n                        $('.add-to-cart-messages').append(\n                            '<div class=\"alert alert-danger add-to-basket-alert text-center\"'\n                            + ' role=\"alert\">'\n                            + data.errorMessage + '</div>'\n                        );\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                        }, 3000);\n                    } else {\n                        $('.configure-bonus-product-attributes').html(data);\n                        $('.bonus-products-step2').removeClass('hidden-xl-down');\n                        $('#chooseBonusProductModal').modal('hide');\n\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append('<div class=\"add-to-cart-messages\"></div>');\n                        }\n                        $('.minicart-quantity').html(data.totalQty);\n                        $('.add-to-cart-messages').append(\n                            '<div class=\"alert alert-success add-to-basket-alert text-center\"'\n                            + ' role=\"alert\">'\n                            + data.msgSuccess + '</div>'\n                        );\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                            if ($('.cart-page').length) {\n                                location.reload();\n                            }\n                        }, 1500);\n                    }\n                },\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        });\n    },\n\n    getPidValue: getPidValue,\n    getQuantitySelected: getQuantitySelected,\n    miniCartReportingUrl: miniCartReportingUrl\n};\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js?")},
73"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js":
74/*!*************************************************************************************************************************!*\
75  !*** ../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js ***!
76  \*************************************************************************************************************************/
77/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\nvar base = __webpack_require__(/*! ./base */ \"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js\");\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n    $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\nmodule.exports = {\n    methods: {\n        updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n    },\n\n    availability: base.availability,\n\n    addToCart: base.addToCart,\n\n    updateAttributesAndDetails: function () {\n        $('body').on('product:statusUpdate', function (e, data) {\n            var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n            $productContainer.find('.description-and-detail .product-attributes')\n                .empty()\n                .html(data.attributesHtml);\n\n            if (data.shortDescription) {\n                $productContainer.find('.description-and-detail .description')\n                    .removeClass('hidden-xl-down');\n                $productContainer.find('.description-and-detail .description .content')\n                    .empty()\n                    .html(data.shortDescription);\n            } else {\n                $productContainer.find('.description-and-detail .description')\n                    .addClass('hidden-xl-down');\n            }\n\n            if (data.longDescription) {\n                $productContainer.find('.description-and-detail .details')\n                    .removeClass('hidden-xl-down');\n                $productContainer.find('.description-and-detail .details .content')\n                    .empty()\n                    .html(data.longDescription);\n            } else {\n                $productContainer.find('.description-and-detail .details')\n                    .addClass('hidden-xl-down');\n            }\n        });\n    },\n\n    showSpinner: function () {\n        $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n            $.spinner().start();\n        });\n    },\n    updateAttribute: function () {\n        $('body').on('product:afterAttributeSelect', function (e, response) {\n            if ($('.product-detail>.bundle-items').length) {\n                response.container.data('pid', response.data.product.id);\n                response.container.find('.product-id').text(response.data.product.id);\n            } else if ($('.product-set-detail').eq(0)) {\n                response.container.data('pid', response.data.product.id);\n                response.container.find('.product-id').text(response.data.product.id);\n            } else {\n                $('.product-id').text(response.data.product.id);\n                $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n            }\n        });\n    },\n    updateAddToCart: function () {\n        $('body').on('product:updateAddToCart', function (e, response) {\n            // update local add to cart (for sets)\n            $('button.add-to-cart', response.$productContainer).attr('disabled',\n                (!response.product.readyToOrder || !response.product.available));\n\n            var enable = $('.product-availability').toArray().every(function (item) {\n                return $(item).data('available') && $(item).data('ready-to-order');\n            });\n            module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\n        });\n    },\n    updateAvailability: function () {\n        $('body').on('product:updateAvailability', function (e, response) {\n            $('div.availability', response.$productC
77ontainer)\n                .data('ready-to-order', response.product.readyToOrder)\n                .data('available', response.product.available);\n\n            $('.availability-msg', response.$productContainer)\n                .empty().html(response.message);\n\n            if ($('.global-availability').length) {\n                var allAvailable = $('.product-availability').toArray()\n                    .every(function (item) { return $(item).data('available'); });\n\n                var allReady = $('.product-availability').toArray()\n                    .every(function (item) { return $(item).data('ready-to-order'); });\n\n                $('.global-availability')\n                    .data('ready-to-order', allReady)\n                    .data('available', allAvailable);\n\n                $('.global-availability .availability-msg').empty()\n                    .html(allReady ? response.message : response.resources.info_selectforstock);\n            }\n        });\n    },\n    sizeChart: function () {\n        $('.size-chart a').on('click', function (e) {\n            e.preventDefault();\n            var url = $(this).attr('href');\n            var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n            if ($prodSizeChart.is(':empty')) {\n                $.ajax({\n                    url: url,\n                    type: 'get',\n                    dataType: 'json',\n                    success: function (data) {\
77n                        $prodSizeChart.append(data.content);\n                    }\n                });\n            }\n            $prodSizeChart.toggleClass('active');\n        });\n\n        var $sizeChart = $('.size-chart-collapsible');\n        $('body').on('click touchstart', function (e) {\n            if ($('.size-chart').has(e.target).length <= 0) {\n                $sizeChart.removeClass('active');\n            }\n        });\n    },\n    copyProductLink: function () {\n        $('body').on('click', '#fa-link', function () {\n            event.preventDefault();\n            var $temp = $('<input>');\n            $('body').append($temp);\n            $temp.val($('#shareUrl').val()).select();\n            document.execCommand('copy');\n            $temp.remove();\n            $('.copy-link-message').attr('role', 'alert');\n            $('.copy-link-message').removeClass('d-none');\n            setTimeout(function () {\n                $('.copy-link-message').addClass('d-none');\n            }, 3000);\n        });\n    },\n\n    focusChooseBonusProductModal: base.focusChooseBonusProductModal()\n};\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js?")},
77"../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js":
78/*!***************************************************************************************************************!*\
79  !*** ../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js ***!
80  \***************************************************************************************************************/
81/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (include) {\n    if (typeof include === 'function') {\n        include();\n    } else if (typeof include === 'object') {\n        Object.keys(include).forEach(function (key) {\n            if (typeof include[key] === 'function') {\n                include[key]();\n            }\n        });\n    }\n};\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js?")},
81"./cartridges/int_app/cartridge/client/default/js/product/detail.js":
82/*!**************************************************************************!*\
83  !*** ./cartridges/int_app/cartridge/client/default/js/product/detail.js ***!
84  \**************************************************************************/
85/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\nvar base = __webpack_require__(/*! euronics/product/detail */ \"../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/detail.js\");\nvar appHelpers = __webpack_require__(/*! ../utils/appHelpers */ \"./cartridges/int_app/cartridge/client/default/js/utils/appHelpers.js\");\n\n$(document).on('click', '.btn-continue-shopping', function () {\n    appHelpers.callToApp(this, 'showHome');\n});\n\nmodule.exports = base;\n\n//# sourceURL=webpack:///./cartridges/int_app/cartridge/client/default/js/product/detail.js?")},
85"./cartridges/int_app/cartridge/client/default/js/productDetail.js":
86/*!*************************************************************************!*\
87  !*** ./cartridges/int_app/cartridge/client/default/js/productDetail.js ***!
88  \*************************************************************************/
89/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval('\n\nvar processInclude = __webpack_require__(/*! base/util */ "../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js");\n\n$(document).ready(function () {\n    processInclude(__webpack_require__(/*! ./product/detail */ "./cartridges/int_app/cartridge/client/default/js/product/detail.js"));\n    processInclude(__webpack_require__(/*! euronics/product/wishlist */ "../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/wishlist.js"));\n    processInclude(__webpack_require__(/*! euronics/product/services */ "../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/services.js"));\n    processInclude(__webpack_require__(/*! euronics/product/chargerFeaturesModal */ "../euronics/cartridges/app_custom_euronics/cartridge/client/default/js/product/chargerFeaturesModal.js"));\n});\n\n//# sourceURL=webpack:///./cartridges/int_app/cartridge/client/default/js/productDetail.js?')},
89"./cartridges/int_app/cartridge/client/default/js/utils/appHelpers.js":
90/*!****************************************************************************!*\
91  !*** ./cartridges/int_app/cartridge/client/default/js/utils/appHelpers.js ***!
92  \****************************************************************************/
93/*! no static exports found */function(module,exports,__webpack_require__){"use strict";eval("\n\nfunction callToApp(link, name) {\n    const url = new URL(window.location.href);\n    let app = '';\n\n    if (url.searchParams.size > 0) {\n        app = url.searchParams.get('app');\n    } else {\n        app = $('#app').attr('data-user-agent');\n    }\n\n    if (app && (app === 'app-mobile-ios' || app === 'app-mobile-android')) {\n        app === 'app-mobile-ios' ?\n            window.webkit.messageHandlers[name].postMessage({}) :\n            window.euronicsInterface[name]();\n    } else if ($(link).data('href')) {\n        window.location.href = $(link).data('href');\n    }\n}\n\nmodule.exports = {\n    callToApp: callToApp\n};\n\n//# sourceURL=webpack:///./cartridges/int_app/cartridge/client/default/js/utils/appHelpers.js?")},
vendor: 5,907 bytes, lines 93-97
93"./node_modules/process/browser.js":
94/*!*****************************************!*\
95  !*** ./node_modules/process/browser.js ***!
96  \*****************************************/
97/*! no static exports found */function(module,exports){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack:///./node_modules/process/browser.js?")},
vendor: 785 bytes, lines 97-101
97"./node_modules/webpack/buildin/global.js":
98/*!***********************************!*\
99  !*** (webpack)/buildin/global.js ***!
100  \***********************************/
101/*! no static exports found */function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?')}
vendor: 3 bytes, line 101
101});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.