{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/bb-gewaehrleistungslabel.js?cb=16873"],
  "sourcesContent": ["/**\n * bureau bravo: \u00D6ffnet das EU-Gew\u00E4hrleistungslabel im Modal (snippets/bb-gewaehrleistungslabel.liquid).\n * Palo Alto schlie\u00DFt den Cart-Drawer per keyup Escape. Der native Dialog schlie\u00DFt schon beim keydown und gibt\n * den Fokus an \u201ELabel ansehen\u201C im Drawer zur\u00FCck, der folgende keyup w\u00FCrde also den Drawer mitschlie\u00DFen.\n * Deshalb fangen wir das Escape (keydown und den zugeh\u00F6rigen keyup) ab, solange bzw. nachdem das Label offen war.\n */\nclass BbGewaehrleistungslabel extends HTMLElement {\n  #dialog = null;\n  #lockedByUs = false;\n  #swallowEscapeKeyup = false;\n\n  connectedCallback() {\n    const button = this.querySelector('.bb-gewaehrleistung__open');\n    button?.addEventListener('click', this.#open);\n    // Dialog (und damit das Label-Bild) schon vor dem Klick anlegen, damit es beim \u00D6ffnen geladen ist\n    button?.addEventListener('pointerenter', this.#prepare, { once: true });\n    button?.addEventListener('focus', this.#prepare, { once: true });\n  }\n\n  disconnectedCallback() {\n    this.querySelector('.bb-gewaehrleistung__open')?.removeEventListener('click', this.#open);\n    this.#removeKeyListeners();\n  }\n\n  #prepare = () => this.#getDialog();\n\n  #open = () => {\n    const dialog = this.#getDialog();\n    if (!dialog || dialog.open) return;\n\n    // Scroll-Sperre \u00FCber die Theme-Events (theme:scroll:lock), nur wenn nicht schon der Drawer sperrt\n    this.#lockedByUs = !document.documentElement.hasAttribute('data-scroll-locked');\n    if (this.#lockedByUs) document.dispatchEvent(new CustomEvent('theme:scroll:lock', { bubbles: true }));\n\n    window.addEventListener('keydown', this.#onKeydown, true);\n    window.addEventListener('keyup', this.#onKeyup, true);\n    dialog.showModal();\n  };\n\n  #onKeydown = (event) => {\n    if (!this.#dialog?.open || event.key !== 'Escape') return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    this.#swallowEscapeKeyup = true;\n    this.#dialog.close();\n  };\n\n  #onKeyup = (event) => {\n    if (event.key !== 'Escape' || !this.#swallowEscapeKeyup) return;\n\n    event.stopPropagation();\n    this.#swallowEscapeKeyup = false;\n    this.#removeKeyListeners();\n  };\n\n  #removeKeyListeners() {\n    window.removeEventListener('keydown', this.#onKeydown, true);\n    window.removeEventListener('keyup', this.#onKeyup, true);\n  }\n\n  #getDialog() {\n    if (this.#dialog) return this.#dialog;\n\n    const template = this.querySelector('template');\n    const dialog = template?.content.firstElementChild?.cloneNode(true);\n    if (!(dialog instanceof HTMLDialogElement)) return null;\n\n    dialog.addEventListener('click', (event) => {\n      // Klick auf den Hintergrund trifft den Dialog selbst (padding: 0)\n      if (event.target === dialog || event.target.closest('[data-bb-gewaehrleistung-close]')) dialog.close();\n    });\n    dialog.addEventListener('close', () => {\n      // Nach Escape bleibt der keyup-Filter bis zum keyup aktiv, sonst sofort aufr\u00E4umen\n      if (!this.#swallowEscapeKeyup) this.#removeKeyListeners();\n      if (this.#lockedByUs) document.dispatchEvent(new CustomEvent('theme:scroll:unlock', { bubbles: true }));\n      this.#lockedByUs = false;\n    });\n\n    this.append(dialog);\n    this.#dialog = dialog;\n    return dialog;\n  }\n}\n\nif (!customElements.get('bb-gewaehrleistungslabel')) {\n  customElements.define('bb-gewaehrleistungslabel', BbGewaehrleistungslabel);\n}\n"],
  "mappings": "AAMA,MAAM,gCAAgC,WAAY,CAChD,QAAU,KACV,YAAc,GACd,oBAAsB,GAEtB,mBAAoB,CAClB,MAAM,OAAS,KAAK,cAAc,2BAA2B,EAC7D,QAAQ,iBAAiB,QAAS,KAAK,KAAK,EAE5C,QAAQ,iBAAiB,eAAgB,KAAK,SAAU,CAAE,KAAM,EAAK,CAAC,EACtE,QAAQ,iBAAiB,QAAS,KAAK,SAAU,CAAE,KAAM,EAAK,CAAC,CACjE,CAEA,sBAAuB,CACrB,KAAK,cAAc,2BAA2B,GAAG,oBAAoB,QAAS,KAAK,KAAK,EACxF,KAAK,oBAAoB,CAC3B,CAEA,SAAW,IAAM,KAAK,WAAW,EAEjC,MAAQ,IAAM,CACZ,MAAM,OAAS,KAAK,WAAW,EAC3B,CAAC,QAAU,OAAO,OAGtB,KAAK,YAAc,CAAC,SAAS,gBAAgB,aAAa,oBAAoB,EAC1E,KAAK,aAAa,SAAS,cAAc,IAAI,YAAY,oBAAqB,CAAE,QAAS,EAAK,CAAC,CAAC,EAEpG,OAAO,iBAAiB,UAAW,KAAK,WAAY,EAAI,EACxD,OAAO,iBAAiB,QAAS,KAAK,SAAU,EAAI,EACpD,OAAO,UAAU,EACnB,EAEA,WAAc,OAAU,CAClB,CAAC,KAAK,SAAS,MAAQ,MAAM,MAAQ,WAEzC,MAAM,eAAe,EACrB,MAAM,gBAAgB,EACtB,KAAK,oBAAsB,GAC3B,KAAK,QAAQ,MAAM,EACrB,EAEA,SAAY,OAAU,CAChB,MAAM,MAAQ,UAAY,CAAC,KAAK,sBAEpC,MAAM,gBAAgB,EACtB,KAAK,oBAAsB,GAC3B,KAAK,oBAAoB,EAC3B,EAEA,qBAAsB,CACpB,OAAO,oBAAoB,UAAW,KAAK,WAAY,EAAI,EAC3D,OAAO,oBAAoB,QAAS,KAAK,SAAU,EAAI,CACzD,CAEA,YAAa,CACX,GAAI,KAAK,QAAS,OAAO,KAAK,QAG9B,MAAM,OADW,KAAK,cAAc,UAAU,GACrB,QAAQ,mBAAmB,UAAU,EAAI,EAClE,OAAM,kBAAkB,mBAExB,OAAO,iBAAiB,QAAU,OAAU,EAEtC,MAAM,SAAW,QAAU,MAAM,OAAO,QAAQ,iCAAiC,IAAG,OAAO,MAAM,CACvG,CAAC,EACD,OAAO,iBAAiB,QAAS,IAAM,CAEhC,KAAK,qBAAqB,KAAK,oBAAoB,EACpD,KAAK,aAAa,SAAS,cAAc,IAAI,YAAY,sBAAuB,CAAE,QAAS,EAAK,CAAC,CAAC,EACtG,KAAK,YAAc,EACrB,CAAC,EAED,KAAK,OAAO,MAAM,EAClB,KAAK,QAAU,OACR,QAf4C,IAgBrD,CACF,CAEK,eAAe,IAAI,0BAA0B,GAChD,eAAe,OAAO,2BAA4B,uBAAuB",
  "names": []
}
