{
  "version": 3,
  "sources": ["/cdn/shop/t/119/assets/custom-3d-model-viewer.js?custom_v=custom-3d-eigenes-element-20260805"],
  "sourcesContent": ["(() => {\n  'use strict';\n\n  const SELECTOR = '[data-custom-3d-model-viewer]';\n  const ELEMENT = 'ngb-model-viewer';\n  const EDGE_SAFETY_MARGIN = 1.04;\n\n  /* CUSTOM 2026-08-05 \u2014 Ursache der dauerhaft leeren Section.\n\n     Vorher wurde die Bibliothek hier von unpkg.com nachgeladen, aber nur dann:\n       if (window.customElements?.get('model-viewer')) return;\n     Auf Produktseiten mit 3D-Medien laedt die Produktgalerie des Themes vorher Shopifys eigene,\n     deutlich aeltere model-viewer-Fassung (v1.12) \u2014 damit war der Elementname bereits vergeben,\n     der Nachladeversuch brach ab, und die Section arbeitete auf einer fremden Bibliothek, die ihr\n     Modell nie angefordert hat. Kein Fehler, kein Ereignis, nur eine leere Flaeche.\n\n     Jetzt bringt die Section ihre eigene Fassung unter eigenem Namen mit\n     (assets/custom-model-viewer.js, <ngb-model-viewer>). Kein Wettlauf um den Namen mehr, keine\n     Abhaengigkeit von einem fremden CDN, und die Produktgalerie bleibt voellig unberuehrt. */\n  const loadModelViewer = (beiBereit) => {\n    if (window.customElements?.get(ELEMENT)) {\n      beiBereit?.();\n      return;\n    }\n\n    window.customElements?.whenDefined(ELEMENT).then(() => beiBereit?.());\n  };\n\n  class Custom3DModelViewer {\n    constructor(section) {\n      this.section = section;\n      this.modelViewer = section.querySelector(ELEMENT);\n      if (!this.modelViewer) return;\n\n      this.enabled = section.dataset.scrollRotation === 'true';\n      this.rotation = Number(section.dataset.scrollRotationDegrees || 180);\n      this.baseOrbit = section.dataset.cameraOrbit || '0deg 75deg auto';\n      this.modelFill = this.clamp(Number(section.dataset.modelFill || 98), 95, 100) / 100;\n      this.verticalPosition = this.clamp(Number(section.dataset.verticalPosition || 50), 0, 100);\n      this.horizontalPosition = this.clamp(Number(section.dataset.horizontalPosition || 50), 0, 100);\n      this.raf = null;\n      this.resizeRaf = null;\n      this.frameRaf = null;\n      this.frameTimeout = null;\n      this.frameTimeouts = [];\n      this.frameAttempts = 0;\n\n      this.onScroll = this.onScroll.bind(this);\n      this.onResize = this.onResize.bind(this);\n      this.onModelLoad = this.onModelLoad.bind(this);\n      this.onModelError = this.onModelError.bind(this);\n\n      this.modelViewer.addEventListener('load', this.onModelLoad);\n      this.modelViewer.addEventListener('error', this.onModelError);\n      window.addEventListener('resize', this.onResize);\n      this.scheduleRefit();\n\n      if (this.modelViewer.loaded) {\n        this.markLoaded();\n      }\n\n      /* CUSTOM 2026-08-05 \u2014 Notausgang gegen die dauerhaft leere Section.\n         Das Section-CSS haelt <model-viewer> auf opacity:0, solange die Klasse \"is-loaded\" fehlt\n         (sections/custom-3d-model-viewer.liquid). Gesetzt wird sie nur beim 'load'- oder\n         'error'-Ereignis des Modells. Bleibt beides aus \u2014 Bibliothek nicht geladen, Element nie\n         zur Komponente aufgewertet, Modell haengt \u2014 bleibt die Section fuer immer unsichtbar,\n         obwohl Markup und Hoehe vorhanden sind. Genau dieses Bild war zu sehen.\n         Nach der Frist wird deshalb in jedem Fall aufgedeckt und der Grund protokolliert. */\n      this.revealTimeout = window.setTimeout(() => {\n        if (this.section.classList.contains('is-loaded')) return;\n\n        const registriert = Boolean(window.customElements?.get(ELEMENT));\n        console.warn(\n          '[3D-Modell] Nach 8 Sekunden kein load-Ereignis.',\n          registriert\n            ? 'Die Komponente ist registriert \u2014 vermutlich haengt das Laden der GLB-Datei.'\n            : 'Das Element ngb-model-viewer wurde nicht registriert \u2014 assets/custom-model-viewer.js pruefen.',\n          { quelle: this.modelViewer.getAttribute('src') }\n        );\n\n        this.markLoaded();\n      }, 8000);\n\n      if (this.enabled) {\n        window.addEventListener('scroll', this.onScroll, { passive: true });\n        this.onScroll();\n      }\n    }\n\n    destroy() {\n      if (this.revealTimeout) {\n        window.clearTimeout(this.revealTimeout);\n      }\n\n      this.modelViewer.removeEventListener('load', this.onModelLoad);\n      this.modelViewer.removeEventListener('error', this.onModelError);\n      window.removeEventListener('scroll', this.onScroll);\n      window.removeEventListener('resize', this.onResize);\n\n      if (this.raf) {\n        window.cancelAnimationFrame(this.raf);\n      }\n\n      if (this.resizeRaf) {\n        window.cancelAnimationFrame(this.resizeRaf);\n      }\n\n      if (this.frameRaf) {\n        window.cancelAnimationFrame(this.frameRaf);\n      }\n\n      if (this.frameTimeout) {\n        window.clearTimeout(this.frameTimeout);\n      }\n\n      this.frameTimeouts.forEach((timeout) => window.clearTimeout(timeout));\n      this.frameTimeouts = [];\n    }\n\n    onModelLoad() {\n      this.markLoaded();\n      this.refit();\n      this.scheduleRefit();\n    }\n\n    onModelError() {\n      this.markLoaded();\n    }\n\n    markLoaded() {\n      this.section.classList.add('is-loaded');\n    }\n\n    onResize() {\n      if (this.resizeRaf) return;\n\n      this.resizeRaf = window.requestAnimationFrame(() => {\n        this.resizeRaf = null;\n        this.refit();\n\n        if (this.enabled) {\n          this.applyScrollRotation();\n        }\n      });\n    }\n\n    refit() {\n      this.modelViewer.updateFraming?.();\n      const framed = this.applySafeFraming();\n      this.modelViewer.jumpCameraToGoal?.();\n\n      return framed;\n    }\n\n    scheduleRefit() {\n      if (this.frameRaf) {\n        window.cancelAnimationFrame(this.frameRaf);\n      }\n\n      if (this.frameTimeout) {\n        window.clearTimeout(this.frameTimeout);\n      }\n\n      this.frameTimeouts.forEach((timeout) => window.clearTimeout(timeout));\n      this.frameTimeouts = [];\n      this.frameAttempts = 0;\n\n      this.frameRaf = window.requestAnimationFrame(() => {\n        this.frameRaf = null;\n        this.refitUntilReady();\n\n        [80, 180, 360, 700, 1200, 2000].forEach((delay) => {\n          const timeout = window.setTimeout(() => {\n            this.refitUntilReady();\n          }, delay);\n\n          this.frameTimeouts.push(timeout);\n        });\n      });\n    }\n\n    refitUntilReady() {\n      const framed = this.refit();\n      this.frameAttempts += 1;\n\n      if (framed || this.frameAttempts >= 40) return;\n\n      const timeout = window.setTimeout(() => {\n        this.refitUntilReady();\n      }, 100);\n\n      this.frameTimeouts.push(timeout);\n    }\n\n    applySafeFraming() {\n      const dimensions = this.modelViewer.getDimensions?.();\n      if (!dimensions) return false;\n\n      const width = Number(dimensions.x);\n      const height = Number(dimensions.y);\n      const depth = Number(dimensions.z);\n\n      if (![width, height, depth].every((value) => Number.isFinite(value) && value > 0)) return false;\n\n      const center = this.modelViewer.getBoundingBoxCenter?.();\n      if (center && ['x', 'y', 'z'].every((axis) => Number.isFinite(Number(center[axis])))) {\n        const horizontalOffset = ((this.horizontalPosition - 50) / 100) * width;\n        const verticalOffset = ((this.verticalPosition - 50) / 100) * height;\n        const targetX = Number(center.x) - horizontalOffset;\n        const targetY = Number(center.y) - verticalOffset;\n        const targetZ = Number(center.z);\n        const centerTarget = `${targetX}m ${targetY}m ${targetZ}m`;\n\n        this.modelViewer.setAttribute('camera-target', centerTarget);\n      }\n\n      const boundingSphereRadius = Math.hypot(width, height, depth) / 2;\n      const positionOffsetRadius = Math.hypot(\n        ((this.horizontalPosition - 50) / 100) * width,\n        ((this.verticalPosition - 50) / 100) * height\n      );\n      const fieldOfView = this.getFieldOfViewRadians();\n      const aspectRatio = this.getAspectRatio();\n      const horizontalFieldOfView = 2 * Math.atan(Math.tan(fieldOfView / 2) * aspectRatio);\n      const limitingFieldOfView = Math.min(fieldOfView, horizontalFieldOfView);\n      const safeDistance =\n        (((boundingSphereRadius + positionOffsetRadius) / Math.sin(limitingFieldOfView / 2)) * EDGE_SAFETY_MARGIN) /\n        this.modelFill;\n      const orbitParts = this.baseOrbit.split(/\\s+/);\n\n      orbitParts[2] = `${safeDistance.toFixed(4)}m`;\n      this.baseOrbit = orbitParts.join(' ');\n      this.modelViewer.setAttribute('camera-orbit', this.baseOrbit);\n      this.modelViewer.setAttribute('min-camera-orbit', `auto auto ${safeDistance.toFixed(4)}m`);\n      this.modelViewer.setAttribute('max-camera-orbit', `auto auto ${safeDistance.toFixed(4)}m`);\n\n      return true;\n    }\n\n    getFieldOfViewRadians() {\n      // Wichtig: den ECHTEN, aktuell wirksamen FOV abfragen. model-viewer\n      // clampt den FOV intern, daher kann der Attribut-Wert vom realen\n      // Wert abweichen - das fuehrte zu abgeschnittenen Modellkanten.\n      const liveFieldOfView = this.modelViewer.getFieldOfView?.();\n      if (Number.isFinite(liveFieldOfView) && liveFieldOfView > 0) {\n        return (liveFieldOfView * Math.PI) / 180;\n      }\n\n      const attributeValue = this.modelViewer.getAttribute('field-of-view') || '30deg';\n      const degrees = Number.parseFloat(attributeValue);\n      const safeDegrees = Number.isFinite(degrees) && degrees > 0 ? degrees : 30;\n\n      return (safeDegrees * Math.PI) / 180;\n    }\n\n    getAspectRatio() {\n      const width = this.modelViewer.clientWidth || 1;\n      const height = this.modelViewer.clientHeight || 1;\n\n      return Math.max(width / height, 0.01);\n    }\n\n    clamp(value, min, max) {\n      if (!Number.isFinite(value)) return min;\n\n      return Math.min(Math.max(value, min), max);\n    }\n\n    onScroll() {\n      if (this.raf) return;\n\n      this.raf = window.requestAnimationFrame(() => {\n        this.raf = null;\n        this.applyScrollRotation();\n      });\n    }\n\n    applyScrollRotation() {\n      const rect = this.section.getBoundingClientRect();\n      const viewport = window.innerHeight || document.documentElement.clientHeight;\n      const travel = viewport + rect.height;\n      const progress = Math.min(Math.max((viewport - rect.top) / travel, 0), 1);\n      const theta = this.getBaseTheta() + (progress - 0.5) * this.rotation;\n      const orbitParts = this.baseOrbit.split(/\\s+/);\n\n      orbitParts[0] = `${theta.toFixed(2)}deg`;\n      this.modelViewer.setAttribute('camera-orbit', orbitParts.join(' '));\n    }\n\n    getBaseTheta() {\n      const firstValue = this.baseOrbit.split(/\\s+/)[0] || '0deg';\n      const parsed = Number.parseFloat(firstValue);\n\n      return Number.isFinite(parsed) ? parsed : 0;\n    }\n  }\n\n  const instances = new WeakMap();\n\n  const init = (scope = document) => {\n    if (!scope.querySelector(SELECTOR)) return;\n\n    /* Erst warten, bis das eigene Element registriert ist. Vorher wurde die Steuerung sofort auf\n       ein noch nicht aufgewertetes Element gesetzt \u2014 Groessen und Kamerawerte waren dann leer und\n       die Einpassung des Modells konnte nicht greifen. */\n    loadModelViewer(() => {\n      scope.querySelectorAll(SELECTOR).forEach((section) => {\n        instances.get(section)?.destroy();\n        instances.set(section, new Custom3DModelViewer(section));\n      });\n    });\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () => init());\n  } else {\n    init();\n  }\n\n  document.addEventListener('shopify:section:load', (event) => {\n    init(event.target);\n  });\n\n  document.addEventListener('shopify:section:unload', (event) => {\n    event.target.querySelectorAll(SELECTOR).forEach((section) => {\n      instances.get(section)?.destroy();\n      instances.delete(section);\n    });\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
