1globalThis.process??={},globalThis.process.env??={};import{t as e}from"./notification.BTtIu9l4.js";import{b as t,i as n,m as r}from"./store.CyWqYA5G.js";import{a as i,t as a}from"./get-deliverability.vtzkdskv.js";import{n as o,t as s}from"./imageservice.DfKtKgks.js";import{t as c}from"./quantity-control.ocJ876iS.js";import{n as l}from"./datalayer.Ct9Q_26a.js";import{n as u}from"./prefetch.BvVJ_NFL.js";var d=(function(){var e=window.MutationObserver||window.WebKitMutationObserver;return function(t,n){if(!(!t||t.nodeType!==1))if(e){var r=new e(n);return r.observe(t,{childList:!0,subtree:!0}),r}else window.addEventListener&&(t.addEventListener(`DOMNodeInserted`,n,!1),t.addEventListener(`DOMNodeRemoved`,n,!1))}})(),f={async init(){try{let e=await fetch(`/api/tracking/cart`,{method:`GET`,credentials:`include`});if(!e.ok){console.warn(`Failed to fetch cart data for tracking:`,e.status);return}let t=await e.json();t.success&&t.cartData&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push(t.cartData),console.log(`Cart tracking data added to dataLayer:`,t.cartData))}catch(e){console.warn(`Error fetching cart data for tracking:`,e)}},async refresh(){await this.init()},async pushViewCart(){try{let e=await fetch(`/api/tracking/cart`,{method:`GET`,credentials:`include`});if(!e.ok){console.warn(`Failed to fetch cart data for view_cart tracking:`,e.status);return}let t=await e.json();t.success&&t.cartData&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:`view_cart`,...t.cartData}))}catch(e){console.warn(`Error fetching cart data for view_cart tracking:`,e)}}};document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{f.init()}):f.init();var p={vars:{componentQuery:`*[data-js=offcanvas]`,bodyQuery:`*[data-offcanvas-body]`,closeQuery:`*[data-offcanvas-close]`,idAttribute:`data-offcanvas-id`,triggerOpenIdAttribute:`data-offcanvas-trigger-open-id`,scrollToTopAttribute:`data-offcanvas-scroll-top-on-change`,setInitialCartLayerDataAttribute:`data-offcanvas-set-cart-layer-data`,openInitially:`data-offcanvas-open-initially`,showClass:`offcanvas--show`,htmlTagShowClass:`offcanvas-is-visible`},init(){p.addEventTrigger()},addEventTrigger(){document.body.addEventListener(`click`,e=>{if(e.pointerId===-1)return!1;let t=e.target||e.currentTarget;p.clickOutside(t)});let e=document.querySelectorAll(`*[${p.vars.triggerOpenIdAttribute}]`);if(e.length===0)return!1;for(let t of e)t.addEventListener(`click`,e=>{e.preventDefault();let n=t.getAttribute(p.vars.triggerOpenIdAttribute);p.closeAll(),p.open(n);let r=document.querySelector(`*[${p.vars.idAttribute}="${n}"]`);r&&r.getAttribute(p.vars.setInitialCartLayerDataAttribute)===`true`&&f.pushViewCart()});let t=document.querySelectorAll(p.vars.closeQuery);if(t.length===0)return!1;for(let e of t)e.addEventListener(`click`,()=>{p.closeAll()});let n=document.querySelectorAll(p.vars.componentQuery);for(let e of n){let t=1;if(e.getAttribute(p.vars.scrollToTopAttribute)===`true`&&d(e,()=>{t%2==0&&e.classList.contains(p.vars.showClass)&&window.scroll({top:0,behavior:`smooth`}),t++}),e.getAttribute(p.vars.openInitially)===`true`){let t=e.getAttribute(p.vars.idAttribute);p.open(t)}}},clickOutside(e){let t=e.closest(p.vars.componentQuery),n=e.closest(`*[${p.vars.triggerOpenIdAttribute}]`);!t&&!n&&p.closeAll()},closeAll(){let e=document.querySelectorAll(p.vars.componentQuery);if(e.length===0)return!1;for(let t of e)t.classList.remove(p.vars.showClass),document.documentElement.classList.remove(p.vars.htmlTagShowClass)},open(e=``){let t=document.querySelector(`*[${p.vars.idAttribute}="${e}"]`);if(!t)return!1;t.getAttribute(p.vars.setInitialCartLayerDataAttribute)===`true`&&!_.vars.dataInitialized&&_.setInitialCartLayerData(),t.classList.add(p.vars.showClass),document.documentElement.classList.add(p.vars.htmlTagShowClass)}},m=class{constructor(e){this.data=e}get id(){return this.data.id||``}get title(){return this.data.label||``}get quantity(){return this.data.quantity||``}get price(){return this.data.price?.totalPrice?.toFixed(2).replace(`.`,`,`)||``}get unitPrice(){return`${this.data.price?.unitPrice.toFixed(2).replace(`.`,`,`)||``}`}get deliveryTime(){return a(this.deliveryMessage,``,this.reportingKey,this.isEmbargoProduct,this.releaseDate,this.formattedReleaseDate,this.type,this.stock).message||``}get cover(){return this.data.payload?.customFields?.av_middleware_integration_coverlink||``}get authorNames(){return this.data.payload?.customFields?.av_middleware_integration_author_names||``}get seoUrl(){return this.data.payload?.customFields?.av_middleware_integration_frontend_url||``}get type(){return this.data.payload?.customFields?.av_middleware_integration_producttype||this.data.type||``}get trackingData(){let e=this.seoUrl.slice(-13),t=this.data?.label?.replace(/'/g,`´`)||``,n={id:this.data.id,item_id:e,item_name:t,price:this.data.price.unitPrice,quantity:this.data.price.quantity};return JSON.stringify(n).replace(/"/g,`'`)}getPictureHTML(e,t,n=`lazy`){return` 2 <picture> 3 ${o({min:1280,src:this.cover,width:88,format:`best`})} 4 ${o({min:0,src:this.cover,width:72,format:`best`})} 5 <img src="${s({src:this.cover,width:88,format:`jpg`,noRetina:!0})}" alt="${this.title}" width="${e}" height="${t}" loading=${n} decoding="async"> 6 </picture> 7 `}get maxPurchase(){return this.data.quantityInformation?.maxPurchase||1}get authors(){return this.data.authors||`CLARE MACHINTOSH ##static##`}
7get shopId(){return this.data.id||``}get deliveryMessage(){return this.data.payload?.customFields?.av_middleware_integration_libri_delivery_message||``}get isEmbargoProduct(){return this.data.payload?.customFields?.av_middleware_integration_is_embargo_product||``}get reportingKey(){return this.data.payload?.customFields?.av_middleware_integration_libri_reporting_key||``}get releaseDate(){return this.data.payload?.customFields?.av_middleware_integration_release_date||``}get formattedReleaseDate(){let e=this.data.payload?.customFields?.av_middleware_integration_release_date||``;return e?new Date(e).toLocaleString(`de-DE`,{year:`numeric`,month:`2-digit`,day:`2-digit`,timeZone:`Europe/Berlin`}):null}get url(){return this.data.payload?.customFields?.av_middleware_integration_frontend_url?`/buch/${this.data.payload.customFields.av_middleware_integration_frontend_url}`:null}get getEBookFileFormat(){return this.type===`E-Book`?`EPUB`:``}get stock(){return this.data?.payload?.stock||0}},h=class{constructor(e){this.data=e}get products(){let e=this.data.lineItems||[],t=[];if(e.length>0)for(let n of e)t.push(new m(n));return t}get productQuantity(){return this.products?.length||0}get netPrice(){return this.data.price?.netPrice?.toFixed(2).replace(`.`,`,`)||``}get totalPrice(){return this.data.price?.totalPrice?.toFixed(2).replace(`.`,`,`)||``}get shippingCosts(){return this.data.deliveries[0]?.shippingCosts?.totalPrice?.toFixed(2).replace(`.`,`,`)||`0,00`}get shippingMethod(){return this.data.deliveries[0]?.shippingMethod?.name||``}};function g(e=null){return e?e.addEventListener(`mouseover`,e=>{let t=e.target;if(t.closest(`a`)){let e=t.closest(`a`).href;e?.length>0&&u(e)}}):``}var _={vars:{componentQuery:`*[data-js=cart]`,addVoucherButtonQuery:`*[data-cart-voucher-button]`,voucherInputQuery:`*[data-cart-voucher-input]`,reloadLinkQuery:`*[data-cart-reload-link]`,cartNumberAttribute:`data-cart-number`,addItemTriggerAttribute:`data-cart-add`,productItemTriggerAttribute:`data-cart-product`,removeItemTriggerAttribute:`data-cart-remove`,removeAllItemsTriggerAttribute:`data-cart-remove-all`,addItemApi:`/api/cart/additem?id=`,removeItemApi:`/api/cart/removeitem?id=`,removeAllItemsApi:`/api/cart/deletecart`,getItemsApi:`/api/cart/getcart`,updateItemApi:`/api/cart/updateitem`,addPromotionApi:`/api/cart/addpromotion?id=`,contextToken:`sw-context-token`,lastContextToken:`sw-last-context-token`,loginToken:`sw-login-token`,lastLoginToken:`sw-last-login-token`,offcanvasId:`cart`,dataInitialized:!1,alertText:{update:`Warenkorb aktualisiert.`,add:`1 Produkt zum Warenkorb hinzugefügt.`,remove:`1 Produkt vom Warenkorb entfernt.`,removeAll:`Warenkorb geleert`,noProducts:`Keine Produkte im Warenkorb.`,addVoucher:`Gutschein hinzugefügt.`,voucherNotFound:`Gutschein nicht gefunden.`},loadingIconSvg:` 8 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" width="50" 9 height="50" 10 style="shape-rendering: auto; display: block; background: rgb(255, 255, 255);margin: 50px auto;"> 11 <g> 12 <circle cx="50" cy="50" fill="none" stroke="#000000" stroke-width="10" r="35" 13 stroke-dasharray="164.93361431346415 56.97787143782138"> 14 <animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s" 15 values="0 50 50;360 50 50" keyTimes="0;1"></animateTransform> 16 </circle> 17 <g></g> 18 </g> 19 </svg> 20 `,templates:{base(e,t=``){let n=new h(e);if(n.products.length===0)return` 21 <div class="offcanvas__body__no-items-in-cart-text"><br>${_.vars.alertText.noProducts} 22 <br> 23 <br> 24 <a href="/buch" class="offcanvas__body__explore-more-link">Jetzt Bücher entdecken</a> 25 </div> 26 `;let r=``;for(let e of n.products){let t=e.type;t===`promotion`?r+=` 27 <li> 28 ${_.vars.templates.promotion(e)} 29 </li> 30 `:t===`ebook`||(r+=` 31 <li> 32 ${_.vars.templates.default(e)} 33 </li> 34 `)}return` 35 <!--<div class="offcanvas__body__product-quantity"> 36 ${n.productQuantity} Artikel 37 </div>--> 38 <ul> 39 ${r} 40 </ul> 41 <div class="offcanvas__body__summary"> 42 <div class="offcanvas__body__summary__subtotal">
43 <span> 44 Zwischensumme 45 </span> 46 <span> 47 ${n.totalPrice} ⬠48 </span> 49 </div> 50 <div class="offcanvas__body__summary__shipping"> 51 <span> 52 Versandkosten 53 <span></span> 54 </span> 55 <span> 56 ${n.shippingCosts} ⬠57 </span> 58 </div> 59 <div class="offcanvas__body__summary__total"> 60 <span> 61 Gesamtsumme 62 <span>inkl. MwSt.</span> 63 </span> 64 <span> 65 ${n.totalPrice} ⬠66 </span> 67 </div> 68 <div class="offcanvas__body__summary__actions"> 69 <!-- 70 <div class="offcanvas__body__summary__actions__voucher"> 71 <div class="form"> 72 <div class="input w24"> 73 <label> 74 <input type="text" data-cart-voucher-input value="" oninput="this.setAttribute('value', this.value)"> 75 <span>Gutschein-Code eingeben</span> 76 </label> 77 </div> 78 <button data-cart-voucher-button> 79 <svg width="12" height="12" xmlns="http://www.w3.org/2000/svg"><path d="m6 1 5 5-5 5m5-5H1" stroke="#FFF" stroke-width="1.5" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"/></svg> 80 </button> 81 </div> 82 </div> 83 --> 84 85 ${_.getCheckoutButtonsHtml()} 86 87 <a href="/shop/cart" class="button button--outlined">Warenkorb ansehen</a> 88 </div> 89 </div> 90 `},default(e){let t=e.title,n=e.getPictureHTML(72,109);e.url&&(t=` 91 <a href="${e.url}" data-astro-prefetch="hover"> 92 ${t} 93 </a> 94 `,n=` 95 <a href="${e.url}" data-astro-prefetch="hover"> 96 ${n} 97 </a> 98 `);let r=``;e.getEBookFileFormat&&(r=`(${e.getEBookFileFormat})`);let i=e.deliveryTime?.match(/\d{2}\.\d{2}\.\d{4}/),a=``;i&&(a=`cart-item__info__description__delivery-status--purple`);let o=e.deliveryTime;return o.includes(`Lieferung`)&&!o.includes(`Lieferung ab`)&&e.reportingKey!==180&&(o=o.replace(`Lieferung`,`Lieferung ab`)),` 99 <div class="cart-item cart-item--${e.type}"> 100 <figure class="cart-item__image"> 101 ${n} 102 </figure> 103 <div class="cart-item__info"> 104 <div class="cart-item__info__description"> 105 <div class="cart-item__info__description__authors"> 106 ${e.authorNames} 107 </div> 108 <div class="cart-item__info__description__title"> 109 ${t} 110 </div> 111 <div class="cart-item__info__description__product-type"> 112 ${e.type} 113 ${r} 114 </div> 115 <div class="cart-item__info__description__delivery-status ${a}"> 116 ${o} 117 </div> 118 </div> 119 <div class="cart-item__info__quantity"> 120 <div data-js="quantity-control" class="quantity-control"> 121 <button data-quantity-control-decrease data-quantity-control-button class="quantity-control__decrease-button">â</button> 122 <label> 123 <input data-quantity-control-input aria-label="Anzahl des Produkts" class="quantity-control__input" type="number" data-cart-product="{item_id: '${e?.data?.payload?.productNumber}', item_name: '${e?.title}', price: '${e?.unitPrice}'}" name="${e.id}" value="${e.quantity}" min="1" max="${e.maxPurchase}"> 124 </label> 125 <button data-quantity-control-increase data-quantity-control-button class="quantity-control__increase-button">+</button> 126 </div> 127 </div> 128 <div class="cart-item__info__price"> 129 ${e.price} ⬠130 </div> 131 <div class="cart-item__info__unit-price"> 132 ${e.unitPrice} ⬠/ Stück 133 </div> 134 <div class="cart-item__info__actions"> 135 <button data-cart-remove="${e.trackingData}" class="cart-item__info__actions__remove">Entfernen</button> 136 </div> 137 </div> 138 </div> 139 `},promotion(e){return` 140 <div class="cart-item cart-item--${e.type}"> 141 <div class="cart-item__info"> 142 <div class="cart-item__info__description"> 143 <div class="cart-item__info__description__title"> 144 ${e.title} 145 </div> 146 </div> 147 <div class="cart-item__info__price"> 148 ${e.price} ⬠149 </div> 150 <div class="cart-item__info__actions"> 151 <button data-cart-remove="${e.trackingData}" class="cart-item__info__actions__remove">Entfernen</button> 152 </div> 153 </div> 154 </div> 155 `}},cartOffcanvasTimeout:null},init(){_.watchCartNumberAndSyncWithBadge(),c.init(),_.addEventTrigger()},watchCartNumberAndSyncWithBadge(){let e=document.querySelector(`*[${_.vars.cartNumberAttribute}]`);if(!e)return!1;t.subscribe(t=>{e.setAttribute(_.vars.cartNumberAttribute,t.shopItems)})},addEventTrigger(){let e=document.body;e.addEventListener(`click`,e=>{let t=e.target;_.eventHandler(t)}
155),e.addEventListener(`keydown`,e=>{let t=e.key;if(t===`Enter`){let n=e.target;_.eventHandler(n,t)}}),e.addEventListener(`input`,e=>{let t=e.target;if(t.closest(c.vars.componentQuery)){let n=t.name,r=parseInt(t.value),i=e.detail?.trigger||`update_cart`,a=t.getAttribute(`data-cart-product`).match(/(\w+):\s*'([^']+)'/g),o={};a&&a.forEach(e=>{let[t,n]=e.split(`:`).map(e=>e.trim());o[t]=n.replace(/'/g,``)});let s={id:n,item_id:o?.item_id,item_name:o?.item_name,price:o?.price?.replace(`,`,`.`),quantity:r,trigger:i};_.updateItem(s,750)}}),g(document.querySelector(`*[${p.vars.idAttribute}=${_.vars.offcanvasId}]`))},eventHandler(e,t=``){if(e.closest(`*[${_.vars.addItemTriggerAttribute}]`))_.addItem(e.closest(`*[${_.vars.addItemTriggerAttribute}]`).getAttribute(_.vars.addItemTriggerAttribute));else if(e.closest(`*[${_.vars.removeItemTriggerAttribute}]`))_.removeItem(e.closest(`*[${_.vars.removeItemTriggerAttribute}]`).getAttribute(_.vars.removeItemTriggerAttribute));else if(e.closest(`*[${_.vars.removeAllItemsTriggerAttribute}]`))_.removeAllItems();else if(e.closest(_.vars.addVoucherButtonQuery)||e.closest(_.vars.voucherInputQuery)&&t===`Enter`){let e=document.querySelector(_.vars.voucherInputQuery).value;_.addVoucher(e)}},async setInitialCartLayerData(){let e=await(await fetch(`${_.vars.getItemsApi}`)).json();e.lineItems&&r(e.lineItems.length),_.updateCartOffcanvas(e,``,750),_.vars.cartLayerInitialized=!0},async addItem(t,{redirectToCart:n=!1}={}){let i=JSON.parse(t.replace(/'/g,`"`)),a=i.id;n||(_.showLoadingAnimation(),setTimeout(()=>{_.vars.dataInitialized=!0,p.open(_.vars.offcanvasId);let e=document.querySelector(`.offcanvas__body__no-items-in-cart-text`);e&&e.remove()},50));let o=await fetch(`${_.vars.addItemApi}${a}&qty=1`),s=``,c=!1;if(o)if(s=await o.json(),o.status!=`200`)e.show({gravity:`top`,position:`right`,errorcode:s,type:`error`}),s=await _.getCurrentCartData();else{let e=1;s.lineItems&&(e=s.lineItems.length),r(e),_.pushDataLayer(`add_to_cart`,i),c=!0}n||window.location.pathname===`/shop/cart`?_.reloadCartPage():(_.updateCartOffcanvas(s,`add`),c&&e.show({gravity:`top`,position:`right`,text:_.vars.alertText.add,type:`success`}))},pushDataLayer(e,t){t.item_source=i(location.pathname),t.item_source_path=`https://www.kiwi-space.de`+location.pathname;let n=l(e,t);n&&(n.path=window.location.pathname,window.dataLayer?.push(n))},async removeItem(e){let t=JSON.parse(e.replace(/'/g,`"`)),n=t.id,i=await(await fetch(`${_.vars.removeItemApi}${n}`)).json(),a=1;i.lineItems&&(a=i.lineItems.length),r(a),_.pushDataLayer(`remove_from_cart`,t),window.location.pathname===`/shop/cart`?_.reloadCartPage():_.updateCartOffcanvas(i)},async removeAllItems(){await fetch(`${_.vars.removeAllItemsApi}`),r(0),window.location.pathname===`/shop/cart`?_.reloadCartPage():_.updateCartOffcanvas(null)},async updateItem(e,t=0){let n=await(await fetch(`${_.vars.updateItemApi}?id=${e.id}&qty=${e.quantity}`)).json(),i=1;n.lineItems&&(i=n.lineItems.length),r(i),_.pushDataLayer(e.trigger,e),window.location.pathname===`/shop/cart`?_.reloadCartPage():(_.updateCartOffcanvas(n,``,t),_.vars.dataInitialized=!0,p.open(_.vars.offcanvasId))},async addVoucher(t){let n=await(await fetch(`${_.vars.addPromotionApi}${t}`)).json();n.errors[`promotion-not-found`]||n.errors[`auto-promotion-not-found-promotion-`]||n.errors.length===0?e.show({gravity:`top`,position:`right`,text:_.vars.alertText.voucherNotFound,type:`error`}):(window.location.pathname===`/shop/cart`?_.reloadCartPage():e.show({gravity:`top`,position:`right`,text:_.vars.alertText.addVoucher,type:`success`}),_.updateCartOffcanvas(n))},updateCartOffcanvas(e=null,t=``,n=0){let r=document.querySelector(`*[${p.vars.idAttribute}=${_.vars.offcanvasId}]`);if(!r)return!1;let i=r.querySelector(p.vars.bodyQuery);if(!i)return!1;clearTimeout(_.vars.cartOffcanvasTimeout),_.vars.cartOffcanvasTimeout=setTimeout(()=>{i.innerHTML=_.vars.templates.base(e,t)},n)},reloadCartPage(){window.location.href=`/shop/cart`},async getCurrentCartData(){return await(await fetch(`${_.vars.getItemsApi}`)).json()},showLoadingAnimation(){let e=document.querySelector(`*[${p.vars.idAttribute}=${_.vars.offcanvasId}]`).querySelector(p.vars.bodyQuery);e.innerHTML=_.vars.loadingIconSvg},getCheckoutButtonsHtml(){return n(),` 156 <div> 157 <a href="/shop/checkout/confirm" class="button datalayer-to-checkout-button"> 158 Zur Kasse 159 </a> 160 </div> 161 `}};export{d as a,p as i,g as n,h as r,_ as t};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.