CINXE.COM
Magento 2 B2B Extension | Magento B2B Ecommerce Features | B2B Demo Module | Pricing Marketplace | Enable Commerce B2B Features | Magento Enterprise B2B Suite
<!doctype html><html lang="en"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"> <meta charset="utf-8"/> <meta name="title" content="Magento 2 B2B Extension | Magento B2B Ecommerce Features | B2B Demo Module | Pricing Marketplace | Enable Commerce B2B Features | Magento Enterprise B2B Suite"/> <meta name="description" content="Enhance B2B ecommerce functionality with Magento 2 B2B Extension. Simplify wholesale transactions, customize pricing policy, and grow your business. Get started today!"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="format-detection" content="telephone=no"/> <title>Magento 2 B2B Extension | Magento B2B Ecommerce Features | B2B Demo Module | Pricing Marketplace | Enable Commerce B2B Features | Magento Enterprise B2B Suite</title> <link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1739349122/_cache/merged/f25dfa4077a1582187c5132e6c10fe54.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 320px)" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/styles.min.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 769px)" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/product-page/product-page-bundle-l.min.css" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/gilroy/bold/Gilroy-Bold.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/Blank-Theme-Icons/Blank-Theme-Icons.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/roboto/bold/Roboto-700.woff2" /> <link rel="preload" as="font" type="font/woff2" crossorigin="anonymous" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/fonts/roboto/regular/Roboto-400.woff2" /> <link rel="icon" type="image/x-icon" href="https://cdn.amasty.com/media/favicon/stores/1/amasty_logo.png" /> <link rel="shortcut icon" type="image/x-icon" href="https://cdn.amasty.com/media/favicon/stores/1/amasty_logo.png" /> <!-- Start: SEO Health Checker --> <!--f7e98322c1f2996ae54a6b854c29c3a4--> <!-- End: SEO Health Checker --> <meta name="google-site-verification" content="mrsBMEhSCRX5SA9IdwUbGNSuWUUTTAHJ1r0K-cA0OZk" /> <!-- Some event from google tag manager call facebook pixel event. But facebook pixel init only on 'https://amasty.com/' If facebook pixel events called on stagings and local environment then errors fall into the console. Fix it. --> <script data-info="not-move-to-bottom"> (function initAmsiteAnalytics() { let initGTM = (w, d, s, l, i) => { w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); let f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`; f.parentNode.insertBefore(j, f); }; let declareGlobalVariables = () => { window.dataLayer = window.dataLayer || []; window.gtag = function() { dataLayer.push(arguments) }; } let addGoogleAnalytics = () => { initAmsiteCookieConsent(); initGTM(window, document, 'script', 'dataLayer', 'GTM-N84742B'); } declareGlobalVariables(); window.addEventListener('init-external-scripts', () => { addGoogleAnalytics(); }); }())</script> <style> @media (min-width: 1260px) { .magezon-builder .mgz-container {width: 1260px;} } </style> <!-- Start VWO Async SmartCode --><!-- End VWO Async SmartCode --> <script data-info="not-move-to-bottom"> 'use strict'; const AmsiteUtils = function () { return { throttle(func, delay) { let lastCall = 0; return function() { let now = Date.now(); if (now - lastCall < delay) { return; } lastCall = now; return func.apply(this, arguments); } }, isCustomerLoggedIn(privateData) { return !!(privateData?.customer?.firstname); }, isMobile(breakpoint) { return window.matchMedia(breakpoint).matches; }, setAnimationToPopup(context) { const origHide = context.hide; context.hide = (...args) => { const overlay = context.$root.querySelector('.am-overlay-popup'); overlay.classList.add('-popup-closed'); origHide.call(context, args); setTimeout(() => { overlay.classList.remove('-popup-closed'); }, 400) } } } }</script> <meta property="og:type" content="product" /><meta property="og:title" content="B2B E-commerce Premium Solution for Magento 2" /><meta property="og:image" content="https://cdn.amasty.com/media/catalog/product/cache/c69fad5054ac8a3eddb920f81914f823/i/c/icon_b2b_premium_2.png" /><meta property="og:description" content="Transform your e-commerce business with the powerful all-in-one B2B solution, crafted for the unique requirements of today's B2B markets. Fully aligned with Adobe Commerce B2B, this solution includes a broad array of additional features, helping your business quickly adapt to changing e-commerce trends and efficiently manage both B2B and B2C operations." /><meta property="og:url" content="https://amasty.com/b2b-ecommerce-suite-for-magento-2.html" /> <meta property="product:price:amount" content="2529"/> <meta property="product:price:currency" content="USD"/> <style>.ng0gx7w-s{padding:0!important}.bje13wx-s{background-color:#fff0fa !important}@media screen and (min-width:1024px){.amsite-top-promotion-main-banner br{display:none}} .amsite-top-promotion-main-banner{display:block;padding:22px 0}.pbuilder-top-promo-html-version > .mgz-element-inner > .inner-content{width:100%}.jf5qs9v-s{text-align:center;padding-right:10px !important;padding-left:10px !important}.mgz-element.jf5qs9v .image-content{width:100%;text-align:center}.mgz-element.jf5qs9v .image-title{font-size:16px}.amyhesu-s{text-align:center;padding-right:10px !important;padding-left:10px !important}.mgz-element.amyhesu .image-content{width:100%;text-align:center}.mgz-element.amyhesu .image-title{font-size:16px}.c7ojcc6-s{text-align:center;padding-right:10px !important;padding-left:10px !important}.mgz-element.c7ojcc6 .image-content{width:100%;text-align:center}.mgz-element.c7ojcc6 .image-title{font-size:16px}.plrbvbi-s{text-align:center;padding-right:10px !important;padding-left:10px !important}.mgz-element.plrbvbi .image-content{width:100%;text-align:center}.mgz-element.plrbvbi .image-title{font-size:16px}.uyojp91-s{margin-bottom:5px !important}.cbgdljx-s{margin-bottom:3px !important}.ykrxhw7-s{padding-right:23px !important;padding-left:0 !important}@media (max-width:768px){.ykrxhw7-s{padding-right:0 !important}}.ywboo17-s{margin-bottom:3px !important}.k3wsu91-s{padding-left:23px !important}@media (max-width:768px){.k3wsu91-s{padding-top:30px !important;padding-left:0 !important}}@media (max-width:575px){.k3wsu91-s{padding-left:0 !important}}.v35wkiu-s{padding-top:0 !important;margin-bottom:0 !important}.ykrxhw7>.mgz-element-inner,.k3wsu91>.mgz-element-inner{padding:0}.gq2lolx-s{padding-top:10px !important}@media (max-width:768px){.gq2lolx-s{padding-top:25px !important}}@media (max-width:575px){.gq2lolx-s{padding-top:25px !important}}.vct173w>.mgz-element-inner{padding:0}.mgz-element.gq2lolx >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.oo4uip3-s{margin-bottom:-15px !important}.t0o3lx2-s{padding-top:15px !important}.mgz-element.xae0qcy .image-content{width:100%;text-align:center}.mgz-element.xae0qcy .image-title{font-size:16px}.hyi6nhs-s{text-align:left}@media (max-width:768px){.hyi6nhs-s{margin-right:0 !important}}@media (max-width:575px){.hyi6nhs-s{margin-right:0 !important}}.mr6vuk0-s{text-align:left}@media (max-width:768px){.mr6vuk0-s{margin-right:0 !important}}@media (max-width:575px){.mr6vuk0-s{margin-right:0 !important}}.ff90wbp-s{padding-right:10px !important}@media (max-width:768px){.ff90wbp-s{padding-right:0 !important}}@media (max-width:575px){.ff90wbp-s{padding-right:0 !important}}.mgz-element.hjavbwo .image-content{width:100%;text-align:center}.mgz-element.hjavbwo .image-title{font-size:16px}.x0rq05u-s{text-align:left}@media (max-width:768px){.x0rq05u-s{margin-right:0 !important}}@media (max-width:575px){.x0rq05u-s{margin-right:0 !important}}.mw60jjo-s{text-align:left}@media (max-width:768px){.mw60jjo-s{margin-right:0 !important}}@media (max-width:575px){.mw60jjo-s{margin-right:0 !important}}.eudpwue-s{padding-right:10px !important}@media (max-width:768px){.eudpwue-s{padding-right:0 !important}}@media (max-width:575px){.eudpwue-s{padding-right:0 !important}}.mgz-element.q37sxvl .image-content{width:100%;text-align:center}.mgz-element.q37sxvl .image-title{font-size:16px}.v452w8f-s{text-align:left}@media (max-width:768px){.v452w8f-s{margin-right:0 !important}}@media (max-width:575px){.v452w8f-s{margin-right:0 !important}}.ycc3lle-s{text-align:left}@media (max-width:768px){.ycc3lle-s{margin-right:0 !important}}@media (max-width:575px){.ycc3lle-s{margin-right:0 !important}}.egml30n-s{padding-right:10px !important}@media (max-width:768px){.egml30n-s{padding-right:0 !important}}@media (max-width:575px){.egml30n-s{padding-right:0 !important}}.h4avuxk-s{margin-top:20px !important}.ff90wbp,.eudpwue,.egml30n{border:10px solid transparent}.ff90wbp>.mgz-element-inner,.eudpwue>.mgz-element-inner,.egml30n>.mgz-element-inner{padding:0;margin:0}.mgz-element.k2b75y1 .image-content{width:100%;text-align:center}.mgz-element.k2b75y1 .image-title{font-size:16px}.pmiiygf-s{text-align:left}@media (max-width:768px){.pmiiygf-s{margin-right:0 !important}}@media (max-width:575px){.pmiiygf-s{margin-right:0 !important}}.kkimce0-s{text-align:left}@media (max-width:768px){.kkimce0-s{margin-right:0 !important}}@media (max-width:575px){.kkimce0-s{margin-right:0 !important}}.wh3nidr-s{padding-right:10px !important}@media (max-width:768px){.wh3nidr-s{padding-right:0 !important}}@media (max-width:575px){.wh3nidr-s{padding-right:0 !important}}.mgz-element.rjn99jp .image-content{width:100%;text-align:center}.mgz-element.rjn99jp .image-title{font-size:16px}.ns2q8w8-s{text-align:left}@media (max-width:768px){.ns2q8w8-s{margin-right:0 !important}}@media (max-width:575px){.ns2q8w8-s{margin-right:0 !important}}.nex1qfb-s{text-align:left}@media (max-width:768px){.nex1qfb-s{margin-right:0 !important}}@media (max-width:575px){.nex1qfb-s{margin-right:0 !important}}.au0f7ca-s{padding-right:10px !important}@media (max-width:768px){.au0f7ca-s{padding-right:0 !important}}@media (max-width:575px){.au0f7ca-s{padding-right:0 !important}}.mgz-element.iyhakd3 .image-content{width:100%;text-align:center}.mgz-element.iyhakd3 .image-title{font-size:16px}.sg5049k-s{text-align:left}@media (max-width:768px){.sg5049k-s{margin-right:0 !important}}@media (max-width:575px){.sg5049k-s{margin-right:0 !important}}.sfw4d7o-s{text-align:left}@media (max-width:768px){.sfw4d7o-s{margin-right:0 !important}}@media (max-width:575px){.sfw4d7o-s{margin-right:0 !important}}.vmet1ga-s{padding-right:10px !important}@media (max-width:768px){.vmet1ga-s{padding-right:0 !important}}@media (max-width:575px){.vmet1ga-s{padding-right:0 !important}}.miwuarc-s{margin-top:30px !important}.wh3nidr,.au0f7ca,.vmet1ga{border:10px solid transparent}.wh3nidr>.mgz-element-inner,.au0f7ca>.mgz-element-inner,.vmet1ga>.mgz-element-inner{padding:0;margin:0}.tpsv5il-s{padding-top:80px !important;padding-bottom:60px !important}.nufc91h>.mgz-element-inner{padding:0}.mgz-element.tpsv5il >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.xrgxxce-s{margin-right:30px !important}@media (max-width:768px){.xrgxxce-s{margin-right:0 !important}}@media (max-width:575px){.xrgxxce-s{margin-right:0 !important}}.cl3kbv6-s{padding-right:10px !important}@media (max-width:768px){.cl3kbv6-s{padding-right:0 !important}}@media (max-width:575px){.cl3kbv6-s{padding-right:0 !important}}.e96eb9b-s{margin-right:30px !important}@media (max-width:768px){.e96eb9b-s{margin-right:0 !important}}@media (max-width:575px){.e96eb9b-s{margin-right:0 !important}}.dreid9k-s{margin-left:10px !important}@media (max-width:768px){.dreid9k-s{margin-left:0 !important}}@media (max-width:575px){.dreid9k-s{margin-left:0 !important}}.hwkuf13-s{margin-right:30px !important}@media (max-width:768px){.hwkuf13-s{margin-right:0 !important}}@media (max-width:575px){.hwkuf13-s{margin-right:0 !important}}.qka1g9q-s{margin-left:10px !important}@media (max-width:768px){.qka1g9q-s{margin-left:0 !important}}@media (max-width:575px){.qka1g9q-s{margin-left:0 !important}}.f9ovjh7-s{margin-top:10px !important}.cl3kbv6,.dreid9k,.qka1g9q{border:0 solid transparent}.cl3kbv6>.mgz-element-inner,.dreid9k>.mgz-element-inner,.qka1g9q>.mgz-element-inner{padding:0;margin:0}.sp568ab-s{margin-top:20px !important}.qjnbw94>.mgz-element-inner{padding:0}.mgz-element.sp568ab >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.wt3c2ug-s{text-align:center}.fhkfhtw-s{text-align:center;padding-top:50px !important}.k0dgjbh>.mgz-element-inner{padding:0}.mgz-element.fhkfhtw >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.tdrck44-s{text-align:center;padding-bottom:0 !important;margin-bottom:0 !important}.q4i68nq-s{padding-left:0 !important}.xjdo029-s{padding-top:0 !important;padding-bottom:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important}.mgz-element.vke0jau >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.e2upnmi-s{padding-bottom:0 !important}@media (max-width:768px){.e2upnmi-s{padding-right:0 !important;padding-bottom:0 !important}}.v5bhr56-s{padding-top:80px !important;padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:768px){.v5bhr56-s{padding-top:25px !important;padding-right:0 !important;padding-bottom:0 !important}}.e2upnmi>.mgz-element-inner{padding:0}.mgz-element.v5bhr56 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.uivbe9p-s{text-align:center;padding-top:0 !important}.eo5o8fu>.mgz-element-inner{padding:0}.mgz-element.uivbe9p >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.iqnjvds-s{text-align:center;padding-top:0 !important}.o5376x6>.mgz-element-inner{padding:0}.mgz-element.iqnjvds >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.xeh8c7d-s{padding:10px 40px 0 40px!important;margin-bottom:0 !important}.y2tb630-s{padding:0 40px 40px 40px!important;margin-top:0 !important}.hwjsy1k-s{padding-top:25px !important;border-radius:8px!important;background-color:#f0f3ff !important}.j6xwmxh-s{padding-top:40px !important}@media (max-width:768px){.j6xwmxh-s{padding-top:0 !important}}.hwjsy1k>.mgz-element-inner{padding:0}.mgz-element.j6xwmxh >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.y9hv6i5-s{padding-bottom:0 !important;margin-bottom:0 !important}.q2dt3vn-s{padding-left:0 !important}.wxc8yp4-s{padding-top:0 !important;padding-bottom:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important}.eymu9v8-s{padding-bottom:0 !important}@media (max-width:768px){.eymu9v8-s{padding-right:0 !important;padding-bottom:0 !important}}.upqjgij-s{padding-top:80px !important;padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:768px){.upqjgij-s{padding-top:25px !important;padding-right:0 !important;padding-bottom:0 !important}}.eymu9v8>.mgz-element-inner{padding:0}.mgz-element.upqjgij >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.ed429tb-s{padding-top:0 !important}.bg4nebm>.mgz-element-inner{padding:0}.mgz-element.ed429tb >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.sthh1t6-s{padding-top:0 !important}.gnbc4ha>.mgz-element-inner{padding:0}.mgz-element.sthh1t6 >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.nlxmc3v-s{padding-bottom:0 !important;margin-bottom:0 !important}.i3iqtr9-s{padding-left:0 !important}.q7smxon-s{padding-top:0 !important;padding-bottom:0 !important;padding-left:0 !important;margin-top:0 !important;margin-bottom:0 !important}.g3yiwh3-s{padding-bottom:0 !important}@media (max-width:768px){.g3yiwh3-s{padding-right:0 !important;padding-bottom:0 !important}}.ml4gy63-s{padding-top:55px !important;padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:768px){.ml4gy63-s{padding-top:25px !important;padding-right:0 !important;padding-bottom:0 !important}}.g3yiwh3>.mgz-element-inner{padding:0}.mgz-element.ml4gy63 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.c3oda89-s{padding-top:0 !important}.htyyaup>.mgz-element-inner{padding:0}.mgz-element.c3oda89 >.mgz-element-inner>.inner-content{width:1250px;max-width:100%;margin:0 auto}.bpwitaj-s{padding-top:0 !important}.h7i2jae>.mgz-element-inner{padding:0}.mgz-element.bpwitaj >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.leb3lxw-s{padding-bottom:0 !important;margin-bottom:0 !important}.twr1ioj-s{text-align:center;margin-top:20px !important}@media (max-width:768px){.twr1ioj-s{margin-top:25px !important}}@media (max-width:575px){.twr1ioj-s{margin-top:25px !important}}.uuh7h91{border:0 solid transparent}.uuh7h91>.mgz-element-inner{padding:0;margin:0}.mgz-element.twr1ioj >.mgz-element-inner>.inner-content{width:700px;max-width:100%;margin:0 auto}.kifp45r-s{padding-top:25px !important;padding-right:25px !important;padding-left:25px !important;margin-bottom:0 !important}@media (max-width:575px){.kifp45r-s{padding-left:10px !important}}.g9df8ow-s{padding-left:25px !important}@media (max-width:575px){.g9df8ow-s{padding-bottom:0 !important;padding-left:10px !important;margin-bottom:0 !important}}@media (max-width:575px){.yrr4gfr-s{padding-top:0 !important;margin-top:0 !important}}.yrr4gfr .mgz-block-heading-line:before{height:1px;background-color:#cecece}.yrr4gfr .product-item-info:hover{border-color:#bbbbbb !important}.sfamfk1-s{min-height:150px !important;border-radius:10px 10px 0 0!important}.sfamfk1-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/catalog/services/comparison-light.png');background-size:cover;background-position:center top}.q2ul6pa-s{padding-top:25px !important;padding-right:10px !important;padding-left:15px !important;margin-bottom:0 !important}.tbakbb7-s{padding-bottom:25px !important}@media (max-width:1199px){.tbakbb7-s{padding-bottom:25px !important}}@media (max-width:991px){.tbakbb7-s{padding-bottom:25px !important}}@media (max-width:768px){.tbakbb7-s{padding-bottom:25px !important}}@media (max-width:575px){.tbakbb7-s{padding-bottom:25px !important}}.c9cidfo-s{padding-left:0 !important;margin-right:13px !important;margin-left:0 !important;border-radius:20px!important;background-color:#ffffff !important}@media (max-width:768px){.c9cidfo-s{padding-right:0 !important;padding-left:0 !important;margin-right:20px !important;margin-left:20px !important}}@media (max-width:575px){.c9cidfo-s{padding-right:0 !important;padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}}.q82l1hl-s{padding-top:25px !important;padding-right:25px !important;padding-left:25px !important;margin-bottom:0 !important}@media (max-width:575px){.q82l1hl-s{padding-left:10px !important}}.ecqu260-s{padding-left:25px !important}@media (max-width:575px){.ecqu260-s{padding-bottom:0 !important;padding-left:10px !important;margin-bottom:0 !important}}.xgalwpm-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.xgalwpm-s{padding-top:0 !important;margin-top:0 !important}}.xgalwpm .mgz-block-heading-line:before{height:1px;background-color:#cecece}.xgalwpm .product-item-info:hover{border-color:#bbbbbb !important}.thdx3dk-s{min-height:150px !important;border-radius:10px 10px 0 0!important}.thdx3dk-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/extensions/test-product-for-description-blocks/bg_2.png');background-size:cover;background-position:center top}.hh9nqnd-s{padding-bottom:5px !important;padding-left:25px !important;margin-top:25px !important;margin-bottom:5px !important}.qn90a4o-s{text-align:center;padding-right:25px !important;padding-left:25px !important;margin-top:10px !important;margin-bottom:0 !important}.mgz-element.qn90a4o .mgz-element-separator-line{border-color:#eaeaea;border-top-style:solid;border-top-width:1px}.au6d3jk-s{padding-top:20px !important;padding-right:25px !important;padding-left:15px !important;margin-bottom:0 !important}.yd634rr-s{padding-bottom:25px !important}@media (max-width:1199px){.yd634rr-s{padding-bottom:25px !important}}@media (max-width:991px){.yd634rr-s{padding-bottom:25px !important}}@media (max-width:768px){.yd634rr-s{padding-bottom:25px !important}}@media (max-width:575px){.yd634rr-s{padding-bottom:25px !important}}.hg5a1rd-s{margin-right:7px !important;margin-left:7px !important;border-radius:20px!important;background-color:#ffffff !important}@media (max-width:768px){.hg5a1rd-s{padding-right:0 !important;padding-left:0 !important;margin-right:20px !important;margin-left:20px !important}}@media (max-width:575px){.hg5a1rd-s{padding-right:0 !important;padding-left:0 !important;margin-top:10px !important;margin-right:0 !important;margin-left:0 !important}}.k6t2hy6-s{padding-top:25px !important;padding-right:25px !important;padding-left:25px !important;margin-bottom:0 !important}@media (max-width:575px){.k6t2hy6-s{padding-left:10px !important}}.ee56igj-s{padding-left:25px !important}@media (max-width:575px){.ee56igj-s{padding-bottom:0 !important;padding-left:10px !important;margin-bottom:0 !important}}.dk4849g-s{padding-bottom:0 !important;margin-bottom:0 !important}@media (max-width:575px){.dk4849g-s{padding-top:0 !important;margin-top:0 !important}}.dk4849g .mgz-block-heading-line:before{height:1px;background-color:#cecece}.dk4849g .product-item-info:hover{border-color:#bbbbbb !important}.wxgj2jc-s{min-height:150px !important;border-radius:10px 10px 0 0!important}.wxgj2jc-p .mgz-parallax-inner.lazy-bg-loaded{background-image:url('https://cdn.amasty.com/media/extensions/test-product-for-description-blocks/bg_2_.png');background-size:cover;background-position:center top}.wibpabq-s{padding-bottom:5px !important;padding-left:25px !important;margin-top:25px !important;margin-bottom:5px !important}.dnw78ea-s{padding-left:25px !important;margin-bottom:10px !important}.yuprg07-s{text-align:center;padding-right:25px !important;padding-left:25px !important}.mgz-element.yuprg07 .mgz-element-separator-line{border-color:#ebebeb;border-top-style:solid;border-top-width:1px}.vnr6kci-s{padding-top:5px !important;padding-right:10px !important;padding-left:15px !important;margin-bottom:0 !important}.ujgy9ub-s{text-align:center;margin-top:71px !important}@media (max-width:575px){.ujgy9ub-s{margin-top:25px !important}}.ujgy9ub .mgz-block-heading-line:before{height:1px;background-color:#cecece}.ujgy9ub .product-item-info:hover{border-color:#bbbbbb !important}.cjxf4nf-s{padding-bottom:25px !important}@media (max-width:1199px){.cjxf4nf-s{padding-bottom:25px !important}}@media (max-width:991px){.cjxf4nf-s{padding-bottom:25px !important}}@media (max-width:768px){.cjxf4nf-s{padding-bottom:25px !important}}@media (max-width:575px){.cjxf4nf-s{padding-bottom:25px !important}}.jlu6ty7-s{padding-right:0 !important;margin-right:0 !important;margin-left:13px !important;border-radius:20px!important;background-color:#ffffff !important}@media (max-width:768px){.jlu6ty7-s{margin-top:20px !important;margin-right:20px !important;margin-left:20px !important}}@media (max-width:575px){.jlu6ty7-s{padding-right:0 !important;padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}}.wogppxk-s{text-align:center;padding-right:0 !important;padding-left:0 !important;margin-top:35px !important;margin-right:0 !important;margin-left:0 !important}.c9cidfo,.hg5a1rd,.jlu6ty7{border:0 solid transparent}.c9cidfo>.mgz-element-inner,.hg5a1rd>.mgz-element-inner,.jlu6ty7>.mgz-element-inner{padding:0;margin:0}.mgz-element.wogppxk >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.vsrkhhw-s{padding-right:0 !important;padding-left:0 !important;margin-right:0 !important;margin-left:0 !important}.svpeshy-s{padding-bottom:70px !important}.vsrkhhw>.mgz-element-inner{padding:0}.mgz-element.svpeshy >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.t5yymn0-s{padding-bottom:0 !important;margin-bottom:0 !important}.ru9j5s7-s{padding:25px!important;border-radius:10px!important;background-color:#f0f3ff !important}.d5i57oa-s{padding-top:30px !important;padding-bottom:50px !important}@media (max-width:768px){.d5i57oa-s{padding-top:0 !important}}.ru9j5s7>.mgz-element-inner{padding:0}.mgz-element.d5i57oa >.mgz-element-inner>.inner-content{width:800px;max-width:100%;margin:0 auto}.etgdknk-s{margin-top:45px !important}.mgz-element.etgdknk .mgz-panels-etgdknk > .mgz-panel > .mgz-panel-heading{border-radius:0;color:#000000;background:#ffffff;border-color:#ffffff}.mgz-element.etgdknk .mgz-panels-etgdknk > .mgz-panel > .mgz-panel-body{background:#ffffff;border-radius:0}.hp3o627-s{padding-bottom:50px !important}.vy1u5j4>.mgz-element-inner{padding:0}.mgz-element.hp3o627 >.mgz-element-inner>.inner-content{width:970px;max-width:100%;margin:0 auto}.builder-button-add-cart{width:250px!important}.pbuilder-add-to-cart-first{margin:auto}</style></head><body data-container="body" data-mage-init='{"loaderAjax": {}, "loader": { "icon": "https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/images/loader-2.gif"}}' id="html-body" ontouchstart="() => {}" class="amasty-jet-theme page-product-configurable amasty-mega-menu catalog-product-view product-b2b-ecommerce-suite-for-magento-2 am-tabs-view am-tabs-allow-default-edit page-layout-1-column-full-width-description"> <div id="cookie-status" style="position: absolute; display: none;">The store will not work correctly in the case when cookies are disabled.</div> <noscript><div class="message global noscript"><div class="content"><p><strong>JavaScript seems to be disabled in your browser.</strong> <span> For the best experience on our site, be sure to turn on Javascript in your browser.</span></p></div></div></noscript> <!-- Google Tag Manager (noscript) --><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N84742B" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><!-- End Google Tag Manager (noscript) --> <!-- Matomo Tag Manager --><script data-info="not-move-to-bottom"> (function initMatomoAnalytics() { const _mtm = window._mtm = window._mtm || []; _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'}); let initMatomo = () => { const d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src='https://cdn.matomo.cloud/amasty.matomo.cloud/container_oFfxxYMe.js'; s.parentNode.insertBefore(g,s); setTimeout(() => window.dispatchEvent(new CustomEvent("matomo-has-loaded")), 1000); }; window.addEventListener('init-external-scripts', () => { initMatomo(); }); }())</script><!-- End Matomo Tag Manager --> <div class="page-wrapper page-layout-1column amsite-full-width with-tabs"> <style>.cmsb82-block { display: block }</style> <div class="magezon-builder magezon-builder-preload"><div class="bje13wx mgz-element mgz-element-row pbuilder-top-promo-html-version full_width_row"><div class="mgz-element-inner bje13wx-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax bje13wx-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="inner-content mgz-container"><div class="ng0gx7w mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ng0gx7w-s"><div class="bawcb2q mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner bawcb2q-s"><p style="text-align: center;"><a class="amsite-top-promotion-main-banner" title="Go to Special Offers page" href="/amasty-promo.html" data-promo-id="banner_product_pages" data-promo-name="Banner at product pages" data-promo-creative="so_feb25_product_pages"><span style="color: #012644;">Heart to cart ❤️ Enjoy exceptional <strong>Valentine’s Day gifts!</strong> →</span></a></p></div></div></div></div></div></div></div></div><header id="ammenu-header-container" class="ammenu-header-container page-header group"> <div id="header" class="relative max-lg:mb-6 z-30 w-full shadow-md bg-container-white lg:shadow-real-none" x-data="initHeader()" @private-content-loaded.window="getData(event.detail.data)" ><div class="flex flex-wrap lg:flex-nowrap lg:gap-12 2xl:gap-24 max-lg:max-h-[70px] max-w-[1920px] items-center justify-between w-full px-7 py-4 lg:pb-3 lg:pt-9 2xl:px-20 lg:px-7 md:px-5 max-xs:px-6 mx-auto"><!-- Mega menu toggle --> <!-- ko scope: 'index = ammenu_hamburger_toggle' --><!-- ko if: $data.source.isMobile() || false --><span data-ammenu-js="menu-toggle" class="ammenu-menu-toggle -hamburger" title="Toggling menu" aria-controls="ammenu-sidebar" aria-haspopup="menu" data-bind=" style: { color: color_settings.hamburger_icon_color }, event: { click: toggling }, attr: { 'aria-expanded': isOpen().toString(), 'aria-hidden': $data.source.isMobile() ? 'true' : 'false' }, css: { '-active': isOpen() }"><span class="ammenu-icon"></span> <span class="ammenu-icon"></span> <span class="ammenu-icon"></span></span> <!-- /ko --><!-- /ko --> <!--Logo--> <a class="logo flex max-w-[130px] max-xs:max-w-[119px] lg:max-w-fit lg:w-[inherit]" href="https://amasty.com/" title="" aria-label="store logo"><img src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/images/logo.svg" title="" alt="" class="lazy logo-image" width="158" height="40" /></a> <!--Logo--> <!-- Search wrapper --> <div class="main-form-wrapper lg:mt-0 hidden" :class="{ '-active': showOverlay, 'container': !config.isFullScreenMode, 'lg:!block relative w-full order-1 lg:order-[inherit] z-20 mt-4': true, 'max-w-none px-0': isHyvaUiHeader() && isFullWidthSearch, 'px-0': isHyvaUiHeader() && isHorizontalView }" x-data="Object.assign( {amXsearchCarouselComponent}, amXsearchProductsComponent(), amXsearchAutocompleteComponent(), amXsearchAutocompleteHyvaUIHeaderCompat(), )" x-cloak x-init="dynamicLayout($el)"><div x-show="showOverlay" class="max-lg:hidden am-overlay-popup z-20" @click.prevent="closeSearch()" @keydown.window.escape="closeSearch()"></div><div class="form mini-search z-20 relative -mx-[30px] lg:mx-0" :class="{ 'right-0': !isHyvaUiHeader(), 'md:flex md:justify-center': checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch }" ><form id="search_mini_form" @submit.prevent="redirect()" action="https://amasty.com/catalogsearch/result/?q=" :class="{ 'w-full absolute right-0': checkHyvaUiHeaderVariant('a') && !isDefaultSearchInput && !isFullWidthSearch, 'justify-end': !checkHyvaUiHeaderVariant('c') }" class="flex" method="GET"><label class="hidden" for="search" data-role="mini-search-label"><span>Search</span></label> <div class="w-full flex align-center justify-center" :style="`max-width: ${!isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`"><button class="btn-icon absolute z-[21] top-4 left-6 inline-block no-underline hover:text-black lg:right-5 lg:top-2" type="submit" :class="showOverlay || isLoading ? 'lg:right-auto lg:left-4' : 'lg:left-auto'" :disabled="!isProductsShown" aria-label="Open search page" x-ref="openSearchPageResult" ><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" class="p-1" aria-hidden="true"> <g id="heroicons-outline/magnifying-glass"> <path id="Vector" d="M21 21L15.8033 15.8033M15.8033 15.8033C17.1605 14.4461 18 12.5711 18 10.5C18 6.35786 14.6421 3 10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C12.5711 18 14.4461 17.1605 15.8033 15.8033Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> </button> <input id="search" x-ref="searchInput" maxlength="128" form="search_mini_form" type="search" name="q" autocomplete="off" placeholder="What are you looking for?" class="!py-4 !px-16 transition appearance-none relative z-20 !h-auto focus:outline-none focus:!border-primary !placeholder-gray-600 focus:!placeholder-transparent lg:!h-10 lg:!px-5 lg:!py-[10px] lg:!rounded-3xl transition-[all]" :class="{ 'lg:!pl-12 lg:!pr-16 lg:!rounded-bl-none lg:!rounded-br-none lg:!bg-container': showOverlay, 'lg:!bg-container-lighter': !showOverlay, 'rounded-tl': isHyvaUiHeader(), 'rounded-tr': !'' && isHyvaUiHeader() }" :style="`width: ${checkHyvaUiHeaderVariant('c') && !isDefaultSearchInput && !isFullWidthSearch ? searchPopupWidth + 'px' : '100%'}`" @focus="doSearch()" @search="checkSearchInput()" @input.debounce.500="doSearch()" x-intersect:enter.once="applyHyvaUiHeaderConfig()" @keydown.arrow-down.prevent="focusElement($el.querySelector('[tabindex]'))"/><button type="button" x-show="showOverlay && !isLoading" class="am-close-popup z-[21] top-4 right-6 lg:top-2 text-secondary hover:text-primary" aria-label="Close search" x-on:click="closeSearch(); $refs.searchInput.value = ''" ><svg xmlns="http://www.w3.org/2000/svg" stroke="currentColor" viewBox="0 0 24 24" class="stroke-[1.5]" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div x-show="isLoading" class="absolute z-[21] top-4 right-6 lg:top-2"><img alt="" src="data:image/gif;base64,R0lGODlhEAALAPQAAP///wAAANra2tDQ0Orq6gYGBgAAAC4uLoKCgmBgYLq6uiIiIkpKSoqKimRkZL6+viYmJgQEBE5OTubm5tjY2PT09Dg4ONzc3PLy8ra2tqCgoMrKyu7u7gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" /></div></div></form><template x-if="searchInitialized"><div class="w-full top-15 bg-white max-h-[90vh] h-screen lg:h-auto lg:rounded-b-3xl overflow-auto text-sm amsearch-container lg:border lg:border-primary lg:border-t-0" :class="{ 'absolute': !config.isFullScreenMode || isHyvaUiHeader(), 'rounded-br rounded-bl': isHyvaUiHeader(), 'right-0': !checkHyvaUiHeaderVariant('c'), 'top-12': checkHyvaUiHeaderVariant('c') && !isHorizontalView, 'top-14': checkHyvaUiHeaderVariant('a') && isHorizontalView }" tabindex="-1" x-cloak :style="`${!isDefaultSearchInput && !isFullWidthSearch ? 'max-width:' + searchPopupWidth + 'px' : ''}; ${!isHorizontalView && checkHyvaUiHeaderVariant('a') ? 'top: 44px; margin-top: 1px;' : ''}`" x-show="!isLoading && showOverlay"><div class="flex w-full content-start flex-wrap box-border relative" :class="{ 'flex-col': isHorizontalView, 'flex-col md:flex-row': !isHorizontalView, }"><div class="md:flex w-full md:border-r px-6 py-5 md:px-7 md:py-6 am-search-sidebar" :class="{ 'border-gray-600 md:hidden': showSideBar(), 'hidden': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ) || isSidebarSectionsDisabled(), 'am-search-horizontal-view': isHorizontalView, }" x-show="!noResultsFound" > <template x-if=" sections?.blog?.items?.length"><div class="md:w-full" x-show="showHandler('blog')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.blog.title"></h3><div><template x-for="(item, index) in sections.blog.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description"></span></div></template></div></div></div></template> <template x-if=" sections?.faq?.items?.length"><div class="md:w-full" x-show="showHandler('faq')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.faq.title"></h3><template x-for="(item, index) in sections.faq.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.brand?.items?.length"><div class="md:w-full" x-show="showHandler('brand')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.brand.title"></h3><template x-for="(item, index) in sections.brand.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="`${BASE_URL + item.url}`" x-html="item.name"></a></template></div></div></template> <template x-if=" sections?.landingPage?.items?.length"><div class="md:w-full" x-show="showHandler('landingPage')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.landingPage.title"></h3><template x-for="(item, index) in sections.landingPage.items" :key="index"><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url" x-html="item.title"></a></template></div></div></template> <template x-if="isHorizontalView && !noResultsFound && sections?.products?.items?.length"><div class="md:w-full" x-show="showHandler('products')" x-cloak> <div class="w-full pb-20 md:pb-0 md:pt-5 md:px-7 lg:px-5"><div class="relative flex flex-wrap w-full group" :class="{'without-see-more': sections.products.items?.length === 1}" ><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="flex w-full mb-5 pb-5 border-b group-[.without-see-more]:border-0 group-[.without-see-more]:mb-0 group-[.without-see-more]:pb-0"><div class="hidden md:!block md:pr-5"><a :href="getProductUrl(product)" class="flex justify-center align-center w-[111px] h-[111px] p-3 bg-indigo-100 rounded leading-4" x-ref="amLabelParent" ><img class="lazy hover:shadow-sm object-contain min-w-52" :src="getProductImageUrl(product)" :alt="product.small_image.label" x-ref="amLabelImgParent" width="111" height="111" /> <template x-if="product.product_label?.length > 0"><div class="flex absolute flex-col" style="gap:7px" x-ref="amLabelWrapper"><template x-for="label in product.product_label"><div :class="`amlabel-position-wrapper relative max-w-full h-fit-content w-fit-content flex gap-amlabel-margin z-20${elementStyle}${amLabelStyle}`" :style="`order: ${label.priority}`" x-data="{...initAmlabel_67be52ca6c806(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor()}" x-init="initLabel($el)" x-intersect.once="render()" x-ref="amLabelElement" :data-position="label.frontend_settings.position" :data-size="label.frontend_settings.image_size" :data-wrapper-class="`amlabel-position-${label.frontend_settings.position}-${product.id}-cat`" ><div x-ref="amLabel" x-cloak x-show="initialized" x-transition:enter="transition ease-out duration-250" x-transition:enter-start="opacity-0 transform scale-90" x-transition:enter-end="opacity-100 transform scale-100" @click.prevent="labelRedirect(label.frontend_settings.redirect_url)" :class="`group relative amasty-label-container amasty-label-for-${product.id} amasty-label-container-${label.label_id}-${product.id}-cat`" :style="label.frontend_settings.style" :data-amlabel-order="label.priority" :aria-describedby="'label-tooltip-' + label.label_id"><template x-if="label.tooltip.content?.length > 0"><div :id="'label-tooltip-' + label.label_id" x-ref="tooltip" class="absolute -top-full invisible opacity-0 transition-opacity -translate-x-1/2 text-center rounded z-[-1] w-max max-w-[200px] mb-3 group-hover:z-30 shadow-md px-5 py-2 group-hover:visible group-hover:opacity-100 after:absolute after:border-color-inherit after:top-[calc(100%-theme(space.1))] after:left-1/2 after:-translate-x-1/2 after:border-4 after:rotate-45" :style="`background-color: ${label.tooltip.background_color}; border-color: ${label.tooltip.background_color}`" role="tooltip"><span :style="`color: ${label.tooltip.color}`" x-html="label.tooltip.content"></span></div></template><template x-if="label.frontend_settings.label_text"><div class="amlabel-text text-center whitespace-nowrap" :class="{'absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2': label.frontend_settings.image}" x-text="label.frontend_settings.label_text" :style="label.frontend_settings.style"></div></template><template x-if="label.frontend_settings.image"><img :id="`amasty-label-image-${label.label_id}-${product.id}-cat`" class="lazy amasty-label-image opacity-100 align-top h-full" :src="getImgLabelPath(label.frontend_settings.image)" :title="label.frontend_settings.alt_tag" :width="getImageSize()" :alt="label.frontend_settings.alt_tag" /></template></div></div></template></div></template> </a> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary !== 0"><div class="mt-1"><div class="flex flex-col"><div class="flex gap-x-2 items-center"><span class="am-text-small font-bold" x-text="product.ratingData.averageRating"></span> <div class="flex"><template x-for="starFilled in product.ratingData.starsFilled"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" viewBox="3 0 20 20" :style="`color: ${product.ratingData.yellowHex}`" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg></template><template x-if="product.ratingData.starFragment > 0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="3 0 20 20" fill="currentColor" class="w-4 h-4"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></template><template x-for="starEmpty in product.ratingData.starsEmpty"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" :style="`color: ${product.ratingData.greyHex}`" viewBox="3 0 20 20" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" /></svg></template></div></div><template x-if="product.rating_summary > 0"><a :href="`${getProductUrl(product)}#reviews`" class="am-text-small"><span class="text-sm" x-html="product.reviews_count"></span> reviews</a></template></div></div></template></template></div><div class="product-info flex flex-col grow"><div class="relative items-center justify-center text-primary text-lg pb-2"><a class="link-as-text font-bold amsearch-product-name block text-lg leading-6" x-html="product.name" :href="getProductUrl(product)" :class="{'pr-12': product.hyva_compatible}" ></a> <img x-show="product.hyva_compatible" class="lazy amsite-ignore-lazy-load absolute right-0 -top-5" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva compatibility"></div><div class="am-text-small" x-html="truncateWithDots(product.short_description.html, config.shortDescriptionLength)" ></div><div class="pt-2 flex items-center gap-3"><!-- ordinary m2 product --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && !isService(product) && !isCalcurates(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span x-show="isM1(product)" class="type">M1</span> <span x-show="!isM1(product)" class="type">M2</span> <span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- when m2 product has m1 product --><template x-if="product.opposite_product_data && product.opposite_product_data.is_salable && !isService(product)"><a :href="getProductUrl(product.opposite_product_data)" class="btn btn-primary !px-4 !py-2 !bg-transparent hover:!bg-orange-50 text-primary hover:!text-primary border border-orange-500 leading-4 tracking-basePx min-w-[92px]" ><span x-show="isM1(product.opposite_product_data)" class="type">M1</span> <span x-show="!isM1(product.opposite_product_data)" class="type">M2</span> <span class="price-wrapper text-primary"><span class="price" x-html="hyva.formatPrice(product.opposite_product_data.price_range.minimum_price.final_price.value, false, {maximumFractionDigits: 0})"></span></span></a></template><!-- service without price --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable_service && isService(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >See details</a></template><!-- service with price --><template x-if="config.isProductAddToCartBlockEnabled && isService(product) && product.is_salable_service"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- calcurates and Saas --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && (isCalcurates(product) || isSaas(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >From <span class="price-wrapper text-white flex"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span>/Month</span></a></template><!-- revising demand --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (isRevisingDemand(product) || isRequestQuote(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white flex"><span class="amsite-stock-status" x-html="product.custom_stock_status"></span></span></a></template><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (!isRevisingDemand(product) && !isRequestQuote(product))"><div class="w-auto justify-center text-sm text-left"><span class="inline-block w-3 h-3 bg-red-500 rounded-full flex-shrink-0"></span> <span class="text-sm text-gray-700 text-left">Out of stock</span></div></template></div></div></div></template></div><div class="pb-6 text-center"><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="link-as-text am-text-small uppercase font-bold">More results <span x-show="getResultProductsCount() > 0">(<span x-text="sections.products.total_count"></span>)</span></a></div></div></div></div></template> <template x-if=" sections?.page?.items?.length"><div class="md:w-full" x-show="showHandler('page')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.page.title"></h3><template x-for="(item, index) in sections.page.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="`${BASE_URL + item.url}`"><span x-html="item.title" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description"></span></div></template></div></div></template> <template x-if=" sections?.recentSearches?.items?.length"><div class="md:w-full" x-show="showHandler('recentSearches')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.recentSearches.title"></span> <div><template x-for="(searchItem, index) in sections.recentSearches.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template> <template x-if=" sections?.category?.items?.length"><div class="md:w-full" x-show="showHandler('category')" x-cloak> <div class="w-full mb-6 am-search-item-list"><h3 class="text-lg font-bold mb-2 px-4" x-text="sections.category.title"></h3><template x-for="(item, index) in sections.category.items" :key="index"><div><a class="w-full block hover:bg-gray-100 py-2 px-4" :href="window.BASE_URL + item.url"><span x-html="item.name" class="font-semibold"></span></a> <span class="text-black block mt-1 px-4 block" x-html="item.description" x-show="item.description"></span></div></template></div></div></template> <template x-if=" sections?.popularSearches?.items?.length"><div class="md:w-full" x-show="showHandler('popularSearches')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.popularSearches.title"></span> <div><template x-for="(searchItem, index) in sections.popularSearches.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template> <template x-if=" sections?.browsingHistory?.items?.length"><div class="md:w-full" x-show="showHandler('browsingHistory')" x-cloak> <div class="w-full mb-4 am-search-item-list"><span class="block am-text-caption font-bold uppercase mb-2" x-text="sections.browsingHistory.title"></span> <div><template x-for="(searchItem, index) in sections.browsingHistory.items" :key="index"><a class="block mb-2 last:mb-0 text-secondary hover:text-primary am-text-small" :href="resultPageUrl + searchItem.name.toLowerCase().replace(/<[^>]*>?/gm, '')" x-html="searchItem.name"></a></template></div></div></div></template></div><div class="relative" :class="{ 'am-search-content': latestQuery.length >= minSearchLength || ( showOnFirstClick('recentSearches') || showOnFirstClick('popularSearches') || showOnFirstClick('browsingHistory') ), 'w-full': latestQuery.length < minSearchLength && ( !showOnFirstClick('recentSearches') && !showOnFirstClick('popularSearches') && !showOnFirstClick('browsingHistory') ), 'am-search-horizontal-view': isHorizontalView, 'am-search-sidebar-disabled': isSidebarSectionsDisabled(), }"><div class="flex flex-nowrap flex-col" x-show="latestQuery.length < minSearchLength" x-cloak> </div><template x-if="!noResultsFound && !isHorizontalView && latestQuery.length >= minSearchLength"> <div class="w-full pb-20 md:pb-0 md:pt-5 md:px-7 lg:px-5"><div class="relative flex flex-wrap w-full group" :class="{'without-see-more': sections.products.items?.length === 1}" ><template x-for="(product, index) in (sections.products.items || [])" :key="index"> <div class="flex w-full mb-5 pb-5 border-b group-[.without-see-more]:border-0 group-[.without-see-more]:mb-0 group-[.without-see-more]:pb-0"><div class="hidden md:!block md:pr-5"><a :href="getProductUrl(product)" class="flex justify-center align-center w-[111px] h-[111px] p-3 bg-indigo-100 rounded leading-4" x-ref="amLabelParent" ><img class="lazy hover:shadow-sm object-contain min-w-52" :src="getProductImageUrl(product)" :alt="product.small_image.label" x-ref="amLabelImgParent" width="111" height="111" /> <template x-if="product.product_label?.length > 0"><div class="flex absolute flex-col" style="gap:7px" x-ref="amLabelWrapper"><template x-for="label in product.product_label"><div :class="`amlabel-position-wrapper relative max-w-full h-fit-content w-fit-content flex gap-amlabel-margin z-20${elementStyle}${amLabelStyle}`" :style="`order: ${label.priority}`" x-data="{...initAmlabel_67be52ca6c9fa(), parentContainerProcessor: initParentContainerProcessor(), labelItemProcessor: initLabelItemProcessor()}" x-init="initLabel($el)" x-intersect.once="render()" x-ref="amLabelElement" :data-position="label.frontend_settings.position" :data-size="label.frontend_settings.image_size" :data-wrapper-class="`amlabel-position-${label.frontend_settings.position}-${product.id}-cat`" ><div x-ref="amLabel" x-cloak x-show="initialized" x-transition:enter="transition ease-out duration-250" x-transition:enter-start="opacity-0 transform scale-90" x-transition:enter-end="opacity-100 transform scale-100" @click.prevent="labelRedirect(label.frontend_settings.redirect_url)" :class="`group relative amasty-label-container amasty-label-for-${product.id} amasty-label-container-${label.label_id}-${product.id}-cat`" :style="label.frontend_settings.style" :data-amlabel-order="label.priority" :aria-describedby="'label-tooltip-' + label.label_id"><template x-if="label.tooltip.content?.length > 0"><div :id="'label-tooltip-' + label.label_id" x-ref="tooltip" class="absolute -top-full invisible opacity-0 transition-opacity -translate-x-1/2 text-center rounded z-[-1] w-max max-w-[200px] mb-3 group-hover:z-30 shadow-md px-5 py-2 group-hover:visible group-hover:opacity-100 after:absolute after:border-color-inherit after:top-[calc(100%-theme(space.1))] after:left-1/2 after:-translate-x-1/2 after:border-4 after:rotate-45" :style="`background-color: ${label.tooltip.background_color}; border-color: ${label.tooltip.background_color}`" role="tooltip"><span :style="`color: ${label.tooltip.color}`" x-html="label.tooltip.content"></span></div></template><template x-if="label.frontend_settings.label_text"><div class="amlabel-text text-center whitespace-nowrap" :class="{'absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2': label.frontend_settings.image}" x-text="label.frontend_settings.label_text" :style="label.frontend_settings.style"></div></template><template x-if="label.frontend_settings.image"><img :id="`amasty-label-image-${label.label_id}-${product.id}-cat`" class="lazy amasty-label-image opacity-100 align-top h-full" :src="getImgLabelPath(label.frontend_settings.image)" :title="label.frontend_settings.alt_tag" :width="getImageSize()" :alt="label.frontend_settings.alt_tag" /></template></div></div></template></div></template> </a> <template x-if="config.isProductReviewsBlockEnabled"> <template x-if="product.rating_summary !== 0"><div class="mt-1"><div class="flex flex-col"><div class="flex gap-x-2 items-center"><span class="am-text-small font-bold" x-text="product.ratingData.averageRating"></span> <div class="flex"><template x-for="starFilled in product.ratingData.starsFilled"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" viewBox="3 0 20 20" :style="`color: ${product.ratingData.yellowHex}`" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg></template><template x-if="product.ratingData.starFragment > 0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="3 0 20 20" fill="currentColor" class="w-4 h-4"><defs><linearGradient :id="'partialFill' + product.id"><stop offset="0%" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.yellowHex"/><stop :offset="product.ratingData.starFragment * 100 + '%'" :stop-color="product.ratingData.greyHex"/><stop offset="100%" :stop-color="product.ratingData.greyHex"/></linearGradient></defs><g :fill="'url(#partialFill' + product.id + ')'"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></g></svg></template><template x-for="starEmpty in product.ratingData.starsEmpty"><svg xmlns="http://www.w3.org/2000/svg" class="fill-current w-4 h-4" :style="`color: ${product.ratingData.greyHex}`" viewBox="3 0 20 20" fill="currentColor"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" /></svg></template></div></div><template x-if="product.rating_summary > 0"><a :href="`${getProductUrl(product)}#reviews`" class="am-text-small"><span class="text-sm" x-html="product.reviews_count"></span> reviews</a></template></div></div></template></template></div><div class="product-info flex flex-col grow"><div class="relative items-center justify-center text-primary text-lg pb-2"><a class="link-as-text font-bold amsearch-product-name block text-lg leading-6" x-html="product.name" :href="getProductUrl(product)" :class="{'pr-12': product.hyva_compatible}" ></a> <img x-show="product.hyva_compatible" class="lazy amsite-ignore-lazy-load absolute right-0 -top-5" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CatalogCustomization/images/hyva/label.png" width="40" height="40" alt="Hyva compatibility"></div><div class="am-text-small" x-html="truncateWithDots(product.short_description.html, config.shortDescriptionLength)" ></div><div class="pt-2 flex items-center gap-3"><!-- ordinary m2 product --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && !isService(product) && !isCalcurates(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span x-show="isM1(product)" class="type">M1</span> <span x-show="!isM1(product)" class="type">M2</span> <span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- when m2 product has m1 product --><template x-if="product.opposite_product_data && product.opposite_product_data.is_salable && !isService(product)"><a :href="getProductUrl(product.opposite_product_data)" class="btn btn-primary !px-4 !py-2 !bg-transparent hover:!bg-orange-50 text-primary hover:!text-primary border border-orange-500 leading-4 tracking-basePx min-w-[92px]" ><span x-show="isM1(product.opposite_product_data)" class="type">M1</span> <span x-show="!isM1(product.opposite_product_data)" class="type">M2</span> <span class="price-wrapper text-primary"><span class="price" x-html="hyva.formatPrice(product.opposite_product_data.price_range.minimum_price.final_price.value, false, {maximumFractionDigits: 0})"></span></span></a></template><!-- service without price --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable_service && isService(product)"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >See details</a></template><!-- service with price --><template x-if="config.isProductAddToCartBlockEnabled && isService(product) && product.is_salable_service"><a :href="getProductUrl(product)" class="btn btn-primary !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span></span></a></template><!-- calcurates and Saas --><template x-if="config.isProductAddToCartBlockEnabled && product.is_salable && (isCalcurates(product) || isSaas(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" >From <span class="price-wrapper text-white flex"><span class="price" x-html="hyva.formatPrice(product.price_range.minimum_price.final_price.value,false, {maximumFractionDigits: 0})"></span>/Month</span></a></template><!-- revising demand --><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (isRevisingDemand(product) || isRequestQuote(product))"><a :href="getProductUrl(product)" class="btn btn-primary flex gap-2 !px-4 !py-2 leading-5 tracking-basePx min-w-[92px]" ><span class="price-wrapper text-white flex"><span class="amsite-stock-status" x-html="product.custom_stock_status"></span></span></a></template><template x-if="config.isProductAddToCartBlockEnabled && !product.is_salable && (!isRevisingDemand(product) && !isRequestQuote(product))"><div class="w-auto justify-center text-sm text-left"><span class="inline-block w-3 h-3 bg-red-500 rounded-full flex-shrink-0"></span> <span class="text-sm text-gray-700 text-left">Out of stock</span></div></template></div></div></div></template></div><div class="pb-6 text-center"><div class="am-search-view-all" x-show="getResultProductsCount() >= 1"><a :href="resultPageUrl + latestQuery" class="link-as-text am-text-small uppercase font-bold">More results <span x-show="getResultProductsCount() > 0">(<span x-text="sections.products.total_count"></span>)</span></a></div></div></div></template><div class="px-6 py-5" x-show="noResultsFound && !errorMessage" x-cloak><div class="am-text-small text-secondary" x-html="'Your search returned no results'"</div></div><div class="p-4 box-border w-full h-full flex" x-show="noResultsFound && errorMessage" x-cloak><div class="text-center flex align-center w-full text-xl justify-center content-center flex-row bg-gray-100 items-center flex-wrap h-full max-h-[90vh] word-break" x-html="errorMessage"></div></div></div></div></div></template></div></div> <div class="flex items-center header-icons-container group-[.page-header.-sticky]:lg:fixed group-[.page-header.-sticky]:lg:top-6 group-[.page-header.-sticky]:lg:right-8 group-[.page-header.-sticky]:2xl:right-20"><!-- Authorization link --> <nav class="am-authorization-link hidden lg:!block" aria-labelledby="customer-menu" ><a href="https://amasty.com/customer/account/index/" class="flex p-1 text-primary hover:text-primary hover:bg-gray-50" aria-label="Log in" ><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="mr-1" role="img"> <g id="heroicons-outline/user-circle"> <path id="Vector_2" d="M17.9815 18.7248C16.6121 16.9175 14.4424 15.75 12 15.75C9.55761 15.75 7.38789 16.9175 6.01846 18.7248M17.9815 18.7248C19.8335 17.0763 21 14.6744 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 14.6744 4.1665 17.0763 6.01846 18.7248M17.9815 18.7248C16.3915 20.1401 14.2962 21 12 21C9.70383 21 7.60851 20.1401 6.01846 18.7248M15 9.75C15 11.4069 13.6569 12.75 12 12.75C10.3431 12.75 9 11.4069 9 9.75C9 8.09315 10.3431 6.75 12 6.75C13.6569 6.75 15 8.09315 15 9.75Z" stroke="#030712" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>user-circle</title></svg> <span class="whitespace-nowrap">Log in</span></a></nav> <!--Search Icon--><button id="menu-search-icon" class="btn-icon inline-block ml-1 no-underline sm:ml-3 hover:text-black lg:hidden group-[.page-header.-sticky]:lg:block" @click.prevent="searchOpen = !searchOpen;" aria-label="Toggle search form" x-on:set-search-open-status.window="searchOpen = event.detail" aria-haspopup="true" :aria-expanded="searchOpen" x-ref="searchButton" ><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" class="p-1" aria-hidden="true"> <g id="heroicons-outline/magnifying-glass_2"> <path id="Vector_3" d="M21 21L15.8033 15.8033M15.8033 15.8033C17.1605 14.4461 18 12.5711 18 10.5C18 6.35786 14.6421 3 10.5 3C6.35786 3 3 6.35786 3 10.5C3 14.6421 6.35786 18 10.5 18C12.5711 18 14.4461 17.1605 15.8033 15.8033Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> </button> <!-- Currency --> <nav class="am-currency-link relative hidden lg:!block mx-5" x-data="initCurrencySwitcher()" @keyup.escape="open = false"><button type="button" id="currency-menu" class="flex items-center p-1 !bg-transparent !text-primary tracking-basePx hover:!bg-gray-50" @click="open = !open" @click.outside="open = false" :aria-expanded="open ? 'true' : 'false'" aria-label="My Account" aria-haspopup="true" ><template x-if="currentCurrencyCode === 'USD'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-dollar"> <path id="Vector_4" d="M12 6V18M9 15.1818L9.87887 15.841C11.0504 16.7197 12.9498 16.7197 14.1214 15.841C15.2929 14.9623 15.2929 13.5377 14.1214 12.659C13.5355 12.2196 12.7677 12 11.9999 12C11.275 12 10.5502 11.7804 9.99709 11.341C8.891 10.4623 8.891 9.03772 9.9971 8.15904C11.1032 7.28036 12.8965 7.28036 14.0026 8.15904L14.4175 8.48863M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-dollar</title></svg> </template><template x-if="currentCurrencyCode === 'EUR'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-euro"> <path id="Vector_5" d="M14.25 7.75625C12.667 7.19798 10.8341 7.5519 9.56802 8.81802C7.81066 10.5754 7.81066 13.4246 9.56802 15.182C10.8341 16.4481 12.667 16.802 14.25 16.2437M7.5 10.5H12.75M7.5 13.5H12.75M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-euro</title></svg> </template><template x-if="currentCurrencyCode === 'GBP'"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/currency-pound"> <path id="Vector_6" d="M14.1213 7.62877C12.9497 6.45719 11.0503 6.45719 9.87868 7.62877C9.37424 8.13321 9.08699 8.7726 9.01694 9.43073C8.9944 9.64251 9.01512 9.85582 9.04524 10.0667L9.5512 13.6084C9.68065 14.5146 9.5307 15.4386 9.12135 16.2573L9 16.5L10.5385 15.9872C11.0003 15.8332 11.4997 15.8332 11.9615 15.9872L12.6158 16.2053C13.182 16.394 13.7999 16.3501 14.3336 16.0832L15 15.75M8.25 12H12M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>currency/currency-pound</title></svg> </template><span class="ml-1" x-text="currentCurrencyCode"></span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </button> <nav class="*:border-sky-100 absolute right-0 z-20 p-1 border rounded min-w-[160px] mt-2 -mr-4 px-1 overflow-auto shadow-lg lg:mt-3 bg-white" x-cloak x-show="open" aria-labelledby="currency-menu" @click.outside="open = false" > <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'USD'}" aria-label="Switch Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"USD"}}'>US Dollar - USD</a> <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'EUR'}" aria-label="Switch Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"EUR"}}'>Euro - EUR</a> <a class="am-text-small bold !text-primary block px-2 py-1 hover:bg-gray-50" href="#" :class="{ 'font-bold': currentCurrencyCode === 'GBP'}" aria-label="Switch Currency" data-post='{"action":"https:\/\/amasty.com\/directory\/currency\/switch\/","data":{"currency":"GBP"}}'>British Pound - GBP</a> </nav></nav><script data-info="not-move-to-bottom"> function initCurrencySwitcher() { "use strict"; const currentCurrencyCode = 'USD'; return { open: false, currentCurrencyCode: '', init() { this.getCurrencyCode(); }, getCurrencyCode () { this.currentCurrencyCode = currentCurrencyCode; } } }</script> <!--Cart --><div class="relative -top-0.5"> <button id="menu-cart-icon" class="btn-icon relative inline-block no-underline hover:text-black" x-ref="cartButton" data-amtheme-js="minicart" :aria-disabled="isCartEmpty()" title="Cart" @click.prevent.stop="openShoppingCart()" @toggle-cart.window="toggleCart($event)" @mouseenter.prevent.stop="() => {$dispatch('toggle-cart', { isOpen: true })}" @mouseleave.prevent.stop="() => {$dispatch('close-cart-with-delay')}" :aria-expanded="isCartOpen" aria-haspopup="dialog" data-href="https://amasty.com/checkout/cart/" ><span class="sr-only label" x-text="` View cart, ${isCartEmpty() ? 'Cart is empty' : hyva.str( 'You have %1 product%2 in your cart.', cart.summary_count, cart.summary_count === 1 ? '' : 's' )}` " ></span> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" role="img"> <g id="heroicons-outline/shopping-bag"> <path id="Vector_7" d="M15.7505 10.5V6C15.7505 3.92893 14.0716 2.25 12.0005 2.25C9.92942 2.25 8.25048 3.92893 8.25048 6V10.5M19.6065 8.50723L20.8697 20.5072C20.9396 21.1715 20.4188 21.75 19.7508 21.75H4.25012C3.58221 21.75 3.06138 21.1715 3.1313 20.5072L4.39446 8.50723C4.45473 7.93466 4.93755 7.5 5.51328 7.5H18.4877C19.0634 7.5 19.5462 7.93466 19.6065 8.50723ZM8.62548 10.5C8.62548 10.7071 8.45759 10.875 8.25048 10.875C8.04338 10.875 7.87548 10.7071 7.87548 10.5C7.87548 10.2929 8.04338 10.125 8.25048 10.125C8.45759 10.125 8.62548 10.2929 8.62548 10.5ZM16.1255 10.5C16.1255 10.7071 15.9576 10.875 15.7505 10.875C15.5434 10.875 15.3755 10.7071 15.3755 10.5C15.3755 10.2929 15.5434 10.125 15.7505 10.125C15.9576 10.125 16.1255 10.2929 16.1255 10.5Z" stroke="#030712" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </g> <title>shopping-bag</title></svg> <span x-cloak class="absolute -bottom-[2px] -right-[7px] h-[15px] min-w-[15px] text-xs rounded-full font-bold" :class="isCartEmpty() ? 'bg-gray-200 text-primary' : 'bg-rose-500 text-white'" aria-hidden="true" x-show="cart.summary_count !== undefined" ><span x-text="cart.summary_count" class="px-[2px] tracking-normal" ></span></span></button> <section x-cloak x-show="cart" id="cart-drawer" x-data="initCartDrawer()" @private-content-loaded.window="getData($event.detail.data)" @toggle-cart.window="toggleCartDrawer($event)" @close-cart-with-delay.window="closeCartWithDelay($event)" @keydown.escape="closeCartDrawer" ><div role="dialog" aria-labelledby="cart-drawer-title" aria-modal="true" :aria-hidden="!open" class="absolute top-8 right-0 z-30 flex"><div class="relative w-screen max-w-[363px] max-h-0 rounded shadow-xl transition-maxHeight overflow-hidden duration-300 ease-linear" :class="{'max-h-screen': open}" @mouseenter.prevent.stop="isGlobalOpen = true" @mouseleave.prevent.stop="closeCartWithDelay()" x-show="open" x-transition:enter-start="!max-h-0" x-transition:enter-end="!max-h-screen" x-transition:leave-start="!max-h-screen" x-transition:leave-end="!max-h-0" x-ref="cartDialogContent" role="region" :tabindex="open ? 0 : -1" aria-label="My Cart" ><div class="flex flex-col border rounded bg-white" x-show="itemsCount"><template x-if="itemsCount"><div class="relative grid gap-2 max-h-[50vh] overflow-y-auto pt-5 px-5" ><div class="hidden bg-gray-100 text-center py-3" data-amsite-js="removeBlock">Item deleted</div><template x-for="item in cartItems"><div class="border-b last:border-0 last:pb-5" :data-amsite-js="item.item_id"><div class="relative flex flex-col items-start pb-3" data-amsite-js="item-main-block"><div class="flex items-center min-h-9 gap-3 justify-between w-full"><template x-if="item.product_has_url"><a :href="item.product_url" x-html="item.product_name" class="link-as-text font-bold" :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" ></a></template><template x-if="!item.product_has_url"><span x-html="item.product_name" class="font-bold"></span></template><button type="button" class="btn-icon hover:text-secondary focus:text-secondary inline-flex -mr-2 px-2" @delete-item-from-cart-called-outside.window="deleteItemFromCart($event.detail.item, $event.detail.target)" @click="item.is_transfered || item.is_lp_free_gift ? $dispatch('minicart-popup-show-notification', {detail: {item, $el}}) : deleteItemFromCart(item, $event.target)" :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg> </button></div><!-- conventional products --><template x-if="item.product_type !== 'virtual'"><template x-for="option in item.options"><div class="pt-1 am-text-caption text-secondary"><span x-text="option.label + ':'"></span> <span x-html="option.value"></span></div></template></template><!-- support subscriptions--><template x-if="item.product_type === 'virtual'"><ul class="ul-reset pt-1 am-text-caption text-secondary minicart-subscription-options"><template x-if="item.subscription_type"><li> <span>Subscription type:</span> <span x-html="item.subscription_type"></span></li></template><template x-if="item.partner_level"><li> <span>Partner level:</span> <span x-html="item.partner_level"></span></li></template><template x-if="item.product_trial"><li> <span>Free trial:</span> <span x-html="item.product_trial + ' days'"></span></li></template><template x-if="item.product_subscription_start_date"><li> <span>Start date:</span> <span x-html="item.product_subscription_start_date"></span></li></template><template x-if="item.product_subscription_version === 'Pro' || item.product_subscription_version === 'Premium' || item.product_subscription_version === 'Amasty One'"><li> <span class="block mb-2">Additional options:</span> <span x-html="getAdditionalOptions(item)"></span></li></template></ul></template><p class="m-0 pt-2" >1 x <template x-if="item.subscription_product_price"><span x-html="hyva.formatPrice(item.subscription_product_price, false, {maximumFractionDigits: 0})"></span></template><template x-if="!item.subscription_product_price"><span x-html="item.product_price"></span></template></p></div></div></template></div></template><template x-if="itemsCount"><div class="rounded"><div class="relative grid py-3 pb-6 px-5 bg-container-lighter"><div class="text-right"><p class="m-0">Subtotal <span class="text-right inline-block min-w-24" x-html="cart.subtotal"></span></p><template x-if="cart.discounts.length"><template x-for="discount in cart.discounts"><template x-if="discount.value"><p class="m-0"><span class="inline-flex flex-col leading-4"><span> Discount</span> <span class="text-secondary" x-html="discount.name"></span></span> <span class="text-right inline-block min-w-24" x-html="discount.amount"></span></p></template></template></template><template x-if="cart.storecredit.length"><template x-for="credit in cart.storecredit"><template x-if="credit.value"><p class="m-0"><span x-html="credit.name"></span> <span class="text-right inline-block min-w-24" x-html="credit.amount"></span></p></template></template></template><template x-if="cart.taxes.length"><template x-for="tax in cart.taxes"><template x-if="tax.value"><p class="m-0"><span x-html="tax.name"></span> <span class="text-right inline-block min-w-24" x-html="tax.amount"></span></p></template></template></template><p class="m-0 font-bold">Grand Total <span class="text-right inline-block min-w-24" x-html="cart.grand_total[0].amount"></span></p></div><div class="flex justify-between items-center mt-5"><a href="https://amasty.com/checkout/cart/" class="btn btn-as-text ml-5" data-metrics-element="mini-cart-view-cart" aria-label="View Cart" >View Cart</a> <a href="https://amasty.com/checkout/" class="btn btn-primary" data-metrics-element="mini-cart-view-checkout" aria-label="Checkout" >Checkout</a></div></div></div></template></div> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></section> <div x-data="Object.assign({}, hyva.modal(), AmMiniCartPopupNotification())" x-on:minicart-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('minicart-popup-notification')" x-spread="overlay('minicart-popup-notification')" class="am-overlay-popup"><div class="am-container-popup inset-0"><div x-ref="minicart-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup max-w-[480px]"> <div class="text-center"><button type="button" class="am-close-popup" aria-label="Close" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="text-4xl">⚠️</div><div class="mt-5 mb-7" x-ref="minicartNotificationContent"></div><div><button class="btn btn-primary !mr-7" x-on:click="$dispatch('delete-item-from-cart-called-outside', {item, target})" >Yes, delete it</button> <button class="btn btn-as-text" x-on:click="hide()" aria-label="Close" >No, keep it</button></div></div></div></div></div></div></div></div></div></div><div data-amsite-js="fake-empty-block-for-sticky-menu" class="hidden h-16"></div> <section class="ammenu-robots-navigation"><nav class="navigation" data-action="navigation" aria-disabled="true" aria-hidden="true" tabindex="-1"><ul aria-disabled="true" aria-hidden="true"> <li class="category-item nav-0" role="presentation"><a href="https://amasty.com/magento-2-extensions.html" tabindex="-1" title="Magento 2 Extensions">Magento 2 Extensions</a> <ul class="submenu"> <li class="category-item nav-0-0" role="presentation"><a href="https://amasty.com/hyva-theme-extensions-for-magento-2.html" tabindex="-1" title="Hyva Theme Extensions">Hyva Theme Extensions</a> </li> <li class="category-item nav-0-1" role="presentation"><a href="https://amasty.com/hyva-checkout-ready-extensions-for-magento-2.html" tabindex="-1" title="Hyva Checkout Ready">Hyva Checkout Ready</a> </li> <li class="category-item nav-0-2" role="presentation"><a href="https://amasty.com/usability-navigation-extensions-for-magento-2.html" tabindex="-1" title="Navigation & Search">Navigation & Search</a> </li> <li class="category-item nav-0-3" role="presentation"><a href="https://amasty.com/catalog-management-extensions-for-magento-2.html" tabindex="-1" title="Catalog Management">Catalog Management</a> </li> <li class="category-item nav-0-4" role="presentation"><a href="https://amasty.com/checkout-extensions-for-magento-2.html" tabindex="-1" title="Checkout">Checkout</a> </li> <li class="category-item nav-0-5" role="presentation"><a href="https://amasty.com/law-based-extensions-for-magento-2.html" tabindex="-1" title="Law-Based Extensions">Law-Based Extensions</a> </li> <li class="category-item nav-0-6" role="presentation"><a href="https://amasty.com/shipping-extensions-for-magento-2.html" tabindex="-1" title="Shipping">Shipping</a> </li> <li class="category-item nav-0-7" role="presentation"><a href="https://amasty.com/seo-optimization-extensions-for-magento-2.html" tabindex="-1" title="SEO">SEO</a> </li> <li class="category-item nav-0-8" role="presentation"><a href="https://amasty.com/promotions-extensions-for-magento-2.html" tabindex="-1" title="Promotions">Promotions</a> </li> <li class="category-item nav-0-9" role="presentation"><a href="https://amasty.com/images-media-extensions-for-magento-2.html" tabindex="-1" title="Images & Media">Images & Media</a> </li> <li class="category-item nav-0-10" role="presentation"><a href="https://amasty.com/administration-extensions-for-magento-2.html" tabindex="-1" title="Administration">Administration</a> </li> <li class="category-item nav-0-11" role="presentation"><a href="https://amasty.com/b2b-extensions-for-magento-2.html" tabindex="-1" title="B2B Products">B2B Products</a> </li> <li class="category-item nav-0-12" role="presentation"><a href="https://amasty.com/ai-extensions-for-magento-2.html" tabindex="-1" title="AI-Powered Extensions">AI-Powered Extensions</a> </li> <li class="category-item nav-0-13" role="presentation"><a href="https://amasty.com/free-magento-2-extensions.html" tabindex="-1" title="Free Magento 2 Extensions">Free Magento 2 Extensions</a> </li> <li class="category-item nav-0-14" role="presentation"><a href="https://amasty.com/contacts" tabindex="-1" title="Support Packs">Support Packs</a> </li> <li class="category-item nav-0-15" role="presentation"><a href="https://amasty.com/research-product-demand.html" tabindex="-1" title="Research Product Demand">Research Product Demand</a> </li> <li class="category-item nav-0-16" role="presentation"><a href="https://trello.com/b/mGKdSV3a/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9" tabindex="-1" title="Public Roadmap">Public Roadmap</a> </li> </ul></li> <li class="category-item nav-1" role="presentation"><a href="https://amasty.com/magento-2-solutions.html" tabindex="-1" title="Suites">Suites</a> <ul class="submenu"> <li class="category-item nav-1-0" role="presentation"><a href="https://amasty.com/hyva-solutions-for-magento-2.html" tabindex="-1" title="Hyva Solutions">Hyva Solutions</a> </li> <li class="category-item nav-1-1" role="presentation"><a href="https://amasty.com/usability-navigation-solutions-for-magento-2.html" tabindex="-1" title="Enhanced Navigation">Enhanced Navigation</a> </li> <li class="category-item nav-1-2" role="presentation"><a href="https://amasty.com/packs-for-magento-2.html" tabindex="-1" title="Packs">Packs</a> </li> <li class="category-item nav-1-3" role="presentation"><a href="https://amasty.com/suites-for-magento-2.html" tabindex="-1" title="Suites">Suites</a> </li> <li class="category-item nav-1-4" role="presentation"><a href="https://amasty.com/sales-and-marketing-solutions-for-magento-2.html" tabindex="-1" title="Sales & Marketing">Sales & Marketing</a> </li> <li class="category-item nav-1-5" role="presentation"><a href="https://amasty.com/user-experience-solutions-for-magento-2.html" tabindex="-1" title="User Experience">User Experience</a> </li> <li class="category-item nav-1-6" role="presentation"><a href="https://amasty.com/order-management-solutions-for-magento-2.html" tabindex="-1" title="Order Management">Order Management</a> </li> </ul></li> <li class="category-item nav-2" role="presentation"><a href="https://amasty.com/contacts/" tabindex="-1" title="Support">Support</a> </li> <li class="category-item nav-3" role="presentation"><a href="https://amasty.com/magento-services.html" tabindex="-1" title="Services">Services</a> <ul class="submenu"> <li class="category-item nav-3-0" role="presentation"><a href="https://amasty.com/magento-development-services.html" tabindex="-1" title="High-Demand Services">High-Demand Services</a> </li> <li class="category-item nav-3-1" role="presentation"><a href="https://amasty.com/magento-development-services.html" tabindex="-1" title="Magento Development Services">Magento Development Services</a> </li> <li class="category-item nav-3-2" role="presentation"><a href="https://amasty.com/magento-hyva-theme-development-service.html" tabindex="-1" title="Hyva Development Services">Hyva Development Services</a> </li> <li class="category-item nav-3-3" role="presentation"><a href="https://amasty.com/magento-optimization-service.html" tabindex="-1" title="Magento Optimization Services">Magento Optimization Services</a> </li> <li class="category-item nav-3-4" role="presentation"><a href="https://amasty.com/magento-2-support-and-maintenance-service.html" tabindex="-1" title="Magento Maintenance Services">Magento Maintenance Services</a> </li> <li class="category-item nav-3-5" role="presentation"><a href="https://amasty.com/magento-2-upgrade-service.html" tabindex="-1" title="Magento Upgrade Services">Magento Upgrade Services</a> </li> <li class="category-item nav-3-6" role="presentation"><a href="https://amasty.com/magento-integration-service.html" tabindex="-1" title="Magento Integration Services">Magento Integration Services</a> </li> <li class="category-item nav-3-7" role="presentation"><a href="https://amasty.com/managed-it-service.html" tabindex="-1" title="Managed Services">Managed Services</a> </li> <li class="category-item nav-3-8" role="presentation"><a href="https://amasty.com/shopify-website-development-service.html" tabindex="-1" title="Shopify Services">Shopify Services</a> </li> <li class="category-item nav-3-9" role="presentation"><a href="https://amasty.com/magento-services.html" tabindex="-1" title="E-Commerce Services">E-Commerce Services</a> </li> <li class="category-item nav-3-10" role="presentation"><a href="https://amasty.com/qa-testing-services.html" tabindex="-1" title="QA Testing Services">QA Testing Services</a> </li> <li class="category-item nav-3-11" role="presentation"><a href="https://amasty.com/hire-developers.html" tabindex="-1" title="Hire Developers">Hire Developers</a> </li> </ul></li> <li class="category-item nav-4" role="presentation"><a href="https://amasty.com/shopify-apps.html" tabindex="-1" title="Shopify Apps">Shopify Apps</a> </li> <li class="category-item nav-5" role="presentation"><a href="https://amasty.com/amasty-promo.html" tabindex="-1" title="Special Offers">Special Offers</a> </li> <li class="category-item nav-6" role="presentation"><a href="https://amasty.com/amasty-loyalty-program.html" tabindex="-1" title="Loyalty Programs">Loyalty Programs</a> </li> <li class="category-item nav-7" role="presentation"><a href="https://amasty.com/blog/" tabindex="-1" title="Blog">Blog</a> </li> <li class="category-item nav-8" role="presentation"><a href="https://amasty.com/knowledge-base/" tabindex="-1" title="FAQ">FAQ</a> </li> </ul></nav></section> <section class="ammenu-menu-wrapper" data-nosnippet data-bind=" scope: 'ammenu_wrapper', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_wrapper': { component: 'Amasty_MegaMenuLite/js/wrapper', data: {"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[{"show_mobile_content":0,"mobile_content":"<div class=\"ammenu-view-all-mobile-link\">\r\n <a class=\"ammenu-link view-all\"\r\n href=\"\/magento-2-extensions.html\"\r\n aria-label=\"Go to All Magento 2 Extensions\"\r\n title=\"Go to All Magento 2 Extensions\"\r\n role=\"link\"\r\n tabindex=\"0\"\r\n >\r\n All Magento 2 Extensions\r\n <\/a>\r\n<\/div>\r\n\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Popular right now<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/cookie-consent-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Cookie Consent (GDPR)\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\" alt=\"Cookie Consent (GDPR) for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Cookie Consent (GDPR)<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Improved Layered Navigation\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5.png\" alt=\"Improved Layered Navigation for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\" style=\"display: none; width:111px;\" data-mage-init='{\"Amasty_Label\/js\/initLabel\":{ \"mode\": \"cat\", \"isAdminArea\": \"\", \"config\": {\"position\":\"top-center\",\"size\":\"\",\"path\":\".product-image-container, .product-item-photo, .cdz-product-top\",\"mode\":\"prod\",\"move\":0,\"product\":\"506\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"506\", \"selector\": \".amasty-label-container-13-506-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-506-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Improved Layered Navigation for Magento 2\" alt=\"Improved Layered Navigation for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Improved Layered Navigation<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Analytics 4 with GTM Support\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2.png\" alt=\"Google Analytics 4 with GTM Support for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Analytics 4 with GTM Support<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/featured-extensions-for-magento-2.html\" class=\"block-link-below\" tabindex=\"0\" title=\"View All BestSellers\">View All BestSellers<\/a> <\/div>\r\n\r\n\r\n<div class=\"ammenu-m2-dropdown-banners\" data-amsite-js=\"ammenu-m2-dropdown-banners\">\r\n <a class=\"amsite-menu-picker-btn action secondary\" href=\"\/latest-updates-magento-2-extensions.html?utm_source=menu&utm_medium=widget&utm_campaign=recent_updates\" title=\"Go to this page\">\r\n Check Module Updates\r\n <\/a>\r\n <img src=\"https:\/\/cdn.amasty.com\/media\/amsite\/adobe-partner-badge-2x.png\" alt=\"Adobe partner logo\" width=\"180\" \r\n height=\"46\">\r\n<\/div> ","type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":3,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Hyva Theme Extensions","is_category":true,"id":"category-node-83","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hyva-theme-extensions-for-magento-2.html","current":false,"items_count":162,"top_products":[{"url":"https:\/\/amasty.com\/custom-form-for-magento-2.html","name":"Custom Form"},{"url":"https:\/\/amasty.com\/social-login-for-magento-2.html","name":"Social Login"},{"url":"https:\/\/amasty.com\/google-tag-manager-for-magento-2.html","name":"Google Analytics 4 with GTM"}],"label":{"label":"HOT","label_text_color":"#ffffff","label_background_color":"#ff2f7a"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hyva Checkout Ready","is_category":true,"id":"category-node-109","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hyva-checkout-ready-extensions-for-magento-2.html","current":false,"items_count":135,"top_products":[{"url":"https:\/\/amasty.com\/out-of-stock-notification-for-magento-2.html","name":"Out of Stock Notification"},{"url":"https:\/\/amasty.com\/order-attributes-for-magento-2.html","name":"Order Attributes"},{"url":"https:\/\/amasty.com\/shipping-restrictions-for-magento-2.html","name":"Shipping Restrictions "}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Navigation & Search","is_category":true,"id":"category-node-26","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/usability-navigation-extensions-for-magento-2.html","current":false,"items_count":21,"top_products":[{"url":"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html","name":"Improved Layered Navigation","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/mega-menu-for-magento-2.html","name":"Mega Menu Pro"},{"url":"https:\/\/amasty.com\/elasticsearch-for-magento-2.html","name":"Elastic Search"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Catalog Management","is_category":true,"id":"category-node-28","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/catalog-management-extensions-for-magento-2.html","current":false,"items_count":34,"top_products":[{"url":"https:\/\/amasty.com\/product-feed-for-magento-2.html","name":"Product Feed"},{"url":"https:\/\/amasty.com\/improved-sorting-for-magento-2.html","name":"Improved Sorting"},{"url":"https:\/\/amasty.com\/shop-by-brand-for-magento-2.html","name":"Shop by Brand"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Checkout","is_category":true,"id":"category-node-35","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/checkout-extensions-for-magento-2.html","current":false,"items_count":27,"top_products":[{"url":"https:\/\/amasty.com\/one-step-checkout-for-magento-2.html","name":"One Step Checkout Pro","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/customer-attributes-for-magento-2.html","name":"Customer Attributes"},{"url":"https:\/\/amasty.com\/delivery-date-manager-for-magento-2.html","name":"Delivery Date Manager"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Law-Based Extensions","is_category":true,"id":"category-node-112","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/law-based-extensions-for-magento-2.html","current":false,"items_count":8,"top_products":[{"url":"https:\/\/amasty.com\/cookie-consent-for-magento-2.html","name":"Cookie Consent"},{"url":"https:\/\/amasty.com\/omnibus-price-tracker-for-magento-2.html","name":"Omnibus Price Tracker"},{"url":"https:\/\/amasty.com\/age-verification-for-magento-2.html","name":"Age Verification","label":{"label":"NEW","label_text_color":"#ffffff","label_background_color":"#4d91f8"}}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shipping","is_category":true,"id":"category-node-30","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/shipping-extensions-for-magento-2.html","current":false,"items_count":19,"top_products":[{"url":"https:\/\/amasty.com\/shipping-rules-for-magento-2.html","name":"Shipping Rules"},{"url":"https:\/\/amasty.com\/shipping-table-rates-for-magento-2.html","name":"Shipping Table Rates"},{"url":"https:\/\/amasty.com\/store-pickup-with-locator-for-magento-2.html","name":"Store Pickup with Locator"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"SEO","is_category":true,"id":"category-node-33","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/seo-optimization-extensions-for-magento-2.html","current":false,"items_count":29,"top_products":[{"url":"https:\/\/amasty.com\/seo-toolkit-for-magento-2.html","name":"SEO Toolkit Pro"},{"url":"https:\/\/amasty.com\/google-indexing-api-for-magento-2.html","name":"Google Indexing API","label":{"label":"NEW","label_text_color":"#ffffff","label_background_color":"#4d91f8"}},{"url":"https:\/\/amasty.com\/google-page-speed-optimizer-for-magento-2.html","name":"Google Page Speed Optimizer Pro"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Promotions","is_category":true,"id":"category-node-29","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/promotions-extensions-for-magento-2.html","current":false,"items_count":44,"top_products":[{"url":"https:\/\/amasty.com\/free-gift-for-magento-2.html","name":"Free Gift","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/special-promotions-pro-for-magento-2.html","name":"Special Promotions Pro"},{"url":"https:\/\/amasty.com\/automatic-related-products-for-magento-2.html","name":"Automatic Related Products"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Images & Media","is_category":true,"id":"category-node-36","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/images-media-extensions-for-magento-2.html","current":false,"items_count":15,"top_products":[{"url":"https:\/\/amasty.com\/product-labels-for-magento-2.html","name":"Product Labels"},{"url":"https:\/\/amasty.com\/promo-banners-for-magento-2.html","name":"Promo Banners"},{"url":"https:\/\/amasty.com\/color-swatches-pro-for-magento-2.html","name":"Color Swatches Pro"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Administration","is_category":true,"id":"category-node-82","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/administration-extensions-for-magento-2.html","current":false,"items_count":25,"top_products":[{"url":"https:\/\/amasty.com\/admin-actions-log-for-magento-2.html","name":"Admin Actions Log"},{"url":"https:\/\/amasty.com\/advanced-permissions-for-magento-2.html","name":"Advanced Permissions"},{"url":"https:\/\/amasty.com\/payment-restrictions-for-magento-2.html","name":"Payment Restrictions"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"B2B Products","is_category":true,"id":"category-node-61","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/b2b-extensions-for-magento-2.html","current":false,"items_count":27,"top_products":[{"url":"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html","name":"B2B E-commerce Premium Suite"},{"url":"https:\/\/amasty.com\/import-and-export-for-magento-2.html","name":"Import and Export Premium"},{"url":"https:\/\/amasty.com\/b2b-company-account-for-magento-2.html","name":"B2B Company Account"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"AI-Powered Extensions","is_category":true,"id":"category-node-103","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/ai-extensions-for-magento-2.html","current":false,"items_count":3,"top_products":[{"url":"https:\/\/amasty.com\/blog-pro-for-magento-2.html","name":"Blog Pro"},{"url":"https:\/\/amasty.com\/chatgpt-ai-content-for-magento-2.html","name":"ChatGPT AI Content Generator"},{"url":"https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html","name":"Google Automated Discounts"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Free Magento 2 Extensions","is_category":true,"id":"category-node-43","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/free-magento-2-extensions.html","current":false,"items_count":8,"top_products":[{"url":"https:\/\/amasty.com\/google-page-speed-optimizer-lite-for-magento-2.html","name":"Google Page Speed Optimizer"},{"url":"https:\/\/amasty.com\/recently-viewed-products-popup-for-magento-2.html","name":"Recently Viewed Products"},{"url":"https:\/\/amasty.com\/mega-menu-lite-for-magento-2.html","name":"Mega Menu"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Support Packs","is_category":true,"id":"category-node-79","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/contacts","current":false,"items_count":0,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Research Product Demand","is_category":true,"id":"category-node-69","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/research-product-demand.html","current":false,"items_count":57,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Public Roadmap","is_category":true,"id":"category-node-97","status":1,"sort_order":null,"content":"","url":"https:\/\/trello.com\/b\/mGKdSV3a\/%F0%9F%9A%A9-amasty-product-roadmap-%F0%9F%9A%A9","current":false,"items_count":0,"hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":"Magento 2 Extensions","is_category":true,"id":"category-node-25","status":1,"sort_order":"0","content":"<div class=\"ammenu-dropdown-wrapper -desktop\">\r\n <div class=\"left-side\">\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Popular right now<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/cookie-consent-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Cookie Consent (GDPR)\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/c\/o\/cookie-consent-for-magento-2_6253b4c79f9ab.png\" alt=\"Cookie Consent (GDPR) for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Cookie Consent (GDPR)<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Improved Layered Navigation\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/m\/improved-layered-navigation-for-magento-2_5_png.webp\" alt=\"Improved Layered Navigation for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-506-cat amasty-label-for-506\" style=\"display: none; width:111px;\" data-mage-init='{\"Amasty_Label\/js\/initLabel\":{ \"mode\": \"cat\", \"isAdminArea\": \"\", \"config\": {\"position\":\"top-center\",\"size\":\"\",\"path\":\".product-image-container, .product-item-photo, .cdz-product-top\",\"mode\":\"prod\",\"move\":0,\"product\":\"506\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"506\", \"selector\": \".amasty-label-container-13-506-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-506-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Improved Layered Navigation for Magento 2\" alt=\"Improved Layered Navigation for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Improved Layered Navigation<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-tag-manager-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Analytics 4 with GTM Support\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-google-tag-manager-for-magento-2_png.webp\" alt=\"Google Analytics 4 with GTM Support for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Analytics 4 with GTM Support<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/hyva-theme-extensions-for-magento-2.html?utm_source=menu&utm_medium=widget&utm_campaign=hyva_extensions\" class=\"block-link-below\" tabindex=\"0\" title=\"View All Hyva Extensions\">View All Hyva Extensions<\/a> <\/div>\r\n\r\n <div class=\"ammenu-m2-dropdown-banners\" data-amsite-js=\"ammenu-m2-dropdown-banners\">\r\n <a class=\"amsite-menu-picker-btn action secondary\" href=\"\/latest-updates-magento-2-extensions.html?utm_source=menu&utm_medium=widget&utm_campaign=recent_updates\" title=\"Go to this page\">\r\n Check Module Updates\r\n <\/a>\r\n <img src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/amsite\/adobe-partner-badge-2x_png.webp\" alt=\"Adobe partner logo\" width=\"180\" \r\n height=\"46\">\r\n<\/div> \r\n\r\n <\/div>\r\n <div class=\"right-side\">\r\n <!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->\r\n <\/div>\r\n<\/div>","url":"https:\/\/amasty.com\/magento-2-extensions.html","current":false,"items_count":261,"top_products":[{"url":"https:\/\/amasty.com\/tier-price-for-magento-2.html","name":"Tier Price for Magento 2"}],"hide_mobile_content":false,"submenu_animation":"fade_in"},{"show_mobile_content":0,"mobile_content":"<div class=\"ammenu-view-all-mobile-link\">\r\n <a class=\"ammenu-link view-all\"\r\n href=\"\/magento-2-solutions.html\"\r\n aria-label=\"Go to Solutions\"\r\n title=\"Go to Solutions\"\r\n role=\"link\"\r\n tabindex=\"0\"\r\n >\r\n All Solutions\r\n <\/a>\r\n<\/div>\r\n\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Featured Products<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to B2B E-commerce Premium Solution\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2.png\" alt=\"B2B E-commerce Premium Solution for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">B2B E-commerce Premium Solution<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Page Speed Optimizer Powered by SpeedSize™ AI Pro\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e.png\" alt=\"Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\" style=\"display: none; width:111px;\" data-mage-init='{\"Amasty_Label\/js\/initLabel\":{ \"mode\": \"cat\", \"isAdminArea\": \"\", \"config\": {\"position\":\"top-center\",\"size\":\"\",\"path\":\".product-image-container, .product-item-photo, .cdz-product-top\",\"mode\":\"prod\",\"move\":0,\"product\":\"2699\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"2699\", \"selector\": \".amasty-label-container-13-2699-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-2699-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" alt=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/magento-2-extensions.html\" class=\"block-link-below\" tabindex=\"0\" title=\"View All BestSellers\">View All BestSellers<\/a> <\/div>\r\n","type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":3,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Hyva Solutions","is_category":true,"id":"category-node-104","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hyva-solutions-for-magento-2.html","current":false,"items_count":8,"top_products":[{"url":"https:\/\/amasty.com\/gdpr-for-magento-2.html","name":"GDPR Pro"},{"url":"https:\/\/amasty.com\/gift-card-for-magento-2.html","name":"Gift Card Pro"},{"url":"https:\/\/amasty.com\/product-attachments-for-magento-2.html","name":"Product Attachments"}],"label":{"label":"HOT","label_text_color":"#ffffff","label_background_color":"#ff2f7a"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":0,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Enhanced Navigation","is_category":true,"id":"category-node-72","status":1,"sort_order":"99999","content":"","url":"https:\/\/amasty.com\/usability-navigation-solutions-for-magento-2.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/premium-custom-layered-navigation-for-magento-2.html","name":"Layered Navigation Premium"},{"url":"https:\/\/amasty.com\/advanced-search-for-magento-2.html","name":"Advanced Search"}],"label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Packs","is_category":true,"id":"category-node-113","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/packs-for-magento-2.html","current":false,"items_count":2,"top_products":[{"url":"https:\/\/amasty.com\/ultimate-sale-booster-for-magento-2.html","name":"Sale Booster Pack"},{"url":"https:\/\/amasty.com\/elastic-layered-navigation-for-magento-2.html","name":"Elastic Layered Navigation"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Suites","is_category":true,"id":"category-node-114","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/suites-for-magento-2.html","current":false,"items_count":4,"top_products":[{"url":"https:\/\/amasty.com\/promotion-suite-middle-for-magento-2.html","name":"Promotion Suite Pro"},{"url":"https:\/\/amasty.com\/security-suite-for-magento-2.html","name":"Security Suite "},{"url":"https:\/\/amasty.com\/shipping-suite-for-magento-2.html","name":"Shipping Suite Pro"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Sales & Marketing","is_category":true,"id":"category-node-73","status":1,"sort_order":"99999","content":"","url":"https:\/\/amasty.com\/sales-and-marketing-solutions-for-magento-2.html","current":false,"items_count":11,"top_products":[{"url":"https:\/\/amasty.com\/abandoned-cart-email-for-magento-2.html","name":"Abandoned Cart Email"},{"url":"https:\/\/amasty.com\/reward-points-for-magento-2.html","name":"Reward Points"},{"url":"https:\/\/amasty.com\/special-promotions-for-magento-2.html","name":"Special Promotions"},{"url":"https:\/\/amasty.com\/facebook-pixel-for-magento-2.html","name":"Facebook Pixel"},{"url":"https:\/\/amasty.com\/advanced-product-reviews-for-magento-2.html","name":"Advanced Product Reviews"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"User Experience","is_category":true,"id":"category-node-77","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/user-experience-solutions-for-magento-2.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/request-a-quote-for-magento-2.html","name":"Request a Quote"},{"url":"https:\/\/amasty.com\/google-page-speed-optimizer-premium-for-magento-2.html","name":"Google Page Speed Optimizer Premium"},{"url":"https:\/\/amasty.com\/store-locator-for-magento-2.html","name":"Store Locator"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Order Management","is_category":true,"id":"category-node-74","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/order-management-solutions-for-magento-2.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/rma-for-magento-2.html","name":"RMA"},{"url":"https:\/\/amasty.com\/pre-order-for-magento-2.html","name":"Pre Order"},{"url":"https:\/\/amasty.com\/advanced-reports-for-magento-2.html","name":"Advanced Reports"}],"hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":"Suites","is_category":true,"id":"category-node-71","status":1,"sort_order":"1","content":"<div class=\"ammenu-dropdown-wrapper -desktop\">\r\n <div class=\"left-side\">\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Featured Products<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-automated-discounts-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Automated Discounts Premium\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-automated-discounts-for-magento-2_6568768b9b091.png\" alt=\"Google Automated Discounts Premium for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Automated Discounts Premium<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to B2B E-commerce Premium Solution\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon_b2b_premium_2_png.webp\" alt=\"B2B E-commerce Premium Solution for Magento 2\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">B2B E-commerce Premium Solution<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Google Page Speed Optimizer Powered by SpeedSize™ AI Pro\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/g\/o\/google-page-speed-optimizer-powered-by-speedsize-for-magento-2_629ed9b6e2f0e_png.webp\" alt=\"Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro for Magento 2\"\/><\/span><\/span> <div class=\"amasty-label-container amasty-label-container-13-2699-cat amasty-label-for-2699\" style=\"display: none; width:111px;\" data-mage-init='{\"Amasty_Label\/js\/initLabel\":{ \"mode\": \"cat\", \"isAdminArea\": \"\", \"config\": {\"position\":\"top-center\",\"size\":\"\",\"path\":\".product-image-container, .product-item-photo, .cdz-product-top\",\"mode\":\"prod\",\"move\":0,\"product\":\"2699\",\"label\":13,\"margin\":7,\"alignment\":0,\"order\":5,\"redirect_url\":\"\",\"tooltip\":{\"backgroundColor\":\"\",\"color\":\"\",\"status\":1,\"content\":\"\"}}, \"productId\": \"2699\", \"selector\": \".amasty-label-container-13-2699-cat\" }}'><div class=\"amlabel-text\"><\/div> <img id=\"amasty-label-image-13-2699-cat\" class=\"amasty-label-image\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/amlabel\/top-rated-new-2x.png\" style=\"opacity: 1 !important;vertical-align: top;\" title=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" alt=\"Google Page Speed Optimizer Powered by SpeedSize™ AI Pro for Magento 2\" ><\/div> <div class=\"product-item-name\"><span class=\"ammenu-text\">Google Page Speed Optimizer Powered by SpeedSize\u2122 AI Pro<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/all-magento-2-bundles\" class=\"block-link-below\" tabindex=\"0\" title=\"View ready-made bundles list\">View ready-made bundles list<\/a> <\/div>\r\n\r\n <\/div>\r\n <div class=\"right-side\">\r\n <!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->\r\n <\/div>\r\n<\/div>","url":"https:\/\/amasty.com\/magento-2-solutions.html","current":false,"items_count":43,"top_products":[{"url":"https:\/\/amasty.com\/improved-layered-navigation-for-magento-2.html","name":"Improved Layered Navigation","label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"}},{"url":"https:\/\/amasty.com\/elasticsearch-for-magento-2.html","name":"Elastic Search"},{"url":"https:\/\/amasty.com\/mega-menu-for-magento-2.html","name":"Mega Menu Pro"}],"hide_mobile_content":false,"submenu_animation":"fade_in"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Support","is_category":false,"id":"custom-node-4","status":1,"sort_order":"2","content":"","url":"https:\/\/amasty.com\/contacts\/","current":false,"items_count":null,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":"<div class=\"ammenu-view-all-mobile-link\">\r\n <a class=\"ammenu-link view-all\"\r\n href=\"\/magento-services.html\"\r\n aria-label=\"Go to All Services\"\r\n title=\"Go to All Services\"\r\n role=\"link\"\r\n tabindex=\"0\"\r\n >\r\n All Services\r\n <\/a>\r\n<\/div>\r\n\r\n <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">Featured Services<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-optimization-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Optimization Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021.png\" alt=\"Magento Optimization Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Optimization Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Support and Maintenance Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566.png\" alt=\"Magento 2 Support and Maintenance Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Support and Maintenance Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-website-development-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Website Development\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb.png\" alt=\"Magento Website Development\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Website Development<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-upgrade-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Upgrade Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3.png\" alt=\"Magento 2 Upgrade Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Upgrade Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-to-shopify-migration-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento to Shopify Migration Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/i\/c\/icon-magento-to-shopify-migration-for-magento-2.png\" alt=\"Magento to Shopify Migration Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento to Shopify Migration Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div> <a href=\"\/magento-services.html\" class=\"block-link-below\" tabindex=\"0\" title=\"View All BestSellers\">View All BestSellers<\/a> <\/div>\r\n\r\n\r\n","type":{"value":1,"label":"vertical"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"High-Demand Services","is_category":true,"id":"category-node-111","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-development-services.html","current":false,"items_count":4,"top_products":[{"url":"https:\/\/amasty.com\/magento-development.html","name":"Magento Custom Development"},{"url":"https:\/\/amasty.com\/magento-optimization-service.html","name":"Magento Optimization"},{"url":"https:\/\/amasty.com\/magento-2-upgrade-service.html","name":"Magento 2 Upgrade Service","label":{"label":"10%","label_text_color":"#ffffff","label_background_color":"#f9425a"}},{"url":"https:\/\/amasty.com\/website-development-service.html","name":"Custom Website Development Services"}],"label":{"label":"TOP","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Magento Development Services","is_category":true,"id":"category-node-84","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-development-services.html","current":false,"items_count":17,"top_products":[{"url":"https:\/\/amasty.com\/magento-website-development-service.html","name":"Magento Website Development"},{"url":"https:\/\/amasty.com\/magento-mobile-app-development-service.html","name":"Magento Mobile App Development"},{"url":"https:\/\/amasty.com\/magento-code-audit-service.html","name":"Magento Code Audit"},{"url":"https:\/\/amasty.com\/magento-outsourcing-services.html","name":"Magento Outsourcing Services"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"Hyva Development Services","is_category":true,"id":"category-node-108","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-hyva-theme-development-service.html","current":false,"items_count":3,"top_products":[{"url":"https:\/\/amasty.com\/magento-hyva-theme-development-service.html","name":"Hyva Theme Development"},{"url":"https:\/\/amasty.com\/hyva-theme-migration-service.html","name":"Hyva Theme Migration"},{"url":"https:\/\/amasty.com\/magento-hyva-theme-customization-service.html","name":"Hyva Theme Customization"}],"label":{"label":"HOT","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Optimization Services","is_category":true,"id":"category-node-85","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-optimization-service.html","current":false,"items_count":6,"top_products":[{"url":"https:\/\/amasty.com\/magento-performance-audit.html","name":"Magento Performance Audit","label":{"label":"FREE","label_text_color":"#ffffff","label_background_color":"#4d91f8"}},{"url":"https:\/\/amasty.com\/magento-seo-services.html","name":"Magento SEO Services"},{"url":"https:\/\/amasty.com\/website-ui-ux-audit.html","name":"Website UI\/UX Audit"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Maintenance Services","is_category":true,"id":"category-node-86","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html","current":false,"items_count":6,"top_products":[{"url":"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html","name":"Magento 2 Support and Maintenance"},{"url":"https:\/\/amasty.com\/installation-service.html","name":"Installation Service"},{"url":"https:\/\/amasty.com\/magento-security-patch.html","name":"Magento Security Patch Installation"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Upgrade Services","is_category":true,"id":"category-node-87","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-2-upgrade-service.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/magento-1-to-2-migration-service.html","name":"Magento 1 to 2 Migration"},{"url":"https:\/\/amasty.com\/magento-server-configuration-and-migration-service.html","name":"Magento Server Configuration and Migration"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Magento Integration Services","is_category":true,"id":"category-node-89","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-integration-service.html","current":false,"items_count":7,"top_products":[{"url":"https:\/\/amasty.com\/amazon-integration-for-magento-2.html","name":"Magento 2 Amazon Integration"},{"url":"https:\/\/amasty.com\/magento-2-microsoft-dynamics-integration-service.html","name":"Magento 2 Microsoft Integration"},{"url":"https:\/\/amasty.com\/sap-integration-services-magento.html","name":"Magento 2 SAP Integration"},{"url":"https:\/\/amasty.com\/magento-2-salesforce-integration-service.html","name":"Magento 2 Salesforce Integration"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Managed Services","is_category":true,"id":"category-node-115","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/managed-it-service.html","current":false,"items_count":4,"top_products":[{"url":"https:\/\/amasty.com\/managed-ecommerce-service.html","name":"E-commerce Managed Services"},{"url":"https:\/\/amasty.com\/managed-security-service.html","name":"Managed Security Services"},{"url":"https:\/\/amasty.com\/managed-magento-service.html","name":"Magento Managed Services"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shopify Services","is_category":true,"id":"category-node-90","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/shopify-website-development-service.html","current":false,"items_count":11,"top_products":[{"url":"https:\/\/amasty.com\/magento-to-shopify-migration-service.html","name":"Magento to Shopify Migration"},{"url":"https:\/\/amasty.com\/custom-shopify-theme-development-service.html","name":"Custom Shopify Theme Development"},{"url":"https:\/\/amasty.com\/shopify-app-development-service.html","name":"Shopify App Development"},{"url":"https:\/\/amasty.com\/shopify-site-speed-optimization-service.html","name":"Shopify Speed Optimization"},{"url":"https:\/\/amasty.com\/shopify-to-woocommerce-migration-service.html","name":"Shopify to WooCommerce Migration"},{"url":"https:\/\/amasty.com\/shopify-integration-service.html","name":"Shopify Integration"}],"label":{"label":"HOT","label_text_color":"#1a1a1a","label_background_color":"#ffed11"},"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","elems":[],"__disableTmpl":true,"name":"E-Commerce Services","is_category":true,"id":"category-node-92","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/magento-services.html","current":false,"items_count":5,"top_products":[{"url":"https:\/\/amasty.com\/e-commerce-site-development-service.html","name":"E-commerce Site Development"},{"url":"https:\/\/amasty.com\/hire-magento-experts-business-models.html","name":"Service Pricing Models"},{"url":"https:\/\/amasty.com\/ecommerce-website-redesign-services.html","name":"E-commerce Website Redesign"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"QA Testing Services","is_category":true,"id":"category-node-93","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/qa-testing-services.html","current":false,"items_count":2,"top_products":[{"url":"https:\/\/amasty.com\/qa-for-ecommerce-business-service.html","name":"E-commerce QA testing"}],"hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Hire Developers","is_category":true,"id":"category-node-94","status":1,"sort_order":null,"content":"","url":"https:\/\/amasty.com\/hire-developers.html","current":false,"items_count":7,"top_products":[{"url":"https:\/\/amasty.com\/hire-php-developer.html","name":"Hire PHP Developer"},{"url":"https:\/\/amasty.com\/hire-certified-magento-2-developers.html","name":"Hire Magento 2 Developer"},{"url":"https:\/\/amasty.com\/hire-shopify-developers.html","name":"Hire Shopify Developers"}],"hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":"Services","is_category":true,"id":"category-node-37","status":1,"sort_order":"3","content":"<div class=\"ammenu-dropdown-wrapper -desktop\">\r\n <div class=\"left-side\">\r\n <a href=\"https:\/\/amasty.com\/magento-2-upgrade-service.html?utm_source=menu&utm_medium=widget&utm_campaign=services_banner\"><img src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/wysiwyg\/amasty\/banner-upgrade-service_png.webp\" alt=\"banner-review\" style=\"margin-bottom: 30px;\"><\/a>\r\n <!-- <div class=\"ammenu-widget-wrapper block widget mega-menu-products-list\" data-amsite-js=\"top-product-widget\"> <div class=\"block-title\">TOP-4 Amasty services<\/div> <div class=\"block-content\"><ul class=\"widget-product-items\"> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-optimization-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Optimization Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-optimization-service_63f5d17699021_png.webp\" alt=\"Magento Optimization Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Optimization Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-support-and-maintenance-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Support and Maintenance Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-support-and-maintenance-service_64c2674727566_png.webp\" alt=\"Magento 2 Support and Maintenance Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Support and Maintenance Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-website-development-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento Website Development\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-website-development-service_64be2084385cb_png.webp\" alt=\"Magento Website Development\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento Website Development<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <li class=\"product-item\"><a href=\"https:\/\/amasty.com\/magento-2-upgrade-service.html\" class=\"item-link\" tabindex=\"0\" role=\"link\" title=\"Go to Magento 2 Upgrade Service\"> <span class=\"product-image-container\" style=\"width:160px;\"><span class=\"product-image-wrapper\" style=\"padding-bottom: 100%;\"><img class=\"product-image-photo\" src=\"https:\/\/cdn.amasty.com\/media\/amasty\/webp\/catalog\/product\/cache\/4e759f6dd520f03226056bcaf7c201bf\/m\/a\/magento-2-upgrade-service_61a5e5cfefab3_png.webp\" alt=\"Magento 2 Upgrade Service\"\/><\/span><\/span> <div class=\"product-item-name\"><span class=\"ammenu-text\">Magento 2 Upgrade Service<\/span> <span class=\"ammenu-label\">TOP<\/span><\/div><\/a><\/li> <\/ul><\/div><\/div> -->\r\n <button class=\"amform-show-popup-imitation\">Show Form<\/button>\r\n <\/div>\r\n <div class=\"right-side\">\r\n <!-- ko scope: \"index = ammenu_columns_wrapper\" --> <!-- ko template: getTemplate() --><!-- \/ko --> <!-- \/ko -->\r\n <\/div>\r\n<\/div>","url":"https:\/\/amasty.com\/magento-services.html","current":false,"items_count":75,"hide_mobile_content":false,"submenu_animation":"fade_in"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":700,"mobile_font":700,"elems":[],"__disableTmpl":true,"name":"Shopify Apps","is_category":true,"id":"category-node-107","status":1,"sort_order":"4","content":"","url":"https:\/\/amasty.com\/shopify-apps.html","current":false,"items_count":0,"hide_mobile_content":false,"submenu_animation":null},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"700","mobile_font":"700","icon":"https:\/\/cdn.amasty.com\/media\/amasty\/ammegamenu\/Heart_2x_1.jpg","icon_extension":"jpg","elems":[],"__disableTmpl":true,"name":"Special Offers","is_category":false,"id":"custom-node-1","status":1,"sort_order":"6","content":"<div class=\"ammenu-custom-container -full -loyalty\" >\r\n <ul class=\"ammenu-items\">\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Amasty Special Offers page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/amasty-promo.html\"><span class=\"ammenu-wrapper\">Special Offers<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to AmastyAll Bundles page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/all-magento-2-bundles\"><span class=\"ammenu-wrapper\">All Bundles<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Replace Third-Party Modules Offer page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/amasty-only-offer\/\"><span class=\"ammenu-wrapper\">Replace Modules Offer<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Custom Bundle page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/custom-bundle.html\"><span class=\"ammenu-wrapper\">Custom Bundle Offer<\/span> <\/a><\/li>\r\n<li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Free Resources page\" analytics-custom-menu-items=\"DropDownMenuOffers\" href=\"\/free-magento-resources\"><span class=\"ammenu-wrapper\">Free Resources<\/span> <\/a><\/li>\r\n <\/ul>\r\n<\/div>","url":"https:\/\/amasty.com\/amasty-promo.html","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"400","mobile_font":"400","elems":[],"__disableTmpl":true,"name":"Loyalty Programs","is_category":false,"id":"custom-node-11","status":1,"sort_order":"7","content":"<div class=\"ammenu-custom-container -full -loyalty\" >\r\n <ul class=\"ammenu-items\">\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Amasty Loyalty Program page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/amasty-loyalty-program.html\"><span class=\"ammenu-wrapper\">Amasty Loyalty Program<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Partner Program page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/partnership-program.html\"><span class=\"ammenu-wrapper\">Partner Program<\/span> <\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Affiliate Program page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/affiliate-program.html\"><span class=\"ammenu-wrapper\">Affiliate Program<\/span><\/a><\/li>\r\n <li class=\"ammenu-wrapper category-item\"><a class=\"ammenu-link\" title=\"go to Official Partners page\" analytics-custom-menu-items=\"DropDownMenuLoyalty\" href=\"\/partners.html\"><span class=\"ammenu-wrapper\">Official Partners<\/span><\/a><\/li>\r\n <\/ul>\r\n<\/div>","url":"https:\/\/amasty.com\/amasty-loyalty-program.html","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"400","mobile_font":"400","elems":[],"__disableTmpl":true,"name":"Blog","is_category":false,"id":"custom-node-2","status":1,"sort_order":"8","content":"","url":"https:\/\/amasty.com\/blog\/","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"},{"show_mobile_content":0,"mobile_content":null,"type":{"value":0,"label":"do not show"},"submenu_type":false,"width":0,"width_value":0,"column_count":4,"hide_content":false,"desktop_font":"400","mobile_font":"400","elems":[],"__disableTmpl":true,"name":"FAQ","is_category":false,"id":"custom-node-10","status":1,"sort_order":"9","content":"","url":"https:\/\/amasty.com\/knowledge-base\/","current":false,"items_count":"0","hide_mobile_content":false,"submenu_animation":"none"}],"__disableTmpl":true,"name":null,"is_category":null,"id":null,"status":0,"sort_order":null,"content":null,"url":null,"current":false,"items_count":null,"hide_mobile_content":false,"submenu_animation":null}, config: {"is_hamburger":false,"color_settings":{"color_template":"custom","main_menu_background":"#fff","main_menu_background_hover":"#FFFFFF","main_menu_text":"#1a1a1a","main_menu_text_hover":"#FF5B0F","submenu_background_color":"#fff","submenu_background_image":"","submenu_text":"#1a1a1a","submenu_text_hover":"#FF5B0F","current_category_color":"#ff5b0f","toggle_icon_color":"#1a1a1a","hamburger_icon_color":"#1a1a1a"},"mobile_menu_title":"","mobile_menu_width":1023,"welcome_message":{"message":"Default welcome msg!"},"invitation_url":"","hide_view_all_link":true,"mobile_class":"drill","is_sticky":1,"is_icons_available":"both","animation_time":0.2,"hamburger_animation":"none"}, children: [], settings: {"account":{"is_logged_in":false,"login":"https:\/\/amasty.com\/customer\/account\/login\/","create":"https:\/\/amasty.com\/customer\/account\/create\/","logout":"https:\/\/amasty.com\/customer\/account\/logout\/","account":"https:\/\/amasty.com\/customer\/account\/"},"switcher":{"current_code":"default","current_name":"Amasty Store","current_store_id":"1","items":[{"url":"https:\/\/amasty.com\/stores\/store\/redirect\/___store\/default\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tLz9fX19zdG9yZT1kZWZhdWx0\/___from_store\/default\/","code":"default","name":"Amasty Store"}]},"currency":[{"data-post":"{\"action\":\"https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\",\"data\":{\"currency\":\"GBP\"}}","name":"British Pound","code":"GBP","code_title":"GBP","current_currency":false},{"data-post":"{\"action\":\"https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\",\"data\":{\"currency\":\"EUR\"}}","name":"Euro","code":"EUR","code_title":"EUR","current_currency":false},{"data-post":"{\"action\":\"https:\\\/\\\/amasty.com\\\/directory\\\/currency\\\/switch\\\/\",\"data\":{\"currency\":\"USD\"}}","name":"US Dollar","code":"USD","code_title":"USD","current_currency":true}]}, links: [] } } } }"> <!-- ko if: !$data.isMobile() --><section class="ammenu-nav-sections -topmenu "><nav class="ammenu-main-container" aria-label="Main Menu" role="navigation" data-action="navigation" style=" background: #fff; color: #1a1a1a;"><ul class="ammenu-items -root" role="menubar"> <li class="ammenu-item category-item magento® 2 extensions" data-bind=" scope: 'ammenu_topmenu_item_0', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_0': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 0, id: 'category-node-25' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Magento® 2 Extensions</span> <span class="ammenu-count">261</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item suites" data-bind=" scope: 'ammenu_topmenu_item_1', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_1': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 1, id: 'category-node-71' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Suites</span> <span class="ammenu-count">43</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item support" data-bind=" scope: 'ammenu_topmenu_item_2', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_2': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 2, id: 'custom-node-4' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Support</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item services" data-bind=" scope: 'ammenu_topmenu_item_3', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_3': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 3, id: 'category-node-37' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Services</span> <span class="ammenu-count">75</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item shopify apps" data-bind=" scope: 'ammenu_topmenu_item_4', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_4': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 4, id: 'category-node-107' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Shopify Apps</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item special offers" data-bind=" scope: 'ammenu_topmenu_item_5', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_5': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 5, id: 'custom-node-1' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 700" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <figure class="ammenu-icon-block -icon" style=" -webkit-mask-image: url(https://cdn.amasty.com/media/amasty/ammegamenu/Heart_2x_1.jpg); maskImage: url(https://cdn.amasty.com/media/amasty/ammegamenu/Heart_2x_1.jpg); background-color: #1a1a1a; background-image: url(https://cdn.amasty.com/media/amasty/ammegamenu/Heart_2x_1.jpg); " data-bind=" style: { 'background-color': item.color() && item.icon ? item.color() : '' } "></figure> <p class="ammenu-text-block"><span class="ammenu-text">Special Offers</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item loyalty programs" data-bind=" scope: 'ammenu_topmenu_item_6', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_6': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 6, id: 'custom-node-11' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Loyalty Programs</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item blog" data-bind=" scope: 'ammenu_topmenu_item_7', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_7': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 7, id: 'custom-node-2' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">Blog</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> <li class="ammenu-item category-item faq" data-bind=" scope: 'ammenu_topmenu_item_8', mageInit: { 'Magento_Ui/js/core/app': { components: { 'ammenu_topmenu_item_8': { component: 'Amasty_MegaMenuLite/js/top_menu/item', elemIndex: 8, id: 'custom-node-10' } } } }"> <!-- ko if: item.isVisible --><a class="ammenu-link" data-ammenu-js="desktop-menu-main-link" style="font-weight: 400" data-bind=" event: item.isInteractive ? { mouseenter: onMouseenter, keypress: onMouseenter, mouseleave: onMouseleave, click: onClick } : false, style: { 'color': item.color() ? item.color() : '', 'background': item.backgroundColor() ? item.backgroundColor() : '' }, attr: { href: item.url ? item.url : 'javascript:void(0)', tabindex: item.isInteractive ? '0' : '-1', role: !item.isInteractive ? 'heading' : false }, css: { '-current': item.current, '-disabled': !item.isInteractive }"> <p class="ammenu-text-block"><span class="ammenu-text">FAQ</span> </p></a> <!-- /ko --> <!-- ko scope: 'index = ammenu_submenu_wrapper' --><!-- ko template: { name: getTemplate(), data: { item: $parent.item, event: { mouseleave: function () { $parent.item.isActive(false); }, mouseenter: function () { $parent.item.isActive(true); } } } }--><!-- /ko --><!-- /ko --></li> </ul></nav></section><!-- /ko --> <!-- ko if: $data.isMobile() || $data.is_hamburger --><!-- ko scope: 'index = ammenu_sidebar_menu_wrapper' --><!-- ko template: getTemplate() --><!-- /ko --><!-- /ko --><!-- /ko --></section></header> <div class="breadcrumbs"></div><main id="maincontent" class="page-main"><div class="page messages"> <div data-placeholder="messages"></div> <div data-bind="scope: 'messages'" data-amtheme-js="page-messages"><div class="amtheme-messages" data-amtheme-js="amtheme-messages" data-bind="css: { '-sticky-message': isMessageSticky(), '-visible': isVisible() }"><!-- ko if: cookieMessages && cookieMessages.length > 0 --><div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: cookieMessages, as: 'message' }"><div data-amtheme-js="message" data-bind="afterRender: $parent.autoHideMessage($element), attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"><div class="flex items-center max-w-78 mx-auto"><!-- ko if: message.type === 'success' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#064E3B" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg><!-- /ko --><!-- ko if: message.type === 'error' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#881337" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><!-- /ko --><!-- ko if: message.type === 'notice' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'info' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'warning' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#78350F" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><div data-bind="html: $parent.prepareMessageForHtml(message.text)" class="message-text"></div><button type="button" aria-label="Close Message" class="message-close hover:text-black message-svg-icon" data-amtheme-js="message-close" data-bind="click: $parent.hideMessage.bind($parent, $element), css: { 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice')}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg></button></div></div></div><!-- /ko --><!-- ko if: messages().messages && messages().messages.length > 0 --><div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: messages().messages, as: 'message' }"><div data-amtheme-js="message" data-bind="afterRender: $parent.autoHideMessage($element), attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"><div class="flex items-center max-w-78 mx-auto"><!-- ko if: message.type === 'success' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#064E3B" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" /></svg><!-- /ko --><!-- ko if: message.type === 'error' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#881337" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><!-- /ko --><!-- ko if: message.type === 'notice' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'info' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#1E3A8A" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><!-- ko if: message.type === 'warning' --><svg xmlns="http://www.w3.org/2000/svg" class="message-svg-icon" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="#78350F" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg><!-- /ko --><span data-bind="html: $parent.prepareMessageForHtml(message.text)" class="message-text"></span> <button type="button" aria-label="Close Message" class="message-close hover:text-black message-svg-icon" data-amtheme-js="message-close" data-bind="click: $parent.hideMessage.bind($parent, $element), css: { 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice')}"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" /></svg></button></div></div></div><!-- /ko --></div></div> <script data-info="not-move-to-bottom"> function initMessages() { "use strict"; return { messages: window.mageMessages || [], isEmpty() { return this.messages.reduce( function (isEmpty, message) { return isEmpty && message === undefined }, true ) }, removeMessage(messageIndex) { this.messages[messageIndex] = undefined; }, addMessages(messages, hideAfter) { messages.map((message) => { this.messages = this.messages.concat(message); if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { hideAfter = window.defaultSuccessMessageTimeout; } if (hideAfter) { this.setHideTimeOut(this.messages.length -1, hideAfter); } }); }, setHideTimeOut(messageIndex, hideAfter) { setTimeout((messageIndex) => { this.removeMessage(messageIndex); }, hideAfter, messageIndex); }, eventListeners: { ['@messages-loaded.window'](event) { this.addMessages(event.detail.messages, event.detail.hideAfter) }, ['@private-content-loaded.window'](event) { const data = event.detail.data; if ( data.messages && data.messages.messages && data.messages.messages.length ) { this.addMessages(data.messages.messages); } }, ['@clear-messages.window']() { this.messages = []; } } } }</script><section id="messages" x-data="initMessages()" x-bind="eventListeners" aria-live="assertive" role="alert" ><template x-if="!isEmpty()"><div class="w-full"><div class="messages mx-auto"><template x-for="(message, index) in messages" :key="index"><div><template x-if="message"><div class="message" :class="message.type" :ui-id="'message-' + message.type" ><div class="flex items-center max-w-78 mx-auto"><template x-if="message.type === 'success'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-emerald-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 12 2 2 4-4m6 2a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>check-circle</title></svg> </template><template x-if="message.type === 'error'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-rose-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3Z"/><title>exclamation</title></svg> </template><template x-if="message.type === 'warning'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-amber-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>exclamation-circle</title></svg> </template><template x-if="message.type === 'info' || message.type === 'notice'"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-blue-900" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>information-circle</title></svg> </template><span class="ml-2" x-html="message.text"></span> <button type="button" class="ml-auto p-0" :class="{ 'text-red-900': message.type === 'error', 'text-emerald-900': message.type === 'success', 'text-amber-900': message.type === 'warning', 'text-blue-900': (message.type === 'info' || message.type === 'notice') }" aria-label="Close message" @click.prevent="removeMessage(index)" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-current" width="20" height="20" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/></svg> </button></div></div></template></div></template></div></div></template></section></div> <a id="contentarea" tabindex="-1"></a><div class="columns"><div class="column main"><div class="amtheme-product-wrap"><div class="product media"> <a id="gallery-prev-area" tabindex="-1"></a><div class="action-skip-wrapper"> <a class="action skip gallery-next-area" href="#gallery-next-area"><span> Skip to the end of the images gallery</span></a></div> <div class="gallery-placeholder _block-content-loading -improve-desktop-view" data-gallery-role="gallery-placeholder"><img alt="main product photo" title="b2b-ecommerce-suite-for-magento-2_66d6f79cc4c5b" class="lazy gallery-placeholder__image amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/442addc013119a99308eafd27d784beb/b/2/b2b-ecommerce-suite-for-magento-2_66d6f79cc4c5b.png" /> <div class="amsite-placeholder-items"> <img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/d492300003ec9ae05261558b2c675287/b/2/b2b-ecommerce-suite-for-magento-2_66d6f79cc4c5b.png" alt=""> <img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/d492300003ec9ae05261558b2c675287/b/2/b2b-ecommerce-suite-for-magento-2_66d6f79cc51f5.png" alt=""> <img class="lazy amsite-ignore-lazy-load" src="https://cdn.amasty.com/media/catalog/product/cache/d492300003ec9ae05261558b2c675287/b/2/b2b-ecommerce-suite-for-magento-2_66d6f79cc5230.png" alt=""></div></div> <div class="action-skip-wrapper"> <a class="action skip gallery-prev-area" href="#gallery-prev-area"><span> Skip to the beginning of the images gallery</span></a></div> <a id="gallery-next-area" tabindex="-1"></a> <div class="amsite-after-gallery"><div class="links-wrapper -with-book-demo"> <div class="amsite-product-link amsite-explore-demo"><button type="button" title="Explore Demo" aria-label="Explore Demo" class="action outline -with-icon -icon-left" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2" data-amsite-js="explore-demo"><svg class="amtheme-icon -monitor" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2" focusable="false"><use xlink:href="#icon-monitor"/></svg>Explore Demo</button> <div class="amsite-demo-links dropdown dropdown-switcher" data-role="dropdownDialog" data-mage-init='{"amsiteExploreDemoDropdown":{}}'><svg class="amsite-close amtheme-icon" data-amtheme-js="svg" data-amsite-js="close-dropdown"><use xlink:href="#icon-close" data-amtheme-js="id"></use></svg><ul class="items"> <li class="item"><a href="https://b2b-ecommerce-suite-m2.magento-demo.amasty.com/admin/admin/system_config/edit/section/amasty_companyaccount/" class="amsite-link" title="B2B Suite Essentials" aria-label="B2B Suite Essentials" target="_blank">B2B Suite Essentials</a> <span class="amsite-label">For business start</span></li> <li class="item"><a href="https://b2b-suite-pro-m2.magento-demo.amasty.com/admin/admin/system_config/edit/section/amasty_perm/" class="amsite-link" title="B2B Suite Pro" aria-label="B2B Suite Pro" target="_blank">B2B Suite Pro</a> <span class="amsite-label">Grow sales like a pro</span></li> <li class="item"><a href="https://b2b-suite-premium-m2.magento-demo.amasty.com/admin/admin/system_config/edit/section/amasty_groupcat/" class="amsite-link" title="B2B Suite Premium" aria-label="B2B Suite Premium" target="_blank">B2B Suite Premium</a> <span class="amsite-label">Adjust for max profits</span></li> </ul></div></div><!-- For case add demo links to sticky add to cart --><div class="amsite-product-link amsite-explore-demo -for-sticky" data-amsite-js="explore-demo-sticky-wrapper"><button type="button" title="Explore Demo" aria-label="Explore Demo" class="action outline -with-icon -icon-left" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2" data-amsite-js="explore-demo-sticky"><svg class="amtheme-icon -monitor" data-amsite-analytics-js="explore-demo-product-page" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2" focusable="false"><use xlink:href="#icon-monitor"/></svg>Explore Demo</button> <div class="amsite-demo-links dropdown dropdown-switcher" data-role="dropdownDialog" data-mage-init='{"amsiteExploreDemoDropdown":{"dropdownConfig":{"appendTo": "[data-amsite-js=explore-demo-sticky-wrapper]", "triggerTarget": "[data-amsite-js=explore-demo-sticky]"}}}'><svg class="amsite-close amtheme-icon" data-amtheme-js="svg" data-amsite-js="close-dropdown"><use xlink:href="#icon-close" data-amtheme-js="id"></use></svg><ul class="items"> <li class="item"><a href="https://b2b-ecommerce-suite-m2.magento-demo.amasty.com/admin/admin/system_config/edit/section/amasty_companyaccount/" class="amsite-link" title="B2B Suite Essentials" aria-label="B2B Suite Essentials" target="_blank">B2B Suite Essentials</a> <span class="amsite-label">For business start</span></li> <li class="item"><a href="https://b2b-suite-pro-m2.magento-demo.amasty.com/admin/admin/system_config/edit/section/amasty_perm/" class="amsite-link" title="B2B Suite Pro" aria-label="B2B Suite Pro" target="_blank">B2B Suite Pro</a> <span class="amsite-label">Grow sales like a pro</span></li> <li class="item"><a href="https://b2b-suite-premium-m2.magento-demo.amasty.com/admin/admin/system_config/edit/section/amasty_groupcat/" class="amsite-link" title="B2B Suite Premium" aria-label="B2B Suite Premium" target="_blank">B2B Suite Premium</a> <span class="amsite-label">Adjust for max profits</span></li> </ul></div></div> <div class="amsite-product-link -user-guide"><a href="https://amasty.com/docs/doku.php?id=magento_2:b2b_ecommerce_suite" title="User Guide" aria-label="User Guide" class="action outline -with-icon" target="_blank">User Guide <svg class="amtheme-icon -external" focusable="false"><use xlink:href="#icon-external-link"/></svg></a></div> <div class="amsite-product-link -book-demo"><a class="action outline" href="https://calendly.com/yuliya-simakovich/book-a-demo" title="Book a Live Demo" aria-label="Book a Live Demo" rel="nofollow" target="_blank">Book a Live Demo</a></div> <div class="amsite-product-link -youtube"><button type="button" title="Explore Video" aria-label="Explore Video" class="action outline" data-amsite-analytics-js="open-popup-youtube-video" btn-fancybox-popup="fancybox-youtube-container" >Explore Video</button></div></div> <div class="amsite-compatibility"><svg class="amtheme-icon -magento-icon" focusable="false"><use xlink:href="#icon-magento-logo"/></svg>2.4.7-p4; 2.4.6-p9; 2.4.5-p11</div> <div class="amsite-trust-budgets"> <div class="magezon-builder magezon-builder-preload"><div class="msyx8bf mgz-element mgz-element-row mgz-hidden-md mgz-hidden-sm mgz-hidden-xs full_width_row"><div class="mgz-element-inner msyx8bf-s"><div class="inner-content mgz-container"><div class="kstyw83 mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner kstyw83-s"><div class="jf5qs9v mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner jf5qs9v-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/20_off_on_custom_development.png" alt="20_off_on_custom_development" title="" /></div></div></div></div></div></div><div class="du9d29v mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner du9d29v-s"><div class="amyhesu mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner amyhesu-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/Free_installation_service.png" alt="Free_installation_service" title="" /></div></div></div></div></div></div><div class="wtoxf4d mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner wtoxf4d-s"><div class="c7ojcc6 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner c7ojcc6-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/Free_performance_audit-1.png" alt="Free_performance_audit-1" title="" /></div></div></div></div></div></div><div class="jffo13v mgz-element mgz-element-column mgz-col-md-3"><div class="mgz-element-inner jffo13v-s"><div class="plrbvbi mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner plrbvbi-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/marketing/trust-badges/api-support-1.png" alt="api-support-1" title="" /></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="amtheme-product-info"><div class="amsite-product-title"> <div class="page-title-wrapper product"><h1 class="page-title" data-ui-id="page-title-wrapper" >B2B E-commerce Premium Solution <span class="page-title-label">for Magento 2</span> </h1> </div> </div><div class="amtheme-short-info"> </div><div class="product-info-main"> <div class="product attribute overview"> <div class="value" ><p><a href="#choose_option" data-promo-id="banners-b2b-ecommerce-premium-suite-m2" data-promo-name="Banner Subscription Options at B2B E-commerce Premium Suite M2" data-promo-creative="banner_see_subscription_options" data-promo-position="banner_short_description"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_pro.png" data-srcset="https://cdn.amasty.com/media/marketing/m2/banners-for-compatibilities/pricing_pro_2x.png 2x" alt="See available pricing options!" style="margin-bottom: 20px;" /> </a></p> <p>Transform your e-commerce business with the powerful all-in-one B2B solution, crafted for the unique requirements of today's B2B markets. Fully aligned with Adobe Commerce B2B, this solution includes a broad array of additional features, helping your business quickly adapt to changing e-commerce trends and efficiently manage both B2B and B2C operations. </p></div></div> <div class="amsite-features-block"><ul class="amsite-list"> <li class="item">Let companies create multiple accounts</li> <li class="item">Create a structured dealers base</li> <li class="item">Customize pricing policy per customer group</li> <li class="item">Set precise access limitations</li> <li class="item">Let buyers negotiate prices using quotes</li> <li class="item">Streamline bulk ordering</li> <li class="item">Grant store credits as incentives</li> <li class="item">Build an automatic discount system </li> <li class="item">Enable smart product recommendations</li> <li class="item">Hyva-ready storefront</li> <li class="item">Mage-OS compatible</li> <li class="item"><strong>NEW:</strong> Build your own <a href="https://amasty.com/amasty-promo.html?utm_source=pdp&utm_medium=b2b_suite&utm_campaign=customplan#b2b_suite"><strong>B2B Custom Solution</strong></a></li> </ul></div> <div class="product-add-form -subscription-product"> <div class="product-sticky-add-form" data-mage-init='{"amStickyAddToCart":{ "selectors": { "productNameSource": "[data-ui-id=page-title-wrapper]" }, "isAjaxEnabled": "1", "ajaxAddToCartUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "prices": { "dataProductId": "1634", "priceConfig": {"productId":1634,"priceFormat":{"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":2529,"adjustments":[]},"oldPrice":{"amount":2529,"adjustments":[]},"basePrice":{"amount":2529,"adjustments":[]},"finalPrice":{"amount":2529,"adjustments":[]}},"idSuffix":"_clone","tierPrices":[],"calculationAlgorithm":"TOTAL_BASE_CALCULATION","baseOldPrice":{"amount":2529,"adjustments":[]}} } }}' ></div> <form data-product-sku="b2b-ecommerce-premium-suite-for-magento-2" data-amtheme-js="form" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s/product/1634/" method="post" id="product_addtocart_form" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2" ><input type="hidden" name="product" value="1634" /><input type="hidden" name="selected_configurable_option" value="" /><input type="hidden" name="related_product" id="related-products-field" value="" /><input type="hidden" name="item" value="1634" /><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /> <div class="product-options-wrapper qty-round" id="product-options-wrapper" data-hasrequired="* Required Fields"><div class="fieldset" tabindex="0"> <div class="swatch-opt -round" data-role="swatch-options"></div> <div class="amrec-product-view hidden "><div class="amrec-purchase-option"><div class="amrec-purchase-radio"><input type="radio" class="amrec-input -radio" name="subscribe" id="radio_subscribe_product" value="subscribe" data-amrec-js="purchase-type" data-validate="{'validate-one-required-by-name':true}" data-errors-message-box="[data-amrec-js='validation-error']" checked><label for="radio_subscribe_product" class="amrec-label"></label></div></div><div data-amrec-js="validation-error"></div></div></div></div> <div class="amtheme-add-form-bottom"> <div class="amsite-subscribe-product-info"><div class="amsite-price-license-info-wrapper"><!--start tmp block--> <div class="product-info-price"><div class="price-box price-final_price" data-role="priceBox" data-product-id="1634" data-price-box="product-id-1634"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1634" data-price-amount="2529" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$2,529</span></span> </span></span> </div></div> <!--end tmp block--> <div class="amsite-product-license-block ml-3 -mt-1"><span>Transparent pricing </span> <span class="amsite-tooltip-container -mobile-bottom -desktop-right"><span class="tooltip-toggle"></span> <span class="tooltip-content -license-info">We believe in being open and honest with our customers. When you buy our module, you get one <span data-amsite-js="transparent-pricing-period"></span> of free support and updates. <br><br> <span class="block mb-1 font-bold">Here's what you get:</span> <span class="font-bold">Free updates for 1 <span data-amsite-js="transparent-pricing-period"></span>:</span> You'll receive the latest versions of the module at no extra cost. <br> <span class="font-bold">Free support: </span> Our team will help you with any questions or issues after your purchase. <br> <span class="font-bold">Cancel & renew options: </span> You can cancel your subscription at any time and renew it later, but keep in mind that an additional fee will apply if you choose to renew.</span></span></div> </div> <div class="product-options-bottom"> <!--start tmp block--> <div class="box-tocart"><div class="fieldset"><div class="actions"><button type="submit" title="Add to Cart" class="action primary tocart" data-amtheme-js="addtocart-button" id="product-addtocart-button"><span class="amtheme-title">Add to Cart</span></button> <div id="instant-purchase" data-bind="scope:'instant-purchase'"><!-- ko template: getTemplate() --><!-- /ko --></div></div></div></div> <!--end tmp block--> <a href="#" class="action towishlist" data-post='{"action":"https:\/\/amasty.com\/wishlist\/index\/add\/","data":{"product":1634,"uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' data-action="add-to-wishlist" title="Add to Wish List" aria-label="Add to Wish List"><svg class="amtheme-icon -hover-bg"><use xlink:href="#icon-wishlist"/></svg><span class="amtheme-title">Add to Wish List</span></a> </div> <div class="edition-type-wrapper" data-amsite-js="edition-type-wrapper"><div class="updates-info"><span data-amsite-js="period-support-and-updates">Product updates and support for 12 months</span></div><div class="after-info"><p class="after-price">Updates and support prolongation - <span class="old-price" data-amsite-js="recurring-old-price"></span> <span data-amsite-js="product-recurring-price">$1,519</span></p><span class="more-info" data-amtheme-js="subscription-more-info-open-"> more info </span></div><div class="amtheme-popup-block" tabindex="0" data-mage-init='{"amPopup":{"trigger": "subscription-more-info-open-"}}'><div class="popup-inner"><div class="amtheme-button-close" tabindex="0" title="Close" aria-label="Close" data-amtheme-js="popup-close"><svg class="amtheme-icon -icon-close"><use xlink:href="#icon-close" /></svg></div><div class="subscriptions-popup-details"><h2 class="title">Price details</h2><div class="product-info -first"><div class="row"><div class="name">B2B E-commerce Premium Solution for Magento 2</div></div><div class="row"><div class="info" data-amsite-js="support-and-updates-popup-text">Product updates and support service subscription included</div></div></div><div class="product-info"><div class="row"><div class="name" data-amsite-js="price-paid-day">Price to be paid today</div><div class="price"><span class="old-price" data-amsite-js="full-old-final-price"></span> <b> <span data-amsite-js="product-final-price">$2,529</span></b></div></div><div class="row"><div class="info">Subscription for the following <span data-amsite-js="popup-periods-support">years</span></div><div class="period -time"><span class="summ"><span class="old-price" data-amsite-js="recurring-old-price"></span> <b> <span data-amsite-js="product-recurring-price-in-popup">$1,519</span></b></span> / <span class="year" data-amsite-js="popup-period-support">Year</span></div></div><div class="hidden text-right am-text-small text-secondary" data-amsite-js="start-subscription-period">starting Feb 25, 2025</div></div></div></div></div></div> </div> <div class="amtheme-actions-wrap"><div class="product-social-links"> <div class="product-addto-links" data-role="add-to-links"> </div></div></div> </div></form></div> </div></div></div> <input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /> <div id="authenticationPopup" data-bind="scope:'authenticationPopup', style: {display: 'none'}"> <!-- ko template: getTemplate() --><!-- /ko --> </div> <div class="amform-parent" x-data="{...hyva.modal()}" @amcform-hide-modal-188.window="hide"><button type="button" @click="show" data-amform-show="188" aria-label="Show form" class="btn btn-primary inline-flex">Free Consultation</button> <div x-cloak x-spread="overlay()" x-bind="overlay()" class="am-overlay-popup"><div class="am-container-popup inset-0 max-md:!top-10"><div x-ref="dialog" role="dialog" class="am-dialog-popup rounded-lg w-full md:w-1/2 xl:w-5/12 max-h-[80vh] max-w-[80vw] group"><button @click="hide" aria-label="Close form" class="am-close-popup"><svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></button> <form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-188" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /><input name="form_id" type="hidden" value="188" /><input name="is_survey" type="hidden" value="0" /><div class="flex flex-col max-w-md group-[.am-dialog-popup]:max-w-3xl m-auto amform-wrapper" data-element="form-content"> <div class="grid grid-cols-6 gap-x-2 gap-y-6 items-start" id="page-1" x-ref="page1188"> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="first-name-form-188" name="first-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" data-errormsg="Please use only letters (a-z or A-Z) or numbers (0-9) in this field.No spaces or other characters are allowed." maxlength="40" pattern="^[a-zA-Z0-9 ]+$" required placeholder="Type here..." ><label class=" label " for="first-name-form-188">First Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="text" id="last-name-form-188" name="last-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" data-errormsg="Please use only letters (a-z or A-Z) or numbers (0-9) in this field.No spaces or other characters are allowed." maxlength="255" pattern="^[a-zA-Z0-9 ]+$" required placeholder="Type here..." ><label class=" label " for="last-name-form-188">Last Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="email" id="email-form-188" name="email" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type here..." ><label class=" label " for="email-form-188">Email</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="company-form-188" name="company" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" placeholder="Type here..." ><label class="field-optional after:text-secondary-lighter label " for="company-form-188">Company</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <textarea id="description-form-188" name="description" class="focus:border-gray-500 border-gray-300 w-full border-gray-300 w-full py-1 " maxlength="255" required x-model="value" @focus="focused = true" @blur="focused = value" rows="5" placeholder="Type here..." ></textarea> <label class=" label " for="description-form-188">Your Message</label></div><!-- Checkboxes --> <div class="col-span-6 amcform-toolbar flex align-center items-center gap-x-2 justify-center mt-4"> <button type="submit" x-data class="btn btn-primary justify-center w-64" @click.prevent="initFormEvents188().processSubmit( $refs.page1188, $refs.tab1188, $event)">CONTACT US</button> </div></div> </div> <!--Validations--><!--Dependencies--><!--Survey--> <!--Default values--><!--Init google map--></form> </div></div></div></div> <div class="amsite-m2-product-promotion -picture"> <a class="amsite-link" href="https://amasty.com/partnership-program.html" title="Partner With Us" data-promo-id="banner-pdp-partnership" data-promo-name="SO Partnership" data-promo-creative="pdp-so-feb25" > <picture class="amsite-picture"> <source media="(min-width: 1024px)" srcset="https://cdn.amasty.com/media/wysiwyg/amasty/product_page/product_page_feb25.png 1x, https://cdn.amasty.com/media/wysiwyg/amasty/product_page/product_page_feb25_2x.png 2x"> <source media="(max-width: 1024px)" sizes="1px" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGP6DwABBQECz6AuzQAAAABJRU5ErkJggg=="> <img class="lazy amsite-img lazy" height="80" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/wysiwyg/amasty/product_page/product_page_feb25.png" alt="" > </picture> </a> </div> </div></div></main><div class="amtheme-productinfo-wrap"><div class="amtheme-productaside-wrap"> <div class="am-custom-tabs-wrapper mx-auto" x-data="amCustomTabs" x-init="initAmCustomTabs()" @resize.window.debounce="checkIsMobileResolution()" @visibilitychange.window.debounce="checkIsMobileResolution()" x-bind="eventListeners" x-spread="eventListeners"><template x-if="tabs.length && !isAccordion && !isMobile"><div class="am-tabs-nav"><nav class="mx-auto flex justify-between border-b-1"><template x-for="tab in tabs" :key="tab.alias"><a :href="'#' + tab.alias" :data-tab="tab.alias" role="tab" :aria-label="tab.alias" class="relative top-[1px] flex pt-1 pb-2 font-bold text-secondary focus:rounded-none hover:text-primary transition-colors text-lg analytics-product-tab-title" @click.prevent.stop="setActiveTabs(tab.name)" :class="{ 'amtab-active !text-black': tab.isActive, 'border-b-1 border-black': tab.isActive }" ><span class="analytics-product-tab-title" x-html="tab.title" :aria-label="tab.alias"></span> <template x-if="tab.alias === 'changelog' && isChangelogVersion"><span x-html="'v ' + isChangelogVersion" class="relative -top-2 text-primary ml-1 px-2 py-1 h-max am-text-extrasmall bg-gray-200 uppercase inline-block rounded-lg"></span></template></a></template></nav></div></template><div class="am-tabs w-full" role="tablist"> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#description" data-tab="description" aria-label="description" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_1')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_1')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="description">Description</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_1')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 description" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_1') }" id="amcustomtabs_tabs_1" x-cloak x-show="isActiveTab('amcustomtabs_tabs_1')" ><div class="am-custom-tab am-custom-tab-1"><div class="amsite-description-tab"> <div class="magezon-builder magezon-builder-preload"><div class="gq2lolx mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner gq2lolx-s"><div class="inner-content mgz-container"><div class="vct173w mgz-element mgz-element-column mgz-col-md-12 mgz-col-xs-12"><div class="mgz-element-inner vct173w-s"><div class="uyojp91 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner uyojp91-s"><h2 style="text-align: center;">Get every vital feature for your B2B Store in one powerful solution</h2></div></div><div class="v35wkiu mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner v35wkiu-s"><div class="inner-content mgz-container"><div class="ykrxhw7 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner ykrxhw7-s"><div class="cbgdljx mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner cbgdljx-s"><p> <strong>🚩 Challenge</strong></p></div></div><div class="ss5qlh0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ss5qlh0-s"><p>Adobe Commerce offers a robust set of B2B features, but the diverse and dynamic B2B sector often requires more flexibility and enhanced functionality to meet specific enterprise needs. To quickly adapt to market demands, many businesses turn to multiple extensions that may not fully integrate or may have compatibility issues, potentially hampering growth and competitiveness.</p></div></div></div></div><div class="k3wsu91 mgz-element mgz-element-column mgz-col-md-6"><div class="mgz-element-inner k3wsu91-s"><div class="ywboo17 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ywboo17-s"><p><strong>💫 Solution</strong></p></div></div><div class="j5h4cxr mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner j5h4cxr-s"><p>We've crafted three tailored solutions to advance your B2B business. Each feature is designed for seamless integration with each other and native Magento 2. Select the option that aligns with your business objectives, whether you're starting from scratch, enhancing your existing website with extra features, or transforming your B2C site into a fully functioning B2B or B2B2C platform.</p></div></div></div></div></div></div></div></div></div></div></div></div><div id="go-migrate-block" class="tpsv5il mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner tpsv5il-s"><div class="inner-content mgz-container"><div class="nufc91h mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner nufc91h-s"><div class="oo4uip3 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner oo4uip3-s"><h2 style="text-align: center;">Grow business and outpace competitors with all-in-one B2B solution</h2></div></div><div class="t0o3lx2 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner t0o3lx2-s"><p style="text-align: left;"><span style="font-size: 14px;">Explore how our Magento 2 B2B extension enhances your business strategy through personalization and streamlined management. Fully aligned with <a href="#comparison_adobe"><strong>Adobe Commerce B2B</strong></a>, our solution delivers additional features to fuel your business's rapid growth. Each component is crafted to improve your operations, from delivering a rich personalized experience and simplifying account management, to enabling efficient bulk ordering, increasing customer loyalty, and adapting swiftly to market demands.</span></p></div></div><div class="h4avuxk mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner h4avuxk-s"><div class="inner-content mgz-container"><div class="ff90wbp mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner ff90wbp-s"><div class="xae0qcy mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner xae0qcy-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-new-icon1.png" alt="b2b-new-icon1" width="70" height="70" title="" /></div></div></div></div><div class="hyi6nhs mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hyi6nhs-s"><h3 style="font-family: Gilroy;">Personalized sales strategies</h3></div></div><div class="mr6vuk0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mr6vuk0-s"><p style="margin-top: 0px;">Enhance your B2B strategy with a suite of features designed for highly personalized experiences. Leverage advanced segmentation, customer group-specific catalogs and pricing, targeted promotional campaigns, and customized product recommendations to effortlessly create tailored experiences for every customer segment.</p></div></div></div></div><div class="eudpwue mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner eudpwue-s"><div class="hjavbwo mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner hjavbwo-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-new-icon2.png" alt="b2b-new-icon2" width="70" height="70" title="" /></div></div></div></div><div class="x0rq05u mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner x0rq05u-s"><h3 style="font-family: Gilroy;">Easy account management</h3></div></div><div class="mw60jjo mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner mw60jjo-s"><p style="margin-top: 0px;">Optimize account management for your customers by providing easy access to invoices, order histories, company credits, and requisition lists. Allow clients to effortlessly create and manage multiple sub-accounts and enhance oversight with flexible management of buyers and permissions, boosting efficiency and satisfaction.</p></div></div></div></div><div class="egml30n mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner egml30n-s"><div class="q37sxvl mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner q37sxvl-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-new-icon3.png" alt="b2b-new-icon3" width="70" height="70" title="" /></div></div></div></div><div class="v452w8f mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner v452w8f-s"><h3 style="font-family: Gilroy;">Efficient quote management</h3></div></div><div class="ycc3lle mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ycc3lle-s"><p style="margin-top: 0px;">Create optimal conditions for flexible price negotiations by allowing clients to easily request quotes from any web store page. Hide prices for particular products and customer groups or auto approve quotes with the specified discount amount. Gain insights into market trends and customer preferences to craft irresistible, personalized offers.</p></div></div></div></div></div></div></div><div class="miwuarc mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner miwuarc-s"><div class="inner-content mgz-container"><div class="wh3nidr mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner wh3nidr-s"><div class="k2b75y1 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner k2b75y1-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-new-icon4.png" alt="b2b-new-icon4" width="70" height="70" title="" /></div></div></div></div><div class="pmiiygf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner pmiiygf-s"><h3 style="font-family: Gilroy;">Convenient bulk ordering</h3></div></div><div class="kkimce0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kkimce0-s"><p style="margin-top: 0px;">Streamline bulk purchasing with our quick ordering feature. Simplify the entire process to a few easy clicks, allowing buyers to rapidly add multiple products without the need to navigate through various web store pages. Facilitate large-scale ordering by enabling the addition of items through SKUs, CSV file uploads, or directly from preset requisition lists or wishlists.</p></div></div></div></div><div class="au0f7ca mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner au0f7ca-s"><div class="rjn99jp mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner rjn99jp-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-new-icon5.png" alt="b2b-new-icon5" width="70" height="70" title="" /></div></div></div></div><div class="ns2q8w8 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ns2q8w8-s"><h3 style="font-family: Gilroy;">Refined shipping & payments</h3></div></div><div class="nex1qfb mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nex1qfb-s"><p style="margin-top: 0px;">Enhance your shipping and payment operations to ensure legality, efficiency, and customer satisfaction. Tailor shipping methods to specific product, cart, and customer parameters for legal compliance and cost-effectiveness. Improve payment management by implementing flexible rules based on various customer data, facilitating more targeted and secure transactions.</p></div></div></div></div><div class="vmet1ga mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner vmet1ga-s"><div class="iyhakd3 mgz-element mgz-child mgz-element-single_image mgz-image-hovers"><div class="mgz-element-inner iyhakd3-s"><div class="mgz-single-image-wrapper"><div class="mgz-single-image-inner "><img class="lazy mgz-hover-main" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-new-icon6.png" alt="b2b-new-icon6" width="70" height="70" title="" /></div></div></div></div><div class="sg5049k mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sg5049k-s"><h3 style="font-family: Gilroy;">Strengthened client loyalty</h3></div></div><div class="sfw4d7o mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner sfw4d7o-s"><p style="margin-top: 0px;">Elevate customer loyalty and convert refunds into opportunities for future sales. Foster continued engagement by rewarding clients with store credits that can be used as discounts on subsequent purchases, encouraging customers to return to your store. Opt for issuing store credits over cash refunds to transform product returns into loyal, repeat business.</p></div></div></div></div></div></div></div></div></div></div></div></div><div id="go-migrate-block" class="sp568ab mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner sp568ab-s"><div class="inner-content mgz-container"><div class="qjnbw94 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner qjnbw94-s"><div class="i6pftsu mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner i6pftsu-s"><h2 style="text-align: center;">See which B2B solution suits you the most</h2></div></div><div class="f9ovjh7 mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner f9ovjh7-s"><div class="inner-content mgz-container"><div class="cl3kbv6 mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner cl3kbv6-s"><div class="xrgxxce mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xrgxxce-s"><h3 style="font-family: Gilroy;"><a href="#essentials_options"><span style="color: #3c3c97;">B2B Essentials →</span></a></h3><p style="margin-top: 0px;">Empower your store with the most essential features to upgrade your B2C Magento store and make it ready for working in the B2B segment.</p></div></div></div></div><div class="dreid9k mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner dreid9k-s"><div class="e96eb9b mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner e96eb9b-s"><h3 style="font-family: Gilroy;"><a href="#pro_options"><span style="color: #3c3c97;">B2B Pro →</span></a></h3><p style="margin-top: 0px;">Personalize sales approach for your B2B clients. Scale up your business by converting B2B buyers into long-term business partners.</p></div></div></div></div><div class="qka1g9q mgz-element mgz-element-column mgz-col-md-4 mgz-col-sm-4 mgz-col-xs-12"><div class="mgz-element-inner qka1g9q-s"><div class="hwkuf13 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hwkuf13-s"><h3 style="font-family: Gilroy;"><a href="#premium_options"><span style="color: #3c3c97;">B2B Premium →</span></a></h3><p style="margin-top: 0px;">Maximize your sales revenue with targeted promotions and smart recommendations. Enhance shipping & payment management.</p></div></div></div></div></div></div></div></div></div></div></div></div><div class="fhkfhtw mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner fhkfhtw-s"><div class="inner-content mgz-container"><div class="k0dgjbh mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner k0dgjbh-s"><div class="wt3c2ug mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wt3c2ug-s"><p><a href="#choose_option"><button class="action secondary button-full">COMPARE PRICING OPTIONS</button></a></p></div></div></div></div></div></div></div><div id="essentials_options" class="uivbe9p mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner uivbe9p-s"><div class="inner-content mgz-container"><div class="eo5o8fu mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner eo5o8fu-s"><div class="v5bhr56 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner v5bhr56-s"><div class="inner-content mgz-container"><div class="e2upnmi mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner e2upnmi-s"><div class="tdrck44 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tdrck44-s"><h2 id="essentials-block" class="section-heading"><span style="color: black;">B2B E-commerce Solution: <strong>Essentials</strong></span></h2></div></div><div class="vke0jau mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner vke0jau-s"><div class="inner-content mgz-container"><div class="xjdo029 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner xjdo029-s"><div class="q4i68nq mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner q4i68nq-s"><p><span>Community-approved choice for a business start: our clients consider the combination of these Magento 2 B2B commerce features the most crucial to build a base for a B2B store.</span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div id="essentials_options" class="iqnjvds mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner iqnjvds-s"><div class="inner-content mgz-container"><div class="o5376x6 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner o5376x6-s"><div class="m7f73f0 mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner m7f73f0-s"><div class="description-section" ><div class="section-content"><div class="gallery"><div class="gallery-items"><div class="gallery-item">About the Essentials Suite</div><div class="gallery-item">Company Accounts</div><div class="gallery-item">Quick Ordering</div><div class="gallery-item">Сustomer Group Auto Assign</div><div class="gallery-item">Extended Product Grid</div><div class="gallery-item">Product Attachments</div><div class="gallery-item">Color swatches Pro</div><div class="gallery-item">Google Account Login</div></div><div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide"><div class="slide-text"><div class="slide-title">About the Suite</div> Enable companies to create multiple user accounts with adjustable permissions. Streamline sales with one-click bulk ordering. Automatically segment customers for targeted engagement. Streamline your catalog management, and optimize product presentation for a seamless and efficient B2B experience.</div><img alt="ins-3-4" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent1-1.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Simplify the corporate shopping by introducing B2B company accounts</div> Enable companies to create and manage multiple sub-accounts with adjustable permissions tailored to user roles within the organization. Provide a structured B2B company account hierarchy that simplifies the purchasing process through defined roles and permissions for company users. Additionally, facilitate store credits as an offline payment option for select companies, and implement personalized marketing and pricing strategies based on company membership, among other features.</div><img alt="ds-1-2" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-2.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Provide customers with simplified bulk ordering</div> Enable buyers to order multiple products swiftly without navigating through numerous web pages. Simplify the ordering process to just a few clicks for logged-in customers familiar with the product names or SKUs they wish to purchase. Offer B2B customers rapid AJAX product search and the option to upload a CSV or XML file containing SKUs and quantities, facilitating quick preparation of bulk orders. Offer clients with large orders to request a quote for special conditions right from the quick-order page.</div><img alt="bulk ordering" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-3.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Automate customer group management</div> This Magento B2B module allows you to utilize a smart algorithm to automatically categorize customers into groups applying different pricing levels for different customer groups. Configure custom rules to assign users to appropriate customer groups based on attributes of the customer or their orders. Refine these group-switching rules with specific conditions to seamlessly transition customers to the desired groups without manual intervention.</div><img alt="customer group auto assign" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-4.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Bring your product management to a new level</div> Streamline your catalog management by monitoring, filtering, and modifying catalog information directly from the grid. Utilize the AJAX multi-cell editing feature to update multiple items simultaneously and save time. Enhance functionality by adding extra columns based on product attributes, quickly assigning categories, and filtering items by custom parameters. Create multiple grid templates, update prices directly from the grid, and manage inventory across multiple sources. </div><img alt="extended product grid for magento 2" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-5.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Equip your store with all types of attachments</div> Provide accurate manuals, licenses, warranties and other info on webstore pages. Upload files of any format (pdf, txt, docs, ppt, xls, zip, rar, mp3, mp4, jpg, jpeg, png, gif, etc.) and use catchy icons to capture customers' attention. Show specific documents to particular customer groups to make your selling strategy more individual. This feature is also compatible with the Magento Enterprise Remote Storage functionality.</div><img alt="product attachments" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-6.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Stand out from competitors with advanced options for product presentation</div> Enable Product Matrix to show convenient pricing offers based on item quantity and swatch images to enhance shopping experience for wholesalers. Engage buyers by animating product color options, configuring on-hover image effects and zooming in/out photos to show products from different angles.</div><img alt="product attachments" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-8.png" /></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Reduce manual efforts onboarding new employees automatically and securely</div> Nurture new team members without extra efforts from your technical specialists. Let new employees easily sign in to the store admin panel via their Google accounts. With our Magento B2B Commerce extension you can timely detect and prevent all suspicious events with Google built-in security check. </div><img alt="magento google login" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-essent-7.png" /></div></div><div class="swiper-pagination"></div><div class="swiper-button-next"></div><div class="swiper-button-prev"></div></div></div></div></div></div></div></div></div></div></div></div><div class="j6xwmxh mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner j6xwmxh-s"><div class="inner-content mgz-container"><div class="hwjsy1k mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner hwjsy1k-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax hwjsy1k-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="xeh8c7d mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner xeh8c7d-s"><h3>🔗 Integration with other systems</h3></div></div><div class="y2tb630 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y2tb630-s"><p style="text-align: left;">Our B2B extension includes a <strong>robust library of APIs</strong> that facilitate integration with <strong>various ERP and CRM systems</strong>. This connectivity optimizes data synchronization across platforms thus streamlining your operations and expanding your business opportunities.</p></div></div></div></div></div></div></div><div id="pro_options" class="ed429tb mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ed429tb-s"><div class="inner-content mgz-container"><div class="bg4nebm mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner bg4nebm-s"><div class="upqjgij mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner upqjgij-s"><div class="inner-content mgz-container"><div class="eymu9v8 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner eymu9v8-s"><div class="y9hv6i5 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner y9hv6i5-s"><h2 id="pro-block" class="section-heading" style="text-align: center;"><span style="color: black;">B2B E-commerce Solution: <strong>Pro</strong></span></h2></div></div><div class="gj075sx mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner gj075sx-s"><div class="inner-content mgz-container"><div class="wxc8yp4 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner wxc8yp4-s"><div class="q2dt3vn mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner q2dt3vn-s"><p style="text-align: left;">This solution includes all the Magento 2 B2B commerce features from the Essentials, plus extended functionality for advanced personalization and customer segmentation, catering to the diversified needs of growing B2B companies.</p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div id="pro_options" class="sthh1t6 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner sthh1t6-s"><div class="inner-content mgz-container"><div class="gnbc4ha mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner gnbc4ha-s"><div class="lw0djng mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner lw0djng-s"><div class="description-section" ><div class="section-content"><div class="gallery"><div class="gallery-items"><div class="gallery-item">About the Pro Suite</div><div class="gallery-item">Request a Quote</div><div class="gallery-item">Store Credit & Refund</div><div class="gallery-item">Sales Reps and Dealers</div><div class="gallery-item">Customer Group Catalog</div><div class="gallery-item">Custom Product Options</div><div class="gallery-item">Social Login</div><div class="gallery-item">Cancel Orders</div></div><div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide"><div class="slide-text"><div class="slide-title">About the Suite</div> Establish advanced B2B relations by building a robust dealer base. Personalize your sales approach for B2B clients, allowing buyers to comfortably negotiate prices and receive tailored pricing offers. Encourage ongoing client engagement by offering store credits as incentives. Provide your customers with a single-click registration via social networks. Offer extra product customizations and services right on the product pages.</div><img alt="b2b solution pro" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-1-1.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Flexibly negotiate prices and create accurately adjusted offers </div> Motivate buyers to discuss pricing conditions. Create accurately adjusted pricing offers to the various segments of your audience. Let buyers comfortably negotiate over the prices and create quotes in one click from any web store page. Increase the flexibility of your B2B pricing policy by displaying or hiding the "Add to Cart" button and prices only to specific customer groups. Quickly customize offers based on customer type or order size to better meet their needs. </div><img alt="request a quote" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-2.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Convert returns into revenue by providing store credits</div> Reach new heights in building customer loyalty and transform refunds into revenue. Encourage ongoing client engagement by offering store credits as a token of appreciation. Enable customers to use these credits as discounts on future purchases. Instead of cash refunds, issue store credits to bring customers back to your store, effectively turning returns into repeat business.</div><img alt="store credit for magento" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-3.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Effectively manage sales reps and monitor their productivity </div> Provide high-quality service and individual approach to each customer by including dealers in your business model. Assign orders and customers to particular representatives and monitor their productivity. Use notifications to coordinate and control sales reps.</div><img alt="sales reps and dealers" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-4.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title"> Flexibly adjust catalog and prices visibility for particular customer groups </div> Personalize sales approach for your B2B clients with minimal efforts. Automatically assign and configure restrictions for specific customer groups to access B2B company accounts. Create a personalized shopping experience by providing a selective catalog and price visibility for particular customers and customer groups to meet the needs of each segment.</div><img alt="customer group catalog" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-5.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Boost revenue by offering clients extra products, services and customizations</div> Offer extra product customizations and services right on the product pages. Provide clients with a wide choice of advanced product options: add materials info, related items and services, price variations, etc. Easily configure smart selection dependencies. Save time by assigning custom product templates to multiple items at a time via mass action. </div><img alt="custom product options" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-7.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Enable easy login through social media</div> Provide your customers with a single-click registration and login process. Let customers just click a particular social network button to sign in. Reach your target market by supporting the most demanded social networks and services during the Magento login: Google, Facebook, Twitter, Instagram, LinkedIn, Amazon, Paypal, Twitch, Microsoft Azure and Pinterest. Automatically collect all the necessary data to understand which social network brings you more profit.</div><img alt="social login" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-6.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Streamline and optimize your order management</div> Receive more orders of a high volume and easily cancel irrelevant ones in bulk With a user-friendly Quick Order page you’ll receive more wholesale orders consisting of many items. To avoid time-consuming manual management of each irrelevant order, with this B2B Pro feature, you’ll be able to review and cancel orders automatically from the backend or allow customers to cancel. </div><img alt="cancel orders" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-pro-8-1.png" /></div></div><div class="swiper-pagination"></div><div class="swiper-button-next"></div><div class="swiper-button-prev"></div></div></div></div></div></div></div></div></div></div></div></div><div id="premium_options" class="c3oda89 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner c3oda89-s"><div class="inner-content mgz-container"><div class="htyyaup mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner htyyaup-s"><div class="ml4gy63 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner ml4gy63-s"><div class="inner-content mgz-container"><div class="g3yiwh3 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner g3yiwh3-s"><div class="nlxmc3v mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner nlxmc3v-s"><h2 id="platinum-block" class="section-heading" style="text-align: center;"><span style="color: black;">B2B E-commerce Solution: <strong>Premium</strong></span></h2></div></div><div class="dvr42rp mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner dvr42rp-s"><div class="inner-content mgz-container"><div class="q7smxon mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner q7smxon-s"><div class="i3iqtr9 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner i3iqtr9-s"><p>This Magento B2B ecommerce solution includes all the features from the Essentials and Pro versions, plus extended functionality to manage targeted promotion campaigns and streamline shipping and payment operations.</p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div id="premium_options" class="bpwitaj mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner bpwitaj-s"><div class="inner-content mgz-container"><div class="h7i2jae mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner h7i2jae-s"><div class="kx20ehe mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner kx20ehe-s"><div class="description-section" ><div class="section-content"><div class="gallery"><div class="gallery-items"><div class="gallery-item">About the Premium Suite</div><div class="gallery-item">Special Promotions Pro</div><div class="gallery-item">Upsells and Cross-sells</div><div class="gallery-item">Shipping Restrictions</div><div class="gallery-item">Payment Restrictions</div><div class="gallery-item">Wishlists and Requisition Lists</div><div class="gallery-item">Customer Attributes</div></div><div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide"><div class="slide-text"><div class="slide-title">About the Suite</div> Build a versatile automatic discount system to flexibly create offers that resonate with various audience segments. Automatically analyze audience interests to generate personalized cross-sell and upsell offers. Allow companies to create unlimited requisition lists. Create unique conditions for VIP partners, configuring specific payment and shipping restrictions on a case-by-case basis.</div><img alt="b2b premium solution" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/prem-intro-new1.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Automate your promotional campaigns</div> Build a versatile automatic discount system instead of creating occasional special deals. Use 20+ promotion types at your disposal to easily create the offers that resonate with various segments of your audience. Run multiple promotions at a time, based on a variety of conditions. Create effective targeted campaigns using customer attributes and order history. Craft custom options for your products and utilize them as precise rule conditions. Import and export crucial cart price rule elements like coupons, customers, usage limits, etc. </div><img alt="special promotions magento" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-prem-2.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Auto generate personalized cross-sell and upsell offers </div> Automatically analyze the interests of your audience and generate personalized cross-sell and upsell offers. Dynamically showcase related product offers on your website, thus motivating customers to complement their orders with extra items. Flexibly adjust rules and conditions to enable smart personalized AI-driven recommendations. Monitor related offers efficiency with advanced analytics.</div><img alt="related upsell cross-sell offers" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-prem-3.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Offer custom shipping conditions based on various parameters </div> Optimize your shipping methods by applying restrictions based on product, cart, and customer parameters to ensure both legality and cost-effectiveness. With the Magento 2 B2B extension, for instance, you can offer free shipping exclusively to wholesale users through customer group-based restrictions. Enable customers to use coupons for special shipping conditions. Comply with legal requirements by limiting shipping methods only for products with specific restrictions, rather than the entire catalog.</div><img alt="shipping restrictions" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-prem-4.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Set up flexible payment conditions</div>Enhance payment management efficiency with the Magento 2 B2B module. Implement flexible rules based on customer payment data to broaden business opportunities and minimize risks. Restrict payment methods according to addresses, customer groups, store views, or specific attributes, enabling more targeted and secure transactions.</div><img alt="payment restrictions" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-prem-5.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Let customers create unlimited wishlists and requisition lists</div>Reduce shopping cart abandonment and boost sales by enabling customers to plan their purchases in advance. Allow companies to create unlimited wishlists and requisition lists to store products they need. Enable quick adding products to wishlists using SKU or product name. Monitor popular items in these lists to strategically plan stock replenishment and meet demand efficiently. Accelerate decision-making for your B2B shoppers with automatic alerts about price changes in their wishlists or requisition lists</div><img alt="requisition lists" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/b2b-prem-6.png"/></div><div class="slide swiper-slide"><div class="slide-text"><div class="slide-title">Collect and analyze more customer data</div>Display additional attribute fields on the checkout and registration pages to collect essential customer data. Create various types of customer attributes to gather all the information you need. Use this data to analyze customer behavior and gain valuable insights to enhance your store performance.</div><img alt="requisition lists" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/media/extensions/b2b-ecommerce-suite-for-magento-2/prem-d-customer-attr.png"/></div></div><div class="swiper-pagination"></div><div class="swiper-button-next"></div><div class="swiper-button-prev"></div></div></div></div></div></div></div></div></div></div></div></div><div id="choose_option" class="svpeshy mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner svpeshy-s"><div class="inner-content mgz-container"><div class="vsrkhhw mgz-element mgz-element-column mgz-col-md-12 mgz-col-sm-12 mgz-col-xs-12"><div class="mgz-element-inner vsrkhhw-s"><div class="twr1ioj mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner twr1ioj-s"><div class="inner-content mgz-container"><div class="uuh7h91 mgz-element mgz-element-column mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner uuh7h91-s"><div class="leb3lxw mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner leb3lxw-s"><h2 style="text-align: center;">Transform your business with the powerful<br />all-in-one B2B solution</h2></div></div><div class="o5682xf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner o5682xf-s"><p style="text-align: center;">Select the option most suitable for your business needs</p></div></div></div></div></div></div></div><div class="wogppxk mgz-element mgz-element-row full_width_row mgz-row-equal-height content-top"><div class="mgz-element-inner wogppxk-s"><div class="inner-content mgz-container"><div class="c9cidfo mgz-element mgz-element-column col mgz-col-md-4 mgz-col-sm-6 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner c9cidfo-s pbuilder-comparison-block-column"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax c9cidfo-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="sfamfk1 mgz-element mgz-element-section"><div class="mgz-element-inner sfamfk1-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax sfamfk1-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="kifp45r mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner kifp45r-s comparison-heading"><p>B2B Essentials</p></div></div><div class="g9df8ow mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner g9df8ow-s"><p><strong><span style="font-size: 10px; color: #ffffff;">UPGRADE FROM B2C TO B2B</span></strong></p></div></div><div class="yrr4gfr mgz-element mgz-child mgz-element-single_product mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner yrr4gfr-s pbuilder-tariff-comparison-price"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="price-box price-final_price" data-role="priceBox" data-product-id="1637" data-price-box="product-id-1637"><span class="normal-price"><span class="price-container price-final_price tax weee" ><span id="old-price-1637-final_price" data-price-amount="779" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$779</span></span> </span></span> </div></div></div></li></ol></div></div></div></div></div></div></div><div class="q2ul6pa mgz-element mgz-child mgz-element-text star-list"><div class="mgz-element-inner q2ul6pa-s font-size-14"><ul><li class="item">B2B Company Account</li> <li class="item">Quick Order</li> <li class="item">Google Account Login</li> <li class="item">Customer Group Auto Assign</li> <li class="item">Extended Product Grid with Editor</li> <li class="item">Product Attachments</li> <li class="item">Color Swatches Pro</li> </ul></div></div><div class="yqbi6op mgz-element mgz-child mgz-element-text pbuilder-tariff-comparison-btn-bottom"><div class="mgz-element-inner yqbi6op-s pbuilder-tariff-comparison-btn -outline"><p style="text-align: center;"><a href="https://amasty.com/ampacksale/bundle/add?id=1637"><button class="button-price action tocart primary builder-button-add-cart" data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="B2B E-commerce Essentials Suite for Magento 2">ADD TO CART</button></a></p></div></div><div class="tbakbb7 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner tbakbb7-s"><p style="text-align: center;"><a href="#essentials_options" analytics-comparison-block-feature-list="B2B E-commerce Essentials Suite for Magento 2">Learn more</a></p></div></div></div></div><div class="hg5a1rd mgz-element mgz-element-column pbuilder-comparison-block-column-mobile-top mgz-col-md-4 mgz-col-sm-6 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner hg5a1rd-s pbuilder-comparison-block-column"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax hg5a1rd-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="thdx3dk mgz-element mgz-element-section"><div class="mgz-element-inner thdx3dk-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax thdx3dk-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="q82l1hl mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner q82l1hl-s comparison-heading"><p>B2B Pro Solution</p></div></div><div class="ecqu260 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ecqu260-s"><p><strong><span style="color: #ffffff; font-size: 10px;">SCALE TO REACH MORE BUYERS</span></strong></p></div></div><div class="xgalwpm mgz-element mgz-child mgz-element-single_product mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner xgalwpm-s pbuilder-tariff-comparison-price"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="price-box price-final_price" data-role="priceBox" data-product-id="1631" data-price-box="product-id-1631"><span class="normal-price"><span class="price-container price-final_price tax weee" ><span id="old-price-1631-final_price" data-price-amount="1719" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$1,719</span></span> </span></span> </div></div></div></li></ol></div></div></div></div></div></div></div><div class="hh9nqnd mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner hh9nqnd-s"><p><a href="#essentials_options" analytics-comparison-block-product-name="B2B E-commerce Essentials Suite for Magento 2"><strong>Essentials </strong></a>included</p></div></div><div class="qn90a4o mgz-element mgz-child mgz-element-separator mgz-element-title-align-center"><div class="mgz-element-inner qn90a4o-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="au6d3jk mgz-element mgz-child mgz-element-text star-list"><div class="mgz-element-inner au6d3jk-s font-size-14"><ul><li class="item">Request a Quote</li> <li class="item">Hide Price</li> <li class="item">Store Credit & Refund</li> <li class="item">Sales Reps and Dealers</li> <li class="item">Customer Group Catalog</li> <li class="item">Social Login</li> <li class="item">Product Option Templates</li> <li class="item">Cancel Orders</li> </ul></div></div><div class="y3p8ho3 mgz-element mgz-child mgz-element-text pbuilder-tariff-comparison-btn-bottom"><div class="mgz-element-inner y3p8ho3-s pbuilder-tariff-comparison-btn -outline"><p style="text-align: center;"><a href="https://amasty.com/ampacksale/bundle/add?id=1631"><button class="button-price action tocart primary builder-button-add-cart" data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="B2B E-commerce Pro Suite for Magento 2">ADD TO CART</button></a></p></div></div><div class="yd634rr mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner yd634rr-s"><p style="text-align: center;"><a href="#pro_options" analytics-comparison-block-feature-list="B2B E-commerce Pro Suite for Magento 2">Learn more</a></p></div></div></div></div><div class="jlu6ty7 mgz-element mgz-element-column pbuilder-comparison-block-column-mobile-top mgz-col-md-4 mgz-col-sm-6 mgz-col-xs-12 mgz-row-gap-margin"><div class="mgz-element-inner jlu6ty7-s pbuilder-comparison-block-column"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax jlu6ty7-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="wxgj2jc mgz-element mgz-element-section"><div class="mgz-element-inner wxgj2jc-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax wxgj2jc-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="k6t2hy6 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner k6t2hy6-s comparison-heading pbuilder-text-name"><p>B2B Premium Solution</p></div></div><div class="ee56igj mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner ee56igj-s"><p><span style="color: #ffffff;"><strong><span style="font-size: 10px;">ADJUST BUSINESS FOR MAX PROFIT</span></strong></span></p></div></div><div class="dk4849g mgz-element mgz-child mgz-element-single_product mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner dk4849g-s pbuilder-tariff-comparison-price pbuilder-price-final"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="price-box price-final_price" data-role="priceBox" data-product-id="1634" data-price-box="product-id-1634"><span class="normal-price"><span class="price-container price-final_price tax weee" ><span id="old-price-1634-final_price" data-price-amount="2529" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$2,529</span></span> </span></span> </div></div></div></li></ol></div></div></div></div></div></div></div><div class="wibpabq mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner wibpabq-s"><p><a href="#essentials_options" analytics-comparison-block-product-name="B2B E-commerce Essentials Suite for Magento 2"><b>Essentials </b></a>included</p></div></div><div class="dnw78ea mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner dnw78ea-s"><p><a href="#pro_options" analytics-comparison-block-product-name="B2B E-commerce Pro Suite for Magento 2"><b>Pro features </b></a>included</p></div></div><div class="yuprg07 mgz-element mgz-child mgz-element-separator mgz-element-title-align-center"><div class="mgz-element-inner yuprg07-s"><div class="mgz-element-separator-wrapper mgz-text-center"><div class="mgz-element-separator-line"></div></div></div></div><div class="vnr6kci mgz-element mgz-child mgz-element-text star-list"><div class="mgz-element-inner vnr6kci-s font-size-14"><ul><li class="item">Special Promotions Pro</li> <li class="item">Automatic Related Products</li> <li class="item">Multiple Wishlist</li> <li class="item">Shipping Restrictions</li> <li class="item">Payment Restrictions</li> <li class="item">Customer Attributes</li> </ul></div></div><div class="ujgy9ub mgz-element mgz-child mgz-element-single_product pbuilder-tariff-comparison-btn-bottom mgz-element-title-align-center mgz-product-listing"><div class="mgz-element-inner ujgy9ub-s pbuilder-tariff-comparison-btn pbuilder-add-to-cart-first"><div class="mgz-block"><div class="mgz-block-content"><div class="products wrapper grid products-grid"><ol class="products list items product-items"><li class="item product product-item"><div class="product-item-info"><div class="product details product-item-details "><div class="product-item-actions"><div class="actions-primary"><form data-role="tocart-form" action="https://amasty.com/b2b-ecommerce-suite-for-magento-2.html?options=cart" method="post"><input type="hidden" name="product" value="1634"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1sP29wdGlvbnM9Y2FydA~~"><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /><button type="submit" data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2" title="Add to Cart" class="action tocart primary"><span data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2">Add to Cart</span></button></form></div></div></div></div></li></ol></div></div></div></div></div><div class="cjxf4nf mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner cjxf4nf-s pbuilder-text-final"><p style="text-align: center;"><a href="#premium_options" analytics-comparison-block-feature-list="B2B E-commerce Premium Suite for Magento 2">Learn more</a></p></div></div></div></div></div></div></div></div></div></div></div></div><div id="comparison_adobe" class="d5i57oa mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner d5i57oa-s"><div class="inner-content mgz-container"><div class="ru9j5s7 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner ru9j5s7-s"><div data-background-type="image" data-parallax-image-background-position="center top" class="mgz-parallax ru9j5s7-p"><div class="lazy-bg mgz-parallax-inner"></div></div><div class="t5yymn0 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner t5yymn0-s"><h2 style="text-align: center;"><strong>Amasty B2B Suite</strong> vs <strong>Adobe Commerce B2B</strong></h2></div></div><div class="iuwn3c7 mgz-element mgz-child mgz-element-raw_html"><div class="mgz-element-inner iuwn3c7-s"><p style="text-align: center;"><button class="action secondary" btn-fancybox-popup="fancybox-content-table">Compare feature set</button><div class="hidden" id="fancybox-content-table" data-promo-id="button-b2b-suite-table" data-promo-name="B2B Suite Comparison Table" data-promo-creative="from_b2b_suite_to_comparison_table" data-promo-position="table_open"><table class="amsite-tariff-table"><tbody><tr class="amsite-row"><td class="amsite-item" style="width: 25%">Key Features</td><td class="amsite-item" ><span class=""amsite-active"">Amasty B2B (Premium)</span></td><td class="amsite-item" ><span class=""amsite-active"">Adobe Commerce B2B</span></td></tr><tr class="amsite-row"><td class="amsite-item " >Company Accounts</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Company Management</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Shared Catalogs/ Customer Group Catalog</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Quick Order</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Request a Quote</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Purchase order approvals</td><td class="amsite-item minus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Requisition lists/ Wishlists</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Product Recommendations</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Extended Product Grid with Editor</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Product Attachments</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Customer Group Auto Assign</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Store Credit & Refund</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Sales Reps and Dealers</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Social Login</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Product Option Templates</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Special Promotions Pro</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Shipping & Payment Restrictions</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Color Swatches</td><td class="amsite-item plus " ></td><td class="amsite-item minus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >API REST support</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item " >Hyva ready storefront</td><td class="amsite-item plus " ></td><td class="amsite-item plus " ></td></tr><tr class="amsite-row"><td class="amsite-item"></td><td class="amsite-item"><div class="amsite-price"><div class="price-box price-final_price" data-role="priceBox" data-product-id="1634" data-price-box="product-id-1634"><span class="normal-price"><span class="price-container price-final_price tax weee" ><span id="product-price-1634" data-price-amount="2529" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$2,529</span></span> </span></span> </div></div><form id="ajax-product_addtocart_form" class="amsite-actions" data-role="tocart-form" data-product-sku="b2b-ecommerce-premium-suite-for-magento-2" action="https://amasty.com/checkout/cart/add/uenc/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s/product/1634/" data-amtheme-js="ajax-tocart" method="post" data-product-name-analytics="B2B E-commerce Premium Solution for Magento 2"><input type="hidden" name="product" value="1634"><input type="hidden" name="uenc" value="aHR0cHM6Ly9hbWFzdHkuY29tL2NoZWNrb3V0L2NhcnQvYWRkL3VlbmMvYUhSMGNITTZMeTloYldGemRIa3VZMjl0TDJJeVlpMWxZMjl0YldWeVkyVXRjM1ZwZEdVdFptOXlMVzFoWjJWdWRHOHRNaTVvZEcxcy9wcm9kdWN0LzE2MzQv"><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /><button type="submit" title="Add to Cart" aria-label="Add to Cart" class="action tocart primary">Add to Cart</button></form></td></tr></tbody></table></div></p></div></div></div></div></div></div></div><div class="hp3o627 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner hp3o627-s"><div class="inner-content mgz-container"><div class="vy1u5j4 mgz-element mgz-element-column mgz-col-xs-12"><div class="mgz-element-inner vy1u5j4-s"><div class="etgdknk mgz-element mgz-element-accordion pbuilder-faq-block mgz-element-title-align-center mgz-element-accordion-align-"><div class="mgz-element-inner etgdknk-s"><div class="mgz-block"><div class="mgz-block-heading mgz-block-heading-align-center"><h2 class="title">Frequently asked questions</h2></div><div class="mgz-block-content"><div class="mgz-panels mgz-panels-etgdknk mgz-panels-no-fill-content" data-mage-init='{"Magezon_PageBuilder/js/collapse":{"collapsibleAll": true,"atLeastOneOpen": false,"icon": "","activeIcon": ""}}' data-spacing="0" data-gap="0"><div class="mgz-panel mgz-panel-first "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-fpqly51" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>Is Magento good for B2B? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="fpqly51 mgz-element mgz-element-accordion_section"><div class="mgz-element-inner fpqly51-s"><div class="sq7jgt8 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner sq7jgt8-s"><div class="inner-content mgz-container"><div class="qkhd7vb mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner qkhd7vb-s"><div class="gwp7h9a mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner gwp7h9a-s"><p><span style="font-weight: 400; color: #666666;">Magento delivers great e-commerce features that can help your business grow in the current eCommerce marketplace with both its open-source and commerce versions. The Magento store additionally provides some of the best B2B marketplace extensions, enabling B2B companies to enhance or add functionality to their stores.</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel "><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-q4o4ke5" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>What is Magento 2 B2B? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="q4o4ke5 mgz-element mgz-element-accordion_section"><div class="mgz-element-inner q4o4ke5-s"><div class="i9hti8m mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner i9hti8m-s"><div class="inner-content mgz-container"><div class="o4uilb0 mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner o4uilb0-s"><div class="lyrmyu4 mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner lyrmyu4-s"><p><span style="color: #666666;">B2B buyers want different experiences and features compared to B2C customers, and Magento 2 B2B extensions help businesses to meet those expectations. Magento 2 B2B extensions by Amasty can provide businesses with the tools to deliver a successful B2B commerce experience. From bulk ordering and requests for quotes.</span></p></div></div></div></div></div></div></div></div></div></div></div></div><div class="mgz-panel mgz-panel-last"><div class="mgz-panel-heading mgz-text-left mgz-icon-position-left"><h4 class="mgz-panel-heading-title"><a href="#tab-wydajpk" class="has-icon"><i class="mgz-accoridon-icon-plus "></i> <span>What is the difference between Magento B2B and B2C? </span></a></h4></div><div class="mgz-panel-body" ><div class="mgz-panel-body-inner"><div class="wydajpk mgz-element mgz-element-accordion_section"><div class="mgz-element-inner wydajpk-s"><div class="nw90e07 mgz-element mgz-element-row full_width_row"><div class="mgz-element-inner nw90e07-s"><div class="inner-content mgz-container"><div class="ar6d23x mgz-element mgz-element-column mgz-col-md-12"><div class="mgz-element-inner ar6d23x-s"><div class="fm2cu9g mgz-element mgz-child mgz-element-text"><div class="mgz-element-inner fm2cu9g-s"><p><span style="color: #666666;">Unlike traditional B2C (Business-to-Consumer) models, Magento B2B focuses on facilitating transactions between businesses, wholesalers, and distributors. This entails managing larger order volumes, negotiating prices through contracts, and accommodating intricate procurement processes.</span></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div> <div class="amsite-reason-choose"><div class="amsite-item -adobe"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-adobe.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/silver-partner-adobe.png" alt="Adobe partner logo" width="143" height="46"></div></div><div class="amsite-item -magento"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-magento.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/magento.svg" alt="Magento Marketplace logo" width="146" height="32"></div></div><div class="amsite-item -trust"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-trust.png" alt="" width="184" height="40"></div><div class="amsite-content"><div class="amsite-row"><span class="amsite-score">4.4</span> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/trust-logo.svg" width="100" height="23"></div><div class="amsite-row"><span class="amsite-text"> See 500+ verified reviews</span></div></div></div><div class="amsite-item -single"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-single.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/single.svg" alt="1 Single points of sales" width="136" height="52"></div></div><div class="amsite-item -amasty"><div class="amsite-head"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/header-amasty.png" alt="" width="184" height="40"></div><div class="amsite-content"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/svg/icons/reason-to-choose/amasty.svg" alt="Trusted by Customers" width="150" height="34"></div></div></div></div></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#faq" data-tab="faq" aria-label="faq" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_4')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_4')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="faq">FAQ</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_4')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 faq" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_4') }" id="amcustomtabs_tabs_4" x-cloak x-show="isActiveTab('amcustomtabs_tabs_4')" ><div class="am-custom-tab am-custom-tab-4"><div class="amfaq-product-tab"> <div class="amfaq_questions widget"> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8b712" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Are Amasty extensions compatible with all themes and extensions by other vendors?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8b712" x-ref="container_67be52ca8b712" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Amasty extensions work with all plugins we issued and with most 3rd-party plugins. If you come across a Magento 2 compatibility issue with any third-party module, we’ll definitely try to help you. If you face any technical issues, please create a ticket...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/are-amasty-extensions-compatible-with-all-themes-and-extensions-by-other-vendors.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Are Amasty extensions compatible with all themes and extensions by other vendors?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8b8d2()" x-init="ratingInit_67be52ca8b8d2()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8ba75" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Will I get free support and updates?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8ba75" x-ref="container_67be52ca8ba75" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Product updates for extensions purchased before Feb 1, 2022With the transition to product subscriptions, you will receive product updates for all extensions purchased before Feb 1, 2022 throughout the entire grace period — up to Aug 1, 2022. If you ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/will-i-get-free-support-and-updates.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Will I get free support and updates?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8bd7f()" x-init="ratingInit_67be52ca8bd7f()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8bec9" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Do you have the installation service in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8bec9" x-ref="container_67be52ca8bec9" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Yes, you can use installation and configuration services that are available as the part of Pro and Premium add-ons for your product subscriptions.Please note that this installation service doesn’t include uninstallation. So, if you need to completely...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-have-amasty-extension-installed.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Do you have the installation service in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8c105()" x-init="ratingInit_67be52ca8c105()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8c23a" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Can I request a free trial?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8c23a" x-ref="container_67be52ca8c23a" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Amasty doesn’t provide any trials of Magento extensions. There's one exception: Amasty extensions are provided for testing or demo purposes to our official Platinum Partners as a part of the “access to Amasty extensions for testing purposes with Composer...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-request-a-free-trial.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Can I request a free trial?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8c2fd()" x-init="ratingInit_67be52ca8c2fd()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8c43f" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Can I test an Amasty extension on a staging site before transferring it to a live one in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8c43f" x-ref="container_67be52ca8c43f" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Yes, you can install any Amasty extension on a test site and configure all the settings there before doing it on your live store.</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-test-an-amasty-extension-on-a-staging-site.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Can I test an Amasty extension on a staging site before transferring it to a live one in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8c4f1()" x-init="ratingInit_67be52ca8c4f1()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8c60f" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">How can I get a refund?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8c60f" x-ref="container_67be52ca8c60f" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Amasty offers to its Customers a thirty (30) day money-back guarantee for the Software. In case the acquired extension didn’t meet your expectations, our support team is always ready to help you. Fees for support subscriptions and any services provided...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-get-a-refund-if-an-extension-doesn-t-suit-me.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I get a refund?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8d52d()" x-init="ratingInit_67be52ca8d52d()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8d693" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">How can I receive a discount?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8d693" x-ref="container_67be52ca8d693" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> We are now working at a loyalty program for our customers that is supposed to bring even greater benefits in the long term. While it’s not out yet, you can look through these Special Offers. New discounts and specials are added every month. To stay ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/will-i-get-any-other-benefits.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I receive a discount?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8d8e1()" x-init="ratingInit_67be52ca8d8e1()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8da31" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">How to update a Magento 2 Amasty extension?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8da31" x-ref="container_67be52ca8da31" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Updating an Amasty extension follows the same process as installing a module. To update a single extension:Run the following command to update a specific Amasty extension:composer update amasty/<module-name> To update multiple extensions:You can...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/upgrade-magento-2-extension.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How to update a Magento 2 Amasty extension?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8ddc6()" x-init="ratingInit_67be52ca8ddc6()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8df1f" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">If I need additional features to be added to an Amasty extension, how can I ask for it in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8df1f" x-ref="container_67be52ca8df1f" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">To leave your feature request, log in to your customer account and open the Products tab. Then, scroll down to the bottom of the page, and leave your feature request in the following form: As soon as you send your request, it is considered by our ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-to-ask-more-features-to-be-added-to-my-extension.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">If I need additional features to be added to an Amasty extension, how can I ask for it in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8dffe()" x-init="ratingInit_67be52ca8dffe()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8e12f" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Magento 2 Amasty extensions installation</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8e12f" x-ref="container_67be52ca8e12f" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> Amasty extension packages include all necessary files, setup guides, and a license agreement, with some even offering example import files to simplify the process.Important: Since January 14, 2025, all Amasty extensions will only be available for installation...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-to-install-magento-2-extension.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Magento 2 Amasty extensions installation</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8e685()" x-init="ratingInit_67be52ca8e685()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8e7e6" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">How can I prolong support in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8e7e6" x-ref="container_67be52ca8e7e6" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary"> If you have an active support service subscription, it grants you access to support services for all products purchased before Feb,1 as long as your subscription is active. Alternatively, support services are only available as the part of a product ...</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-can-i-prolong-support.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I prolong support in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8e9ff()" x-init="ratingInit_67be52ca8e9ff()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8eb6b" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">Can I change the EE extension to CE for free in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8eb6b" x-ref="container_67be52ca8eb6b" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Usually, no, you can’t exchange modules. Please, contact our support managers and they’ll consider your case individually. → Learn more about our special offers</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/can-i-change-the-ee-extension-to-ce-for-free.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">Can I change the EE extension to CE for free in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8ec2e()" x-init="ratingInit_67be52ca8ec2e()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> <div class="amquestion-wrapper border-container border-b mb-4 pb-4" x-data="{selected: null}" ><button class="flex am-text-base btn-as-text btn font-normal normal-case text-left" type="button" @click="selected !== 1 ? selected = 1 : selected = null" aria-controls="questionid_67be52ca8ed5c" :aria-expanded="[selected === 1 ? 'true' : 'false']" ><span class="duration-300 " :class="{'rotate-45': selected === 1}"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray-500 rotate-45" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </span> <span class="question-text ml-4">How can I get a discount to re-purchase plugins in magento?</span></button> <div class="text-base relative overflow-hidden pl-10" id="questionid_67be52ca8ed5c" x-ref="container_67be52ca8ed5c" :tabindex="selected == 1 ? '': '-1'" x-show="selected == 1" x-cloak ><div class="mt-4 text-secondary">Usually, we don’t provide any discounts. But you can contact us, and we’ll consider your case individually. → Learn more about our special offers</div><div class="sm:flex items-center justify-between"> <div class="mt-2"><a href="https://amasty.com/knowledge-base/how-can-i-get-a-discount-to-re-purchase-plugins.html" class="text-blue-600 text-sm" >Read More <span class="sr-only">How can I get a discount to re-purchase plugins in magento?</span></a></div> <div class="mt-4 flex"> <div x-data="ratingData_67be52ca8ee0c()" x-init="ratingInit_67be52ca8ee0c()" x-bind="eventListeners" x-spread="eventListeners" x-show="isLoaded" class="max-xs:w-full" ><template x-for="item in items"><div class="bg-gray-100 py-3 lg:py-1 px-3 rounded text-sm"><template x-if="votingBehavior === 'yesno' || votingBehavior === 'voting'"><div class="flex items-center"><span>Was this answer helpful?</span> <a href="#" aria-label="Vote yes" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 1)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">Yes</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 15 7-7 7 7"/><title>chevron-up</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.positiveRating" :class="{'font-bold': item.isVoted && item.isPositiveVoted}" ></span></template><span :class="{'ml-2' : votingBehavior === 'voting'}">|</span> <a href="#" aria-label="Vote no" class="text-blue-600" :class="{ 'font-semibold': item.isVoted && !item.isPositiveVoted, 'hover:underline': votingBehavior !== 'voting' }" @click.prevent="setRating(item.id, 0)" ><template x-if="votingBehavior === 'yesno'"><span class="px-1">No</span></template><template x-if="votingBehavior === 'voting'"><span class="px-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="inline-block" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/><title>chevron-down</title></svg> </span></template></a> <template x-if="votingBehavior === 'voting'"><span x-text="item.negativeRating" :class="{'font-bold': item.isVoted && !item.isPositiveVoted}" ></span></template><template x-if="item.isVoted && votingBehavior !== 'voting'"><span class="amfaq-rating-data-wrapper"><span x-text="item.positiveRating"></span> <span>people of</span> <span x-text="getTotalRating(item.positiveRating, item.negativeRating)"></span> <span>found this answer helpful</span></span></template><div></template><template x-if="votingBehavior === 'average'"><div class="flex items-center max-xs:flex-col max-xs:gap-3"><span>Rate the answer?</span> <div class="flex mx-4"><template x-for="star in stars"><button type="button" class="cursor-pointer hover:!bg-transparent focus:!bg-transparent" :class="{'group faq-star-rating': star <= hovered}" :aria-label="getStarsLabel(star)" @mouseover="hovered = star" @mouseleave="hovered = 0" @click="setStarRating(item.id, star)" ><template x-if="votedQuestions[item.id] && star <= votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-yellow-400 stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template><template x-if="!votedQuestions[item.id] || star > votedQuestions[item.id]"><svg xmlns="http://www.w3.org/2000/svg" class="stroke-1 fill-transparent stroke-gray-500 group-[.faq-star-rating]:fill-yellow-400 group-[.faq-star-rating]:stroke-yellow-400 lg:w-4 lg:h-4" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="24" height="24" role="img"> <path stroke-linecap="round" stroke-linejoin="round" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"/> <title>star</title></svg> </template></button></template></div><template x-if="isShowZeroRating(parseFloat(item.average))"><span class="text-xs text-gray-500" x-text="'Total rating: ' + parseFloat(item.average).toFixed(1)" ></span></template></div></template></div></template> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></div></div></div></div></div> </div> <div x-data="productURLData_67be52ca92fb2()" x-init="initialize()" ></div> </div></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#reviews" data-tab="reviews" aria-label="reviews" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_3')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_3')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="reviews">Reviews</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_3')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 reviews" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_3') }" id="amcustomtabs_tabs_3" x-cloak x-show="isActiveTab('amcustomtabs_tabs_3')" ><div class="am-custom-tab am-custom-tab-3"><div class="amtabs-review"> <div class="mx-auto items-center review-list customer-reviews" id="reviews" aria-label="Customer Reviews" x-data="amReviews()" x-bind="eventListeners"><div ><div class="amreview-info-wrapper flex justify-between flex-wrap md:flex-nowrap md:pb-10 md:border-b-1"><div class="flex flex-col w-full sm:flex-row"> <div class="flex mb-3 pb-3 border-b-2 sm:border-b-0 sm:border-r-2 sm:pb-0 sm:pr-14 sm:mr-14"><p class="mr-3 mb-0 text-5xl">0</p><div class="amreview-rating-wrapper float-left"><p class="am-text-caption uppercase font-bold mb-2 mt-1">0 reviews</p><div class="amstars-rating-container flex -ml-1" title="0 star" > <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-gray-200" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-gray-200" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-gray-200" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-gray-200" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="text-gray-200" width="20" height="20" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </div></div></div> <div class="amreview-summary-details lg:border-r-2 border-solid border-gray-500 pr-4 pl-6 mr-auto m-0 align-middle h-fit order-3 lg:order-none basis-full lg:basis-auto" x-data="amSummaryDetails()" x-show="isVisibleDetails" x-bind="eventListeners" x-cloak> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(5)"><label for="amreview-bar-5" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">5 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-5" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(4)"><label for="amreview-bar-4" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">4 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-4" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(3)"><label for="amreview-bar-3" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">3 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-3" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(2)"><label for="amreview-bar-2" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">2 stars</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-2" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> <button class="amreview-label block" rel="nofollow" @click="applyFilterByStars(1)"><label for="amreview-bar-1" class="amreview-stars inline-block min-w-[3rem] text-right text-sm text-gray-500 hover:text-amber-500 hover:cursor-pointer">1 star</label> <progress class="amreview-bar lg:w-20 h-1.5 align-middle mx-4 [&::-webkit-progress-bar]:bg-gray-200 [&::-webkit-progress-value]:bg-yellow-300" id="amreview-bar-1" value="0" max="100"></progress><p class="amreview-text inline-block text-sm hover:text-amber-500">0% (0)</p></button> </div> <div class="trustpilot-block"> <div class="flex items-center"> <span class="text-4xl mr-2"> 4.4 </span> <span class="review-trustpilot-icon inline-block"></span> </div> <a href="https://www.trustpilot.com/review/amasty.com" class="am-text-extrasmall uppercase font-bold link-as-text tracking-widest flex items-center" target="_blank"> See 500+ verified reviews <svg class="ml-1" width="14" height="14" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <g id="heroicons-micro/arrow-top-right-on-square"> <g id="Union"> <path d="M6.21967 8.71967C5.92678 9.01256 5.92678 9.48744 6.21967 9.78033C6.51256 10.0732 6.98744 10.0732 7.28033 9.78033L12.5 4.56066V6.25C12.5 6.66421 12.8358 7 13.25 7C13.6642 7 14 6.66421 14 6.25V2.75C14 2.33579 13.6642 2 13.25 2H9.75C9.33579 2 9 2.33579 9 2.75C9 3.16421 9.33579 3.5 9.75 3.5H11.4393L6.21967 8.71967Z" /> <path d="M3.5 6.75C3.5 6.05964 4.05964 5.5 4.75 5.5H7C7.41421 5.5 7.75 5.16421 7.75 4.75C7.75 4.33579 7.41421 4 7 4H4.75C3.23122 4 2 5.23122 2 6.75V11.25C2 12.7688 3.23122 14 4.75 14H9.25C10.7688 14 12 12.7688 12 11.25V9C12 8.58579 11.6642 8.25 11.25 8.25C10.8358 8.25 10.5 8.58579 10.5 9V11.25C10.5 11.9404 9.94036 12.5 9.25 12.5H4.75C4.05964 12.5 3.5 11.9404 3.5 11.25V6.75Z" /> </g> </g> </svg> </a> </div></div> <div class="amreview-add-new mt-4 md:mt-0" x-data="initAddReviewClickBtn()" x-init="$dispatch('reload-customer-section-data')" @private-content-loaded.window="receiveCustomerData($event.detail.data)" ><a href="https://amasty.com/customer/account/login/" title="Add Your Review" aria-label="Add Your Review" @click.prevent="showAuthPopup()" id="amreview-toform" data-amreview-js="amreview-toform" data-amsl-scroll-to="#review-form" class="action secondary amreview-button min-w-[210px]">Add Your Review</a></div></div> <div class="amrev-items-block w-full py-6 md:py-0"> <div class="p-5 text-center"> This extension has no reviews yet</div></div></div></div> <div x-data="hyva.modal()"> <div x-cloak x-bind="overlay('form-review-popup')" x-spread="overlay('form-review-popup')" class="am-overlay-popup z-60"><div class="am-container-popup inset-0"><div x-ref="form-review-popup" role="dialog" aria-modal="true" aria-labelledby="form-review-popup" class="am-dialog-popup w-full sm:max-w-[510px] sm:max-h-[90vh]"> <button type="button" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" stroke="currentColor" viewBox="0 0 24 24" class="stroke-2" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="mx-auto items-center" id="review-form" tabindex="0"><div class="card w-full flex flex-col items-center"><h3 class="am-title-h2 sm:text-4xl">Write your own review</h3><form class="review-form" id="review_form" @submit.prevent="submitForm()" action="https://amasty.com/review/product/post/id/1634/" x-data="Object.assign(hyva.formValidation($el), initAmReviewForm_67be52ca94755())" data-product-id="1634" enctype="multipart/form-data" > <fieldset><legend class="text-xs"><span> You're reviewing:</span> <span class="font-semibold">B2B E-commerce Premium Solution for Magento 2</span></legend> <fieldset class="amreview-rating-group" name="rating-group"><div class="flex flex-col mt-4 mb-3"><div class="text-md hidden">Your Rating:</div><div><div id="product-review-table"> <div class=""><p class="text-center">Please rate name <span class="font-bold">B2B E-commerce Premium Solution for Magento 2</span> <span class="block"> from 1 to 5 stars</span></p><div class="relative flex justify-center mt-2 focus-within:ring-1 " > <div class="" @click="clickedRatingId = 1 || 0" @mouseover="hovered = 1 || 0" @mouseleave="hovered = 0;" ><label class="rating-1 m-0 cursor-pointer text-gray-400" for="Overall extension rating_1_67be52ca94755" id="Overall extension rating_1_67be52ca94755_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 1 <= clickedRatingId || 1 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" required data-msg-required="Please select one of each of the ratings above." name="ratings[1]" id="Overall extension rating_1_67be52ca94755" value="1" aria-label="1 star" /></label></div> <div class="" @click="clickedRatingId = 2 || 0" @mouseover="hovered = 2 || 0" @mouseleave="hovered = 0;" ><label class="rating-2 m-0 cursor-pointer text-gray-400" for="Overall extension rating_2_67be52ca94755" id="Overall extension rating_2_67be52ca94755_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 2 <= clickedRatingId || 2 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall extension rating_2_67be52ca94755" value="2" aria-label="2 stars" /></label></div> <div class="" @click="clickedRatingId = 3 || 0" @mouseover="hovered = 3 || 0" @mouseleave="hovered = 0;" ><label class="rating-3 m-0 cursor-pointer text-gray-400" for="Overall extension rating_3_67be52ca94755" id="Overall extension rating_3_67be52ca94755_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 3 <= clickedRatingId || 3 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall extension rating_3_67be52ca94755" value="3" aria-label="3 stars" /></label></div> <div class="" @click="clickedRatingId = 4 || 0" @mouseover="hovered = 4 || 0" @mouseleave="hovered = 0;" ><label class="rating-4 m-0 cursor-pointer text-gray-400" for="Overall extension rating_4_67be52ca94755" id="Overall extension rating_4_67be52ca94755_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 4 <= clickedRatingId || 4 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall extension rating_4_67be52ca94755" value="4" aria-label="4 stars" /></label></div> <div class="" @click="clickedRatingId = 5 || 0" @mouseover="hovered = 5 || 0" @mouseleave="hovered = 0;" ><label class="rating-5 m-0 cursor-pointer text-gray-400" for="Overall extension rating_5_67be52ca94755" id="Overall extension rating_5_67be52ca94755_label" ><span class="text-gray-400" :class="{ 'text-yellow-400' : 5 <= clickedRatingId || 5 <= hovered }" ><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" width="32" height="32" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 0 0 .95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 0 0-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 0 0-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 0 0-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 0 0 .951-.69l1.07-3.292Z"/></svg> </span> <input class="absolute opacity-0 bottom-0 left-0 cursor-pointer" type="radio" name="ratings[1]" id="Overall extension rating_5_67be52ca94755" value="5" aria-label="5 stars" /></label></div> </div></div></div><input type="hidden" name="validate_rating" value=""/></div></div></fieldset> <div class="mt-8"><div class="am-input field field-reserved required"><input name="nickname" type="text" required id="nickname_field_67be52ca94755" placeholder="Nickname" /><label class="label" for="nickname_field_67be52ca94755">Nickname</label></div> <div class="am-input field field-reserved required"><input name="title" type="text" required id="summary_field_67be52ca94755" placeholder="Summary of your review" /><label class="label" for="summary_field_67be52ca94755">Summary of your review</label></div><div class="am-input field field-reserved required"><textarea name="detail" required cols="5" id="review_field_67be52ca94755" placeholder="Review" ></textarea> <label class="label" for="review_field_67be52ca94755">Review</label></div><div class="am-input field field-reserved"><input name="company" type="text" id="review_company" placeholder="Company" /><label class="field-optional after:text-secondary-lighter label" for="review_company">Company </label></div><div class="am-input field field-reserved"><input name="position" type="text" id="review_position" placeholder="Position" /><label class="field-optional after:text-secondary-lighter label" for="review_position">Position </label></div> <div class="am-input field field-reserved"><textarea name="like_about" rows="3" maxlength="700" id="amreview-pros-field_67be52ca94755" placeholder="Advantages" ></textarea> <label class="field-optional after:text-secondary-lighter label" for="amreview-pros-field_67be52ca94755">Advantages </label></div><div class="am-input field field-reserved"><textarea name="not_like_about" rows="3" maxlength="700" id="amreview-cons-field_67be52ca94755" placeholder="Disadvantages" ></textarea> <label class="field-optional after:text-secondary-lighter label" for="amreview-cons-field_67be52ca94755">Disadvantages </label></div> <div class="review-field-image w-full flex !mt-3 field pl-0.5 "><label class="label mr-14 font-bold">Add your photo</label> <input class="amrev-input" name="review_images[]" accept="image/*" multiple type="file" ></div> </div></fieldset><div class="mt-3"><div class="text-center"><button type="submit" class="btn btn-primary">Send Review</button></div></div></form></div></div></div></div></div></div></div></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#customization" data-tab="customization" aria-label="customization" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_15')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_15')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="customization">Customization</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_15')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 customization" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_15') }" id="amcustomtabs_tabs_15" x-cloak x-show="isActiveTab('amcustomtabs_tabs_15')" ><div class="am-custom-tab am-custom-tab-15"><div class="amsite-tab-content -customization"> <h2 class="amsite-title">Do you need specific features added so you can achieve your business goals?</h2> <p class=amsite-text>Drop us a line and we'll customize this extension for you!</p> </div> <form class="rendered-form amform-form mb-12 mx-auto group-[.am-dialog-popup]:mb-0 default" id="amform-form-9" action="https://amasty.com/amasty_customform/form/submit/" enctype="multipart/form-data" method="post"><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /><input name="form_id" type="hidden" value="9" /><input name="is_survey" type="hidden" value="0" /><div class="flex flex-col max-w-md group-[.am-dialog-popup]:max-w-3xl m-auto amform-wrapper" data-element="form-content"> <div class="grid grid-cols-6 gap-x-2 gap-y-6 items-start" id="page-1" x-ref="page19"> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <input type="text" id="first-name-form-9" name="first-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" maxlength="40" required placeholder="Type here..." ><label class=" label " for="first-name-form-9">First Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="text" id="last-name-form-9" name="last-name" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type here..." ><label class=" label " for="last-name-form-9">Last Name</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="email" id="email-form-9" name="email" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type here..." ><label class=" label " for="email-form-9">Business email</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" style="default;" x-data="{ focused: false, value: '' }"> <input type="text" id="phone-form-9" name="phone" class=" border-gray-300 w-full border-gray-300 w-full py-1 " x-model="value" @focus="focused = true" @blur="focused = value" style="default;" maxlength="255" required placeholder="Type here..." ><label class=" label " for="phone-form-9">Business Phone Number</label></div><!-- Dropdown / Select --> <!-- Simple input --> <div class="am-input field field-reserved col-span-6 form-control mb-1 fieldset-block relative" x-data="{ focused: false, value: '' }"> <textarea id="description-form-9" name="description" class="focus:border-gray-500 border-gray-300 w-full border-gray-300 w-full py-1 " maxlength="255" required x-model="value" @focus="focused = true" @blur="focused = value" rows="4" placeholder="Type here..." ></textarea> <label class=" label " for="description-form-9">What's your wish?</label></div><!-- Checkboxes --> <div class="col-span-6 amcform-toolbar flex align-center items-center gap-x-2 justify-center mt-4"> <button type="submit" x-data class="btn btn-primary justify-center w-64" @click.prevent="initFormEvents9().processSubmit( $refs.page19, $refs.tab19, $event)">Send request</button> </div></div> </div> <!--Validations--><!--Dependencies--><!--Survey--> <!--Default values--><!--Init google map--></form></div></div></div> <div class="am-tabs-item" role="tabpanel" ><template x-if="isAccordion || isMobile"><div class="amtab-accordion-tab" role="tab"><a href="#changelog" data-tab="changelog" aria-label="changelog" class="flex justify-between py-4 items-center cursor-pointer w-full text-primary hover:text-primary border-b-1 analytics-product-tab-title" :class="{'border-b-1': !isActiveTab('amcustomtabs_tabs_16')}" @click.prevent.stop="setActiveTabs('amcustomtabs_tabs_16')" ><span class="title text-md md:text-lg font-semibold analytics-product-tab-title" aria-label="changelog">Change Log</span> <span class="py-1 px-1 transition-transform transform duration-300 ease-in-out" :class="{'rotate-180': isActiveTab('amcustomtabs_tabs_16')}" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="icon-arrow" width="20" height="20" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </span></a></div></template><div class="tab-content pt-5 md:pt-10 change log" :class="{ 'card tab-view': !isAccordion && !isMobile, 'md:px-4 py-4 accordion-view': isAccordion, 'border-b-1': isMobile && isActiveTab('amcustomtabs_tabs_16') }" id="amcustomtabs_tabs_16" x-cloak x-show="isActiveTab('amcustomtabs_tabs_16')" ><div class="am-custom-tab am-custom-tab-16"><div class="amsite-changelog-tab"> <div class="amsite-changelog-top"><div class="amtheme-content"><div class="amtheme-card-block"><p>You can always download the recent version free of charge from your account installing an upgrade is easy</p><div class="amtheme-actions"><a class="action" title="Check Now" aria-label="Check Now" href="https://amasty.com/knowledge-base/upgrade-magento-2-extension.html">Check now →</a></div></div><div class="amtheme-card-block"><p>See Magento (and other software) versions we support and guarantee their compatibility with our extensions</p><div class="amtheme-actions"><a class="action" title="Check Now" aria-label="Check Now" href="https://amasty.com/knowledge-base/what-magento-versions-amasty-supports.html">Check now →</a></div></div></div><div class="amtheme-actions customer-login"> <a class="action secondary" href="https://amasty.com/customer/account/login/" title="My Downloads" aria-label="My Downloads" data-social-login-redirect="/amcustomer/account/products">My Downloads</a></div></div> <div class="changelog-block -multi" data-mage-init='{"amsiteChangelogTabs": {}}' > <div class="changelog-nav "> <ul class="items"> <li class="item link"><a href="#changelog" class="action -active" data-amsite-js="changelog-nav-item-main" data-product-id="0" title="B2B E-commerce Solution for M2 (Premium)" aria-label="B2B E-commerce Solution for M2 (Premium)">B2B E-commerce Solution for M2 (Premium)</a></li> <li class="item link"><a href="#changelog_1" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="1" title="Request a Quote for M2" aria-label="Request a Quote for M2">Request a Quote for M2</a></li> <li class="item link"><a href="#changelog_2" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="2" title="Grouped Options for M2" aria-label="Grouped Options for M2">Grouped Options for M2</a></li> <li class="item link"><a href="#changelog_3" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="3" title="Multiple Wishlist for M2" aria-label="Multiple Wishlist for M2">Multiple Wishlist for M2</a></li> <li class="item link"><a href="#changelog_4" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="4" title="B2B Company Account for M2" aria-label="B2B Company Account for M2">B2B Company Account for M2</a></li> <li class="item link"><a href="#changelog_5" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="5" title="Cancel Orders for M2" aria-label="Cancel Orders for M2">Cancel Orders for M2</a></li> <li class="item link"><a href="#changelog_6" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="6" title="Quick Order for M2" aria-label="Quick Order for M2">Quick Order for M2</a></li> <li class="item link"><a href="#changelog_7" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="7" title="Google Account Login for M2" aria-label="Google Account Login for M2">Google Account Login for M2</a></li> <li class="item link"><a href="#changelog_8" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="8" title="Store Credit & Refund for M2" aria-label="Store Credit & Refund for M2">Store Credit & Refund for M2</a></li> <li class="item link"><a href="#changelog_9" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="9" title="Customer Group Catalog for M2" aria-label="Customer Group Catalog for M2">Customer Group Catalog for M2</a></li> <li class="item link"><a href="#changelog_10" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="10" title="Hide Price for M2" aria-label="Hide Price for M2">Hide Price for M2</a></li> <li class="item link"><a href="#changelog_11" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="11" title="Color Swatches Pro for M2" aria-label="Color Swatches Pro for M2">Color Swatches Pro for M2</a></li> <li class="item link"><a href="#changelog_12" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="12" title="Sales Reps and Dealers for M2" aria-label="Sales Reps and Dealers for M2">Sales Reps and Dealers for M2</a></li> <li class="item link"><a href="#changelog_13" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="13" title="Shipping Restrictions for M2" aria-label="Shipping Restrictions for M2">Shipping Restrictions for M2</a></li> <li class="item link"><a href="#changelog_14" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="14" title="Payment Restrictions for M2" aria-label="Payment Restrictions for M2">Payment Restrictions for M2</a></li> <li class="item link"><a href="#changelog_15" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="15" title="Customer Group Auto Assign for M2" aria-label="Customer Group Auto Assign for M2">Customer Group Auto Assign for M2</a></li> <li class="item link"><a href="#changelog_16" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="16" title="Product Attachments for M2" aria-label="Product Attachments for M2">Product Attachments for M2</a></li> <li class="item link"><a href="#changelog_17" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="17" title="Social Login for M2" aria-label="Social Login for M2">Social Login for M2</a></li> <li class="item link"><a href="#changelog_18" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="18" title="Product Option Templates for M2" aria-label="Product Option Templates for M2">Product Option Templates for M2</a></li> <li class="item link"><a href="#changelog_19" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="19" title="Special Promotions Pro for M2" aria-label="Special Promotions Pro for M2">Special Promotions Pro for M2</a></li> <li class="item link"><a href="#changelog_20" class="action " data-amsite-js="changelog-nav-item-main" data-product-id="20" title="Automatic Related Products for M2" aria-label="Automatic Related Products for M2">Automatic Related Products for M2</a></li> </ul> <div class="field -changelog-select "> <label class="label" for="changelog-nav-select">Select item</label> <select id="changelog-nav-select" data-amsite-js="changelog-nav-select" tabindex="-1"> <option value="0" selected="selected" >B2B E-commerce Solution for M2 (Premium)</option> <option value="1" >Request a Quote for M2</option> <option value="2" >Grouped Options for M2</option> <option value="3" >Multiple Wishlist for M2</option> <option value="4" >B2B Company Account for M2</option> <option value="5" >Cancel Orders for M2</option> <option value="6" >Quick Order for M2</option> <option value="7" >Google Account Login for M2</option> <option value="8" >Store Credit & Refund for M2</option> <option value="9" >Customer Group Catalog for M2</option> <option value="10" >Hide Price for M2</option> <option value="11" >Color Swatches Pro for M2</option> <option value="12" >Sales Reps and Dealers for M2</option> <option value="13" >Shipping Restrictions for M2</option> <option value="14" >Payment Restrictions for M2</option> <option value="15" >Customer Group Auto Assign for M2</option> <option value="16" >Product Attachments for M2</option> <option value="17" >Social Login for M2</option> <option value="18" >Product Option Templates for M2</option> <option value="19" >Special Promotions Pro for M2</option> <option value="20" >Automatic Related Products for M2</option></select> </div></div> <div class="changelog-list" data-amsite-js="changelog-list-main"> <div class="tab-item " id="main_changelog_0" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Nov 15, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Nov 15, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the Amasty Customer Attributes extension to the Premium version of the B2B E-commerce Solution to enhance B2B workflows by streamlining the collection of additional customer data (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.0</span></span> <div class="amsite-date">Last Update: Aug 27, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Aug 27, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we're excited to introduce the new B2B E-commerce Suite, a transformative solution designed to deliver exceptional B2B buying experiences. With advanced features tailored to the needs of modern businesses, this upgrade significantly enhances B2B company management. It's available with an active product subscription or support subscription</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_1" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.1</span></span> <div class="amsite-date">Last Update: Feb 17, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.1</span> - Feb 17, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we addressed the error ‘No such entity with cartId’ that occurred in the quote cart</li> <li class="item"><span class="amsite-label">Fix</span> now the ‘Estimated Shipping Info’ section is displayed in the submitted quotes only when it contains information</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Nov 20, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Hyvä Checkout was added. You can find the 'amasty/module-request-quote-hyva-checkout' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">New</span> we added a new custom quote field type 'File Upload' to the Pro version (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we included quote items and customer data to the admin notifications about newly created quotes</li> <li class="item"><span class="amsite-label">Improvement</span> added new variables to display in the PDF file quota: admin remarks, shipping, and billing company name</li> <li class="item"><span class="amsite-label">Fix</span> resolved issues with removing a product from the quota using API</li> <li class="item"><span class="amsite-label">Fix</span> ensured the creation of customers occurred correctly and according to the corresponding website</li> <li class="item"><span class="amsite-label">Fix</span> corrected totals calculation after a quota was submitted by a new user</li> <li class="item"><span class="amsite-label">Fix</span> fixed issues with email translations</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.2</span></span> <div class="amsite-date">Last Update: Jun 18, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.2</span> - Jun 18, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added validation of Amasty templates to prevent the possible deletion of a template in use</li> <li class="item"><span class="amsite-label">Fix</span> the issue with a quote status changes was resolved</li> <li class="item"><span class="amsite-label">Fix</span> Fixed Product Tax is now displayed in emails, as it should</li> <li class="item"><span class="amsite-label">Fix</span> we fixed display of product prices in the quote car</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.1</span> - Apr 18, 2024</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 2.8.1</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - Feb 29, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added Google reCAPTCHA compatibility for Magento version 2.4.0 and higher. You can find the 'amasty/module-request-quote-recaptcha' package for installing in composer suggest</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the Shipping, Billing and tables information displaying in PDF files</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the Quotes grid long time load loading issue</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Magento Enterprise </li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with missing admin remarks in the emails</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the error occurred during Quote submitting when 'Allow to Change Price in Quote Cart' setting is disabled</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.2</span></span> <div class="amsite-date">Last Update: Nov 29, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.2</span> - Nov 29, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Admin Actions Log so now quote status 'Cancel' logged as it should</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.1</span> - Jul 19, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor UI improvements</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Jul 19, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the possibility to disable the automatic customer account creation when a guest submits a quote</li> <li class="item"><span class="amsite-label">New</span> we added the possibility to handle most of actions on Quotes via REST API</li> <li class="item"><span class="amsite-label">Improvement</span> we covered 'Inform Guests' setting via GraphQl</li> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to get notes and remarks data via REST API</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the ability to submit a quote without email field filling</li> <li class="item"><span class="amsite-label">Fix</span> the problem with possibility to place two orders for one approved quote was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with no custom product options displaying in the emails</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated duplicate addresses in the Billing and Shipping Address fields when creating an order from the admin panel</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.1</span></span> <div class="amsite-date">Last Update: Mar 13, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Mar 13, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5-p2, 2.4.6</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Mar 07, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Refactoring</span> the code was refactored to fix the compatibility with Magento Enterprise Customer Attributes (Please note: after the update the third party customizations for amasty_quote_cart_index.xml file on your instance may be incompatible with the module)</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with combining Quotes of different customers once logged in as customers from the Admin Panel</li> <li class="item"><span class="amsite-label">Fix</span> the problem with a Quote remark deleting after adding a discount to it was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the incorrect Quote Dates in the emails, PDF files and Customer Accounts</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.0</span></span> <div class="amsite-date">Last Update: Nov 21, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Nov 21, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now the module is read & write GraphQL compatible (Note: the compatibility is available as part of an active product subscription or Support Subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.3</span></span> <div class="amsite-date">Last Update: Sep 21, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.3</span> - Sep 21, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with subtotal updating on the "Edit Quote" page when a new product is added or the qty of existing is changed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.2</span> - Sep 08, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the Sort Order setting work for Custom Quote Fields</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Aug 18, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor UI improvements were made</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with products with tier price</li> <li class="item"><span class="amsite-label">Fix</span> now the correct quantity of products is displayed in the Quota Cart</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with separators and applied fonts in Quote PDF</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - May 18, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the possibility to disable customers email notifications</li> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to delete quote items from the cart</li> <li class="item"><span class="amsite-label">Improvement</span> we improved the Approved Quote Customer Notification Email Templates with the ability to add administrator remarks to it</li> <li class="item"><span class="amsite-label">Improvement</span> we added Frontend Quote URL Key setting so now you can customize quote links</li> <li class="item"><span class="amsite-label">Fix</span> now the quantity of products with the same SKU and different options displayed correctly in case of editing from the Quote cart</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the Tax calculation when products being added to the Quote cart</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the approved quota behavior when other products being added into the cart</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with custom email template for approved quote</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.9</span></span> <div class="amsite-date">Last Update: Mar 09, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.9</span> - Mar 09, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we adjusted available columns on the quotes grid</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with PHP 8.1 was improved</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Infinite Scroll was improved</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Jet Theme was improved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the way discounts are displayed in the backend when product prices exceed the certain amount</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with missing PDF files in emails when creating quote from backend</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.8</span> - Nov 24, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now you can add custom quote fields to the quote cart in order to gather additional information (Note: the feature is available as a part of the Request a Quote Pro solution)</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.7</span> - Nov 16, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Jet Theme</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the issue with viewing quotes in the backend while using Magento Stripe Payments extension</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with VAT number validation while attempting to create a quote in the backend</li> <li class="item"><span class="amsite-label">Fix</span> now it is possible to view quotes in customer account regardless of the website with the ‘Share Customer Accounts’ setting set to ‘Global’</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.6</span> - Sep 15, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> placing quote order no longer triggers reminder email</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the missing quote button on the search results page</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with PDF template scope</li> <li class="item"><span class="amsite-label">Fix</span> now prefix and suffix fields are displayed according to the configuration</li> <li class="item"><span class="amsite-label">Fix</span> we adjusted quote button styles</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the email confirmation link for guest customers</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.5</span> - Mar 29, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the visual issue with the quote mini cart</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.4</span> - Jan 21, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the quote PDF downloading on multistore instances</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.3</span> - Dec 21, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced compatibility with Amasty Jet Theme</li> <li class="item"><span class="amsite-label">New</span> we covered the main plugin's features with MFTF tests. It will help to improve quality and stability of our extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.2</span> - Nov 20, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we implemented an integration with Advanced Reports extension and added a new report type, which allows you to monitor quotes overview by their status</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.1</span> - Nov 16, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the issue with a quote creation process from administrative panel for a new customer</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Sep 21, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now quotes can be downloaded in PDF format both from backend and frontend. In addition, you can automatically attach PDF to the Approved Quote customer notification and configure PDF content according to your needs on store view level</li> <li class="item"><span class="amsite-label">Compatibility</span> we improved the compatibility with Magento 2.2.x</li> <li class="item"><span class="amsite-label">Improvement</span> we significantly enhanced extension performance on large catalogs</li> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to set a product price higher than the original one while editing a quote from admin panel</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.4</span></span> <div class="amsite-date">Last Update: Aug 13, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.4</span> - Aug 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Amasty Jet Theme</li> <li class="item"><span class="amsite-label">Improvement</span> we corrected showing quote subtotal depend on Magento Tax configuration</li> <li class="item"><span class="amsite-label">Fix</span> we resolved issue with blank checkout page in some cases</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.3</span> - Jul 20, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the deletion of an item from shopping cart in case it was added after approved quote</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the display of enabled categories list in extension's configuration</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with quote creation from backend if 2FA is used to login to the admin panel</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.2</span> - Jun 03, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the functioning of notifications and usage of shipping in quotes on Magento v. 2.3.0 and below</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - May 11, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we reviewed and enhanced compatibility with split database performance solution</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Mar 31, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ability to predefine shipping address and method from administrative panel (along with an option to restrict modifying the chosen address and method on checkout)</li> <li class="item"><span class="amsite-label">New</span> besides default shipping methods it's possible to choose custom shipping method and apply custom fee</li> <li class="item"><span class="amsite-label">New</span> ?reate New Customer option is now available on Quotes grid as well</li> <li class="item"><span class="amsite-label">Improvement</span> we limited the approval of quotes created in backend without products to avoid confusion of customers on the storefront</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Mar 24, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Mar 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now you can disable price changes in Quote Cart if necessary</li> <li class="item"><span class="amsite-label">New</span> all required registration fields are now prompted to be filled in by not logged in users on Quote Cart (Magento Commerce admins can also configure additional Customer Attributes for displaying)</li> <li class="item"><span class="amsite-label">New</span> from now extension takes tier pricing into account and automatically offers best price for your customers</li> <li class="item"><span class="amsite-label">New</span> now it's possible to create quote in admin panel for customer from any store view (even if he/she doesn't belong to the corresponding website)</li> <li class="item"><span class="amsite-label">Improvement</span> we rechecked and established correct dependency on jQuery UI library</li> <li class="item"><span class="amsite-label">Improvement</span> now the customer notification about the quote created from administrative panel contains detailed information about the approved quote</li> <li class="item"><span class="amsite-label">Fix</span> we resolved an issue with wrong Email Sender upon multistore configuration</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.5</span></span> <div class="amsite-date">Last Update: Feb 18, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Feb 18, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Hide Price was improved</li> <li class="item"><span class="amsite-label">Fix</span> issue with taxes after customer login was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we corrected quote update date format</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Jan 28, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.3.4 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Oct 01, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced compatibility with Hide Price plugin even more. If the price is configured to be hidden, the customer will not see this price in quote cart as well</li> <li class="item"><span class="amsite-label">Compatibility</span> now the module allows displaying Add To Quote button for custom product types</li> <li class="item"><span class="amsite-label">Fix</span> incorrect behavior of Review Reminder on cron run was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Sep 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved the compatibility with AJAX Shopping Cart module</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Sep 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with quote submission by a guest customer if required fields are not filled in</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the display of product input price on the quote cart page</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Sep 03, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added Hide Price package to the extension. Now you are free to use all Hide Price benefits according to your needs: disable ordering, hide prices for particular products or customer groups, etc. which will provide even more involving of potential buyers into pricing negotiations</li> <li class="item"><span class="amsite-label">New</span> now, the extension includes a new option that allows you to approve quotes automatically if the discount of the submitted quote is less than the specified percentage amount</li> <li class="item"><span class="amsite-label">New</span> we added the new column ‘Cost’ to the request page in the backend. It will make the decision-making process easier because admin will see the difference between the requested price and the product’s cost. The setting to choose which attribute will be used as ‘Cost’ attribute is added as well</li> <li class="item"><span class="amsite-label">New</span> we introduced a new option with the help of which you can add an additional % of discount/surcharge to the submitted quote. Now, there is no need to insert custom prices, you can just insert a % number of discount/surcharge which will be applied to the whole quote</li> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced the compatibility with AJAX Shopping Cart extension</li> <li class="item"><span class="amsite-label">Improvement</span> we added several fields with information about customers right to the quote edit page. Now you can easily evaluate when the account was created and how much has the customer spent during that time, which may help to make a decision about quote approving quicker</li> <li class="item"><span class="amsite-label">Improvement</span> we improved the quote view page in customer’s account: new columns (requested price, approved price, discount amount) were added to the table, which makes the data displayed more evident and convenient</li> <li class="item"><span class="amsite-label">Fix</span> minor issues were resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.5.1</span></span> <div class="amsite-date">Last Update: Aug 20, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.5.1</span> - Aug 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with Request a Quote Grid sorting was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.0</span> - Aug 16, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added an option that allows guests to add products to quote. Guest users are asked for an email address when submitting the quote request</li> <li class="item"><span class="amsite-label">New</span> we added an option that allows admin to create a quote from the created order</li> <li class="item"><span class="amsite-label">New</span> we added API methods that allow admin to connect quote requests and proposals to and from other systems such as ERP and CRM. The following endpoints have been added: Get Quote, Approve Quote, Expire Quote, Add Quote Comment and Add Quote Item Note</li> <li class="item"><span class="amsite-label">Improvement</span> we added an option that allows admin to select whether to receive email reports for new quote requests instantly upon quote submission or with custom frequency, e.g. daily, weekly or monthly</li> <li class="item"><span class="amsite-label">Fix</span> we have fixed an issue with Email Template for Submitted Quote</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.4.4</span></span> <div class="amsite-date">Last Update: Jul 25, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.4.4</span> - Jul 25, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with displaying submitted data was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.3</span> - Jul 04, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> minor issues were resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.2</span> - Jun 26, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Ajax Cart was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.1</span> - Jun 21, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we corrected the calculation and displaying of taxed prices in Quote Cart</li> <li class="item"><span class="amsite-label">Fix</span> issue with not loadable Email Templates was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.0</span> - Jun 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to include tax in the requested price was added. It is useful for B2C when the store is set to use taxes (European VAT) and the 'Prices including tax' setting is enabled</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.2</span></span> <div class="amsite-date">Last Update: May 20, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.2</span> - May 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with Quote view page was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - May 01, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.1.5 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Apr 16, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to inform guests to log in for adding products to quote was added</li> <li class="item"><span class="amsite-label">New</span> ability to move approved quote directly to checkout from the customer account was added</li> <li class="item"><span class="amsite-label">New</span> ability to add bundle product to the quotation was added</li> <li class="item"><span class="amsite-label">New</span> admin is able to create quotes in the back end and to send custom quotes to customers so they go ahead and convert it to order and pay for it via the standard checkout</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.1</span></span> <div class="amsite-date">Last Update: Apr 05, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Apr 05, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with expiry date was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Apr 02, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to send customers automatic reminder emails when quote proposal is about to expire was added. Admin can configure the global setting and set a number of days prior to expiry for each quote individually</li> <li class="item"><span class="amsite-label">New</span> ability to set quote expiration date was added. Admin can configure the global setting and set a number of days prior to expiry for each quote individually</li> <li class="item"><span class="amsite-label">New</span> ability to manage all existing cron tasks on a Cron Tasks List grid in the backend was added. Run cron tasks and generate their schedule by clicking the ‘Run Cron’ button. Also, delete tasks in bulk, apply filtering and sorting options when it is needed</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.0</span></span> <div class="amsite-date">Last Update: Mar 19, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Mar 19, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> admin daily email reports with all new Quote Requests was added</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Hide Price extension allows to disable ordering and/or hide the product price leaving the 'Add to Quote' button available</li> <li class="item"><span class="amsite-label">New</span> ability to move items from the cart to quote request was added. 'Move to Quote' button is available at the Shopping Cart page now</li> <li class="item"><span class="amsite-label">New</span> ability to enable/disable quotation for each product and category was added</li> <li class="item"><span class="amsite-label">New</span> the tax support was added. The tax is calculated based on customer default shipping address</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_2" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.6</span></span> <div class="amsite-date">Last Update: Apr 23, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.6</span> - Apr 23, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue where the filter by option group was not applied correctly.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.5</span> - Apr 03, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved the compatibility with Amasty Layered Navigation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Jan 20, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we optimized the module code to avoid the security issues</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with no products result when filtering by two or more Grouped Options</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Aug 05, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the grouped options wrong Url issue</li> <li class="item"><span class="amsite-label">Fix</span> now Grouped Options swatches work as expected and display correct products</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - May 20, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed an issue with adding decimal filter attribute to Url</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with single Url for different grouped options</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Oct 07, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now grouped option navigation results are displayed correctly when using Amasty Improved Layered Navigation multiselect filter functionality</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_3" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Jul 19, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Jul 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Multiple Wishlist. You can find the ‘amasty/module-m-wishlist-hyva' package for installing in composer suggest</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.1</span></span> <div class="amsite-date">Last Update: Oct 30, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Oct 30, 2023</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 2.0.1</li> <li class="item"><span class="amsite-label">Fix</span> GraphQL module is now available for installation via Composer</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Oct 30, 2023</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 2.0.0</li> <li class="item"><span class="amsite-label">New</span> we added the possibility to handle most actions on wishlists via REST API. Compatible with Magento 2.4.4 and higher</li> <li class="item"><span class="amsite-label">New</span> now the module is read & write GraphQL compatible</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility of the Add to Wishlist functionality with the Recently Viewed widget</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.6</span></span> <div class="amsite-date">Last Update: Sep 25, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.6</span> - Sep 25, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Magento 2.4.6</li> <li class="item"><span class="amsite-label">Improvement</span> we added new social networks to allow wishlist sharing</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the new email templates not appearing in the Email Templates dropdown</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the subjects in the price alert emails</li> <li class="item"><span class="amsite-label">Fix</span> we enhanced the compatibility with Amasty Cookie Consent extension</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the behaviour of the Unselect All button in wishlists</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the ArgumentCountError message that appeared when adding products from a shared wishlist to cart</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.5</span> - Sep 28, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we switched the module to a declarative schema</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty AJAX Shopping Cart so now products from the wishlist are added to the cart as expected</li> <li class="item"><span class="amsite-label">Fix</span> the problem with an empty API array response was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.4</span> - May 17, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with displaying deleted wishlists in pop-up</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the Wishlist page displaying when Jet Theme is being used </li> <li class="item"><span class="amsite-label">Fix</span> solved the problem with adding a product to the wish list when there is a widget on the page</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.3</span> - Aug 17, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected issues related to extension’s translation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Jun 11, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the process of data upgrading upon extension installation/updating on instances with significant amount of wishlists created</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Apr 15, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the flow of adding products to wishlist from a comparison page if a customer is not logged in</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Jan 11, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we improved the wishlist sharing feature - now you can let customers post their wishlists easily both on Facebook and Twitter</li> <li class="item"><span class="amsite-label">New</span> now it is possible to notify customers about any changes in the prices of products from their wishlists</li> <li class="item"><span class="amsite-label">New</span> now you can evaluate the sales performance of products which your customers added to wishlists with the new “Most Purchased Items from Lists” report</li> <li class="item"><span class="amsite-label">New</span> we covered the main plugin's features with MFTF tests. It will help to improve quality and stability of our extension</li> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Jet Theme</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.1</span></span> <div class="amsite-date">Last Update: Aug 24, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Aug 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we reworked the uninstall script: now all products previously added to custom wish and requisition lists are not lost if extension is uninstalled, but are moved to the default Wish List</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_4" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.0</span></span> <div class="amsite-date">Last Update: Aug 07, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Aug 07, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ability for administrators to build a Company Hierarchy by assigning related companies to a designated parent company. (Note: this functionality is available as part of an active product subscription or support subscription. Please find "amasty/module-company-account-subaccount" in the suggest section. Temporarily not available on Hyvä Theme.)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.0</span></span> <div class="amsite-date">Last Update: Jul 16, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Jul 16, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> it is now possible to create a Company Account directly during registration on the "Sign In" and "Create an Account" pages (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">New</span> we added the ability to import and export Company Accounts data (Note: the compatibility is available as a part of an active product subscription or support subscription) </li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7</li> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to disable sending emails notifications to customers (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we expanded the API functionality, and now when creating an order through the API, the company account data is included both in the order in the admin panel and when retrieving order information via a GET request</li> <li class="item"><span class="amsite-label">Fix</span> we solved the module translation issue</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.1</span></span> <div class="amsite-date">Last Update: Jan 03, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Jan 03, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved system messages to avoid conflicts with Magento configuration settings</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with the return of store credits to a Company Account balance when the buyer cancels an order</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the 'Overdraft Limit' setting validation when saving a Company Account</li> <li class="item"><span class="amsite-label">Fix</span> now a company is successfully created even if it is not given a State/Province</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Sep 27, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for B2B Company Account. You can find the 'amasty/module-company-account-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with editing and saving company information</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.1</span></span> <div class="amsite-date">Last Update: Mar 13, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.1</span> - Mar 13, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5-p2, 2.4.6</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Feb 16, 2023</div><ul class="items"> <li class="item"><span class="amsite-label"></span> New: we added the possibility to handle CRUD actions on Company Account via REST API</li> <li class="item"><span class="amsite-label">Improvement</span> now customers assignment to Company Accounts via mass action occurs through a modal window that improves the speed of loading and rendering the Customers grid</li> <li class="item"><span class="amsite-label">Fix</span> the problem with PayPal payment method displaying on Checkout Page when the Company Account module is enabled was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred while 'Convert to Order' process</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.8</span></span> <div class="amsite-date">Last Update: Nov 24, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.8</span> - Nov 24, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to use Company Store Credit payment method when creating order from the backend</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the memory limit issue occurred while setup:upgrade command running</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the getMainTable request </li> <li class="item"><span class="amsite-label">Fix</span> the issue with Terms and Conditions displaying when Company Store Credit payment method is being used was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.7</span> - Jun 17, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.6</span> - Mar 15, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we adjusted the way extension gets customer data</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with saving company data</li> <li class="item"><span class="amsite-label">Fix</span> we adjusted extension i18n localization file</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Nov 16, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with extension not getting customer ID</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Sep 14, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the integration with the Amasty Custom Reports Builder extension so that you can create reports using extension data</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Apr 20, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with updating of company user’s data</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the pagination of company orders' grid</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Feb 12, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we have amended the elements of the administrative panel to meet Magento guidelines regarding Admin Panel Placement and Design</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Jan 21, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added an option to configure the URL key for company pages on the storefront</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Dec 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we introduced the new offline payment method and the Company Store Credit functionality: now you can let companies buy now and pay later, or let them make advance payments so that other company members can use available prepayment on checkout. Moreover you can allow companies to have negative balance and collect penalties for overdue payments</li> <li class="item"><span class="amsite-label">New</span> now it is possible to use Companies in conditions for Cart Price Rules or Amasty Customer Group Catalog and set targeted promotions for specific companies</li> <li class="item"><span class="amsite-label">Improvement</span> we added a Company Account link to the top Customer Menu for better navigation</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.6</span></span> <div class="amsite-date">Last Update: Nov 18, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.6</span> - Nov 18, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue occurred upon editing of customers who are associated with a deleted company account</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the creation of customer accounts from the administrative panel in case they do not initially belong to any company account</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.5</span> - Oct 10, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now extension is compatible with Magneto 2.4.1</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with visibility of user orders to other users in some cases</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.4</span> - Oct 05, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.3</span> - Aug 19, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now the default role can’t be deleted in order to avoid possible errors upon adding of new users</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Aug 10, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> ?ompatibility with Magento 2.4 was added</li> <li class="item"><span class="amsite-label">New</span> now the extension is covered by MFTF tests, which will help to improve its quality and stability</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Jul 09, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the reorder process for orders placed before Company Account creation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Jul 07, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the option to limit orders viewing and placement by company users with the help of appropriate role permissions</li> <li class="item"><span class="amsite-label">New</span> now you can choose which payment methods will be available for users of each specific company during checkout process</li> <li class="item"><span class="amsite-label">Improvement</span> we added an option not to set the same Customer Group to all company members (can be used if Customer Groups are assigned to customers automatically based on VAT ID)</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_5" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.0</span></span> <div class="amsite-date">Last Update: Jan 19, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Jan 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Cancel Orders. You can find the 'amasty/module-cancel-orders-hyva-compatibility' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.10</span></span> <div class="amsite-date">Last Update: May 04, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.10</span> - May 04, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the module is compatible with Magento 2.4.6</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.9</span> - Oct 19, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with placing or canceling orders with coupon was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.8</span> - Jun 09, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.7</span> - Aug 10, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> products that are used in Cart Price Rules conditions no longer affect the order cancelation process</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.6</span> - Jun 11, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the extension allows to cancel orders with statuses created by Amasty Order Status</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension’s elements match the styles of Jet Theme</li> <li class="item"><span class="amsite-label">Fix</span> now Auto Cancel Mode feature works as expected in case payment methods' names have quote marks</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.5</span> - Mar 04, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with incorrect order IDs on the Cancel Orders Grid</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.4</span> - Oct 29, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.3</span> - Oct 07, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved minor issue with disabling Auto Cancel Orders setting</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Jul 14, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Company Account was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Apr 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we inroduced auto-cancel mode: now Pending orders can be configured to get canceled automatically after a specified period of time</li> <li class="item"><span class="amsite-label">New</span> now the extension is covered by MFTF tests, which will help to improve its quality and stability</li> <li class="item"><span class="amsite-label">New</span> ability to manage all existing cron tasks on a Cron Tasks List grid in backend was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Apr 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected cancel orders view grid</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_6" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Mar 29, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Mar 29, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with the Hyvä Theme for the Quick Order. You can find the ‘amasty/module-quick-order-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.5</span></span> <div class="amsite-date">Last Update: Feb 15, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Feb 15, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we replaced the Zend classes with the Laminas</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with adding products with a numeric SKU to Quick Order</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - May 12, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with sensitivity register on the Quick Order page when searching for a product by SKU</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem occurred on the Quick Order page when exporting a CSV file containing bundle products</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the wrong bundle product prices in the searching popup</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Request a Quote so now 'Add to Quote' button is displayed as it should</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the problem that occurred when adding more than one product via the Quick Order</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the buttons translating issues in popups</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - May 11, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with adding to cart several configurable products</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the CSV-file import on the Quick Order page</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Improved Layered Navigation so now filtration on category page works as expected</li> <li class="item"><span class="amsite-label">Fix</span> an issue with a products special price was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Oct 07, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Jet Theme has been improved</li> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Customer Group Catalog extension</li> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Custom Stock Status extension</li> <li class="item"><span class="amsite-label">Improvement</span> we actualized MFTF tests</li> <li class="item"><span class="amsite-label">Fix</span> composite product options notice is displayed as expected now</li> <li class="item"><span class="amsite-label">Fix</span> we adjusted extension behavior with backorder products</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the Sign Out button being duplicated</li> <li class="item"><span class="amsite-label">Fix</span> we improved extension behavior in a multi-website environment</li> <li class="item"><span class="amsite-label">Fix</span> configurable product CSV import process has been improved</li> <li class="item"><span class="amsite-label">Fix</span> we resolved issues with the extension LESS files</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Oct 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Sep 01, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we designed a new mode for product display on Category Page: now customers can browse your store, select products, configure their options and add all chosen items together right from category pages</li> <li class="item"><span class="amsite-label">New</span> we introduced an option to download the list of added items from Quick Order grid</li> <li class="item"><span class="amsite-label">Compatibility</span> we improved integration with Amasty Request a Quote extension: now you can choose whether the button should be displayed on Quick Order grid</li> <li class="item"><span class="amsite-label">Improvement</span> we reviewed and enhanced the way grouped products are added to Quick Order grid</li> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to specify bundle items qty in imported files</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.1</span></span> <div class="amsite-date">Last Update: Jul 24, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Jul 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.4 was improved</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_7" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.2</span></span> <div class="amsite-date">Last Update: Oct 19, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - Oct 19, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with sign in was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - May 04, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved the compatibility with PHP version 8.1</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_8" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.4.0</span></span> <div class="amsite-date">Last Update: Nov 18, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.4.0</span> - Nov 18, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we introduced a 'Transaction Log' where you can track all transactions involving store credits. Please be aware that Store Credits are now displayed in Base Currency within the admin panel grids (Note: this functionality is available as part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> a new column 'Store Credits' was added to the 'All Customers' grid (Note: this functionality is available as part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> added the ability to return store credits using a Magento API request</li> <li class="item"><span class="amsite-label">Fix</span> adjusted the display of store credits on the Checkout page for the mobile version</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.2</span></span> <div class="amsite-date">Last Update: Jul 01, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.2</span> - Jul 01, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ability to import and export Store Credits Balance and History data (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> fixed the display of the number of applied store credits on the checkout page after refreshing the page</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Jun 14, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> compatibility packages for Hyvä Theme and Hyvä Checkout can now be installed separately</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - May 30, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with the Hyvä Theme and Hyvä Checkout for the Store Credit & Refund. You can find the ‘amasty/module-store-credit-product-hyva' and 'amasty/module-store-credit-hyva' and 'amasty/module-store-credit-hyva-checkout' packages for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.4</span></span> <div class="amsite-date">Last Update: Mar 06, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.4</span> - Mar 06, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5-p2, 2.4.6</li> <li class="item"><span class="amsite-label">Fix</span> fixed an issue with Store Credits applying when the 'Encourage Using Store Credit' setting is enabled</li> <li class="item"><span class="amsite-label">Fix</span> now it is possible to accrue more Store Credits than the amount of the order when making a refund </li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with a Credit Memo creating in an order that has a partial refund</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with removing several products at once when editing an order</li> <li class="item"><span class="amsite-label">Fix</span> PayPal payments are now successful when paying for an order once Store Credits are applied</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Sep 06, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the Store Credits applying when the Braintree Payments is being used was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.2</span> - Jul 06, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the possibility for using a comma to separate decimals in the Store Credit amount</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Apr 21, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Nov 12, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now the extension comes with the Buy Store Credit feature so you can allow (a) your customers to purchase Store Credit as a product from your website and (b) your store managers to place such orders for customers from the admin panel</li> <li class="item"><span class="amsite-label">New</span> We added the Admin Name column in the Transaction Grid to let a store owner always be aware of who makes changes in customer balances without digging deep in the Magento logs</li> <li class="item"><span class="amsite-label">Improvement</span> we upgraded the manual balance change workflow on the Customer -> Store Credit & Refund page so that admin users can see balance changes immediately after page reload without the necessity of switching tabs</li> <li class="item"><span class="amsite-label">Fix</span> The Credit Memo button does not appear anymore on the View Order page in cases when the whole order had been paid with an offline payment method was already fully refunded to store credit.</li> <li class="item"><span class="amsite-label">Fix</span> We eliminated incorrect balance changes in the credit memo creation workflow in cases when a user applies for an Adjustment Refund.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.1</span></span> <div class="amsite-date">Last Update: Aug 11, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Aug 11, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with the store credit decimals for the orders in the admin panel.</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the ability to accept negative store credit amount.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Jul 30, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we implemented a new feature that allows specifying the products and categories store credit can be applied to.</li> <li class="item"><span class="amsite-label">New</span> we added an option that will let you choose between whether you’d like to encourage customers to use store credit or not.</li> <li class="item"><span class="amsite-label">New</span> now the administrator can decide whether their comment will be visible for customers after the manual balance update.</li> <li class="item"><span class="amsite-label">New</span> we refactored the logic of storing the applied store credit. Now the store credit will be proportionally split between products in the order so that the right amount of it is automatically suggested during partial refunds.</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with updating applied store credit after the reward points were used.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.6</span></span> <div class="amsite-date">Last Update: Jan 14, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.6</span> - Jan 14, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> information about used store credit was added in order API</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with refund store credits for multiple currencies</li> <li class="item"><span class="amsite-label">Fix</span> we solved a few problems with credit memo creating</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with using store credit with PayPal payment method</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with changing store credits from admin area</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.5</span> - Mar 06, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with store credit deduction if order wasn't placed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Feb 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now API include new method GetStoreCreditsByCustomerId</li> <li class="item"><span class="amsite-label">Improvement</span> now translations include Store Credit Balance phrase</li> <li class="item"><span class="amsite-label">Improvement</span> we added validation for \"Add or substract a credit value\" field on admin side</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with incorrect prices after their updating on client side</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with partial payment of order by store credits</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with extension installing on Magento 2.2.2</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with applying store credits for virtual products</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with refunding store credits to customers after credit memo creating</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Dec 26, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with the refunded amount not being displayed in the Order Totals section was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - Oct 29, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with adding double store credit points on Google Chrome v. 75+</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Sep 02, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> with 3-rd party extensions was enhanced</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_9" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Feb 12, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Feb 12, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added compatibility with Live Search to the Enterprise and Cloud editions of the module. You can find the 'amasty/module-customer-group-catalog-live-search' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue where customers would see a cached guest page after logging into their account</li> <li class="item"><span class="amsite-label">Fix</span> the rules now correctly process and restrict products per the customer attributes and groups selected in these rules</li> <li class="item"><span class="amsite-label">Fix</span> we addressed the issue where customers with undefined attributes were not properly filtered by adding an ‘is undefined’ condition</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.0</span></span> <div class="amsite-date">Last Update: Sep 05, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Sep 05, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the module's performance with a large number of customer groups by optimizing the indexing process</li> <li class="item"><span class="amsite-label">Refactoring</span> the module's codebase was refactored, and the indexes were partially updated or removed (Please note: this update contains backwards incompatible changes)</li> <li class="item"><span class="amsite-label">Fix</span> the issue occurring in non-anchor categories containing a product that meets the Customer Group Catalog Rules condition was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with reindexing triggered by cron</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.11.0</span></span> <div class="amsite-date">Last Update: Apr 30, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.11.0</span> - Apr 30, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the possibility to perform CRUD actions on Customer Group Catalog Rules via REST API (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we improved the module's performance by optimizing SQL queries</li> <li class="item"><span class="amsite-label">Fix</span> we fixed compatibility with Amasty Request a Quote so now login and logout actions no longer cause errors</li> <li class="item"><span class="amsite-label">Fix</span> we replaced the Zend classes with the Laminas</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.10.0</span></span> <div class="amsite-date">Last Update: Jan 17, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.10.0</span> - Jan 17, 2024</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 1.10.0</li> <li class="item"><span class="amsite-label">Improvement</span> we enhanced indexation process on the instances with big number of products</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the indexation error when the restricted simple product belongs to different parent products</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the error that occurred upon saving the rule after setting a ‘price is 0’ condition </li> <li class="item"><span class="amsite-label">Fix</span> we fixed the mini cart issue, when the product was displayed in it, even after this product has been hidden by the rule</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.9.0</span></span> <div class="amsite-date">Last Update: Jun 28, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.9.0</span> - Jun 28, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Customer Group Catalog. You can find the 'amasty/module-groupcat-hyva' package for installing in composer suggest (Note: the compatibility is available as part of an active product subscription or Support Subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.8.7</span></span> <div class="amsite-date">Last Update: Mar 07, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.8.7</span> - Mar 07, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added billing and shipping address attributes to the conditions list</li> <li class="item"><span class="amsite-label">Improvement</span> we added Apply to Out of Stock Products setting to the rules to improve the restriction of out-of-stock products</li> <li class="item"><span class="amsite-label">Refactoring</span> we replaced deprecated Zend classes</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the styling of Hide Price radio buttons</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the restricted simple products appearing on the bundle product page</li> <li class="item"><span class="amsite-label">Fix</span> we improved the compatibility with Amasty Quick Order extension</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the redirect to link URL when hide price text is enabled</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the Unknown Operator error that occurred after selecting Is Undefined condition</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.6</span> - Sep 16, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue occurred in migration the rules with combined conditions</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.5</span> - Sep 02, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the module performance by optimizing the Customer Conditions operators so now the indexation process is enhanced (Note: after the update there could be changes in the Customer Conditions operators settings while saving the rule for the first time. Please, consider possible changes while planning update and check the values of all operators at Amasty -> Customer Group Catalog -> Rules)</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.4</span> - May 20, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.3</span> - Aug 30, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we eliminated the reason for 404 error when navigating to the Product Page</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.2</span> - Aug 13, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the ‘Add to Compare’ button that was hidden for products via Magento settings</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.1</span> - Aug 05, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.3</li> </ul> <div class="amsite-date"><span class="amsite-label">1.8.0</span> - Jun 21, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we covered the extension with MFTF tests. It will help to enhance the extension quality and stability</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.7.6</span></span> <div class="amsite-date">Last Update: Jun 16, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.7.6</span> - Jun 16, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we corrected the tooltip image for product conditions in Customer Group Catalog rules</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.5</span> - Jun 02, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue on frontend</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.4</span> - May 31, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Customer Attributes</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.3</span> - Mar 18, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the validation of index existence in the code</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.2</span> - Feb 25, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Marketplace standards</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.1</span> - Feb 19, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we implemented the performance enhancement for indexing</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the problem occurred when saving a rule in Admin panel with a big amount of customers</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with API</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.0</span> - Dec 21, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.3.5+ and 2.4</li> <li class="item"><span class="amsite-label">Compatibility</span> we made the extension compatible with Amasty Company Account</li> <li class="item"><span class="amsite-label">Improvement</span> we added the standard controls to the grid with rules for you to sort and filter the list, and apply actions to selected rules</li> <li class="item"><span class="amsite-label">Improvement</span> now you can see how the settings for Product Page Display Options are presented on the product page</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.6.6</span></span> <div class="amsite-date">Last Update: Nov 27, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.6.6</span> - Nov 27, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we updated the tooltip instruction for product conditions in Customer Group Catalog rules</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with rules behavior when customer address is changed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.5</span> - Nov 05, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with filtering for Action column on Customer Group Catalog Rules grid</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.4</span> - Oct 14, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.3.6</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.3</span> - Sep 23, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we aligned the tooltips to be displayed correctly on the configuration page for catalog rules</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.2</span> - Sep 16, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we advanced UI of a Customer Group Catalog Rule page to make your experience more convenient and pleasant. Important! The old rules configured previously should be set up again using the new interface</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.1</span> - Aug 12, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the problem with indexer reducing the number of requests to the database</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.0</span> - Jul 30, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now the extensions Reindex from Admin and Customer Group Auto Assign are added to the extension package</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.5.22</span></span> <div class="amsite-date">Last Update: Jul 28, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.5.22</span> - Jul 28, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento 2.4 was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.21</span> - Jul 27, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Quick Order was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.20</span> - Jul 09, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the module is compatible with Varnish Cache</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error appeared when calculating minimum and maximum prices for bundle products</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.19</span> - May 29, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Marketplace standards</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.18</span> - May 25, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we reviewed and enhanced the code of the extension to resolve the performance issues</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.17</span> - Apr 07, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed email templates translations</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.16</span> - Feb 12, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now in email notifications added ability to insert a Store View variable</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with deleting conditions from rules</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problems with SQL queries caching</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with address conditions in rules</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.15</span> - Aug 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> compatibility with Magento Elastic Search was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.14</span> - Aug 12, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> with Magento Elastic Search was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.13</span> - Jun 25, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Amasty 'Advanced Permissions' extension was enhanced</li> <li class="item"><span class="amsite-label">Fix</span> the issue with a hided product in the cart after logging in for Magento 2.3 was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the error on the home page for the newly created customer with a hidden category for his customer group was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the error 'Integrity constraint violation: Column 'entity_id' in where clause is ambiguous' for Magento 2.2.7 EE was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with hiding \"Add to wishlist\" and \"Add to compare\" buttons for specific SKUs was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.12</span> - Apr 08, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento 2.3.x was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.11</span> - Mar 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with tables size while creating rules in the admin area was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.10</span> - Mar 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the extension's operation with Data Base was improved. The improvement is going to reduce the number of rows in the 'amasty_groupcat_rule_customer' table. Kindly run reindex after updating the extension.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.9</span> - Feb 25, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with not correct restricting items was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.8</span> - Jan 24, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor visual improvement for the extension settings in the admin panel</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.7</span> - Dec 17, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the extension was optimized for better database performance</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.6</span> - Nov 27, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento Elastic Search was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.5</span> - Jul 25, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the misspelling issue that was leading to products not being displayed in the catalog was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.4</span> - Jul 24, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue when the hidden price remains visible in the page's meta data was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.3</span> - Jul 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the stability enhancement for certain MySQL scenarios was implemented</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.2</span> - Jul 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with products display on a category page after filtering for the outdated Magento versions was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.1</span> - Jun 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the empty array during indexing was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.0</span> - May 30, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the functionality to comply with the latest GDPR EU changes was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.4.9</span></span> <div class="amsite-date">Last Update: Apr 23, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.4.9</span> - Apr 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with reindex after the customer data modification was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.8</span> - Apr 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the multiselect validation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.7</span> - Mar 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> added the handle exception for deleted products during indexation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.6</span> - Mar 27, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the reindex in the attribute gallery</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.5</span> - Mar 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with caching</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.4</span> - Feb 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the empty email template for an administrator reply to a customer</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.2</span> - Dec 26, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the customer rules reindexing</li> <li class="item"><span class="amsite-label"></span> Compatibility with the Amasty Full Page Cache Warmer extension was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.1</span> - Nov 10, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed the issue with installation on Magento Commerce</li> <li class="item"><span class="amsite-label"></span> New feature: now, you can use a 'Get a Quote' form instead of price and manage the incoming requests on the separate grid.</li> <li class="item"><span class="amsite-label"></span> Fixed the issue with reindex in Magento Commerce (Enterprise Edition)</li> <li class="item"><span class="amsite-label"></span> Fixed the issue with serialize/unserialize data after upgrade Magento from 2.1.x to 2.2 version</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.2</span></span> <div class="amsite-date">Last Update: Sep 26, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.2</span> - Sep 26, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed the issue when restrictions were not applying instantly after customer creation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Aug 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility introduced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Aug 21, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Added Customer Conditions tab</li> <li class="item"><span class="amsite-label"></span> Compatible with Amasty Customer Attributes extension</li> <li class="item"><span class="amsite-label"></span> Added Customer index for the Group Catalog Rule</li> <li class="item"><span class="amsite-label"></span> Compatibility with Magento 2.1.8 improved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.9</span></span> <div class="amsite-date">Last Update: Jul 31, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.9</span> - Jul 31, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> JS error fix in Conditions</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.8</span> - May 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor fixes</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.7</span> - Mar 31, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Better compatibility with custom themes</li> <li class="item"><span class="amsite-label"></span> Few observers added for better extension customization possibilities</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.6</span> - Mar 21, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for situation when there are no CMS blocks created in Magento</li> <li class="item"><span class="amsite-label"></span> Minor improvement for handling errors</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.5</span> - Mar 06, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor fix for indexer</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.4</span> - Feb 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor fix for flat catalog</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Feb 20, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improvement for flat catalog mode</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.2</span> - Feb 13, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Usability improvement for store select component</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Jan 13, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor fix for applying rules to all store views</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Dec 14, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Major refactoring of the extension code to improve performance and compatibility</li> <li class="item"><span class="amsite-label"></span> New feature to allow to hide add to cart button while showing price</li> <li class="item"><span class="amsite-label"></span> New feature to allow to set priority for the rules</li> <li class="item"><span class="amsite-label"></span> Layered navigation filters now exclude restricted products which results into correct count value</li> <li class="item"><span class="amsite-label"></span> Improvements for database architecture to improve speed</li> <li class="item"><span class="amsite-label"></span> Now rule can affect several stores</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.5</span></span> <div class="amsite-date">Last Update: Nov 17, 2016</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.5</span> - Nov 17, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Extension workflow improvements for cached data for different customer groups</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.3</span> - Nov 04, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor fix for extension installation file</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.4</span> - Nov 04, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed installation error on some Mysql versions</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Jul 15, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for caching add to cart button</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Jun 28, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Attributes in navigation, which have all products restricted, will be removed</li> <li class="item"><span class="amsite-label"></span> Improvements for pages with layered navigation</li> <li class="item"><span class="amsite-label"></span> Tested for Magento 2.1</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.6</span></span> <div class="amsite-date">Last Update: Jun 17, 2016</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.6</span> - Jun 17, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improvements for single-store installations</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.5</span> - Jun 08, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Bugfix for processing rules on stores with a large number of customer groups</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Jun 07, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor improvement</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Jun 01, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor improvement for translation file</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - May 30, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for related block for configurable products</li> <li class="item"><span class="amsite-label"></span> Fix for \"Missing array key\" error</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - May 26, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor improvement</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_10" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.7.1</span></span> <div class="amsite-date">Last Update: Jun 18, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.7.1</span> - Jun 18, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved compatibility with the 'Recently Viewed' widgets so price hiding functionality works according to the general module configuration</li> <li class="item"><span class="amsite-label">Fix</span> the import issue was fixed, and now the products with hidden prices are being imported correctly</li> <li class="item"><span class="amsite-label">Fix</span> we fixed compatibility with the Amasty Advanced Search module, so now the prices in the ‘Recently Viewed’ block are hidden as they should be</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the problem with exporting products</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error that occurred on the main page when enabling developer mode</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the display of the 'Call for Price' button for child products of configurable products</li> <li class="item"><span class="amsite-label">Fix</span> we fixed compatibility with Amasty Google Invisible reCaptcha, and now the price request form submits without errors</li> </ul> <div class="amsite-date"><span class="amsite-label">1.7.0</span> - Sep 27, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Hide Price. You can find the 'amasty/module-hide-price-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Refactoring</span> we added caching and refactored the code base to improve the module performance</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Product Option Templates so now options are being displayed with the prices as they should</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the error occurred while data deployment</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with AlpineJS event listener</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.6.2</span></span> <div class="amsite-date">Last Update: May 02, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.6.2</span> - May 02, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the price missing issue on the product page when the "hide price" setting is disabled</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the error occurred when scheduling new update for category on Magento EE</li> <li class="item"><span class="amsite-label">Fix</span> now category pages open without problems when "Hide Price Text" setting is empty</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with products hidden price displaying in the code of the product page</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred while setup:di:compile command running</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.1</span> - Mar 13, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5-p2, 2.4.6</li> </ul> <div class="amsite-date"><span class="amsite-label">1.6.0</span> - Jun 23, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now you can save any number of Customer Groups when using Hide Price - Use Current Price Mode By Customer Group setting</li> <li class="item"><span class="amsite-label">Improvement</span> we switched the module to a declarative schema</li> <li class="item"><span class="amsite-label">Fix</span> the issue with price hiding for Grouped Products was resolved </li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Advanced Search so now for registered users products in popup are displayed with prices and call for price popup works as expected</li> <li class="item"><span class="amsite-label">Fix</span> the problem with updating the prices of configurable child products was resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.5.23</span></span> <div class="amsite-date">Last Update: Apr 04, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.5.23</span> - Apr 04, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Magento 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.22</span> - Dec 28, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we adjusted the way the category tree is displayed in the configuration</li> <li class="item"><span class="amsite-label">Fix</span> now products with customizable options and hidden price are added to the cart as expected</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.21</span> - Aug 18, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved the compatibility with Amasty Advanced Search extension</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the display of configurable options in dropdown in case it’s the only dropdown on PDP</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.20</span> - Jan 13, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we adjusted the extension functioning regarding Configurable Products</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with hiding of tier prices for Bundle Product options</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.19</span> - Sep 30, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we synchronized the displayed time of Get a Quote Requests creation on the grid and on the view page</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue occurred upon item moving to Wishlist from Shopping Cart</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.18</span> - Aug 10, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> ?ompatibility with Magento 2.4 was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.17</span> - Jul 14, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Quick Order and Amasty Elastic Search was improved</li> <li class="item"><span class="amsite-label">Improvement</span> now hiding of Add to Cart button is not only visual, but also restricts adding to cart from Wishlist page, Amasty Quick Order page, etc.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.16</span> - Apr 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now the extension use Laminas library instead of deprecated Zend to hide product prices</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.15</span> - Mar 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we rechecked and established correct dependency on jQuery UI library</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.14</span> - Jan 31, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we slightly improved email notification templates</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.13</span> - Nov 28, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the security level of the plugin regarding prevention of XSS injections</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with hardcoded words in email templates - now they are available for translation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.12</span> - Oct 01, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced compatibility with Request a Quote plugin even more. If the price is configured to be hidden, the customer will not see this price in quote cart as well</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.11</span> - Aug 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvements</span> minor improvements were implemented</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.10</span> - Aug 07, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> minor issues were resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.9</span> - Jul 11, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Custom Form extension</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with adding hided products from My Wish List page</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.8</span> - Jul 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with mass delete action was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.7</span> - Jun 10, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Amasty Request a Quote extension was improved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with Zend_Dom_Query package was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.6</span> - Apr 19, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now it allows sending admin notifications for several users</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.5</span> - Mar 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Request a Quote extension was added</li> <li class="item"><span class="amsite-label">Improvement</span> ability to close 'Call for price' popup by click on the top-right cross button was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.4</span> - Jan 10, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with Hide Price Text field XSS vulnerability was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.3</span> - Dec 21, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento 2.3.0 was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.2</span> - Dec 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with configuration section was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.1</span> - Dec 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor improvements were made</li> </ul> <div class="amsite-date"><span class="amsite-label">1.5.0</span> - Dec 03, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to create custom 'Quote Request' form of various types to effectively collect customer info, e.g. to add the zip code or any other field, adjust Google Maps element or use fields dependency for the 'Call for price' pop-up was added. Amasty Custom Form extension is required for this feature</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.4.1</span></span> <div class="amsite-date">Last Update: Nov 29, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.4.1</span> - Nov 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with module config settings was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.0</span> - Nov 20, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> allows hiding the product price for the specified custom stock status only. Amasty Custom Stock Status extension is required for this feature</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.4</span></span> <div class="amsite-date">Last Update: Oct 31, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.4</span> - Oct 31, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with hiding tier prices was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.3</span> - Oct 25, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with a flat table for products was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.2</span> - Sep 06, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the ability to hide the 'Add to Cart' button was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Aug 30, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the problem with hiding the 'Add to Cart' button was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Aug 24, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to replace the 'Add to Cart' button in the 'Request a Quote' popup was added</li> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with the Amasty Color Swatches Pro extension was enhanced</li> <li class="item"><span class="amsite-label">Fix</span> the problem with the wishlist and compare pages was resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.2</span></span> <div class="amsite-date">Last Update: Jul 19, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.2</span> - Jul 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor code improvement was made</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Jul 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> minor issue was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Jul 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor enhancement in module configuration was made</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Jun 11, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the functionality to comply with the latest GDPR EU changes was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.3</span></span> <div class="amsite-date">Last Update: May 21, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.3</span> - May 21, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> Information section is added. Now you can see the version of the installed extension, available updates, User Guide link, conflicts, and other useful data right on the module Configuration page</li> <li class="item"><span class="amsite-label">Fix</span> an issue with encoding was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved the 'add to cart' selector form functionality</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Feb 28, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with conflict when using several fancyboxes on Magento store</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Feb 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Added the 'Hide Price' settings to the 'Update attributes' on the product grid in backend</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.6</span></span> <div class="amsite-date">Last Update: Jan 23, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.6</span> - Jan 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Allows to show the price and hide the 'Add to cart' button</li> <li class="item"><span class="amsite-label"></span> Compatibility with Amasty Quick View extension is added</li> <li class="item"><span class="amsite-label"></span> The fancybox library is upgraded</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.5</span> - Dec 21, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the Add to cart price button visible during the page load</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Sep 13, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> added an ability to select an empty value of category ID or customer group ID in the extension settings</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Sep 11, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for price in metadata</li> <li class="item"><span class="amsite-label"></span> Fix for Hide Price settings display in Admin area</li> <li class="item"><span class="amsite-label"></span> Fixes for email templates</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - Aug 30, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility introduced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Aug 08, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Export issue was fixed.</li> <li class="item"><span class="amsite-label"></span> Amasty Invisible Captcha compatibility improved.</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_11" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.10.0</span></span> <div class="amsite-date">Last Update: Aug 28, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.10.0</span> - Aug 28, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with the Hyvä Theme for the Color Swatches Pro. You can find the 'amasty/module-color-swatches-pro-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.8</span></span> <div class="amsite-date">Last Update: Jul 01, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.8</span> - Jul 01, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added Qty Increments value to the Reloadable Information section</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the Display Last Attribute in Rows - For Specified Products setting that caused a console error</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the Undefined variable: selectedProduct error</li> <li class="item"><span class="amsite-label">Fix</span> we improved the compatibility with Amasty Improved Layered Navigation extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.7</span> - Mar 15, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5-p2, 2.4.6</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.6</span> - Nov 04, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we updated the deprecated jQuery functions</li> <li class="item"><span class="amsite-label">Fix</span> the issue with images swiping in the mobile version was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred on a product page when SKU for a simple product which is preselected in a configurable product was changed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.5</span> - Jul 06, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> <li class="item"><span class="amsite-label">Improvement</span> we switched the module to a declarative schema</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Product Labels so now labels are displayed on category pages as they should</li> <li class="item"><span class="amsite-label">Fix</span> the issue with displaying preselected products during filtration on category pages was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.4</span> - Jan 17, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added an option to display swatch title in the product matrix</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with zoom not working after the initial page load</li> <li class="item"><span class="amsite-label">Fix</span> we adjusted the behavior of dropdown options with out of stock child products</li> <li class="item"><span class="amsite-label">Fix</span> now extension reloads product information only when all configurable options are selected when using dropdown attributes</li> <li class="item"><span class="amsite-label">Fix</span> we fixed preselect behavior when the first option is out of stock</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.3</span> - Nov 09, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Jet Theme</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.2</span> - Sep 02, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the product page error for products without images</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.1</span> - Aug 19, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we adjusted the hiding of out-of-stock configurable options in a dropdown</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the display of a product’s gallery on PDP</li> <li class="item"><span class="amsite-label">Fix</span> now dropdown options are getting preselected as expected</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Mar 24, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we refactored the extension code to transfer Group Attributes functionality to the independent module Amasty Group Options</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.8</span></span> <div class="amsite-date">Last Update: Feb 19, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.8</span> - Feb 19, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now the lightbox is working even if there is only one image assigned to the product</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the delete confirmation popup title</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.7</span> - Feb 01, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with unexpected crossing out of in-stock options for Configurable Products</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the display of simple products' prices in swatch titles</li> <li class="item"><span class="amsite-label">Fix</span> now the swatches are not getting selected upon hovering over</li> <li class="item"><span class="amsite-label">Fix</span> now the editing of product from the checkout cart page is performed as expected if product matrix is involved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.6</span> - Sep 01, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility with Amasty Quick Order extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.5</span> - Aug 11, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.4 was added</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Amasty Jet Theme</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.4</span> - Jul 08, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with incorrect display of out of stock items in product matrix</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the malfunctioning of sorting on Group Attributes grid</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.3</span> - May 27, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we slightly improved Grouped Options grid</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.2</span> - May 11, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Elasticsearch was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.1</span> - Apr 02, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty One Step Checkout was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - Apr 01, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> GraphQL read compatibility was added for configurable products and product reloadable information settings</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.4</span></span> <div class="amsite-date">Last Update: Mar 10, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.4</span> - Mar 10, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we rechecked and established correct dependency on jQuery UI library</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.3</span> - Feb 19, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Request a Quote extension was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.2</span> - Feb 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with Magento Inventory was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.1</span> - Feb 03, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we significantly improved extension's performance</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Jan 04, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Ajax Cart was improved</li> <li class="item"><span class="amsite-label">New</span> we introduced an option to display simple product SKU in product matrix</li> <li class="item"><span class="amsite-label">Improvement</span> we implemented performance enhancement</li> <li class="item"><span class="amsite-label">Fix</span> we resolved multiple issues related to frontend view and backend product configuration</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.6</span></span> <div class="amsite-date">Last Update: Oct 07, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.6</span> - Oct 07, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we reviewed and enhanced the plugin’s code</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.5</span> - Aug 19, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.2.5 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.4</span> - Jul 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with grouped options was resolved</li> <li class="item"><span class="amsite-label">Fix</span> issue with child configurable products was fixed</li> <li class="item"><span class="amsite-label">Fix</span> minor fixes were resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.3</span> - Mar 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> a compatibility with Amasty Pre Order extension was improved</li> <li class="item"><span class="amsite-label">Fix</span> a minor issue with grouped options was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.2</span> - Jan 28, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Google Rich Snippets and SEO Toolkit extensions was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Jan 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Ajax Shopping Cart extension was improved</li> <li class="item"><span class="amsite-label">Fix</span> an issue with some filter items created using the \"Manage Group Attributes\" displayed even they give 0 results was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Nov 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now, the product matrix subtotal is displayed between the selection and the 'Add to cart' button</li> <li class="item"><span class="amsite-label">Improvement</span> minor usability and design improvements were made</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.9</span></span> <div class="amsite-date">Last Update: Nov 20, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.9</span> - Nov 20, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento 2.3.0-alpha was added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.8</span> - Nov 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Ajax Shopping Cart extension was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.7</span> - Oct 12, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with an unselected attribute remaining in the URL was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with the 'Enable Swipe Effect for Main Image in Mobile' setting and zoom feature on mobile version was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.6</span> - Oct 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the work of share link with one dropdown and one swatches was enhanced</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Product Labels extension was improved. Now it allows to change the product label upon the simple product selection for configurable products</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Out of Stock Notification extension was improved</li> <li class="item"><span class="amsite-label">Fix</span> an issue with change image on hover on the product page was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.5</span> - Sep 03, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the styles and templates refactoring was made</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.4</span> - Aug 31, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to set a slider for the swatches was added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.3</span> - Aug 17, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the product matrix work with quantity was enhanced</li> <li class="item"><span class="amsite-label">Improvement</span> the Share URL feature was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.2</span> - Jul 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> product page optimization for mobile was made</li> <li class="item"><span class="amsite-label">Improvement</span> configuration page was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Jun 22, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with zoom on a product page was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Jun 15, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now, the module allows to preselect product attributes on the category page</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.2</span></span> <div class="amsite-date">Last Update: Jun 08, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.2</span> - Jun 08, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Amasty Ajax Shopping Cart extension was improved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with displaying price in dropdown for disabled options was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Jun 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> customer is able to view the additional images on mobile using the swipe function</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Jun 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> display product matrix for configurable items to help customers quickly add multiple child products to cart</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.11</span></span> <div class="amsite-date">Last Update: May 29, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.11</span> - May 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> a problem with slick gallery was resolved</li> <li class="item"><span class="amsite-label">Fix</span> an issue with the product info not reloaded after dropdown change was fixed</li> <li class="item"><span class="amsite-label">Fix</span> an issues on IE browser were resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.10</span> - May 21, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with image responsiveness on mobile was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.9</span> - Apr 26, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with incorrect backend model</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.8</span> - Apr 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with missing Share link for the dropdowns</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.7</span> - Apr 12, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the 'configurable preselect' feature when gallery was loaded before the swatches</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.6</span> - Apr 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Information section is added. Now you can see the version of installed extension, available updates, User Guide link, conflicts and other useful data right on the module Configuration page</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.5</span> - Mar 22, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor bug fixes</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.4</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Added the check for the zoom to be enabled when reloading an image by mouse hover</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.3</span> - Mar 06, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with minor java script error related to dropdown usage</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.2</span> - Mar 01, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the unslick not working for the slow pages when the contend hadn't loaded before java script started working</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.1</span> - Feb 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Added the compatibility with the video image type</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Feb 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> added the possibility to preselect the options of the configurable product i.e. the first options or the cheapest simple product</li> <li class="item"><span class="amsite-label">New</span> an image flipper feature is added. It allows to quickly view an alternate image on the catalog products listing simply by placing mouse over the product image</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.0</span></span> <div class="amsite-date">Last Update: Feb 09, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Feb 09, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Allows to show the out-of-stock products as crossed swatches. After the version 2.2.0 Magento has removed the out of stock swatches feature - the functionality with crossed swatches. We have implemented this feature in the extension.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.3</span></span> <div class="amsite-date">Last Update: Jan 05, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.3</span> - Jan 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the missing gallery for RTL direction</li> <li class="item"><span class="amsite-label"></span> Fixed an issue with loading the simple product images at the end of the gallery</li> <li class="item"><span class="amsite-label"></span> Improved the compatibility with M2.1.5 (image reload with zoom enabled)</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.2</span> - Dec 22, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor JS fixes</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.1</span> - Dec 07, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.1 compatibility improvements</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Dec 06, 2017</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Added the Zoom (Outside / Inside / Lens) functionality that allows to see every detail of the product</li> <li class="item"><span class="amsite-label">New</span> Added the Lightbox effect when opening full-size images</li> <li class="item"><span class="amsite-label">New</span> Added the Carousel to show the product thumbnails</li> <li class="item"><span class="amsite-label">New</span> Allows to change the main product image on mouse hover</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.1</span></span> <div class="amsite-date">Last Update: Oct 17, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Oct 17, 2017</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the feature with displaying the simple products prices below corresponding swatches works for an unlimited number of attributes.</li> <li class="item"><span class="amsite-label"></span> Minor fixes</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Sep 28, 2017</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Change the product image on mouse hover</li> <li class="item"><span class="amsite-label">New</span> Display the selected simple product options in cart and checkout</li> <li class="item"><span class="amsite-label">New</span> Group the associated colors and shows relevant items in the search result</li> <li class="item"><span class="amsite-label">New</span> Show simple products' prices in drop-downs</li> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility tested and confirmed</li> <li class="item"><span class="amsite-label"></span> Compatibility with Amasty One Step Checkout extension</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.3</span></span> <div class="amsite-date">Last Update: Mar 29, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.3</span> - Mar 29, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Minor improvement</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Mar 16, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improvement for reloading block of attributes</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Mar 10, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with the One Step Checkout extension improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Feb 15, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Add SKU for reloadable information when specific configuration selected</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_12" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.0</span></span> <div class="amsite-date">Last Update: Nov 01, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Nov 01, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Sales Reps and Dealers. You can find the 'amasty/module-sales-reps-and-dealers-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.16</span></span> <div class="amsite-date">Last Update: Jun 13, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.16</span> - Jun 13, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.6, 2.4.6-p1</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.15</span> - Jun 17, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with PHP up to 8.1</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.14</span> - Nov 30, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with assigning customers to dealers via Firefox browser</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.13</span> - Jul 20, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the customers' count on the ‘Create New Order for New Customer’ grid</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.12</span> - May 31, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the missing dealer setting in the customer’s account information</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.11</span> - Feb 08, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added a new variable to the sales email templates, so you can add a Dealer Contact Name to the sales email</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.10</span> - Oct 20, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor code improvements were implemented to enhance the extension security</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.9</span> - Aug 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Marketplace standards</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.8</span> - Jul 31, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento 2.4 was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.7</span> - Jun 01, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> now dealers see the quotes created by customers who are assigned to these dealers</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.6</span> - Apr 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the module is compatible with B2B Shared Catalogs</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with permissions check for creating orders from customers</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with export of orders and customers</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.5</span> - Jan 21, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with sending email notifications to dealers</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.4</span> - Oct 28, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with restricting customers and orders for dealers at the Dashboard</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with editing customer by direct link for restricted dealer</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with displaying restricted customers on grid</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with mass actions on Magento 2.3.x</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Jul 01, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with empty values in the dealer drop down in customer's account information for Magento 2.3.1</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.2</span> - Jun 11, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the control for an admin for allowing dealers to see and create orders for the whole scope of customers was added</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Jan 22, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the defaulting dealer was added as the pre-selected value in the dropdown for customers with no assigned on the frontend dealer</li> <li class="item"><span class="amsite-label">Fix</span> inactive dealers were removed from the dealer selecting pop-up</li> <li class="item"><span class="amsite-label">Fix</span> the issue with assigning a customer to an admin while editing the customer in the backend was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - May 28, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the filter to a template on a checkout page to display the WYSIWYG variables was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.0</span></span> <div class="amsite-date">Last Update: Feb 20, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Feb 20, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to show all customers and orders attached to a sales representative was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.3</span></span> <div class="amsite-date">Last Update: Jun 26, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Jun 26, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Add {{var order.getOrderDealer()}} to order, invoice, creditmemo, shipment emails to add dealer's name</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - Apr 12, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for missing values when exporting orders</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Nov 21, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with Magento 2.1.x</li> <li class="item"><span class="amsite-label"></span> A number of minor fixes</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_13" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.11.1</span></span> <div class="amsite-date">Last Update: Dec 10, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.11.1</span> - Dec 10, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> enhanced the module's compatibility with GraphQL Application Server</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.0</span> - Aug 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to set up rules priority (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to discard subsequent rules (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> fixed the issue with applying restriction rules when spaces are used in the city field</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.10.0</span></span> <div class="amsite-date">Last Update: Mar 19, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.10.0</span> - Mar 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Hyvä Checkout was added. You can find the 'amasty/module-ship-restriction-hyva-checkout' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> the issue with incorrect data in the confirmation popup for deleting Shipping Areas was fixed</li> <li class="item"><span class="amsite-label">Fix</span> we solved the Checkout page loading issue</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.1</span></span> <div class="amsite-date">Last Update: Feb 12, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.1</span> - Feb 12, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with PHP 8.0 and higher</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Dec 11, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added new variables that allow displaying product names that triggered restrictions in the ‘Custom Restriction Message’ (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we improved the module's performance to enhance its rules functionality when working with a large number of conditions</li> <li class="item"><span class="amsite-label">Improvement</span> we added sanitization for the 'Zip/Postcode' text area field </li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with the ability to select restricted shipping methods when the PayPal Payments is being used</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.2</span></span> <div class="amsite-date">Last Update: May 25, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.2</span> - May 25, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Shipping Rules so now the 'source' condition work as it should</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.1</span> - May 18, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred on the Checkout page when a product matching the Shipping Restrictions rule is added to the cart and Magento In-Store Delivery functionality is enabled</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - May 15, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Shipping Restrictions. You can find the 'amasty/module-ship-restriction-hyva' package for installing in composer suggest (Note: the compatibility is available as part of an active product subscription or Support Subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.1</span></span> <div class="amsite-date">Last Update: Apr 18, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.1</span> - Apr 18, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with Custom Restriction Message displaying for UPS or Federal Express Shipping methods</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Mar 28, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now the {delivery_name} and {delivery_method} variables can be added to the restriction messages</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue occurred in case of using {all-products} variable in Custom Restriction Message </li> <li class="item"><span class="amsite-label">Fix</span> we resolved the problem with using restriction method by condition Billing Address Country</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.3</span></span> <div class="amsite-date">Last Update: Aug 29, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.3</span> - Aug 29, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred while running setup:upgrade command</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.2</span> - Apr 12, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.3-p2 and 2.4.4</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with the method’s default error message being enabled</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Dec 06, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the issue during code compilation if there’s no Magento MSI installed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Nov 02, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ‘Source’ condition to the shipping restriction rules. Now you can set them up taking into account Inventory Sources your goods will be shipped from</li> <li class="item"><span class="amsite-label">New</span> we optimized the functionality of restriction messages and made it possible to show only one message if the whole carrier is restricted</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.7</span></span> <div class="amsite-date">Last Update: Feb 10, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.7</span> - Feb 10, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with rule data saving after mass action from grid</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with ability to choose restricted shipping method on checkout</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.6</span> - Jan 22, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with extension install</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.5</span> - Dec 22, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.4</span> - Dec 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF-tests were updated.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.3</span> - Nov 20, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we implemented a stability enhancement for MFTF tests on Magento 2.3.3</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.2</span> - Aug 12, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now extension covered by Magento Functional Testing Framework tests</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Jul 16, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> compatibility with 3rd party extensions were improved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with error message on cart and checkout pages was resolved</li> <li class="item"><span class="amsite-label">Fix</span> console errors while restricting shipping methods on cart page were fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with displaying selected shipping methods on shipping restrictions rules grid was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Jun 18, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> extension was covered by unit tests</li> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Standards</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.5</span></span> <div class="amsite-date">Last Update: May 15, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.5</span> - May 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with validation condition \"is not\" for shipping areas was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.4</span> - Apr 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with role permissions was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with validation for All Store View option was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with validation configurable products was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.3</span> - Mar 18, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> \"?ustom options SKU\" condition option for products was added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.2</span> - Mar 05, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with saving rules for admin with restricted websites scope was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Feb 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> UI components in rules grid was enhanced</li> <li class="item"><span class="amsite-label">Improvement</span> notification after applying Coupon Code on Checkout page was removed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Feb 06, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Shipping Areas feature was added. Create your custom Shipping Areas to get more geo flexibility when setting your shipping restrictions.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.1</span></span> <div class="amsite-date">Last Update: Jan 16, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.1</span> - Jan 16, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue after reordering was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Dec 26, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> overall usability improved.</li> <li class="item"><span class="amsite-label">Improvement</span> new hints and tooltips added.</li> <li class="item"><span class="amsite-label">Improvement</span> UI components introduced.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.5</span></span> <div class="amsite-date">Last Update: Nov 19, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.5</span> - Nov 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with subtotal calculation in admin area was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.4</span> - Sep 27, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with upgrading extension was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.3</span> - Sep 24, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the ability to use several coupon codes for the cart price rules was added</li> <li class="item"><span class="amsite-label">Improvement</span> the usability for the shipment restriction was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.2</span> - Aug 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with multi-currency conversion was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Jul 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with loading checkout page was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Jun 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now, the extension incorporates the Advanced Conditions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.1</span></span> <div class="amsite-date">Last Update: Jun 05, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.1</span> - Jun 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Information section is added. Now you can see the version of installed extension, available updates, User Guide link, conflicts and other useful data right on the module Configuration page</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - May 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Localization updated.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.7</span></span> <div class="amsite-date">Last Update: Apr 20, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.7</span> - Apr 20, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved compatibility with Amasty Gift Card extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.6</span> - Mar 28, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Stability improvements</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Mar 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for system module Common Rules, no changes in Shipping Restrictions logic</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with orders-related conditions</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Feb 08, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Amasty Gift Card compatibility improved</li> <li class="item"><span class="amsite-label"></span> Magento 2.2.2 compatibility improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Dec 01, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The missing advanced conditions were fixed.</li> <li class="item"><span class="amsite-label"></span> The issue when multiple rules were not applied at the same time was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Nov 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved Magento 2.2 compatibility and migration from older versions</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Nov 16, 2017</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the option 'Coupons' was updated: now it's possible to use coupons from multiple rules</li> <li class="item"><span class="amsite-label">New</span> Purchase History can now be used in Conditions</li> <li class="item"><span class="amsite-label"></span> Extension architecture changes</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.7</span></span> <div class="amsite-date">Last Update: Oct 05, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.7</span> - Oct 05, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility introduced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.6</span> - Aug 09, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Error handling improvement.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.5</span> - Jan 13, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Internal update. New template added to minimize conflicts</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Sep 28, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Code is organized according to the new Magento standards</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Sep 26, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Now compatible with Magento 2.1</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - Jul 15, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed City and Street conditions</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Jul 06, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed rules by customer's shipping address</li> <li class="item"><span class="amsite-label"></span> Fixed merge of .css files</li> <li class="item"><span class="amsite-label"></span> Added translation file</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_14" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.1</span></span> <div class="amsite-date">Last Update: Feb 20, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Feb 20, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> resolved the issue with payment methods not displaying on the Checkout page</li> <li class="item"><span class="amsite-label">Fix</span> fixed a console error that occurred when navigating to Checkout with an added product</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Dec 24, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Hyvä Checkout was added. You can find the 'amasty/payrestriction-hyva-checkout' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.1</span></span> <div class="amsite-date">Last Update: Nov 28, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Nov 28, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the loading speed of the checkout page, when Amasty One Step Checkout module is enabled</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Oct 14, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added a ‘Restriction Message’ setting to show under the restricted payment method</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with a payment restriction not being shown after updating the cart</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the sorting of the payment methods at the checkout page</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with the ‘NOT LOGGED IN’ customer group display on the payment restriction grid</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.12</span></span> <div class="amsite-date">Last Update: Apr 12, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.12</span> - Apr 12, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.3-p2 and 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.11</span> - Oct 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.10</span> - Apr 22, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> with Magento 2.3.5 was tested and confirmed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.9</span> - Mar 12, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with extensions installing</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem conditions based on product attributes</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with conditions for virtual products</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.8</span> - Dec 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF-tests were updated.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.7</span> - Sep 25, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we implemented a stability enhancement for MFTF tests</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.6</span> - Sep 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with filtering restriction rules on grid by id was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.5</span> - Sep 02, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now extension covered by Magento Functional Testing Framework tests</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.4</span> - Aug 12, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with conditions validation was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.3</span> - Jun 18, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with error while rule creating was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.2</span> - Jun 17, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with compilation failing was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.1</span> - Apr 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with saving rules for admin with restricted websites scope was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with validation configurable products was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Dec 26, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> minor adjustments.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.6</span></span> <div class="amsite-date">Last Update: Dec 18, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.6</span> - Dec 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> installation error caused by incompatibility with php7.2 was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.5</span> - Nov 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with conditions saving was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.4</span> - Nov 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with upgrading extension was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.3</span> - Sep 24, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the ability to use several coupon codes for the cart price rules was added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.2</span> - Aug 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with multi-currency conversion was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Jul 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with loading checkout page was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Jun 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now, the extension incorporates the Advanced Conditions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.1</span></span> <div class="amsite-date">Last Update: Jun 05, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.1</span> - Jun 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Information section is added. Now you can see the version of installed extension, available updates, User Guide link, conflicts and other useful data right on the module Configuration page</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - May 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Localization updated.</li> <li class="item"><span class="amsite-label">New</span> PayPal Express payment method support implemented.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.7</span></span> <div class="amsite-date">Last Update: Apr 20, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.7</span> - Apr 20, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved compatibility with Amasty Gift Card extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.6</span> - Mar 28, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Stability improvements</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Mar 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fix for system module Common Rules, no changes in Payment Restrictions logic</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with orders-related conditions</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Feb 08, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with Magento 2.2.2 was improved</li> <li class="item"><span class="amsite-label"></span> Compatibility with Amasty Gift Card was improved</li> <li class="item"><span class="amsite-label"></span> Fixed the issue with rules that were not worked correctly when the customer groups condition was applied.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Dec 01, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The ACL issue was fixed.</li> <li class="item"><span class="amsite-label"></span> The missing advanced conditions were fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Nov 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved Magento 2.2 compatibility and migration from older versions</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Nov 16, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Extension architecture changes</li> <li class="item"><span class="amsite-label">New</span> Subtotal condition can be set up to include Tax and Discounts</li> <li class="item"><span class="amsite-label">New</span> Purchase History can now be used in Conditions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.3</span></span> <div class="amsite-date">Last Update: Oct 06, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Oct 06, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility introduced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - Feb 13, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility for Magento 2.1.3 and Enterprise Edition improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - May 24, 2016</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Various minor bugfixes</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_15" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.0</span></span> <div class="amsite-date">Last Update: Dec 18, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Dec 18, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Customer Group Auto Assign. You can find the 'amasty/module-customer-group-auto-assign-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.8</span></span> <div class="amsite-date">Last Update: Aug 10, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.8</span> - Aug 10, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5</li> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the cronjob performance</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with creating a customer group via API</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.7</span> - Mar 29, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with customers address field validation</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.6</span> - Mar 05, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.5</span> - Nov 09, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added a new setting to the customer group editing page to let you show the group at customer accounts on storefront</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.4</span> - Oct 25, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now you can set up a rule for customer group auto-assign based on Ordered Products By Condition</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the calendar when configuring date conditions</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.3</span> - Jul 24, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with the general setting used for different stores on Magento Commerce 2.3.5</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.2</span> - May 27, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the performance of ‘amasty_groupassign_update’ cron job</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the priority of rules</li> </ul> <div class="amsite-date"><span class="amsite-label">1.0.1</span> - Apr 21, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with loading the default configuration</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_16" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">3.4.0</span></span> <div class="amsite-date">Last Update: Jan 27, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">3.4.0</span> - Jan 27, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the extension now fully complies with WCAG 2.1 level AA requirements</li> <li class="item"><span class="amsite-label">Improvement</span> optimized method calls to enhance performance</li> <li class="item"><span class="amsite-label">Fix</span> corrected the order of attachment display across different store views</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">3.3.2</span></span> <div class="amsite-date">Last Update: Oct 02, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">3.3.2</span> - Oct 02, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the error that occurred while updating to the latest version with empty customer group field</li> </ul> <div class="amsite-date"><span class="amsite-label">3.3.1</span> - Sep 12, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added a ‘'Customer Groups’' column to the Product Management grid (Note: this functionality is available as part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we increased the size of the ‘'Customer Groups’' database column, so now they are correctly saved if an attachment has a big number of customer groups assigned</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error that occurred when adding a product attachment via API</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred while updating and setup:upgrade command running</li> </ul> <div class="amsite-date"><span class="amsite-label">3.3.0</span> - Sep 12, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added a 'Customer Groups' column to the Product Management grid (Note: this functionality is available as part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we increased the size of the ‘'Customer Groups’' database column, so now they are correctly saved if an attachment has a big number of customer groups assigned</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error that occurred when adding a product attachment via API</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">3.2.2</span></span> <div class="amsite-date">Last Update: Aug 28, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">3.2.2</span> - Aug 28, 2024</div><ul class="items"></ul> <div class="amsite-date"><span class="amsite-label">3.2.1</span> - Apr 18, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7</li> </ul> <div class="amsite-date"><span class="amsite-label">3.2.0</span> - Mar 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to add Alt Tag to Product Attachments Icons </li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error that occurred when using Mass Attachment Import</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">3.1.1</span></span> <div class="amsite-date">Last Update: Sep 08, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">3.1.1</span> - Sep 08, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with attachments displaying in emails for Bundle products</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the imported files counter work</li> </ul> <div class="amsite-date"><span class="amsite-label">3.1.0</span> - Aug 28, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with Hyvä Theme for Product Attachments. You can find packages for installing in composer suggest: 'amasty/module-product-attachment-hyva' for Lite version and additionally 'amasty/module-product-attachment-pro-hyva' for Pro version (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">3.0.0</span></span> <div class="amsite-date">Last Update: Jun 19, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">3.0.0</span> - Jun 19, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to add Link type attachments via Mass Import (Please note: after update the extension is backward incompatible so third party customizations for this functionality on your instance may be incompatible with the module)</li> <li class="item"><span class="amsite-label">Improvement</span> now it is possible to add Page type attachments via Mass Import (available in the Pro Version of the Product Attachments Solution)</li> <li class="item"><span class="amsite-label">Improvement</span> we added icon image for the Page type attachment (available in the Pro Version of the Product Attachments Solution)</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the problem with widget attachments displaying in the widget options while a new page is being created</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.0</span></span> <div class="amsite-date">Last Update: Jan 17, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Jan 17, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now it is possible to automatically check Link and Page attachment types to their availability</li> <li class="item"><span class="amsite-label">Improvement</span> new attachment type "Page" was added, so now it is possible to attach not only file links, but also web pages links (available in the Pro Version of the Product Attachments Solution)</li> <li class="item"><span class="amsite-label">Refactoring</span> we added an extension point to the core module for better Pro features implementing</li> <li class="item"><span class="amsite-label">Fix</span> the issue with an attachment adding while new category creation was resolved</li> <li class="item"><span class="amsite-label">Fix</span> now Product Attachments are also duplicated when the 'Save & Duplicate' product action performing</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred while updating to the module latest version and setup:upgrade command running</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.1</span></span> <div class="amsite-date">Last Update: Jun 01, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Jun 01, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> for all Amasty solutions, we have compiled separate packages, each of which includes a unique set of extensions. So that you can more easily find all available updates for your package in the Change Log tab, please find the menu on the left and choose the extension(s) included in the package. (A list of extensions included in a package can be found under the Description tab)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.0</span></span> <div class="amsite-date">Last Update: Mar 21, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.0</span> - Mar 21, 2022</div><ul class="items"></ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_17" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.12.4</span></span> <div class="amsite-date">Last Update: Nov 05, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.12.4</span> - Nov 05, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we increased performance of the Customers grid when containing a large number of record</li> <li class="item"><span class="amsite-label">Fix</span> resolved issue with website redirection after successful login via Facebook</li> <li class="item"><span class="amsite-label">Fix</span> corrected display of Social Login popup when the 'Write review' button is pressed</li> <li class="item"><span class="amsite-label">Fix</span> products in the 'Compare Products' list now display correctly based on the customer session</li> </ul> <div class="amsite-date"><span class="amsite-label">1.12.3</span> - Sep 04, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor adjustments in the admin UI and settings display</li> </ul> <div class="amsite-date"><span class="amsite-label">1.12.2</span> - May 30, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with hiding the password in the authorization window when the 'Enable Ajax Popup' setting is enabled</li> </ul> <div class="amsite-date"><span class="amsite-label">1.12.1</span> - Apr 17, 2024</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 1.12.1</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7</li> </ul> <div class="amsite-date"><span class="amsite-label">1.12.0</span> - Mar 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ability for customers to log in via Pinterest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to specify LinkedIn Authentication method according to new LinkedIn sign-in version using OpenID Connect</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the non-clickable link in the account confirmation system message</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.11.2</span></span> <div class="amsite-date">Last Update: Jan 03, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.11.2</span> - Jan 03, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ability for customers to log in via Microsoft Single Sign-On for the Pro version of the module (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension fully complies with WCAG 2.1 level AA requirements</li> </ul> <div class="amsite-date"><span class="amsite-label">1.11.1</span> - Sep 14, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we updated the hybridauth/hybridauth library to the latest version</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with the 'Create an Account' button behavior</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the Google Invisible reCaptcha compatibility</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with “Date of Birth” and “Gender” information obtaining in case registration via Facebook</li> </ul> <div class="amsite-date"><span class="amsite-label">1.11.0</span> - Sep 04, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Hyvä Theme for Social Login. You can find the 'amasty/module-social-login-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.10.7</span></span> <div class="amsite-date">Last Update: May 16, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.10.7</span> - May 16, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the confirmation link issue occurred during the registration confirmation</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the problem with the "Close session" function work when remote shopping assistance is being used </li> <li class="item"><span class="amsite-label">Fix</span> we resolved the Social Login displaying form problem on the Checkout page when a virtual product was added to the cart</li> </ul> <div class="amsite-date"><span class="amsite-label">1.10.5</span> - Aug 15, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred during authorization via Facebook</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Jet Theme</li> <li class="item"><span class="amsite-label">Fix</span> the issue with the Sales Order Grid loading speed was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we corrected Date of Birth field displaying on the registration popup for mobile view</li> </ul> <div class="amsite-date"><span class="amsite-label">1.10.4</span> - Aug 09, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.5</li> </ul> <div class="amsite-date"><span class="amsite-label">1.10.3</span> - Jun 03, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the authorization via social networks problem </li> <li class="item"><span class="amsite-label">Fix</span> the issue with shipment pdf files creating was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the two popups appearance in case of authorization on checkout</li> </ul> <div class="amsite-date"><span class="amsite-label">1.10.2</span> - May 17, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> for all Amasty solutions, we have compiled separate packages, each of which includes a unique set of extensions. So that you can more easily find all available updates for your package in the Change Log tab, please find the menu on the left and choose the extension(s) included in the package. (A list of extensions included in a package can be found under the Description tab)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.0.0</span></span> <div class="amsite-date">Last Update: Apr 25, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.0.0</span> - Apr 25, 2022</div><ul class="items"></ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_18" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.5.0</span></span> <div class="amsite-date">Last Update: Jun 27, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.5.0</span> - Jun 27, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with the Hyvä Theme for the Product Option Templates. You can find the 'amasty/module-prot-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.4.7</span></span> <div class="amsite-date">Last Update: May 18, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.4.7</span> - May 18, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.6</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.6</span> - Dec 06, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved the compatibility with Magento 2.4.5</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.5</span> - Jul 18, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.4</li> <li class="item"><span class="amsite-label">Improvement</span> we switched the module to a declarative schema</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.4</span> - Dec 30, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved issue with Mass Assign Templates on Magento Enterprise edition</li> <li class="item"><span class="amsite-label">Fix</span> we resolved issue with applying Font Size and Font Color to date options</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.3</span> - Oct 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> MFTF tests were moved to additional packages particular for Magento 2.3.5+ and Magento 2.4.0+</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.2</span> - Sep 08, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4</li> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced the compatibility with Amasty Extended Product Grid with Editor</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the list of available options displayed in dependency tab upon template editing</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.1</span> - Apr 09, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvment</span> we covered dependency functionality of the extension with MFTF</li> <li class="item"><span class="amsite-label">Fix</span> we resolved issue related to creating order process from admin</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.0</span> - Mar 31, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now it's possible to duplicate the option with all values and dependencies</li> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the UX of dependency functionality to make it more convenient to use and intuitively understandable</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.1</span></span> <div class="amsite-date">Last Update: Mar 23, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Mar 23, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento Enterprise version was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Mar 23, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now it's possible to create and edit templates right from the Template List grid</li> <li class="item"><span class="amsite-label">New</span> GraphQL read compatibility was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.0</span></span> <div class="amsite-date">Last Update: Mar 13, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Mar 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now you can custom stylize options in templates: specify font colors and sizes, add swatches to selectable options</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.1</span></span> <div class="amsite-date">Last Update: Mar 03, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.1</span> - Mar 03, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with showing option values after module upgrade was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.1.0</span> - Mar 03, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the functionality of configuring dependencies between template's options</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with manual products' adding under Configurations tab on product edit page</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_19" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.17.0</span></span> <div class="amsite-date">Last Update: Jan 20, 2025</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.17.0</span> - Jan 20, 2025</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> added a Discount Dropdown, allowing customers to select cart price rule discounts via a drop-down list on the cart or checkout page (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">New</span> we added a new extension to the module that allows Cart discounts to be displayed in the Mini cart (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> introduced a new condition, 'Subscribed to Newsletter', enabling the configuration of rules based on the newsletter subscription status of registered customers (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> corrected discount calculations for Bundle products</li> <li class="item"><span class="amsite-label">Fix</span> resolved an issue with incorrect rule application when multiple rules with the conditions 'Total Sales Amount' and 'Period after order was placed' are present</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.16.1</span></span> <div class="amsite-date">Last Update: Dec 10, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.16.1</span> - Dec 10, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> enhanced the module's compatibility with GraphQL Application Server</li> </ul> <div class="amsite-date"><span class="amsite-label">2.16.0</span> - Oct 15, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the Discount Breakdown functionality of the Special Promotion Pro module is now compatible with both Hyvä Theme and Hyvä Checkout. You can find the 'amasty/module-special-promotions-hyva' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.15.0</span></span> <div class="amsite-date">Last Update: Sep 04, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.15.0</span> - Sep 04, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to display a discount label even if the discount amount is 0</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Improved Layered Navigation, and navigation filters can now be configured without errors</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue where the 'Most Expensive' rule was applied incorrectly when 'Maximum Qty Discount is Applied To' was set to 1</li> <li class="item"><span class="amsite-label">Fix</span> the discount is now calculated correctly when applying the rule via GraphQL</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the recalculation of the discount amount when changing the currency in the cart</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.14.0</span></span> <div class="amsite-date">Last Update: Apr 29, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.14.0</span> - Apr 29, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the 'Product Set' action, so now sets based on categories can be created an unlimited number of times</li> <li class="item"><span class="amsite-label">Refactoring</span> we removed the \Amasty\Rules\Model\Rule\Action\Discount\AbstractSetof::formCategorySet() method (Please note: this release is backward incompatible. After this update, third-party customizations on your instance may become incompatible with the module)</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the incorrect discount calculation when using the 'Each N-th' group of actions </li> <li class="item"><span class="amsite-label">Fix</span> the issue with rules duplication was resolved</li> <li class="item"><span class="amsite-label">Fix</span> now the 'Skip Items with Special Price (incl. Catalog Price Rules)' option works correctly</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the 'amasty_rulespro_cache_warmer' cron job error</li> <li class="item"><span class="amsite-label">Fix</span> the issue of incorrectly rounding the discount amount was resolved</li> <li class="item"><span class="amsite-label">Fix</span> we fixed discounts calculation when Catalog prices include taxes</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with applying the "Product Set" action to group products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.13.1</span></span> <div class="amsite-date">Last Update: Apr 17, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.13.1</span> - Apr 17, 2024</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 2.13.1</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Magento 2.4.7. For correct compatibility, please install the 'amasty/module-mage-2.4.7-fix' package, which can be found in the composer suggest.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.13.0</span> - Nov 30, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rules action 'Percent Discount: Buy X (Buy 1 for 10% off, Buy 2 for 20% off, etc)' was added so it is now possible to set up tiered discount promotions (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Refactoring</span> we refactored variables and methods in the frontend code of the promo banners lite module according to the code standards</li> <li class="item"><span class="amsite-label">Fix</span> we solved the issue with the error that occurred during the execution of amasty_rulespro_cache_warmer cron job</li> <li class="item"><span class="amsite-label">Fix</span> now the ‘Fixed Price: each 5th, 10th, 15th for $49’ rule does not add value to discounted products if their regular price is lower than the discounted price</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.12.2</span></span> <div class="amsite-date">Last Update: Aug 14, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.12.2</span> - Aug 14, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the sort order of discount breakdown when Checkout Totals Sort Order is changed</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the discount calculation when it is based on the original price</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the discount not applying when products with expired special prices are skipped</li> <li class="item"><span class="amsite-label">Fix</span> we optimized the indexer ‘amasty_amrules_purchase_history_index’</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.1</span> - Jun 20, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with the Promo Rules coupon code application</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.0</span> - Jun 01, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now it is possible to Import and Export Cart Price Rules (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">New</span> new Cart Price Rule action 'Fixed Price: The Cheapest, also for Buy 1 get 1 free' was added so it is now possible to set up fixed price promotions for the cheapest product</li> <li class="item"><span class="amsite-label">New</span> we added new 'Applied Cart Price Rule' condition for Cart Price Rules (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">Improvement</span> we changed the Cart Price Rules duration settings format for CE Magento from ‘date’ to 'date and time’ (Note: functionality is available as part of an active product subscription or Support Subscription) </li> <li class="item"><span class="amsite-label">Improvement</span> we improved the Cart Price Rules processing and validation performance</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with the 'Percent discount for product set' rule applying when configurable products are being used as 'Define product set' products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.11.1</span></span> <div class="amsite-date">Last Update: Apr 06, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.11.1</span> - Apr 06, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the error occurred as a result of the API /rest/V1/integration/customer/token request</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the reindexation issue with 'amasty_amrules_purchase_history_index' index</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.0</span> - Feb 09, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved the active rules validation process on the Cart and Checkout pages by adding additional caching and asynchronous cache warming on the back-end</li> <li class="item"><span class="amsite-label">Improvement</span> we optimized column types in the Database</li> <li class="item"><span class="amsite-label">Improvement</span> minor improvements in system messages to avert issues while configure discounts applying </li> <li class="item"><span class="amsite-label">Improvement</span> 'Amasty: Special Promotions - Purchase History Indexer' index was added in order to speed up the ‘Purchases history’ and 'Orders Subselection' conditions processing</li> <li class="item"><span class="amsite-label">Refactoring</span> we refactored the module(Promo banners Lite) code to avert issues with adding rule promo banner image via API</li> <li class="item"><span class="amsite-label">Fix</span> we solved the 'Fixed price for product set' rule discount calculating problem when adding two or more sets</li> <li class="item"><span class="amsite-label">Fix</span> now the 'Fixed Price: each 5th, 10th, 15th for $49' rule calculates the discount correctly</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.10.0</span></span> <div class="amsite-date">Last Update: Dec 21, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.10.0</span> - Dec 21, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> new Cart Price Rule action 'Buy X get Y free (any products)' was added. It allows to create the Cart Price Rule with any number of Gift items from any category in one rule application</li> <li class="item"><span class="amsite-label">Improvement</span> we replaced the "Skip Items with Special Price" setting with "Skip Items with" setting and expanded its functionality to allow more flexible Cart Price Rules configuration</li> <li class="item"><span class="amsite-label">Improvement</span> we added Shipping to Multiple Addresses support for the module actions</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with incorrect discount calculation when Max Amount of Discount setting is being used</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the error occurred while adding a product to the cart and page reloading</li> <li class="item"><span class="amsite-label">Fix</span> the issue with discount amount rounding in the cart was resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.0</span></span> <div class="amsite-date">Last Update: Sep 26, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Sep 26, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now the extension works with bundle products so you can offer your customers discounts on bundled products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.7</span></span> <div class="amsite-date">Last Update: Sep 20, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.7</span> - Sep 20, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we updated the extension packages to avoid tariff conflicts during upgrading</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.6</span> - Mar 16, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> compatibility with Amasty Order Status was improved</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with Current Uses and Global Uses Limit settings</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.5</span> - Oct 14, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we reduced the number of queries to the database to improve performance</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.4</span> - Apr 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added information tooltip for Maximum Qty Discount field</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.3</span> - Apr 02, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we improved compatibility with Amasty Free Gift extension</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.2</span> - Feb 27, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with label saving in Cart Price Rule</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.1</span> - Feb 19, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with coupon code saving</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - Feb 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to limit a number of times the particular cart price rule will be triggered was added. Now, you can limit any cart price rule usage without the necessity to configure coupons</li> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced the compatible with Amasty Abandoned Cart extension</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.10</span></span> <div class="amsite-date">Last Update: Nov 04, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.10</span> - Nov 04, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with Group of N rule</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with displaying banner on all store views</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.9</span> - Aug 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> max length for Promo SKU field was increased</li> <li class="item"><span class="amsite-label">Improvement</span> alidation for Y products in \"Buy X Get Y\" action was added: MFTF tests was enhanced for \"Buy X get Y\" action</li> <li class="item"><span class="amsite-label">Fix</span> the issue with cart updating was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.8</span> - Jun 26, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with rounding to 1 cent for Each Group of N: Fixed price action was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.7</span> - Jun 06, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now extension covered by 29 Magento Functional Testing Framework tests</li> <li class="item"><span class="amsite-label">Fix</span> the issue with cart price rule schedule update was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with duplicating customer attributes in condition tree was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.6</span> - May 10, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with banners displaying was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> extension was covered by unit tests</li> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Standards</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.5</span> - Apr 29, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with Promotions Manager dependency through composer installation was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.4</span> - Mar 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with maximum amount of discount after order placing was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with saving cart price rule after uploading banner image was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> the code for actions \"The Cheapest\" and \"The Most Expensive\" was refactored and enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.3</span> - Mar 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with maximum amount of discount after order placing was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with saving cart price rule after uploading banner image was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> the code for actions \"The Cheapest\" and \"The Most Expensive\" was refactored and enhanced</li> <li class="item"><span class="amsite-label">Fix</span> the issue with SKU validation for \"Each Group of N\" action was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.2</span> - Feb 27, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with validation by SKU for configurable products was fixed</li> <li class="item"><span class="amsite-label">Fix</span> the issue with calculating product set discount was resolved</li> <li class="item"><span class="amsite-label">Improvement</span> the css code was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.1</span> - Dec 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with undefined index was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Nov 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issues with \"Buy X get Y\" action were resolved</li> <li class="item"><span class="amsite-label">Improvement</span> minor adjustments affecting the behaviour of Amasty One Step Checkout discount breakdown were made</li> <li class="item"><span class="amsite-label">New</span> the ability to select promo products based on categories for the actions of a \"Product Set\" type was added. Now you can specify a category instead of manual listing all applicable products</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.2</span></span> <div class="amsite-date">Last Update: Nov 13, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.2</span> - Nov 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with install extension on Magento 2.2.0 was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Nov 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the integration with Amasty Promo Banners and Amasty Product Labels extensions was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Oct 31, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> introducing the ability to show promo banners and labels on products to highlight promotions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.3</span></span> <div class="amsite-date">Last Update: Oct 23, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.3</span> - Oct 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the extension update was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.4</span> - Oct 23, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with extension updating was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.2</span> - Oct 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the Cart Price Rules was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Oct 11, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with the cart price rule preview on Magento Commerce was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issues with the scheduler on Magento Commerce 2.2.x were resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Sep 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the fields order and the text prompts are changed to simplify the cart price rules settings.</li> <li class="item"><span class="amsite-label">New</span> the debug mode for a shopping cart was added. Now you can see the discounts applied to each item in the cart</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.4</span></span> <div class="amsite-date">Last Update: Aug 22, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.4</span> - Aug 22, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the compatibility with the Amasty Shipping Rules extension was improved</li> <li class="item"><span class="amsite-label">Improvement</span> the work of the discount breakdown feature was improved</li> <li class="item"><span class="amsite-label">Improvement</span> the integration with Amasty Promo Banners and Amasty Product Labels extensions was added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.3</span> - Jul 30, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with a group discount when making PayPal payment was resolved</li> <li class="item"><span class="amsite-label">Fix</span> the issue with the counting of items for the action 'buy x get y' was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.2</span> - Jul 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with reward points was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.1</span> - Jul 13, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with cron in scheduler on Magento Enterprise Edition (Magento Commerce) was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Jul 05, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to apply discounts to the same products in the cart via \"Each N-th\" actions was added</li> <li class="item"><span class="amsite-label">New</span> the ability to read/update/create rules via Magento API was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.0</span></span> <div class="amsite-date">Last Update: Jun 08, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Jun 08, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the information section was added. Now you can see the version of installed extension, available updates, User Guide link and other useful data right on the module Configuration page</li> <li class="item"><span class="amsite-label">New</span> the ability to apply a discount to the cheapest or the most expensive products first, by configuring 'Each N-th', 'Each Group of N' and 'Each Product After N', was added</li> <li class="item"><span class="amsite-label">Improvement</span> the 'Calculate Discount Based On' setting was removed from 'Each N-th', 'Buy X Get Y' and 'Each Product After N' actions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.5</span></span> <div class="amsite-date">Last Update: Jun 06, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.5</span> - Jun 06, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento versions less than 2.2.4 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.4</span> - Jun 01, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> 'Calculate Discount Based On' setting was removed from 'Each N-th', 'Buy X Get Y' and 'Each Product After N' actions as non-applicable.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.3</span> - May 07, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> design of Discount Breakdown was adjusted</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.2</span> - May 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> Magento Enterprise Schedule feature support was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Apr 19, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Links to usage examples were added</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Apr 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> compatibility with Amasty Customer Attributes introduced</li> <li class="item"><span class="amsite-label">New</span> discount breakdown introduced. Now you can see all promotion rules applied with discount amount for each</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.0</span></span> <div class="amsite-date">Last Update: Mar 14, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Mar 14, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Improved the 'Product set' action. Now, only SKUs can be used to create a set</li> <li class="item"><span class="amsite-label"></span> FIxed an issue with 'Max Amount of Discount' setting</li> <li class="item"><span class="amsite-label"></span> Fixed the logic of the 'Product set' and 'Group of N' actions</li> <li class="item"><span class="amsite-label"></span> Improved usability by removing the 'Maximum Qty Discount is Applied To' setting from the 'Group of N' action</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.5</span></span> <div class="amsite-date">Last Update: Mar 02, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Mar 02, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with installation on Magento 2.2.2</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Jan 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Compatibility with 3rd party extensions was improved</li> <li class="item"><span class="amsite-label"></span> Rare issue with extension installation on Magento Enterprise Edition was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Jan 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> 'Each N-th' action behavior was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Dec 14, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The discount calculation for the \"Each Nth\" rules was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Dec 04, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The installation script was fixed.</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Nov 29, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> The issue with promo rule labels display was fixed.</li> <li class="item"><span class="amsite-label"></span> The advanced conditions display on Magento Enterprise Edition was changed.</li> <li class="item"><span class="amsite-label"></span> The configuration of several promo actions was simplified:</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.1</span></span> <div class="amsite-date">Last Update: Oct 23, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.1</span> - Oct 23, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed discount display in admin area</li> </ul> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Oct 20, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed the rare case of division by zero</li> <li class="item"><span class="amsite-label">New</span> Magento Enterprise edition Schedule feature compatibility</li> <li class="item"><span class="amsite-label">New</span> Customer ID can be used as customer condition</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.4</span></span> <div class="amsite-date">Last Update: Oct 05, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.4</span> - Oct 05, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility tested and confirmed</li> <li class="item"><span class="amsite-label"></span> \"Each M-th after X-th\" rule logic fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.3</span> - Aug 30, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Magento 2.2 compatibility introduced</li> </ul> </div></div> </div> <div class="tab-item hidden" id="main_changelog_20" data-role="content" data-mage-init='{"amsiteChangelogAccordion": {}}'> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.21.0</span></span> <div class="amsite-date">Last Update: Nov 13, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.21.0</span> - Nov 13, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added a new 'Discount Info for Mini Cart' extension to the module that allows Cart discounts to be displayed in the Mini cart (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Compatibility</span> now the extension on the Luma Theme fully complies with WCAG 2.1 Level AA requirements</li> <li class="item"><span class="amsite-label"></span> Improvement:we added the ability to update the content of the related products block for child options of Configurable products (Note: this functionality is available as part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> the issue with applying patches was solved</li> <li class="item"><span class="amsite-label">Fix</span> fixed the issue with applying rules that contain a large number of 'Apply Same As' conditions</li> <li class="item"><span class="amsite-label">Fix</span> the 'is undefined' operator now works correctly</li> </ul> <div class="amtheme-actions"><button type="button" data-amsite-js="changelog-toggle" title="View All Previous Updates" aria-label="View All Previous Updates" class="action outline">View All Previous Updates</button></div></div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.20.1</span></span> <div class="amsite-date">Last Update: Oct 18, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.20.1</span> - Oct 18, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed compatibility with Amasty Improved Sorting and resolved the error that occurred when navigating to a category page</li> </ul> <div class="amsite-date"><span class="amsite-label">2.20.0</span> - Aug 19, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Hyvä Checkout was added. You can find the 'amasty/module-mostviewed-hyva-checkout' package for installing in composer suggest (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.19.0</span></span> <div class="amsite-date">Last Update: Jul 02, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.19.0</span> - Jul 02, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the 'Related Product Sales' report (Note: the functionality is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the display of Bundle Pack discounts according to Customer Groups</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.18.0</span></span> <div class="amsite-date">Last Update: Feb 28, 2024</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.18.0</span> - Feb 28, 2024</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added the ability to display multiple Related Products blocks (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> now you can customize the display of Bundle Packs columns and optimize the joining of their tables with the Orders grid to enhance grid loading speed</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Lazy Load so now images in the Related Products sliders are loaded as they should</li> <li class="item"><span class="amsite-label">Fix</span> now the calculation of Bundle Packs price is correct when Tax is included in product prices</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.17.1</span></span> <div class="amsite-date">Last Update: Dec 08, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.17.1</span> - Dec 08, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with incorrect order's total calculation</li> </ul> <div class="amsite-date"><span class="amsite-label">2.17.0</span> - Nov 22, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the ability to import and export Bundle Packs data (Note: the compatibility is available as a part of an active product subscription or support subscription)</li> <li class="item"><span class="amsite-label">Improvement</span> we improved related products UI in the side bar when the 'Slider' display type is selected</li> <li class="item"><span class="amsite-label">Fix</span> now Bundle Packs with downloadable products are added to the cart as intended</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated the issue with the incorrect calculation of discounts when the 'Replace Bundle Pack Item Discount with Cart Price Rules' setting is enabled</li> <li class="item"><span class="amsite-label">Fix</span> now it is possible to configure the behavior of applying a discount to the main product for the 'Conditional Discounts' discount type</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the issue with Bundle Packs saving</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.16.0</span></span> <div class="amsite-date">Last Update: Jul 13, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.16.0</span> - Jul 13, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with Hyvä Theme for Automatic Related Products. You can find the 'amasty/module-mostviewed-hyva' package for installing in composer suggest (Note: the compatibility is available as part of an active product subscription or Support Subscription. For the correct Hyvä compatibility work, the GraphQL module 'amasty/customers-also-viewed-graphql' should be also installed)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.15.0</span></span> <div class="amsite-date">Last Update: May 17, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.15.0</span> - May 17, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the possibility to handle CRUD actions on Automatic Related Products rules via REST API</li> <li class="item"><span class="amsite-label">Improvement</span> we added the possibility to display subsequent rules products if there are no products matching the condition in the priority rule</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the data patch error occurred while setup:upgrade command running</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.14.0</span></span> <div class="amsite-date">Last Update: Jan 31, 2023</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.14.0</span> - Jan 31, 2023</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the Rules indexing process which improves the speed of Pages loading</li> <li class="item"><span class="amsite-label">Fix</span> the issue with the Automatic Related Products slider sorting on the Cart page was resolved</li> <li class="item"><span class="amsite-label">Fix</span> now redirect to the shopping cart after a product was added works as it should </li> <li class="item"><span class="amsite-label">Fix</span> we fixed the Preview Products problem when condition with multiselect attribute is being used</li> <li class="item"><span class="amsite-label">Fix</span> now Products are displayed correctly when conditions by Category is being used with any other conditions</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.13.3</span></span> <div class="amsite-date">Last Update: Nov 01, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.13.3</span> - Nov 01, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added 'Priority' setting to the Bundle Packs so now it is possible to set the Bundle Packs order on the Product page</li> <li class="item"><span class="amsite-label">Improvement</span> we improved Related Products rules indexation process </li> <li class="item"><span class="amsite-label">Improvement</span> now zero discount is not displayed on Bundle Pack products</li> <li class="item"><span class="amsite-label">Fix</span> we solved the problem with an error occurred when using GraphQl queries</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the indexation issue occurred once updating to the latest version</li> <li class="item"><span class="amsite-label">Fix</span> we optimized the query performance on the Sales Order grid</li> <li class="item"><span class="amsite-label">Fix</span> we eliminated messages duplicating when Bundle Pack with a few Configurable products was added to the Cart</li> </ul> <div class="amsite-date"><span class="amsite-label">2.13.2</span> - Aug 02, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the Bundle Packs displaying on the All Bundle Packs Page</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the compatibility with Amasty Product Tabs so now Viewed Together products show as expected</li> <li class="item"><span class="amsite-label">Fix</span> the issue with Bundle Pack discount applying was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.13.1</span> - May 02, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with primary key error during upgrade process</li> </ul> <div class="amsite-date"><span class="amsite-label">2.13.0</span> - Apr 26, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we introduced settings to configure visibility for Wishlist and Compare buttons in Automatic Related Products blocks</li> <li class="item"><span class="amsite-label">Improvement</span> we added primary keys to extension DB tables</li> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with the Amasty Improved Sorting extension. Now you can use Amasty Improved Sorting bestsellers data in related block product conditions as well as sort products using Best Seller, Most Viewed, Reviews Count and Top Rated sorting methods.</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with extension installation if “bundles” page already exists</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.12.2</span></span> <div class="amsite-date">Last Update: Mar 15, 2022</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.12.2</span> - Mar 15, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with Bundle Pack widget missing on CMS pages when added via page edit</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.1</span> - Mar 03, 2022</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with PHP 8.1 was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.12.0</span> - Dec 08, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now you can enable the option to replace bundle pack discount with Cart Price Rule. Please refer to the user guide for more information</li> <li class="item"><span class="amsite-label">New</span> we introduced a single bundle pack widget. Now you can display a specific bundle on the required page</li> <li class="item"><span class="amsite-label">Improvement</span> we changed the way extension gathers views/clicks data. Now rules statistics will be more accurate</li> <li class="item"><span class="amsite-label">Improvement</span> 'Order Status' setting input for 'Bought together' condition was changed to multiselect</li> <li class="item"><span class="amsite-label">Improvement</span> we added unique keys to extension tables</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with bundle pack duplication</li> <li class="item"><span class="amsite-label">Fix</span> we adjusted the way the extension match product data to the rule conditions</li> <li class="item"><span class="amsite-label">Fix</span> now extension GraphQL queries return bundle product prices with VAT included when applicable</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.11.3</span></span> <div class="amsite-date">Last Update: Aug 09, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.11.3</span> - Aug 09, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with duplicate items in the Product Cross-Sell Block</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.2</span> - Jul 09, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we improved compatibility of bundle pack feature and php 7.2 and lower</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.1</span> - Jul 06, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the logic of discount applying in case items were added from the special Bundle Pack block to avoid a random match of a similar bundle pack while modifying items in cart - now only the discount of directly added Bundle Pack is calculated</li> <li class="item"><span class="amsite-label">Improvement</span> the Bundle Pack Sales grid now contains a Bundle Price column with the sum before cart discounts applying and tax calculation</li> <li class="item"><span class="amsite-label">Improvement</span> now the bundle packs are available for multishipping</li> <li class="item"><span class="amsite-label">Improvement</span> we implemented the optimization of ‘bought together’ request to improve its performance</li> <li class="item"><span class="amsite-label">Compatibility</span> we added compatibility with Alt Tags part of SEO Toolkit solution</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with sizes of listing product images in case related block contains the same products</li> </ul> <div class="amsite-date"><span class="amsite-label">2.11.0</span> - Apr 14, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we introduced a new discount type for Bundle Packs: now you can set conditional percentage discounts depending on a quantity of Bundle Pack items that are added to the shopping cart</li> <li class="item"><span class="amsite-label">New</span> we added the sales statistics for Bundle Packs</li> <li class="item"><span class="amsite-label">New</span> now you can choose to apply the discount only if items were added from the special Bundle Pack block (in that case items added to cart separately, e.g. from their product pages, won’t be associated with any bundle pack)</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.10.1</span></span> <div class="amsite-date">Last Update: Feb 24, 2021</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.10.1</span> - Feb 24, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the pre-defined extension data delivered upon initial installation</li> </ul> <div class="amsite-date"><span class="amsite-label">2.10.0</span> - Feb 10, 2021</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now you can configure and see the sales statistics for Bundle Packs - we also added smart recommendations for products to use in each bundle pack based on the previous ‘bought’ and ‘viewed’ data analysis</li> <li class="item"><span class="amsite-label">New</span> we added the information about ordered bundle packs to the Orders grid and to an order view page for better convenience and orders differentiation</li> <li class="item"><span class="amsite-label">New</span> we introduced a new mode for Bundle Packs - now the discount may be applied only if all items are added to cart</li> <li class="item"><span class="amsite-label">New</span> now you can set individual discounts per each item in a Bundle Pack</li> <li class="item"><span class="amsite-label">New</span> we added an option to apply rules and bundle packs to all customer groups at once</li> <li class="item"><span class="amsite-label">Improvement</span> now you can choose to always show a dialog popup for Bundle Pack’s products with options (even if there are only non-required ones) to not let customers miss the opportunity of customizing the product</li> <li class="item"><span class="amsite-label">Improvement</span> we added the ‘is not’ operator to the ‘same as’ conditions</li> <li class="item"><span class="amsite-label">Compatibility</span> we added the compatibility with Magento 2.4.2</li> <li class="item"><span class="amsite-label">Compatibility</span> now customers will see a confirmation popup after a Bundle Pack is added to cart if Amasty Ajax Shopping Cart extension is installed</li> <li class="item"><span class="amsite-label">Fix</span> we corrected the Configurable Product image update upon selecting of corresponding swatches in the dialog popup</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.9.13</span></span> <div class="amsite-date">Last Update: Dec 21, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.9.13</span> - Dec 21, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced compatibility with Amasty Jet Theme</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.12</span> - Nov 30, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the display of related products inserted into the native block on Magento Commerce</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.11</span> - Nov 20, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we updated, adjusted and optimized GraphQl queries</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.10</span> - Nov 17, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected the applying of ‘same as’ condition with Attribute Set</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with Bought Together condition for composite products</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.9</span> - Oct 22, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> now the summary block of Bundle Pack is visually distinguishable if there are several lines with bundle items</li> <li class="item"><span class="amsite-label">Improvement</span> we reviewed and enhanced the display of Bundle Pack elements on mobile devices</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.8</span> - Sep 07, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we added an option to consider only non-anchor categories in ‘same as’ condition in order to narrow down the list of suitable products</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.7</span> - Sep 03, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced the extension display if used in combination with Amasty Jet Theme</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.6</span> - Aug 13, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the extension is compatible with Amasty Jet Theme</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.5</span> - Jul 02, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the speed of GraphQl queries</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.4</span> - May 29, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue with missing store views in corresponding column of Rules grid</li> <li class="item"><span class="amsite-label">Fix</span> we fixed an error on Shopping Cart page caused by usage of rules with non-existing attribute</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.3</span> - May 20, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> bundle items with customizable options are now added to cart as expected</li> <li class="item"><span class="amsite-label">Fix</span> we resolved the issue which occurred upon application of several rules with 'same as' condition to the same page</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.2</span> - Apr 15, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we resolved issue on checkout page with Magento 2.3.2 and less</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.1</span> - Apr 09, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento MSI was improved</li> <li class="item"><span class="amsite-label">Compatibility</span> we upgraded compatibility with read GraphQl</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Mega Menu and Request a Quote was enhanced</li> <li class="item"><span class="amsite-label">Improvement</span> now discount label on main product get hidden if all bundle products are unchecked (to avoid possible confusion)</li> <li class="item"><span class="amsite-label">Improvement</span> we added new variable to use in Upsell Message for Bundle Packs which matches the total discount amount (if discount is applied to main product)</li> <li class="item"><span class="amsite-label">Improvement</span> we reviewed and improved application of 'ALL' type condition in case of no attribute value assigned to the product</li> </ul> <div class="amsite-date"><span class="amsite-label">2.9.0</span> - Mar 23, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> now the extension is covered by MFTF tests, which will help to improve its quality and stability</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.8.7</span></span> <div class="amsite-date">Last Update: Mar 16, 2020</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.8.7</span> - Mar 16, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we rechecked and established correct dependency on jQuery UI library</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.6</span> - Jan 30, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> we corrected minor visual imperfections on bundle pack edit page in admin panel</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.5</span> - Jan 16, 2020</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with read GraphQL was enhanced</li> <li class="item"><span class="amsite-label">Improvement</span> we implemented major performance enhancement</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.4</span> - Dec 24, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with creating related product rule was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.3</span> - Dec 23, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> minor improvement was implemented</li> <li class="item"><span class="amsite-label">Fix</span> we resolved issues with per customer group configuration implementation</li> <li class="item"><span class="amsite-label">Fix</span> we fixed the incorrect display of configurable product price in mini-cart</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.2</span> - Dec 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> we reviewed and enhanced the security level of the plugin</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.1</span> - Oct 16, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with customer group restriction was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.8.0</span> - Oct 11, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the option to show only the current category’s products on a category page. If you need to draw attention to products from the category with particular characteristics - you are free to use this option to achieve the goal</li> <li class="item"><span class="amsite-label">Improvement</span> we enhanced the performance of rules' application on large catalogs</li> <li class="item"><span class="amsite-label">Fix</span> minor styling fixes were implemented</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.7.0</span></span> <div class="amsite-date">Last Update: Oct 01, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.7.0</span> - Oct 01, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> we added the option that allows you to define the quantity for each Bundle Pack Product in a bundle pack</li> <li class="item"><span class="amsite-label">Improvement</span> we added an ability to choose a custom position for bundle packs to make them organically fit the design of your product pages</li> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Amasty Shop By Brand and Thank You Page plugins was improved</li> <li class="item"><span class="amsite-label">Fix</span> issue with saving of bundle pack without customer group assignment was resolved</li> <li class="item"><span class="amsite-label">Fix</span> issue with bundle pack discount amount calculation was fixed</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.6.5</span></span> <div class="amsite-date">Last Update: Sep 09, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.6.5</span> - Sep 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> we enhanced the compatibility of the module with Porto theme</li> <li class="item"><span class="amsite-label">Improvement</span> minor improvements were implemented</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.4</span> - Aug 05, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with showing out of stock products was resolved</li> <li class="item"><span class="amsite-label">Fix</span> issue with bundle pack prices was fixed</li> <li class="item"><span class="amsite-label">Fix</span> issue with showing custom blocks was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.3</span> - Jul 05, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> extension was covered by unit tests</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.2</span> - Jul 05, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> issue with Customer Group condition was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.1</span> - Jun 10, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the compatibility with old Magento versions was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.6.0</span> - Jun 03, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> code was refactored according to Magento Standards</li> <li class="item"><span class="amsite-label">Improvement</span> extension was covered by unit tests</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.5.3</span></span> <div class="amsite-date">Last Update: May 02, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.5.3</span> - May 02, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with Same as Conditions was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.2</span> - Apr 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> now the module is read compatible with GraphQL. It allows exposing product data like SKU, name, link, image, price, etc. in order to build PWA/JS-based frontend</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.1</span> - Apr 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the performance enhancement was made</li> <li class="item"><span class="amsite-label">Improvement</span> for the 'Bought Together' items the system takes into account only products purchased in one order</li> </ul> <div class="amsite-date"><span class="amsite-label">2.5.0</span> - Mar 26, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the ability to manage all existing cron tasks on a Cron Tasks List grid in the backend was added. Run cron tasks and generate their schedule by clicking the ‘Run Cron’ button. Also, delete tasks in bulk, apply filtering and sorting options when it is needed</li> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with the 3rd party extensions was enhanced</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.4.0</span></span> <div class="amsite-date">Last Update: Mar 18, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.4.0</span> - Mar 18, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to display dedicated Bundled Packs promo listing page was added</li> <li class="item"><span class="amsite-label">New</span> ability to display Bundle Packs block in Shopping Cart was added</li> <li class="item"><span class="amsite-label">Improvement</span> minor enhancements were made</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.3.0</span></span> <div class="amsite-date">Last Update: Mar 04, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.3.0</span> - Mar 04, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to display upsell hint messages about the bundle packs promo in the shopping cart was added</li> <li class="item"><span class="amsite-label">New</span> ability to set time period for bundle pack promo was added</li> <li class="item"><span class="amsite-label">New</span> ability to position related products block in the separate product tab or above the product description was added</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.2.1</span></span> <div class="amsite-date">Last Update: Feb 19, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.2.1</span> - Feb 19, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> a minor issue with prices was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.2.0</span> - Feb 19, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> allows admin to create Bundle Packs rules and offer customers a discount on the group of products purchased as a bundle</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.1.2</span></span> <div class="amsite-date">Last Update: Feb 13, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.1.2</span> - Feb 13, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with the view together and bought together sorting was resolved</li> <li class="item"><span class="amsite-label">Fix</span> an issue with a view and click statistic was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.1</span> - Feb 08, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> the compatibility with Magento 2.2.7 and higher was added. The issue with orders placement was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.1.0</span> - Feb 01, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> ability to monitor rule performance statistics (Views, Clicks, CTR, Orders, and Revenue) was added</li> <li class="item"><span class="amsite-label">New</span> a slider option is now available for related products block</li> <li class="item"><span class="amsite-label">New</span> ability to preview product list in Magento backend based on the selected conditions was added</li> <li class="item"><span class="amsite-label">Fix</span> an issue with 'If ALL of these conditions are FALSE' for the 'Same As' feature was resolved</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">2.0.7</span></span> <div class="amsite-date">Last Update: Jan 24, 2019</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">2.0.7</span> - Jan 24, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Compatibility</span> compatibility with Magento Cloud was improved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.6</span> - Jan 15, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with 'same as' attribute condition for the products with unspecified attribute was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.5</span> - Jan 14, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with custom themes and rule for All Store Views was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.4</span> - Jan 09, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> an issue with install script relaunch was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.3</span> - Jan 08, 2019</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the rule configuration settings were enhanced</li> <li class="item"><span class="amsite-label">Fix</span> an issue with 'Same as' condition for the category was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.2</span> - Dec 27, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with ACL resources was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.1</span> - Dec 27, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the issue with upgrading module from old version was fixed</li> </ul> <div class="amsite-date"><span class="amsite-label">2.0.0</span> - Dec 26, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> the extension code has been completely renovated. It makes the module significantly more flexible and provides new functionality. Important! After this update, all the rules created previously will be disabled. It's recommended for admin to recheck the rules configuration before enabling them.</li> <li class="item"><span class="amsite-label">New</span> ability to create rules for assigning up-sell, cross-sell and related products automatically were added</li> <li class="item"><span class="amsite-label">New</span> now admin is able to select the place where the related products blocks will be displayed</li> <li class="item"><span class="amsite-label">New</span> flexible conditions for defining related products allow admin to select products based on their attributes</li> <li class="item"><span class="amsite-label">New</span> auto-generated products could be selected from the same attribute value, e.g. the same brand, the same color, price or size</li> <li class="item"><span class="amsite-label">New</span> ability to set the priority for the rules. Rules with higher priority (1 is the highest) will be executed in case some products fall under several rules</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.4.5</span></span> <div class="amsite-date">Last Update: Aug 29, 2018</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.4.5</span> - Aug 29, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Improvement</span> the admin panel user interface was enhanced</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.4</span> - Jul 17, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">Fix</span> the problem with the memory limit after reindex was resolved</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.3</span> - Apr 18, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the indexer</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.2</span> - Apr 04, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with indexing the rule that is not found</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.1</span> - Mar 15, 2018</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with applying limitations for all product relations</li> </ul> <div class="amsite-date"><span class="amsite-label">1.4.0</span> - Mar 12, 2018</div><ul class="items"> <li class="item"><span class="amsite-label">New</span> Added the 'Product Currently Viewed' data source. Now, you can display products without the sales/views history, from the same category, from the same brand, based on their price, or using all the mentioned conditions simultaneously.</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.3.0</span></span> <div class="amsite-date">Last Update: Dec 11, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.3.0</span> - Dec 11, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> New data source: Product Attributes. Now, you can show related products based on the rules of product attributes.</li> <li class="item"><span class="amsite-label"></span> Fixed an issue with duplicate products</li> <li class="item"><span class="amsite-label"></span> Fixed an issue with showing products in the UpSell block</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.2.2</span></span> <div class="amsite-date">Last Update: Nov 17, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.2.2</span> - Nov 17, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed an issue with the product display in the upsell block</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.1</span> - Aug 08, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Fixed cart cross-sells issue.</li> </ul> <div class="amsite-date"><span class="amsite-label">1.2.0</span> - Jun 29, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Enterprise Edition compatibility improved</li> <li class="item"><span class="amsite-label"></span> Multiple various fixes</li> </ul> </div></div> <div class="changelog-item" data-role="collapsible" data-amsite-js="changelog-item"><div class="changelog-title" data-role="trigger" data-amsite-js="changelog-title"><span class="amsite-title">Version <span class="amsite-label">1.1.2</span></span> <div class="amsite-date">Last Update: Mar 22, 2017</div></div><div class="changelog-content" data-role="content"> <div class="amsite-date"><span class="amsite-label">1.1.2</span> - Mar 22, 2017</div><ul class="items"> <li class="item"><span class="amsite-label"></span> Few minor fixes</li> </ul> </div></div> </div> </div></div></div></div></div></div></div></div><style> @media only screen and (min-width: 768px) { [id^="tab-label-amcustomtabs_tabs"][data-role="collapsible"] { max-width: 20%; } } </style> <div class="block related" data-mage-init='{"relatedProducts":{"relatedCheckbox":".related.checkbox"}}' data-limit="0" data-shuffle="0"> <div class="block-title title" id="block-related-heading" role="heading" title="Recommended for you" aria-level="2">Recommended for you</div><div class="block-content content" aria-labelledby="block-related-heading"><div class="products wrapper grid products-grid products-related"><ol class="products list items product-items amtheme-products-secondary amtheme-slick-slider" data-mage-init='{"slickSlider": { "isOnMobile": true, "sliderOptions": { "dots": true, "infinite": false, "slidesToShow": 5, "slidesToScroll": 5, "responsive": [ { "breakpoint": 1024, "settings": { "slidesToShow": 4, "slidesToScroll": 4 } }, { "breakpoint": 769, "settings": { "slidesToShow": 3.5, "slidesToScroll": 2, "dots": false, "arrows": false } }, { "breakpoint": 640, "settings": { "slidesToShow": 2.5, "slidesToScroll": 1, "dots": false, "arrows": false } }, { "breakpoint": 480, "settings": { "slidesToShow": 2.2, "slidesToScroll": 1, "dots": false, "arrows": false } }, { "breakpoint": 360, "settings": { "slidesToShow": 1.5, "slidesToScroll": 1, "dots": false, "arrows": false } } ] } }}'> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/seo-toolkit-for-magento-2.html" title="SEO Toolkit Pro M2" aria-label="SEO Toolkit Pro M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/s/e/seo-toolkit-for-magento-2_61a0985238d1b.png" alt="SEO Toolkit Pro for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-793-cat amasty-label-for-793" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"793","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "793", "selector": ".amasty-label-container-13-793-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-793-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="SEO Toolkit Pro for Magento 2" alt="SEO Toolkit Pro for Magento 2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="SEO Toolkit Pro M2" aria-label="SEO Toolkit Pro M2" href="https://amasty.com/seo-toolkit-for-magento-2.html">SEO Toolkit Pro M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="793" data-price-box="product-id-793"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-793" data-price-amount="349" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$349</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/793\/","data":{"product":"793","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="SEO Toolkit Pro M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/premium-custom-layered-navigation-for-magento-2.html" title="Layered Navigation Premium M2" aria-label="Layered Navigation Premium M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/p/r/premium-custom-layered-navigation-for-magento-2.png" alt="Layered Navigation Premium for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Layered Navigation Premium M2" aria-label="Layered Navigation Premium M2" href="https://amasty.com/premium-custom-layered-navigation-for-magento-2.html">Layered Navigation Premium M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="1571" data-price-box="product-id-1571"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-1571" data-price-amount="549" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$549</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/1571\/","data":{"product":"1571","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Layered Navigation Premium M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/shipping-suite-for-magento-2.html" title="Shipping Suite Pro M2" aria-label="Shipping Suite Pro M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/s/h/shipping-suite-for-magento-2.png" alt="Shipping Suite Pro for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Shipping Suite Pro M2" aria-label="Shipping Suite Pro M2" href="https://amasty.com/shipping-suite-for-magento-2.html">Shipping Suite Pro M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="945" data-price-box="product-id-945"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-945" data-price-amount="499" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$499</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/945\/","data":{"product":"945","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Shipping Suite Pro M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/reward-points-for-magento-2.html" title="Reward Points M2" aria-label="Reward Points M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/r/e/reward-points-for-magento-2_621733758b501.png" alt="Reward Points for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Reward Points M2" aria-label="Reward Points M2" href="https://amasty.com/reward-points-for-magento-2.html">Reward Points M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="622" data-price-box="product-id-622"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-622" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/622\/","data":{"product":"622","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Reward Points M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/order-attributes-for-magento-2.html" title="Order Attributes M2" aria-label="Order Attributes M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/o/r/order-attributes-for-magento-2_63c031b7cc905.png" alt="Order Attributes for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Order Attributes M2" aria-label="Order Attributes M2" href="https://amasty.com/order-attributes-for-magento-2.html">Order Attributes M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="620" data-price-box="product-id-620"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-620" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/620\/","data":{"product":"620","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Order Attributes M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/out-of-stock-notification-for-magento-2.html" title="Out of Stock Notification M2" aria-label="Out of Stock Notification M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/o/u/out-of-stock-notification-for-magento-2_1.png" alt="Out of Stock Notification for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-14-491-cat amasty-label-for-491" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"491","label":14,"margin":7,"alignment":0,"order":7,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "491", "selector": ".amasty-label-container-14-491-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-14-491-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/amasty-recommended-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Out of Stock Notification for Magento 2" alt="Out of Stock Notification for Magento 2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Out of Stock Notification M2" aria-label="Out of Stock Notification M2" href="https://amasty.com/out-of-stock-notification-for-magento-2.html">Out of Stock Notification M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="491" data-price-box="product-id-491"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-491" data-price-amount="199" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$199</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/491\/","data":{"product":"491","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Out of Stock Notification M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/custom-stock-status-for-magento-2.html" title="Custom Stock Status M2" aria-label="Custom Stock Status M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/c/u/custom-stock-status-for-magento-2_61a5ee69b5b75.png" alt="Custom Stock Status for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Custom Stock Status M2" aria-label="Custom Stock Status M2" href="https://amasty.com/custom-stock-status-for-magento-2.html">Custom Stock Status M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="504" data-price-box="product-id-504"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-504" data-price-amount="209" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$209</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/504\/","data":{"product":"504","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Custom Stock Status M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/product-labels-for-magento-2.html" title="Product Labels M2" aria-label="Product Labels M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/p/r/product-labels-for-magento-2_61a5ece777124.png" alt="Product Labels for Magento 2"/></span></span> <div class="amasty-label-container amasty-label-container-13-538-cat amasty-label-for-538" style="display: none; width:111px;" data-mage-init='{"Amasty_Label/js/initLabel":{ "mode": "cat", "isAdminArea": "", "config": {"position":"top-center","size":"","path":".product-image-container, .product-item-photo, .cdz-product-top","mode":"prod","move":0,"product":"538","label":13,"margin":7,"alignment":0,"order":5,"redirect_url":"","tooltip":{"backgroundColor":"","color":"","status":1,"content":""}}, "productId": "538", "selector": ".amasty-label-container-13-538-cat" }}'><div class="amlabel-text"></div> <img id="amasty-label-image-13-538-cat" class="lazy amasty-label-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/amasty/amlabel/top-rated-new-2x.png" style="opacity: 1 !important;vertical-align: top;" title="Product Labels for Magento 2" alt="Product Labels for Magento 2" ></div></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Product Labels M2" aria-label="Product Labels M2" href="https://amasty.com/product-labels-for-magento-2.html">Product Labels M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="538" data-price-box="product-id-538"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-538" data-price-amount="209" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$209</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/538\/","data":{"product":"538","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Product Labels M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/advanced-permissions-for-magento-2.html" title="Advanced Permissions M2" aria-label="Advanced Permissions M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/a/d/advanced-permissions-for-magento-2_2x.png" alt="Advanced Permissions for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Advanced Permissions M2" aria-label="Advanced Permissions M2" href="https://amasty.com/advanced-permissions-for-magento-2.html">Advanced Permissions M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="555" data-price-box="product-id-555"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-555" data-price-amount="229" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$229</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/555\/","data":{"product":"555","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Advanced Permissions M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> <li class="item product product-item" style="display: none;"> <div class="product-item-info "><a href="https://amasty.com/product-parts-finder-for-magento-2.html" title="Product Parts Finder M2" aria-label="Product Parts Finder M2" class="product photo product-item-photo"> <span class="product-image-container" style="width:222px;"><span class="product-image-wrapper" style="padding-bottom: 100%;"><img class="lazy product-image-photo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/media/catalog/product/cache/ba238ead2674f123f2c985de93ccf97b/p/r/product-parts-finder-for-magento-2_2x.png" alt="Product Parts Finder for Magento 2"/></span></span></a> <div class="product details product-item-details"><span class="product name product-item-name "><a class="product-item-link" title="Product Parts Finder M2" aria-label="Product Parts Finder M2" href="https://amasty.com/product-parts-finder-for-magento-2.html">Product Parts Finder M2</a></span> <div class="price-box price-final_price" data-role="priceBox" data-product-id="564" data-price-box="product-id-564"> <span class="normal-price"> <span class="price-container price-final_price tax weee" > <span id="product-price-564" data-price-amount="199" data-price-type="finalPrice" class="price-wrapper " ><span class="price">$199</span></span> </span></span> </div> <div class="product actions product-item-actions"> <button type="button" class="action tocart primary" data-amtheme-js="ajax-tocart" data-post='{"action":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\/product\/564\/","data":{"product":"564","uenc":"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s"}}' title="Add to Cart" data-product-name-analytics="Product Parts Finder M2" aria-label="Add to Cart">Add to Cart</button> </div></div></div></li> </ol></div></div></div> </div></div><footer class="page-footer"> <div class="bg-indigo-800"><div class="p-6 text-white text-center lg:flex lg:items-center lg:justify-between lg:px-12 max-w-screen-3xl xl:px-20 xl:mx-auto"><div><h4 class="m-0 mb-2 mx-auto font-gilr max-xs:max-w-xs !text-lg xs:!text-2xl lg:mb-0 lg:text-left">Never miss an update, join our newsletter club!</h4><p class="m-0 lg:text-left">Get the news, special offers, digests in your inbox</p></div><div class="lg:ml-5 lg:grow"><form class="form subscribe" action="https://amasty.com/newsletter/subscriber/new/" method="post" x-data="Object.assign(hyva.formValidation($el), initNewsletterForm())" @submit.prevent="submitForm()" id="newsletter-validate-detail" aria-label="Subscribe to Newsletter" ><div class="flex max-xs:flex-col justify-center gap-2 lg:justify-end"><div class="am-input field field-reserved !mb-0 light-error-text min-w-56 lg:w-full lg:max-w-sm"><input name="email" type="email" required id="newsletter-subscribe" placeholder="Enter your email address" aria-describedby="footer-newsletter-heading" ><label for="newsletter-subscribe">Email Address</label> <input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /></div> <button class="btn btn-secondary h-fit max-xs:mt-5" type="submit">Subscribe</button></div></form><script data-info="not-move-to-bottom"> function initNewsletterForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#newsletter-validate-detail'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script></div></div></div> <div x-data="initAmBackToTopBtn()" x-cloak @keyup.enter="$el.click()" class="p-4 bg-gray-600 transition-all hover:bg-gray-500 text-white text-center font-bold cursor-pointer am-text-small md:fixed md:right-0 md:bottom-[313px] md:z-[999] md:py-4 md:pl-2 md:pr-2 md:text-xs md:rounded-bl-xl md:rounded-tl-xl md:flex md:flex-col md:items-center md:gap-2 md:opacity-0" tabindex="0" data-role="button"><svg xmlns="http://www.w3.org/2000/svg" width="26" height="18" viewBox="0 0 30 30" fill="none" class="fill-white hidden md:!inline-block md:rotate-90" role="img"> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.65685 22.0711L1.29289 15.7071C0.902369 15.3166 0.902369 14.6834 1.29289 14.2929L7.65685 7.92893C8.04738 7.53841 8.68054 7.53841 9.07107 7.92893C9.46159 8.31946 9.46159 8.95262 9.07107 9.34315L4.41421 14L28 14V16L4.41421 16L9.07107 20.6569C9.46159 21.0474 9.46159 21.6805 9.07107 22.0711C8.68054 22.4616 8.04738 22.4616 7.65685 22.0711Z"/> <title>arrow-left</title></svg> <div class="tracking-widest md:[writing-mode:tb-rl] md:rotate-180">BACK TO TOP</div></div><script data-info="not-move-to-bottom"> function initAmBackToTopBtn() { const SCROLL_THRESHOLD = 600; const CSS_CLASSES = { visibleClass: 'md:opacity-100' }; return { isMobile: true, init() { const matchMedia = window.matchMedia('(max-width: 768px)'); this.isMobile = matchMedia.matches; if (!this.isMobile) { this._addScrollListener(); } this._initClickOnBtnListeners(); }, _initClickOnBtnListeners() { this.$el.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' })); }, _addScrollListener() { window.addEventListener('scroll', this.throttle(() => { if (window.scrollY > SCROLL_THRESHOLD) { this.$el.classList.add(CSS_CLASSES.visibleClass); } else { this.$el.classList.remove(CSS_CLASSES.visibleClass); } }, 100)); }, ...AmsiteUtils() } }</script><div class="footer content"> <div class="bg-gray-800"><div class="pt-9 px-8 max-xs:px-6 lg:px-12 xl:px-20 lg:flex lg:pt-16 max-w-screen-3xl xl:mx-auto"><div class="flex lg:flex-col items-start justify-between mb-8"><div class="lg:mb-5"><div class="max-w-36 lg:max-w-none"> <a class="logo flex" href="https://amasty.com/" title="1" aria-label="store logo"><img src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/images/footer-logo.svg" title="Amasty logo" alt="Amasty logo" class="lazy logo-image" width="198" height="48" /></a></div> <ul class="flex items-center ul-reset mt-4 lg:mt-5"><li class="m-0"><a href="https://www.youtube.com/user/AmastyTeam?sub_confirmation=1" class="inline-block" target="_blank" aria-label="Youtube" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="28" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M19.455 20.481H17.94l.007-.893a.72.72 0 01.713-.72h.097a.72.72 0 01.715.72l-.017.893zm-5.682-1.913c-.384 0-.698.262-.698.583v4.341c0 .32.314.581.698.581.386 0 .7-.26.7-.581v-4.34c0-.322-.314-.584-.7-.584zM23 16.14v8.258C23 26.38 21.307 28 19.237 28H3.763C1.693 28 0 26.38 0 24.398V16.14c0-1.98 1.693-3.602 3.763-3.602h15.474c2.07 0 3.763 1.621 3.763 3.602zM4.795 25.295v-8.7l1.917.002v-1.29L1.6 15.3v1.267l1.596.005v8.723h1.6zm5.75-7.403H8.946v4.645c0 .672.04 1.008-.002 1.126-.13.36-.715.743-.943.04-.038-.124-.004-.496-.005-1.134l-.006-4.677H6.4l.004 4.604c.001.705-.016 1.231.006 1.47.039.423.025.915.41 1.196.72.526 2.1-.078 2.444-.83l-.003.96 1.285.001v-7.401zm5.117 5.32l-.004-3.867c-.001-1.473-1.088-2.356-2.562-1.164l.006-2.874-1.597.002-.008 9.922 1.314-.02.12-.617c1.678 1.562 2.733.491 2.73-1.383zm5.005-.513l-1.2.006-.003.165v.679a.66.66 0 01-.655.659h-.235a.66.66 0 01-.656-.66v-1.785h2.746v-1.048c0-.767-.02-1.532-.082-1.97-.196-1.386-2.114-1.606-3.082-.897a1.83 1.83 0 00-.671.916c-.136.399-.204.943-.204 1.635v2.305c0 3.832 4.589 3.29 4.042-.005zm-6.152-12.516c.083.204.211.369.385.493.172.123.391.184.654.184.231 0 .435-.063.613-.193.177-.13.327-.324.449-.582l-.03.636h1.782v-7.69h-1.403v5.985c0 .324-.263.59-.585.59a.59.59 0 01-.584-.59V3.03h-1.464v5.188c0 .66.011 1.101.03 1.324.02.222.071.435.153.641zM9.113 5.84c0-.739.06-1.315.181-1.73.122-.415.34-.748.656-.999.315-.252.718-.379 1.208-.379.413 0 .766.083 1.061.243.297.162.526.372.684.631.162.26.271.528.33.801.06.277.09.696.09 1.26v1.945c0 .713-.029 1.238-.084 1.571-.054.334-.17.644-.351.935a1.676 1.676 0 01-.686.64 2.164 2.164 0 01-.968.206c-.406 0-.748-.057-1.03-.176a1.418 1.418 0 01-.658-.534 2.386 2.386 0 01-.335-.862c-.067-.336-.099-.842-.099-1.516l.001-2.036zm1.396 3.055c0 .435.32.79.71.79.389 0 .707-.355.707-.79V4.8c0-.434-.318-.79-.708-.79-.389 0-.709.356-.709.79v4.095zm-4.933 2.067h1.682l.001-5.899L9.247.01h-1.84L6.351 3.764 5.279 0H3.46l2.114 5.066.003 5.896z"/><title>social/social-youtube</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://www.linkedin.com/company/amasty" class="inline-block" target="_blank" aria-label="Linkedin" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="23" height="23" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M2.778 0c1.51.001 2.754 1.25 2.75 2.771C5.526 4.364 4.208 5.564 2.76 5.53 1.29 5.559-.001 4.329 0 2.761A2.775 2.775 0 012.778 0zM4.381 22.997H1.147a.76.76 0 01-.76-.762V8.405c0-.42.34-.76.76-.76h3.234c.42 0 .76.34.76.76v13.83a.76.76 0 01-.76.762zM23 12.502c0-2.9-2.345-5.25-5.237-5.25h-.83a4.646 4.646 0 00-4.076 2.411.348.348 0 00-.043-.005V7.96a.316.316 0 00-.316-.316H8.463a.316.316 0 00-.315.316v14.72c0 .175.141.317.315.317h4.123a.316.316 0 00.316-.315v-8.505c0-1.47 1.17-2.69 2.636-2.707a2.667 2.667 0 012.698 2.673v8.54c0 .174.141.316.315.316l4.133.001a.316.316 0 00.316-.316V12.5z"/><title>social/social-linkedin</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://www.facebook.com/Amasty.Ltd" class="inline-block" target="_blank" aria-label="Facebook" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="13" height="25" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M8.503 25.484V14.266h3.765l.564-4.372h-4.33V7.103c0-1.266.352-2.129 2.167-2.129h2.315V1.062C12.584 1.01 11.21.89 9.611.89 6.273.89 3.988 2.928 3.988 6.67v3.224H.213v4.372h3.775v11.218h4.515z"/><title>social/social-facebook</title></svg> </a></li> <li class="m-0 ml-5"><a href="https://twitter.com/AmastyTeam" class="inline-block" target="_blank" aria-label="Twitter" rel="nofollow" ><svg xmlns="http://www.w3.org/2000/svg" width="28" height="22" fill="none" class="fill-gray-400 hover:fill-gray-300" role="img"><path d="M8.805 22c10.567 0 16.346-8.465 16.346-15.805 0-.24 0-.48-.017-.718A11.482 11.482 0 0028 2.6c-1.049.45-2.16.744-3.3.874A5.611 5.611 0 0027.227.403a11.754 11.754 0 01-3.648 1.348 5.813 5.813 0 00-3.26-1.678 5.921 5.921 0 00-3.642.585 5.641 5.641 0 00-2.523 2.606 5.392 5.392 0 00-.365 3.553A16.748 16.748 0 017.23 5.133a16.22 16.22 0 01-5.281-4.12 5.4 5.4 0 00-.63 4.049 5.562 5.562 0 002.408 3.367 5.851 5.851 0 01-2.607-.695v.07c0 1.282.46 2.525 1.3 3.518a5.784 5.784 0 003.309 1.927 5.927 5.927 0 01-2.594.096 5.571 5.571 0 002.044 2.76 5.88 5.88 0 003.323 1.097 11.78 11.78 0 01-7.134 2.383c-.458-.001-.914-.028-1.368-.08a16.67 16.67 0 008.805 2.49"/><title>social/social-twitter</title></svg> </a></li></ul></div> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" class="lazy" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/new-trustpilot.svg" alt="Trustpilot logo" width="120" height="52"></div> <div x-data="initFooterLinksAccordion()" data-amsite-js="footer-links-accordion" class="lg:flex lg:justify-between lg:ml-24 xl:ml-32 lg:flex-grow lg:max-w-4xl"><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Legal</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Terms and conditions page" href="https://amasty.com/terms-and-conditions.html"> Terms & Conditions </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Data processing consent page" href="https://amasty.com/data-processing-consent.html"> Data Processing Consent </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Privacy policy page" href="https://amasty.com/privacy-policy.html"> Privacy Policy </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to License agreement page" href="https://amasty.com/license.html"> License Agreement </a></li> <li class="mb-1"><a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Support License Agreement page" href="https://amasty.com/support-license-agreement.html"> Support License Agreement </a></li></ul></details><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Knowledge Base</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Knowledge page" href="https://amasty.com/knowledge-base/"> FAQ </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Support Knowledge Base page" target="_blank" href="https://support.amasty.com/portal/en/kb"> Support Knowledge Base </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Product Comparison page" href="https://amasty.com/extension-comparisons.html"> Product Comparison </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to User Guides page" href="https://amasty.com/docs/doku.php?id=magento_2"> User Guides </a> </li></ul></details><details class="py-3 lg:p-0 border-b border-primary-darker lg:border-none"><summary x-data="{ isOpen: false }" @click="isOpen = $event.target.open && window.matchMedia('(max-width: 1023px)') ? true : !isOpen" class="flex justify-between items-center"><h3 class="m-0 text-gray-50">Corporate</h3><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" class="stroke-gray w-5 h-5 lg:hidden" width="20" height="20" :class="{ 'rotate-180': isOpen }" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 9-7 7-7-7"/></svg> </summary><ul class="ul-reset pt-3"><li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to About Us page" href="https://amasty.com/about.html"> About Us </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Media Kit page" href="https://amasty.com/about.html#media-kit"> Media Kit </a> </li> <li class="mb-1"> <a class="text-gray hover:text-gray-300 duration-200" aria-label="Go to Blog" href="https://amasty.com/blog/"> Blog </a> </li></ul></details></div><script data-info="not-move-to-bottom"> 'use strict'; function initFooterLinksAccordion() { const detailsElements = document.querySelectorAll('[data-amsite-js="footer-links-accordion"] details'); const matchMedia = window.matchMedia('(max-width: 1023px)'); function detectMobile() { return matchMedia.matches; } function setBehavior() { const isMobile = detectMobile(); if (!isMobile) { detailsElements.forEach((details) => { details.setAttribute('open', ''); details.addEventListener('click', preventClose); }); } else { detailsElements.forEach((details) => { details.removeAttribute('open'); details.removeEventListener('click', preventClose); }); } } function preventClose(e) { if (e.target.nodeName !== 'A') { e.preventDefault(); } } matchMedia.addEventListener('change', setBehavior); return { init() { setBehavior(); } } }</script></div><div class="flex gap-2 pt-7 px-6 xs:px-8 max-xs:px-6 bg-gray-800 lg:pt-16 lg:justify-center"> <img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/paypal.svg" alt="Paypal card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/american.svg" alt="American Express card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/discover.svg" alt="Discover card" ><img class="lazy amsite-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=" data-src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/mastercard.svg" alt="Mastercard" ><img class="lazy amsite-image" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/images/footer/visa.svg" alt="Visa card" ></div><!-- styles for cms block --><div class="hidden text-gray hover:text-gray-300 mb-1"></div></div> <div class="amtheme-footer-section"> </div></div></footer> <div x-data="{...hyva.modal(), ...initAmGdprPolicyPopup()}" x-init="initGdprPopup()" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('amgdpr-policy-popup')" x-bind="overlay('amgdpr-policy-popup')" class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-40"><div x-ref="amgdpr-policy-popup" role="dialog" aria-labelledby="amgdpr-policy-content" class="flex flex-col bg-white shadow-xl rounded-lg p-10 max-h-[95vh] max-w-6xl relative"><div tabindex="0" @focusin="focusAcceptButton()"></div><button @click="$dispatch('amgdpr-close-policy')" x-ref="amgdpr-close-policy" aria-label="Close" class="absolute right-4 top-4 text-gray-300 transition hover:text-black focus:drop-shadow-md hover:drop-shadow-md"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" class="h-6 w-6" width="24" height="24" role="img"><path fill-rule="evenodd" d="M4.293 4.293a1 1 0 0 1 1.414 0L10 8.586l4.293-4.293a1 1 0 1 1 1.414 1.414L11.414 10l4.293 4.293a1 1 0 0 1-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L8.586 10 4.293 5.707a1 1 0 0 1 0-1.414Z" clip-rule="evenodd"/><title>x</title></svg> </button> <div class="flex w-full"><p class="w-full text-blue-500 text-3xl mb-5 ml-3" x-text="title"></p></div><div x-show="notificationText && policyData.versionChanged" class="flex w-full"><p class="mb-4 p-4 bg-yellow-100 w-full" x-text="notificationText"></p></div><div id="amgdpr-policy-content" class="max-h-[500px] overflow-auto first:mx-0 child:mx-0" tabindex="0" x-html="policyText"></div><div class="mt-8 flex w-full justify-center"><button x-focus-first @click="$dispatch('amgdpr-accept-policy')" x-ref="amgdpr-accept-policy" type="button" class="btn btn-primary uppercase font-bold" aria-label="I have read and accept">I have read and accept</button></div><div tabindex="0" @focusin="focusCloseButton()"></div></div></div></div> <style> :root { /* Bar Color Settings */ --ambar-background: #fff; --ambar-links-color: #326ed1; --ambar-policy-text: #374151; /* Buttons Color Settings */ --ambar-button-accept-color: #337ab7; --ambar-button-accept-hover-color: #337ab7; --ambar-button-accept-text: #fff; --ambar-button-accept-hover-text: #fff; --ambar-button-allow-color: #337ab7; --ambar-button-allow-hover-color: #337ab7; --ambar-button-allow-text: #fff; --ambar-button-allow-hover-text: #fff; --ambar-button-decline-color: #337ab7; --ambar-button-decline-hover-color: #337ab7; --ambar-button-decline-text: #fff; --ambar-button-decline-hover-text: #fff; --ambar-button-settings-color: #337ab7; --ambar-button-settings-hover-color: #337ab7; --ambar-button-settings-text: #fff; --ambar-button-settings-hover-text: #fff; /* Buttons Order Settings */ --ambar-button-accept-order: 0; --ambar-button-allow-order: 0; --ambar-button-settings-order: 0; --ambar-button-decline-order: 0; }</style> <section x-cloak x-data="{isLoading: false}" @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002]" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div></section> <style> :root { --amlabel-margin-between: 7px; }</style> <div x-data="{ ...hyva.modal({ duration: 150, transitionEnter: 'transform duration-150', transitionLeave: 'transform duration-150' }), ...initAmastyCookieBar() }" x-init="initBar()" x-spread="eventListeners" x-bind="eventListeners" x-cloak id="am-cookie-bar" > <div x-cloak x-bind="overlay('am-cookie-bar')" x-spread="overlay('am-cookie-bar')" class=""><div class="fixed flex justify-center items-center text-left z-10 inset-0"><div x-ref="am-cookie-bar" role="dialog" aria-modal="true" x-no-overlay aria-label="Cookie Bar" class="flex w-[90%] max-w-screen-md shadow-xl rounded-lg relative p-12 overflow-auto bg-container"> <div class="flex flex-col max-w-[740px] justify-center"><div class="flex w-full justify-end"><button type="button" @click="$dispatch('close-cookie-bar')" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button></div><div class="flex w-full justify-center flex-col"> <div class="w-full"><p class="text-ambar-policy-text am-text-small text-center">We use cookies to help improve our services, make personal offers, and enhance your experience. If you do not accept optional cookies below, your experience may be affected. If you want to know more, please read the <a href="/privacy-policy.html" title="Cookie Policy">Cookie Policy</a></p></div> <div class="flex flex-wrap w-full justify-center gap-4 mt-6"> <button @click.prevent="$dispatch('cookiebar-action-allow')" class="ambar-btn-accept btn btn-secondary" data-role="action">Accept Cookies</button> <button @click.prevent="$dispatch('cookiebar-action-settings')" class="ambar-btn-settings btn btn-as-text !px-4" data-role="action">Custom Settings</button> </div></div></div></div></div></div></div> <div x-data="{...hyva.modal(), ...initCookieBarSettings()}" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('am-cookie-bar-settings')" x-bind="overlay('am-cookie-bar-settings')" class="am-overlay-popup"><div class="am-container-popup inset-0 items-center"><div x-ref="am-cookie-bar-settings" role="dialog" aria-labelledby="cookiebar-groups" class="am-dialog-popup max-w-3xl max-h-[92vh] max-xs:!mx-4 max-lg:mx-16 !rounded-xl"><div tabindex="0" @focusin="focusDoneButton()"></div><button type="button" @click="$dispatch(hide('close-am-cookie-bar-settings'))" x-ref="ambar-settings-close" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <p class="mb-7">Please select and accept your Cookies Group</p><div id="cookiebar-groups" class="max-h-[500px] overflow-auto mb-6 pr-7"> <div class="w-full flex flex-col"><template x-for="group in $store.AmastyCookieGroups.groupData" :key="group.groupId"><div class="mb-10"><div class="flex justify-between items-start mb-2"><h3 class="!text-base md:!text-xl ambar-group-title" x-text="group.name"></h3><div class="am-pretty-checkbox"><input type="checkbox" name="groups[]" x-model="group.checked" :id="`amcookie-popup-group-${group.groupId}`" :disabled="group.isEssential" :value="group.groupId" :aria-label="group.name" ><label :for="`amcookie-popup-group-${group.groupId}`"></label></div></div><p class="am-text-caption md:!text-sm ambar-group-description" x-html="group.description"></p><button class="btn btn-as-link md:!text-sm md:am-text-small" type="button" aria-label="More Information" @click="$dispatch('popup\u002Dopen\u002Dam\u002Dcookie\u002Dgroup\u002Dinfo', group)">More Information</button></div></template></div> <div x-data="{...hyva.modal(), ...initCookieGroupInfo_67be52cad3a26()}" x-spread="eventListeners" x-bind="eventListeners"><div x-cloak x-spread="overlay('popup-am-cookie-group-info')" x-bind="overlay('popup-am-cookie-group-info')" class="am-overlay-popup"><div class="am-container-popup inset-0 items-center"><div x-ref="popup-am-cookie-group-info" role="dialog" aria-labelledby="the-label" class="am-dialog-popup max-w-7xl max-h-[92vh] max-xs:!mx-4 max-lg:mx-16 !rounded-xl"><template x-if="group"><div x-focus-first><button type="button" @click="$dispatch('popup-close-am-cookie-group-info')" x-ref="ambar-settings-close" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> <div class="md:flex md:justify-start pb-4"><h3 class="text-xl font-semibold" x-text="group.name"></h3></div><template x-if="group.description"><p class="mb-4" x-html="group.description"></p></template><div class="overflow-x-scroll md:overflow-x-auto"><table class="table-auto w-full mb-4 text-left"><thead><tr class="table table-fixed w-full"><th class="am-text-caption">Cookie Name</th><th class="am-text-caption">Cookie Provider</th><th class="am-text-caption">Cookie Description</th><th class="am-text-caption">Cookie Lifetime</th><th class="am-text-caption">Cookie Type</th></tr></thead><tbody class="block max-h-[500px] overflow-auto"><template x-for="(item, index) in group.cookies" :key="index"><tr class="table table-fixed w-full"><td x-text="item.name" class="break-words"></td><td x-text="item.provider" class=""></td><td x-html="item.description" class=""></td><td x-text="item.lifetime" class=""></td><td x-text="item.type" class=""></td></tr></template></tbody></table></div></div></template><button @click="$dispatch('popup-close-am-cookie-group-info')" aria-label="Done" class="btn btn-secondary w-full">Done</button></div></div></div></div></div><div class="w-full flex"><button class="btn btn-secondary w-full" x-ref="ambar-settings-done" x-focus-first @click="$dispatch('cookiebar-action-accept', $store.AmastyCookieGroups.getCheckedGroupIds())">Done</button></div><div tabindex="0" @focusin="focusCloseButton()"></div></div></div></div></div> <script data-info="not-move-to-bottom"> (function() { const PROMOTION_SELECTOR = '[data-promo-id]'; _trackPromotions(PROMOTION_SELECTOR); _initListener(); setTimeout(function () { console.log('delay_backstopjs_ready'); }, 7000); function _initListener () { document.body.addEventListener('initAnalyticsPromotion', function (e) { _trackPromotions(e.detail.element); }); } function _trackPromotions(selector) { const ecommerceAttributes = ['id', 'name', 'creative', 'position']; const elements = document.querySelectorAll(selector); [...elements].forEach((element) => { const elementPromotion = element; const params = {}; ecommerceAttributes.forEach((item) => { params[item] = elementPromotion.getAttribute('data-promo-' + item); }); _trackPromotionViews(elementPromotion, params); _trackPromotionClick(elementPromotion, params); }); } function _trackPromotionViews(element, params) { const observer = new IntersectionObserver(function (entries, observerer) { entries.forEach(function (entry) { if (entry.isIntersecting && entry.target.offsetHeight !== 0) { window.dataLayer.push({ 'event': 'view_promotion', any_transmitted_info: params.creative, any_transmitted_info_2: params.id, any_transmitted_info_3: params.name }); observerer.unobserve(entry.target); } }); }); observer.observe(element); } function _trackPromotionClick (element, params) { element.addEventListener('click', function () { if (!window.hasOwnProperty('google_tag_manager')) { return; } window.dataLayer.push({ 'event': 'select_promotion', 'any_transmitted_info': params.creative, 'any_transmitted_info_2': params.id, 'any_transmitted_info_3': params.name }); }); } }())</script> <script data-info="not-move-to-bottom"> 'use strict'; (function () { _initListeners(); function _initListeners() { _triggerAddToCartEvents(); } function _triggerDefaultAddToCartMatomo(productObject) { productObject.items.forEach(function(item) { window._mtm.push({ 'event': 'SuccessfulAddCart', 'any_transmitted_info': item.item_name }); }); } function _triggerAddToCartEvents() { let isAddCartFromPopup = false; let isAddCartFromProductPageFirstScree = false; const addCartBtn = document.querySelector('.amtheme-product-wrap [data-amtheme-js="addtocart-button"]'); if (addCartBtn) { addCartBtn.addEventListener('click', function () { if (!addCartBtn.closest('.amtheme-popup-block')) { isAddCartFromProductPageFirstScree = true; } }); } document.body.addEventListener('addProductFromBundlePopup', function () { isAddCartFromPopup = true; }); document.body.addEventListener('am.popupOpened', function () { const btnInPopup = document.querySelector('.amtheme-popup-block [data-amtheme-js="addtocart-button"]'); if (btnInPopup) { document.querySelector('.amtheme-popup-block [data-amtheme-js="addtocart-button"]').addEventListener('click', function () { isAddCartFromPopup = true; }); } }); document.body.addEventListener('successfulAddCart', (e) => { e.detail.forEach(function (productObject) { if (productObject.product_name) { if (isAddCartFromPopup) { window.dataLayer.push( { 'event': 'AddCartPopup', 'product_name': productObject.product_name } ); window._mtm.push({ 'event': 'AddCartPopup', 'any_transmitted_info': productObject.product_name }); } else if (isAddCartFromProductPageFirstScree) { window.dataLayer.push( { 'event': 'AddCartProduct', 'product_name': productObject.product_name } ); window._mtm.push({ 'event': 'AddCartProduct', 'any_transmitted_info': productObject.product_name, }); } } window.dataLayer.push({ event: 'SuccessfulAddCart', ecommerce: { value: productObject.value, items: productObject.items } }); _triggerDefaultAddToCartMatomo(productObject); }); isAddCartFromPopup = false; }); } }())</script> <script data-info="not-move-to-bottom"> (function() { const sentAnalyticsData = function (data) { data.forEach((item) => { if (item.event && item.event === 'triggerCustomSubmitForm') { window.dataLayer.push({ 'event': item.data }); } if (item.event && item.event === 'successfulAddCart') { document.body.dispatchEvent(new CustomEvent('successfulAddCart', { detail: item.data })); checkUpdateMiniCart(); } }); }; document.addEventListener('DOMContentLoaded', function () { const urlString = `${window.BASE_URL}rest/V1/amasty_gtm/get-analytics-data`; fetch(urlString) .then(response => response.json()) .then(function (response) { if (response.length) { const data = JSON.parse(response); if (typeof window.dataLayer === 'undefined') { window.dataLayer = []; } const interval = setInterval(() => { if (window.MatomoTagManager) { clearInterval(interval); sentAnalyticsData(data); } }, 1000); } }); }); function checkUpdateMiniCart() { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); } }())</script> <script data-info="not-move-to-bottom"> 'use strict'; (function() { const SELECTORS = { footerSubscriptionForm: '#newsletter-validate-detail', customerAccountSubscriptionForm: '[data-amsite-js="customer-account-newsletter-form"]', customerAccountCheckboxNewsletter: '[data-amsite-js="checkbox-newsletter-customer-account"]', requestQuoteTopForm: '#amform-form-51', requestQuoteDescriptionForm: '#amform-form-52' }; _checkSubmitSubscribeInFooter(); _checkSubmitSubscribeInCustomerAccount(); _submitCustomOneVariableForms(SELECTORS.requestQuoteTopForm, 'SendFormPDPRequestQuote', 'SendFormPDPRequestQuote'); _submitCustomOneVariableForms(SELECTORS.requestQuoteDescriptionForm, 'SendFormPDPRequestQuote', 'SendAdditionalFormPDPRequestQuote'); _universalTrackingSubmitForm(); function _checkSubmitSubscribeInFooter() { const subscriptionForm = document.querySelector(SELECTORS.footerSubscriptionForm); if (subscriptionForm) { subscriptionForm.addEventListener('submit', () => { window.hyva.formValidation(subscriptionForm).validate() .then(() => { window.dataLayer.push( { 'event': 'setPositionToSubscribeNewsletter', 'subscribe_newsletter_position': 'SubscriptionFooter' }); }) .catch(() => { return false; }); }); } } function _checkSubmitSubscribeInCustomerAccount() { const subscriptionForm = document.querySelector(SELECTORS.customerAccountSubscriptionForm); if (subscriptionForm) { subscriptionForm.addEventListener('submit', () => { hyva.formValidation(subscriptionForm).validate() .then(() => { if (subscriptionForm.querySelector(SELECTORS.customerAccountCheckboxNewsletter).checked) { window.dataLayer.push( { 'event': 'setPositionToSubscribeNewsletter', 'subscribe_newsletter_position': 'SubscriptionCustomerAccount' }); } }) .catch(() => { return false; }); }); } } function _submitCustomOneVariableForms(formSelector, eventName, variableValue = '') { const form = document.querySelector(formSelector); if (form) { form.addEventListener('submit', () => { if (jQuery(form).validation('isValid')) { window.dataLayer.push( { 'event': eventName, 'any_transmitted_info': variableValue }); } }); } } function _universalTrackingSubmitForm() { window.addEventListener('amcform-success-submitted', () => { setTimeout(() => { fetch(`${window.BASE_URL}rest/V1/amasty_gtm/get-analytics-data`) .then((response) => { return response.json(); }) .then((data) => { if (data) { _checkFormAnalytics(JSON.parse(data)); } }) .catch(function(error) { console.log(error.message); }); }, 1000); }); } function _checkFormAnalytics(data) { data.forEach(function(item) { if (item.event && item.event === 'triggerCustomSubmitForm') { window.dataLayer.push({ 'event': item.data }); } }); } })();</script> <div class="am-hyva-loader-wrapper flex flex-row justify-center items-center w-full h-full fixed select-none z-[1000002] hidden" style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" x-data="{ isLoading: false }" x-on:show-global-loader.window="isLoading = true; $root.classList.remove('hidden');" x-on:hide-global-loader.window="isLoading = false; $root.classList.add('hidden');" x-show="isLoading" x-transition:enter="ease-out duration-200" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"><div class="am-hyva-loader flex items-center flex-col justify-center w-full h-full"><div class="amsite-head">Loading</div><div class="flex mt-1"><span class="square relative w-5 h-5"></span> <span class="square two relative w-5 h-5"></span> <span class="square three relative w-5 h-5"></span> <span class="square fourth relative w-5 h-5"></span></div></div></div> <script data-info="not-move-to-bottom"> 'use strict'; (function() { const SELECTORS = [ { selector: '[data-amsite-analytics-js="btn-add-to-cart-in-page-builder-template"]', action: 'add_to_cart_tariff_block', attr: 'data-product-name-analytics' }, { selector: '[analytics-comparison-block-feature-list]', action: 'view_features_tariff_block', attr: 'analytics-comparison-block-feature-list' }, { selector: '[analytics-comparison-block-demo-view]', action: 'view_demo_tariff_block', attr: 'analytics-comparison-block-demo-view' }, { selector: '[analytics-comparison-block-product-name]', action: 'click_product_name_tariff_block', attr: 'analytics-comparison-block-product-name' } ]; function attachEventListener(selector, action, attr) { document.querySelectorAll(selector).forEach((button) => { button.addEventListener('click', () => { const productName = button.getAttribute(attr); pushAnalyticsFromComparisonBlock(action, productName); }); }); } function pushAnalyticsFromComparisonBlock(actionName, productName) { window.dataLayer.push({ 'event': 'ClickOnComparisonBlock', 'any_transmitted_info': actionName, 'product_name': productName }); } function trackMatomoProductViews() { window._paq.push(['setEcommerceView', "b2b-ecommerce-premium-suite-for-magento-2", "B2B E-commerce Premium Solution for Magento 2", "Magento 2" ]); window._paq.push(['trackPageView']); } SELECTORS.forEach(({ selector, action, attr }) => attachEventListener(selector, action, attr)); window.addEventListener('matomo-has-loaded', trackMatomoProductViews); })();</script> <div x-data="AmAuthPopup()" x-on:private-content-loaded.window="initializeAuthPopup(event.detail)" x-on:amsl-show-popup.window="showOnExternalEvent(event)" x-on:amsl-hide-popup.window="hide(modalName)" x-on:amsl-content-updated.window="bindLinksEvents()" > <div x-cloak x-bind="overlay('social-login-popup')" x-spread="overlay('social-login-popup')" class="am-overlay-popup z-60"><div class="am-container-popup inset-0"><div x-ref="social-login-popup" role="dialog" aria-modal="true" aria-labelledby="social-login-popup" class="am-dialog-popup w-full sm:max-w-[560px]"> <div id="social-login-popup" class="amsl-hyva-popup-block group relative focus:outline-none focus-within:outline-none -social-bottom" role="dialog" aria-labelledby="amsl-popup-dialog" tabindex="0" x-on:click.stop ><h2 class="amsl-dialog-title sr-only" id="amsl-popup-dialog" >Login and Registration Form</h2><div class="amsl-tabs-wrapper" title="Login and Registration Form" ><ul class="amsl-hyva-tablist flex mb-6 font-gilr am-title-h2 ul-reset text-secondary-lighter" role="tablist" x-on:keydown="onKeypress($event)" x-show="activeTab !== 'amsl-forgot'" ><li class="amsl-title grow m-0 pb-4 text-center border-b border-primary" id="tab-amsl-login" role="tab" aria-controls="amsl-login-content" tabindex="0" :class="{ '-active text-primary !border-black': activeTab === 'amsl-login' }" ><span class="amsl-link cursor-pointer" data-toggle="switch" x-on:click.prevent=" activeTab = 'amsl-login' " >Login</span></li> <li class="amsl-title grow m-0 pb-4 text-center border-b border-primary" id="tab-amsl-register" role="tab" aria-controls="amsl-register-content" tabindex="0" :class="{ '-active text-primary !border-black': activeTab == 'amsl-register' }" ><span class="amsl-link cursor-pointer" x-on:click.prevent=" activeTab = 'amsl-register' " >Register</span></li></ul><div id="amsl-login-content" x-show="activeTab === 'amsl-login'" x-cloak role="tabpanel" aria-labelledby="tab-amsl-login" ><template x-if="formMessages.has('amsl-login')"><div class="mt-4"><template x-for="message in formMessages.get('amsl-login')" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-login-content amsl-position-variations "><template x-if="!isLogged"><div class="amsl-form"> <div class="max-w-[480px] mx-auto my-0"><strong class="block mb-2 text-center group-[.amsl-hyva-popup-block]:hidden am-title-h2" role="heading" aria-level="2">Log in to Amasty</strong> <div class="card"><div aria-labelledby="am-block-customer-login-heading"><form class="form form-login" action="https://amasty.com/customer/account/loginPost/" method="post" x-data="Object.assign(hyva.formValidation($el), initCustomerLoginForm())" @submit.prevent="submitForm()" id="customer-login-form"><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /> <fieldset class="fieldset login"><legend class="mb-3"><h2 class="text-xl font-medium title-font text-primary">Login</h2></legend><div class="text-secondary-darker mb-6 text-center group-[.amsl-hyva-popup-block]:text-left">If you have an account with us, please log in.</div><div class="am-input field field-reserved email required"><input name="login[username]" class="form-input" required value="" autocomplete="off" id="email" type="email" placeholder="Email" /><label class="label" for="email">Email</label></div><div class="am-input field password field-reserved required control !mt-6 peer"><input name="login[password]" class="form-input" required :type="customer_form_login_popup_showPassword ? 'text' : 'password'" placeholder="Password" autocomplete="off" id="am-pass" /><label for="am-pass" class="label">Password</label></div><a class="am-text-caption block -mt-5 peer-[.field-error]:-mt-2" href="https://amasty.com/customer/account/forgotpassword/">Forgot password?</a> <button type="submit" class="btn btn-primary mt-6 w-full disabled:opacity-75" name="send" >Log In</button> <div><template x-if="displayErrorMessage"><p class="text-red flex items-center"><span class="inline-block w-8 h-8 mr-3"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/><title>exclamation-circle</title></svg> </span> <template x-for="errorMessage in errorMessages"><span x-html="errorMessage"></span></template></p></template></div></fieldset></form></div></div></div> </div></template> <div class="am-social-icons max-w-[480px] mx-auto" data-amsite-js="am-social-icons"><span class="amsl-separator flex items-center justify-center my-7 w-full h-px bg-gray-200"><span class="am-text-caption text-secondary-lighter uppercase font-bold bg-white px-2">or continue with</span></span> <div class="amsl-social-wrapper with-labels" ><div class="amsl-social-login -labeled-buttons"><template x-if="socialErrorMessage"><p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p></template><div class="amsl-buttons flex flex-col xs:flex-row gap-3" :class="{'-show-all': canShowAllSocialIcons()}" > <div class="amsl-button-wrapper w-full group google with-label"><a class="amsl-button -google -rectangular group-[.facebook]:bg-blue-800 hover:opacity-80 group-[.google]:bg-blue-500 flex items-center px-3 py-2 rounded transition" x-on:click="socialLoginClick($event)" href="https://amasty.com/amsociallogin/social/login/?type=google" title="Sign in with Google" role="link" ><span class="amsl-social-icon pointer-events-none bg-white rounded group-[.facebook]:text-blue-800" role="img" aria-label="Sign in with Google" ><svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" role="img"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/><title>google</title></svg> </span> <span class="amsl-text pointer-events-none text-white am-text-small w-[80%] xs:w-[85%] text-center">Google</span> </a></div></div></div></div> </div></div></div><div id="amsl-register-content" x-show="activeTab === 'amsl-register'" x-cloak role="tabpanel" aria-labelledby="tab-amsl-register" ><template x-if="formMessages.has('amsl-register')"><div class="mt-4"><template x-for="message in formMessages.get( 'amsl-register' )" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-register-content"><template x-if="!isLogged"><div class="amsl-form"> <div class="mb-8 max-w-[480px] mx-auto"><form class="form create hyva-account form-create-account" action="https://amasty.com/customer/account/createpost/" x-data="Object.assign(hyva.formValidation($el), initForm())" id="accountcreate" @submit.prevent="submitForm()" method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off" ><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /> <div class="flex flex-col"><p class="text-center group-[.amsl-hyva-popup-block]:text-left mb-0">Use your customer account to view all invoices and purchases for one-clickdownloads, update extensions to the latest versions for free, and extend your support period.</p><fieldset class="mt-6 card"><legend class="hidden"><span> Personal Information</span></legend><input type="hidden" name="success_url" value=""><input type="hidden" name="error_url" value=""><div class="group-[.amsl-hyva-popup-block]:flex gap-2"><div class="am-input field field-reserved w-full"><input type="text" id="firstname" name="firstname" value="" placeholder="First Name" minlength="2" data-validate='{"validate-not-only-special": true}' required @input.debounce="onChange"><label for="firstname">First Name</label></div><div class="am-input field field-reserved w-full"><input type="text" id="lastname" name="lastname" value="" placeholder="Last Name" minlength="2" data-validate='{"validate-not-only-special": true}' required @input.debounce="onChange"><label for="lastname">Last Name</label></div></div></fieldset><fieldset class="my-5 card group-[.amsl-hyva-popup-block]:mt-0 !mb-2"><legend class="hidden"><span> Sign-in Information</span></legend><div class="am-input field field-reserved"><input type="email" name="email" autocomplete="email" id="am-email-address" placeholder="Email" required value="" class="form-input" data-validate-hidden @input.debounce="onChange" /><label for="am-email-address">Email</label></div><div class="flex xs:gap-2 flex-col xs:flex-row"><div class="am-input field field-reserved w-full sm:!mb-0"> <input :type="customer_form_register_popup_showPassword ? 'text' : 'password'" type="password" data-validate-hidden id="password" name="password" minlength="8" class="form-input" placeholder="Password" data-validate='{"password-strength": {"minCharacterSets": 3}}' @input.debounce="onChange" autocomplete="off" ><label for="password">Password</label> <span class="option">8 or more characters</span> <div id="password-strength-meter-container" data-role="password-strength-meter" aria-live="polite" class="hidden" ><div id="password-strength-meter" class="password-strength-meter">Strength: <span id="password-strength-meter-label" data-role="password-strength-meter-label">No Password</span></div></div></div><div class="am-input field field-reserved w-full !mb-0"><input :type="customer_form_register_popup_showPasswordConfirm ? 'text' : 'password'" type="password" name="password_confirmation" title="Confirm Password" id="password-confirmation" placeholder="Confirm Password" data-validate='{"equalTo": "password"}' @input.debounce="onChange" required class="form-input" autocomplete="off" ><label for="password-confirmation">Confirm Password</label></div></div> <div class="mt-6"> <div class="field field-reserved choice choice-wrapper gdpr !mb-4" data-role="amasty-gdpr-consent" data-amgdpr-content-from="registration"><input type="hidden" name="amgdpr_agreement[privacy_checkbox]" value="0"><input type="checkbox" name="amgdpr_agreement[privacy_checkbox]" title="Privacy Checkbox" id="amprivacy-checkbox-67be52cad7a00" class="amgdpr-checkbox" data-consent-id="1" required value="1"><label for="amprivacy-checkbox-67be52cad7a00" class="label amgdpr-label"><span class="amgdpr-text">I have read and accepted the <a href="/terms-and-conditions.html" target="_blank" title="Go to this page">Terms & Conditions</a>, <a href="/privacy-policy.html" target="_blank" title="Go to this page">Privacy Policy</a>, <a href="/license.html" target="_blank" title="Go to this page">License Agreement</a>, and <a href="/support-license-agreement.html" target="_blank" title="Go to this page">Support License Agreement</a></span></label> </div> <div class="field field-reserved choice choice-wrapper gdpr !mb-4" data-role="amasty-gdpr-consent" data-amgdpr-content-from="registration"><input type="hidden" name="amgdpr_agreement[data_processing_consent]" value="0"><input type="checkbox" name="amgdpr_agreement[data_processing_consent]" title="Processing of my personal data" id="amprivacy-checkbox-67be52cad7a3a" class="amgdpr-checkbox" data-consent-id="2" value="1"><label for="amprivacy-checkbox-67be52cad7a3a" class="label amgdpr-label"><span class="amgdpr-text">I hereby give my consent with <a href="/data-processing-consent.html" target="_blank" title="Go to this page">processing of my personal data</a> for marketing purposes</span></label> <span class="optional">Optional</span> </div> <input type="hidden" name="am-gdpr-checkboxes-from" value="registration" /></div></fieldset></div><button type="submit" class="action submit primary btn btn-primary disabled:opacity-75 w-full" >Create an Account</button></form></div> </div></template> <div class="am-social-icons max-w-[480px] mx-auto" data-amsite-js="am-social-icons"><span class="amsl-separator flex items-center justify-center my-7 w-full h-px bg-gray-200"><span class="am-text-caption text-secondary-lighter uppercase font-bold bg-white px-2">or continue with</span></span> <div class="amsl-social-wrapper with-labels" ><div class="amsl-social-login -labeled-buttons"><template x-if="socialErrorMessage"><p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p></template><div class="amsl-buttons flex flex-col xs:flex-row gap-3" :class="{'-show-all': canShowAllSocialIcons()}" > <div class="amsl-button-wrapper w-full group google with-label"><a class="amsl-button -google -rectangular group-[.facebook]:bg-blue-800 hover:opacity-80 group-[.google]:bg-blue-500 flex items-center px-3 py-2 rounded transition" x-on:click="socialLoginClick($event)" href="https://amasty.com/amsociallogin/social/login/?type=google" title="Sign in with Google" role="link" ><span class="amsl-social-icon pointer-events-none bg-white rounded group-[.facebook]:text-blue-800" role="img" aria-label="Sign in with Google" ><svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" role="img"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/><title>google</title></svg> </span> <span class="amsl-text pointer-events-none text-white am-text-small w-[80%] xs:w-[85%] text-center">Google</span> </a></div></div></div></div> </div></div></div></div><div class="amsl-tabs-wrapper -forgot" x-show="activeTab === 'amsl-forgot'" title="Forgot Your Password Form" x-cloak ><ul class="amsl-tablist mb-12 ul-reset text-center" role="tablist" ><li class="amsl-title" id="tab-amsl-forgot" role="tab" aria-controls="amsl-forgot-content" ><span class="amsl-link -active am-title-h2 font-bold" @click.prevent >Forgot your password?</span></li></ul><div id="amsl-forgot-content" role="tabpanel" aria-labelledby="tab-amsl-forgot"><template x-if="formMessages.has('amsl-forgot')"><div class="mt-4"><template x-for="message in formMessages.get('amsl-forgot')" :key="message" ><div class="message error"><span x-html="message"></span></div></template></div></template><div class="amsl-content amsl-forgot-content"><template x-if="!isLogged"><div class="amsl-form"> <div class="max-w-[480px] mx-auto my-0"><div class=""><form action="https://amasty.com/catalog/product/forgotpasswordpost/" method="post" class="!max-w-[inherit] !mb-7" id="user_forgotpassword" x-data="Object.assign(hyva.formValidation($el), initPasswordForm())" @submit.prevent="submitForm();"><input name="form_key" type="hidden" value="2U4t9SianlsPxfJE" /> <input type="hidden" name="formId" value="user_forgotpassword"/> <fieldset class="fieldset mb-6"><div class="text-center mb-6">Please enter your email address below to receive a password reset link.</div><div class="am-input field field-reserved email required !mb-0"><input type="email" name="email" alt="email" id="email_address" class="form-input" placeholder="Email address" required value="" /><label class="label" for="email_address">Email address</label></div></fieldset><button type="submit" class="action submit w-full primary disabled:opacity-75" >Reset My Password</button></form><div class="text-center">or go back to <a class="back" href="https://amasty.com/customer/account/login/" aria-label="Login page" >Login page</a></div></div></div> </div></template></div></div></div></div><button type="button" class="am-close-popup" title="Close" aria-label="Close" role="button" x-on:click="hide()" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" width="24" height="24" role="img"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 18 6M6 6l12 12"/><title>x</title></svg> </button> </div></div></div></div> <div x-data="AmAuthPopupNotification()" x-init="initialize()" x-on:amsl-popup-show-notification.window="showNotification($event.detail)" > <div x-cloak x-bind="overlay('amsl-popup-notification')" x-spread="overlay('amsl-popup-notification')" class="am-overlay-popup"><div class="amsl-popup-notification am-container-popup inset-0"><div x-ref="amsl-popup-notification" role="dialog" aria-modal="true" class="am-dialog-popup w-full sm:max-w-[560px] !bg-green-50"> <span class="absolute top-0 left-0 pt-1 w-full rounded-tl-md rounded-tr-md bg-lime-500"></span> <div class="py-10 text-center"><div class="mb-8"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="45" viewBox="0 0 34 35" fill="none" role="img"> <path d="M0 34.38H34V0.38H0V34.38Z" fill="url(#pattern0)"/> <defs> <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> <use xlink:href="#image0" transform="scale(0.015625)"/> </pattern> <image id="image0" width="64" height="64" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAP90lEQVR4AeyZA5CtRxCFpyqFZ9u2bdu2bduvrGfbtm2bq9hO1kbnnP8iU/fdODPhrfp6d6/7/NPdZ2aV5dv/NwnonTb+WoV58rDBDXnW8jN53uobedL0efLdWktxf0mgbMJgDQkamSPiVIGPUu7XFXnVVSRggEjgQPzsJ/Kyg0AUibtafjpQtmCwxle7M52JuVRKUh7UE3ndG8kPA8NdPwP6iLxoKykP60vMxVJbgbIBgxUkaFSmL3dnksgzhV0CBPR1JR80Aj/JUIjSXVAWknyvtkScLrQcKNMwWAFXOcNXezInfn8kFxPkFfcIAEa6fgagHF52FHncSBJuVJLvD+dsApRJGKwRfrLAtW/2Z5XE29VEXvf0EQDw79c9vKsg7HjeD4EyCYM10PzmYhUIGqLIq85vCsDfWRrPWzsNMfZSaQk9mrspUKZgsAaWeNPPtqaT2Mul0fDaOc3PVwBOBTZDedRQEm9Wka/3ZtkOlCkYrIFGmBGTIDHqbBFnmUvgEKALAAIHewVIulNDvj2YPRgoUzBYJfRYntfhJ/KJPGmiCaA1Ql2A29UpQDTKIT1QJmCwCUfi/sjThdjpmSwY7iPAoB9L4FY1CsB+UPBfIwAs74Koc0VpePwLEMAe0IZewRmFaJqcCAWBMgGDVVIe1O0VcaogryoF0EuAv9MWe8cgm+WXuzLGJN6qmhEoEzBYBXO+UcRpCPC4sR8BhtMiu5d/VWGpfLAu9YdAmYLBKnB6zTgFOOu1MagJ0I3LH16hvHx3KIeELE19AShTMFgFdT037kpZkZed/DpBGiQu/5iLJYSe4eNNaeYAZQoGm9AOv5t8r5ZmhUfqAnAvgPlf09k0fbg+Ne1wpX+NFcbsr8ftMGucZwG8+v4FqOHU//trUn8BlEkYbEE7fJ3NjXMe9a8lP8qnBGoJ+8RHG9OcBsokDFZIeVC/fvT5Yhx/3AprFniUJsAwbw+IvlBcPt2SdhNQJmGwQuiR3F9xacvL9lrt+wow2CkBeAV4gDL0AHuAMgmDcWBnj8VdLef2/4O02h+l4d4HvOrkrJKEm1XYAD/6x58HwPYujjpbVHAW4O78/pIfqQnQ1REKllkoGk6QJgFlCgZjIPGx4Sfzs6trc3/kzwgwhCLRJNEMcTfIwxNOhI14v0L/KAHwxYeEHctDS8uEmByT9Ff7mgA8He7vNEJ52pS9gCJwU8TTocSIkwW2fHc4Z0Og/iwY/nTg9IaFHnUn/6y5Xve++Agw3PEHzipgKTxv5bwHN0XcP6Ck3OTDmUL+eVhdzaLOFWuDhtkTAg1GuY2IvVRqbMzFkqOx+vh3B0yeynjsLaD8wfCngi8zIvSYnvzAX5m8R4D+oA+Txygs4ewHWEZIhv80kaS7NWmk+N6Eq4uT5U3oNZ618DTUj+EsFwHlC8OfBr5cb1hd1rz7yGug/2XvmzwJ1ErgaTPBFRb6Bgjq9IFElALPEHCW6P6fwlAw/Bfg+/VzzhfoLbAqzgClo35o3p7DJGmSMIDX+Xr82bZt27Zt27Zt27Zt27Zt5MXv6Yt5ajGzu5//eKfQ1VnheDOzx5+eEKG3dszd9w3sEFg7vLBYhNdM4YkJw8MjxnZWa6CCqNjTxjNeREjKZ8UfoAHS+80usDhBdYDw9rSMCboCb+IJmVIJ4/Ru1CeXDaPOxYglUnPbQJXwp7/47taJLzIl/e7WSQKTBsD5xDxiuvrTNzeN/3EI+uJX1451T+Tmt1qdPk7AVH7A6FaeZxU9S+HFWDoBgzKEY7BJoe25VLwn5XPc3HFSVBnS2F9HJP03UIE//SBCcJ98aVMQmBEIwRMgFw3MWwZXvLLaD5LyDEYpypkFxgZq+ene6Y0JjALk8U4FksEGHP5keWo5KUBuDrTEppZM3ePmaITo+HJNyPiicOZVoenFlBRSBpZfWpbwdM+LB015WJ3yxmbs8v45g/OScFW8AjCZPQI7Sp5R+LyP4fqGLkIu8llcoQNnKcqMG/OLthJdaqZABf5AN0LRW2xPEcoCJQGz4PQv55ovHZhK32PRo7yiGf1+MhOg8tap7VKMpwirEDq6Z6VYJIoWxvdd4CTQASjNgaKFwXi+BIcob8e4LxzW+Dmc3BGowJ86xqA4werK/maoKZ+hn3uBBI0eXl4/vqU8uksDBdb6eE1RhBI9v1hPYCjpwBCi1RGkjfvSRuRITd//8Lwhy2vHNcpjuzW8Y7tAlcgTYIBdBk7pdWFQlO5H+cxPKSZEeZawb5zYWu7YqL3cvVmb9QAzwkiLIUKJocpH5w8tPVDj8nVwhOhIGGIB11GMizGiFdtZLu+c1lFeOLRRHt6xUe7Zoq18cM4QxweqOrpPIAS+/bf1eM8GkKvqip7Pc8IU27MO+MhOjXL+Ml3lrCW7yp2btJdHd26Ux3dvlCf3apSn92tQympReTW8yrMM5fjSkY3y7IGN8kg8z4hXr9pZzli8q5y+WNdHLx7emC9Q9Y084f3/REh++Tsqnwbox/vWAOU7A7xzemd57qBGuXPj9nLNap3loe1bKGV5vLx0RFP5Fw8PxDk4f/6QRnlm/6aBntij4egeo6j60umLmJKfEoaaqqcVIQaYIAnGoCs5cMrX254Kje5qsaq7Iie0hftL4d0Ht2spb5zQKuTlvnAHz8lxU2a/K6oVvgWyayFLCqTPnKPMURumV0xttc3fv81RBpgvq3nP6FnBgff+GtoU4UKJOYrwV7C+CcWsA1JYePMegxBa0dMGPUd5+4oiyFi1no8bYKA6i3foZNo2AyUPiNow7I8xu+wIVOAPMMCqBjEgEPi3RI3uEp5QFMHy9Hmexf1NfBjAJIjygHkmGELU8Cwl1ZKawstTGLA/NcZzIk2X0RUUUgVy3b5/IsMAW7Iea7Ks429liHrlJ6zwR2a0MLO7NIBKzgDyWiSYBsdusiqv/UE8NyFWaGstU0C4U9S1VABKC31RFnxg5iJydAk14a1T2o8JVFDlSeTl3qk81IzwGyieyvPWcgQ2VRWWCqAQZwAKIiy2wxRDuS8qACeQIowklKUOokNBnURNYBT3kqrjBjyPqYoe7VGXibE79g1UUOVJeOUoSgtRwvZlhEBvSkL/7tXzc1VhKjx5rdsAPJMG4GkzymBr0e6kwTAMYmpsEQR8rhhKBaSnP5iWwqIE/VU3mstqYbxo9eXloxuibJpABVWehFdOTy8xAvRrhIGD5+uFKfk5/o62yn9UNVOAkEJbBCQZun+r1vLUPo0I17agsB2B9vJ2EJv3ztTWhvWcaPAdhst6AdLGvoKoUUitIvmtka023OHiQJXoPom8OTsnJvK0X0P0hNV6wKp1xQM8T/lm25KfwpTXeArPJ7xw91M6yl+/Zme5IYATYIb3bhmG2boVUdLr8QPRgiPoGjZSm/g/MeLt54M3PLVvAz/w2UU9bo5GDz0l1+PkKUMQnjG0R0jl8jqrr+fzO5DXdcWzImfPZgBdQI5KA3ktDYS3kMfybt+wqTgyhMc/vEOj3LtFa7ltg45yw1qd5cqVu8plKzaBNN20Tke5df0On2OQvgtY4dMx5lSBqm90n4SwB6awqrRJShqjv6Cc5zxfr8Z1pLdrCENDGkAaZBSkEYQ372J92pacDaPAiI4mRp7zvPzW3kSQcyvIoK44useob0ZXGbG33wlqgxsliyI4UKJfLEphymSrUYFVY3mtuNXgGmr3H53Hc+6p2tIgo0A7JDCFFUHLV9KCgmZx2pijAuh73q+d5hFEl6N36Q65FqAmfPfVNWO2B6o68oQBZqOEAfrF/F5i2poK17w3vYoLuXrkfh25ekRhIFie9ycKJkZUFEJCZ+/HCawSO3ouqXAdnJNwTW7jM67vKp5b9LQxwgDtYbUfAzwEKahBKEBQrau7t+Lw3986KaGErZB0T29X3YFiejboy2kQY9bH9TkjGiOK4JBpAII78r6qnjzAWJxCSd52bh4ASYTIb2wGkzbGvTRQ1dF9ApH3t/WlcC409NNfLZLGoijBzOJUbuxNbgpjQspDLc7zlrgYhkHqxug2qnvZEi1goMOIC8EZVzvDAZx7h2cxPMhxyFw3rHeQ20zz06gf0UavClR11C9EwWYpWK6uhNAWKwimqGS7UlgwMwMrVOhlMQWNnSHCamfytR+DMAYjMqb0yehwTinPmAdog5bH1IFPLxmhxPa6EPY+UeE5shlHiPuuczKDe96lfjAcCmxR5ZBAVUf9ggGG8sUUplaZkQtK8QCPq8gE4nmWRTKsvFjOQlrksRf7DqJiDOCNfoyRcM1YDKBva3mMqre/GRQ2CFEQmsFEmnFFIAWNm0giJDKxSGMxJL6guI4VqOroPknEjOr0bC8Gw8cpYqMTNbVqi6cTiGBIiMGf2LO5CnPRcl36tc9Y3BK33CWQqFHUagaZsBYd9h2a7yS0MXM8fMD6AKM8c0CT+DAyr6oXUgY+CHCI/0wRkchQTKx859NYWltsoH4g4RfdYd0fcm1NSHuRF1IKu8oVGAIRDNm4db2Oct0aneXMJSxBdZUHtmkRFSgoKiot8HHG6J7k5LoejzGMc/cZQBE09rWrd5Yb1w4E8cEMXSNAiE9+dnMs8t4S70eCHH126QpdX4YBrwoDbRekbchA1T/07yYjzELp9DSLW6biZWF+z+ZtxcuuCEHOWSrW7kJpip+9ZCi/eJwv3vUtpnbfVq0MRRnRwBDCUFSIKkaRUoE4xrnU8rma8kaE7WO7NgojksPiKK9a1zceumuJ7NmICI5Aj+t4aIfGp8ElOgJVb+jpA0aYJxT/JAenNC+gnRQ9ZdGm0hcs0/VGhOi1T+3dOCiEXD0K1AzBJ4aOQjTfXZu2fZXhK2piKioiclFCDZHP4JrnLVl5hoJ4fDPfRUxz1Vf6qBXZSbLgKdQIknQSTWaOova8QNUbev0wprZDh2DHxWTkmytW6ipXrdr1YZzf8mQoG5GxXBSZ8aIr/D1Q9Q/BFkeL1dy7pIaIET0iIgzLi2Z65ubh3S5HxZTQINXUAcYSLTqO1FEjKIyf1MgZ7jJHkqokPowp6jp+9W+EwtLDhlUnD5bXEqgGFbHQuX7UiVflrNRQMxhDdKG80ouyVnkprngpdj5nGJGhFUoPNQJl5vlsn7mBmq1PgRU5UmZAP63x5w9BeOmf4en1btug/f5Llu8ql0YqqSEZHTnzUzyzzty3ZSuDMILuQxm1AvPUNQAh00myVYsUz2l99gm+jgj+z1/m3+YSEf7ThZIHRrV+qrlx0awppwZca32XR8pFxChmWpnNDx5VTOW3gik19HotWpQkJ1EcTZ/VruMCVW/w509FdISxYwtr0WcPamwZxfKwwLkRCdfHVta9ERlPPLh9y4tP7l1Ll4N1BmkCLfVeb5GE0kU0Pb5H4/pYg2gEqt7gz18ekfczhpH2jwL6ZBjj82jHnwdV/jwU/jyKbPM87scW2ifRQc6J1FggUA0M/gfsGVXkq95xtgAAAABJRU5ErkJggg=="/> </defs> <title>thumb</title></svg> </div><template x-if="notification"><div x-html="notification"></div></template></div></div></div></div></div> <div><div x-data="AmAuthPopupReviewForm()" x-on:private-content-loaded.window.once="initializeReviewForm()" ></div></div> <div class="copyright px-6 xs:px-8 pt-4 lg:pt-5 lg:pb-12 pb-9 bg-gray-800 text-secondary-lighter lg:text-center text-sm"><span>© 2009-2025 Amasty. All Rights Reserved.</span></div> </div><script> var LOCALE = 'en\u002DUS'; var BASE_URL = 'https\u003A\u002F\u002Famasty.com\u002F'; var require = { 'baseUrl': 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US' };</script><script type="text/javascript" src="https://cdn.amasty.com/static/version1739349122/_cache/merged/a8e74fc4cdd09bf931fffde57aa260af.min.js"></script><script type="text/x-magento-init"> { "*": { "Magento_PageCache/js/form-key-provider": { "isPaginationCacheEnabled": 0 } } }</script><script> const initAmsiteCookieConsent = function () { let isFirstVisit = false; let allCookiesAllowed = false; let analyticsCookiesAllowed = false; let statisticsCookiesAllowed = false; let advertisingCookiesAllowed = false; const ACTION_DEFAULT = 'default'; const ACTION_UPDATE = 'update'; const CONSENT_GRANTED = 'granted'; const CONSENT_DENIED = 'denied'; const COOKIE_TYPES = { analytics_storage: 'analytics_storage', ad_personalization: 'ad_personalization', ad_storage: 'ad_storage', ad_user_data: 'ad_user_data' }; _setConsentValue(ACTION_DEFAULT); _setAdditionData(); _listenCookieUpdate(); function _getCookie(name) { let matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; } function _checkCookieAnalyticIsAllowed() { const amCookieAllowed = _getCookie('amcookie_allowed'); const ID_ADVERTISING = '2'; const ID_ANALYTICS_GROUP = '3'; const ID_STATISTICS = '4'; isFirstVisit = !amCookieAllowed; allCookiesAllowed = amCookieAllowed && amCookieAllowed === '0'; analyticsCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_ANALYTICS_GROUP); statisticsCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_STATISTICS); advertisingCookiesAllowed = amCookieAllowed && amCookieAllowed.includes(ID_ADVERTISING); } function _listenCookieUpdate() { window.addEventListener('cookiebar-action-accept-finish', () => _setConsentValue(ACTION_UPDATE)); window.addEventListener('cookiebar-action-allow-finish', () => _setConsentValue(ACTION_UPDATE)); } function _setConsentValue(action) { let consentTypes = ["ad_storage","ad_user_data","ad_personalization","analytics_storage"]; _checkCookieAnalyticIsAllowed(); if (action === ACTION_DEFAULT && isFirstVisit) { _setDefaultValues(consentTypes); } else if (action === ACTION_DEFAULT && !isFirstVisit) { _updateValues(consentTypes, ACTION_DEFAULT); } else { _updateValues(consentTypes, ACTION_UPDATE); } } function _setAdditionData() { if (1) { gtag('set', 'url_passthrough', true); } if (1) { gtag('set', 'ads_data_redaction', true); } } function _setDefaultValues(consentTypes) { let config = {}; consentTypes.forEach(key => config[key] = CONSENT_GRANTED); gtag('consent', ACTION_DEFAULT, config); let configForCountryWithRestrictions = {...config}; consentTypes.forEach(key => configForCountryWithRestrictions[key] = CONSENT_DENIED); configForCountryWithRestrictions.region = ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','EL','HU','IS','IE','IT','LV','LI','LT','LU','MT','NL','NO','PL','PT','RO','SK','SI','ES','SE','UK','US-CA','US-CO','US-CT','US-VA','US-UT'] gtag('consent', ACTION_DEFAULT, configForCountryWithRestrictions); } function _updateValues(consentTypes, action) { let isAnalyticsStoragePresent = consentTypes.includes(COOKIE_TYPES.analytics_storage); let isPersonalizationStoragePresent = consentTypes.includes(COOKIE_TYPES.ad_personalization); let isStoragePresent = consentTypes.includes(COOKIE_TYPES.ad_storage); let isUserDataPresent = consentTypes.includes(COOKIE_TYPES.ad_user_data); let config = {}; consentTypes.forEach(key => config[key] = CONSENT_DENIED); if (allCookiesAllowed) { consentTypes.forEach(key => config[key] = CONSENT_GRANTED); } if (isAnalyticsStoragePresent && analyticsCookiesAllowed || isAnalyticsStoragePresent && statisticsCookiesAllowed) { config[COOKIE_TYPES.analytics_storage] = CONSENT_GRANTED; } if (isPersonalizationStoragePresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_personalization] = CONSENT_GRANTED; } if (isStoragePresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_storage] = CONSENT_GRANTED; } if (isUserDataPresent && advertisingCookiesAllowed) { config[COOKIE_TYPES.ad_user_data] = CONSENT_GRANTED; } gtag('consent', action, config); } }</script><script> window._vwo_code = window._vwo_code || (function(){ var account_id=634212, settings_tolerance=2000, library_tolerance=2500, use_existing_jquery=false, is_spa=1, hide_element='body', /* DO NOT EDIT BELOW THIS LINE */ f=false,d=document,code={use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){ window.settings_timer=setTimeout(function () {_vwo_code.finish() },settings_tolerance);var a=d.createElement('style'),b=hide_element?hide_element+'{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}':'',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+(+is_spa)+'&r='+Math.random());return settings_timer; }};window._vwo_settings_timer = code.init(); return code; }());</script><script> var BASE_URL = 'https://amasty.com/'; var THEME_PATH = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US'; var COOKIE_CONFIG = { "expires": null, "path": "\u002F", "domain": ".amasty.com", "secure": true, "lifetime": "31556952", "cookie_restriction_enabled": false }; var CURRENT_STORE_CODE = 'default'; var CURRENT_WEBSITE_ID = '1'; window.hyva = window.hyva || {} window.cookie_consent_groups = window.cookie_consent_groups || {} window.cookie_consent_groups['necessary'] = true; window.cookie_consent_config = window.cookie_consent_config || {}; window.cookie_consent_config['necessary'] = [].concat( window.cookie_consent_config['necessary'] || [], [ 'user_allowed_save_cookie', 'form_key', 'mage-messages', 'private_content_version', 'mage-cache-sessid', 'last_visited_store', 'section_data_ids' ] );</script><script> 'use strict'; (function( hyva, undefined ) { function lifetimeToExpires(options, defaults) { const lifetime = options.lifetime || defaults.lifetime; if (lifetime) { const date = new Date; date.setTime(date.getTime() + lifetime * 1000); return date; } return null; } function generateRandomString() { const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length = 16; let formKey = '', charactersLength = allowedCharacters.length; for (let i = 0; i < length; i++) { formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] } return formKey; } const sessionCookieMarker = {noLifetime: true} const cookieTempStorage = {}; const internalCookie = { get(name) { const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; }, set(name, value, days, skipSetDomain) { let expires, path, domain, secure, samesite; const defaultCookieConfig = { expires: null, path: '/', domain: null, secure: false, lifetime: null, samesite: 'lax' }; const cookieConfig = window.COOKIE_CONFIG || {}; expires = days && days !== sessionCookieMarker ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; path = cookieConfig.path || defaultCookieConfig.path; domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); secure = cookieConfig.secure || defaultCookieConfig.secure; samesite = cookieConfig.samesite || defaultCookieConfig.samesite; document.cookie = name + "=" + encodeURIComponent(value) + (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '') + (samesite ? '; samesite=' + samesite : 'lax'); }, isWebsiteAllowedToSaveCookie() { const allowedCookies = this.get('user_allowed_save_cookie'); if (allowedCookies) { const allowedWebsites = JSON.parse(unescape(allowedCookies)); return allowedWebsites[CURRENT_WEBSITE_ID] === 1; } return false; }, getGroupByCookieName(name) { const cookieConsentConfig = window.cookie_consent_config || {}; let group = null; for (let prop in cookieConsentConfig) { if (!cookieConsentConfig.hasOwnProperty(prop)) continue; if (cookieConsentConfig[prop].includes(name)) { group = prop; break; } } return group; }, isCookieAllowed(name) { const cookieGroup = this.getGroupByCookieName(name); return cookieGroup ? window.cookie_consent_groups[cookieGroup] : this.isWebsiteAllowedToSaveCookie(); }, saveTempStorageCookies() { for (const [name, data] of Object.entries(cookieTempStorage)) { if (this.isCookieAllowed(name)) { this.set(name, data['value'], data['days'], data['skipSetDomain']); delete cookieTempStorage[name]; } } } }; hyva.getCookie = (name) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; } return internalCookie.get(name); } hyva.setCookie = (name, value, days, skipSetDomain) => { const cookieConfig = window.COOKIE_CONFIG || {}; if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { cookieTempStorage[name] = {value, days, skipSetDomain}; return; } return internalCookie.set(name, value, days, skipSetDomain); } hyva.setSessionCookie = (name, value, skipSetDomain) => { return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) } hyva.getBrowserStorage = () => { const browserStorage = window.localStorage || window.sessionStorage; if (!browserStorage) { console.warn('Browser Storage is unavailable'); return false; } try { browserStorage.setItem('storage_test', '1'); browserStorage.removeItem('storage_test'); } catch (error) { console.warn('Browser Storage is not accessible', error); return false; } return browserStorage; } hyva.postForm = (postParams) => { const form = document.createElement("form"); let data = postParams.data; if (! postParams.skipUenc && ! data.uenc) { data.uenc = btoa(window.location.href); } form.method = "POST"; form.action = postParams.action; Object.keys(postParams.data).map(key => { const field = document.createElement("input"); field.type = 'hidden' field.value = postParams.data[key]; field.name = key; form.appendChild(field); }); const form_key = document.createElement("input"); form_key.type = 'hidden'; form_key.value = hyva.getFormKey(); form_key.name="form_key"; form.appendChild(form_key); document.body.appendChild(form); form.submit(); } hyva.getFormKey = function () { let formKey = hyva.getCookie('form_key'); if (!formKey) { formKey = generateRandomString(); hyva.setCookie('form_key', formKey); } return formKey; } hyva.formatPrice = (value, showSign) => { const formatter = new Intl.NumberFormat( 'en\u002DUS', { style: 'currency', currency: 'USD', signDisplay: showSign ? "always" : "auto" } ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '$' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } const formatStr = function (str, nStart) { const args = Array.from(arguments).slice(2); return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { const idx = parseInt(n) - nStart; if (args[idx] === null || args[idx] === void 0) { return m; } return p.length % 2 ? p.slice(0, -1).replace('%%', '%') + args[idx] : p.replace('%%', '%') + n; }) } hyva.str = function (string) { const args = Array.from(arguments); args.splice(1, 0, 1); return formatStr.apply(undefined, args); } hyva.strf = function () { const args = Array.from(arguments); args.splice(1, 0, 0); return formatStr.apply(undefined, args); } /** * Take a html string as `content` parameter and * extract an element from the DOM to replace in * the current page under the same selector, * defined by `targetSelector` */ hyva.replaceDomElement = (targetSelector, content) => { const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); const contentNode = doc.querySelector(targetSelector); if (!contentNode) { return; } const tmpScripts = contentNode.getElementsByTagName('script'); if (tmpScripts.length > 0) { const scripts = []; for (let i = 0; i < tmpScripts.length; i++) { scripts.push(tmpScripts[i]); } for (let i = 0; i < scripts.length; i++) { let script = document.createElement('script'); script.innerHTML = scripts[i].innerHTML; document.head.appendChild(script); scripts[i].parentNode.removeChild(scripts[i]); } } document.querySelector(targetSelector).replaceWith(contentNode); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); hyva.initMessages(); } const replace = {['+']: '-', ['/']: '_', ['=']: ','}; hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); let currentTrap; const focusableElements = (rootElement) => { const selector = 'button, [href], input, select, textarea, details'; return Array.from(rootElement.querySelectorAll(selector)) .filter(el => el.style.display !== 'none' && !el.disabled && el.tabIndex !== -1) } const focusTrap = (e) => { const isTabPressed = e.key === 'Tab' || e.keyCode === 9; if (!isTabPressed) return; const focusable = focusableElements(currentTrap) const firstFocusableElement = focusable[0] const lastFocusableElement = focusable[focusable.length - 1] e.shiftKey ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) }; hyva.releaseFocus = (rootElement) => { if (currentTrap && (!rootElement || rootElement === currentTrap)) { currentTrap.removeEventListener('keydown', focusTrap) currentTrap = null } } hyva.trapFocus = (rootElement) => { if (!rootElement) return; hyva.releaseFocus() currentTrap = rootElement rootElement.addEventListener('keydown', focusTrap) const firstElement = focusableElements(rootElement)[0] firstElement && firstElement.focus() } hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) }( window.hyva = window.hyva || {} ));</script><script> (function() { const proLargeOption = 'Maintenance included for all products purchased before Feb 1, 2022 ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + '- <a href="/knowledge-base/what-magento-versions-amasty-supports.html">Compatibility with Magento</a>' + ' versions supported by Adobe <br>' + '- Bug fixes <br>' + '- Security patches</span></span>'; const trainingSession = 'Training sessions ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'Extensions covered by the training:<br>' + '<span class="for-tooltip-left-indent -dot"> Promotion Suite for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Special Promotions Pro for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Loyalty Program for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Free Gift for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot">Reward Points for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Google Page Speed Optimizer for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> SEO Toolkit for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Suite for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Table Rates for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Restrictions for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Rules for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Delivery Date Manager for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping & Payment By Customer Groups for Magento 2</span><br>' + '<span class="for-tooltip-left-indent -dot"> Shipping Cost Calculator for Magento 2</span><br>' + '<span class="for-tooltip-left-indent">Free Shipping Bar for Magento 2</span><br>' + '</span></span>'; const configurationSession = 'Free configuration service ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'Extension covered within the configuration service:<br>' + '<span class="for-tooltip-left-indent -dot"> Google Page Speed Optimizer</span><br>' + '<span class="for-tooltip-left-indent -dot">Free Gift</span><br>' + '<span class="for-tooltip-left-indent -dot">Special Promotions (Pro)</span><br>' + '<span class="for-tooltip-left-indent -dot">Shipping Suite</span><br>' + '<span class="for-tooltip-left-indent -dot">SEO Toolkit</span><br>' + '<span class="for-tooltip-left-indent -dot">Import and Export</span><br>' + '</span></span>' + '<span class="option-caption"> on request</span>'; const litePerfomance = 'Lite Performance Audit ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'In terms of the Performance Audit (Lite version) we will:<br>' + '<span class="for-tooltip-left-indent -dot"> scan your website using Google PageSpeed Insights</span><br>' + '<span class="for-tooltip-left-indent -dot"> analyse Core web Vitals</span><br>' + '<span class="for-tooltip-left-indent -dot"> offer basic technical guidance in alignment with Magento code' + ' standards and overall coding practices</span><br>' + '<span class="for-tooltip-left-indent -dot"> provide recommendations for optimizing your Magento usage ' + '(version management, updates, security patches, module usage)</span><br>' + '<span class="for-tooltip-left-indent -dot"> furnish general recommendations for server and cache' + ' management</span><br>' + '</span></span>' + '<br><span class="option-caption">once per quarter</span>'; const litePerfomanceCoreWebVitals = 'Lite Performance Audit + special offer for Core Web Vitals optimization ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-left">' + '<span class="tooltip-toggle"></span><span class="tooltip-content large">' + 'In terms of the Performance Audit (Lite version) we will:<br>' + '<span class="for-tooltip-left-indent -dot"> scan your website using Google PageSpeed Insights</span><br>' + '<span class="for-tooltip-left-indent -dot"> analyse Core web Vitals</span><br>' + '<span class="for-tooltip-left-indent -dot"> offer basic technical guidance in alignment with Magento code' + ' standards and overall coding practices</span><br>' + '<span class="for-tooltip-left-indent -dot"> provide recommendations for optimizing your Magento usage ' + '(version management, updates, security patches, module usage)</span><br>' + '<span class="for-tooltip-left-indent -dot"> furnish general recommendations for server and cache' + ' management</span><br>' + '</span></span>' + '<br><span class="option-caption">once per quarter</span>'; const partnerPricePro = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2199</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2069</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $1939</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $1809</span><br>' + '</span></span>'; const partnerPricePremium = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2439</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2299</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $2149</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $2009</span><br>' + '</span></span>'; const partnerPriceAmastyOne = '<span class="special-partner">Special price for partners</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get annual subscription by a special price based on your partner level:<br>' + '<span class="for-tooltip-left-indent -dot"> Bronze - $2929</span><br>' + '<span class="for-tooltip-left-indent -dot"> Silver - $2759</span><br>' + '<span class="for-tooltip-left-indent -dot"> Gold - $2589</span><br>' + '<span class="for-tooltip-left-indent -dot"> Platinum - $2409</span><br>' + '</span></span>'; const partnerPriceAgencyPremium = '<span class="special-partner"><a href="/partnership-program.html">Partner ' + 'Program</a> Discounts</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get a <b>20% discount</b> on <br>' + 'the deposit of any level.' + '</span></span><br><span class="option-caption">for agencies only</span>'; const partnerPriceAgencyAmastyOne = '<span class="special-partner"><a href="/partnership-program.html">Partner ' + 'Program</a> Discounts</span> ' + '<span class="amsite-tooltip-container -mobile-bottom -desktop-right">' + '<span class="tooltip-toggle"></span><span class="tooltip-content">' + 'Get a <b>30% discount</b> on <br>' + 'the deposit of any level.' + '</span></span><br><span class="option-caption">for agencies only</span>'; window.dataForSubscriptions = Object.freeze({ individual: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>' ], 'Amasty One': [ 'Premium included', 'Personal account manager', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance ], 'Amasty One': [ 'Premium included', 'Personal account manager', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals ] } }, corporate: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance, '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] } }, partner: { month: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] }, annual: { Pro: [ 'Free installation for all extensions <br><span class="option-caption">' + 'on request</span>', configurationSession, partnerPricePro ], Premium: [ 'Pro included', 'Instant support in Slack', 'Free installation of version updates <br><span class="option-caption">' + 'on request</span>', litePerfomance, '<span class="special-partner">Personal account manager</span>', partnerPricePremium, partnerPriceAgencyPremium ], 'Amasty One': [ 'Premium included', 'Screen sharing and video calls for configuration questions', trainingSession, litePerfomanceCoreWebVitals, '<span class="special-partner">Support for 10 clients is included in the annual ' + 'subscription</span>', partnerPriceAmastyOne, partnerPriceAgencyAmastyOne ] } } }); })();</script><script> 'use strict'; (() => { hyva.formatPrice = (value, showSign, options = {}) => { const formatter = new Intl.NumberFormat( 'en\u002DUS', Object.assign({ style: 'currency', currency: 'USD', signDisplay: showSign ? 'always' : 'auto' }, options) ); return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? formatter.formatToParts(value).map(({type, value}) => { switch (type) { case 'currency': return '\u0024' || value; case 'minusSign': return '- '; case 'plusSign': return '+ '; default : return value; } }).reduce((string, part) => string + part) : formatter.format(value); } })()</script><script src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Magento_Theme/js/utils/svg-amasty-sprite.min.js" async></script><script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":["simple","virtual","downloadable","bundle","grouped","configurable"]} } }</script><script type="text/x-magento-init"> { "*": { "cookieStatus": {} } }</script><script type="text/x-magento-init"> { "*": { "mage/cookies": { "expires": null, "path": "\u002F", "domain": ".amasty.com", "secure": true, "lifetime": "31556952" } } }</script><script> window.cookiesConfig = window.cookiesConfig || {}; window.cookiesConfig.secure = true; </script><script> require.config({ map: { '*': { wysiwygAdapter: 'mage/adminhtml/wysiwyg/tiny_mce/tinymce5Adapter' } } });</script><script> (function () { 'use strict'; window.amRecaptchaModel = { formsToProtect: "\u0023form\u002Dforgotpassword,\u0023user_forgotpassword,form\u005Baction\u002A\u003D\u0022createpost\u0022\u005D,\u0023review_form,\u0023adyen\u002Dcc\u002Dform,\u005Bdata\u002Damsite\u002Djs\u003D\u0022billing\u002Daddress\u002Dform\u0022\u005D,.form.form\u002Dlogin,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fcreatepost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002FloginPost\u0022\u005D,form\u005Baction\u002A\u003D\u0022newsletter\u002Fsubscriber\u002Fnew\u0022\u005D,form\u005Baction\u002A\u003D\u0022contact\u002Findex\u002Fpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fforgotpasswordpost\u0022\u005D,\u0023review_form,form\u005Baction\u002A\u003D\u0022customer\u002Faccount\u002Fresetpasswordpost\u0022\u005D,form\u005Baction\u002A\u003D\u0022checkout_payment_captcha\u0022\u005D,form\u005Baction\u002A\u003D\u0022amasty_customform\u002Fform\u002Fsubmit\u0022\u005D,form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D,.form.password.forget", isEnabledOnPayments: "1", checkoutRecaptchaValidateUrl: "https://amasty.com/amcapthca/checkout/validate/", invisibleCaptchaCustomForm: "1", recaptchaConfig: { lang: "hl\u003Den" || 'hl=en', theme: "light", badge: "bottomleft", sitekey: "6LcoY6UZAAAAAP7Dqjtr6MPM8yGySn617oAlWVSx", size: "invisible" }, url: 'https://www.google.com/recaptcha/api.js', isCaptchaScriptLoaded: false, isInvisible: "invisible" === 'invisible', /** * Submit event * * @param {Object} $event * @return {void} */ execute: function ($event) { const eventTarget = $event?.target; if (this.isCaptchaScriptLoaded) { this.executeCaptcha(eventTarget); } else { window.addEventListener('amcaptcha-script-loaded', () => { this.isCaptchaScriptLoaded = true; this.executeCaptcha(eventTarget); this.initAmcaptchaBadges(); }); this.loadRecaptchaScript(); } }, /** * Execute original submit * * @param {Object} $event * @param {HTMLElement} $el * @return {void} */ recaptchaCallback: function ($event, $el) { this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); }, /** * Reset captcha * * @param {Object} $event * @param {HTMLElement} $el */ expiredCallback: function($event, $el) { this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); }, /** * Checks if event is fired on submitted element * * @param {Object} $event * @param {HTMLElement} $el * @return {boolean} */ shouldExecuteCallback: function($event, $el) { const eventWidgetId = $event.detail.widgetId; const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; return eventWidgetId === elementWidgetId; }, /** * Run captcha for widget by id * * @param {HTMLElement} eventTarget * @return {void} */ executeCaptcha: function(eventTarget) { if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { this.bindCaptchaGlobalCallbacks(eventTarget); this.renderCaptcha(eventTarget); eventTarget.dataset.amCaptchaRendered = ''; } const widgetId = this.getWidgetId(eventTarget); if (!widgetId) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' } ]); return; } window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); grecaptcha.reset(widgetId); if (!this.isInvisible) { this.stopAmcaptchaLoading(); return; } grecaptcha.execute(widgetId) .then(() => this.stopAmcaptchaLoading()) .catch(() => this.stopAmcaptchaLoading()); }, /** * Add recaptcha script to page * * @return {void} */ loadRecaptchaScript: function () { const lang = window.amRecaptchaModel.recaptchaConfig.lang; const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.async = true; document.head.appendChild(script); }, /** * Stop loader on page * * @return {void} */ stopAmcaptchaLoading: function () { window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); }, /** * Add attributes to hide captcha badge * * @return {void} */ initAmcaptchaBadges: function () { if (!this.isInvisible) { return; } document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { captchaBadge?.setAttribute('x-data', '{ visible: true }'); captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); captchaBadge?.setAttribute(':class', '!visible && "invisible"'); }); }, /** * Get form widgetId * * @param {HTMLElement} eventTarget * @return {string} */ getWidgetId: function (eventTarget) { return eventTarget.dataset.amCaptchaWidgetId || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; }, /** * Add captcha badge or checkbox to protected form. * Store widgetId in dataset to pass this info in callbacks * * @param {HTMLElement} eventTarget * @return {void} */ renderCaptcha: function (eventTarget) { const captchaElement = document.createElement('div'); const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') ?? eventTarget.closest('form'); formContent?.appendChild(captchaElement); eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { ...window.amRecaptchaModel?.recaptchaConfig, callback: () => { window.dispatchEvent(new CustomEvent( 'amrecaptcha-callback', { detail: this.getCaptchaCallbackDetail(eventTarget) })); }, 'expired-callback': () => { window.dispatchEvent(new CustomEvent( 'amrecaptcha-expired-callback', { detail: this.getCaptchaCallbackDetail(eventTarget) })); } }); }, /** * Get detail property for callback event * * @param {HTMLElement} eventTarget * @return {object} */ getCaptchaCallbackDetail: function (eventTarget) { return { widgetId: eventTarget.dataset.amCaptchaWidgetId, form: eventTarget } }, /** * Add functions that will be called on the global state * * @param {HTMLElement} eventTarget * @return {void} */ bindCaptchaGlobalCallbacks: function (eventTarget) { eventTarget.setAttribute( 'x-on:amrecaptcha-callback.window', `amRecaptchaModel.recaptchaCallback($event, $el)` ); eventTarget.setAttribute( 'x-on:amrecaptcha-expired-callback.window', 'amRecaptchaModel.expiredCallback($event, $el)' ); } }; })(window.amRecaptchaModel = window.amRecaptchaModel || {}); window.amRecaptchaLoadCallback = function () { window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); }</script><script> (function (hyva) { 'use strict'; /** * We use multiple Store objects depending on which Alpine version is */ const isAlpineV3 = true; /** * @returns {string} */ function getInitEventName() { return isAlpineV3 ? 'alpine:init' : 'spruce:init'; } /** * @returns {Object} */ function getStoreObject() { return isAlpineV3 ? Alpine : Spruce; } hyva.amStorage = { /** * @param {string} key * @param {Object} object * @returns {void} */ create: (key, object) => { const eventName = key.toLowerCase() + '-created'; document.addEventListener(getInitEventName(), () => { getStoreObject().store(key, object); document.dispatchEvent(new Event(eventName)); }); }, /** * @param {string} key * @returns {Object} */ getStorage: (key) => { return getStoreObject().store(key); }, /** * @param {string} key * @param {Object} object * @returns {void} */ reInit: (key, object) => { isAlpineV3 ? getStoreObject().store(key, object) : getStoreObject().reset(key, object); } }; }(window.hyva = window.hyva || {}));</script><script> window.amastyCookieManager = window.amastyCookieManager || {};</script><script> window.amRecaptchaModel = window.amRecaptchaModel || {};</script><script> 'use strict'; (function(hyva) { const formValidationRules = { required(value, options, field, context) { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field.'; if (el.type === 'radio' || el.type === 'checkbox') { return (value === undefined || value.length === 0) ? msg : true; } el.setAttribute('required', ''); el.checkValidity(); return el.validity.valueMissing ? msg : true; }, maxlength(value, options, field, context) { const n = Number(options) if (value.length > n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.') : hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u0020\u00250\u0020characters.', options) } return true; }, minlength(value, options, field, context) { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('Please\u0020enter\u0020at\u0020least\u0020\u00250\u0020characters.', options) } return true; }, max(value, options, field, context) { field.element.setAttribute('max', options); field.element.checkValidity(); if (field.element.validity.rangeOverflow) { return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); } return true; }, min(value, options, field, context) { field.element.setAttribute('min', options); field.element.checkValidity(); if (field.element.validity.rangeUnderflow) { return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); } return true; }, step(value, options, field, context) { field.element.setAttribute('step', options); field.element.checkValidity(); if (field.element.validity.stepMismatch) { const val = Number(options); return hyva.strf('Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.', Math.floor(val), Math.ceil(val)); } return true; }, pattern(value, options, field, context) { field.element.setAttribute('pattern', options); field.element.checkValidity(); if (field.element.validity.patternMismatch) { return field.element.title ? hyva.strf('Please\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00250.', field.element.title) : 'Please\u0020match\u0020the\u0020requested\u0020format.' } return true; }, email(value, options, field, context) { const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address.'; } return true; }, password(value, options, field, context) { const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020provide\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029'; } return true; }, equalTo(value, options, field, context) { const dependencyField = context.fields[options].element; if (value !== dependencyField.value) { const dependencyFieldName = dependencyField.label || dependencyField.title || (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) || dependencyField.name; return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00250\u0022.', dependencyFieldName); } return true; } }; function raceSome(promises, pred) { return new Promise((resolve, reject) => { if (promises.length === 0) { return resolve(); } let settled = false, nDone = 0; const resolveIf = v => { if (!settled && (pred(v) || ++nDone === promises.length)) { settled = true; resolve(v); } return v; } promises.map(promise => { promise.then(resolveIf).catch(reason => { settled = true; reject(reason) }); return promise; }); }); } const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'} const INPUT_TYPE_RULES = {email: 'email'} function getRules(element) { let rules = {}; Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => { if (element.hasAttribute(attrName)) { rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName); } }) if (INPUT_TYPE_RULES[element.type]) { rules[INPUT_TYPE_RULES[element.type]] = true; } if (element.dataset.validate) { try { Object.assign(rules, JSON.parse(element.dataset.validate)); } catch (error) { console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); } } return rules; } function isInvalidRuleResult(ruleState) { return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content); } async function runValidateFn(rule, options, value, field) { return formValidationRules[rule](value, options, field, this); } function generateId() { let id; do { id = `${this.idPrefix}-${++this.idSeq}`; } while (document.getElementById(id)); return id; } function isVisible(element) { const el = element.type !== 'hidden' ? element : (element.parentElement || {}); return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) } function elementWillValidate(element) { return (element.willValidate || element.type === 'hidden') && element.tagName !== 'BUTTON' && element.disabled === false && !(element.tagName === 'INPUT' && element.type === 'submit') && (element.hasAttribute('data-validate-hidden') || isVisible(element)) } function createMessageContainer(el, fieldWrapperClassName) { if (! el.parentElement) { return; } const refocus = document.activeElement === el; const wrapper = document.createElement('div'); wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); el.parentElement.insertBefore(wrapper, el); wrapper.appendChild(el); refocus && document.activeElement !== el && el.focus(); return wrapper; } function containerNotFound(selector, el) { const msg = `Cannot find message container element ${selector} of ${el.name}`; console.error(msg, el); throw msg; } function createTextInputFrom(el) { const text = document.createElement('INPUT'); text.type = 'text'; text.value = el.value; return text; } function classNamesToSelector(classNames) { return classNames.split(' ') .filter(className => className.length > 0) .map(className => `.${className}`) .join('') } function hasMessagesWrapper(field, messagesWrapperClassName) { return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); } function getMessagesWrapper(field, messagesWrapperClassName) { if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); } const msgWrapper = document.createElement('ul'); const msgId = generateId.call(this); msgWrapper.id = msgId; field.element.setAttribute('aria-errormessage', msgId); field.element.setAttribute('aria-describedby', msgId); msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); if (field.validateOnChange) { msgWrapper.setAttribute('aria-live', 'polite'); } this.getMessageContainer(field).appendChild(msgWrapper); return msgWrapper; } function getCheckedValues(field) { const name = field.element.name.replace(/([\\"])/g, '\\$1'); const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); return Array.from(elements).map(el => el.value); } function escapeHtml(s) { const div = document.createElement('div') div.innerText = s; return div.innerHTML; } function formValidation(formElement, options) { if (formElement.tagName === 'FORM') { formElement.setAttribute('novalidate', ''); } else { console.error('formValidation can be initialized only on FORM element', formElement); return; } options = Object.assign({ fieldWrapperClassName: 'field field-reserved', messagesWrapperClassName: 'messages', validClassName: 'field-success', invalidClassName: 'field-error', pageMessagesWrapperSelector: null, scrollToFirstError: true, }, options || {}); return { state: { valid: false, }, fields: {}, idSeq: 0, idPrefix: formElement.id || 'vld-msg', setupFields(elements) { this.fields = {}; Array.from(elements).forEach(element => { if (elementWillValidate(element)) { this.setupField(element); } }); }, setupField(element) { if (! element) return; const onChange = !!element.dataset.onChange; if (elementWillValidate(element)) { const rules = getRules(element); if (Object.keys(rules).length > 0) { if (this.fields[element.name]) { Object.assign(this.fields[element.name].rules, rules); } else { this.fields[element.name] = { element, rules: rules, validateOnChange: onChange, state: { valid: null, rules: {} } } } } } else { console.error('Element will not validate', element); } }, onSubmit(event) { if (event.target.tagName === 'FORM') { event.preventDefault(); this.validate() .then(() => event.target.submit()) .catch(invalidElements => {}); } }, onChange(event) { event.target.dataset.onChange = 'true'; if (!Object.keys(this.fields).length) { this.setupFields(formElement.elements); } if (!Object.keys(this.fields).includes(event.target.name)) { this.setupField(event.target); } const field = this.fields[event.target.name]; this.validateField(field); field && field.element.removeAttribute('data-on-change') }, validateSafe() { return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) }, validate() { if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { this.setupFields(formElement.elements); } return new Promise(async (resolve, reject) => { if (formElement.elements) { await raceSome(this.validateFields(), result => result !== true) const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); this.state.valid = invalidFields.length === 0; if (this.state.valid) { resolve(); } else { if (options.scrollToFirstError && invalidFields.length > 0) { invalidFields[0].element.focus() invalidFields[0].element.select && invalidFields[0].element.select(); } reject(invalidFields.map(field => field.element)); } } }); }, validateFields() { const fields = Object.values(this.fields); fields.forEach(field => { this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) }); return fields.map(field => this.validateField(field)) }, validateField(field) { if (! field || ! elementWillValidate(field.element)) { return new Promise(resolve => resolve(true)) } let value; if (field.element.type === 'checkbox') { value = getCheckedValues(field); } else if (field.element.type === 'radio') { value = getCheckedValues(field)[0] || undefined; } else if (field.element.tagName === 'SELECT' && field.element.multiple) { value = Array.from(field.element.selectedOptions).map(opt => opt.value); } else { value = field.element.value; } const rules = field.rules || {}; field.state.valid = true; this.showFieldState(field); const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { field.state.rules[rule] = result; return result; }) }); return new Promise(resolve => { Promise.all(fieldValidations).then(results => { field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult) this.showFieldState(field); resolve(field.state.valid); }) }); }, getMessagesByField(field) { const messages = []; const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); field.rules && Object.keys(field.rules).forEach((rule) => { if (invalidRules.includes(rule)) { const customMessage = field.element.getAttribute('data-msg-' + rule); const message = customMessage ? customMessage : field.state.rules[rule]; const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) { messages.push(hyva.strf('Validation rule "%0" failed.', rule)); } else if (Array.isArray(ruleOptions)) { ruleOptions.unshift(message.type ? message.content : message); const content = hyva.strf.apply(null, ruleOptions); messages.push(message.type ? {type: message.type, content} : content); } else { const content = hyva.strf(message.type ? message.content : message, ruleOptions) messages.push(message.type ? {type: message.type, content} : content); } } }); return messages; }, /** @deprecated */ getFieldWrapper(field) { return this.getMessageContainer(field) }, getMessageContainer(field) { let container; const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; if (pageSelector) { container = document.querySelector(pageSelector) || containerNotFound(pageSelector, field.element) } else { const containerSelector = classNamesToSelector(options.fieldWrapperClassName); container = field.element.closest(containerSelector) || createMessageContainer(field.element, options.fieldWrapperClassName) || containerNotFound(containerSelector, field.element); } return container; }, showFieldState(field) { const container = this.getMessageContainer(field), hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName), messages = this.getMessagesByField(field).map(m => { return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content; }); container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); this.createHtmlErrorMessage(field, messages); if (field.state.valid) { field.element.removeAttribute('aria-invalid'); } else { field.element.setAttribute('aria-invalid', 'true'); if (! document.activeElement) { field.element.focus(); } } }, removeMessages(field, messagesClass) { if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { return; } const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`); Array.from(messages).forEach(msg => msg.remove()); if (msgWrapper && msgWrapper.childElementCount === 0) { field.element.removeAttribute('aria-errormessage'); field.element.removeAttribute('aria-describedby'); msgWrapper.remove(); } }, createErrorMessage(field, messages) { const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) this.createHtmlErrorMessage(field, htmlMessages); }, createHtmlErrorMessage(field, messages) { this.removeMessages(field, options.messagesWrapperClassName); field.element.removeAttribute('aria-errormessage'); field.element.removeAttribute('aria-describedby'); if (!field.state.valid) { const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages); field.element.setAttribute('aria-errormessage', msgWrapper.id); field.element.setAttribute('aria-describedby', msgWrapper.id); } }, /** @deprecated */ createMessage(field, message) { return this.addMessages(field, options.messagesWrapperClassName, message); }, addMessages(field, messagesClass, messages) { const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) return this.addHtmlMessages(field, messagesClass, htmlMessages); }, addHtmlMessages(field, messagesClass, htmlMessages) { const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => { const li = document.createElement('li'); li.innerHTML = htmlMessage; li.setAttribute('data-msg-field', field.element.name); msgWrapper.appendChild(li); }); return msgWrapper; }, setField(name, value) { this.fields[name].element.value = value; this.fields[name].element.dispatchEvent((new Event('input'))); this.validateField(this.fields[name]); } } } hyva.formValidation = formValidation; hyva.formValidation.rules = formValidationRules; hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName; hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName; hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator; }(window.hyva = window.hyva || {}));</script><script> function initHeader () { return { searchOpen: false, cart: {}, isCartOpen: false, getData(data) { if (data.cart) { this.cart = data.cart } }, isCartEmpty() { return !this.cart.summary_count }, toggleCart(event) { if (event.detail && event.detail.isOpen !== undefined) { this.isCartOpen = event.detail.isOpen if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { this.$refs.cartButton.focus() } } else { this.isCartOpen = true } }, openShoppingCart() { window.location.href = this.$el.getAttribute('data-href'); } } }</script><script> 'use strict'; function amXsearchProductsComponent() { return { getResultProductsCount() { const suggestions = this.sections.products; const totalCount = suggestions?.total_count ?? 0; const itemsCount = suggestions?.items?.length ?? 0; return totalCount > 0 ? totalCount - itemsCount : 0; }, processProductName(value) { if (value.items) { value.items = value.items.map(item => { item.name = this.addHighlight(item, 'name'); item.sku = this.addHighlight(item, 'sku'); item.name = this.truncateWithDots(item.name, this.productNameMaxLength, true); return item; }); } return value; }, addHighlight(product, key = 'name') { const name = product[key]; const { latestQuery } = this; const queries = latestQuery.toLowerCase().split(" "); let highlightedName = name; for (const query of queries) { if (query.trim() !== "") { const regex = new RegExp(`(?!<[^>]*)(${query})(?![^<]*>)`, "gi"); highlightedName = highlightedName.replace(regex, match => `<span class="amsearch-highlight">${match}</span>`); } } return highlightedName; }, truncateWithDots(str, maxLength, returnOriginal = false) { if (maxLength === '' || maxLength < 1) { return returnOriginal ? str : ""; } let output = []; let tagBuffer = []; let count = 0; let inTag = false; for (const char of str) { if (char === "<") { inTag = true; } if (inTag) { tagBuffer.push(char); } else { count++; } if (char === ">") { inTag = false; output.push(tagBuffer.join("")); tagBuffer = []; } else if (!inTag) { output.push(char); } if (count >= maxLength) { break; } } if (count >= maxLength) { output.push("..."); } while (tagBuffer.length > 0) { const closingTagPos = str.indexOf(">", str.indexOf(tagBuffer.join("")) + tagBuffer.length); if (closingTagPos !== -1) { output.push(str.slice(str.indexOf(tagBuffer.join("")) + tagBuffer.length, closingTagPos + 1)); tagBuffer = []; } else { break; } } return output.join(""); }, getProductUrl(product) { return window.BASE_URL + product.url_key + (product.url_suffix || ''); }, getProductImageUrl(product) { const imageUrl = product.small_image.url; let mediaURL = this.config.customMediaUrl || imageUrl; if (mediaURL.includes('/media') && imageUrl.startsWith('media/')) { mediaURL = mediaURL.replace('/media', ''); } return (imageUrl.includes('://') ? '' : mediaURL) + imageUrl; }, /** * * @param product */ getRating(product) { const { rating_summary } = product; product.ratingData = { ratingSteps: 5, starsFilled: Math.floor(+rating_summary / 100 * 5), starFragment: rating_summary / 100 * 5 % 1, starsEmpty: Math.floor(5 - (+rating_summary / 100 * 5)), yellowHex: '#FE9901', greyHex: '#cbd5e0', averageRating: (rating_summary / 20).toFixed(1) }; return product; }, isM1(product) { return product.type === 1 }, isSaas(product) { return product.custom_stock_status === 'Saas' }, isService(product) { return product.type === +'99' }, isRequestQuote(product) { return product.custom_stock_status === 'Request a quote' }, isRevisingDemand(product) { return product.custom_stock_status === 'Revising demand' }, isCalcurates(product) { return product.id === 1490 } } }</script><script> 'use strict'; (()=> { const browserCache = { set(key, value) { const now = new Date(); const item = { value: value, expiry: now.getTime() + 5 * 60 * 1000, }; localStorage.setItem(key, JSON.stringify(item)); }, get(key) { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date(); if (now.getTime() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; } }; window._amXSearchConfigFetcher = null; window.amXsearchAutocompleteComponent = () => { const INITIAL_QUERY_CACHE_KEY = 'x.InitialQuery'; const CONFIG_QUERY_CACHE_KEY = 'x.ConfigQuery'; const PREV_QUERY_CACHE_KEY = 'x.PrevQuery'; const HEADER_TYPE = 'b'; const cache = {}; const dataSections = { products: false, category: false, page: false, faq: false, landingPage: false, browsingHistory: false, popularSearches: false, bestsellers: false, recentSearches: false, recentlyViewed: false, brand: false, blog: false }; return { isLoading: false, searchInitialized: false, latestQuery: '', productNameMaxLength: 100, resultPageUrl: 'https://amasty.com/catalogsearch/result/?q=', minSearchLength: 3, maxSearchLength: 128, isDefaultSearchInput: true, isFullWidthSearch: false, searchPopupWidth: 900, showOverlay: false, config: {}, slider: { bestsellers: false, recentlyViewed: false }, isHorizontalView: true, noResultsFound: false, errorMessage: null, isProductsShown: false, regex: { tags: /(<([^>]+)>)/gi }, sections: Object.create(dataSections), isHyvaUiHeader() { return HEADER_TYPE.length && HEADER_TYPE !== 'default'; }, checkHyvaUiHeaderVariant(needle) { return this.isHyvaUiHeader() && needle === HEADER_TYPE; }, dynamicLayout($el) { const matchMedia = window.matchMedia('(max-width: 768px)'); const isHorizontalViewPopupWidth = this.searchPopupWidth < 700 && !this.isDefaultSearchInput && !this.isFullWidthSearch; this.isHorizontalView = !matchMedia.matches ? isHorizontalViewPopupWidth : true; matchMedia.addEventListener('change', event => { this.isHorizontalView = !matchMedia.matches ? isHorizontalViewPopupWidth : true; }) if (!window._amXSearchConfigFetcher) { window._amXSearchConfigFetcher = new Promise(async resolve => { const cachedData = browserCache.get(CONFIG_QUERY_CACHE_KEY); if (cachedData) { return resolve(cachedData); } const query = `query {config: storeConfig { isProductReviewsBlockEnabled: amasty_xsearch_product_reviews isProductAddToCartBlockEnabled: amasty_xsearch_product_add_to_cart isRedirectToSingleProductEnabled: amasty_xsearch_product_redirect_single_product isFullScreenMode: amasty_xsearch_general_full_screen isGridView: amasty_xsearch_product_popup_display isShowSku: amasty_xsearch_product_show_sku shortDescriptionLength: amasty_xsearch_product_desc_length customMediaUrl: secure_base_media_url amasty_xsearch_products_title: amasty_xsearch_product_title amasty_xsearch_popularSearches_title: amasty_xsearch_popular_searches_title amasty_xsearch_browsingHistory_title: amasty_xsearch_browsing_history_title amasty_xsearch_recentSearches_title: amasty_xsearch_recent_searches_title amasty_xsearch_recentlyViewed_title: amasty_xsearch_recently_viewed_title amasty_xsearch_landingPage_title: amasty_xsearch_landing_page_title amasty_xsearch_bestsellers_position amasty_xsearch_faq_title amasty_xsearch_brand_title amasty_xsearch_blog_title amasty_xsearch_category_title amasty_xsearch_bestsellers_title amasty_xsearch_page_title amasty_xsearch_popularSearches_first_click: amasty_xsearch_popular_searches_first_click amasty_xsearch_browsingHistory_first_click: amasty_xsearch_browsing_history_first_click amasty_xsearch_recentSearches_first_click: amasty_xsearch_recent_searches_first_click amasty_xsearch_layout_enabled amasty_xsearch_layout_border amasty_xsearch_layout_hover amasty_xsearch_layout_highlight amasty_xsearch_layout_background amasty_xsearch_layout_text amasty_xsearch_layout_hover_text amasty_xsearch_layout_search_button amasty_xsearch_layout_search_button_text }}`; const response = await this.fetch(query, {}, CONFIG_QUERY_CACHE_KEY, false); if (response.errors && response.errors.length > 0) { console.error(response.errors); } browserCache.set(CONFIG_QUERY_CACHE_KEY, response); resolve(response); }); } _amXSearchConfigFetcher.then(response => { if (!response?.data?.config) { return; } this.config = response.data.config; this.processCustomLayoutStyles($el); }); if (typeof this.searchOpen !== "undefined") { this.$watch('searchOpen', val => { if (!val && this.isMobile('(max-width: 1023px)')) { document.body.classList.remove('amxsearch-open'); $el.classList.add('hidden'); return; } if (this.isMobile('(max-width: 1023px)')) { $el.classList.remove('hidden'); document.body.classList.add('amxsearch-open'); } else { if (val) { $el.classList.add('show-search-wrapper'); } } if (document.body.classList.contains('-ammenu-opened')) { const event = new Event('click'); document.querySelector('[data-ammenu-js="menu-toggle"]').dispatchEvent(event); } requestAnimationFrame(() => { const searchInput = document.querySelector('#search'); searchInput && searchInput.focus(); }); }); } if (typeof this.showOverlay !== "undefined") { this.$watch('showOverlay', val => { if (!val) { return; } this.applyHyvaUiHeaderConfig() }); } this.applyHeaderTypeToContainers(); }, isSidebarSectionsDisabled() { if (!this.isHorizontalView) { return !Object.entries(this.sections).some(([key, value]) => key !== 'products' && key !== 'bestsellers' && key !== 'recentlyViewed' && value.total_count > 0 ); } }, showSideBar() { const recentlyViewed = this.sections?.recentlyViewed; return this.latestQuery.length >= 3 || (recentlyViewed && recentlyViewed?.items?.length); }, showHandler(blockName) { if (this.isProductsShown) { if (blockName === 'products') { return true; } else { return false } } else { return this.latestQuery.length >= this.minSearchLength || this.showOnFirstClick(blockName); } }, showOnFirstClick(blockName) { const sectionsToCheck = [ 'popularSearches', 'browsingHistory', 'recentSearches' ]; if (!sectionsToCheck.includes(blockName)) { return false; } return this.latestQuery.length < this.minSearchLength && this.config[`amasty_xsearch_${blockName}_first_click`] && this.sections[blockName]?.items?.length; }, processCustomLayoutStyles() { const conf = key => this.config[`amasty_xsearch_layout_${key}`]; if (!conf("enabled")) { return ""; } const styles = [ "border", "hover", "highlight", "background", "text", "hover_text", 'search_button', 'search_button_text' ]; const cachedConf = styles.reduce((acc, key) => { acc[key] = conf(key); return acc; }, {}); const getDarken = (color, amount) => { const hex = parseInt(color.slice(1), 16); const r = Math.min(255, Math.max(0, ((hex >> 16) & 0xff) + amount)); const g = Math.min(255, Math.max(0, ((hex >> 8) & 0xff) + amount)); const b = Math.min(255, Math.max(0, (hex & 0xff) + amount)); return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, "0")}`; }; const prefix = "--amsearch-color-"; styles.forEach((key) => { const color = cachedConf[key]; document.body.style.setProperty(prefix + key, `#${color}`); document.body.style.setProperty(`${prefix + key}-focus`, getDarken(`#${color}`, -12)); document.body.style.setProperty(`${prefix + key}-hover`, getDarken(`#${color}`, -16)); }); }, canShowSection(sectionData) { return sectionData && sectionData.items && sectionData.items.length > 0; }, initialSectionLoad() { const req = this.fetch(`query xSearchQuery { recentlyViewed: xsearchRecentlyViewed { items { small_image { label url } id is_salable short_description { html } name options_container rating_summary reviews_count sku url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { regular_price { value currency } final_price { value currency } } } } } popularSearches: xsearchPopularSearches { code items { name num_results url } total_count } recentSearches: xsearchRecentSearches { code items { name num_results url } total_count } browsingHistory: xsearchBrowsingHistory { code items { name url } total_count } }`, {}, INITIAL_QUERY_CACHE_KEY); req.then(response => { if (response.errors && response.errors.length > 0) { console.error(response.errors); } this.searchInitialized = true; this.processResponse(response); }); }, encodeHtml(html) { const txt = document.createElement('textarea'); txt.textContent = this.stripTags(html) || ''; return txt.innerHTML; }, stripTags: function (string) { if (this.regex.tags.test(string)) { return string.replace(this.regex.tags, ''); } return string; }, sanitize(value) { if (typeof DOMPurify === 'function') { return DOMPurify.sanitize(value) } else { return this.encodeHtml(value) } }, doSearch() { const { searchInput } = this.$refs; const { latestQuery, minSearchLength } = this; const inputText = this.sanitize(searchInput.value); if (inputText !== latestQuery && cache[PREV_QUERY_CACHE_KEY]) { delete cache[PREV_QUERY_CACHE_KEY]; } this.latestQuery = this.sanitize(searchInput.value); if (inputText.length < minSearchLength) { this.showOverlay = true; this.initialSectionLoad(); return; } this.noResultsFound = null; this.errorMessage = null; const query = `query xSearchQuery($inputText: String!) { products: xsearchProducts(search: $inputText) { code items { __typename small_image { label url } id is_salable short_description { html } name rating_summary reviews_count sku url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { regular_price { value currency } final_price { value currency } } } type hyva_compatible custom_stock_status opposite_product is_salable_service show_in_ajax_search opposite_product_data { name type is_salable url_key url_suffix price_range { minimum_price { regular_price { value currency } final_price { value currency } } maximum_price { final_price { value currency } } } } product_label { label_id name status priority is_single use_for_parent frontend_settings { label_text type image image_size position style alt_tag redirect_url } tooltip { status color background_color content } } } total_count } browsingHistory: xsearchBrowsingHistory { code items { name url } total_count } recentSearches: xsearchRecentSearches { code items { name num_results url } total_count } popularSearches: xsearchPopularSearches { code items { name num_results url } total_count } terms: xsearchRelatedTerms(search: $inputText) { items { count name } } } `; const req = this.fetch(query, { inputText }, PREV_QUERY_CACHE_KEY); req.then(response => { if (response.errors && response.errors.length > 0) { this.errorMessage = response.errors[0].message; console.error(this.errorMessage); } this.searchInitialized = true; this.processResponse(response); }); }, fetch(query, variables = {}, cacheKey = null, useLoading = true) { if (cacheKey && cache[cacheKey]) { return Promise.resolve(cache[cacheKey]); } if (useLoading) { this.isLoading = true; } const req = fetch(`${BASE_URL}graphql`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query, variables}), }); req.catch(reason => console.error(reason)); return req.then(response => { if (!response.ok) { throw new Error(`HTTP error: ${response.status}`); } const body = response.json(); if (cacheKey) { cache[cacheKey] = body; } return body; }); }, checkSearchInput() { if (this.$refs.searchInput.value === '') { this.clear(); } }, redirect() { this.isLoading = true; const { searchInput } = this.$refs; const inputText = this.sanitize(searchInput.value); const products = this.sections.products; if (products && products.items.length === 1 && this.config.isRedirectToSingleProductEnabled) { location.href = this.getProductUrl(products.items[0]); return; } const url = 'https://amasty.com/catalogsearch/result/?q='; location.href = url + inputText; }, focusElement(element) { if (element && element.nodeName === "DIV") { element.focus(); return true; } return false; }, processResponse(response) { this.updateSections(response.data); }, clear() { const initialQueryCache = cache[INITIAL_QUERY_CACHE_KEY]; if (!initialQueryCache) { return; } initialQueryCache.then(result => { this.updateSections(result.data ?? {}); }); }, closeSearch() { if (this.searchOpen) { this.searchOpen = false; this.$root.classList.remove('show-search-wrapper'); } this.$nextTick(() => { this.showOverlay = false; this.searchInitialized = false; }) if (this.checkHyvaUiHeaderVariant('c')) { this.$refs.searchContainerDesktop.classList.remove(HEADER_TYPE + '-header-type'); } }, processItemsWithRating(value) { if (value.items) { value.items = value.items.map(this.getRating.bind(this)); } return value; }, processSection(key, value) { if (!value) { return value; } let processedValue; switch (key) { case 'recentlyViewed': case 'bestsellers': processedValue = this.processItemsWithRating(value); if (processedValue.items) { processedValue.items = (processedValue.items || []).map(item => { item.isSliderItem = true; return item; }); } break; case 'products': processedValue = this.processItemsWithRating(value); processedValue = this.processProductName(processedValue); break; default: processedValue = value; } processedValue.title = this.config[`amasty_xsearch_${key}_title`]; return processedValue; }, updateSections(rows) { this.isProductsShown = false; if (!this.showOverlay) { this.showOverlay = true; } this.isLoading = false; this.noResultsFound = !rows.products?.total_count && this.latestQuery.length >= this.minSearchLength; if (!this.noResultsFound) { this.errorMessage = null; } if (rows.products?.total_count) { this.isProductsShown = true; } for (const key in dataSections) { const data = rows[key]; this.sections[key] = data?.items?.length > 0 ? this.processSection(key, data) : {items: [], total_count: 0}; } if (this.latestQuery.length >= this.minSearchLength) { return; } for (const key in this.slider) { const items = rows[key]?.items; if (rows.hasOwnProperty(key) && items?.length && !this.slider[key]) { this.slider[key] = this.amXsearchCarouselComponent(key, items.length); } } }, ...AmsiteUtils() } } })();</script><script> 'use strict'; /** * Carousel component for xsearch * * @param key * @param itemCount * @returns Object */ function amXsearchCarouselComponent(key, itemCount) { return { itemCount, pageSize: 4, active: 0, slider: null, pageFillers: 0, sliderEl: false, smallWindowItemWidth: false, init($refs) { const sliderEl = $refs[`${key}Container`]; if (!sliderEl || itemCount === 0) { return this; } if (sliderEl) { if (!this.isDefaultSearchInput && !this.isFullWidthSearch) { if (this.searchPopupWidth <= 900) { this.smallWindowItemWidth = sliderEl.clientWidth / 3; } if (this.searchPopupWidth <= 700) { this.smallWindowItemWidth = sliderEl.clientWidth / 2; } if (this.searchPopupWidth <= 500) { this.smallWindowItemWidth = sliderEl.clientWidth - 30; } } } this.sliderEl = sliderEl; this.recalculate(); }, getSlider() { return this.sliderEl.querySelector('.carousel-slides'); }, calcPageSize() { const slider = this.getSlider(); if (!slider) { return this; } const slides = slider.querySelectorAll('.carousel-slide'); if (this.smallWindowItemWidth) { slides.forEach(slide => { slide.style.width = `${this.smallWindowItemWidth}px`; }); } const firstSlide = slides[0]; this.itemCount = slides.length; this.pageSize = Math.round(slider.clientWidth / firstSlide.clientWidth); this.pageFillers = this.pageSize * Math.ceil(this.itemCount / this.pageSize) - this.itemCount; }, calcActive() { const slider = this.getSlider(); if (!slider) { return this; } const sliderItems = Math.round(this.itemCount) + Math.round(this.pageFillers); const calculatedActiveSlide = Math.round( Math.round(slider.scrollLeft) / (Math.round(slider.scrollWidth) / sliderItems) ); this.active = Math.round(calculatedActiveSlide / Math.round(this.pageSize)) * Math.round(this.pageSize); }, prev() { this.scrollTo(this.active - this.pageSize); }, next() { this.scrollTo(this.active + this.pageSize); }, scrollTo(index) { const slider = this.getSlider(); if (!slider) { return this; } const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers); slider.scrollLeft = Math.floor(slideWidth) * index; this.calcActive(); }, isActive(index) { return index === this.active; }, recalculate() { this.calcPageSize(); setTimeout(() => this.calcActive(), 100); }, onResize() { this.calcPageSize(); setTimeout(() => this.calcActive(), 100); } }; }</script><script> 'use strict'; function amXsearchAutocompleteHyvaUIHeaderCompat() { const HEADER_TYPE = 'b'; return { applyHyvaUiHeaderConfig() { const searchContent = document.getElementById('search-content'); if (this.isFullWidthSearch) { if (!this.isHorizontalView) { if (this.checkHyvaUiHeaderVariant('b')) { searchContent.style = 'max-width:none'; searchContent.parentNode.style = 'padding-right:0; padding-left:0;'; } if (this.checkHyvaUiHeaderVariant('c')) { this.$refs.searchContainerDesktop.classList.add(HEADER_TYPE + '-header-type'); this.$refs.searchForm.style = 'padding-right:0; padding-left:0;'; } } if (this.checkHyvaUiHeaderVariant('a')) { searchContent.style = 'max-width: none'; } } }, applyHeaderTypeToContainers() { const searchHeader = document.getElementById('header'); const columnMain = document.querySelector('.column.main'); const searchContent = document.getElementById('search-content'); const headerTypeClass = HEADER_TYPE + '-header-type'; if (searchHeader || columnMain) { searchHeader.classList.add(headerTypeClass); columnMain.classList.add(headerTypeClass); } if (this.checkHyvaUiHeaderVariant('a')) { searchContent.className = 'container'; } } } }</script><script> 'use strict'; function initAmlabel_67be52ca6c806() { return { element: null, elementStyle: null, parent: null, parentWidth: null, initialized: false, wrapperClass: '', wrapperStyle: null, labelContainer: null, labelWidth: null, amLabelStyle: null, /** * @param $el */ initLabel($el) { this.element = $el; this.labelContainer = this.$refs.amLabel; this.labelWidth = Number(this.$refs.amLabelElement.dataset.size); this.parent = this.$refs.amLabelParent; this.parentWidth = this.$refs.amLabelImgParent.width; this.wrapperClass = `[data-wrapper-class=${this.$refs.amLabelElement.dataset.wrapperClass}]`; this.wrapperStyle = this.$refs.amLabelWrapper.classList; switch ($el.dataset.position) { case '0': this.elementStyle = ' top-0 left-0'; this.amLabelStyle = ' items-start' break; case '1': this.elementStyle = ' top-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '2': this.elementStyle = ' top-0 right-0'; this.amLabelStyle = ' items-end' break; case '3': this.elementStyle = ' top-1/2 -translate-y-1/2 left-0'; this.amLabelStyle = ' items-start' break; case '4': this.elementStyle = ' top-1/2 -translate-y-1/2 mx-auto'; this.amLabelStyle = ' items-start' break; case '5': this.elementStyle = ' top-1/2 -translate-y-1/2 right-0'; this.amLabelStyle = ' items-end' break; case '6': this.elementStyle = ' bottom-0 left-0'; this.amLabelStyle = ' items-start' break; case '7': this.elementStyle = ' bottom-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '8': this.elementStyle = ' bottom-0 right-0'; this.amLabelStyle = ' items-end' break; } this.$refs.amLabelWrapper.classList = this.wrapperStyle + this.elementStyle; if ('0' === '0') { this.$refs.amLabelWrapper.classList = this.$refs.amLabelWrapper.classList + this.amLabelStyle; } }, /** * @return {void} */ render() { if (this.element.dataset.amlabelObserved) { return; } this.element.dataset.amlabelObserved = true; this.parentContainerProcessor.process(this); this.labelItemProcessor.process(this); this.initialized = true; }, /** * @param url * @returns {string} */ getImgLabelPath(url) { const baseUrl = BASE_URL.replace('index.php/', ''); return `${baseUrl}media/amasty/amlabel/${url}`; }, /** * @param url */ labelRedirect(url) { return window.location.assign(`${BASE_URL + url}`); }, /** * @returns {string|string} */ getImageSize() { return this.labelWidth ? this.parentWidth * this.labelWidth / 100 + 'px': ''; } } }</script><script> 'use strict'; function initAmlabel_67be52ca6c9fa() { return { element: null, elementStyle: null, parent: null, parentWidth: null, initialized: false, wrapperClass: '', wrapperStyle: null, labelContainer: null, labelWidth: null, amLabelStyle: null, /** * @param $el */ initLabel($el) { this.element = $el; this.labelContainer = this.$refs.amLabel; this.labelWidth = Number(this.$refs.amLabelElement.dataset.size); this.parent = this.$refs.amLabelParent; this.parentWidth = this.$refs.amLabelImgParent.width; this.wrapperClass = `[data-wrapper-class=${this.$refs.amLabelElement.dataset.wrapperClass}]`; this.wrapperStyle = this.$refs.amLabelWrapper.classList; switch ($el.dataset.position) { case '0': this.elementStyle = ' top-0 left-0'; this.amLabelStyle = ' items-start' break; case '1': this.elementStyle = ' top-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '2': this.elementStyle = ' top-0 right-0'; this.amLabelStyle = ' items-end' break; case '3': this.elementStyle = ' top-1/2 -translate-y-1/2 left-0'; this.amLabelStyle = ' items-start' break; case '4': this.elementStyle = ' top-1/2 -translate-y-1/2 mx-auto'; this.amLabelStyle = ' items-start' break; case '5': this.elementStyle = ' top-1/2 -translate-y-1/2 right-0'; this.amLabelStyle = ' items-end' break; case '6': this.elementStyle = ' bottom-0 left-0'; this.amLabelStyle = ' items-start' break; case '7': this.elementStyle = ' bottom-0 mx-auto'; this.amLabelStyle = ' items-start' break; case '8': this.elementStyle = ' bottom-0 right-0'; this.amLabelStyle = ' items-end' break; } this.$refs.amLabelWrapper.classList = this.wrapperStyle + this.elementStyle; if ('0' === '0') { this.$refs.amLabelWrapper.classList = this.$refs.amLabelWrapper.classList + this.amLabelStyle; } }, /** * @return {void} */ render() { if (this.element.dataset.amlabelObserved) { return; } this.element.dataset.amlabelObserved = true; this.parentContainerProcessor.process(this); this.labelItemProcessor.process(this); this.initialized = true; }, /** * @param url * @returns {string} */ getImgLabelPath(url) { const baseUrl = BASE_URL.replace('index.php/', ''); return `${baseUrl}media/amasty/amlabel/${url}`; }, /** * @param url */ labelRedirect(url) { return window.location.assign(`${BASE_URL + url}`); }, /** * @returns {string|string} */ getImageSize() { return this.labelWidth ? this.parentWidth * this.labelWidth / 100 + 'px': ''; } } }</script><script> function initCartDrawer() { return { isGlobalOpen: false, open: false, isLoading: false, cart: {}, maxItemsToDisplay: 10, itemsCount: 0, isHoverOnCartWrapper: false, totalCartAmount: 0, removedBlock: [], mainBlock: [], getData(data) { if (data.cart) { this.cart = data.cart; this.itemsCount = data.cart.items && data.cart.items.length || 0; this.totalCartAmount = this.cart.summary_count; this.setCartItems(); } }, cartItems: [], setCartItems() { this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; if (this.maxItemsToDisplay > 0) { this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); } this.removeActions(); }, deleteItemFromCart(item, target) { const formKey = hyva.getFormKey(); const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; this.isLoading = true; this.animationRemoveItem(item.item_id, target); fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key=" + formKey + "&item_id=" + item.item_id, "method": "POST", "mode": "cors", "credentials": "include" }).then(response => { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { window.dispatchMessages && window.dispatchMessages([{ type: 'warning', text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' }]); this.isLoading = false; } }).then(result => { if (!result.success) { window.dispatchMessages && window.dispatchMessages([{ type: 'error', text: result.error_message }], 5000) this.isLoading = false; } window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }); }, toggleCartDrawer(event) { if (this.isMobile('(max-width: 1023px)')) { return; } if (event.detail && event.detail.isOpen !== undefined) { if (event.detail.isOpen) { this.isOpen = true; this.openCartDrawer() this.isGlobalOpen = !event.detail.showAfterAdd; } else { this.open = false; this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) } } else { this.openCartDrawer() } }, openCartDrawer() { this.open = true; this.$nextTick(() => { this.$refs && this.$refs.cartDialogContent }) setTimeout(() => { this.$refs.cartDialogContent.focus() }, 500); if (this.closeTimeout) { clearTimeout(this.closeTimeout); } this.closeTimeout = setTimeout(() => { if (!this.isGlobalOpen) { this.closeCartDrawer(); } }, 5000); }, closeCartDrawer() { this.$dispatch('toggle-cart', { isOpen: false }); }, closeCartWithDelay() { this.isGlobalOpen = false; setTimeout(() => { if (this.isGlobalOpen) { return; } this.closeCartDrawer(); }, 500); }, getAdditionalOptions(item) { var period = item.product_subscription_period, typeUser = item.subscription_type.toLowerCase(), typeVersion = item.product_subscription_version; period = period === 'year' ? 'annual' : period; if (window.dataForSubscriptions[typeUser]) { return '<p class="list-item">— ' + window.dataForSubscriptions[typeUser][period][typeVersion] .join('</p><p class="list-item">— ') + '</p>'; } return ''; }, animationRemoveItem(itemId, target) { const itemBlock = target.closest(`[data-amsite-js="${itemId}"]`); const removeBlock = document.querySelector('[data-amsite-js="removeBlock"]'); const mainBlock = itemBlock.querySelector('[data-amsite-js="item-main-block"]'); const clonedRemoveBlock = removeBlock.cloneNode(true); mainBlock.classList.add('hidden'); itemBlock.appendChild(clonedRemoveBlock); clonedRemoveBlock.classList.remove('hidden'); this.removedBlock.push(clonedRemoveBlock); this.mainBlock.push(mainBlock); }, removeActions() { if (this.removedBlock.length) { this.removedBlock.forEach((block) => { block.remove(); }); this.mainBlock.forEach((block) => { block.classList.remove('hidden'); }); this.isLoading = false; if (document.body.classList.contains('checkout-cart-index')) { window.location.reload(); } } }, showRemoveMessage(item, target) { window.dispatchEvent( new CustomEvent('minicart-popup-show-notification', {detail: {item, target}}) ) }, ...AmsiteUtils() } }</script><script> const AmMiniCartPopupNotification = function () { const TEXTS = { transferred: 'This\u0020product\u0020is\u0020transferred.\u0020If\u0020you\u0020delete\u0020it,\u0020you\u0020will\u0020no\u0020longer\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020be\u0020able\u0020to\u0020buy\u0020it\u0020with\u0020a\u0020100\u0025\u0020discount\u0020for\u0020the\u0020initial\u0020order.\u0020Would\u0020you\u0020still\u0020like\u0020to\u0020proceed\u003F', free: 'Are\u0020you\u0020sure\u0020you\u0020want\u0020to\u0020remove\u0020the\u0020free\u0020gift\u0020from\u0020the\u0020cart\u003F\u0020Once\u0020deleted\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020you\u0020won\u2019t\u0020be\u0020able\u0020to\u0020add\u0020it\u0020again.', }; return { item: {}, target: null, showNotification(data) { this.item = data.detail.item; this.target = data.detail.$el; this.createContentForPopup(this.item ); this.show('minicart-popup-notification'); }, createContentForPopup(item) { const itemType = item.is_transfered ? 'transferred' : 'free'; this.$refs.minicartNotificationContent.textContent = TEXTS[itemType]; } } }</script><script type="text/x-magento-init"> { ".breadcrumbs": { "breadcrumbs": {"categoryUrlSuffix":".html","useCategoryPathInUrl":1,"product":"B2B E-commerce Premium Solution for Magento 2","breadcrumbs":[{"label":"B2B Products","link":"https:\/\/amasty.com\/b2b-extensions-for-magento-2.html"},{"label":"Magento 2 Extensions","link":"https:\/\/amasty.com\/magento-2-extensions.html"}]} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "messages": { "component": "Magento_Theme/js/view/messages", "floatingMessages": "true" } } } } }</script><script type="text/x-magento-init"> { "[data-gallery-role=gallery-placeholder]": { "amsiteGalleryInit": { "mixins":["magnifier/magnify"], "magnifierOpts": {"fullscreenzoom":"20","top":"","left":"","width":"","height":"","eventType":"hover","enabled":false}, "data": [{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc4c5b.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc4c5b.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc4c5b.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"2","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc51f5.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc51f5.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc51f5.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"3","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5230.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5230.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5230.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"4","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_673f1ff703a69.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_673f1ff703a69.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_673f1ff703a69.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"5","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5292.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5292.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5292.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"7","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc52bc.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc52bc.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc52bc.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"8","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc52e8.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc52e8.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc52e8.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"9","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5312.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5312.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5312.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"10","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc533c.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc533c.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc533c.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"11","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5366.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5366.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc5366.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"12","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc538f.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc538f.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc538f.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"13","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc53b8.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc53b8.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc53b8.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"14","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc53e0.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc53e0.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_66d6f79cc53e0.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"15","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/d492300003ec9ae05261558b2c675287\/b\/2\/b2b-ecommerce-suite-for-magento-2_673f230715932.png","img":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/442addc013119a99308eafd27d784beb\/b\/2\/b2b-ecommerce-suite-for-magento-2_673f230715932.png","full":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/b\/2\/b2b-ecommerce-suite-for-magento-2_673f230715932.png","caption":"B2B E-commerce Premium Solution for Magento 2","position":"16","isMain":false,"type":"image","videoUrl":null}], "options": {"nav":"thumbs","loop":true,"keyboard":true,"arrows":true,"allowfullscreen":true,"showCaption":false,"width":960,"thumbwidth":180,"thumbheight":132,"height":704,"transitionduration":600,"transition":"crossfade","navarrows":true,"navtype":"slides","navdir":"horizontal","thumbmargin":2}, "fullscreen": {"nav":"thumbs","loop":true,"navdir":"horizontal","navarrows":true,"navtype":"slides","arrows":true,"showCaption":false,"transitionduration":600,"transition":"crossfade"}, "breakpoints": {"mobile":{"conditions":{"max-width":"1023px"},"options":{"options":{"nav":false}}}} ,"amGalleryConfig": { "position": "bottom" } } } }</script><script type="text/x-magento-init"> { "[data-gallery-role=gallery-placeholder]": { "Magento_ProductVideo/js/fotorama-add-video-events": { "videoData": [{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false}], "videoSettings": [{"playIfBase":"0","showRelated":"0","videoAutoRestart":"0"}], "optionsVideoData": {"3376":[],"3377":[],"3378":[]} } } }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script type="text/x-magento-init"> { "[data-role=swatch-options]": { "Magento_Swatches/js/swatch-renderer": { "jsonConfig": {"attributes":{"135":{"id":"135","code":"magento_edition","label":"Edition","options":[{"id":"4","label":"Community","products":["3376"]},{"id":"5","label":"Enterprise","products":["3377"]},{"id":"81","label":"Magento Cloud","products":["3378"]}],"position":"0"}},"template":"$<%- data.price %>","currencyFormat":"$%s","optionPrices":{"3376":{"baseOldPrice":{"amount":2529},"oldPrice":{"amount":2529},"basePrice":{"amount":2529},"finalPrice":{"amount":2529},"tierPrices":[],"msrpPrice":{"amount":0}},"3377":{"baseOldPrice":{"amount":2829},"oldPrice":{"amount":2829},"basePrice":{"amount":2829},"finalPrice":{"amount":2829},"tierPrices":[],"msrpPrice":{"amount":0}},"3378":{"baseOldPrice":{"amount":3129},"oldPrice":{"amount":3129},"basePrice":{"amount":3129},"finalPrice":{"amount":3129},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":2529},"oldPrice":{"amount":2529},"basePrice":{"amount":2529},"finalPrice":{"amount":2529}},"productId":"1634","chooseText":"Choose an Option...","images":[],"index":{"3376":{"135":"4"},"3377":{"135":"5"},"3378":{"135":"81"}},"salable":{"135":{"4":["3376"],"5":["3377"],"81":["3378"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"3376":"b2b-e-commerce-premium-solution-for-magento-2-ce","3377":"b2b-e-commerce-premium-solution-for-magento-2-ee","3378":"b2b-e-commerce-premium-solution-for-magento-2-mce"},"label_reload":"https:\/\/amasty.com\/amasty_label\/ajax\/label\/","label_category":".product-image-container, .product-item-photo, .cdz-product-top","label_product":".fotorama__stage, #amasty-main-container","original_product_id":"1634"}, "jsonSwatchConfig": {"135":{"4":{"type":"0","value":"Community","label":"Community"},"5":{"type":"0","value":"Enterprise","label":"Enterprise"},"81":{"type":"0","value":"Magento Cloud","label":"Magento Cloud"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":1,\"use_product_image_for_swatch\":0}"}}, "mediaCallback": "https\u003A\u002F\u002Famasty.com\u002Fswatches\u002Fajax\u002Fmedia\u002F", "gallerySwitchStrategy": "prepend", "jsonSwatchImageSizeConfig": {"swatchImage":{"width":30,"height":20},"swatchThumb":{"height":90,"width":110}}, "showTooltip": 1 } }, "*" : { "Magento_Swatches/js/catalog-add-to-cart": {} } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Stockstatus/js/amstockstatus": {"changeConfigurableStatus":1,"type":"product.info.options.swatches","info_block":"","display_in_dropdowns":1,"should_load_stock":true,"4":{"custom_status":"","custom_status_text":"","product_id":"3376","is_in_stock":1,"pricealert":""},"5":{"custom_status":"","custom_status_text":"","product_id":"3377","is_in_stock":1,"pricealert":""},"81":{"custom_status":"","custom_status_text":"","product_id":"3378","is_in_stock":1,"pricealert":""}} } }</script><script> require([ 'jquery', ], function($){ //<![CDATA[ $.extend(true, $, { calendarConfig: { dayNames: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], dayNamesMin: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], monthNames: ["January","February","March","April","May","June","July","August","September","October","November","December"], monthNamesShort: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], infoTitle: 'About\u0020the\u0020calendar', firstDay: 1, closeText: 'Close', currentText: 'Go\u0020Today', prevText: 'Previous', nextText: 'Next', weekHeader: 'WK', timeText: 'Time', hourText: 'Hour', minuteText: 'Minute', dateFormat: "D, d M yy", // $.datepicker.RFC_2822 showOn: 'button', showAnim: '', changeMonth: true, changeYear: true, buttonImageOnly: null, buttonImage: null, showButtonPanel: true, showWeek: true, timeFormat: '', showTime: false, showHour: false, showMinute: false } }); enUS = {"m":{"wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}}; // en_US locale reference //]]> });</script><script type="text/x-magento-init"> { "#instant-purchase": { "Magento_Ui/js/core/app": {"components":{"instant-purchase":{"component":"Magento_InstantPurchase\/js\/view\/instant-purchase","config":{"template":"Magento_InstantPurchase\/instant-purchase","buttonText":"Instant Purchase","purchaseUrl":"https:\/\/amasty.com\/instantpurchase\/button\/placeOrder\/"}}}} } }</script><script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":"configurable"} } }</script><script> window.swatchesOptionsConfig = {"Year":{"ce":{"recurringPrice":["$1,519"],"finalPrice":["$2,529"],"periodSupportText":["12 months"],"isNewPricingPolicy":false},"ee":{"recurringPrice":["$1,699"],"finalPrice":["$2,829"],"periodSupportText":["12 months"],"isNewPricingPolicy":false},"mce":{"recurringPrice":["$1,879"],"finalPrice":["$3,129"],"periodSupportText":["12 months"],"isNewPricingPolicy":false}}};</script><script> require([ 'jquery', 'priceBox' ], function($){ var dataPriceBoxSelector = '[data-role="priceBox"]', dataProductIdSelector = '[data-product-id="1634"]', priceBoxes = $(dataPriceBoxSelector + dataProductIdSelector), productPopupSelector = '.amtheme-product-popup'; if (priceBoxes.closest(productPopupSelector).length) { priceBoxes = $(productPopupSelector + ' ' + dataPriceBoxSelector + dataProductIdSelector); } priceBoxes = priceBoxes.filter(function(index, elem){ return !$(elem).find('.price-from').length; }); priceBoxes.priceBox({'priceConfig': {"productId":1634,"priceFormat":{"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":2529,"adjustments":[]},"oldPrice":{"amount":2529,"adjustments":[]},"basePrice":{"amount":2529,"adjustments":[]},"finalPrice":{"amount":2529,"adjustments":[]}},"idSuffix":"_clone","tierPrices":[],"calculationAlgorithm":"TOTAL_BASE_CALCULATION","baseOldPrice":{"amount":2529,"adjustments":[]}}}); });</script><script type="text/javascript"> require(['jquery', 'Amasty_Preorder/js/product/preorder_configurable'], function($) { $widget = $.mage.amastyPreorderConfigurable({ availabilityElement: '.product-preorder-message', isAllProductsPreorder: 0, preOrderNote: 'You pay for the pre-order at a discounted price and receive the extension\'s package once it’s released', addToCartLabel: 'PRE-ORDER', map: [], currentAttributes: {"135":"Edition"}, originalNote: 'In stock' }); });</script><script>window.authenticationPopup = {"autocomplete":"off","customerRegisterUrl":"https:\/\/amasty.com\/customer\/account\/create\/","customerForgotPasswordUrl":"https:\/\/amasty.com\/customer\/account\/forgotpassword\/","baseUrl":"https:\/\/amasty.com\/","customerLoginUrl":"https:\/\/amasty.com\/customer\/ajax\/login\/"}</script><script type="text/x-magento-init"> { "#authenticationPopup": { "Magento_Ui/js/core/app": {"components":{"authenticationPopup":{"component":"Magento_Customer\/js\/view\/authentication-popup","children":{"messages":{"component":"Magento_Ui\/js\/view\/messages","displayArea":"messages"},"captcha":{"component":"Magento_Captcha\/js\/view\/checkout\/loginCaptcha","displayArea":"additional-login-form-fields","formId":"user_login","configSource":"checkout"}}}}} }, "*": { "Magento_Ui/js/block-loader": "https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002Fimages\u002Floader\u002D1.gif" } }</script><script type="text/x-magento-init"> { "*": { "Magento_Customer/js/section-config": { "sections": {"stores\/store\/switch":["*"],"stores\/store\/switchrequest":["*"],"directory\/currency\/switch":["*"],"*":["messages"],"customer\/account\/logout":["*","recently_viewed_product","recently_compared_product","persistent"],"customer\/account\/loginpost":["*"],"customer\/account\/createpost":["*"],"customer\/account\/editpost":["*"],"customer\/ajax\/login":["checkout-data","cart","captcha"],"catalog\/product_compare\/add":["compare-products"],"catalog\/product_compare\/remove":["compare-products"],"catalog\/product_compare\/clear":["compare-products"],"sales\/guest\/reorder":["cart"],"sales\/order\/reorder":["cart"],"checkout\/cart\/add":["cart","directory-data"],"checkout\/cart\/delete":["cart"],"checkout\/cart\/updatepost":["cart"],"checkout\/cart\/updateitemoptions":["cart"],"checkout\/cart\/couponpost":["cart"],"checkout\/cart\/estimatepost":["cart"],"checkout\/cart\/estimateupdatepost":["cart"],"checkout\/onepage\/saveorder":["cart","checkout-data","last-ordered-items"],"checkout\/sidebar\/removeitem":["cart"],"checkout\/sidebar\/updateitemqty":["cart"],"rest\/*\/v1\/carts\/*\/payment-information":["cart","last-ordered-items","captcha","instant-purchase"],"rest\/*\/v1\/guest-carts\/*\/payment-information":["cart","captcha"],"rest\/*\/v1\/guest-carts\/*\/selected-payment-method":["cart","checkout-data"],"rest\/*\/v1\/carts\/*\/selected-payment-method":["cart","checkout-data","instant-purchase"],"customer\/address\/*":["instant-purchase"],"customer\/account\/*":["instant-purchase"],"vault\/cards\/deleteaction":["instant-purchase"],"paypal\/express\/placeorder":["cart","checkout-data"],"paypal\/payflowexpress\/placeorder":["cart","checkout-data"],"paypal\/express\/onauthorization":["cart","checkout-data"],"persistent\/index\/unsetcookie":["persistent"],"review\/product\/post":["review"],"wishlist\/index\/add":["wishlist"],"wishlist\/index\/remove":["wishlist"],"wishlist\/index\/updateitemoptions":["wishlist"],"wishlist\/index\/update":["wishlist"],"wishlist\/index\/cart":["wishlist","cart"],"wishlist\/index\/fromcart":["wishlist","cart"],"wishlist\/index\/allcart":["wishlist","cart"],"wishlist\/shared\/allcart":["wishlist","cart"],"wishlist\/shared\/cart":["cart"],"gdpr\/customer\/anonymise":["customer"],"ammostviewed\/cart\/add":["cart","messages"],"faq\/index\/save":["faq"],"amasty_jettheme\/ajax\/addtocompare":["compare-products"],"amasty_jettheme\/ajax\/addtowishlist":["wishlist"],"amasty_cart\/cart\/post":["cart","messages","directory-data"]}, "clientSideSections": ["checkout-data","cart-data","faq_product"], "baseUrls": ["https:\/\/amasty.com\/"], "sectionNames": ["messages","customer","compare-products","last-ordered-items","cart","directory-data","captcha","instant-purchase","loggedAsCustomer","persistent","review","wishlist","faq","recently_viewed_product","recently_compared_product","product_data_storage","paypal-billing-agreement"] } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Customer/js/customer-data": { "sectionLoadUrl": "https\u003A\u002F\u002Famasty.com\u002Fcustomer\u002Fsection\u002Fload\u002F", "expirableSectionLifetime": 60, "expirableSectionNames": ["cart","persistent"], "cookieLifeTime": "31556952", "updateSessionUrl": "https\u003A\u002F\u002Famasty.com\u002Fcustomer\u002Faccount\u002FupdateSession\u002F" } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Customer/js/invalidation-processor": { "invalidationRules": { "website-rule": { "Magento_Customer/js/invalidation-rules/website-rule": { "scopeConfig": { "websiteId": "1" } } } } } } }</script><script type="text/x-magento-init"> { "body": { "pageCache": {"url":"https:\/\/amasty.com\/page_cache\/block\/render\/id\/1634\/","handles":["default","catalog_product_view","catalog_product_view_type_configurable","catalog_product_view_id_1634","catalog_product_view_sku_b2b-ecommerce-premium-suite-for-magento-2","hyva_default","hyva_catalog_product_view","hyva_catalog_product_view_type_configurable","hyva_catalog_product_view_id_1634","hyva_catalog_product_view_sku_b2b-ecommerce-premium-suite-for-magento-2","hyva_amcookiebar_popup","am_mega_menu_layout","catalog_product_view_custom_stock_status_in_stock"],"originalRequest":{"route":"catalog","controller":"product","action":"view","uri":"\/b2b-ecommerce-suite-for-magento-2.html"},"versionCookieName":"private_content_version"} } }</script><script type="text/javascript"> var $zoho = $zoho || {}; $zoho.salesiq = $zoho.salesiq || { widgetcode: "ea5ee0680c5e32cfaed3ad895e0035997af0d8f138230bae4a7829abb7fcf825", values: {}, ready: function () { $zoho.salesiq.customfield.add( { "name": "_default.name", "hint": "Enter your First and Last Name", "type": "text", "required": "true", "visibility": "both" }); $zoho.salesiq.customfield.add( { "name": "_default.email", "hint": "Your Email", "type": "text", "required": "true", "visibility": "both" }); $zoho.salesiq.visitor.name(" "); $zoho.salesiq.visitor.email(""); $zoho.salesiq.domain("amasty.com"); } }; var d = document; s = d.createElement("script"); s.type = "text/javascript"; s.id = "zsiqscript"; s.defer = true; s.src = "https://salesiq.zoho.eu/widget"; t = d.getElementsByTagName("script")[0]; setTimeout(() => { t.parentNode.insertBefore(s, t); }, 10000);</script><script type="text/x-magento-init"> { "*": { "Amasty_ZohoChat/js/liveChat": {} } }</script><script> 'use strict'; function initFormEvents188() { return { options: { classes: { disableClass: '-disabled', errorClass: '-error', errorMsgBoxClass: '.input-error-box', validInputClass: ['valid'], invalidInputClass: ['invalid', 'invalid:border-red-500'], modalTriggerClass: '[data-survey-trigger="confirmation-modal-trigger"]', groupRequireClass: '.group-required', surveyContentClass: 'data-element="form-content"' }, messages: { defaultErrorMessage: 'Please\u0020fill\u0020out\u0020this\u0020field.' }, isAjax: true, }, processSubmit: function(page, tab, event) { const form = event.detail?.form ?? event.target.closest('form'); this.checkByAdvancedValidation(form).then(() => { this.performSubmit(event); return true; }).catch(() => { return false; }); }, checkByAdvancedValidation: function (form) { return window.hyva.formValidation(form).validate(); }, performSubmit: function (event) { const formNode = event.detail?.form ?? this.getFormNode(event.target); if (this.isAjaxSubmit(formNode)) { const url = formNode.getAttribute('action'); const headers = { contentType: 'application/x-www-form-urlencoded; charset=utf-8' } const formData = new FormData(formNode); formData.set('ajax', 'true'); fetch(url, { method: 'POST', body: formData, headers: headers }).then((response) => { if (response.ok) { return response.text(); } }).then((response) => { try { const parsedResponse = JSON.parse(String(response)); if (parsedResponse.result === 'success') { window.dispatchEvent(new CustomEvent('amcform-hide-modal-188')); window.dispatchEvent(new CustomEvent('amcform-success-submitted')); formNode.reset(); formNode.querySelector('a[href="#page-1"')?.click(); } } catch (error) { const messageText = 'Unknown\u0020error\u0020occurred.\u0020Please\u0020try\u0020again\u0020later\u0020or\u0020use\u0020Contact\u0020Us\u0020link\u0020in\u0020the\u0020menu.'; window.dispatchMessages && window.dispatchMessages([{type: "warning", text: messageText}], 5000); } }).finally(() => { window.dispatchEvent(new CustomEvent("reload-customer-section-data")); window.scrollTo({ top: 0, behavior: 'smooth' }); }); } else { formNode.submit(); } }, isAjaxSubmit: function (formNode) { return this.options.isAjax && !formNode.querySelector('input[type="file"]:not([disabled])'); }, getFormNode: function (formElement) { return formElement.closest('#amform-form-188'); }, toggleOnCheckbox(el) { const checkbox = el.querySelector('input'); const isChecked = checkbox.checked; isChecked ? checkbox.removeAttribute('checked') : checkbox.setAttribute('checked', true); }, toggleDisablingClass(el, next) { if (el.classList.contains(this.options.classes.disableClass) && next) { el.classList.remove(this.options.classes.disableClass); } else if (!next) { el.classList.add(this.options.classes.disableClass); } }, pageValidation(el, tab, event) { const page = event.detail?.form ?? event.target.closest('form'); this.checkByAdvancedValidation(page).then(() => { el.parentElement.scrollIntoView({ behavior: "smooth" }); if (tab) { tab.classList.remove(this.options.classes.errorClass); } return true; }).catch(() => { event.preventDefault(); event.stopImmediatePropagation(); if (tab) { tab.classList.add(this.options.classes.errorClass); } return false; }); }, toggleErrorMessage(state, field, message) { let errorBox = field.parentElement.querySelector(this.options.classes.errorMsgBoxClass); if (!errorBox) { errorBox = field.querySelector(this.options.classes.errorMsgBoxClass); } if (errorBox) { this.switchErrorVisibility(state, errorBox, message); } }, switchErrorVisibility(state, box, message) { switch (state) { case 'show': box.innerHTML = message; box.style.display = 'block'; box.scrollIntoView({ behavior: 'smooth', block: 'start'}); break; case 'hide': box.style.display = 'none'; box.innerHTML = ''; break; } }, submitSurveyForm(element, event, page, tab) { let form = document.getElementById('amform-form-188'); let sPage = form.querySelector('[x-ref="' + page + '"]'); let sTab = form.querySelector('[x-ref="' + tab + '"]'); let isValid = this.pageValidation(sPage, sTab, event); if (!isValid) { return false; } else { element.querySelector(this.options.classes.modalTriggerClass).click() } }, showConfirmForm: function (result) { let form = document.getElementById('amform-form-188'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-188'); const relatedFields = form.querySelectorAll('[data-dependency]'); if (!relatedFields.length) { return; } relatedFields.forEach(relatedField => { const dependency = relatedField.dataset.dependency.split(','); const dependencyFields = []; dependency.forEach(dependency => { dependencyFields.push(form.querySelectorAll(`[x-ref="${dependency.trim()}"]`)); }); dependencyFields.forEach(element => { let field = element[0]; let mutationCallback = (mutationsList) => { for (const mutation of mutationsList) { if (mutation.type !== "attributes" || mutation.attributeName !== "disabled") return updateDependency(dependencyFields, relatedField); } }; let observer = new MutationObserver(mutationCallback); field.closest('.fieldset-block').addEventListener('change', () => { updateDependency(dependencyFields, relatedField) }, false); observer.observe(field, { attributes: true }) }); updateDependency(dependencyFields, relatedField); }); function canBeChecked(type) { return type === 'checkbox' || type === 'radio'; } function updateDependency(dependencyFields, relatedField) { let isVisible = true; dependencyFields.forEach(otherFieldDependency => { if (canBeChecked(otherFieldDependency[0].type) && !otherFieldDependency[0].checked || otherFieldDependency[0].type === undefined && !otherFieldDependency[0].selected || otherFieldDependency[0].disabled) { isVisible = false; } }); if (isVisible) { relatedField.style.display = 'block'; relatedField.querySelectorAll('input, select, textarea, option').forEach(input => { input.removeAttribute('disabled'); }) } else { relatedField.style.display = 'none'; relatedField.querySelectorAll('input, select, textarea, option').forEach(input => { input.setAttribute('disabled', 'disabled'); }); } } })();</script><script> (function fillFormData(formId) { const params = {"urlSession":"https:\/\/amasty.com\/amasty_customform\/form\/sessiondata\/","formId":188,"productId":"1634"}; const formData = 'form_id=' + formId + '&product_id=' + params.productId; const form = document.getElementById('amform-form-' + formId + ''); const parseXData = function (node) { try { const xDataString = (node.getAttribute('x-data') ?? '{}') .replace(/[\n ]+/g, '') .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); return JSON.parse(xDataString); } catch (e) { console.log(e); return null; } }; const updateWrapperXData = function (inputNode, inputData) { try { const inputWrapper = inputNode.closest('.fieldset-block'); const xDataObject = parseXData(inputWrapper); if (typeof xDataObject.value !== 'undefined' && xDataObject.value !== inputData) { xDataObject.value = inputData; inputWrapper.setAttribute('x-data', JSON.stringify(xDataObject)); } } catch (e) { console.error(e); } }; const getValueAsArray = function(inputData) { return ( typeof inputData === 'string' ? [inputData] : Array.isArray(inputData) ? inputData : [] ); } const checkNodesByValues = function(nodes, values, attributeName) { values.forEach(function (value) { const nodeToSetAttribute = nodes.find(node => node.getAttribute('value') === value); nodeToSetAttribute && (nodeToSetAttribute[attributeName] = true); }); } const textInputFiller = { supportedInputTypes: [ 'text', 'email', 'number', 'date', 'time' ], supportedTagNames: [ 'textarea' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')) || this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { if (typeof inputData !== 'string') { return; } inputNode.value = inputData; updateWrapperXData(inputNode, inputData); } }; const selectInputFiller = { supportedTagNames: [ 'select' ], support: function (inputNode) { return this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { const optionValues = getValueAsArray(inputData); if (optionValues.length === 0) { return; } this.clearSelectedAttribute(inputNode); checkNodesByValues(Array.from(inputNode.options), optionValues, 'selected'); updateWrapperXData(inputNode, optionValues); }, clearSelectedAttribute: function (inputNode) { Array.from(inputNode.options).forEach((option) => { option.selected = false; option.removeAttribute('selected'); }); } }; const checkableInputFiller = { supportedInputTypes: [ 'checkbox', 'radio' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')); }, fill: function (inputNode, inputData) { const inputName = inputNode.getAttribute('name'); const checkboxList = document.querySelectorAll(`input[name="${inputName}"]`); const checkboxValues = getValueAsArray(inputData); if (checkboxValues.length === 0) { return; } this.uncheck(checkboxList); checkNodesByValues(Array.from(checkboxList), checkboxValues, 'checked'); this.fillRating(inputNode, inputData); }, fillRating(inputNode, inputData) { if (!this.isRating(inputNode) || typeof inputData !== 'string') { return; } const xDataContainer = inputNode.closest('[x-data]'); if (!xDataContainer?.getAttribute('x-data').includes('clickedRatingId')) { return; } const xData = parseXData(xDataContainer); if (!xData) { return; } xData.clickedRatingId = inputData; xDataContainer.setAttribute('x-data', JSON.stringify(xData)); xDataContainer.querySelector('input:checked')?.click(); }, isRating: function(inputNode) { return inputNode.name.startsWith('rating-'); }, uncheck: function (checkboxList) { checkboxList.forEach(function (checkbox) { checkbox.checked = false; }); } }; const inputFillerPool = { excludedInputNames: [ 'form_id', 'form_key', 'is_survey' ], inputFillers: [ textInputFiller, selectInputFiller, checkableInputFiller ], fill: function (inputNode, inputData) { if (this.shouldExclude(inputNode)) { return; } for (const fillerIndex in this.inputFillers) { if (this.inputFillers[fillerIndex].support(inputNode)) { this.inputFillers[fillerIndex].fill(inputNode, inputData); inputNode.closest('.fieldset-block').dispatchEvent(new Event('change')); break; } } }, shouldExclude: function (inputNode) { return this.excludedInputNames.includes(inputNode.getAttribute('name')) || inputNode.getAttribute('type') === 'hidden'; } }; function requestData(url, body) { return new Promise((resolve, reject) => { fetch(url, { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => response.json()) .then(data => { resolve(data); }) .catch((error) => { reject(error); }); }); } requestData(params.urlSession, formData).then(data => { const formFields = data.form_fields ?? {}; const persistedInputNames = Object.keys(formFields); persistedInputNames.forEach(inputName => { const inputNode = form.querySelector(`[name^="${inputName}"]`); !!inputNode && inputFillerPool.fill(inputNode, formFields[inputName]); }); }) })(188);</script><script type="text/x-magento-init"> { "body": { "requireCookie": {"noCookieUrl":"https:\/\/amasty.com\/cookie\/index\/noCookies\/","triggers":[".action.towishlist"],"isRedirectCmsPage":true} } }</script><script type="text/x-magento-init"> { "*": { "Magento_Catalog/js/product/view/provider": { "data": {"items":{"1634":{"add_to_cart_button":{"post_data":"{\"action\":\"https:\\\/\\\/amasty.com\\\/checkout\\\/cart\\\/add\\\/uenc\\\/%25uenc%25\\\/product\\\/1634\\\/\",\"data\":{\"product\":\"1634\",\"uenc\":\"%uenc%\"}}","url":"https:\/\/amasty.com\/checkout\/cart\/add\/uenc\/%25uenc%25\/product\/1634\/","required_options":true},"add_to_compare_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/amasty.com\\\/catalog\\\/product_compare\\\/add\\\/\",\"data\":{\"product\":\"1634\",\"uenc\":\"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\"}}","required_options":null},"price_info":{"final_price":2529,"max_price":2529,"max_regular_price":2529,"minimal_regular_price":2529,"special_price":null,"minimal_price":2529,"regular_price":2529,"formatted_prices":{"final_price":"<span class=\"price\">$2,529.00<\/span>","max_price":"<span class=\"price\">$2,529.00<\/span>","minimal_price":"<span class=\"price\">$2,529.00<\/span>","max_regular_price":"<span class=\"price\">$2,529.00<\/span>","minimal_regular_price":null,"special_price":null,"regular_price":"<span class=\"price\">$2,529.00<\/span>"},"extension_attributes":{"msrp":{"msrp_price":"<span class=\"price\">$0.00<\/span>","is_applicable":"","is_shown_price_on_gesture":"","msrp_message":"","explanation_message":"Our price is lower than the manufacturer's "minimum advertised price." As a result, we cannot show you the price in catalog or the product page. <br><br> You have no obligation to purchase the product once you know the price. You can simply remove the item from your cart."},"tax_adjustments":{"final_price":2529,"max_price":2529,"max_regular_price":2529,"minimal_regular_price":2529,"special_price":2529,"minimal_price":2529,"regular_price":2529,"formatted_prices":{"final_price":"<span class=\"price\">$2,529.00<\/span>","max_price":"<span class=\"price\">$2,529.00<\/span>","minimal_price":"<span class=\"price\">$2,529.00<\/span>","max_regular_price":"<span class=\"price\">$2,529.00<\/span>","minimal_regular_price":null,"special_price":"<span class=\"price\">$2,529.00<\/span>","regular_price":"<span class=\"price\">$2,529.00<\/span>"}},"weee_attributes":[],"weee_adjustment":"<span class=\"price\">$2,529.00<\/span>"}},"images":[{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/i\/c\/icon_b2b_premium_2.png","code":"recently_viewed_products_grid_content_widget","height":485,"width":485,"label":"B2B E-commerce Premium Solution for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/i\/c\/icon_b2b_premium_2.png","code":"recently_viewed_products_list_content_widget","height":485,"width":485,"label":"B2B E-commerce Premium Solution for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/c0f736f50f461282ed263518cf9066d1\/i\/c\/icon_b2b_premium_2.png","code":"recently_viewed_products_images_names_widget","height":80,"width":80,"label":"B2B E-commerce Premium Solution for Magento 2","resized_width":80,"resized_height":80},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/i\/c\/icon_b2b_premium_2.png","code":"recently_compared_products_grid_content_widget","height":485,"width":485,"label":"B2B E-commerce Premium Solution for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/bb8e97a9ddc3d82fc043ed846d9f3d1c\/i\/c\/icon_b2b_premium_2.png","code":"recently_compared_products_list_content_widget","height":485,"width":485,"label":"B2B E-commerce Premium Solution for Magento 2","resized_width":485,"resized_height":485},{"url":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/c0f736f50f461282ed263518cf9066d1\/i\/c\/icon_b2b_premium_2.png","code":"recently_compared_products_images_names_widget","height":80,"width":80,"label":"B2B E-commerce Premium Solution for Magento 2","resized_width":80,"resized_height":80}],"url":"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html","id":1634,"name":"B2B E-commerce Premium Solution for Magento 2","type":"configurable","is_salable":"1","store_id":1,"currency_code":"USD","extension_attributes":{"review_html":" ","wishlist_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/amasty.com\\\/wishlist\\\/index\\\/add\\\/\",\"data\":{\"product\":1634,\"uenc\":\"aHR0cHM6Ly9hbWFzdHkuY29tL2IyYi1lY29tbWVyY2Utc3VpdGUtZm9yLW1hZ2VudG8tMi5odG1s\"}}","required_options":null}},"is_available":true}},"store":"1","currency":"USD","productCurrentScope":"website"} } } }</script><script> 'use strict'; function amReviews() { return Object.assign({ reviewSelectors: { customerReviewList: '#reviews' }, eventListeners: { ['@amreviews-filter.window'](event) { this.filterReviews(event.detail.url); } }, /** * @param {string} url * @returns {void} */ filterReviews: function (url) { fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => { return response.ok ? response.text() : Promise.reject(`${response.status} ${response.statusText}`); }).then(result => { !!result && hyva.replaceDomElement(this.reviewSelectors.customerReviewList, result); this.$nextTick(() => { this.scrollToReviewsBlock(); }) }).catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) }, /** * @returns {void} */ scrollToReviewsBlock: function () { document.querySelector(this.reviewSelectors.customerReviewList).scrollIntoView({ behavior: 'smooth', block: 'start' }); } }, typeof amReviewCommentsHandler === 'function' ? amReviewCommentsHandler() : {} ); }</script><script type="text/x-magento-init"> { ".amshopby-option-link [data-amshopby-js='brand-tooltip']": { "amShopbyTooltipInit": { "additionalClasses": "-no-double", "position": { "my": "left bottom-10", "at": "left top", "collision": "flipfit flip" }, "selector": "a" } } }</script><script> function ratingData_67be52ca8b8d2() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8b8d2() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8bd7f() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8bd7f() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8c105() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8c105() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8c2fd() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8c2fd() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8c4f1() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8c4f1() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8d52d() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8d52d() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8d8e1() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8d8e1() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8ddc6() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8ddc6() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8dffe() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8dffe() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8e685() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8e685() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8e9ff() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8e9ff() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8ec2e() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188,8196], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8ec2e() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script> function ratingData_67be52ca8ee0c() { const starLabel = 'star'; const starsLabel = 'stars'; return { votingBehavior: 'average', hideZeroRating: 1, itemsIds: [1137,1141,1135,1140,1136,1139,1142,6936,7586,7647,8188,8196,8197], dataUrl: 'https://amasty.com/faq/index/rating/', isLoaded: false, isLogin: false, items: [], isLoading: false, stars: [1,2,3,4,5], storageKey: 'amfaq-average-rating-storage', votedQuestions: {}, hovered: 0, isSocialLoginEnabled: true, isGuestRatingAllowed: false, isSocialPopupEnabled: true, ratingInit_67be52ca8ee0c() { this.getVoted(); if (this.votingBehavior === 'average') { this.votedQuestions = this.localGet() ?? {}; } }, setFAQRating: "mutation rateAmFaqQuestion(\n $id: Int!,\n $type: AmFaqVoteTypeEnum!,\n $value: String!,\n $revote: Boolean,\n $oldValue: String\n ) {rateAmFaqQuestion(\n input: {\n question_id: $id,\n vote_type: $type,\n value: $value,\n is_revote: $revote,\n old_value: $oldValue\n }) {\n error\n message\n }}", getVoted() { let itemsURL = '', item = this.itemsIds[this.itemsIds.length - 1]; if (itemsURL) {itemsURL += '&'}; itemsURL += 'items[]=' + item; fetch(this.dataUrl + '?'+itemsURL+'&isAjax=true', { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest' } } ) .then(response => response.json()) .then(result => { this.items = result }) .catch(this.displayError) .finally(() => { this.isLoaded = true; }); }, getTotalRating(positive, negative) { return parseInt(positive) + Math.abs(parseInt(negative)); }, isShowZeroRating(rating) { return !(this.hideZeroRating && rating === 0); }, useQuery(query, variables) { return fetch(BASE_URL + 'graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Store': 'default' }, credentials: 'include', body: JSON.stringify({query: query, variables: variables}), }).then(response => response.json()).catch(this.displayError) }, setRating(id, value, revote = false) { let oldValue = this.localGet()?.[id]; if (parseInt(oldValue) === parseInt(value)) { return; } this.isLoading = true; this.useQuery( this.setFAQRating, { id: id, type: this.votingBehavior.toUpperCase(), value: value, revote: revote, oldValue: oldValue ? oldValue : '' } ).then(response => { const result = response?.data?.rateAmFaqQuestion; if (result.error) { /* if enabled social login module*/ if (this.isSocialLoginEnabled && !this.isGuestRatingAllowed && !this.isLogin && this.isSocialPopupEnabled) { window.dispatchEvent(new CustomEvent('hyva-modal-show', { detail: { dialog: 'social-login-popup' } })); return; } this.showMessage('error', result.message); return; } if (result.message) { this.showMessage('success', result.message); } this.items.map(item => { if (item.id === id) { item.isVoted = true; if (this.votingBehavior === 'average') { this.recalculateAverage(id, value); } else { if (value) { item.isPositiveVoted = true; item.positiveRating = ++item.positiveRating; } else { item.isPositiveVoted = false; item.negativeRating = ++item.negativeRating; } } } }); }).finally(() => { this.isLoading = false; }); }, setStarRating(id, value) { this.setRating(id, value, this.checkVoted(id)); }, recalculateAverage(id, value) { this.items.map(item => { if (item.id === id) { let total = parseInt(item.total), average = parseFloat(item.average), newAverage = (average * total + parseInt(value)) / (total + 1); if (this.votedQuestions && this.votedQuestions[id] !== undefined) { const oldValue = this.votedQuestions[id]; newAverage = total > 1 ? (average * total - parseInt(oldValue) + parseInt(value)) / total : parseInt(value); } else { item.total++; } this.votedQuestions[id] = value; this.localSet(this.votedQuestions); item.average = newAverage; } }) }, checkVoted(id) { return this.votedQuestions && this.votedQuestions[id] !== undefined; }, localSet(value) { window.localStorage.setItem(this.storageKey, JSON.stringify(value)); }, localGet() { return JSON.parse(window.localStorage.getItem(this.storageKey)); }, displayError(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { this.showMessage( 'error', 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.' ); } }, showMessage(type, message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: type, text: message}], 10000 ); }, getStarsLabel(index) { return index > 1 ? index + ' ' + starsLabel : index + ' ' + starLabel; }, eventListeners: { ['@private-content-loaded.window'](event) { const faqData = event.detail.data?.faq; if (faqData.name || faqData.email) { this.isLogin = true; } } } } }</script><script type="application/ld+json"> {"@context":"http:\/\/schema.org","@type":"FAQPage","speakable":{"@type":"SpeakableSpecification","xPath":["\/html\/head\/title"]},"mainEntity":[{"@type":"Question","position":"-116","name":"Are Amasty extensions compatible with all themes and extensions by other vendors?","text":"Are Amasty extensions compatible with all themes and extensions by other vendors?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Amasty extensions work with all plugins we issued and with most 3rd-party plugins. If you come across a Magento 2 compatibility issue with any third-party module, we\u2019ll definitely try to help you.\r\nIf you face any technical issues, please create a ticket ...","dateCreated":"2025-02-25 18:43:54","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/are-amasty-extensions-compatible-with-all-themes-and-extensions-by-other-vendors.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-115","name":"Will I get free support and updates?","text":"Will I get free support and updates?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Product updates\u00a0for extensions purchased before Feb 1, 2022With the transition to product subscriptions, you will receive product updates for all extensions purchased before Feb 1, 2022 throughout the entire grace period \u2014 up to Aug 1, 2022.\u00a0If you want ...","dateCreated":"2025-02-25 20:43:59","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/will-i-get-free-support-and-updates.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-114","name":"Do you have the installation service in magento?","text":"Do you have the installation service in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Yes, you can use installation and configuration services that are available as the part of Pro and Premium add-ons for your product subscriptions.Please note that this installation service doesn\u2019t include uninstallation. So, if you need to completely uninstall...","dateCreated":"2025-02-25 13:47:32","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-have-amasty-extension-installed.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-113","name":"Can I request a free trial?","text":"Can I request a free trial?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Amasty doesn\u2019t provide any trials of Magento extensions.\r\nThere's one exception: Amasty extensions are provided for testing or demo purposes to our official Platinum Partners as a part of the \u201caccess to Amasty extensions for testing purposes with Composer...","dateCreated":"2025-02-25 17:47:13","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-request-a-free-trial.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-112","name":"Can I test an Amasty extension on a staging site before transferring it to a live one in magento?","text":"Can I test an Amasty extension on a staging site before transferring it to a live one in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Yes, you can install any Amasty extension on a test site and configure all the settings there before doing it on your live store.","dateCreated":"2025-02-25 12:28:48","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-test-an-amasty-extension-on-a-staging-site.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-111","name":"How can I get a refund?","text":"How can I get a refund?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Amasty offers to its Customers a thirty (30) day money-back guarantee for the Software. In case the acquired extension didn\u2019t meet your expectations, our support team is always ready to help you. Fees for support subscriptions and any services provided by...","dateCreated":"2025-02-25 11:01:23","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-get-a-refund-if-an-extension-doesn-t-suit-me.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-110","name":"How can I receive a discount?","text":"How can I receive a discount?","author":"Guest","dateCreated":"2021-09-04 07:37:00","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" We are now working at a loyalty program for our customers that is supposed to bring even greater benefits in the long term.\u00a0While it\u2019s not out yet, you can look through these Special Offers. New discounts and specials are added every month.\u00a0To stay updated...","dateCreated":"2025-02-21 16:28:24","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/will-i-get-any-other-benefits.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-109","name":"How to update a Magento 2 Amasty extension?","text":"How to update a Magento 2 Amasty extension?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Updating an Amasty extension follows the same process as installing a module.\u00a0To update a single extension:Run the following command to update a specific Amasty extension:composer update amasty\/<module-name>\u00a0To update multiple extensions:You can update...","dateCreated":"2025-02-25 21:39:56","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/upgrade-magento-2-extension.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-108","name":"If I need additional features to be added to an Amasty extension, how can I ask for it in magento?","text":"If I need additional features to be added to an Amasty extension, how can I ask for it in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"To leave your feature request, log in to your customer account and open the Products tab. Then, scroll down to the bottom of the page, and leave your feature request in the following form:\r\n\r\nAs soon as you send your request, it is considered by our Product...","dateCreated":"2025-02-14 13:22:29","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-to-ask-more-features-to-be-added-to-my-extension.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-106","name":"Magento 2 Amasty extensions installation","text":"Magento 2 Amasty extensions installation","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" Amasty extension packages include all necessary files, setup guides, and a license agreement, with some even offering example import files to simplify the process.Important: Since January 14, 2025, all Amasty extensions will only be available for installation...","dateCreated":"2025-02-25 22:14:31","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-to-install-magento-2-extension.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-104","name":"How can I prolong support in magento?","text":"How can I prolong support in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":" If you have an active support service subscription, it grants you access to support services for all products purchased before Feb,1 as long as your subscription is active.\u00a0Alternatively, support services are only available as the part of a product subscription...","dateCreated":"2025-02-19 10:23:59","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-can-i-prolong-support.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-101","name":"Can I change the EE extension to CE for free in magento?","text":"Can I change the EE extension to CE for free in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Usually, no, you can’t exchange modules. Please, contact our support managers and they’ll consider your case individually.\r\n→ Learn more about our special offers","dateCreated":"2025-02-25 15:23:34","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/can-i-change-the-ee-extension-to-ce-for-free.html","upvoteCount":"0","downvoteCount":"0"}},{"@type":"Question","position":"-100","name":"How can I get a discount to re-purchase plugins in magento?","text":"How can I get a discount to re-purchase plugins in magento?","author":"Guest","dateCreated":"2021-09-04 07:37:01","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Usually, we don’t provide any discounts. But you can contact us, and we’ll consider your case individually.\r\n→ Learn more about our special offers","dateCreated":"2025-02-24 23:03:07","author":"Admin","url":"https:\/\/amasty.com\/knowledge-base\/how-can-i-get-a-discount-to-re-purchase-plugins.html","upvoteCount":"0","downvoteCount":"0"}}]}</script><script> function productURLData_67be52ca92fb2() { const COOKIE_EXPIRES = 1; const COOKIE_NAME = 'faq_product'; const COOKIE_VALUE = window.location.href; return { initialize() { hyva.setCookie(COOKIE_NAME, COOKIE_VALUE, COOKIE_EXPIRES); }, } }</script><script> 'use strict'; function amSummaryDetails() { return { isVisibleDetails: false, filterReviewUrl: 'https://amasty.com/review/product/listAjax/amreview_sort/newest/stars/STAR/id/1634/', eventListeners: { ['@toggle-state-summary-details.window'](event) { this.isVisibleDetails = event.detail.isVisibleDetails; }, ['@am-stars-filter-clear.window'](event) { const productUrl = event.detail.productUrl; !!productUrl && this.dispatchFilterEvent(productUrl); }, }, /** * @param {int} stars * @returns {void} */ applyFilterByStars: function (stars) { this.dispatchFilterEvent(this.filterReviewUrl.replace('STAR', stars.toString())); }, /** * @param {string} url * @returns {void} */ dispatchFilterEvent: function (url) { window.dispatchEvent(new CustomEvent('amreviews-filter', { detail: { url: url }})); } } }</script><script> function initAddReviewClickBtn() { return { isLoggedIn: false, receiveCustomerData(privateData) { this.isLoggedIn = this.isCustomerLoggedIn(privateData); }, showAuthPopup() { if (!this.isLoggedIn) { const browserStorage = hyva.getBrowserStorage(); if (browserStorage) { browserStorage.removeItem('data_social_login_redirect'); } window.dispatchEvent( new CustomEvent('hyva-modal-show', {detail: {dialog: "social-login-popup"}}) ) } else { window.dispatchEvent( new CustomEvent('hyva-modal-show', {detail: {dialog: "form-review-popup"}}) ) } }, ...AmsiteUtils(), ...AmAuthPopup() } }</script><script> function initAmReviewForm_67be52ca94755() { return { displayNickname: false, displayErrorMessage: false, errorMessages: [], errors: 0, hovered: 0, clickedRatingId: 0, nickname: null, summary: null, ratings: [], review: null, url: 'https://amasty.com/review/product/post/', /** * @returns void */ submitForm: function () { this.validate() .then(() => { const $form = this.$root; if (this.errors === 0) { this.placeReview(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); }, /** * @returns void */ placeReview: function () { const form = this.$root; const body = new FormData(form); const productId = form.dataset.productId ?? 0; const url = new URL(this.url + `id/${productId}/`) body.append('form_key', hyva.getFormKey()); this.displayErrorMessage = false; fetch(url.toString(), { method: 'POST', headers: Object.assign({ 'X-Requested-With': 'XMLHttpRequest' }), body: body }).then(response => { if (!response.redirected) { return response.json(); } let data = {}; if (response.status !== 200 || !response.ok) { data.errors = true; } this.setMessage(data); }).then(() => { this.hide(); form.reset(); this.clickedRatingId = 0; window.scrollTo({ top: 0, behavior: 'smooth' }); window.dispatchMessages([ { type: "success", text: "You submitted your review for moderation." } ], 5000); }); }, /** * @param {Object} data * @returns void */ setMessage: function(data) { if (data.errors) { this.displayErrorMessage = true; this.hide(); window.scrollTo({ top: 0, behavior: 'smooth' }); window.dispatchMessages([ { type: "error", text: "Submitting your review failed, please try again" } ], 5000); } } } }</script><script> 'use strict'; function initFormEvents9() { return { options: { classes: { disableClass: '-disabled', errorClass: '-error', errorMsgBoxClass: '.input-error-box', validInputClass: ['valid'], invalidInputClass: ['invalid', 'invalid:border-red-500'], modalTriggerClass: '[data-survey-trigger="confirmation-modal-trigger"]', groupRequireClass: '.group-required', surveyContentClass: 'data-element="form-content"' }, messages: { defaultErrorMessage: 'Please\u0020fill\u0020out\u0020this\u0020field.' }, isAjax: true, }, processSubmit: function(page, tab, event) { const form = event.detail?.form ?? event.target.closest('form'); this.checkByAdvancedValidation(form).then(() => { this.performSubmit(event); return true; }).catch(() => { return false; }); }, checkByAdvancedValidation: function (form) { return window.hyva.formValidation(form).validate(); }, performSubmit: function (event) { const formNode = event.detail?.form ?? this.getFormNode(event.target); if (this.isAjaxSubmit(formNode)) { const url = formNode.getAttribute('action'); const headers = { contentType: 'application/x-www-form-urlencoded; charset=utf-8' } const formData = new FormData(formNode); formData.set('ajax', 'true'); fetch(url, { method: 'POST', body: formData, headers: headers }).then((response) => { if (response.ok) { return response.text(); } }).then((response) => { try { const parsedResponse = JSON.parse(String(response)); if (parsedResponse.result === 'success') { window.dispatchEvent(new CustomEvent('amcform-hide-modal-9')); window.dispatchEvent(new CustomEvent('amcform-success-submitted')); formNode.reset(); formNode.querySelector('a[href="#page-1"')?.click(); } } catch (error) { const messageText = 'Unknown\u0020error\u0020occurred.\u0020Please\u0020try\u0020again\u0020later\u0020or\u0020use\u0020Contact\u0020Us\u0020link\u0020in\u0020the\u0020menu.'; window.dispatchMessages && window.dispatchMessages([{type: "warning", text: messageText}], 5000); } }).finally(() => { window.dispatchEvent(new CustomEvent("reload-customer-section-data")); window.scrollTo({ top: 0, behavior: 'smooth' }); }); } else { formNode.submit(); } }, isAjaxSubmit: function (formNode) { return this.options.isAjax && !formNode.querySelector('input[type="file"]:not([disabled])'); }, getFormNode: function (formElement) { return formElement.closest('#amform-form-9'); }, toggleOnCheckbox(el) { const checkbox = el.querySelector('input'); const isChecked = checkbox.checked; isChecked ? checkbox.removeAttribute('checked') : checkbox.setAttribute('checked', true); }, toggleDisablingClass(el, next) { if (el.classList.contains(this.options.classes.disableClass) && next) { el.classList.remove(this.options.classes.disableClass); } else if (!next) { el.classList.add(this.options.classes.disableClass); } }, pageValidation(el, tab, event) { const page = event.detail?.form ?? event.target.closest('form'); this.checkByAdvancedValidation(page).then(() => { el.parentElement.scrollIntoView({ behavior: "smooth" }); if (tab) { tab.classList.remove(this.options.classes.errorClass); } return true; }).catch(() => { event.preventDefault(); event.stopImmediatePropagation(); if (tab) { tab.classList.add(this.options.classes.errorClass); } return false; }); }, toggleErrorMessage(state, field, message) { let errorBox = field.parentElement.querySelector(this.options.classes.errorMsgBoxClass); if (!errorBox) { errorBox = field.querySelector(this.options.classes.errorMsgBoxClass); } if (errorBox) { this.switchErrorVisibility(state, errorBox, message); } }, switchErrorVisibility(state, box, message) { switch (state) { case 'show': box.innerHTML = message; box.style.display = 'block'; box.scrollIntoView({ behavior: 'smooth', block: 'start'}); break; case 'hide': box.style.display = 'none'; box.innerHTML = ''; break; } }, submitSurveyForm(element, event, page, tab) { let form = document.getElementById('amform-form-9'); let sPage = form.querySelector('[x-ref="' + page + '"]'); let sTab = form.querySelector('[x-ref="' + tab + '"]'); let isValid = this.pageValidation(sPage, sTab, event); if (!isValid) { return false; } else { element.querySelector(this.options.classes.modalTriggerClass).click() } }, showConfirmForm: function (result) { let form = document.getElementById('amform-form-9'); if (result) { form.submit(); } } } }</script><script> (function setDependencies() { const form = document.getElementById('amform-form-9'); const relatedFields = form.querySelectorAll('[data-dependency]'); if (!relatedFields.length) { return; } relatedFields.forEach(relatedField => { const dependency = relatedField.dataset.dependency.split(','); const dependencyFields = []; dependency.forEach(dependency => { dependencyFields.push(form.querySelectorAll(`[x-ref="${dependency.trim()}"]`)); }); dependencyFields.forEach(element => { let field = element[0]; let mutationCallback = (mutationsList) => { for (const mutation of mutationsList) { if (mutation.type !== "attributes" || mutation.attributeName !== "disabled") return updateDependency(dependencyFields, relatedField); } }; let observer = new MutationObserver(mutationCallback); field.closest('.fieldset-block').addEventListener('change', () => { updateDependency(dependencyFields, relatedField) }, false); observer.observe(field, { attributes: true }) }); updateDependency(dependencyFields, relatedField); }); function canBeChecked(type) { return type === 'checkbox' || type === 'radio'; } function updateDependency(dependencyFields, relatedField) { let isVisible = true; dependencyFields.forEach(otherFieldDependency => { if (canBeChecked(otherFieldDependency[0].type) && !otherFieldDependency[0].checked || otherFieldDependency[0].type === undefined && !otherFieldDependency[0].selected || otherFieldDependency[0].disabled) { isVisible = false; } }); if (isVisible) { relatedField.style.display = 'block'; relatedField.querySelectorAll('input, select, textarea, option').forEach(input => { input.removeAttribute('disabled'); }) } else { relatedField.style.display = 'none'; relatedField.querySelectorAll('input, select, textarea, option').forEach(input => { input.setAttribute('disabled', 'disabled'); }); } } })();</script><script> (function fillFormData(formId) { const params = {"urlSession":"https:\/\/amasty.com\/amasty_customform\/form\/sessiondata\/","formId":9,"productId":"1634"}; const formData = 'form_id=' + formId + '&product_id=' + params.productId; const form = document.getElementById('amform-form-' + formId + ''); const parseXData = function (node) { try { const xDataString = (node.getAttribute('x-data') ?? '{}') .replace(/[\n ]+/g, '') .replace(/(\w+):/g, '"$1":') .replace(/'/g, '"'); return JSON.parse(xDataString); } catch (e) { console.log(e); return null; } }; const updateWrapperXData = function (inputNode, inputData) { try { const inputWrapper = inputNode.closest('.fieldset-block'); const xDataObject = parseXData(inputWrapper); if (typeof xDataObject.value !== 'undefined' && xDataObject.value !== inputData) { xDataObject.value = inputData; inputWrapper.setAttribute('x-data', JSON.stringify(xDataObject)); } } catch (e) { console.error(e); } }; const getValueAsArray = function(inputData) { return ( typeof inputData === 'string' ? [inputData] : Array.isArray(inputData) ? inputData : [] ); } const checkNodesByValues = function(nodes, values, attributeName) { values.forEach(function (value) { const nodeToSetAttribute = nodes.find(node => node.getAttribute('value') === value); nodeToSetAttribute && (nodeToSetAttribute[attributeName] = true); }); } const textInputFiller = { supportedInputTypes: [ 'text', 'email', 'number', 'date', 'time' ], supportedTagNames: [ 'textarea' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')) || this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { if (typeof inputData !== 'string') { return; } inputNode.value = inputData; updateWrapperXData(inputNode, inputData); } }; const selectInputFiller = { supportedTagNames: [ 'select' ], support: function (inputNode) { return this.supportedTagNames.includes(inputNode.tagName.toLowerCase()); }, fill: function (inputNode, inputData) { const optionValues = getValueAsArray(inputData); if (optionValues.length === 0) { return; } this.clearSelectedAttribute(inputNode); checkNodesByValues(Array.from(inputNode.options), optionValues, 'selected'); updateWrapperXData(inputNode, optionValues); }, clearSelectedAttribute: function (inputNode) { Array.from(inputNode.options).forEach((option) => { option.selected = false; option.removeAttribute('selected'); }); } }; const checkableInputFiller = { supportedInputTypes: [ 'checkbox', 'radio' ], support: function (inputNode) { return this.supportedInputTypes.includes(inputNode.getAttribute('type')); }, fill: function (inputNode, inputData) { const inputName = inputNode.getAttribute('name'); const checkboxList = document.querySelectorAll(`input[name="${inputName}"]`); const checkboxValues = getValueAsArray(inputData); if (checkboxValues.length === 0) { return; } this.uncheck(checkboxList); checkNodesByValues(Array.from(checkboxList), checkboxValues, 'checked'); this.fillRating(inputNode, inputData); }, fillRating(inputNode, inputData) { if (!this.isRating(inputNode) || typeof inputData !== 'string') { return; } const xDataContainer = inputNode.closest('[x-data]'); if (!xDataContainer?.getAttribute('x-data').includes('clickedRatingId')) { return; } const xData = parseXData(xDataContainer); if (!xData) { return; } xData.clickedRatingId = inputData; xDataContainer.setAttribute('x-data', JSON.stringify(xData)); xDataContainer.querySelector('input:checked')?.click(); }, isRating: function(inputNode) { return inputNode.name.startsWith('rating-'); }, uncheck: function (checkboxList) { checkboxList.forEach(function (checkbox) { checkbox.checked = false; }); } }; const inputFillerPool = { excludedInputNames: [ 'form_id', 'form_key', 'is_survey' ], inputFillers: [ textInputFiller, selectInputFiller, checkableInputFiller ], fill: function (inputNode, inputData) { if (this.shouldExclude(inputNode)) { return; } for (const fillerIndex in this.inputFillers) { if (this.inputFillers[fillerIndex].support(inputNode)) { this.inputFillers[fillerIndex].fill(inputNode, inputData); inputNode.closest('.fieldset-block').dispatchEvent(new Event('change')); break; } } }, shouldExclude: function (inputNode) { return this.excludedInputNames.includes(inputNode.getAttribute('name')) || inputNode.getAttribute('type') === 'hidden'; } }; function requestData(url, body) { return new Promise((resolve, reject) => { fetch(url, { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest' } }).then(response => response.json()) .then(data => { resolve(data); }) .catch((error) => { reject(error); }); }); } requestData(params.urlSession, formData).then(data => { const formFields = data.form_fields ?? {}; const persistedInputNames = Object.keys(formFields); persistedInputNames.forEach(inputName => { const inputNode = form.querySelector(`[name^="${inputName}"]`); !!inputNode && inputFillerPool.fill(inputNode, formFields[inputName]); }); }) })(9);</script><script> function amCustomTabs() { const hash = window.location.hash; const selectors = { tabItem: '.am-tabs-item' } return { isChangelogVersion: '2.1.0', isMobile: false, tabs: [{"name":"amcustomtabs_tabs_1","title":"Description","alias":"description","isActive":false},{"name":"amcustomtabs_tabs_4","title":"FAQ","alias":"faq","isActive":false},{"name":"amcustomtabs_tabs_3","title":"Reviews","alias":"reviews","isActive":false},{"name":"amcustomtabs_tabs_15","title":"Customization","alias":"customization","isActive":false},{"name":"amcustomtabs_tabs_16","title":"Change Log","alias":"changelog","isActive":false}], isAccordion: false, isOpenAllTabs: false, initAmCustomTabs() { this.checkIsMobileResolution(); this.prepareTabs(); this.$nextTick(() => { this.checkOpenTabs(); }) }, prepareTabs() { if (this.tabs.some(tab => tab.alias === 'product-overview-tab')) { this.removeTab('description'); } }, removeTab(tabName) { this.tabs = this.tabs.filter(tab => tab.alias !== tabName); }, setActiveTabs(currentName) { const anchor = document.getElementById(currentName).closest(selectors.tabItem); const behavior = this.isAccordion ? 'instant' : 'smooth'; for (let tab of this.tabs) { if (this.isOpenAllTabs) { this._toggleCollapsible(currentName, tab); } else { if (tab.isActive && this.isMobile) { tab.isActive = false; } else { tab.isActive = currentName === tab.name; } } } if (!this.isOpenAllTabs && this.isMobile) { this._scrollToElement(anchor, behavior); } }, isActiveTab(currentName) { for (let tab of this.tabs) { if (currentName === tab.name) { return tab.isActive; } } }, checkIsMobileResolution() { this.isMobile = window.matchMedia('(max-width: 768px)').matches; }, checkOpenTabs() { if (hash) { this._activatePreselectedTab(); } else { if (!this.isOpenAllTabs) { this.tabs[0].isActive = true; } else { this._setActiveAllTabs(); } } }, _activatePreselectedTab() { let tabAnchor; for (let tab of this.tabs) { if (hash === '#' + tab.alias) { tabAnchor = document.getElementById(tab.name).closest(selectors.tabItem); tab.isActive = true; this._dispatchTabCollapsedEvent(tabAnchor, 'smooth'); } } if (this.isOpenAllTabs) { this._setActiveAllTabs(); this._dispatchTabCollapsedEvent(tabAnchor, 'smooth'); } }, _dispatchTabCollapsedEvent(data) { window.dispatchEvent(new CustomEvent('amtabs-collapsed', { detail: { element: data, } })); }, _setActiveAllTabs() { for (let tab of this.tabs) { tab.isActive = true; } }, _toggleCollapsible(currentName, tab) { if (currentName === tab.name) { tab.isActive = !tab.isActive; } }, _scrollToElement(el, behavior) { setTimeout(() => { const stickyProductBlock = document.querySelector('.amsticky-cart-block.-amsticky-cart-active'); const additionalHeight = stickyProductBlock ? stickyProductBlock.offsetHeight : 0; window.scrollTo(({ top: el.getBoundingClientRect().top + window.scrollY - additionalHeight, behavior: behavior ? behavior : "auto" })) },50); }, eventListeners: { ['@amtabs-collapsed.window'](event) { this._scrollToElement(event.detail.element, 'smooth'); } } } }</script><script type="text/x-magento-init"> { "[data-amtheme-js=ajax-tocart]": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script type="text/x-magento-init"> { ".block.related": { "amRelatedAnalytics": { "viewUrl": "https://amasty.com/ammostviewed/analytics/view/", "blockId": 6, "relatedProducts": [620,491,504,538,555,564], "clickUrl": "https://amasty.com/ammostviewed/analytics/click/" } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : {"793":{"configurable":{"entity":"793","swatchOpt":".swatch-opt-793","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"793":{"135":"Edition"}},"isAllProductsPreorder":0}},"1571":{"configurable":{"entity":"1571","swatchOpt":".swatch-opt-1571","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"1571":{"135":"Edition"}},"isAllProductsPreorder":0}},"945":{"configurable":{"entity":"945","swatchOpt":".swatch-opt-945","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"945":{"135":"Edition"}},"isAllProductsPreorder":0}},"622":{"configurable":{"entity":"622","swatchOpt":".swatch-opt-622","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"622":{"135":"Edition"}},"isAllProductsPreorder":0}},"620":{"configurable":{"entity":"620","swatchOpt":".swatch-opt-620","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"620":{"135":"Edition"}},"isAllProductsPreorder":0}},"491":{"configurable":{"entity":"491","swatchOpt":".swatch-opt-491","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"491":{"135":"Edition"}},"isAllProductsPreorder":0}},"504":{"configurable":{"entity":"504","swatchOpt":".swatch-opt-504","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"504":{"135":"Edition"}},"isAllProductsPreorder":0}},"538":{"configurable":{"entity":"538","swatchOpt":".swatch-opt-538","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"538":{"135":"Edition"}},"isAllProductsPreorder":0}},"555":{"configurable":{"entity":"555","swatchOpt":".swatch-opt-555","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"555":{"135":"Edition"}},"isAllProductsPreorder":0}},"564":{"configurable":{"entity":"564","swatchOpt":".swatch-opt-564","addToCartLabel":"PRE-ORDER","map":[],"currentAttributes":{"564":{"135":"Edition"}},"isAllProductsPreorder":0}}} } } }</script><script type="text/x-magento-init"> { "[data-amtheme-js=ajax-tocart]": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_Preorder/js/product/preorder_list": { "jsonConfig" : [] } } }</script><script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "storage-manager": { "component": "Magento_Catalog/js/storage-manager", "appendTo": "", "storagesConfiguration" : {"recently_viewed_product":{"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"recently_compared_product":{"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"product_data_storage":{"updateRequestConfig":{"url":"https:\/\/amasty.com\/rest\/default\/V1\/products-render-info"},"requestConfig":{"syncUrl":"https:\/\/amasty.com\/catalog\/product\/frontend_action_synchronize\/"},"allowToSendRequest":null}} } } } } }</script><script type="text/x-magento-init"> { "*": { "Amasty_AdminCustomerSections/js/adminCustomerSections": {} } }</script><script> 'use strict'; function initAmGdprPolicyPopup() { return { /** * @typedef PolicyData * @property {string} policyVersion * @property {boolean} show * @property {string} title * @property{boolean} versionChanged * @property {boolean} hideClose * @property {boolean} action */ eventListeners: { ['@amgdpr-accept-policy']() { if (this.consentId) { window.dispatchEvent(new CustomEvent('amgdpr-consent-accepted', {detail: this.consentId})); this.consentId = undefined; this.hide('amgdpr-policy-popup'); } else { this.acceptPolicy(); } }, ['@amgdpr-show-policy.window'](event) { this.consentId = event.detail; this.fetchPolicyContent().then(() => { this.$nextTick(() => { this.show('amgdpr-policy-popup'); }); }); }, ['@amgdpr-close-policy']() { this.hide('amgdpr-policy-popup'); } }, textUrl: 'https://amasty.com/gdpr/policy/policytext/', acceptUrl: 'https://amasty.com/gdpr/policy/accept/', popupDataUrl: 'https://amasty.com/gdpr/policy/popupData/', notificationText: 'We would like to inform you that our Privacy Policy has been amended.Please, read and accept the new terms.', showOnPageLoad: '', /** * @type PolicyData */ policyData: { policyVersion: '', show: false, title: '', versionChanged: false, hideClose: false, action: true }, title: '', policyText: '', consentId: undefined, initGdprPopup: function () { this.fetchPolicyData().then(() => { if ((this.showOnPageLoad && this.policyData.show) || this.policyData.versionChanged) { this.fetchPolicyContent().then(() => { this.$nextTick(() => { this.show('amgdpr-policy-popup'); }); }); } }); }, /** * @returns {Promise} */ fetchPolicyData: function () { return fetch(this.popupDataUrl) .then(response => response.json()) .then((data) => { this.policyData = {...data} }) .catch(error => this.dispatchErrorMessage(error)); }, /** * @returns {Promise} */ fetchPolicyContent: function () { this.title = ''; this.policyText = ''; const params = !!this.consentId ? '?' + new URLSearchParams({consent_id: this.consentId}) : '' return fetch(this.textUrl + params) .then(response => response.json()) .then(policyContent => { this.title = policyContent.title; this.policyText = policyContent.content; }).catch(error => this.dispatchErrorMessage(error)); }, /** * @returns {void} */ acceptPolicy: function () { window.dispatchEvent(new Event('amgdpr-loading-start')); const body = new URLSearchParams({form_key: hyva.getFormKey(), ...this.policyData}); const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; fetch(this.acceptUrl, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => response.json()) .then(data => { if (data.error) { this.dispatchErrorMessage(data.message) } else { this.notificationText = ''; this.hide('amgdpr-policy-popup'); } }) .catch(error => this.dispatchErrorMessage(error)) .finally(() => window.dispatchEvent(new Event('amgdpr-loading-stop'))); }, /** * @param {string} message * @returns {void} */ dispatchErrorMessage: function (message) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: message } ]); }, /** * @returns {void} */ focusAcceptButton: function () { this.$refs['amgdpr-accept-policy']?.focus(); }, /** * @returns {void} */ focusCloseButton: function () { this.$refs['amgdpr-close-policy']?.focus(); } } }</script><script>require(['magezonBuilder']);</script><script>require(['Magezon_PageBuilder/js/common']);</script><script> (() => { function src_default(Alpine) { Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { let evaluate = evaluateLater(expression); let options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers) }; let observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting === (value === "leave")) return; evaluate(); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); cleanup(() => { observer.disconnect(); }); }); } function getThreshhold(modifiers) { if (modifiers.includes("full")) return 0.99; if (modifiers.includes("half")) return 0.5; if (!modifiers.includes("threshold")) return 0; let threshold = modifiers[modifiers.indexOf("threshold") + 1]; if (threshold === "100") return 1; if (threshold === "0") return 0; return Number(`.${threshold}`); } function getLengthValue(rawValue) { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); return match ? match[1] + (match[2] || "px") : void 0; } function getRootMargin(modifiers) { const key = "margin"; const fallback = "0px 0px 0px 0px"; const index = modifiers.indexOf(key); if (index === -1) return fallback; let values = []; for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || "")); } values = values.filter((v) => v !== void 0); return values.length ? values.join(" ").trim() : fallback; } document.addEventListener("alpine:init", () => { window.Alpine.plugin(src_default); }); })();</script><script type="module" src="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Hyva_Theme/js/alpine3.min.js" defer crossorigin ></script><script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); hyva.alpineInitialized(hyva.initMessages) }( window.hyva = window.hyva || {} ));</script><script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Please enable LocalStorage in your browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; const skipSetDomain = true; const days = false; hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) } const cookieVersion = hyva.getCookie(private_content_version_key); const storageVersion = browserStorage.getItem(private_content_version_key); if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { isInvalid = true; } const privateContentExpires = browserStorage.getItem(private_content_expire_key); if (privateContentExpires && new Date(privateContentExpires) < new Date()) { browserStorage.removeItem(private_content_key); } if (isInvalid) { fetchPrivateContent([]); } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); if ( privateContent && privateContentExpires && privateContent.cart && privateContent.customer ) { dispatchPrivateContent(privateContent); } else { fetchPrivateContent([]); } } else { dispatchPrivateContent({}); } } catch (error) { console.warn('Error retrieving Private Content:', error); } } hyva.alpineInitialized(loadSectionData) window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { delete oldSectionData['checkout-data']; } const newSectionData = Object.assign(oldSectionData, data); dispatchPrivateContent(newSectionData); if (newSectionData.messages && newSectionData.messages.messages ) { newSectionData.messages.messages = []; } browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); browserStorage.setItem(private_content_expire_key, expiresAt); const newCookieVersion = hyva.getCookie(private_content_version_key); browserStorage.setItem(private_content_version_key, newCookieVersion); hyva.setCookie( section_data_ids_key, JSON.stringify( Object.keys(data).reduce((sectionDataIds, sectionKey) => { sectionDataIds[sectionKey] = data[sectionKey]['data_id']; return sectionDataIds; }, {}) ), false, true ); } catch (error) { console.warn("Couldn't store privateContent", error); } } } ); } }</script><script> (() => { document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); })()</script><script> (events => { const dispatchUserInteractionEvent = () => { events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) window.dispatchEvent(new Event('init-external-scripts')) }; events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])</script><script> (function () { const reviewComponent = document.querySelector('[x-data="initReviewForm()"]'); reviewComponent?.setAttribute( 'x-init', `$watch( 'errorMessages', errorMessages => { errorMessages?.length > 0 && window.dispatchEvent(new CustomEvent("reload-customer-section-data")) } );${reviewComponent.getAttribute('x-init') || ''}` ); })();</script><script> 'use strict'; (function () { const modals = []; const excludedFromFocusTrapping = new Set(); function loadInertPolyfill(callback) { if (window.hyva.modal.disableInertPolyfill) { callback && callback(); } else { const polyfill = document.createElement('script'); polyfill.src = 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002FHyva_Theme\u002Fjs\u002Fwicg\u002Dinert\u002D3.1.1\u002Finert.min.js'; callback && polyfill.addEventListener('load', callback); const firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(polyfill, firstScriptTag); } } let isInertPolyfillLoaded = 0; function setSiblingsInert(dialogElement, toState) { if (isInertPolyfillLoaded === 0) { isInertPolyfillLoaded = 1; loadInertPolyfill(() => { isInertPolyfillLoaded = 2; setSiblingsInert(dialogElement, toState) }) return; } if (isInertPolyfillLoaded === 1) { return; } let el = dialogElement; while (el && (el = el.parentElement)) { if (el === document.body || el.parentElement === null) continue; Array.from(el.parentElement.children).forEach(sibling => { if (sibling !== el) { sibling.inert = toState; } }) } (function setChildrenInert(el, toState) { if (el) { el.inert = toState; Array.from(el.children).forEach(child => setChildrenInert(child, toState)); } })(findParentWithOverlaySpread(dialogElement), ! toState) excludedFromFocusTrapping.forEach(selector => { Array.from(document.querySelectorAll(selector)).map(el => el.inert = false); }) } function findParentWithOverlaySpread(el) { while (el && (el = el.parentElement)) { if (el === document.body || el.parentElement === null) continue; if (el.hasAttribute('x-spread') && el.getAttribute('x-spread').indexOf('overlay(') !== -1) { return el; } } } function freeFocusFromModalTrap(modal) { const dialogElement = modal.instance.$refs[modal.name]; isOverlayDisabled(dialogElement) || modal.instance.$nextTick(() => setSiblingsInert(dialogElement, false)); } function trapFocusInNextModalWithOverlay() { for (let idx = modals.length -1; idx >= 0; idx--) { const nextOnStack = modals[idx]; const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; if (! isOverlayDisabled(nextDialogElement)) { nextOnStack.instance.$nextTick(() => setSiblingsInert(nextDialogElement, true)); break; } } } function focusables(dialogElement) { const selector = 'a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; return Array.from(dialogElement.querySelectorAll(selector)) .filter(el => !el.hasAttribute('disabled')); } function firstVisible(elements) { const a = Array.from(elements); for (let i = 0; i < a.length; i++) { if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; } return null; } function isInViewport(element) { const rect = element && element.getBoundingClientRect(); return rect && rect.top >= 0 && rect.left >= 0 && rect.right <= window.innerWidth && rect.bottom <= window.innerHeight; } function setFocusAfterTransition(dialogElement, duration) { window.setTimeout(() => { const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || focusables(dialogElement)[0] || null; focusElement && isInViewport(focusElement) && focusElement.focus(); }, duration + 1); } function determineTrigger($refs, dialog, trigger) { if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target && dialog.target.focus) { return dialog.target; } if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target && trigger.target.focus) { return trigger.target; } if (typeof trigger === 'string') { try { return $refs[trigger] || document.querySelector(trigger) } catch (e) {} } if (trigger instanceof Element) { return trigger; } return null; } function isOverlayDisabled(dialog) { return dialog && dialog.hasAttribute('x-no-overlay') } function areRemainingModalsWithoutOverlay(modals) { const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); return overflowDisabled.length === modals.length; } window.hyva.modal = function(options) { const config = Object.assign({ dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', transitionEnterStart: 'opacity-0', transitionEnterEnd: 'opacity-100', transitionLeave: 'transition ease-in duration-300', transitionLeaveStart: 'opacity-100', transitionLeaveEnd: 'opacity-0', }, options); let lastHide = 0; return { opened: {}, show(dialog, trigger) { const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); const name = typeof dialog === 'string' ? dialog : config.dialog; const dialogElement = this.$refs[name]; if (! dialogElement) { return; } const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); dialogElement.scrollTop = 0; if (this.opened[name]) { return; } if (focusTargetAfterHide) { focusTargetAfterHide.setAttribute('aria-expanded', 'true'); } this.opened[name] = true; useOverlay && this.$nextTick(() => setSiblingsInert(dialogElement, true)); setFocusAfterTransition(dialogElement, config.duration); const frame = {name, instance: this, focusTarget: focusTargetAfterHide, time: Date.now()}; modals.push(frame); if (useOverlay) { document.body.classList.add('overflow-hidden'); } return new Promise(resolve => frame.resolve = resolve); }, cancel() { this.hide(false); }, ok() { this.hide(true); }, hide(value) { if (Date.now() - lastHide < config.duration) { return; } lastHide = Date.now(); const modal = modals.pop() || {}; const name = modal.name; this.opened[name] = false; freeFocusFromModalTrap(modal) trapFocusInNextModalWithOverlay(); const nextFocusAfterHide = modal.focusTarget; nextFocusAfterHide && setTimeout(() => { nextFocusAfterHide.setAttribute('aria-expanded', 'false'); nextFocusAfterHide.focus() }, config.duration); if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { document.body.classList.remove('overflow-hidden'); } modal.resolve(value); }, overlay(dialog) { const name = typeof dialog === 'string' ? dialog : config.dialog; return { ['x-show']() { return this.opened[name] }, ['x-transition:enter']: config.transitionEnter, ['x-transition:enter-start']: config.transitionEnterStart, ['x-transition:enter-end']: config.transitionEnterEnd, ['x-transition:leave']: config.transitionLeave, ['x-transition:leave-start']: config.transitionLeaveStart, ['x-transition:leave-end']: config.transitionLeaveEnd, ['@hyva-modal-show.window'](event) { event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) } }; } }; } window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] window.hyva.modal.pop = function () { if (modals.length > 0) { const modal = modals[modals.length -1]; modal.instance.hide(); } } window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { typeof selectors === 'string' || selectors instanceof String ? excludedFromFocusTrapping.add(selectors) : selectors.map(selector => excludedFromFocusTrapping.add(selector)); } window.hyva.modal.eventListeners = { keydown: event => { if (event.key === 'Escape') { window.hyva.modal.pop(); } }, click: event => { if (modals.length > 0) { const modal = modals[modals.length -1]; const dialog = modal.instance.$refs[modal.name]; if (modal.time + 50 < Date.now() && ! isOverlayDisabled(dialog) && ! dialog.contains(event.target)) { modal.instance.hide(); } } } }; document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); document.addEventListener('click', window.hyva.modal.eventListeners.click); })();</script><script> (function () { 'use strict'; const storageName = 'AmastyCookieGroups'; !!hyva.amStorage && hyva.amStorage.create(storageName, { /** * @type {{ * checked: boolean, * cookies: {description: string, lifetime: number|null, name: string, provider: string, type: string}[], * description: string, * groupId: string|number, * isEssential: boolean, * name: string * }[]} name */ groupData: [], cookiePolicy: undefined, lastUpdate: undefined, /** * @returns {string|number[]} */ getEssentialGroupIds: function () { return this.groupData.reduce(function (essentialGroupIds, group) { if (group.isEssential) { essentialGroupIds.push(group.groupId) } return essentialGroupIds; }, []); }, /** * @returns {string|number[]} */ getCheckedGroupIds: function () { return this.groupData.reduce(function (checkedGroupIds, group) { if (group.checked) { checkedGroupIds.push(group.groupId); } return checkedGroupIds; }, []); }, /** * @param {string} cookieName * @returns {boolean} */ isCookieEssential: function (cookieName) { const allEssentialCookies = this.getEssentialCookies(); return !!allEssentialCookies.find(cookie => cookie.name === cookieName); }, /** * @returns {array} */ getEssentialCookies: function () { return this.groupData .filter(group => group.isEssential) .map(group => group.cookies) .flat(); }, /** * @returns {boolean} */ hasGroupData: function () { return !!this.groupData.length; }, /** * @param {string} cookieName * @param {string} pattern * @returns {boolean} */ isEssentialByPattern: function (cookieName, pattern) { const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern); return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern))); }, /** * @param {string} pattern * @return {Array} */ getEssentialCookiesPattern: function (pattern) { return this.getCookiesByPattern(pattern, this.getEssentialCookies()); }, /** * @param {string} pattern * @param {Array|undefined} cookies * @return {Array} */ getCookiesByPattern: function (pattern, cookies) { if (typeof cookie === 'undefined') { cookies = this.getAllCookies(); } return cookies .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim()) .filter((cookie) => cookie.match(pattern) !== null); }, /** * @returns {array} */ getDisallowedCookies: function () { const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? ''); if (!disallowedCookie) { return []; } return disallowedCookie.split(','); }, /** * @returns {string} */ getCookiePattern: function (pattern) { return `^${pattern.replaceAll('*', '.*')}$`; }, /** * @returns {array} */ getAllCookies: function () { return document.cookie.split(';'); }, /** * @param {boolean} setAcceptance * @returns {Promise} */ updateGroupData: function (setAcceptance = false) { const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`; return fetch(cookieFetchUrl, { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest' }, body: new URLSearchParams({ allowed: hyva.getCookie('amcookie_allowed'), restriction: hyva.getCookie('amcookie_policy_restriction') }) }).then(response => { if (response.ok) { return response.json(); } return Promise.reject(`${response.status} ${response.statusText}`); }).then(data => { this.cookiePolicy = data.cookiePolicy ?? 'allowed'; this.lastUpdate = data.lastUpdate ?? 0; this.groupData = [...data.groupData]; hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10); if (setAcceptance) { amastyCookieManager.setLastCookieAcceptance(this.lastUpdate); } return data; }).catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'))); } }); })();</script><script> (function (amastyCookieManager) { 'use strict'; amastyCookieManager.pattern = '{(?<cookiePattern>.*)}'; amastyCookieManager.getAmastyCookieGroupStorage = function () { return hyva?.amStorage?.getStorage('AmastyCookieGroups') ?? {}; }; amastyCookieManager.deleteDisallowedCookie = function () { const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; disallowedCookies.forEach((name) => { const pattern = name.match(this.pattern); if (!!pattern && !!amastyCookieGroupStorage) { const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? ''; amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => { this.deleteNotEssentialCookie(cookieName); }); } else { this.deleteNotEssentialCookie(name); } }); }; amastyCookieManager.isCookieAllowed = function (cookieName) { const allowedGroups = hyva.getCookie('amcookie_allowed'); const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? []; const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed'; const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName); const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern); if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) { return true; } return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName)); }; amastyCookieManager.isCookieDisallowed = function (cookieName) { const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; return disallowedCookies.some((cookie) => { const pattern = cookie.match(this.pattern); return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern)); }) || disallowedCookies.indexOf(cookieName) !== -1; }; amastyCookieManager.processManageableCookies = function () { let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]'); cookieScripts.forEach((elem) => { if (this.isChecked(elem.dataset['amcookie-groupid'])) { let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript'); elem.remove(); document.body.appendChild(elClone); } }); }; amastyCookieManager.deleteNotEssentialCookie = function (cookieName) { if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) { hyva.setCookie(cookieName, '', -1, true); } }; amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) { localStorage.setItem('am-last-cookie-acceptance', lastUpdate); }; window.addEventListener('amasty-cookie-group-updated', () => { amastyCookieManager.deleteDisallowedCookie(); }); window.addEventListener('private-content-loaded', () => { amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie(); }); }(window.amastyCookieManager = window.amastyCookieManager || {}));</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-accept', (event) => { const groups = event.detail; const url = `${BASE_URL}amcookie/cookie/savegroups`; const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; const body = new URLSearchParams({ form_key: hyva.getFormKey() }); groups.length && groups.map(groupId => body.append('groups[]', groupId)); fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => { if (response.ok) { return response.json(); } return Promise.reject(`${response.status} ${response.statusText}`); }) .then(data => { if (data.success) { !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(true); } }) .catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) .finally(() => { amastyCookieManager.processManageableCookies(); window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish')); window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')); setTimeout(() => { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }, 100); }); }); })();</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-allow', () => { const url = `${BASE_URL}amcookie/cookie/allow`; const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; const body = new URLSearchParams({ form_key: hyva.getFormKey() }); fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) .then(response => { if (response.ok) { return response; } return Promise.reject(`${response.status} ${response.statusText}`); }) .then(() => { !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(true); }) .catch(error => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ { type: "error", text: error } ]); }) .finally(() => { amastyCookieManager.processManageableCookies(); window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish')); setTimeout(() => { window.dispatchEvent(new CustomEvent('reload-customer-section-data')); }, 100); }); }); })();</script><script> (function () { 'use strict'; window.addEventListener('cookiebar-action-settings', () => { window.dispatchEvent(new Event('open-am-cookie-bar-settings')); }); })();</script><script> window.addEventListener('init-fancybox', () => { if (!!window.Fancybox) { return; } const script = document.createElement('script'); script.src = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_AdvancedReviewHyva/vendor/fancybox/fancybox.min.js'; script.async = true; document.body.appendChild(script); script.onload = () => { window.dispatchEvent(new CustomEvent('fancyboxLoaded', {})); } const styles = document.createElement('link'); styles.rel = 'stylesheet'; styles.href = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_AdvancedReviewHyva/vendor/fancybox/fancybox.min.css'; document.head.appendChild(styles); }, { once: true, passive: true }); window.addEventListener('fancyboxLoaded', () => { Fancybox.bind('[data-fancybox="gallery"]', { Thumbs : false }); });</script><script> 'use strict'; function initParentContainerProcessor() { const selectors = { labelContainer: '.amasty-label-container', galleryImg: '#gallery img:not(.amasty-label-image)' } return { /** * @param {AmlabelComponent} label * @return {void} */ process: function (label) { this.moveLabelToParent(label); this.setParentStyles(label); }, /** * @param {AmlabelComponent} label * @return {void} */ moveLabelToParent: function (label) { const newParent = this.getNewParent(label); if (!newParent) { return; } const wrapperElement = newParent.querySelector(label.wrapperClass); label.parent = newParent; if (wrapperElement && !wrapperElement.isSameNode(label.element)) { this.insertLabelByPriority(label, wrapperElement); } else { newParent.prepend(label.element); } }, /** * @param {AmlabelComponent} label * @return {HTMLElement|null} */ getNewParent: function (label) { let newParent = label.element.closest(label.config.path) || this.findPreviousNodeExcludingScriptsAndDifferentLabels(label.element)?.querySelector(label.config.path) || label.parent.querySelector(label.config.path); if (!newParent && label.config.move !== 1 && label.config.mode === 'prod') { newParent = document.querySelector(selectors.galleryImg)?.parentElement; } return newParent; }, /** * @param {HTMLElement} element * @return {HTMLElement|null} */ findPreviousNodeExcludingScriptsAndDifferentLabels: function (element) { const previousElement = element?.previousElementSibling; if (!previousElement) { return null; } if (previousElement?.tagName !== 'SCRIPT' && !previousElement?.className?.includes?.('amlabel-position-wrapper') ) { return previousElement; } return this.findPreviousNodeExcludingScriptsAndDifferentLabels(previousElement); }, /** * @param {AmlabelComponent} label * @param {HTMLElement} wrapperElement * @return {void} */ insertLabelByPriority: function (label, wrapperElement) { const labelContainers = wrapperElement.querySelectorAll(selectors.labelContainer); const currentLabelOrder = label.labelContainer.dataset.amlabelOrder; let insertAfterContainer = null; labelContainers.forEach(labelContainer => { if (labelContainer.dataset.amlabelOrder < currentLabelOrder) { insertAfterContainer = labelContainer; } }); insertAfterContainer === null ? wrapperElement.prepend(label.labelContainer) : insertAfterContainer.after(label.labelContainer); label.element.remove(); label.element = wrapperElement; }, /** * @param {AmlabelComponent} label * @return {void} */ setParentStyles: function (label) { /* required for child position absolute */ !(label.parent.style.position === 'absolute') && (label.parent.style.position = 'relative'); !label.parent.style.width && label.parent.classList.add('w-fit-content'); !label.parent.style.marginLeft && label.parent.classList.add('ml-auto'); !label.parent.style.marginRight && label.parent.classList.add('mr-auto'); }, } }</script><script> 'use strict'; function initLabelItemProcessor() { /** * @typedef {Object} AmlabelComponent * * @property {HTMLElement} element Label wrapper element * @property {HTMLElement} parent Element where label should be placed * @property {boolean} initialized Is label initialized * @property {string} wrapperClass Dynamic class for label wrapper to place multiple labels properly by position * @property {HTMLElement} labelContainer Container for label text image and tooltip * @property {Config} config Label Configuration * @property {Object} parentContainerProcessor * @property {Object} labelItemProcessor */ /** * @typedef {Object} AmLabelConfig * * @property {0|1} alignment Labels Alignment config value (0 - Horizontal| 1 - Vertical) * @property {number} label Label Id * @property {number} margin Margin between labels config value * @property {('cat'|'prod')} mode Label mode * @property {number} move * @property {number} order Label order * @property {string} path The css selector to which label should place * @property {string} position Label position * @property {string} product Product Id * @property {string} redirect_url * @property {string} size Label size * @property {{ * backgroundColor: string, * color: string, * content: string, * status: 1|2|3 * }} tooltip */ return { /** * @param {AmlabelComponent} label * @return {void} */ process: function(label) { this.setLabelSize(label); this.setLinkProps(label); }, /** * @param {AmlabelComponent} label * @return {void} */ setLabelSize: function (label) { if (!label.config.size) { return; } label.labelContainer.style.width = label.parent.offsetWidth * label.config.size / 100 + 'px'; }, /** * * @param {Object} $event * @param {HTMLElement} tooltipNode */ placeTooltip: function($event, tooltipNode) { const labelNode = $event.target; const labelNodeRect = labelNode.getBoundingClientRect(); tooltipNode.style.bottom = (window.innerHeight - labelNodeRect.top) + 'px'; tooltipNode.style.left = (labelNodeRect.left + labelNode.offsetWidth / 2 ) + 'px'; }, /** * @param {AmlabelComponent} label * @return {void} */ setLinkProps: function (label) { !!label.config.redirect_url && label.labelContainer.classList.add('-link', 'cursor-pointer'); }, /** * @param {Object} $event Click event * @param {string} redirectUrl */ openLink: function($event, redirectUrl) { if (redirectUrl.length === 0) { return; } $event.preventDefault(); window.open(redirectUrl, '_blank'); } } }</script><script> (function () { 'use strict'; const observedEvent = 'amlabel-swatch-product-changed'; const selectors = { swatchOptions: 'div[x-data^=initConfigurable][x-data*=Options]', addToCartFormOnListing: 'form.product_addtocart_form', galleryImage: '#gallery img:not(.amasty-label-image)', labelWrapper: '.amlabel-position-wrapper' } /** * @return {void} */ const injectLabelObserver = function () { const swatches = document.querySelectorAll(selectors.swatchOptions); swatches.forEach(swatch => { const isListing = !!swatch.closest(selectors.addToCartFormOnListing); const injectedDispatch = `$dispatch('${observedEvent}', ` + `{productIndex: productIndex, element: $el, optionConfig: optionConfig, isListing: ${isListing ? 1 : 0}})`; let mutatedInitAttribute = swatch.getAttribute('x-init'); mutatedInitAttribute += `; $watch('productIndex', (productIndex) => { ${injectedDispatch} });`; swatch.setAttribute('x-init', mutatedInitAttribute); }); } /** * @param {{ * productIndex: number, * element: HTMLElement, * optionConfig: Object, * isListing: 0|1 * }} payload * @return {void} */ const updateLabel = function ({detail: payload}) { const {productIndex, element, optionConfig, isListing} = payload; if (!productIndex) { return; } const reloadUrl = optionConfig.label_reload; const headers = { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }; const body = new URLSearchParams({ product_ids: productIndex, in_product_list: isListing }); const labelContainerSelector = isListing ? optionConfig.label_category : optionConfig.label_product; fetch(`${reloadUrl}?${body.toString()}`, {headers: headers, method: 'GET'}).then((response) => { if (response.ok) { return response.json(); } }).then((result) => { const labelHtml = result.labels && result.labels[productIndex]; let labelContainer = findClosest(element, labelContainerSelector); if (labelContainer === null && isListing === 0) { labelContainer = document.querySelector(selectors.galleryImage)?.parentElement; } if (!!labelContainer) { !!labelHtml ? replaceLabels(labelContainer, labelHtml) : clearLabelWrapper(labelContainer); } }).catch((error) => { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: 'error', text: error }], 5000 ); }); } /** * We use approach from hyva.replaceDomElement method to replace labels and init components * * @param {HTMLElement} labelContainer * @param {string} labelHtml * @return {void} */ function replaceLabels(labelContainer, labelHtml) { const parser = new DOMParser(); const doc = parser.parseFromString(labelHtml, 'text/html'); const nodes = doc.querySelectorAll(selectors.labelWrapper); if (!nodes) { return; } clearLabelWrapper(labelContainer); const tmpScripts = doc.getElementsByTagName('script'); if (tmpScripts.length > 0) { const scripts = [...tmpScripts]; scripts.forEach(script => { let scriptNode = document.createElement('script'); scriptNode.innerHTML = script.innerHTML; document.head.appendChild(scriptNode); script.parentNode.removeChild(script); }); } labelContainer.append(...nodes); } /** * @param {HTMLElement} labelContainer * @return {void} */ function clearLabelWrapper(labelContainer) { labelContainer.querySelectorAll(selectors.labelWrapper).forEach(wrapper => wrapper.remove()); } /** * @param {HTMLElement} currentElement * @param {string} selector * @return {HTMLElement|null} */ function findClosest(currentElement, selector) { const maxDepth = 3; let counter = 0; let closest = null; while (currentElement.parentNode && closest === null && counter < maxDepth) { ++counter; currentElement = currentElement.parentNode; closest = currentElement.querySelector(selector); } return closest; } injectLabelObserver(); window.addEventListener(observedEvent, updateLabel); })();</script><script> (function () { 'use strict'; const selectors = { body: '.catalog-product-view', productItem: 'product-item' } window.addEventListener('alpine:init', () => { Alpine.directive('amintersect', (el, { expression }, { evaluate, cleanup }) => { const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { evaluate(expression); observer.disconnect(); } }) }, { threshold: 0.5 }); observer.observe(getElement()); cleanup(() => { observer.disconnect() }); function getElement() { return !!document.querySelector(selectors.body) ? el.parentNode : getCategoryProductBlock(el); } function getCategoryProductBlock(el) { if (el.previousElementSibling === null) { return el; } if (!el.previousElementSibling.classList.contains(selectors.productItem)) { return getCategoryProductBlock(el.previousElementSibling); } return el.previousElementSibling; } }); }); })();</script><script> 'use strict'; (() => { function _calculateStrength({elementID, valid}) { const password = document.getElementById(elementID), emailElm = document.getElementById('email_address'); let displayScore; if (!password || !password.value) { displayScore = 0; } else { if (emailElm && password.value && emailElm.value && password.value.toLowerCase() === emailElm.value.toLowerCase()) { displayScore = 1; } else { const zxcvbnScore = zxcvbn(password.value).score; displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1; } } _displayStrength(displayScore); } function _displayStrength(displayScore) { let strengthLabel = '', className; switch (displayScore) { case 0: strengthLabel = "No\u0020Password"; className = 'password-none'; break; case 1: strengthLabel = "Weak"; className = 'password-weak'; break; case 2: strengthLabel = "Medium"; className = 'password-medium'; break; case 3: strengthLabel = "Strong"; className = 'password-strong'; break; case 4: strengthLabel = "Very\u0020Strong"; className = 'password-very-strong'; break; } const meterElm = document.getElementById('password-strength-meter-container'), meterLabelElm = document.getElementById('password-strength-meter-label'); if (meterElm) { meterElm.className = ''; meterElm.classList.add(className); meterLabelElm.textContent = strengthLabel; } } let loading = false; const callbacks = []; function loadZxcvbn(cb) { callbacks.push(cb); if (loading) return; loading = true; const script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'https\u003A\u002F\u002Fcdn.amasty.com\u002Fstatic\u002Fversion1739349122\u002Ffrontend\u002FAmasty\u002FAmTheme\u002Fen_US\u002Fjs\u002Fzxcvbn.min.js'; script.async = true; script.onload = () => callbacks.forEach(cb => cb()); document.head.appendChild(script); } window.addEventListener('password-validate', function (evt) { const meterElm = document.getElementById('password-strength-meter-container'), meterLabelElm = document.getElementById('password-strength-meter-label'); if (meterElm && meterLabelElm) { if (evt.detail && evt.detail.elementID) { const cb = () => _calculateStrength(evt.detail); window.zxcvbn ? cb() : loadZxcvbn(cb) } } }); document.addEventListener('DOMContentLoaded', () => { hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function(value, options, field, context) { let counter = 0; const minCharacterSets = options.minCharacterSets !== undefined ? options.minCharacterSets : 1; if (value.match(/\d+/)) { counter++; } if (value.match(/[a-z]+/)) { counter++; } if (value.match(/[A-Z]+/)) { counter++; } if (value.match(/[^a-zA-Z0-9]+/)) { counter++; } queueMicrotask(() => { window.dispatchEvent(new CustomEvent('password-validate', { detail: { elementID: field.element.id || 'password', valid: field.state.valid }})); }); if (counter < minCharacterSets) { const missing = minCharacterSets - counter; return hyva.str('The\u0020password\u0020must\u0020include\u0020at\u0020least\u0020\u00251\u0020or\u0020more\u0020of\u003A\u0020uppercase\u0020\u0028A\u002DZ\u0029,\u0020lowercase\u0020\u0028a\u002Dz\u0029,\u0020number\u0020and\u0020symbol.', missing); } return true; }); }) })();</script><script> 'use strict'; function initAmastyCookieBar() { return { eventListeners: { ['@close-cookie-bar']() { this.hide('am-cookie-bar'); }, ['@open-cookie-bar']() { this.show('am-cookie-bar'); }, ['@amasty-cookie-group-updated.window']() { const lastUpdate = !!hyva.amStorage ? hyva.amStorage.getStorage('AmastyCookieGroups').lastUpdate : 0; if (this.isShowNotificationBar(this.firstShowProcess, lastUpdate)) { !this.opened['am-cookie-bar'] && this.show('am-cookie-bar'); } else { !!this.opened['am-cookie-bar'] && this.hide('am-cookie-bar'); } } }, firstShowProcess: '0', initBar: function () { window.isGdprCookieEnabled = true; !!hyva.amStorage && hyva.amStorage.getStorage('AmastyCookieGroups').updateGroupData(); }, /** * @param {string|number} firstShowProcess * @param {number} lastUpdate * @returns {boolean} */ isShowNotificationBar: function (firstShowProcess, lastUpdate) { return (this.isNeedFirstShow(firstShowProcess, lastUpdate) && !hyva.getCookie('amcookie_allowed') || this.isNeedShowOnUpdate(lastUpdate)); }, /** * @param {string|number} firstShowProcess * @param {number} lastUpdate * @returns {boolean} */ isNeedFirstShow: function (firstShowProcess, lastUpdate) { hyva.getBrowserStorage().setItem('amCookieBarFirstShowTime', lastUpdate); if (firstShowProcess === '0') { return true; } if (hyva.getBrowserStorage().getItem('amCookieBarFirstShow') !== '1') { hyva.getBrowserStorage().setItem('amCookieBarFirstShow', '1'); return true; } return false; }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowOnUpdate: function (lastUpdate) { if (!lastUpdate) { return false; } return this.isNeedShowAfterLastVisit(lastUpdate) || this.isNeedShowAfterLastAccept(lastUpdate); }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowAfterLastVisit: function (lastUpdate) { let needToShowAfterLastVisit = lastUpdate > hyva.getBrowserStorage().getItem('amCookieBarFirstShowTime'); if (needToShowAfterLastVisit) { hyva.getBrowserStorage().setItem('amCookieBarFirstShow', null); hyva.setCookie('amcookie_allowed', '', -1, true); } return needToShowAfterLastVisit; }, /** * @param {number} lastUpdate * @returns {boolean} */ isNeedShowAfterLastAccept: function (lastUpdate) { let needToShowAfterLastAccept = false; if (hyva.getBrowserStorage().getItem('am-last-cookie-acceptance')) { needToShowAfterLastAccept = lastUpdate > hyva.getBrowserStorage().getItem('am-last-cookie-acceptance'); } return needToShowAfterLastAccept; }, }; }</script><script> 'use strict'; function initCookieGroupInfo_67be52cad3a26() { return { group: null, eventListeners: { ['@popup-close-am-cookie-group-info.window']() { this.hide('popup-am-cookie-group-info'); }, ['@popup-open-am-cookie-group-info.window'](event) { this.group = event.detail; if (!!this.group) { /* If modal have big cookies list this can lead to trigger hide event in hyva.modal.eventListeners.click, so we should wait till this.group is reassigned */ this.$nextTick(() => this.show('popup-am-cookie-group-info')); } } } } }</script><script> 'use strict'; function initCookieBarSettings() { return { eventListeners: { ['@close-am-cookie-bar-settings.window']() { !!this.opened['am-cookie-bar-settings'] && this.hide('am-cookie-bar-settings'); }, ['@open-am-cookie-bar-settings.window']() { !this.opened['am-cookie-bar-settings'] && this.show('am-cookie-bar-settings'); }, ['@cookiebar-action-accept-finish.window']() { !!this.opened['am-cookie-bar-settings'] && this.hide('am-cookie-bar-settings'); } }, focusDoneButton: function () { this.$refs['ambar-settings-done']?.focus(); }, focusCloseButton: function () { this.$refs['ambar-settings-close']?.focus(); } } }</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/amasty.com\/","name":"Home"}}]}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/amasty.com\/","name":"Amasty","potentialAction":{"@type":"SearchAction","target":"https:\/\/amasty.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/amasty.com\/","name":"Amasty","logo":"https:\/\/cdn.amasty.com\/static\/version1700640514\/frontend\/Amasty\/AmastyTheme\/en_US\/images\/logo.svg","description":"Amasty is a leading provider of feature-rich Magento extensions, robust e-commerce solutions and all-round e-commerce IT services. An official Adobe partner, Amasty has been continuously growing its vast catalog of 300+ powerful Magento extensions since 2009. Amasty\u2019s Improved Layered Navigation has been installed on over 15.3K stores, solidifying its position as a leader in the Magento market....","contactPoint":[{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"technical support"},{"@type":"ContactPoint","telephone":"+1-347-897-9078","contactType":"customer service"}],"address":{"addressCountry":"Cyprus","postalCode":"2407","addressRegion":"Egkomi","addressLocality":"Nicosia","streetAddress":"73 Metochiou"},"sameAs":["https:\/\/www.facebook.com\/Amasty.Ltd\/","https:\/\/twitter.com\/AmastyTeam","https:\/\/www.instagram.com\/amastypeople\/","https:\/\/www.youtube.com\/user\/AmastyTeam","https:\/\/www.linkedin.com\/company\/amasty","https:\/\/www.pinterest.com\/amastybusiness\/"]}</script><script type="text/x-magento-init"> { "nav.navigation": { "amMenu": {} }, "[data-amtheme-js='form-minisearch']": { "amSearch": {} }, "[data-amtheme-js='backtotop-wrap']": { "backTop": {} } }</script><script type="text/x-magento-init"> { ".products-grid.grid, .products-list.list": { "amsiteBehaviorProductItem": {} }, "[data-role=vertical-screenshot-link], .faq-screenshot-thumb, .amblog-content img.size-full": { "amsiteOpenImageFancybox": {} }, "[btn-fancybox-popup]": { "amsiteOpenHtmlFancybox": {} }, ".swiper-container:not(.lazy-swiper)": { "amsiteMainSwiper": {} }, "[data-role=vertical-screenshots]": { "amsiteVerticalSwiper": {} }, "*": { "amsiteFishText": {} } }</script><script type="text/x-magento-init"> { ".mgz-block-content [data-role=tocart-form], #product_addtocart_form, #ajax-product_addtocart_form": { "amAjaxCart": { "actionUrl": "https://amasty.com/amasty_jettheme/ajax/addToCart/", "classes":{ "addToCartButtonDisable": "disabled -show-spinner" } } } }</script><script> var amsiteGlobalPriceFormat = {"pattern":"$%s","precision":0,"requiredPrecision":0,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":true};</script><script> 'use strict'; window.addEventListener('DOMContentLoaded', () => { (function() { hyva.formValidation.addRule('required', (value, options, field, context) => { const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, msg = 'This\u0020is\u0020a\u0020required\u0020field'; if (el.type === 'radio' || el.type === 'checkbox') { return (value === undefined || value.length === 0) ? msg : true; } el.setAttribute('required', ''); el.checkValidity(); return el.validity.valueMissing ? msg : true; }) hyva.formValidation.addRule('email', (value, options, field, context) => { const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; if (value.length > 0 && !rule.test(value)) { return 'Please\u0020enter\u0020a\u0020valid\u0020email'; } return true; }) hyva.formValidation.addRule('minlength', (value, options, field, context) => { const n = Number(options) if (value.length > 0 && value.length < n) { return n === 1 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') : hyva.strf('This\u0020text\u0020length\u0020should\u0020be\u0020more\u0020than\u0020\u00250\u0020characters', options) } return true; }) hyva.formValidation.addRule('validate-not-only-special', (value, options, field, context) => { const test = /^[ \t[\]\\$&+,:;=?@#|'<>{}".^*()%!-]+$/.test(value); if (test) { return 'This\u0020field\u0020can\u0027t\u0020contain\u0020special\u0020characters\u0020only'; } return true; }) hyva.formValidation.addRule('validate-domain-url', (value, options, field, context) => { const test = value.length === 0 || /^((https?:\/\/)?(www\.)?((?!www\.)[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$)(:(\d+))?\/?/i.test(value); if (test) { return true; } return 'Please\u0020enter\u0020a\u0020valid\u0020domain.\u0020Ex.\u003A\u0020storename.com'; }) function createTextInputFrom(el) { const text = document.createElement('INPUT'); text.type = 'text'; text.value = el.value; return text; } })(); })</script><script> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })();</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Product","name":"B2B E-commerce Premium Solution for Magento 2","description":"\r\n\r\n\r\n\r\n\r\nTransform your e-commerce business with the powerful all-in-one B2B solution, crafted for the unique requirements of today's B2B markets. Fully aligned with Adobe Commerce B2B, this solution includes a broad array of additional features, helping your business quickly adapt to changing e-commerce trends and efficiently manage both B2B and B2C operations. ","image":"https:\/\/cdn.amasty.com\/media\/catalog\/product\/cache\/8b14a410c096e2fc1a81f19ab33fad4c\/i\/c\/icon_b2b_premium_2.png","offers":[{"@type":"Offer","priceCurrency":"USD","price":2529,"availability":"https:\/\/schema.org\/InStock","itemCondition":"https:\/\/schema.org\/NewCondition","seller":{"@type":"Organization","name":"Amasty Store"},"url":"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html","sku":"b2b-ecommerce-premium-suite-for-magento-2","mpn":"b2b-ecommerce-premium-suite-for-magento-2"}],"url":"https:\/\/amasty.com\/b2b-ecommerce-suite-for-magento-2.html","aggregateRating":[],"review":[],"sku":"b2b-ecommerce-premium-suite-for-magento-2","mpn":"b2b-ecommerce-premium-suite-for-magento-2"}</script><script type="text/x-magento-init"> { "*": { "amsiteAsyncLoadCss": { "cssFileUrl": "https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/source/bundle-module/product-page/bundle-async-load.min.css" } } }</script><script> const AmAuthPopupReloadContent = function () { const customerMenuSelector = '\u0023customer\u002Dmenu\u0020\u007E\u0020nav'; return { contentUpdaters: [], initContentUpdaters() { window.addEventListener('amsl-register-content-updater', (event) => { event.stopPropagation(); if (typeof event.detail === 'function') { this.registerContentUpdater(event.detail); } }, true) }, reloadContent() { return Promise.all([ this.reloadHeader(), ...this.contentUpdaters.map(updater => updater()) ]).then(this.updateFormKey); }, registerContentUpdater(updater) { this.contentUpdaters.push(updater); }, async reloadHeader() { const response = await fetch( `${BASE_URL}amsociallogin_hyva\u002Fheader\u002Fupdate?isAjax=1`, { method: 'GET', headers: { 'Content-type': 'application/json' } } ); const result = await response.json(); const {customer_menu_html: customerMenuHtml} = result; const container = document.createElement('div'); container.innerHTML = customerMenuHtml; const currentMenu = document.querySelector(customerMenuSelector); const newMenu = container.querySelector(customerMenuSelector); if (currentMenu && newMenu) { currentMenu.replaceWith(newMenu); } }, updateFormKey() { const formKeyInputs = document.querySelectorAll('input[name="form_key"]'); formKeyInputs.forEach(input => input.value = hyva.getFormKey()); } } }</script><script> const AmAuthPopupRedirect = function () { const redirectTimeout = 4000; const redirectUrl = 'https://amasty.com/customer/account/'; return { processRedirect(forceRedirectUrl) { if (forceRedirectUrl) { setTimeout(() => { this.resetSessionCookie(); window.location.assign(forceRedirectUrl); }, redirectTimeout); return; } setTimeout(() => { this.resetSessionCookie(); window.location.assign(this._getRedirectUrl()); }, redirectTimeout); }, _getRedirectUrl() { const browserStorage = hyva.getBrowserStorage(); if (browserStorage) { const url = browserStorage.getItem('data_social_login_redirect') || redirectUrl; browserStorage.removeItem('data_social_login_redirect'); return url; } }, reloadCustomerData() { this.resetSessionCookie(); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, resetSessionCookie() { hyva.setCookie('mage-cache-sessid', '', -1, true); }, reloadPage() { setTimeout(() => { this.resetSessionCookie(); window.location.reload(true) }, redirectTimeout) }, reloadViaAjax() { window.addEventListener('private-content-loaded', () => { this.reloadContent().then(() => { window.dispatchEvent( new CustomEvent('amsl-content-updated') ); }).catch( (error) => { console.error(error); this.reloadPage(); } ); }, {once: true}); this.reloadCustomerData(); window.dispatchEvent( new CustomEvent('amsl-popup-ajax-login-success') ); } } }</script><script> const AmAuthPopupNotification = function () { const modalName = 'amsl\u002Dpopup\u002Dnotification'; return { ...AmAuthPopupModal(modalName), notification: '', initialize() { this.initModalSettings(); }, showNotification(messages) { if (!messages) { return; } this.notification = Array.isArray(messages) ? messages.join('<br>') : messages; window.dispatchEvent( new CustomEvent('amsl-hide-popup') ); this.show(modalName); } } }</script><script> const AmAuthPopupModal = function (modalName) { const canCloseByOverlayClick = true; return { ...hyva.modal(), animationDuration: 500, initModalSettings() { if (!canCloseByOverlayClick) { this.restrictOverlayClick(); } }, restrictOverlayClick() { document.addEventListener('click', (event) => { const modal = this.$refs[modalName]; const isVisible = this.opened[modalName]; if (isVisible && !modal.contains(event.target) && !modal.hasAttribute('x-no-overlay')) { event.stopPropagation(); } }, {capture: true}); } } }</script><script> function initCustomerLoginForm() { return { errors: 0, customer_form_login_popup_showPassword: false, displayErrorMessage: false, errorMessages: [], setErrorMessages(messages) { this.errorMessages = [messages] this.displayErrorMessage = this.errorMessages.length }, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#customer-login-form'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initForm() { return { errors: 0, customer_form_register_popup_showPassword: false, customer_form_register_popup_showPasswordConfirm: false, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#accountcreate'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); }, } }</script><script> function AmSocialLogin() { return { socialErrorMessage: '', isPopupEnabled: '1', initializeSocialLogin() { this.initContentUpdaters(); }, socialLoginClick(event) { if (this.messageEventListener) { window.removeEventListener('message', this.messageEventListener); } this.messageEventListener = this.onMessageEvent.bind(this); window.addEventListener('message', this.messageEventListener); if (this.isPopupEnabled) { window.open( event.currentTarget.href + '&isAjax=true', event.currentTarget.title, this.getPopupParams() ); } else { window.location.assign(event.currentTarget.href); } event.stopPropagation(); event.preventDefault(); return false; }, onSocialResponse(data) { const isSuccessfulResult = data.result === 1; if (isSuccessfulResult) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: data.messages } ) ); if (data.redirect_data && data.redirect_data.url) { this.processRedirect(data.redirect_data.url); } else { this.processRedirect(); } } else { this.socialErrorMessage = data.messages.pop(); setTimeout(() => { this.socialErrorMessage = ''; }, 5000); if (data?.redirect_data?.redirectWithError) { this.processRedirect(); } } }, onMessageEvent(event) { if (event.data['redirect_data']) { this.onSocialResponse(event.data); } }, getPopupParams(w, h, l, t) { let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth, outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), width = w ? w : 500, height = h ? h : 420, left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); return ( 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top ); }, ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent() } }</script><script> function initPasswordForm() { return { errors: 0, submitForm() { this.validate() .then(() => { const $form = document.querySelector('#user_forgotpassword'); if (this.errors === 0) { $form.submit(); } }) .catch((invalid) => { if (invalid.length > 0) { invalid[0].focus(); } }); } } }</script><script> const AmAuthPopup = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const IS_KNOWN_CUSTOMER = false; const modalName = 'social\u002Dlogin\u002Dpopup'; let componentInitialized = false; const reCaptchaStatusBySection = { login: '', register: '', forgotPassword: '', } const reCaptchaStatusFor = section => reCaptchaStatusBySection[section]; return { isGuestCheckoutAllowed: true, isAccountForgotPasswordPage: false, activeTab: TAB_ID_LOGIN, tabs: [TAB_ID_LOGIN, TAB_ID_REGISTER], socialIconsExpansionState: { [TAB_ID_LOGIN]: false, [TAB_ID_REGISTER]: false }, isLoading: false, modalName, isLogged: false, socialIconsExpanded: false, initializeAuthPopup(privateData) { this.browserStorage = hyva.getBrowserStorage(); if (privateData?.data?.customer?.firstname && !IS_KNOWN_CUSTOMER) { componentInitialized = false; this.reloadExpiredCustomerData(); return; } if (componentInitialized) { return; } componentInitialized = true; const origShow = this.show; const origHide = this.hide; this.show = (name, event, activeTabName) => { origShow.call(this, name, event); this.activeTab = activeTabName || TAB_ID_LOGIN; } this.hide = (...args) => { origHide.call(this, args); setTimeout(() => { this.clearForms(); this.clearFormMessages(); }, this.animationDuration + 1) } this.initModalSettings(); this.bindLinksEvents(privateData); this.initContentUpdaters(); if (!this.isGuestCheckoutAllowed) { this.bindAuthenticationEvent(); } }, _setCustomRedirectUrl(elem) { const redirectUrl = elem.getAttribute('data-social-login-redirect'); if (this.browserStorage) { this.browserStorage.removeItem('data_social_login_redirect'); } if (redirectUrl && this.browserStorage) { this.browserStorage.setItem('data_social_login_redirect', redirectUrl); } }, bindAuthenticationEvent() { window.addEventListener('toggle-authentication', (event) => { event.stopPropagation(); if (!this.isLoggedIn()) { this.show( this.modalName, event ); } else { window.location.assign(event.detail.url) } }, true) }, bindLinksEvents(privateData) { if (!this.isLoggedIn(privateData)) { this.bindOpeningEvents(); this.bindForgotLinkEvent(); requestAnimationFrame(() => { this.processForms(); }) } else { this.initLogout(); } }, bindOpeningEvents() { const accountLinks = document.querySelectorAll(`nav.am-authorization-link a[href^="${BASE_URL}customer/account"], .amsite-changelog-tab a[href^="${BASE_URL}customer/account"]`) || []; accountLinks.forEach(elem => { const isRegisterLink = /create\/?(\?.+)?(\#.+)?$/.test(elem.href); elem.removeAttribute('onclick'); elem.setAttribute('aria-haspopup', 'dialog'); elem.addEventListener('click', (event) => { this._setCustomRedirectUrl(elem); event.preventDefault(); this.show( this.modalName, event, isRegisterLink ? TAB_ID_REGISTER : TAB_ID_LOGIN ); }) }); if (reCaptchaStatusFor('register')) { this.moveRecaptchaElement('.recaptcha-create-wrapper'); } if (reCaptchaStatusFor('login')) { this.moveRecaptchaElement('.recaptcha-login-wrapper'); } }, bindForgotLinkEvent() { const modalContainer = this.$el || this.$root; const forgotLinks = modalContainer.querySelectorAll( `a[href^="${BASE_URL}customer/account/forgotpassword"]` ) || []; forgotLinks.forEach((element) => { element.addEventListener('click', (event) => { event.preventDefault(); element.setAttribute('aria-haspopup', 'dialog'); this.activeTab = TAB_ID_FORGOT; }) }) if (reCaptchaStatusFor('forgotPassword') && !this.isAccountForgotPasswordPage) { this.moveRecaptchaElement('.recaptcha-forgot-wrapper'); } }, isLoggedIn(privateData) { try { privateData = privateData?.data || JSON.parse(hyva.getBrowserStorage()['mage-cache-storage']); return this.isLogged = !!(privateData?.customer?.firstname); } catch { } return this.isLogged = false; }, showOnExternalEvent(event) { const eventData = event.detail || {}; const message = eventData?.message; const tabName = eventData?.tabName || TAB_ID_LOGIN; this.show(this.modalName, event, tabName); if (message) { this.setFormMessages(tabName, [message]); } }, canShowAllSocialIcons() { return this.socialIconsExpansionState[this.activeTab]; }, showAllSocialIcons() { this.socialIconsExpanded = true; this.socialIconsExpansionState[this.activeTab] = true; }, setLoading(isLoading) { const formButtons = this.$refs[this.modalName].querySelectorAll('[type="submit"]'); formButtons.forEach(button => { if (isLoading) { button.setAttribute('disabled', 'disabled') } else { button.removeAttribute('disabled'); } }) this.isLoading = isLoading; }, reloadExpiredCustomerData() { const sections = ['mage-cache-storage', 'private_content_version', 'mage-cache-timeout']; sections.forEach(section => localStorage.removeItem(section)); hyva.setCookie('mage-cache-sessid', '', -1); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }, moveRecaptchaElement(element) { const captchaElement = document.querySelector(element); if (!captchaElement) { return; } const container = captchaElement.closest('.amsl-form').querySelector('.actions-toolbar'); container.prepend(captchaElement); }, onKeypress(event) { const activeTabIndex = this.tabs.indexOf(this.activeTab); if (activeTabIndex < 0 || event.code === 'Tab') { return; } switch (event.code) { case 'Enter': case 'Space': this.activeTab = event.target.id.replace('tab-', ''); break; case 'ArrowRight': this.activeTab = this.tabs[(activeTabIndex + 1) % this.tabs.length] break; case 'ArrowLeft': this.activeTab = this.tabs[(activeTabIndex + this.tabs.length - 1) % this.tabs.length] break; case 'End': this.activeTab = this.tabs[this.tabs.length - 1] break; case 'Home': this.activeTab = this.tabs[0] break; } document.getElementById('tab-' + this.activeTab).focus(); }, ...AmAuthPopupModal(modalName), ...AmAuthPopupForms(), ...AmAuthPopupRedirect(), ...AmAuthPopupReloadContent(), ...AmAuthPopupLogout(), ...(typeof AmSocialLogin === 'function' ? AmSocialLogin() : {}) } }</script><script> (function () { const resetPasswordForms = document.querySelectorAll('form[action*="/forgotpasswordpost"]'); resetPasswordForms.forEach(form => { form.classList.add('form','password', 'forget'); }); })(); const AmAuthPopupForms = function () { const TAB_ID_LOGIN = 'amsl\u002Dlogin'; const TAB_ID_REGISTER = 'amsl\u002Dregister'; const TAB_ID_FORGOT = 'amsl\u002Dforgot'; const formsConfig = JSON.parse(`\u007B\u0022amsl\u002Dlogin\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dlogin\u0022,\u0022formId\u0022\u003A\u0022customer\u002Dlogin\u002Dform\u0022,\u0022successMessage\u0022\u003A\u0022You\u0020have\u0020successfully\u0020logged\u0020in\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dregister\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dregister\u0022,\u0022formId\u0022\u003A\u0022accountcreate\u0022,\u0022successMessage\u0022\u003A\u0022Thank\u0020you\u0020for\u0020registering\u0020with\u0020us\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dforgot\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dforgot\u0022,\u0022formId\u0022\u003A\u0022user_forgotpassword\u0022,\u0022customSubmitUrl\u0022\u003A\u0022\u005C\u002Fcustomer\u005C\u002Faccount\u005C\u002Fforgotpasswordpost\u0022\u007D\u007D`); return { formMessages: new Map(), processForms() { Object.values(formsConfig).forEach((formOptions) => { this.processForm(formOptions); }) }, processForm(formOptions) { const { formId } = formOptions; const formElement = document.querySelector(`#social-login-popup #${formId}`); if (formElement) { this.bindFormSubmit(formElement, formOptions); } }, bindFormSubmit(formElement, formOptions) { const { formType, successMessage, submitUrlReplacement, customSubmitUrl } = formOptions; let submitUrl = customSubmitUrl || formElement.action; if (submitUrlReplacement) { submitUrl = submitUrl.replace('customer/account', submitUrlReplacement); } formElement.submit = () => { this.clearFormMessages(); this.setLoading(true); this.browserStorage = hyva.getBrowserStorage(); this.formAjaxSubmit( formElement, submitUrl ).then((result) => { if (result.errors) { this.setFormMessages(formType, result.errors); return; } const notification = result.success || successMessage; this.hide(this.modalName); if (notification) { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: notification } ) ); } if (!submitUrl.includes('forgotpasswordpost')) { this.processRedirect(); } else { setTimeout(() => { document.querySelector('[x-data="AmAuthPopupNotification()"] > .am-overlay-popup').style.display = 'none'; }, 4000) } }).finally(() => { this.setLoading(false); }) } }, async formAjaxSubmit(form, url) { let errors = null; let success = null; try { const response = await fetch(url, { method: 'POST', body: new FormData(form) }) const messages = this.extractMageMessages(); const errorMessages = messages.filter(({type}) => type === 'error'); const successMessages = messages.filter(({type}) => type === 'success'); if (errorMessages.length) { errors = errorMessages.map(({text}) => text); } if (successMessages.length) { success = successMessages.pop().text || ''; } if (errors && Array.isArray(errors) && this.detectSpecialBehaviour(response, errors)) { errors = null; } } catch (error) { console.error(error); errors = ['Sorry,\u0020something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again\u0020later.']; } return { errors, success }; }, extractMageMessages() { const messagesCookie = hyva.getCookie('mage-messages'); const messages = messagesCookie ? JSON.parse(decodeURIComponent(messagesCookie)) : []; hyva.setCookie('mage-messages','', -1, true); return messages; }, clearFormMessages() { this.formMessages = new Map(); }, setFormMessages(formType, messages) { const formMessages = new Map(this.formMessages); formMessages.set(formType, messages); this.formMessages = formMessages; }, clearForms() { const forms = this.$refs[this.modalName].querySelectorAll('form') || []; forms.forEach((form) => form.reset()); }, detectSpecialBehaviour(response, errors) { const errorPattern = 'You have an active'; const ulrPattern = 'amasty_recurring/customer/subscriptions/'; const cookieLifeTime = 31536000; if (errors[0].includes(errorPattern) && response.url.includes(ulrPattern)) { this.browserStorage.setItem('data_social_login_redirect', response.url); window.hyva.setCookie('mage-messages', `[{"type":"error","text":"${errors[0]}"}]`, cookieLifeTime, true); return true; } return false; } } }</script><script> const AmAuthPopupLogout = function () { return { initLogout() { const logoutLinks = document.querySelectorAll(`a[href*="customer/account/logout"]`) || []; logoutLinks.forEach(elem => { elem.addEventListener('click', (event) => { event.preventDefault(); this.sendLogOut() }) }) }, sendLogOut() { fetch(BASE_URL + "customer/account/logout", { method: 'GET', credentials: "include" }).then(response => { window.dispatchEvent( new CustomEvent( 'amsl-popup-show-notification', { detail: 'You\u0020have\u0020signed\u0020out\u0020and\u0020will\u0020go\u0020to\u0020our\u0020homepage\u0020in\u00205\u0020seconds' } ) ); this.processRedirect(this.isInAccountSection() ? BASE_URL : ''); }) .catch(error => { console.error(error); this.processRedirect(); }) }, isInAccountSection() { return document.querySelector('body').classList.contains('account'); } } }</script><script> const AmAuthPopupReviewForm = function () { const reloadUrl = 'https\u003A\u002F\u002Famasty.com\u002Famsociallogin_hyva\u002Fajax\u002Freviewform\u002Fid\u002F1634\u002F'; const reviewFormBlockSelector = '\u0023review\u002Dform'; function cloneScriptNode(node) { const scriptClone = document.createElement('script') scriptClone.text = node.innerHTML; Array.from(node.attributes).forEach(attribute => { scriptClone.setAttribute(attribute.name, attribute.value); }); return scriptClone; } function reExecuteScripts(node) { node.querySelectorAll('script').forEach( (scriptNode) => node.replaceWith(cloneScriptNode(node)) ); } return { initializeReviewForm() { window.dispatchEvent( new CustomEvent( 'amsl-register-content-updater', { detail: this.reloadReviewForm.bind(this) } ) ) }, async reloadReviewForm() { try { const response = await fetch( reloadUrl, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); const result = await response.json(); if (result && result.form) { const bufferElement = document.createElement('div'); bufferElement.innerHTML = result.form; const newElement = bufferElement.querySelector(reviewFormBlockSelector); const existingElement = document.querySelector(reviewFormBlockSelector); reExecuteScripts(newElement); existingElement.replaceWith(newElement); } } catch (error) { console.error('Failed to update review form'); console.error(error); } } } }</script><script> (() => { 'use strict'; const gridSizes = { options: { elementSelector: '[data-mage-init*="components/grid-sizes"]', childrenInLine: '[class*="amtab-cell"], [class*="amtab-title"]', childrenInRow: '[class*="amtab-table"], [class*="amtab-head"]', cellSelect: '.amtab-cell', lineSelect: '.amtab-table-line', hoverlineClass: '-amtab-hoverline', activeClass: '-active', wrapperClass: '.amtab-grid-wrapper', tabWrapperClass: '.tab-content' }, targetElem: {}, initGridSizes: function () { let self = this; let elements = document.querySelectorAll(this.options.elementSelector); if (!elements.length) { return; } this._loadGridCss(); for (let element of elements) { let lines = element.querySelectorAll(this.options.lineSelect); for (let line of lines) { self._initClickOnLine(line, element); } this._setTabsGridPaddings(element); } }, _initClickOnLine(line, element) { let cells = line.querySelectorAll(this.options.cellSelect); for (let cell of cells) { cell.addEventListener('click', (event) => { this._gridHighlight(event, element) }); } }, _gridHighlight: function (e, element) { let self = this; self._clearTable(element); e.target.classList.add(self.options.activeClass); self.targetElem = { node: e.target, position: null }; self._highlightRow(element); self._highlightColumn(element); }, _highlightRow: function () { let self = this, targetLine = self.targetElem.node.closest(self.options.lineSelect); targetLine.classList.add(self.options.activeClass); let lineChildren = targetLine.querySelectorAll(self.options.childrenInLine); for (let [index, cell] of lineChildren.entries()) { if (cell.classList.contains(self.options.activeClass)) { self.targetElem.position = index; break; } cell.classList.add(self.options.hoverlineClass); } }, _highlightColumn: function (element) { let self = this; let childrenInRow = element.querySelectorAll(self.options.childrenInRow); for (let elem of childrenInRow) { if (elem.classList.contains(self.options.activeClass)) { break; } let cells = elem.querySelectorAll(self.options.childrenInLine); for (let [index, cell] of cells.entries()) { if (index === parseInt(self.targetElem.position)) { cell.classList.add(self.options.hoverlineClass); } } } }, _clearTable: function (element) { let self = this; element.querySelectorAll('.' + self.options.hoverlineClass).forEach((el) => { el.classList.remove(self.options.hoverlineClass) }); element.querySelectorAll('.' + self.options.activeClass).forEach((el) => { el.classList.remove(self.options.activeClass) }); }, _setTabsGridPaddings(element) { const gridWrapper = element.closest(this.options.wrapperClass); const tabWrapper = gridWrapper.closest(this.options.tabWrapperClass); if (gridWrapper.classList.contains('-small')) { tabWrapper.classList.add('md:pb-36'); } }, _loadGridCss() { const styles = document.createElement('link'); styles.rel = 'stylesheet'; styles.href = 'https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/Amasty_CustomTabsHyva/css/grids.min.css'; document.head.appendChild(styles); } } document.addEventListener('DOMContentLoaded', () => { gridSizes.initGridSizes(); }); })()</script><script> 'use strict'; (() => { const allAnchorLinks = document.querySelectorAll('[data-amsite-js="scroll-open-tab"]'); const allDeprecatedAnchorLinks = document.querySelectorAll('[observed-link-tab]'); const isMobile = AmsiteUtils().isMobile('(max-width: 769px)'); [...allAnchorLinks, ...allDeprecatedAnchorLinks].forEach(anchorLink => { anchorLink.addEventListener('click', (event) => { event.preventDefault(); const tabDestination = anchorLink.getAttribute('data-tab-destination') || anchorLink.getAttribute('href').replace('#', ''); const tab = document.querySelector(`[data-tab="${tabDestination}"]`); const indent = isMobile ? 140 : 100; if (tab) { tab.click(); window.scrollTo({ top: tab.getBoundingClientRect().top + window.scrollY - indent, behavior: 'smooth' }); } }); }); })()</script><script> (function () { 'use strict'; /** * Config to determine which element is responsible for the form submission * * @type {[{elementSelector: undefined|string, submitAttribute: string}]} */ const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; const initWrapFormSubmit = function () { document.addEventListener("DOMContentLoaded", function () { wrapFormSubmit(window.amRecaptchaModel?.formsToProtect || ''); }); }; /** * Replace protected forms submit with amRecaptchaModel.execute($event) method. * Call original submit on amrecaptcha-callback event after successful captcha validation. * * @return {void} */ const wrapFormSubmit = function (formsSelector) { if (formsSelector.length === 0) { return; } document.querySelectorAll(formsSelector)?.forEach(formElement => { if (!formElement) { return; } const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); if (!elementToWrap || !attributeNameToWrap) { return; } setElementAttributes(formElement, elementToWrap, attributeNameToWrap); }); }; /** * Call wrapFormSubmit on event to add form to amRecaptchaModel protection - for forms which are created dynamically */ document.addEventListener("add-form-to-amrecaptcha-protection", (event) => { wrapFormSubmit(event.detail); }); /** * Find submit event and DOM element that has this event using formWrapperConfig. * * @param {HTMLElement} formElement * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} */ const resolveElementWrapping = function (formElement) { let result = { elementToWrap: undefined, attributeNameToWrap: undefined }; formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; if (!elementToWrap) { return; } const attributeNameToWrap = elementToWrap.getAttributeNames().find( (elementAttribute) => { /** @type {string[]} */ const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); return submitAttributeVariations.some( (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) ) } ); if (!attributeNameToWrap) { return; } result.elementToWrap = elementToWrap; result.attributeNameToWrap = attributeNameToWrap; }); return result; } /** * Set attribute to wrap original submit, add eventListeners for captcha callbacks * * @param {HTMLElement} formElement * @param {HTMLElement} elementToWrap * @param {string} attributeNameToWrap */ const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); elementToWrap.removeAttribute(attributeNameToWrap); /** * To properly set submit attribute - we need to replace '@' with 'x-on:' * and add preventDefault behaviour */ elementToWrap.setAttribute( attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 'amRecaptchaModel.execute($event)' ); elementToWrap.setAttribute( 'x-on:amrecaptcha-executable-callback', originalSubmit ); } initWrapFormSubmit(); })(window.amRecaptchaModel = window.amRecaptchaModel || {});</script><script>window.amlazy = function() {if (typeof window.amlazycallback !== "undefined") {setTimeout(window.amlazycallback, 500);setTimeout(window.amlazycallback, 1500);}}</script><script> var yall=function(){"use strict";return function(e){var t=(e=e||{}).lazyClass||"lazy",n=e.lazyBackgroundClass||"lazy-bg",o="idleLoadTimeout"in e?e.idleLoadTimeout:200,r=e.observeChanges||!1,i=e.events||{},a=e.noPolyfill||!1,s=window,c="requestIdleCallback",l="IntersectionObserver",u=l in s&&l+"Entry"in s,d=/baidu|(?:google|bing|yandex|duckduck)bot/i.test(navigator.userAgent),v=["srcset","src","poster"],f=[],b=function(e,o){return f.slice.call((o||document).querySelectorAll(e||"img[data-src],video."+t+",iframe."+t+", ."+n))},g=function(t){var o=t.parentNode;"PICTURE"==o.nodeName&&h(b("source",o),m),"VIDEO"==t.nodeName&&h(b("source",t),m),m(t);var r=t.classList;r.contains(n)&&(r.remove(n),r.add(e.lazyBackgroundLoaded||"lazy-bg-loaded"))},y=function(e){for(var t in i)e.addEventListener(t,i[t].listener||i[t],i[t].options||void 0)},m=function(e){for(var n in v)if(v[n]in e.dataset){e.setAttribute(v[n],e.dataset[v[n]]);e.classList.add("lazy-loaded");var o=e.parentNode;"SOURCE"===e.nodeName&&o.autoplay&&(o.load(),/Trident/.test(navigator.userAgent)&&o.play(),o.classList.remove(t)),e.classList.remove(t)}},h=function(e,t){for(var n=0;n<e.length;n++)s[l]&&t instanceof s[l]?t.observe(e[n]):t(e[n])},p=b();if(h(p,y),u&&!d){var L=new s[l](function(e){h(e,function(e){if(e.isIntersecting||e.intersectionRatio){var t=e.target;c in s&&o?s[c](function(){g(t)},{timeout:o}):g(t),L.unobserve(t),(p=p.filter(function(e){return e!=t})).length||r||L.disconnect()}})},{rootMargin:("threshold"in e?e.threshold:200)+"px 0%"});h(p,L),r&&h(b(e.observeRootSelector||"body"),function(t){new MutationObserver(function(){h(b(),function(e){p.indexOf(e)<0&&(p.push(e),y(e),u&&!d?L.observe(e):(a||d)&&h(p,g))})}).observe(t,e.mutationObserverOptions||{childList:!0,subtree:!0})})}else(a||d)&&h(p,g)}}(); window.amlazycallback = function () { yall() }; yall({ events: { load: function (event) { if (!event.target.classList.contains("lazy") && event.target.nodeName == "IMG") { event.target.classList.add("lazy-loaded"); } } } }); </script><noscript id="deferred-css"><link rel="stylesheet" type="text/css" media="print" href="https://cdn.amasty.com/static/version1739349122/frontend/Amasty/AmTheme/en_US/css/print.min.css" /><link rel="stylesheet" type="text/css" media="all" href="https://cdn.amasty.com/static/version1739349122/_cache/merged/fonts_f25dfa4077a1582187c5132e6c10fe54.min.css" /></noscript><script>var loadDeferredStyles = function() {var addStylesNode = document.getElementById("deferred-css");var replacement = document.createElement("div");replacement.innerHTML = addStylesNode.textContent;document.body.appendChild(replacement);addStylesNode.parentElement.removeChild(addStylesNode);};window.addEventListener('load', loadDeferredStyles);</script></body></html>