{"mappings":"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","sources":["","node_modules/tinysort/dist/tinysort.min.js","src/js/cart.js","data.json","src/scripts.js","src/js/mega-menu-metageeky.js","node_modules/hoverintent/index.js","src/js/resize.js","src/js/_helpers.js","src/js/ecbf-combobox-search.js","src/js/carousel.js","src/js/sorting.js","src/js/form-management.js","src/js/animations.js"],"sourcesContent":["\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire1259\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequire1259\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"5AlLF\", function(module, exports) {\n\"use strict\";\n(function(a, b) {\n \"function\" == typeof define && define.amd ? define(\"tinysort\", function() {\n return b;\n }) : a.tinysort = b;\n})(window || module || {}, function(a) {\n function c(a, b) {\n for(var c, d = a.length, e = d; e--;)c = d - e - 1, b(a[c], c);\n return a;\n }\n function b(a, b, c) {\n for(var d in b)(c || a[d] === e) && (a[d] = b[d]);\n return a;\n }\n function d(a, b, c) {\n return l.push({\n prepare: a,\n sort: b,\n sortBy: c\n });\n }\n var e = a, f = null, g = window, h = g.document, i = parseFloat, j = /(-?\\d+\\.?\\d*)\\s*$/g, k = /(\\d+\\.?\\d*)\\s*$/g, l = [], m = function(a) {\n return String.fromCharCode(a);\n }, n = function(a) {\n return Array.from([\n ,\n ,\n , \n ], function(b, c) {\n return m(a + c);\n });\n }, o = n(0), p = n(4095), q = {\n selector: f,\n order: \"asc\",\n attr: f,\n data: f,\n useVal: !1,\n place: \"org\",\n returns: !1,\n cases: !1,\n natural: !1,\n forceStrings: !1,\n ignoreDashes: !1,\n sortFunction: f,\n useFlex: !1,\n emptyEnd: !1,\n console: console\n }, r = 0, s = 0;\n return g.Element && function(a) {\n return a.matches = a.matches || a.msMatchesSelector;\n }(Element.prototype), b(d, {\n loop: c\n }), b(function(a) {\n for(var A = arguments.length, B = Array(1 < A ? A - 1 : 0), C = 1; C < A; C++)B[C - 1] = arguments[C];\n function d(a) {\n var c = !!a.selector, d = c && \":\" === a.selector[0], e = b(a || {}, q);\n return L.push(b({\n hasSelector: c,\n hasAttr: e.attr !== f && \"\" !== e.attr,\n hasData: e.data !== f,\n hasFilter: d,\n sortReturnNumber: \"asc\" === e.order ? 1 : -1\n }, e));\n }\n function g() {\n c(a, function(a, b) {\n M ? M !== a.parentNode && (N = !1) : M = a.parentNode;\n var c = L[0], d = c.hasFilter, e = c.selector, f = !e || d && a.matches(e) || e && a.querySelector(e), g = f ? I : J, h = g.length, i = {\n elm: a,\n pos: b,\n posn: h\n };\n H.push(i), g.push(i);\n }), K.splice.apply(K, [\n 0,\n Number.MAX_SAFE_INTEGER\n ].concat(I));\n }\n function m(e, a, b) {\n for(var f = b(e.toString()), g = b(a.toString()), h = 0; f[h] && g[h]; h++)if (f[h] !== g[h]) {\n var i = +f[h], c = +g[h];\n return i == f[h] && c == g[h] ? i - c : f[h] > g[h] ? 1 : -1;\n }\n return f.length - g.length;\n }\n function n(a) {\n for(var b, c = [], d = 0, e = -1, f = 0, g = void 0, h = void 0; g = (h = a.charAt(d++)).charCodeAt(0);)b = 46 === g || 48 <= g && 57 >= g, b !== f && (c[++e] = \"\", f = b), c[e] += h;\n return c;\n }\n function t(d, a) {\n var b = 0;\n 0 !== s && (s = 0);\n for(var e = function() {\n var e = L[s], f = e.ignoreDashes ? k : j;\n c(l, function(a) {\n return a.prepare && a.prepare(e);\n });\n var g = !1, h = y(d, e), o = y(a, e);\n if (e.sortFunction) b = e.sortFunction(d, a);\n else if (\"rand\" === e.order) b = .5 > Math.random() ? 1 : -1;\n else if (h === o) b = 0;\n else {\n if (!e.forceStrings) {\n var p = !!z(h) && h && h.match(f), q = !!z(o) && o && o.match(f);\n if (p && q) {\n var r = h.substr(0, h.length - p[0].length), t = o.substr(0, o.length - q[0].length);\n r == t && (g = !0, h = i(p[0]), o = i(q[0]));\n }\n }\n b = e.natural && (isNaN(h) || isNaN(o)) ? m(h, o, n) : h < o ? -1 : h > o ? 1 : 0;\n }\n c(l, function(a) {\n var c = a.sort;\n return c && (b = c(e, g, h, o, b));\n }), b *= e.sortReturnNumber, 0 === b && s++;\n }; 0 === b && s < r;)e();\n return 0 === b && (b = d.pos > a.pos ? 1 : -1), b;\n }\n function u() {\n var a = I.length, b = a === H.length, c = a === M.children.length, d = L[0], e = d.place, f = d.console;\n if (N && b && c) Q ? I.forEach(function(a, b) {\n return a.elm.style.order = b;\n }) : M ? M.appendChild(v()) : f && f.warn && f.warn(\"parentNode has been removed\");\n else {\n var g = \"start\" === e, h = \"end\" === e, i = \"first\" === e;\n if (\"org\" === e) I.forEach(w), I.forEach(function(a, b) {\n return x(K[b], a.elm);\n });\n else if (g || h) {\n var j = K[g ? 0 : K.length - 1], k = j && j.elm.parentNode, l = k && (g && k.firstChild || k.lastChild);\n l && (l !== j.elm && (j = {\n elm: l\n }), w(j), h && k.appendChild(j.ghost), x(j, v()));\n } else if (i || \"last\" === e) {\n var m = K[i ? 0 : K.length - 1];\n x(w(m), v());\n }\n }\n }\n function v() {\n return I.forEach(function(a) {\n return G.appendChild(a.elm);\n }), G;\n }\n function w(a) {\n var b = a.elm, c = h.createElement(\"div\");\n return a.ghost = c, b.parentNode.insertBefore(c, b), a;\n }\n function x(a, b) {\n var c = a.ghost, d = c.parentNode;\n d.insertBefore(b, c), d.removeChild(c), delete a.ghost;\n }\n function y(a, b) {\n var c, d = a.elm, g = b.selector;\n g && (b.hasFilter ? !d.matches(g) && (d = f) : d = d.querySelector(g)), b.hasAttr ? c = d.getAttribute(b.attr) : b.useVal ? c = d.value || d.getAttribute(\"value\") : b.hasData ? c = d.getAttribute(\"data-\" + b.data) : d && (c = d.textContent), z(c) && (!b.cases && (c = c.toLowerCase()), c = c.replace(/\\s+/g, \" \"));\n var h = [\n e,\n f,\n \"\"\n ].indexOf(c);\n return -1 !== h && (c = (b.emptyEnd ? p : o)[h]), c;\n }\n function z(a) {\n return \"string\" == typeof a;\n }\n var D = B[0] || {};\n z(a) && (a = h.querySelectorAll(a));\n var E = Object.assign({}, q, D || {}), F = E.console;\n 0 === a.length && F && F.warn && F.warn(\"No elements to sort\");\n var G = h.createDocumentFragment(), H = [], I = [], J = [], K = [], L = [], M = void 0, N = !0, O = a.length && a[0].parentNode, P = O.rootNode !== document, Q = a.length && (D === e || !1 !== D.useFlex) && !P && -1 !== getComputedStyle(O, null).display.indexOf(\"flex\");\n return r = function(a) {\n return 0 === a.length && d({}) || c(a, function(a) {\n return d(z(a) ? {\n selector: a\n } : a);\n }).length;\n }(B), g(), I.sort(D.sortFunction || t), u(), I.map(function(a) {\n return a.elm;\n });\n }, {\n plugin: d,\n defaults: q\n });\n}());\n\n});\n\nparcelRegister(\"gCiTj\", function(module, exports) {\n\n$parcel$export(module.exports, \"cart\", () => cart);\n\nvar $c2gn4 = parcelRequire(\"c2gn4\");\nconst cartModal = document.querySelector(\"#cart-modal\");\nfunction cart() {\n PetiteVue.createApp({\n products: (/*@__PURE__*/$parcel$interopDefault($c2gn4)),\n filterLiveRegion: document.querySelector(\"#filter-live-region\"),\n table: document.querySelector(\"[data-cart]\"),\n cartCaptionTotal: document.querySelector(\"[data-cart-caption-total]\"),\n cart: JSON.parse(localStorage.getItem(\"cart\")) || [],\n amount: 1,\n invoiceDataHidden: false,\n sum: 0,\n totalCartItems: 0,\n sortBy: \"id\",\n sortDirection: \"asc\",\n giftwrapPrice: 299,\n get sortedProducts () {\n return this.products.sort((p1, p2)=>{\n let modifier = 1;\n if (this.sortDirection === \"desc\") modifier = -1;\n if (p1[this.sortBy] < p2[this.sortBy]) return -1 * modifier;\n if (p1[this.sortBy] > p2[this.sortBy]) return 1 * modifier;\n return 0;\n });\n },\n updateItemPrice (id) {\n let product = this.getCartItemById(id)[0];\n product.amount = parseFloat(event.target.value);\n this.persistCart();\n this.getLocalSum(product, parseFloat(event.target.value));\n this.getLocalTotal(product);\n this.updateCartItemAmount();\n this.updateTotalSum();\n this.filterLiveRegion.textContent = \"Neuer Preis: \\u20AC\" + this.getLocalTotal(product) / 100 + \". Neuer Gesamtpreis des Warenkorbs: \\u20AC \" + this.sum / 100;\n this.cartCaptionTotal.textContent = String(this.sum / 100);\n },\n whenMounted () {\n this.updateCartItemAmount();\n this.updateTotalSum();\n setTimeout(()=>{\n this.cartCaptionTotal.textContent = String(this.sum / 100);\n }, 500);\n },\n updateCartItemAmount () {\n let cartItemAmount = 0;\n this.cart.forEach((cI)=>{\n cartItemAmount += cI.amount;\n });\n this.totalCartItems = cartItemAmount;\n },\n updateTotalSum () {\n let theSum = 0;\n this.cart.forEach((product)=>{\n theSum += product.price * product.amount;\n if (product.giftwrap) theSum = theSum + this.giftwrapPrice;\n });\n this.sum = theSum;\n },\n getLocalSum (cartItem, amount) {\n if (cartItem && amount) {\n let returnVal = cartItem.price * amount;\n cartItem.localTotal = returnVal;\n return returnVal;\n }\n },\n getLocalTotal (product) {\n let price;\n price = product.localTotal;\n if (product.giftwrap) price += this.giftwrapPrice;\n return price;\n },\n localSum (cartItem, amount) {\n return this.getLocalSum(cartItem, amount);\n },\n isInCart (id) {\n return this.cart.find((x)=>x.id === id);\n },\n changeSort (e) {\n switch(e.target.value){\n case \"name-desc\":\n this.sortDirection = \"desc\";\n this.sort(\"name\");\n this.filterLiveRegion.textContent = \"Sortiert nach: Name, Z bis A\";\n break;\n case \"name-asc\":\n this.sortDirection = \"asc\";\n this.sort(\"name\");\n this.filterLiveRegion.textContent = \"Sortiert nach: Name, A bis Z\";\n break;\n case \"price-asc\":\n this.sortDirection = \"asc\";\n this.sort(\"price\");\n this.filterLiveRegion.textContent = \"Sortiert nach: Preis, g\\xfcnstigste zuerst\";\n break;\n case \"price-desc\":\n this.sortDirection = \"desc\";\n this.sort(\"price\");\n this.filterLiveRegion.textContent = \"Sortiert nach: Preis, teuerste zuerst\";\n break;\n case \"\":\n this.sortDirection = \"asc\";\n this.sort(\"id\");\n this.filterLiveRegion.textContent = \"Sortierung zur\\xfcckgesetzt\";\n break;\n }\n },\n getProductById (id) {\n return (0, (/*@__PURE__*/$parcel$interopDefault($c2gn4))).filter((product)=>product.id === id);\n },\n getCartItemById (id) {\n return this.cart.filter((product)=>product.id === id);\n },\n persistCart () {\n localStorage.setItem(\"cart\", JSON.stringify(this.cart));\n },\n toggleCartItem (productId) {\n let product = this.getProductById(productId);\n // If the item is already in the shopping cart, remove it, update the total, display a message in the live region and persist the new cart in local storage.\n if (this.cart.find((x)=>x.id === productId)) {\n this.cart = this.cart.filter((n)=>n.id !== product[0].id);\n this.persistCart();\n this.updateTotalSum();\n this.filterLiveRegion.textContent = \"Artikel \" + product[0].name + \" entfernt. Neuer Gesamtpreis des Warenkorbs: \\u20AC \" + this.sum / 100;\n setTimeout(()=>{\n this.cartCaptionTotal.textContent = String(this.sum / 100);\n }, 100);\n // Focus the shopping cart table so that its accessible name is output in the form of an updated \n this.$refs.cart.focus();\n } else {\n // If not in the shopping cart, add it, update the total, display a message in the live region and persist the new shopping cart in local storage.\n product[0].localTotal = product[0].price;\n this.cart.push(product[0]);\n this.updateTotalSum();\n this.filterLiveRegion.textContent = \"Artikel \" + product[0].name + \" erg\\xe4nzt. Neuer Gesamtpreis des Warenkorbs: \\u20AC \" + this.sum / 100;\n this.persistCart();\n cartModal.showModal();\n }\n this.getLocalTotal(product);\n this.updateCartItemAmount();\n setTimeout(()=>{\n this.cartCaptionTotal.textContent = String(this.sum / 100);\n }, 100);\n },\n toggleGiftWrap (id) {\n let item = this.getCartItemById(id)[0];\n item.giftwrap = !item.giftwrap;\n this.persistCart();\n this.updateTotalSum();\n let addedOrRemoved = item.giftwrap ? \"hinzugef\\xfcgt\" : \"entfernt\";\n this.filterLiveRegion.textContent = \"Geschenkverpackung \" + addedOrRemoved + \". Neuer Preis: \\u20AC\" + this.getLocalTotal(item) / 100 + \". Neuer Gesamtpreis des Warenkorbs: \\u20AC \" + this.sum / 100;\n },\n hasGiftwrap (id) {\n if (this.getCartItemById(id)[0]) return this.getCartItemById(id)[0].giftwrap;\n },\n sort: function(s) {\n if (s === this.sortBy) this.sortDirection = this.sortDirection === \"asc\" ? \"asc\" : \"desc\";\n this.sortBy = s;\n }\n }).mount();\n}\nconst cartDialog = document.querySelector(\"#cart-modal\");\ncartDialog.addEventListener(\"click\", (event1)=>{\n if (event1.target.nodeName === \"DIALOG\") cartDialog.close();\n});\n\n});\nparcelRegister(\"c2gn4\", function(module, exports) {\nmodule.exports = JSON.parse('[{\"id\":1,\"name\":\"Beard oil\",\"in_stock\":3,\"price\":999,\"amount\":1,\"localTotal\":0,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/bartoel.jpg\",\"img_alt\":\"Three small bottles of brown beard oil.\"},{\"id\":2,\"name\":\"Podcasting headphones\",\"in_stock\":30,\"price\":2499,\"amount\":1,\"localTotal\":0,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/kopfhoerer.jpg\",\"img_alt\":\"Black wireless headphones.\"},{\"id\":3,\"name\":\"Smartphone case\",\"in_stock\":13,\"price\":1199,\"amount\":1,\"localTotal\":0,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/smart-huelle.jpg\",\"img_alt\":\"Colourful smartphone case in turquoise, white and blue rough brushstrokes.\"},{\"id\":4,\"name\":\"Loose green tea\",\"in_stock\":5,\"price\":599,\"amount\":1,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/loser-tee.jpg\",\"img_alt\":\"A glass with loose green tea next to a cup of hot tea.\"},{\"id\":5,\"name\":\"Handbag\",\"in_stock\":3,\"price\":5999,\"amount\":1,\"localTotal\":0,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/handtasche.jpg\",\"img_alt\":\"Brown handbag made out of leather.\"},{\"id\":6,\"name\":\"Bracelet\",\"in_stock\":30,\"price\":3499,\"amount\":1,\"localTotal\":0,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/armband.jpg\",\"img_alt\":\"Bracelet in a maritime design, with a dominant golden anchor.\"},{\"id\":7,\"name\":\"Yoga accessories\",\"in_stock\":13,\"price\":1999,\"amount\":1,\"localTotal\":0,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/yoga-zubehoer.jpg\",\"img_alt\":\"Yoga mat, rolled up, next to two different-sized yoga blocks.\"},{\"id\":8,\"name\":\"Cotton T-shirt\",\"in_stock\":5,\"price\":2599,\"amount\":1,\"giftwrap\":false,\"img_url\":\"https://marcus-herrmann.com/dateien/ecbf/t-shirt.jpg\",\"img_alt\":\"Blue-grey T-shirt on a coat hanger.\"}]');\n\n});\n\n\n/* The following is a slightly apapted https://github.com/metageeky/mega-menu\nunder https://www.mozilla.org/en-US/MPL/2.0/ */ var $81e41802ed93763f$exports = {};\n\"use strict\";\n$81e41802ed93763f$exports = function(el, onOver, onOut) {\n var x, y, pX, pY;\n var mouseOver = false;\n var focused = false;\n var h = {}, state = 0, timer = 0;\n var options = {\n sensitivity: 7,\n interval: 100,\n timeout: 0,\n handleFocus: false\n };\n function delay(el, e) {\n if (timer) timer = clearTimeout(timer);\n state = 0;\n return focused ? undefined : onOut.call(el, e);\n }\n function tracker(e) {\n x = e.clientX;\n y = e.clientY;\n }\n function compare(el, e) {\n if (timer) timer = clearTimeout(timer);\n if (Math.abs(pX - x) + Math.abs(pY - y) < options.sensitivity) {\n state = 1;\n return focused ? undefined : onOver.call(el, e);\n } else {\n pX = x;\n pY = y;\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n }\n // Public methods\n h.options = function(opt) {\n var focusOptionChanged = opt.handleFocus !== options.handleFocus;\n options = Object.assign({}, options, opt);\n if (focusOptionChanged) options.handleFocus ? addFocus() : removeFocus();\n return h;\n };\n function dispatchOver(e) {\n mouseOver = true;\n if (timer) timer = clearTimeout(timer);\n el.removeEventListener(\"mousemove\", tracker, false);\n if (state !== 1) {\n pX = e.clientX;\n pY = e.clientY;\n el.addEventListener(\"mousemove\", tracker, false);\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n return this;\n }\n function dispatchOut(e) {\n mouseOver = false;\n if (timer) timer = clearTimeout(timer);\n el.removeEventListener(\"mousemove\", tracker, false);\n if (state === 1) timer = setTimeout(function() {\n delay(el, e);\n }, options.timeout);\n return this;\n }\n function dispatchFocus(e) {\n if (!mouseOver) {\n focused = true;\n onOver.call(el, e);\n }\n }\n function dispatchBlur(e) {\n if (!mouseOver && focused) {\n focused = false;\n onOut.call(el, e);\n }\n }\n function addFocus() {\n el.addEventListener(\"focus\", dispatchFocus, false);\n el.addEventListener(\"blur\", dispatchBlur, false);\n }\n function removeFocus() {\n el.removeEventListener(\"focus\", dispatchFocus, false);\n el.removeEventListener(\"blur\", dispatchBlur, false);\n }\n h.remove = function() {\n if (!el) return;\n el.removeEventListener(\"mouseover\", dispatchOver, false);\n el.removeEventListener(\"mouseout\", dispatchOut, false);\n removeFocus();\n };\n if (el) {\n el.addEventListener(\"mouseover\", dispatchOver, false);\n el.addEventListener(\"mouseout\", dispatchOut, false);\n }\n return h;\n};\n\n\nwindow.addEventListener(\"load\", function(event) {\n // REWRITE NAV TO BE CLOSEST megamenu\n let megamenu = document.querySelector(\".mega-menu\");\n let responsiveWidth = parseInt(megamenu.getAttribute(\"data-responsive-width\"));\n // toggle button for the responsive menu\n let responsive = megamenu.querySelector(\"button.responsive-toggle\");\n responsive.addEventListener(\"click\", function(evt) {\n // open menu\n if (evt.target.getAttribute(\"aria-expanded\") == \"false\") {\n evt.target.setAttribute(\"aria-expanded\", \"true\");\n megamenu.setAttribute(\"data-menu-state\", \"focus\");\n } else {\n evt.target.setAttribute(\"aria-expanded\", \"false\");\n megamenu.setAttribute(\"data-menu-state\", \"closed\");\n }\n });\n // events for the top-level menu buttons for dropdowns\n let triggers = megamenu.querySelectorAll(\"button.mega-menu-toggle\");\n const urlParams = new URLSearchParams(window.location.search);\n for (let e of triggers){\n //click events for the top-level menu buttons for dropdowns\n // If no debug URL parameter that does simulate a Only-Hover nav on desktop, or independently from it in mobile contexts:\n if (urlParams.get(\"debug\") !== \"mainnav-hover\" || document.body.classList.contains(\"mobile\")) e.addEventListener(\"click\", function(evt) {\n let opened_menu = megamenu.querySelector('.mega-menu .mega-menu-toggle[aria-expanded=\"true\"]');\n // in the case of hover open, a click just switches the state to focus open\n // only happens in non-responsive mode\n if (megamenu.getAttribute(\"data-menu-state\") == \"hover\") {\n megamenu.setAttribute(\"data-menu-state\", \"focus\");\n responsive.setAttribute(\"aria-expanded\", \"true\");\n evt.target.focus();\n return;\n }\n // close any sub menus opened previously\n if (opened_menu != null && evt.target != opened_menu) // close other opened_menu\n opened_menu.setAttribute(\"aria-expanded\", \"false\");\n // open menu\n if (evt.target.getAttribute(\"aria-expanded\") == \"false\") {\n evt.target.setAttribute(\"aria-expanded\", \"true\");\n megamenu.setAttribute(\"data-menu-state\", \"focus\");\n responsive.setAttribute(\"aria-expanded\", \"true\");\n } else {\n evt.target.setAttribute(\"aria-expanded\", \"false\");\n megamenu.setAttribute(\"data-menu-state\", \"closed\");\n if (document.body.offsetWidth > responsiveWidth) responsive.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n //}\n // hover\n $81e41802ed93763f$exports(e, function(evt) {\n if (document.body.offsetWidth <= responsiveWidth) return;\n // ignore hover effects if menu has been opened by focus\n if (megamenu.getAttribute(\"data-menu-state\") == \"focus\") return;\n megamenu.setAttribute(\"data-menu-state\", \"hover\");\n evt.target.setAttribute(\"aria-expanded\", \"true\");\n }, function(evt) {\n if (document.body.offsetWidth <= responsiveWidth) return;\n // if a focus in the menu has happened, take precedent\n if (megamenu.getAttribute(\"data-menu-state\") == \"focus\") return;\n // if relatedTarget is an open mega-sub-menu, don't close\n if (evt.relatedTarget != null && evt.relatedTarget.classList.contains(\"mega-sub-menu\")) return;\n megamenu.setAttribute(\"data-menu-state\", \"closed\");\n evt.target.setAttribute(\"aria-expanded\", \"false\");\n }).options({\n timeout: 200,\n interval: 50\n });\n }\n // blur used to detect if focus has moved out of the mega menu\n let focusables = megamenu.querySelectorAll(\".mega-sub-menu a, button.mega-menu-toggle\");\n for (let e of focusables)e.addEventListener(\"blur\", function(evt) {\n if (megamenu.getAttribute(\"data-menu-state\") != \"focus\") return;\n // detect window change and don't close things\n if (document.activeElement === this) return;\n // if click on non-clickable, close the menu\n if (evt.relatedTarget == null) {\n megamenu.setAttribute(\"data-menu-state\", \"closed\");\n megamenu.querySelector('.mega-menu-toggle[aria-expanded=\"true\"]').setAttribute(\"aria-expanded\", \"false\");\n responsive.setAttribute(\"aria-expanded\", \"false\");\n } else if (evt.relatedTarget != null && evt.relatedTarget.closest(\".mega-menu\") == null) {\n megamenu.setAttribute(\"data-menu-state\", \"closed\");\n megamenu.querySelector('.mega-menu-toggle[aria-expanded=\"true\"]').setAttribute(\"aria-expanded\", \"false\");\n responsive.setAttribute(\"aria-expanded\", \"false\");\n }\n });\n let subs = megamenu.querySelectorAll(\"div.mega-sub-menu\");\n for (let e of subs)e.addEventListener(\"focus\", function(evt) {\n // if in hover state and click on the opened menu, switch to focus with focus on toggle\n if (megamenu.getAttribute(\"data-menu-state\") == \"hover\") {\n megamenu.setAttribute(\"data-menu-state\", \"focus\");\n evt.target.previousElementSibling.focus();\n } else if (megamenu.getAttribute(\"data-menu-state\") == \"focus\" && evt.relatedTarget != null) evt.relatedTarget.focus();\n });\n let submenus = document.querySelectorAll(\"button.mega-menu-toggle + div.mega-sub-menu\");\n for (let e of submenus)// handle hovering moving from opened sub-menu to the toggle button that controls it\n e.addEventListener(\"mouseleave\", function(evt) {\n if (document.body.offsetWidth <= responsiveWidth) return;\n if (megamenu.getAttribute(\"data-menu-state\") == \"focus\") return;\n // target is the div.sub-menu, related target is the toggle button before it\n if (evt.relatedTarget != null && evt.relatedTarget == evt.target.previousElementSibling) return;\n megamenu.setAttribute(\"data-menu-state\", \"closed\");\n let open_toggle_button = document.querySelector('.mega-menu button[aria-expanded=\"true\"]');\n if (open_toggle_button) open_toggle_button.setAttribute(\"aria-expanded\", \"false\");\n });\n let menuLinks = document.querySelectorAll(\"button.mega-menu-toggle + div.mega-sub-menu a\");\n for (let e of menuLinks)e.addEventListener(\"focus\", function(evt) {\n // if already having focus in the mega menu, not an issue\n if (megamenu.getAttribute(\"data-menu-state\") == \"focus\") return;\n // set focus state\n megamenu.setAttribute(\"data-menu-state\", \"focus\");\n responsive.setAttribute(\"aria-expanded\", \"true\");\n });\n document.addEventListener(\"keydown\", function(event) {\n if (event.key === \"Escape\") {\n let menu = document.querySelector(\".mega-menu\");\n if (document.body.offsetWidth <= responsiveWidth) {\n // responsive mode\n //if there is a focused element, reset focus to responsive toggle\n if (document.activeElement != null && document.activeElement != document.body && document.activeElement.closest(\".mega-menu\") !== null) menu.querySelector(\".responsive-toggle\").focus();\n // set all things to close\n for (let b of menu.querySelectorAll('button[aria-expanded=\"true\"]'))b.setAttribute(\"aria-expanded\", \"false\");\n } else {\n // desktop mode\n let bu1 = menu.querySelector('button.mega-menu-toggle[aria-expanded=\"true\"]');\n bu1?.setAttribute(\"aria-expanded\", \"false\");\n bu1?.focus();\n menu.setAttribute(\"data-hover-open\", \"false\");\n menu.setAttribute(\"data-menu-state\", \"closed\");\n }\n }\n });\n});\n\n\nfunction $0310234b6907e102$export$40ba32d7e7abefe9(el) {\n el.addEventListener(\"click\", (e)=>{\n let setExpanded = e.target.getAttribute(\"aria-expanded\") === \"true\" ? \"false\" : \"true\";\n if (e.target.tagName === \"BUTTON\" || e.target.tagName === \"A\") e.target.setAttribute(\"aria-expanded\", setExpanded);\n });\n}\nfunction $0310234b6907e102$export$d0a8044dce8ff2fc() {\n const mq = window.matchMedia(\"(max-width: 40em)\");\n mq.matches ? setToMobile() : setToDesktop();\n mq.addEventListener(\"change\", (event)=>event.matches ? setToMobile() : setToDesktop());\n function setToDesktop() {\n document.body.classList.add(\"desktop\");\n document.body.classList.remove(\"mobile\");\n }\n function setToMobile() {\n document.body.classList.add(\"mobile\");\n document.body.classList.remove(\"desktop\");\n }\n}\nfunction $0310234b6907e102$export$18148d12c805c5b0(email) {\n var re = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/;\n return re.test(email);\n}\n\n\nlet $29701fd2209d9ab4$var$mainSearchToggle = document.getElementById(\"main-search-toggle\"), $29701fd2209d9ab4$var$resizeFunc;\n$29701fd2209d9ab4$var$mainSearchToggle.setAttribute(\"aria-expanded\", \"false\");\n(0, $0310234b6907e102$export$40ba32d7e7abefe9)($29701fd2209d9ab4$var$mainSearchToggle);\nfunction $29701fd2209d9ab4$var$resizeEndHappened() {\n if (window.getComputedStyle($29701fd2209d9ab4$var$mainSearchToggle).display !== \"none\") {\n $29701fd2209d9ab4$var$mainSearchToggle.setAttribute(\"aria-expanded\", \"false\");\n (0, $0310234b6907e102$export$40ba32d7e7abefe9)($29701fd2209d9ab4$var$mainSearchToggle);\n }\n}\nwindow.onresize = function() {\n clearTimeout($29701fd2209d9ab4$var$resizeFunc);\n $29701fd2209d9ab4$var$resizeFunc = setTimeout($29701fd2209d9ab4$var$resizeEndHappened, 100);\n};\n\n\nclass $48df0946d6b0a87e$var$ComboboxSearch extends HTMLElement {\n constructor(){\n super();\n this.input = this.querySelector('input[type=\"search\"]');\n this.listbox = this.querySelector(\"#ecbf-combobox-listbox\");\n this.listboxOptionContainerProducts = this.querySelector(\"[data-products-list]\");\n this.listboxOptionContainerPages = this.querySelector(\"[data-pages-list]\");\n this.statusElement = this.querySelector(\"[data-ecbf-combobox-search-status]\");\n this.filteredOptions = [];\n this.searchTerm = \"\";\n this.allProductOptions = [];\n this.allPageOptions = [];\n this.startsOpen = this.getAttribute(\"starts-open\");\n if (this.input) this.input.addEventListener(\"input\", this.debounce((event1)=>{\n this.onChange(event1);\n }, 200).bind(this));\n if (this.startsOpen === \"true\") this.input.setAttribute(\"aria-expanded\", \"true\");\n this.getAndHandleAllOptions();\n this.setupEventListeners();\n }\n getAndHandleAllOptions() {\n this.listbox.querySelectorAll(\"[data-products-list] li\").forEach((product)=>this.allProductOptions.push(product));\n this.listbox.querySelectorAll(\"[data-pages-list] li\").forEach((page)=>this.allPageOptions.push(page));\n }\n debounce(fn, wait) {\n let t;\n return (...args)=>{\n clearTimeout(t);\n t = setTimeout(()=>fn.apply(this, args), wait);\n };\n }\n getQuery() {\n return this.input.value.trim();\n }\n setupEventListeners() {\n this.input.form.addEventListener(\"submit\", this.onFormSubmit.bind(this));\n this.input.addEventListener(\"focusout\", this.onFocusOut.bind(this));\n this.input.addEventListener(\"input\", this.onInput.bind(this));\n this.addEventListener(\"keyup\", this.onKeyup.bind(this));\n }\n onChange() {\n const newSearchTerm = this.getQuery();\n this.updateSearchForTerm(newSearchTerm);\n this.searchTerm = newSearchTerm;\n if (!this.searchTerm.length) {\n this.close(true);\n return;\n }\n this.listboxOptionContainerProducts.innerHTML = \"\";\n this.listboxOptionContainerPages.innerHTML = \"\";\n this.getSearchResults(this.searchTerm);\n }\n updateSearchForTerm(newTerm) {\n const searchForTextElement = this.querySelector(\"[data-ecbf-combobox-search-search-for-text]\");\n searchForTextElement.innerText = newTerm;\n }\n getLowercaseContentWithoutPrice(node) {\n if (node.querySelector(\"a\") !== null) return node.querySelector(\"a\").textContent.toLowerCase();\n else return node.textContent.toLowerCase();\n }\n getSearchResults(searchTerm) {\n this.allProductOptions.forEach((o)=>{\n let option = o;\n if (searchTerm.length === 0 || this.getLowercaseContentWithoutPrice(option).includes(searchTerm) === true) {\n this.filteredOptions.push(option);\n this.listboxOptionContainerProducts.appendChild(option);\n }\n });\n this.allPageOptions.forEach((o)=>{\n let option = o;\n if (searchTerm.length === 0 || this.getLowercaseContentWithoutPrice(option).includes(searchTerm) === true) {\n this.filteredOptions.push(option);\n this.listboxOptionContainerPages.appendChild(option);\n }\n });\n const realTimeOptionAmount1 = this.listboxOptionContainerProducts.querySelectorAll(\"[data-products-list] li\")?.length;\n const realTimeOptionAmount2 = this.listboxOptionContainerPages.querySelectorAll(\"[data-pages-list] li\")?.length;\n if (realTimeOptionAmount1 || realTimeOptionAmount2) {\n if (this.input.value !== \"\") setTimeout(()=>{\n this.setLiveRegionText(`${realTimeOptionAmount1 + realTimeOptionAmount2} Ergebnisse gefunden: ${realTimeOptionAmount1 ? realTimeOptionAmount1 : 0} Produkte und ${realTimeOptionAmount2 ? realTimeOptionAmount2 : 0} Seiten`);\n }, 1100);\n else this.yieldNoResultsInLiveRegion();\n } else this.yieldNoResultsInLiveRegion();\n this.open();\n }\n yieldNoResultsInLiveRegion() {\n this.setLiveRegionText(\"No results found. Please try again with another search term.\");\n }\n setLiveRegionText(statusText) {\n this.statusElement.setAttribute(\"aria-hidden\", \"false\");\n this.statusElement.textContent = statusText;\n setTimeout(()=>{\n this.statusElement.setAttribute(\"aria-hidden\", \"true\");\n }, 1000);\n }\n onInput() {\n this.open();\n }\n open() {\n if (this.getQuery().length >= 2) setTimeout(()=>{\n this.input.setAttribute(\"aria-expanded\", \"true\");\n }, 500);\n this.listbox.style.width = this.input.getBoundingClientRect().width + \"px\";\n this.listbox.style.top = this.input.getBoundingClientRect().height + \"px\";\n }\n close() {\n this.input.setAttribute(\"aria-expanded\", \"false\");\n }\n onKeyup() {\n if (!this.getQuery().length) this.close(true);\n event.preventDefault();\n switch(event.code){\n case \"ArrowUp\":\n this.switchOption(\"up\");\n break;\n case \"ArrowDown\":\n this.switchOption(\"down\");\n break;\n case \"Enter\":\n this.selectOption();\n break;\n case \"Escape\":\n this.close();\n this.input.select();\n break;\n default:\n this.emptyAriaActivedescendant();\n }\n }\n emptyAriaActivedescendant() {\n this.input.setAttribute(\"aria-activedescendant\", \"\");\n }\n selectOption() {\n const selectedOption = this.querySelector('[aria-selected=\"true\"] a, button[aria-selected=\"true\"]');\n if (selectedOption) selectedOption.click();\n }\n switchOption(direction) {\n if (this.getQuery() === \"\") return;\n const moveUp = direction === \"up\";\n const selectedElement = this.querySelector('[aria-selected=\"true\"]');\n // offsetParnet filtert unsichtbare Elemente heraus:\n const allVisibleElements = Array.from(this.querySelectorAll('[role=\"option\"]')).filter((el)=>el.offsetParent !== null);\n let activeElementIndex = 0;\n if (moveUp && !selectedElement) return;\n let selectedElementIndex = -1;\n let i = 0;\n while(selectedElementIndex === -1 && i <= allVisibleElements.length){\n if (allVisibleElements[i] === selectedElement) selectedElementIndex = i;\n i++;\n }\n this.statusElement.textContent = \"\";\n if (!moveUp && selectedElement) activeElementIndex = selectedElementIndex === allVisibleElements.length - 1 ? 0 : selectedElementIndex + 1;\n else if (moveUp) activeElementIndex = selectedElementIndex === 0 ? allVisibleElements.length - 1 : selectedElementIndex - 1;\n if (activeElementIndex === selectedElementIndex) return;\n const activeElement = allVisibleElements[activeElementIndex];\n activeElement.setAttribute(\"aria-selected\", true);\n if (selectedElement) selectedElement.setAttribute(\"aria-selected\", false);\n this.input.setAttribute(\"aria-activedescendant\", activeElement.id);\n }\n onFocusOut() {\n setTimeout(()=>{\n if (!this.contains(document.activeElement)) this.close();\n });\n }\n onFormSubmit() {\n if (!this.getQuery().length || this.querySelector('[aria-selected=\"true\"] a')) event.preventDefault();\n }\n}\ncustomElements.define(\"ecbf-combobox-search\", $48df0946d6b0a87e$var$ComboboxSearch);\n\n\n\n/* focusin/out event polyfill (firefox) */ !function() {\n var w = window, d = w.document;\n if (w.onfocusin === undefined) {\n d.addEventListener(\"focus\", addPolyfill, true);\n d.addEventListener(\"blur\", addPolyfill, true);\n d.addEventListener(\"focusin\", removePolyfill, true);\n d.addEventListener(\"focusout\", removePolyfill, true);\n }\n function addPolyfill(e) {\n var type = e.type === \"focus\" ? \"focusin\" : \"focusout\";\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: false\n });\n event.c1Generated = true;\n e.target.dispatchEvent(event);\n }\n function removePolyfill(e) {\n if (!e.c1Generated) {\n d.removeEventListener(\"focus\", addPolyfill, true);\n d.removeEventListener(\"blur\", addPolyfill, true);\n d.removeEventListener(\"focusin\", removePolyfill, true);\n d.removeEventListener(\"focusout\", removePolyfill, true);\n }\n setTimeout(function() {\n d.removeEventListener(\"focusin\", removePolyfill, true);\n d.removeEventListener(\"focusout\", removePolyfill, true);\n });\n }\n}();\nvar $fa81208e0a0a8f4a$var$myCarousel = function() {\n var carousel, slides, index, slidenav, settings, timer, setFocus, announceItem, animationSuspended;\n function forEachElement(elements, fn) {\n for(var i = 0; i < elements.length; i++)fn(elements[i], i);\n }\n function removeClass(el, className) {\n if (el.classList) el.classList.remove(className);\n else el.className = el.className.replace(new RegExp(\"(^|\\\\b)\" + className.split(\" \").join(\"|\") + \"(\\\\b|$)\", \"gi\"), \" \");\n }\n function hasClass(el, className) {\n if (el.classList) return el.classList.contains(className);\n else return new RegExp(\"(^| )\" + className + \"( |$)\", \"gi\").test(el.className);\n }\n function init(set) {\n settings = set;\n carousel = document.getElementById(settings.id);\n slides = carousel.querySelectorAll(\".slide\");\n carousel.className = \"active carousel\";\n var ctrls = document.createElement(\"ul\");\n ctrls.className = \"controls\";\n ctrls.innerHTML = '
  • ';\n ctrls.querySelector(\".btn-prev\").addEventListener(\"click\", function() {\n prevSlide(true);\n });\n ctrls.querySelector(\".btn-next\").addEventListener(\"click\", function() {\n nextSlide(true);\n });\n carousel.appendChild(ctrls);\n if (settings.slidenav || settings.animate) {\n slidenav = document.createElement(\"ul\");\n slidenav.className = \"slidenav\";\n if (settings.animate) {\n var li = document.createElement(\"li\");\n if (settings.startAnimated) li.innerHTML = '';\n else li.innerHTML = '';\n slidenav.appendChild(li);\n }\n if (settings.slidenav) forEachElement(slides, function(el, i) {\n var li = document.createElement(\"li\");\n var klass = i === 0 ? 'class=\"current\" ' : \"\";\n var kurrent = i === 0 ? ' (Aktuell)' : \"\";\n li.innerHTML = \"\";\n slidenav.appendChild(li);\n });\n slidenav.addEventListener(\"click\", function(event) {\n var button = event.target;\n if (button.localName == \"button\") {\n if (button.getAttribute(\"data-slide\")) //stopAnimation();\n setSlides(button.getAttribute(\"data-slide\"), true);\n else if (button.getAttribute(\"data-action\") == \"stop\") stopAnimation();\n else if (button.getAttribute(\"data-action\") == \"start\") startAnimation();\n }\n }, true);\n carousel.className = \"active carousel with-slidenav\";\n carousel.appendChild(slidenav);\n }\n var liveregion = document.createElement(\"div\");\n liveregion.setAttribute(\"aria-live\", \"polite\");\n liveregion.setAttribute(\"aria-atomic\", \"true\");\n liveregion.setAttribute(\"class\", \"liveregion visually-hidden\");\n carousel.appendChild(liveregion);\n slides[0].parentNode.addEventListener(\"transitionend\", function(event) {\n var slide = event.target;\n removeClass(slide, \"in-transition\");\n if (hasClass(slide, \"current\")) {\n if (setFocus) {\n slide.setAttribute(\"tabindex\", \"-1\");\n slide.focus();\n setFocus = false;\n }\n }\n });\n carousel.addEventListener(\"mouseenter\", suspendAnimation);\n carousel.addEventListener(\"mouseleave\", function(event) {\n if (animationSuspended) startAnimation();\n });\n carousel.addEventListener(\"focusin\", function(event) {\n if (!hasClass(event.target, \"slide\")) suspendAnimation();\n });\n carousel.addEventListener(\"focusout\", function(event) {\n if (!hasClass(event.target, \"slide\") && animationSuspended) startAnimation();\n });\n index = 0;\n setSlides(index);\n if (settings.startAnimated) timer = setTimeout(nextSlide, 5000);\n }\n function setSlides(new_current, setFocusHere, transition, announceItemHere) {\n setFocus = typeof setFocusHere !== \"undefined\" ? setFocusHere : false;\n announceItem = typeof announceItemHere !== \"undefined\" ? announceItemHere : false;\n transition = typeof transition !== \"undefined\" ? transition : \"none\";\n new_current = parseFloat(new_current);\n var length = slides.length;\n var new_next = new_current + 1;\n var new_prev = new_current - 1;\n if (new_next === length) new_next = 0;\n else if (new_prev < 0) new_prev = length - 1;\n for(var i = slides.length - 1; i >= 0; i--)slides[i].className = \"slide\";\n slides[new_next].className = \"next slide\" + (transition == \"next\" ? \" in-transition\" : \"\");\n slides[new_next].setAttribute(\"aria-hidden\", \"true\");\n slides[new_prev].className = \"prev slide\" + (transition == \"prev\" ? \" in-transition\" : \"\");\n slides[new_prev].setAttribute(\"aria-hidden\", \"true\");\n slides[new_current].className = \"current slide\";\n slides[new_current].removeAttribute(\"aria-hidden\");\n if (announceItem) carousel.querySelector(\".liveregion\").textContent = \"Folie \" + (new_current + 1) + \" von \" + slides.length;\n if (settings.slidenav) {\n var buttons = carousel.querySelectorAll(\".slidenav button[data-slide]\");\n for(var j = buttons.length - 1; j >= 0; j--){\n buttons[j].className = \"\";\n buttons[j].innerHTML = 'Folie ' + (j + 1);\n }\n buttons[new_current].className = \"current\";\n buttons[new_current].innerHTML = 'Folie ' + (new_current + 1) + ' (Aktuell)';\n }\n index = new_current;\n }\n function nextSlide(announceItem) {\n announceItem = typeof announceItem !== \"undefined\" ? announceItem : false;\n var length = slides.length, new_current = index + 1;\n if (new_current === length) new_current = 0;\n setSlides(new_current, false, \"prev\", announceItem);\n if (settings.animate) timer = setTimeout(nextSlide, 5000);\n }\n function prevSlide(announceItem) {\n announceItem = typeof announceItem !== \"undefined\" ? announceItem : false;\n var length = slides.length, new_current = index - 1;\n if (new_current < 0) new_current = length - 1;\n setSlides(new_current, false, \"next\", announceItem);\n }\n function stopAnimation() {\n clearTimeout(timer);\n settings.animate = false;\n animationSuspended = false;\n _this = carousel.querySelector(\"[data-action]\");\n _this.innerHTML = 'Starte Animation \\u25B6';\n _this.setAttribute(\"data-action\", \"start\");\n }\n function startAnimation() {\n settings.animate = true;\n animationSuspended = false;\n timer = setTimeout(nextSlide, 5000);\n _this = carousel.querySelector(\"[data-action]\");\n //console.log(_this);\n _this.innerHTML = 'Stoppe Animation \\uFFED';\n _this.setAttribute(\"data-action\", \"stop\");\n }\n function suspendAnimation() {\n if (settings.animate) {\n clearTimeout(timer);\n settings.animate = false;\n animationSuspended = true;\n }\n }\n return {\n init: init,\n next: nextSlide,\n prev: prevSlide,\n goto: setSlides,\n stop: stopAnimation,\n start: startAnimation\n };\n};\nfunction $fa81208e0a0a8f4a$export$99e00de73f33b819(carouselAutostart) {\n let animate = false;\n let startAnimated = false;\n let c = new $fa81208e0a0a8f4a$var$myCarousel();\n if (carouselAutostart) {\n animate = true;\n startAnimated = true;\n }\n c.init({\n id: \"carousel\",\n slidenav: true,\n animate: animate,\n startAnimated: startAnimated\n });\n}\n\n\nparcelRequire(\"5AlLF\");\nfunction $80cf29548ea3ec95$export$c4035ec45ab78831() {\n let sortOption = document.querySelector(\"#sort\"), filterLiveRegion = document.querySelector(\"#filter-live-region\"), data, order;\n sortOption.addEventListener(\"change\", (e)=>{\n switch(e.target.value){\n case \"name-desc\":\n data = \"name\";\n order = \"desc\";\n filterLiveRegion.textContent = \"Sorted by name, descending\";\n break;\n case \"name-asc\":\n data = \"name\";\n order = \"asc\";\n filterLiveRegion.textContent = \"Sorted by name, ascending\";\n break;\n case \"price-desc\":\n data = \"price\";\n order = \"desc\";\n filterLiveRegion.textContent = \"Sorted by price, descending\";\n break;\n case \"price-asc\":\n data = \"price\";\n order = \"asc\";\n filterLiveRegion.textContent = \"Sorted by price, ascending\";\n break;\n default:\n filterLiveRegion.textContent = \"No special sort active\";\n break;\n }\n tinysort(\"#product-list li\", {\n data: data,\n order: order\n });\n });\n}\n\n\n\nfunction $d4c66d76d832dca7$export$3132a456f5dcd746() {\n let forms = document.querySelectorAll(\"[data-order]\"), requiredFields, emailFields, registerUserCheckBox, passwordField1, passwordField2, passwordFieldHideShows, registerUserArea;\n forms.forEach((form)=>{\n registerUserCheckBox = document.querySelector(\"#registerUser\");\n passwordField1 = document.getElementById(\"logonData.loginPassword\");\n passwordField1 = document.getElementById(\"logonData.loginPassword\");\n passwordField2 = document.getElementById(\"logonData.loginPasswordRepeat\");\n passwordFieldHideShows = document.querySelectorAll(\".passwordHideShow\");\n registerUserArea = document.getElementById(\"registerUserArea\");\n registerUserCheckBox.addEventListener(\"change\", (e)=>{\n if (e.target.checked) registerUserArea.removeAttribute(\"hidden\");\n else registerUserArea.setAttribute(\"hidden\", true);\n });\n /**\n * @param {HTMLElement} passwordFieldHideShow\n */ passwordFieldHideShows.forEach((passwordFieldHideShow)=>{\n /**\n * @param {Event} e\n */ passwordFieldHideShow.setAttribute(\"aria-pressed\", \"false\");\n passwordFieldHideShow.addEventListener(\"click\", (e)=>{\n /** @const {HTMLElement} */ const target = e.target;\n const liveRegion = target.nextElementSibling, passwordInput = target.previousElementSibling;\n if (passwordInput.getAttribute(\"type\") === \"password\") {\n passwordInput.setAttribute(\"type\", \"text\");\n target.setAttribute(\"aria-pressed\", \"true\");\n liveRegion.textContent = \"Password sichtdata-input\";\n } else {\n passwordInput.setAttribute(\"type\", \"password\");\n target.setAttribute(\"aria-pressed\", \"false\");\n liveRegion.textContent = \"Password unsichtdata-input\";\n }\n });\n });\n /**\n * @param {Event} e\n */ form.addEventListener(\"submit\", (e)=>{\n e.preventDefault();\n // Do not cache requiredFields!\n requiredFields = document.querySelectorAll(\".data-input [aria-required='true']\");\n emailFields = document.querySelectorAll(\"input[type='email']\");\n // Looe through all mandatory fields\n /**\n * @param {HTMLInputElement} requiredField\n */ requiredFields.forEach((requiredField)=>{\n // Is ‘requiredField’ a fieldset in which an input is selected?\n let requiredFieldsetisChecked = requiredField.tagName === \"FIELDSET\" && requiredField.value;\n // Identify mandatory fields or radio groups that have not been completed or checked, or that are in an error state\n const fieldInputEmptyThoughRequired = !requiredField.checked && requiredField.value === \"\" || !!requiredFieldsetisChecked;\n // Find out the ID of the error message\n let idRefRequired = requiredField.getAttribute(\"data-required-error\");\n if (fieldInputEmptyThoughRequired) {\n // Set empty required fields to a semantic error state\n requiredField.setAttribute(\"aria-invalid\", \"true\");\n // Associate the error message text\n requiredField.setAttribute(\"aria-describedby\", idRefRequired);\n // Field completed? Then resolve any error state:\n document.getElementById(idRefRequired).removeAttribute(\"hidden\");\n } else {\n // Remove link to error message\n requiredField.removeAttribute(\"aria-describedby\");\n document.getElementById(idRefRequired).setAttribute(\"hidden\", true);\n // Remove semaantic error state\n requiredField.removeAttribute(\"aria-invalid\");\n }\n let idRefMismatch = passwordField2.getAttribute(\"data-pw-mismatch-error\");\n // If both password fields are filled in but do not match:\n if (passwordField1.value && passwordField2.value && passwordField1.value !== passwordField2.value) {\n passwordField2.setAttribute(\"aria-describedby\", idRefMismatch);\n passwordField2.setAttribute(\"aria-invalid\", \"true\");\n document.getElementById(idRefMismatch).removeAttribute(\"hidden\");\n } else if (// If both password fields are filled in and match:\n passwordField1.value && passwordField2.value && passwordField1.value === passwordField2.value) {\n // Resolve with error message\n passwordField2.removeAttribute(\"aria-describedby\");\n document.getElementById(idRefMismatch).setAttribute(\"hidden\", true);\n // Resolving a semantic error state\n passwordField2.removeAttribute(\"aria-invalid\");\n }\n // Loop through all email input fields\n /**\n * @param {HTMLElement} emailField\n */ emailFields.forEach((emailField)=>{\n // Hole die ID der Fehlermeldung\n let idRefEmail = emailField.getAttribute(\"data-email-syntax-error\");\n if (emailField.value && !(0, $0310234b6907e102$export$18148d12c805c5b0)(emailField.value)) {\n // Wenn E-Mail-Adresse nicht der üblichen E-Mail-Syntax entspricht:\n emailField.setAttribute(\"aria-describedby\", idRefEmail);\n document.getElementById(idRefEmail).removeAttribute(\"hidden\");\n } else {\n // Wenn E-Mail der üblichen E-Mail-Syntax entspricht:\n emailField.removeAttribute(\"aria-invalid\");\n emailField.removeAttribute(\"aria-describedby\");\n document.getElementById(idRefEmail).hidden = true;\n }\n });\n });\n if (!document.querySelectorAll(\".data-input .form__error:not([hidden])\").length) {\n window.location.href = \"order-summary.html\";\n let address_salutation = document.querySelector('input[name=\"address.radiogroup.salutation\"]:checked').value;\n localStorage.setItem(\"address.salutation\", address_salutation);\n let address_firstName = document.getElementById(\"address.firstName\").value;\n localStorage.setItem(\"address.firstName\", address_firstName);\n let address_lastName = document.getElementById(\"address.lastName\").value;\n localStorage.setItem(\"address.lastName\", address_lastName);\n let address_company = document.getElementById(\"address.company\").value;\n localStorage.setItem(\"address.company\", address_company);\n let address_address1 = document.getElementById(\"address.address1\").value;\n localStorage.setItem(\"address.address1\", address_address1);\n let address_address2 = document.getElementById(\"address.address2\").value;\n localStorage.setItem(\"address.address2\", address_address2);\n let address_zipCode = document.getElementById(\"address.zipCode\").value;\n localStorage.setItem(\"address.zipCode\", address_zipCode);\n let address_city = document.getElementById(\"address.city\").value;\n localStorage.setItem(\"address.city\", address_city);\n let address_email = document.getElementById(\"address.email\").value;\n localStorage.setItem(\"address.email\", address_email);\n if (document.querySelector('input[name=\"addressIsInvoiceAddress\"]:checked')) {\n let addressIsInvoiceAddress = document.querySelector('input[name=\"addressIsInvoiceAddress\"]:checked').value;\n if (addressIsInvoiceAddress === \"on\") localStorage.setItem(\"addressIsInvoiceAddress\", addressIsInvoiceAddress);\n else localStorage.setItem(\"addressIsInvoiceAddress\", \"off\");\n } else localStorage.removeItem(\"addressIsInvoiceAddress\");\n let address_invoice_salutation = document.querySelector('input[name=\"address-invoice.radiogroup.salutation\"]:checked').value;\n localStorage.setItem(\"address-invoice.salutation\", address_invoice_salutation);\n let address_invoice_firstName = document.getElementById(\"address-invoice.firstName\").value;\n localStorage.setItem(\"address-invoice.firstName\", address_invoice_firstName);\n let address_invoice_lastName = document.getElementById(\"address-invoice.lastName\").value;\n localStorage.setItem(\"address-invoice.lastName\", address_invoice_lastName);\n let address_invoice_company = document.getElementById(\"address-invoice.company\").value;\n localStorage.setItem(\"address-invoice.company\", address_invoice_company);\n let address_invoice_address1 = document.getElementById(\"address-invoice.address1\").value;\n localStorage.setItem(\"address-invoice.address1\", address_invoice_address1);\n let address_invoice_address2 = document.getElementById(\"address-invoice.address2\").value;\n localStorage.setItem(\"address-invoice.address2\", address_invoice_address2);\n let address_invoice_zipCode = document.getElementById(\"address-invoice.zipCode\").value;\n localStorage.setItem(\"address-invoice.zipCode\", address_invoice_zipCode);\n let address_invoice_city = document.getElementById(\"address-invoice.city\").value;\n localStorage.setItem(\"address-invoice.city\", address_invoice_city);\n let address_invoice_email = document.getElementById(\"address-invoice.email\").value;\n localStorage.setItem(\"address-invoice.email\", address_invoice_email);\n } else {\n let errorAmount = document.querySelectorAll(\".data-input .form__error:not([hidden])\").length;\n // Communicate that input errors have occurred via document title and live region\n document.title = `${errorAmount} Fehler bei der Eingabe` + document.title;\n document.querySelector(\"#filter-live-region\").textContent = `${errorAmount} Fehler bei der Eingabe`;\n // Find the first incorrect field and focus on it\n if (document.querySelector('input[aria-invalid=\"true\"]')) document.querySelector('input[aria-invalid=\"true\"]').focus();\n }\n });\n });\n}\n\n\n\nvar $gCiTj = parcelRequire(\"gCiTj\");\nfunction $3f763f07b7f268f2$export$7f9953c70dacfd7f() {\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: no-preference)\");\n const hasReducedMotionPreference = localStorage.getItem(\"animating\") === \"false\";\n const button = document.querySelector(\"#festive-animation-ani-toggle\");\n function mQDetection() {\n if (mediaQuery.matches) {\n document.body.classList.add(\"allows-animation\");\n document.body.classList.add(\"show-animation-controls\");\n localStorage.setItem(\"animating\", \"true\");\n } else {\n document.body.classList.remove(\"allows-animation\");\n document.body.classList.remove(\"show-animation-controls\");\n localStorage.setItem(\"animating\", \"false\");\n }\n }\n if (mediaQuery.matches && !hasReducedMotionPreference) {\n document.body.classList.add(\"allows-animation\");\n document.body.classList.add(\"show-animation-controls\");\n button.textContent = \"Pause animation\";\n } else {\n document.body.classList.remove(\"allows-animation\");\n button.textContent = \"Start animation\";\n }\n if (hasReducedMotionPreference) button.textContent = \"Start animation\";\n if (localStorage.getItem(\"animating\") === \"false\") {\n document.body.classList.remove(\"allows-animation\");\n document.body.classList.add(\"show-animation-controls\");\n button.textContent = \"Start animation\";\n }\n mQDetection();\n mediaQuery.addEventListener(\"change\", ()=>{\n mQDetection();\n });\n button.addEventListener(\"click\", ()=>{\n if (document.body.classList.contains(\"allows-animation\")) {\n // Disbale animation\n document.body.classList.remove(\"allows-animation\");\n localStorage.setItem(\"animating\", \"false\");\n button.textContent = \"Start animation\";\n } else {\n // Enabke animation\n document.body.classList.add(\"allows-animation\");\n localStorage.setItem(\"animating\", \"true\");\n button.textContent = \"Pause animation\";\n }\n });\n}\n\n\n// eslint-disable-next-line\nconst $24e87f2b64c7c1bd$var$mainSearchToggle = document.getElementById(\"main-search-toggle\");\nconst $24e87f2b64c7c1bd$var$cookieModal = document.querySelector(\"#cookie-modal\");\nconst $24e87f2b64c7c1bd$var$cartModal = document.querySelector(\"#cart-modal\");\nconst $24e87f2b64c7c1bd$var$urlParams = new URLSearchParams(window.location.search);\n// eslint-disable-next-line\nconst $24e87f2b64c7c1bd$var$cookieModalTrigger = document.querySelector(\"[data-cookie-modal-trigger]\");\nconst $24e87f2b64c7c1bd$var$cartModalTriggers = document.querySelectorAll(\"[data-cart-modal-trigger]\");\nconst $24e87f2b64c7c1bd$var$triggerBigImageDialog = document.querySelector(\"#trigger-big-image-dialog\");\nconst $24e87f2b64c7c1bd$var$bigImageDialog = document.querySelector(\"#big-image\");\n(0, $gCiTj.cart)();\n// eslint-disable-next-line no-undef\nPetiteVue.createApp().mount(\"#content\");\n// Dialog\nif ($24e87f2b64c7c1bd$var$triggerBigImageDialog) $24e87f2b64c7c1bd$var$triggerBigImageDialog.addEventListener(\"click\", function() {\n $24e87f2b64c7c1bd$var$bigImageDialog.showModal();\n});\nif ($24e87f2b64c7c1bd$var$bigImageDialog) $24e87f2b64c7c1bd$var$bigImageDialog.addEventListener(\"click\", function(event) {\n let rect = $24e87f2b64c7c1bd$var$bigImageDialog.getBoundingClientRect();\n let isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;\n if (!isInDialog) $24e87f2b64c7c1bd$var$bigImageDialog.close();\n});\n$24e87f2b64c7c1bd$var$cartModalTriggers.forEach((cartModalTrigger)=>{\n cartModalTrigger.addEventListener(\"click\", ()=>{\n $24e87f2b64c7c1bd$var$cartModal.showModal();\n });\n});\n// Because the following is a modal dialog, prevent closing via ESC key press\n$24e87f2b64c7c1bd$var$cookieModal.addEventListener(\"cancel\", (event)=>{\n event.preventDefault();\n});\nif (document.querySelector(\".festive-animation\")) (0, $3f763f07b7f268f2$export$7f9953c70dacfd7f)();\n// Debug\nif ($24e87f2b64c7c1bd$var$urlParams.get(\"debug\") === \"mainnav-open\") document.querySelector(\".mega-menu-toggle\").setAttribute(\"aria-expanded\", \"true\");\nif ($24e87f2b64c7c1bd$var$urlParams.get(\"debug\") === \"combobox\") setTimeout(()=>{\n if (document.body.classList.contains(\"mobile\")) {\n document.querySelector(\"#main-search-toggle\").setAttribute(\"aria-expanded\", \"true\");\n document.querySelector('[role=\"listbox\"]').style.width = document.querySelector('[role=\"combobox\"]').getBoundingClientRect().width + \"px\";\n }\n document.querySelector('[role=\"combobox\"]').setAttribute(\"aria-expanded\", \"true\");\n}, 500);\nif ($24e87f2b64c7c1bd$var$urlParams.get(\"debug\") === \"cart\") $24e87f2b64c7c1bd$var$cartModal.showModal();\nif ($24e87f2b64c7c1bd$var$urlParams.get(\"debug\") === \"cart-prefilled\") {\n setTimeout(()=>{\n document.getElementById(\"product-list\").querySelectorAll(\"button\")[6].click();\n }, 200);\n setTimeout(()=>{\n document.getElementById(\"product-list\").querySelectorAll(\"button\")[0].click();\n document.getElementById(\"order\").focus();\n }, 400);\n}\nif ($24e87f2b64c7c1bd$var$urlParams.get(\"debug\") === \"cookiedialog\") $24e87f2b64c7c1bd$var$cookieModal.showModal();\n// Detect the broad context\n(0, $0310234b6907e102$export$d0a8044dce8ff2fc)();\n// Close all open disclosure widgets when pressinf ESC\ndocument.addEventListener(\"keydown\", function(e) {\n if (e.key === \"Escape\") document.querySelectorAll('[aria-expanded=\"true\"]').forEach((disclosure)=>{\n disclosure.setAttribute(\"aria-expanded\", \"false\");\n });\n});\n// Deal with \"My Account\" dislosure in header\n(0, $0310234b6907e102$export$40ba32d7e7abefe9)(document.querySelector(\".account--widget__button\"));\nif (document.getElementById(\"carousel\") && $24e87f2b64c7c1bd$var$urlParams.get(\"debug\") === \"carousel-autostart\") (0, $fa81208e0a0a8f4a$export$99e00de73f33b819)(true);\nelse if (document.getElementById(\"carousel\") && $24e87f2b64c7c1bd$var$urlParams.get(\"debug\") !== \"carousel-autostart\") (0, $fa81208e0a0a8f4a$export$99e00de73f33b819)();\nif (document.querySelector(\"[data-order]\")) (0, $d4c66d76d832dca7$export$3132a456f5dcd746)();\nif (document.querySelector(\"#product-list\")) (0, $80cf29548ea3ec95$export$c4035ec45ab78831)();\n\n\n//# sourceMappingURL=index.d28a3723.js.map\n","'use strict';(function(a,b){'function'==typeof define&&define.amd?define('tinysort',function(){return b}):a.tinysort=b})(window||module||{},function(a){function c(a,b){for(var c,d=a.length,e=d;e--;)c=d-e-1,b(a[c],c);return a}function b(a,b,c){for(var d in b)(c||a[d]===e)&&(a[d]=b[d]);return a}function d(a,b,c){return l.push({prepare:a,sort:b,sortBy:c})}var e=a,f=null,g=window,h=g.document,i=parseFloat,j=/(-?\\d+\\.?\\d*)\\s*$/g,k=/(\\d+\\.?\\d*)\\s*$/g,l=[],m=function(a){return String.fromCharCode(a)},n=function(a){return Array.from([,,,],function(b,c){return m(a+c)})},o=n(0),p=n(4095),q={selector:f,order:'asc',attr:f,data:f,useVal:!1,place:'org',returns:!1,cases:!1,natural:!1,forceStrings:!1,ignoreDashes:!1,sortFunction:f,useFlex:!1,emptyEnd:!1,console:console},r=0,s=0;return g.Element&&function(a){return a.matches=a.matches||a.msMatchesSelector}(Element.prototype),b(d,{loop:c}),b(function(a){for(var A=arguments.length,B=Array(1g[h]?1:-1}return f.length-g.length}function n(a){for(var b,c=[],d=0,e=-1,f=0,g=void 0,h=void 0;g=(h=a.charAt(d++)).charCodeAt(0);)b=46===g||48<=g&&57>=g,b!==f&&(c[++e]='',f=b),c[e]+=h;return c}function t(d,a){var b=0;0!==s&&(s=0);for(var e=function(){var e=L[s],f=e.ignoreDashes?k:j;c(l,function(a){return a.prepare&&a.prepare(e)});var g=!1,h=y(d,e),o=y(a,e);if(e.sortFunction)b=e.sortFunction(d,a);else if('rand'===e.order)b=.5>Math.random()?1:-1;else if(h===o)b=0;else{if(!e.forceStrings){var p=!!z(h)&&h&&h.match(f),q=!!z(o)&&o&&o.match(f);if(p&&q){var r=h.substr(0,h.length-p[0].length),t=o.substr(0,o.length-q[0].length);r==t&&(g=!0,h=i(p[0]),o=i(q[0]))}}b=e.natural&&(isNaN(h)||isNaN(o))?m(h,o,n):ho?1:0}c(l,function(a){var c=a.sort;return c&&(b=c(e,g,h,o,b))}),b*=e.sortReturnNumber,0===b&&s++};0===b&&sa.pos?1:-1),b}function u(){var a=I.length,b=a===H.length,c=a===M.children.length,d=L[0],e=d.place,f=d.console;if(N&&b&&c)Q?I.forEach(function(a,b){return a.elm.style.order=b}):M?M.appendChild(v()):f&&f.warn&&f.warn('parentNode has been removed');else{var g='start'===e,h='end'===e,i='first'===e;if('org'===e)I.forEach(w),I.forEach(function(a,b){return x(K[b],a.elm)});else if(g||h){var j=K[g?0:K.length-1],k=j&&j.elm.parentNode,l=k&&(g&&k.firstChild||k.lastChild);l&&(l!==j.elm&&(j={elm:l}),w(j),h&&k.appendChild(j.ghost),x(j,v()))}else if(i||'last'===e){var m=K[i?0:K.length-1];x(w(m),v())}}}function v(){return I.forEach(function(a){return G.appendChild(a.elm)}),G}function w(a){var b=a.elm,c=h.createElement('div');return a.ghost=c,b.parentNode.insertBefore(c,b),a}function x(a,b){var c=a.ghost,d=c.parentNode;d.insertBefore(b,c),d.removeChild(c),delete a.ghost}function y(a,b){var c,d=a.elm,g=b.selector;g&&(b.hasFilter?!d.matches(g)&&(d=f):d=d.querySelector(g)),b.hasAttr?c=d.getAttribute(b.attr):b.useVal?c=d.value||d.getAttribute('value'):b.hasData?c=d.getAttribute('data-'+b.data):d&&(c=d.textContent),z(c)&&(!b.cases&&(c=c.toLowerCase()),c=c.replace(/\\s+/g,' '));var h=[e,f,''].indexOf(c);return-1!==h&&(c=(b.emptyEnd?p:o)[h]),c}function z(a){return'string'==typeof a}var D=B[0]||{};z(a)&&(a=h.querySelectorAll(a));var E=Object.assign({},q,D||{}),F=E.console;0===a.length&&F&&F.warn&&F.warn('No elements to sort');var G=h.createDocumentFragment(),H=[],I=[],J=[],K=[],L=[],M=void 0,N=!0,O=a.length&&a[0].parentNode,P=O.rootNode!==document,Q=a.length&&(D===e||!1!==D.useFlex)&&!P&&-1!==getComputedStyle(O,null).display.indexOf('flex');return r=function(a){return 0===a.length&&d({})||c(a,function(a){return d(z(a)?{selector:a}:a)}).length}(B),g(),I.sort(D.sortFunction||t),u(),I.map(function(a){return a.elm})},{plugin:d,defaults:q})}());\n","import products from '../../data.json';\nconst cartModal = document.querySelector(\"#cart-modal\");\n\nexport function cart() {\n PetiteVue.createApp({\n products,\n filterLiveRegion: document.querySelector(\"#filter-live-region\"),\n table: document.querySelector(\"[data-cart]\"),\n cartCaptionTotal: document.querySelector(\"[data-cart-caption-total]\"),\n cart: JSON.parse(localStorage.getItem('cart')) || [],\n amount: 1,\n invoiceDataHidden: false,\n sum: 0,\n totalCartItems: 0,\n sortBy: \"id\",\n sortDirection: \"asc\",\n giftwrapPrice: 299,\n get sortedProducts() {\n return this.products.sort((p1, p2) => {\n let modifier = 1;\n if (this.sortDirection === \"desc\") modifier = -1;\n if (p1[this.sortBy] < p2[this.sortBy]) return -1 * modifier;\n if (p1[this.sortBy] > p2[this.sortBy]) return 1 * modifier;\n return 0;\n });\n },\n updateItemPrice(id) {\n let product = this.getCartItemById(id)[0];\n product.amount = parseFloat(event.target.value);\n this.persistCart();\n this.getLocalSum(product, parseFloat(event.target.value));\n this.getLocalTotal(product);\n this.updateCartItemAmount();\n this.updateTotalSum();\n this.filterLiveRegion.textContent = \"Neuer Preis: €\" + this.getLocalTotal(product) / 100 + \". Neuer Gesamtpreis des Warenkorbs: € \" + this.sum/100;\n this.cartCaptionTotal.textContent = String(this.sum/100);\n },\n whenMounted() {\n this.updateCartItemAmount();\n this.updateTotalSum();\n\n setTimeout(() => {\n this.cartCaptionTotal.textContent = String(this.sum/100);\n }, 500);\n\n },\n updateCartItemAmount() {\n let cartItemAmount = 0;\n\n this.cart.forEach((cI) => {\n cartItemAmount += cI.amount;\n });\n\n this.totalCartItems = cartItemAmount;\n },\n updateTotalSum() {\n\n let theSum = 0;\n\n this.cart.forEach((product) => {\n theSum += product.price * product.amount;\n\n if (product.giftwrap) {\n theSum = theSum + this.giftwrapPrice;\n }\n })\n\n this.sum = theSum;\n },\n getLocalSum(cartItem, amount) {\n if (cartItem && amount) {\n let returnVal = cartItem.price * amount;\n cartItem.localTotal = returnVal;\n return returnVal;\n }\n },\n getLocalTotal(product) {\n let price;\n price = product.localTotal;\n\n if (product.giftwrap) {\n price += this.giftwrapPrice;\n }\n\n return price;\n },\n localSum(cartItem, amount) {\n return this.getLocalSum(cartItem, amount);\n },\n isInCart(id) {\n return this.cart.find(x => x.id === id);\n },\n changeSort(e) {\n switch (e.target.value) {\n case \"name-desc\":\n this.sortDirection = \"desc\";\n this.sort(\"name\");\n this.filterLiveRegion.textContent = \"Sortiert nach: Name, Z bis A\";\n break;\n case \"name-asc\":\n this.sortDirection = \"asc\";\n this.sort(\"name\");\n this.filterLiveRegion.textContent = \"Sortiert nach: Name, A bis Z\";\n break;\n case \"price-asc\":\n this.sortDirection = \"asc\";\n this.sort(\"price\");\n this.filterLiveRegion.textContent =\n \"Sortiert nach: Preis, günstigste zuerst\";\n break;\n case \"price-desc\":\n this.sortDirection = \"desc\";\n this.sort(\"price\");\n this.filterLiveRegion.textContent =\n \"Sortiert nach: Preis, teuerste zuerst\";\n break;\n case \"\":\n this.sortDirection = \"asc\";\n this.sort(\"id\");\n this.filterLiveRegion.textContent = \"Sortierung zurückgesetzt\";\n break;\n }\n },\n getProductById(id) {\n return products.filter((product) => product.id === id);\n },\n getCartItemById(id) {\n return this.cart.filter((product) => product.id === id);\n },\n persistCart() {\n localStorage.setItem('cart', JSON.stringify(this.cart));\n },\n toggleCartItem(productId) {\n let product = this.getProductById(productId);\n // If the item is already in the shopping cart, remove it, update the total, display a message in the live region and persist the new cart in local storage.\n if (this.cart.find(x => x.id === productId)) {\n this.cart = this.cart.filter((n) => n.id !== product[0].id);\n this.persistCart();\n this.updateTotalSum();\n this.filterLiveRegion.textContent = \"Artikel \" + product[0].name + \" entfernt. Neuer Gesamtpreis des Warenkorbs: € \" + this.sum/100;\n setTimeout(() => {\n this.cartCaptionTotal.textContent = String(this.sum/100);\n }, 100);\n // Focus the shopping cart table so that its accessible name is output in the form of an updated \n this.$refs.cart.focus();\n }\n else {\n // If not in the shopping cart, add it, update the total, display a message in the live region and persist the new shopping cart in local storage.\n product[0].localTotal = product[0].price;\n this.cart.push(product[0]);\n this.updateTotalSum();\n this.filterLiveRegion.textContent = \"Artikel \"+ product[0].name + \" ergänzt. Neuer Gesamtpreis des Warenkorbs: € \" + this.sum/100;\n this.persistCart();\n cartModal.showModal();\n }\n this.getLocalTotal(product);\n this.updateCartItemAmount();\n setTimeout(() => {\n this.cartCaptionTotal.textContent = String(this.sum/100);\n }, 100);\n },\n toggleGiftWrap(id) {\n let item = this.getCartItemById(id)[0];\n item.giftwrap = !item.giftwrap;\n this.persistCart();\n this.updateTotalSum();\n let addedOrRemoved = (item.giftwrap) ? 'hinzugefügt' : 'entfernt';\n\n this.filterLiveRegion.textContent = \"Geschenkverpackung \" + addedOrRemoved + \". Neuer Preis: €\" + this.getLocalTotal(item) / 100 + \". Neuer Gesamtpreis des Warenkorbs: € \" + this.sum/100;\n },\n hasGiftwrap(id) {\n if (this.getCartItemById(id)[0]) return this.getCartItemById(id)[0].giftwrap;\n },\n sort: function (s) {\n if (s === this.sortBy) {\n this.sortDirection = this.sortDirection === \"asc\" ? \"asc\" : \"desc\";\n }\n this.sortBy = s;\n }\n }).mount();\n}\n\nconst cartDialog = document.querySelector('#cart-modal');\ncartDialog.addEventListener('click', (event) => {\n if (event.target.nodeName === 'DIALOG') {\n cartDialog.close();\n }\n});\n","[\n {\n \"id\": 1,\n \"name\": \"Beard oil\",\n \"in_stock\": 3,\n \"price\": 999,\n \"amount\": 1,\n \"localTotal\": 0,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/bartoel.jpg\",\n \"img_alt\": \"Three small bottles of brown beard oil.\"\n },\n {\n \"id\": 2,\n \"name\": \"Podcasting headphones\",\n \"in_stock\": 30,\n \"price\": 2499,\n \"amount\": 1,\n \"localTotal\": 0,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/kopfhoerer.jpg\",\n \"img_alt\": \"Black wireless headphones.\"\n },\n {\n \"id\": 3,\n \"name\": \"Smartphone case\",\n \"in_stock\": 13,\n \"price\": 1199,\n \"amount\": 1,\n \"localTotal\": 0,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/smart-huelle.jpg\",\n \"img_alt\": \"Colourful smartphone case in turquoise, white and blue rough brushstrokes.\"\n },\n {\n \"id\": 4,\n \"name\": \"Loose green tea\",\n \"in_stock\": 5,\n \"price\": 599,\n \"amount\": 1,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/loser-tee.jpg\",\n \"img_alt\": \"A glass with loose green tea next to a cup of hot tea.\"\n },\n {\n \"id\": 5,\n \"name\": \"Handbag\",\n \"in_stock\": 3,\n \"price\": 5999,\n \"amount\": 1,\n \"localTotal\": 0,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/handtasche.jpg\",\n \"img_alt\": \"Brown handbag made out of leather.\"\n },\n {\n \"id\": 6,\n \"name\": \"Bracelet\",\n \"in_stock\": 30,\n \"price\": 3499,\n \"amount\": 1,\n \"localTotal\": 0,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/armband.jpg\",\n \"img_alt\": \"Bracelet in a maritime design, with a dominant golden anchor.\"\n },\n {\n \"id\": 7,\n \"name\": \"Yoga accessories\",\n \"in_stock\": 13,\n \"price\": 1999,\n \"amount\": 1,\n \"localTotal\": 0,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/yoga-zubehoer.jpg\",\n \"img_alt\": \"Yoga mat, rolled up, next to two different-sized yoga blocks.\"\n },\n {\n \"id\": 8,\n \"name\": \"Cotton T-shirt\",\n \"in_stock\": 5,\n \"price\": 2599,\n \"amount\": 1,\n \"giftwrap\": false,\n \"img_url\": \"https://marcus-herrmann.com/dateien/ecbf/t-shirt.jpg\",\n \"img_alt\": \"Blue-grey T-shirt on a coat hanger.\"\n }\n]\n\n","import \"./js/mega-menu-metageeky\";\nimport \"./js/resize\";\nimport \"./js/ecbf-combobox-search\";\nimport { isMobile, toggleAriaExpanded } from \"./js/_helpers\";\nimport { initCarousel } from \"./js/carousel\";\nimport { sorting } from \"./js/sorting\";\nimport { formManagement } from \"./js/form-management\";\nimport { cart } from \"./js/cart\";\nimport { animations } from \"./js/animations\";\n\n\n// eslint-disable-next-line\nconst mainSearchToggle = document.getElementById(\"main-search-toggle\");\nconst cookieModal = document.querySelector(\"#cookie-modal\");\nconst cartModal = document.querySelector(\"#cart-modal\");\nconst urlParams = new URLSearchParams(window.location.search);\n// eslint-disable-next-line\nconst cookieModalTrigger = document.querySelector(\"[data-cookie-modal-trigger]\");\nconst cartModalTriggers = document.querySelectorAll(\"[data-cart-modal-trigger]\");\nconst triggerBigImageDialog = document.querySelector('#trigger-big-image-dialog');\nconst bigImageDialog = document.querySelector('#big-image');\n\n cart();\n // eslint-disable-next-line no-undef\n PetiteVue.createApp().mount(\"#content\");\n\n // Dialog\n if (triggerBigImageDialog) {\n triggerBigImageDialog.addEventListener('click', function() {\n bigImageDialog.showModal();\n })\n }\n\n if (bigImageDialog) {\n bigImageDialog.addEventListener('click', function (event) {\n let rect = bigImageDialog.getBoundingClientRect();\n let isInDialog=(rect.top <= event.clientY && event.clientY <= rect.top + rect.height\n && rect.left <= event.clientX && event.clientX <= rect.left + rect.width);\n if (!isInDialog) {\n bigImageDialog.close();\n }\n });\n }\n\n cartModalTriggers.forEach((cartModalTrigger) => {\n cartModalTrigger.addEventListener('click', () => {\n cartModal.showModal();\n })\n })\n\n // Because the following is a modal dialog, prevent closing via ESC key press\n cookieModal.addEventListener('cancel', (event) => {\n event.preventDefault();\n });\n\n\nif (document.querySelector(\".festive-animation\")) {\n animations();\n}\n\n // Debug\n if (urlParams.get(\"debug\") === \"mainnav-open\") {\n document.querySelector('.mega-menu-toggle').setAttribute('aria-expanded', 'true');\n }\n\n if (urlParams.get(\"debug\") === \"combobox\") {\n setTimeout(() => {\n if (document.body.classList.contains(\"mobile\")) {\n document.querySelector('#main-search-toggle').setAttribute('aria-expanded', 'true');\n document.querySelector('[role=\"listbox\"]').style.width = document.querySelector('[role=\"combobox\"]').getBoundingClientRect().width + \"px\";\n }\n document.querySelector('[role=\"combobox\"]').setAttribute('aria-expanded', 'true');\n }, 500);\n }\n\n if (urlParams.get(\"debug\") === \"cart\") {\n cartModal.showModal();\n }\n\nif (urlParams.get(\"debug\") === \"cart-prefilled\") {\n setTimeout(() => {\n document.getElementById('product-list').querySelectorAll('button')[6].click();\n }, 200);\n\n setTimeout(() => {\n document.getElementById('product-list').querySelectorAll('button')[0].click();\n\n document.getElementById('order').focus();\n }, 400);\n}\n\n if (urlParams.get(\"debug\") === \"cookiedialog\") {\n cookieModal.showModal();\n }\n\n// Detect the broad context\n isMobile();\n\n// Close all open disclosure widgets when pressinf ESC\ndocument.addEventListener('keydown', function(e) {\n if(e.key === \"Escape\"){\n document.querySelectorAll('[aria-expanded=\"true\"]').forEach((disclosure) => {\n disclosure.setAttribute('aria-expanded', 'false');\n });\n }\n});\n\n// Deal with \"My Account\" dislosure in header\n toggleAriaExpanded(document.querySelector('.account--widget__button'));\n\n\n\nif (document.getElementById(\"carousel\") && urlParams.get(\"debug\") === \"carousel-autostart\") {\n initCarousel(true);\n} else if (document.getElementById(\"carousel\") && urlParams.get(\"debug\") !== \"carousel-autostart\") {\n initCarousel();\n}\n\nif (document.querySelector(\"[data-order]\")) {\n formManagement();\n}\n\nif (document.querySelector(\"#product-list\")) {\n sorting();\n}\n\n\n\n\n\n\n\n","/* The following is a slightly apapted https://github.com/metageeky/mega-menu\nunder https://www.mozilla.org/en-US/MPL/2.0/ */\n\nimport * as hoverintent from \"hoverintent\";\n\nwindow.addEventListener('load', function(event) {\n // REWRITE NAV TO BE CLOSEST megamenu\n let megamenu = document.querySelector('.mega-menu');\n let responsiveWidth = parseInt(megamenu.getAttribute('data-responsive-width'));\n\n // toggle button for the responsive menu\n let responsive = megamenu.querySelector('button.responsive-toggle');\n responsive.addEventListener('click', function(evt) {\n // open menu\n if(evt.target.getAttribute('aria-expanded') == 'false') {\n evt.target.setAttribute('aria-expanded', 'true');\n megamenu.setAttribute('data-menu-state', 'focus');\n }\n // close menu\n else {\n evt.target.setAttribute('aria-expanded', 'false');\n megamenu.setAttribute('data-menu-state', 'closed');\n }\n });\n\n // events for the top-level menu buttons for dropdowns\n let triggers = megamenu.querySelectorAll('button.mega-menu-toggle');\n const urlParams = new URLSearchParams(window.location.search);\n\n for(let e of triggers) {\n //click events for the top-level menu buttons for dropdowns\n\n // If no debug URL parameter that does simulate a Only-Hover nav on desktop, or independently from it in mobile contexts:\n if (urlParams.get(\"debug\") !== \"mainnav-hover\" || document.body.classList.contains('mobile')) {\n\n e.addEventListener('click', function(evt) {\n let opened_menu = megamenu.querySelector('.mega-menu .mega-menu-toggle[aria-expanded=\"true\"]');\n // in the case of hover open, a click just switches the state to focus open\n // only happens in non-responsive mode\n if (megamenu.getAttribute('data-menu-state') == 'hover') {\n megamenu.setAttribute('data-menu-state', 'focus');\n responsive.setAttribute('aria-expanded', 'true');\n evt.target.focus();\n return;\n }\n\n // close any sub menus opened previously\n if (opened_menu != null && evt.target != opened_menu) {\n // close other opened_menu\n opened_menu.setAttribute('aria-expanded', 'false');\n }\n\n // open menu\n if (evt.target.getAttribute('aria-expanded') == 'false') {\n evt.target.setAttribute('aria-expanded', 'true');\n megamenu.setAttribute('data-menu-state', 'focus');\n responsive.setAttribute('aria-expanded', 'true');\n }\n // close menu\n else {\n evt.target.setAttribute('aria-expanded', 'false');\n megamenu.setAttribute('data-menu-state', 'closed');\n if (document.body.offsetWidth > responsiveWidth)\n responsive.setAttribute('aria-expanded', 'false');\n }\n });\n\n }\n //}\n\n // hover\n hoverintent(e,\n function(evt) {\n if(document.body.offsetWidth <= responsiveWidth)\n return;\n // ignore hover effects if menu has been opened by focus\n if(megamenu.getAttribute('data-menu-state') == 'focus')\n return;\n megamenu.setAttribute('data-menu-state', 'hover');\n evt.target.setAttribute('aria-expanded', 'true');\n },\n function(evt) {\n if(document.body.offsetWidth <= responsiveWidth)\n return;\n // if a focus in the menu has happened, take precedent\n if(megamenu.getAttribute('data-menu-state') == 'focus')\n return;\n // if relatedTarget is an open mega-sub-menu, don't close\n if(evt.relatedTarget != null && evt.relatedTarget.classList.contains('mega-sub-menu'))\n return;\n megamenu.setAttribute('data-menu-state', 'closed');\n evt.target.setAttribute('aria-expanded', 'false');\n }).options({timeout: 200, interval: 50,});\n\n }\n\n // blur used to detect if focus has moved out of the mega menu\n let focusables = megamenu.querySelectorAll('.mega-sub-menu a, button.mega-menu-toggle');\n for(let e of focusables) {\n e.addEventListener('blur', function(evt) {\n if(megamenu.getAttribute('data-menu-state') != 'focus')\n return;\n // detect window change and don't close things\n if(document.activeElement === this)\n return;\n\n // if click on non-clickable, close the menu\n if(evt.relatedTarget == null) {\n megamenu.setAttribute('data-menu-state', 'closed');\n megamenu.querySelector('.mega-menu-toggle[aria-expanded=\"true\"]').setAttribute('aria-expanded', 'false');\n responsive.setAttribute('aria-expanded', 'false');\n }\n // focus moved to another focusable element not in the mega menu\n else if(evt.relatedTarget != null && evt.relatedTarget.closest('.mega-menu') == null) {\n megamenu.setAttribute('data-menu-state', 'closed');\n megamenu.querySelector('.mega-menu-toggle[aria-expanded=\"true\"]').setAttribute('aria-expanded', 'false');\n responsive.setAttribute('aria-expanded', 'false');\n }\n });\n }\n\n\n let subs = megamenu.querySelectorAll('div.mega-sub-menu');\n for(let e of subs) {\n e.addEventListener('focus', function(evt) {\n // if in hover state and click on the opened menu, switch to focus with focus on toggle\n if(megamenu.getAttribute('data-menu-state') == 'hover') {\n megamenu.setAttribute('data-menu-state', 'focus');\n evt.target.previousElementSibling.focus();\n }\n // move the focus back to whatever what lost focus when the sub-menu was clicked\n else if(megamenu.getAttribute('data-menu-state') == 'focus' && evt.relatedTarget != null) {\n evt.relatedTarget.focus();\n }\n });\n }\n\n\n\n let submenus = document.querySelectorAll('button.mega-menu-toggle + div.mega-sub-menu');\n for(let e of submenus) {\n // handle hovering moving from opened sub-menu to the toggle button that controls it\n e.addEventListener('mouseleave', function(evt) {\n if(document.body.offsetWidth <= responsiveWidth)\n return;\n if(megamenu.getAttribute('data-menu-state') == 'focus')\n return;\n // target is the div.sub-menu, related target is the toggle button before it\n if(evt.relatedTarget != null && evt.relatedTarget == evt.target.previousElementSibling)\n return;\n\n megamenu.setAttribute('data-menu-state', 'closed');\n let open_toggle_button = document.querySelector('.mega-menu button[aria-expanded=\"true\"]');\n if(open_toggle_button)\n open_toggle_button.setAttribute('aria-expanded','false');\n });\n }\n\n let menuLinks = document.querySelectorAll('button.mega-menu-toggle + div.mega-sub-menu a');\n for(let e of menuLinks) {\n e.addEventListener('focus', function(evt) {\n // if already having focus in the mega menu, not an issue\n if(megamenu.getAttribute('data-menu-state') == 'focus')\n return;\n // set focus state\n megamenu.setAttribute('data-menu-state', 'focus');\n responsive.setAttribute('aria-expanded', 'true');\n });\n }\n\n document.addEventListener('keydown', function(event){\n if(event.key === 'Escape') {\n let menu = document.querySelector('.mega-menu');\n\n if(document.body.offsetWidth <= responsiveWidth) {\n // responsive mode\n //if there is a focused element, reset focus to responsive toggle\n if(\tdocument.activeElement != null &&\n document.activeElement != document.body &&\n document.activeElement.closest('.mega-menu') !== null\n ) {\n menu.querySelector('.responsive-toggle').focus();\n }\n\n // set all things to close\n for(let b of menu.querySelectorAll('button[aria-expanded=\"true\"]'))\n b.setAttribute('aria-expanded','false');\n }\n else {\n // desktop mode\n let bu1 = menu.querySelector('button.mega-menu-toggle[aria-expanded=\"true\"]');\n\n bu1?.setAttribute('aria-expanded','false');\n bu1?.focus();\n\n menu.setAttribute('data-hover-open', 'false');\n menu.setAttribute('data-menu-state', 'closed');\n }\n }\n });\n});\n","'use strict';\n\nmodule.exports = function(el, onOver, onOut) {\n var x, y, pX, pY;\n var mouseOver = false;\n var focused = false;\n var h = {},\n state = 0,\n timer = 0;\n\n var options = {\n sensitivity: 7,\n interval: 100,\n timeout: 0,\n handleFocus: false\n };\n\n function delay(el, e) {\n if (timer) timer = clearTimeout(timer);\n state = 0;\n return focused ? undefined : onOut.call(el, e);\n }\n\n function tracker(e) {\n x = e.clientX;\n y = e.clientY;\n }\n\n function compare(el, e) {\n if (timer) timer = clearTimeout(timer);\n if ((Math.abs(pX - x) + Math.abs(pY - y)) < options.sensitivity) {\n state = 1;\n return focused ? undefined : onOver.call(el, e);\n } else {\n pX = x;\n pY = y;\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n }\n\n // Public methods\n h.options = function(opt) {\n var focusOptionChanged = opt.handleFocus !== options.handleFocus;\n options = Object.assign({}, options, opt);\n if (focusOptionChanged) {\n options.handleFocus ? addFocus() : removeFocus();\n }\n return h;\n };\n\n function dispatchOver(e) {\n mouseOver = true;\n if (timer) timer = clearTimeout(timer);\n el.removeEventListener('mousemove', tracker, false);\n\n if (state !== 1) {\n pX = e.clientX;\n pY = e.clientY;\n\n el.addEventListener('mousemove', tracker, false);\n\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n\n return this;\n }\n\n function dispatchOut(e) {\n mouseOver = false;\n if (timer) timer = clearTimeout(timer);\n el.removeEventListener('mousemove', tracker, false);\n\n if (state === 1) {\n timer = setTimeout(function() {\n delay(el, e);\n }, options.timeout);\n }\n\n return this;\n }\n\n function dispatchFocus(e) {\n if (!mouseOver) {\n focused = true;\n onOver.call(el, e);\n }\n }\n\n function dispatchBlur(e) {\n if (!mouseOver && focused) {\n focused = false;\n onOut.call(el, e);\n }\n }\n\n function addFocus() {\n el.addEventListener('focus', dispatchFocus, false);\n el.addEventListener('blur', dispatchBlur, false);\n }\n\n function removeFocus() {\n el.removeEventListener('focus', dispatchFocus, false);\n el.removeEventListener('blur', dispatchBlur, false);\n }\n\n h.remove = function() {\n if (!el) return;\n el.removeEventListener('mouseover', dispatchOver, false);\n el.removeEventListener('mouseout', dispatchOut, false);\n removeFocus();\n };\n\n if (el) {\n el.addEventListener('mouseover', dispatchOver, false);\n el.addEventListener('mouseout', dispatchOut, false);\n }\n\n return h;\n};\n","import { toggleAriaExpanded } from \"./_helpers\";\n\nlet mainSearchToggle = document.getElementById(\"main-search-toggle\"),\n resizeFunc;\n\nmainSearchToggle.setAttribute('aria-expanded', 'false');\ntoggleAriaExpanded(mainSearchToggle);\n\n\nfunction resizeEndHappened(){\n if (window.getComputedStyle(mainSearchToggle).display !== \"none\") {\n\n mainSearchToggle.setAttribute('aria-expanded', 'false');\n toggleAriaExpanded(mainSearchToggle);\n }\n}\n\nwindow.onresize = function(){\n clearTimeout(resizeFunc);\n resizeFunc = setTimeout(resizeEndHappened, 100);\n};\n","export function toggleAriaExpanded(el) {\n el.addEventListener('click', (e) => {\n let setExpanded = e.target.getAttribute(\"aria-expanded\") === \"true\" ? \"false\" : \"true\";\n\n if (e.target.tagName === \"BUTTON\" || e.target.tagName === \"A\") {\n e.target.setAttribute(\"aria-expanded\", setExpanded);\n }\n })\n}\n\nexport function isMobile() {\n const mq = window.matchMedia(\"(max-width: 40em)\");\n mq.matches ? setToMobile() : setToDesktop();\n mq.addEventListener(\"change\", (event) =>\n event.matches ? setToMobile() : setToDesktop()\n );\n\n function setToDesktop() {\n document.body.classList.add(\"desktop\");\n document.body.classList.remove(\"mobile\");\n }\n\n function setToMobile() {\n document.body.classList.add(\"mobile\");\n document.body.classList.remove(\"desktop\");\n }\n}\n\nexport function validateEmail(email) {\n var re =\n /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/;\n\n return re.test(email);\n}\n","class ComboboxSearch extends HTMLElement {\n constructor() {\n super();\n this.input = this.querySelector('input[type=\"search\"]');\n this.listbox = this.querySelector(\"#ecbf-combobox-listbox\");\n this.listboxOptionContainerProducts = this.querySelector(\"[data-products-list]\");\n this.listboxOptionContainerPages = this.querySelector(\"[data-pages-list]\");\n this.statusElement = this.querySelector(\"[data-ecbf-combobox-search-status]\");\n this.filteredOptions = [];\n this.searchTerm = \"\";\n this.allProductOptions = [];\n this.allPageOptions = [];\n this.startsOpen = this.getAttribute('starts-open');\n\n if (this.input) {\n this.input.addEventListener(\"input\", this.debounce((event) => {\n this.onChange(event);\n }, 200).bind(this)\n );\n }\n\n if (this.startsOpen === \"true\") {\n this.input.setAttribute(\"aria-expanded\", \"true\");\n };\n\n this.getAndHandleAllOptions();\n this.setupEventListeners();\n }\n\n getAndHandleAllOptions() {\n this.listbox.querySelectorAll(\"[data-products-list] li\").forEach((product) => this.allProductOptions.push(product));\n this.listbox.querySelectorAll(\"[data-pages-list] li\").forEach((page) => this.allPageOptions.push(page));\n }\n\n debounce(fn, wait) {\n let t;\n return (...args) => {\n clearTimeout(t);\n t = setTimeout(() => fn.apply(this, args), wait);\n };\n }\n\n getQuery() {\n return this.input.value.trim();\n }\n\n setupEventListeners() {\n this.input.form.addEventListener(\"submit\", this.onFormSubmit.bind(this));\n this.input.addEventListener(\"focusout\", this.onFocusOut.bind(this));\n this.input.addEventListener(\"input\", this.onInput.bind(this));\n this.addEventListener(\"keyup\", this.onKeyup.bind(this));\n }\n\n onChange() {\n\n const newSearchTerm = this.getQuery();\n\n this.updateSearchForTerm(newSearchTerm);\n\n this.searchTerm = newSearchTerm;\n\n if (!this.searchTerm.length) {\n this.close(true);\n return;\n }\n\n this.listboxOptionContainerProducts.innerHTML = \"\";\n this.listboxOptionContainerPages.innerHTML = \"\";\n this.getSearchResults(this.searchTerm);\n }\n\n updateSearchForTerm(newTerm) {\n const searchForTextElement = this.querySelector(\"[data-ecbf-combobox-search-search-for-text]\");\n searchForTextElement.innerText = newTerm;\n }\n\n getLowercaseContentWithoutPrice(node) {\n if (node.querySelector(\"a\") !== null) {\n return node.querySelector(\"a\").textContent.toLowerCase();\n } else {\n return node.textContent.toLowerCase();\n }\n }\n\n getSearchResults(searchTerm) {\n\n this.allProductOptions.forEach((o) => {\n let option = o;\n if (\n searchTerm.length === 0 ||\n this.getLowercaseContentWithoutPrice(option).includes(searchTerm) === true\n ) {\n this.filteredOptions.push(option);\n this.listboxOptionContainerProducts.appendChild(option);\n }\n });\n\n\n\n this.allPageOptions.forEach((o) => {\n let option = o;\n if (\n searchTerm.length === 0 ||\n this.getLowercaseContentWithoutPrice(option).includes(searchTerm) === true\n ) {\n this.filteredOptions.push(option);\n this.listboxOptionContainerPages.appendChild(option);\n }\n });\n\n const realTimeOptionAmount1 = this.listboxOptionContainerProducts.querySelectorAll(\"[data-products-list] li\")?.length;\n const realTimeOptionAmount2 = this.listboxOptionContainerPages.querySelectorAll(\"[data-pages-list] li\")?.length;\n\n if (realTimeOptionAmount1 || realTimeOptionAmount2) {\n if (this.input.value !== \"\") {\n setTimeout(() => {\n this.setLiveRegionText(`${realTimeOptionAmount1 + realTimeOptionAmount2} Ergebnisse gefunden: ${realTimeOptionAmount1 ? realTimeOptionAmount1 : 0} Produkte und ${realTimeOptionAmount2 ? realTimeOptionAmount2 : 0} Seiten`);\n }, 1100);\n } else {\n this.yieldNoResultsInLiveRegion();\n }\n } else {\n this.yieldNoResultsInLiveRegion();\n }\n\n this.open();\n\n }\n\n yieldNoResultsInLiveRegion() {\n this.setLiveRegionText(\"No results found. Please try again with another search term.\");\n }\n\n setLiveRegionText(statusText) {\n this.statusElement.setAttribute(\"aria-hidden\", \"false\");\n this.statusElement.textContent = statusText;\n\n setTimeout(() => {\n this.statusElement.setAttribute(\"aria-hidden\", \"true\");\n }, 1000);\n }\n\n onInput() {\n this.open();\n }\n\n open() {\n\n if (this.getQuery().length >= 2) {\n setTimeout(() => {\n this.input.setAttribute(\"aria-expanded\", \"true\");\n }, 500);\n }\n\n this.listbox.style.width = this.input.getBoundingClientRect().width + \"px\";\n this.listbox.style.top = this.input.getBoundingClientRect().height + \"px\";\n }\n\n close() {\n this.input.setAttribute(\"aria-expanded\", \"false\");\n }\n\n onKeyup() {\n if (!this.getQuery().length) this.close(true);\n event.preventDefault();\n\n switch (event.code) {\n case \"ArrowUp\":\n this.switchOption(\"up\");\n break;\n case \"ArrowDown\":\n this.switchOption(\"down\");\n break;\n case \"Enter\":\n this.selectOption();\n break;\n case \"Escape\":\n this.close();\n this.input.select();\n break;\n default:\n this.emptyAriaActivedescendant();\n }\n }\n\n emptyAriaActivedescendant() {\n this.input.setAttribute('aria-activedescendant', '');\n }\n\n selectOption() {\n const selectedOption = this.querySelector(\"[aria-selected=\\\"true\\\"] a, button[aria-selected=\\\"true\\\"]\");\n\n if (selectedOption) {\n selectedOption.click();\n }\n }\n\n switchOption(direction) {\n\n if (this.getQuery() === \"\") return;\n\n const moveUp = direction === \"up\";\n const selectedElement = this.querySelector(\"[aria-selected=\\\"true\\\"]\");\n\n // offsetParnet filtert unsichtbare Elemente heraus:\n const allVisibleElements = Array.from(this.querySelectorAll('[role=\"option\"]')).filter(\n (el) => el.offsetParent !== null\n );\n\n let activeElementIndex = 0;\n\n if (moveUp && !selectedElement) return;\n\n let selectedElementIndex = -1;\n let i = 0;\n\n while (selectedElementIndex === -1 && i <= allVisibleElements.length) {\n if (allVisibleElements[i] === selectedElement) {\n selectedElementIndex = i;\n }\n i++;\n }\n\n this.statusElement.textContent = \"\";\n\n if (!moveUp && selectedElement) {\n activeElementIndex = selectedElementIndex === allVisibleElements.length - 1 ? 0 : selectedElementIndex + 1;\n } else if (moveUp) {\n activeElementIndex = selectedElementIndex === 0 ? allVisibleElements.length - 1 : selectedElementIndex - 1;\n }\n\n if (activeElementIndex === selectedElementIndex) return;\n\n const activeElement = allVisibleElements[activeElementIndex];\n\n activeElement.setAttribute(\"aria-selected\", true);\n if (selectedElement) selectedElement.setAttribute(\"aria-selected\", false);\n\n this.input.setAttribute(\"aria-activedescendant\", activeElement.id);\n }\n\n onFocusOut() {\n setTimeout(() => {\n if (!this.contains(document.activeElement)) this.close();\n });\n }\n\n onFormSubmit() {\n if (!this.getQuery().length || this.querySelector('[aria-selected=\"true\"] a')) event.preventDefault();\n }\n}\n\ncustomElements.define(\"ecbf-combobox-search\", ComboboxSearch);\n\n","/* focusin/out event polyfill (firefox) */\n!function(){\n var w = window,\n d = w.document;\n\n if( w.onfocusin === undefined ){\n d.addEventListener('focus' ,addPolyfill ,true);\n d.addEventListener('blur' ,addPolyfill ,true);\n d.addEventListener('focusin' ,removePolyfill ,true);\n d.addEventListener('focusout' ,removePolyfill ,true);\n }\n function addPolyfill(e){\n var type = e.type === 'focus' ? 'focusin' : 'focusout';\n var event = new CustomEvent(type, { bubbles:true, cancelable:false });\n event.c1Generated = true;\n e.target.dispatchEvent( event );\n }\n function removePolyfill(e){\n if(!e.c1Generated){ // focus after focusin, so chrome will the first time trigger tow times focusin\n d.removeEventListener('focus' ,addPolyfill ,true);\n d.removeEventListener('blur' ,addPolyfill ,true);\n d.removeEventListener('focusin' ,removePolyfill ,true);\n d.removeEventListener('focusout' ,removePolyfill ,true);\n }\n setTimeout(function(){\n d.removeEventListener('focusin' ,removePolyfill ,true);\n d.removeEventListener('focusout' ,removePolyfill ,true);\n });\n }\n}();\n\nvar myCarousel = (function() {\n\n var carousel, slides, index, slidenav, settings, timer, setFocus, announceItem, animationSuspended;\n\n function forEachElement(elements, fn) {\n for (var i = 0; i < elements.length; i++)\n fn(elements[i], i);\n }\n\n function removeClass(el, className) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n }\n }\n\n function hasClass(el, className) {\n if (el.classList) {\n return el.classList.contains(className);\n } else {\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);\n }\n }\n\n function init(set) {\n settings = set;\n carousel = document.getElementById(settings.id);\n slides = carousel.querySelectorAll('.slide');\n\n carousel.className = 'active carousel';\n\n var ctrls = document.createElement('ul');\n\n ctrls.className = 'controls';\n ctrls.innerHTML = '
  • ' +\n '
  • ' +\n '
  • ' +\n '' +\n '
  • ';\n\n ctrls.querySelector('.btn-prev')\n .addEventListener('click', function () {\n prevSlide(true);\n });\n ctrls.querySelector('.btn-next')\n .addEventListener('click', function () {\n nextSlide(true);\n });\n\n carousel.appendChild(ctrls);\n\n if (settings.slidenav || settings.animate) {\n slidenav = document.createElement('ul');\n\n slidenav.className = 'slidenav';\n\n if (settings.animate) {\n var li = document.createElement('li');\n\n if (settings.startAnimated) {\n li.innerHTML = '';\n } else {\n li.innerHTML = '';\n }\n\n slidenav.appendChild(li);\n }\n\n if (settings.slidenav) {\n forEachElement(slides, function(el, i){\n var li = document.createElement('li');\n var klass = (i===0) ? 'class=\"current\" ' : '';\n var kurrent = (i===0) ? ' (Aktuell)' : '';\n\n li.innerHTML = '';\n slidenav.appendChild(li);\n });\n }\n\n slidenav.addEventListener('click', function(event) {\n var button = event.target;\n if (button.localName == 'button') {\n if (button.getAttribute('data-slide')) {\n //stopAnimation();\n setSlides(button.getAttribute('data-slide'), true);\n } else if (button.getAttribute('data-action') == \"stop\") {\n stopAnimation();\n } else if (button.getAttribute('data-action') == \"start\") {\n startAnimation();\n }\n }\n }, true);\n\n carousel.className = 'active carousel with-slidenav';\n carousel.appendChild(slidenav);\n }\n\n var liveregion = document.createElement('div');\n liveregion.setAttribute('aria-live', 'polite');\n liveregion.setAttribute('aria-atomic', 'true');\n liveregion.setAttribute('class', 'liveregion visually-hidden');\n carousel.appendChild(liveregion);\n\n slides[0].parentNode.addEventListener('transitionend', function (event) {\n var slide = event.target;\n removeClass(slide, 'in-transition');\n if (hasClass(slide, 'current')) {\n if(setFocus) {\n slide.setAttribute('tabindex', '-1');\n slide.focus();\n setFocus = false;\n }\n }\n });\n\n carousel.addEventListener('mouseenter', suspendAnimation);\n carousel.addEventListener('mouseleave', function(event) {\n if (animationSuspended) {\n startAnimation();\n }\n });\n\n carousel.addEventListener('focusin', function(event) {\n if (!hasClass(event.target, 'slide')) {\n suspendAnimation();\n }\n });\n carousel.addEventListener('focusout', function(event) {\n if (!hasClass(event.target, 'slide') && animationSuspended) {\n startAnimation();\n }\n });\n\n index = 0;\n setSlides(index);\n\n if (settings.startAnimated) {\n timer = setTimeout(nextSlide, 5000);\n }\n }\n\n function setSlides(new_current, setFocusHere, transition, announceItemHere) {\n setFocus = typeof setFocusHere !== 'undefined' ? setFocusHere : false;\n announceItem = typeof announceItemHere !== 'undefined' ? announceItemHere : false;\n transition = typeof transition !== 'undefined' ? transition : 'none';\n\n\n new_current = parseFloat(new_current);\n\n var length = slides.length;\n var new_next = new_current+1;\n var new_prev = new_current-1;\n\n if(new_next === length) {\n new_next = 0;\n } else if(new_prev < 0) {\n new_prev = length-1;\n }\n\n for (var i = slides.length - 1; i >= 0; i--) {\n slides[i].className = \"slide\";\n }\n\n slides[new_next].className = 'next slide' + ((transition == 'next') ? ' in-transition' : '');\n slides[new_next].setAttribute('aria-hidden', 'true');\n\n slides[new_prev].className = 'prev slide' + ((transition == 'prev') ? ' in-transition' : '');\n slides[new_prev].setAttribute('aria-hidden', 'true');\n\n\n slides[new_current].className = 'current slide';\n slides[new_current].removeAttribute('aria-hidden');\n\n\n if (announceItem) {\n carousel.querySelector('.liveregion').textContent = 'Folie ' + (new_current + 1) + ' von ' + slides.length;\n }\n\n if(settings.slidenav) {\n var buttons = carousel.querySelectorAll('.slidenav button[data-slide]');\n for (var j = buttons.length - 1; j >= 0; j--) {\n buttons[j].className = '';\n buttons[j].innerHTML = 'Folie ' + (j+1);\n }\n buttons[new_current].className = \"current\";\n buttons[new_current].innerHTML = 'Folie ' + (new_current+1) + ' (Aktuell)';\n }\n\n index = new_current;\n\n }\n\n function nextSlide(announceItem) {\n announceItem = typeof announceItem !== 'undefined' ? announceItem : false;\n\n var length = slides.length,\n new_current = index + 1;\n\n if(new_current === length) {\n new_current = 0;\n }\n\n setSlides(new_current, false, 'prev', announceItem);\n\n if (settings.animate) {\n timer = setTimeout(nextSlide, 5000);\n }\n\n }\n\n function prevSlide(announceItem) {\n announceItem = typeof announceItem !== 'undefined' ? announceItem : false;\n\n var length = slides.length,\n new_current = index - 1;\n\n if(new_current < 0) {\n new_current = length-1;\n }\n\n setSlides(new_current, false, 'next', announceItem);\n\n }\n\n function stopAnimation() {\n clearTimeout(timer);\n settings.animate = false;\n animationSuspended = false;\n _this = carousel.querySelector('[data-action]');\n _this.innerHTML = 'Starte Animation ▶';\n _this.setAttribute('data-action', 'start');\n }\n\n function startAnimation() {\n settings.animate = true;\n animationSuspended = false;\n timer = setTimeout(nextSlide, 5000);\n _this = carousel.querySelector('[data-action]');\n //console.log(_this);\n _this.innerHTML = 'Stoppe Animation ■';\n _this.setAttribute('data-action', 'stop');\n }\n\n function suspendAnimation() {\n if(settings.animate) {\n clearTimeout(timer);\n settings.animate = false;\n animationSuspended = true;\n }\n }\n\n return {\n init:init,\n next:nextSlide,\n prev:prevSlide,\n goto:setSlides,\n stop:stopAnimation,\n start:startAnimation\n };\n});\n\n\nexport function initCarousel(carouselAutostart) {\n\n let animate = false;\n let startAnimated = false;\n let c = new myCarousel();\n\n if (carouselAutostart) {\n animate = true;\n startAnimated = true;\n }\n\n c.init({\n id: 'carousel',\n slidenav: true,\n animate: animate,\n startAnimated: startAnimated\n });\n}\n","import \"tinysort\";\n\nexport function sorting() {\n let sortOption = document.querySelector(\"#sort\"),\n filterLiveRegion = document.querySelector(\"#filter-live-region\"),\n data,\n order;\n\n sortOption.addEventListener('change', (e) => {\n switch (e.target.value) {\n case \"name-desc\":\n data = 'name';\n order = 'desc';\n filterLiveRegion.textContent = \"Sorted by name, descending\";\n break;\n case \"name-asc\":\n data = 'name';\n order = 'asc';\n filterLiveRegion.textContent = \"Sorted by name, ascending\";\n break;\n case \"price-desc\":\n data = 'price';\n order = 'desc';\n filterLiveRegion.textContent = \"Sorted by price, descending\";\n break;\n case \"price-asc\":\n data = 'price';\n order = 'asc';\n filterLiveRegion.textContent = \"Sorted by price, ascending\";\n break;\n default:\n filterLiveRegion.textContent = \"No special sort active\";\n break;\n }\n\n tinysort(\"#product-list li\",{ data, order});\n\n });\n\n}\n","import { validateEmail } from \"./_helpers\";\n\nexport function formManagement() {\n let forms = document.querySelectorAll(\"[data-order]\"),\n requiredFields,\n emailFields,\n registerUserCheckBox,\n passwordField1,\n passwordField2,\n passwordFieldHideShows,\n registerUserArea;\n\n forms.forEach((form) => {\n registerUserCheckBox = document.querySelector(\"#registerUser\");\n passwordField1 = document.getElementById(\"logonData.loginPassword\");\n passwordField1 = document.getElementById(\"logonData.loginPassword\");\n passwordField2 = document.getElementById(\"logonData.loginPasswordRepeat\");\n passwordFieldHideShows = document.querySelectorAll(\".passwordHideShow\");\n registerUserArea = document.getElementById(\"registerUserArea\");\n\n registerUserCheckBox.addEventListener(\"change\", (e) => {\n if (e.target.checked) {\n registerUserArea.removeAttribute(\"hidden\");\n } else {\n registerUserArea.setAttribute(\"hidden\", true);\n }\n });\n\n /**\n * @param {HTMLElement} passwordFieldHideShow\n */\n passwordFieldHideShows.forEach((passwordFieldHideShow) => {\n /**\n * @param {Event} e\n */\n passwordFieldHideShow.setAttribute(\"aria-pressed\", \"false\");\n\n passwordFieldHideShow.addEventListener(\"click\", (e) => {\n /** @const {HTMLElement} */\n const target = e.target;\n const liveRegion = target.nextElementSibling,\n passwordInput = target.previousElementSibling;\n\n\n if (passwordInput.getAttribute(\"type\") === \"password\") {\n passwordInput.setAttribute(\"type\", \"text\");\n target.setAttribute(\"aria-pressed\", \"true\");\n\n liveRegion.textContent = \"Password sichtdata-input\";\n } else {\n passwordInput.setAttribute(\"type\", \"password\");\n target.setAttribute(\"aria-pressed\", \"false\");\n\n liveRegion.textContent = \"Password unsichtdata-input\";\n }\n });\n });\n\n /**\n * @param {Event} e\n */\n form.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n\n // Do not cache requiredFields!\n requiredFields = document.querySelectorAll(\".data-input [aria-required='true']\");\n emailFields = document.querySelectorAll(\"input[type='email']\");\n\n // Looe through all mandatory fields\n\n /**\n * @param {HTMLInputElement} requiredField\n */\n requiredFields.forEach((requiredField) => {\n\n // Is ‘requiredField’ a fieldset in which an input is selected?\n let requiredFieldsetisChecked = requiredField.tagName === \"FIELDSET\" && requiredField.value;\n\n // Identify mandatory fields or radio groups that have not been completed or checked, or that are in an error state\n const fieldInputEmptyThoughRequired = (!requiredField.checked && requiredField.value === \"\") || !!requiredFieldsetisChecked;\n\n // Find out the ID of the error message\n let idRefRequired = requiredField.getAttribute(\"data-required-error\");\n\n if (fieldInputEmptyThoughRequired) {\n // Set empty required fields to a semantic error state\n requiredField.setAttribute(\"aria-invalid\", \"true\");\n\n // Associate the error message text\n requiredField.setAttribute(\"aria-describedby\", idRefRequired);\n\n // Field completed? Then resolve any error state:\n document.getElementById(idRefRequired).removeAttribute(\"hidden\");\n\n } else {\n\n // Remove link to error message\n requiredField.removeAttribute(\"aria-describedby\");\n document.getElementById(idRefRequired).setAttribute(\"hidden\", true);\n\n // Remove semaantic error state\n requiredField.removeAttribute(\"aria-invalid\");\n }\n\n let idRefMismatch = passwordField2.getAttribute(\n \"data-pw-mismatch-error\"\n );\n\n // If both password fields are filled in but do not match:\n if (\n passwordField1.value &&\n passwordField2.value &&\n passwordField1.value !== passwordField2.value\n ) {\n passwordField2.setAttribute(\"aria-describedby\", idRefMismatch);\n passwordField2.setAttribute(\"aria-invalid\", \"true\");\n document.getElementById(idRefMismatch).removeAttribute(\"hidden\");\n } else if (\n // If both password fields are filled in and match:\n passwordField1.value &&\n passwordField2.value &&\n passwordField1.value === passwordField2.value\n ) {\n // Resolve with error message\n passwordField2.removeAttribute(\"aria-describedby\");\n document.getElementById(idRefMismatch).setAttribute(\"hidden\", true);\n\n // Resolving a semantic error state\n passwordField2.removeAttribute(\"aria-invalid\");\n }\n\n // Loop through all email input fields\n\n /**\n * @param {HTMLElement} emailField\n */\n emailFields.forEach((emailField) => {\n // Hole die ID der Fehlermeldung\n let idRefEmail = emailField.getAttribute(\"data-email-syntax-error\");\n\n if (emailField.value && !validateEmail(emailField.value)) {\n // Wenn E-Mail-Adresse nicht der üblichen E-Mail-Syntax entspricht:\n emailField.setAttribute(\"aria-describedby\", idRefEmail);\n document.getElementById(idRefEmail).removeAttribute(\"hidden\");\n } else {\n // Wenn E-Mail der üblichen E-Mail-Syntax entspricht:\n emailField.removeAttribute(\"aria-invalid\");\n emailField.removeAttribute(\"aria-describedby\");\n document.getElementById(idRefEmail).hidden = true;\n }\n });\n });\n\n if (!document.querySelectorAll('.data-input .form__error:not([hidden])').length) {\n window.location.href = 'order-summary.html';\n\n let address_salutation = document.querySelector('input[name=\"address.radiogroup.salutation\"]:checked').value;\n localStorage.setItem('address.salutation', address_salutation);\n\n let address_firstName = document.getElementById('address.firstName').value;\n localStorage.setItem('address.firstName', address_firstName);\n\n let address_lastName = document.getElementById('address.lastName').value;\n localStorage.setItem('address.lastName', address_lastName);\n\n let address_company = document.getElementById('address.company').value;\n localStorage.setItem('address.company', address_company);\n\n let address_address1 = document.getElementById('address.address1').value;\n localStorage.setItem('address.address1', address_address1);\n\n let address_address2 = document.getElementById('address.address2').value;\n localStorage.setItem('address.address2', address_address2);\n\n let address_zipCode = document.getElementById('address.zipCode').value;\n localStorage.setItem('address.zipCode', address_zipCode);\n\n let address_city = document.getElementById('address.city').value;\n localStorage.setItem('address.city', address_city);\n\n let address_email = document.getElementById('address.email').value;\n localStorage.setItem('address.email', address_email);\n\n if (document.querySelector('input[name=\"addressIsInvoiceAddress\"]:checked')) {\n let addressIsInvoiceAddress = document.querySelector('input[name=\"addressIsInvoiceAddress\"]:checked').value;\n\n if (addressIsInvoiceAddress === \"on\") {\n localStorage.setItem('addressIsInvoiceAddress', addressIsInvoiceAddress);\n } else {\n localStorage.setItem('addressIsInvoiceAddress', \"off\");\n }\n } else {\n localStorage.removeItem(\"addressIsInvoiceAddress\");\n }\n\n let address_invoice_salutation = document.querySelector('input[name=\"address-invoice.radiogroup.salutation\"]:checked').value;\n localStorage.setItem('address-invoice.salutation', address_invoice_salutation);\n\n let address_invoice_firstName = document.getElementById('address-invoice.firstName').value;\n localStorage.setItem('address-invoice.firstName', address_invoice_firstName);\n\n let address_invoice_lastName = document.getElementById('address-invoice.lastName').value;\n localStorage.setItem('address-invoice.lastName', address_invoice_lastName);\n\n let address_invoice_company = document.getElementById('address-invoice.company').value;\n localStorage.setItem('address-invoice.company', address_invoice_company);\n\n let address_invoice_address1 = document.getElementById('address-invoice.address1').value;\n localStorage.setItem('address-invoice.address1', address_invoice_address1);\n\n let address_invoice_address2 = document.getElementById('address-invoice.address2').value;\n localStorage.setItem('address-invoice.address2', address_invoice_address2);\n\n let address_invoice_zipCode = document.getElementById('address-invoice.zipCode').value;\n localStorage.setItem('address-invoice.zipCode', address_invoice_zipCode);\n\n let address_invoice_city = document.getElementById('address-invoice.city').value;\n localStorage.setItem('address-invoice.city', address_invoice_city);\n\n let address_invoice_email = document.getElementById('address-invoice.email').value;\n localStorage.setItem('address-invoice.email', address_invoice_email);\n\n } else {\n\n let errorAmount = document.querySelectorAll('.data-input .form__error:not([hidden])').length;\n\n // Communicate that input errors have occurred via document title and live region\n document.title = `${errorAmount} Fehler bei der Eingabe` + document.title;\n document.querySelector('#filter-live-region').textContent = `${errorAmount} Fehler bei der Eingabe`;\n\n // Find the first incorrect field and focus on it\n if ( document.querySelector('input[aria-invalid=\"true\"]')) {\n document.querySelector('input[aria-invalid=\"true\"]').focus();\n }\n }\n });\n });\n}\n","export function animations() {\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: no-preference)');\n const hasReducedMotionPreference = localStorage.getItem('animating') === \"false\";\n const button = document.querySelector('#festive-animation-ani-toggle');\n\n function mQDetection() {\n if (mediaQuery.matches) {\n document.body.classList.add('allows-animation');\n document.body.classList.add('show-animation-controls');\n localStorage.setItem('animating', 'true');\n } else {\n document.body.classList.remove('allows-animation');\n document.body.classList.remove('show-animation-controls');\n localStorage.setItem('animating', 'false');\n }\n }\n\n if (mediaQuery.matches && !hasReducedMotionPreference) {\n document.body.classList.add('allows-animation');\n document.body.classList.add('show-animation-controls');\n button.textContent = \"Pause animation\";\n\n } else {\n document.body.classList.remove('allows-animation');\n button.textContent = \"Start animation\";\n }\n\n if (hasReducedMotionPreference) {\n button.textContent = \"Start animation\";\n }\n\n if (localStorage.getItem('animating') === 'false') {\n document.body.classList.remove('allows-animation');\n document.body.classList.add('show-animation-controls');\n button.textContent = \"Start animation\";\n }\n\n mQDetection();\n\n mediaQuery.addEventListener('change', () => {\n mQDetection();\n });\n\n button.addEventListener('click', () => {\n\n if (document.body.classList.contains('allows-animation')) {\n // Disbale animation\n document.body.classList.remove('allows-animation');\n localStorage.setItem('animating', 'false');\n button.textContent = \"Start animation\";\n } else {\n // Enabke animation\n document.body.classList.add('allows-animation');\n localStorage.setItem('animating', 'true');\n button.textContent = \"Pause animation\";\n\n }\n }\n )\n}\n"],"names":["$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","b","window","c","d","length","e","l","push","prepare","sort","sortBy","g","h","document","i","parseFloat","j","k","n","Array","from","String","fromCharCode","o","p","q","selector","order","attr","data","useVal","place","returns","cases","natural","forceStrings","ignoreDashes","sortFunction","useFlex","emptyEnd","console","r","s","Element","prototype","matches","msMatchesSelector","loop","A","arguments","B","C","L","hasSelector","hasAttr","hasData","hasFilter","sortReturnNumber","f","charAt","charCodeAt","v","I","forEach","G","appendChild","elm","w","createElement","ghost","parentNode","insertBefore","x","removeChild","y","querySelector","getAttribute","value","textContent","z","toLowerCase","replace","indexOf","D","querySelectorAll","F","E","Object","assign","warn","createDocumentFragment","H","J","K","M","N","O","P","rootNode","Q","getComputedStyle","display","pos","posn","splice","apply","Number","MAX_SAFE_INTEGER","concat","Math","random","match","substr","isNaN","m","toString","u","children","style","firstChild","lastChild","map","plugin","defaults","define","amd","tinysort","defineProperty","get","cart","set","enumerable","configurable","$c2gn4","cartModal","PetiteVue","createApp","products","filterLiveRegion","table","cartCaptionTotal","JSON","parse","localStorage","getItem","amount","invoiceDataHidden","sum","totalCartItems","sortDirection","giftwrapPrice","sortedProducts","p1","p2","modifier","updateItemPrice","product","getCartItemById","event","target","persistCart","getLocalSum","getLocalTotal","updateCartItemAmount","updateTotalSum","whenMounted","setTimeout","cartItemAmount","cI","theSum","price","giftwrap","cartItem","returnVal","localTotal","localSum","isInCart","find","changeSort","getProductById","filter","setItem","stringify","toggleCartItem","productId","name","$refs","focus","showModal","toggleGiftWrap","item","addedOrRemoved","hasGiftwrap","mount","cartDialog","addEventListener","event1","nodeName","close","$81e41802ed93763f$exports","$0310234b6907e102$export$40ba32d7e7abefe9","el","setExpanded","tagName","setAttribute","onOver","onOut","pX","pY","mouseOver","focused","state","timer","options","sensitivity","interval","timeout","handleFocus","tracker","clientX","clientY","dispatchOver","clearTimeout","removeEventListener","compare","abs","undefined","dispatchOut","dispatchFocus","dispatchBlur","removeFocus","opt","focusOptionChanged","remove","megamenu","responsiveWidth","parseInt","responsive","evt","triggers","urlParams","URLSearchParams","location","search","body","classList","contains","opened_menu","offsetWidth","relatedTarget","activeElement","closest","previousElementSibling","open_toggle_button","key","menu","bu1","$29701fd2209d9ab4$var$mainSearchToggle","getElementById","$29701fd2209d9ab4$var$resizeFunc","$29701fd2209d9ab4$var$resizeEndHappened","onresize","$48df0946d6b0a87e$var$ComboboxSearch","HTMLElement","constructor","input","listbox","listboxOptionContainerProducts","listboxOptionContainerPages","statusElement","filteredOptions","searchTerm","allProductOptions","allPageOptions","startsOpen","debounce","onChange","bind","getAndHandleAllOptions","setupEventListeners","page","fn","wait","t","args","getQuery","trim","form","onFormSubmit","onFocusOut","onInput","onKeyup","newSearchTerm","updateSearchForTerm","innerHTML","getSearchResults","newTerm","searchForTextElement","innerText","getLowercaseContentWithoutPrice","node","includes","realTimeOptionAmount1","realTimeOptionAmount2","setLiveRegionText","yieldNoResultsInLiveRegion","open","statusText","width","getBoundingClientRect","top","height","preventDefault","switchOption","selectOption","select","emptyAriaActivedescendant","selectedOption","click","direction","moveUp","selectedElement","allVisibleElements","offsetParent","activeElementIndex","selectedElementIndex","customElements","addPolyfill","CustomEvent","type","bubbles","cancelable","c1Generated","dispatchEvent","removePolyfill","onfocusin","$fa81208e0a0a8f4a$var$myCarousel","carousel","slides","index","slidenav","settings","setFocus","announceItem","animationSuspended","hasClass","className","RegExp","test","setSlides","new_current","setFocusHere","transition","announceItemHere","new_next","new_prev","removeAttribute","buttons","nextSlide","animate","prevSlide","stopAnimation","_this","startAnimation","suspendAnimation","ctrls","li","startAnimated","forEachElement","elements","button","localName","liveregion","slide","split","join","next","prev","goto","stop","start","$fa81208e0a0a8f4a$export$99e00de73f33b819","carouselAutostart","$gCiTj","$24e87f2b64c7c1bd$var$cookieModal","$24e87f2b64c7c1bd$var$cartModal","$24e87f2b64c7c1bd$var$urlParams","$24e87f2b64c7c1bd$var$cartModalTriggers","$24e87f2b64c7c1bd$var$triggerBigImageDialog","$24e87f2b64c7c1bd$var$bigImageDialog","rect","left","cartModalTrigger","mediaQuery","matchMedia","hasReducedMotionPreference","mQDetection","add","mq","setToDesktop","setToMobile","disclosure","requiredFields","emailFields","registerUserCheckBox","passwordField1","passwordField2","passwordFieldHideShows","registerUserArea","forms","checked","passwordFieldHideShow","liveRegion","nextElementSibling","passwordInput","requiredField","requiredFieldsetisChecked","fieldInputEmptyThoughRequired","idRefRequired","idRefMismatch","emailField","email","idRefEmail","re","hidden","errorAmount","title","href","address_salutation","address_firstName","address_lastName","address_company","address_address1","address_address2","address_zipCode","address_city","address_email","addressIsInvoiceAddress","removeItem","address_invoice_salutation","address_invoice_firstName","address_invoice_lastName","address_invoice_company","address_invoice_address1","address_invoice_address2","address_invoice_zipCode","address_invoice_city","address_invoice_email","sortOption"],"version":3,"file":"index.d28a3723.js.map"}