{
  "version": 3,
  "sources": ["/cdn/shop/t/92/assets/pdp-clean-v4-sticky.js?lly=laley-custom-20260921-epostsjekk-v860"],
  "sourcesContent": ["/* ============================================================\n   Laley PDP Clean v4 \u2014 sticky\n   Modul\u00E6r PDP-runtime. Den gamle v3-monolitten er kun historisk arkiv.\n   Registrerer metoder p\u00E5 LaleyPDP.prototype via PDP.registerModule.\n   Krever pdp-clean-v4-core.js lastet f\u00F8rst (defer-rekkef\u00F8lge i product-clean-v3-1.liquid).\n   ============================================================ */\n(() => {\n  const PDP = window.LaleyPDPCleanV4;\n  if (!PDP || typeof PDP.registerModule !== 'function') {\n    console.error('[PDP] Kjerne mangler \u2014 hopper over modul: sticky');\n    return;\n  }\n  const { cssEscape } = PDP.utils;\n\n  PDP.registerModule('sticky', {\n    refreshStickyMetrics() {\n      const cssHeight = parseFloat(\n        window.getComputedStyle(this.section).getPropertyValue('--pdp-sticky-mobile-height')\n      );\n      const measuredHeight = this.sticky && !this.sticky.hidden\n        ? Math.ceil(this.sticky.getBoundingClientRect().height)\n        : 0;\n      const fallbackHeight = Number.isFinite(cssHeight) && cssHeight > 0 ? cssHeight : 58;\n      const rawHeight = Number.isFinite(measuredHeight) && measuredHeight > 0\n        ? measuredHeight\n        : fallbackHeight;\n      const isPhone = window.matchMedia('(max-width: 749px)').matches;\n      const isTablet = window.matchMedia('(max-width: 989px)').matches;\n      const minHeight = isPhone ? 58 : 58;\n      const maxHeight = isPhone ? 74 : (isTablet ? 82 : 90);\n      this.mobileStickyHeight = Math.max(minHeight, Math.min(maxHeight, rawHeight));\n      this.section.style.setProperty('--pdp-sticky-mobile-height', `${this.mobileStickyHeight}px`);\n    },\n\n    updateStickyContent(variant) {\n      const selected = typeof this.selectedOptions === 'function' ? this.selectedOptions() : [];\n      const representativeVariant = variant\n        || this.variants.find((candidate) => (\n          candidate.available\n          && candidate.options.every((option, index) => !selected[index] || selected[index] === option)\n        ))\n        || this.variants[0]\n        || null;\n      const purchaseState = typeof this.currentPurchaseState === 'function'\n        ? this.currentPurchaseState(representativeVariant)\n        : {\n          price: representativeVariant?.price || 0,\n          compareAtPrice: representativeVariant?.compareAtPrice || 0,\n          sellingPlanId: null,\n          available: Boolean(representativeVariant?.available),\n        };\n      const sizeValues = [];\n      this.optionGroups.forEach((group) => {\n        const value = selected[Number(group.dataset.optionIndex)];\n        if (!value) return;\n        if (group.hasAttribute('data-pdp-size-group')) sizeValues.push(value);\n      });\n      const unique = (values) => Array.from(new Set(values.filter(Boolean)));\n      const purchaseLabel = purchaseState.sellingPlanId ? window.LaleyTranslate(\"subscription_964227\", \"Abonnement\") : window.LaleyTranslate(\"one_time_purchase_cbb366\", \"Engangskj\u00F8p\");\n      const stockLabel = (() => {\n        if (!variant) return '';\n        if (variant.comingSoon) return window.LaleyTranslate(\"coming_soon_cdfda8\", \"Kommer snart\");\n        if (!purchaseState.available) return window.LaleyTranslate(\"sold_out_b24d82\", \"Utsolgt\");\n        // \"P\u00E5 lager\" is noise in the sticky \u2014 only surface exceptions\n        // (coming soon / sold out / low stock), nothing for a normal in-stock item.\n        return typeof this.selectedLowStockCopy === 'function' ? this.selectedLowStockCopy(variant) : '';\n      })();\n      // Colour is intentionally left out of the sticky meta \u2014 keep it clean and\n      // summarise only the chosen size.\n      const variantBits = [\n        ...unique(sizeValues).map((value) => `${window.LaleyTranslate(\"size_78fc52\", \"Str.\")} ${value}`),\n      ];\n      if (this.stickyTitle) this.stickyTitle.textContent = this.stickyBaseTitle;\n      if (this.stickyMeta) {\n        this.stickyMeta.textContent = variantBits.join(' \u00B7 ');\n        this.stickyMeta.hidden = !this.stickyMeta.textContent;\n      }\n      if (this.stickyPriceCurrent) this.stickyPriceCurrent.textContent = this.money(purchaseState.price);\n      if (this.stickyPriceCompare) {\n        const hasCompare = Number(purchaseState.compareAtPrice) > Number(purchaseState.price);\n        this.stickyPriceCompare.textContent = hasCompare ? this.money(purchaseState.compareAtPrice) : '';\n        this.stickyPriceCompare.hidden = !hasCompare;\n      }\n      if (this.stickyStock) {\n        this.stickyStock.textContent = stockLabel;\n        this.stickyStock.dataset.state = !variant || purchaseState.available ? variant?.stockState || 'in' : 'out';\n      }\n      if (this.sticky) {\n        this.sticky.setAttribute('aria-label', [this.stickyBaseTitle, ...variantBits, this.money(purchaseState.price), stockLabel].filter(Boolean).join(', '));\n      }\n      if (this.stickyButton) {\n        if (this.purchaseFeedbackState) {\n          this.updateStickyVisibility();\n          return;\n        }\n        // PURE MIRROR of the one resolver \u2014 the sticky never re-evaluates product\n        // state. Identical mode \u2192 identical label as the main CTA (bis proxies to it).\n        const mode = typeof this.purchaseMode === 'function' ? this.purchaseMode(variant) : 'purchasable';\n        if (mode === 'coming_soon') {\n          this.stickyButton.disabled = false;\n          this.stickyButton.dataset.mode = 'kundeklubb';\n          this.stickyButton.textContent = window.LaleyTranslate(\"notify_me_e4f9e1\", \"Varsle meg\");\n        } else if (mode === 'fully_sold_out' || mode === 'selected_variant_sold_out') {\n          this.stickyButton.disabled = false;\n          this.stickyButton.dataset.mode = 'bis';\n          this.stickyButton.textContent = window.LaleyTranslate(\"notify_me_e4f9e1\", \"Varsle meg\");\n        } else if (mode === 'awaiting_size') {\n          this.stickyButton.disabled = false;\n          this.stickyButton.dataset.mode = 'pick';\n          this.stickyButton.textContent = typeof this.awaitingSizeCtaLabel === 'function'\n            ? this.awaitingSizeCtaLabel()\n            : window.LaleyTranslate(\"choose_a_size_28892d\", \"Velg st\u00F8rrelse\");\n        } else if (!variant) {\n          this.stickyButton.disabled = true;\n          this.stickyButton.dataset.mode = 'unavailable';\n          this.stickyButton.textContent = window.LaleyTranslate(\"choose_options_05d216\", \"Velg alternativer\");\n        } else {\n          this.stickyButton.disabled = false;\n          this.stickyButton.dataset.mode = 'add';\n          this.stickyButton.textContent = window.LaleyTranslate(\"add_to_cart_746b8a\", \"Legg i handlekurv\");\n        }\n      }\n      // Sticky-thumben er packshoten (siste bilde, server-rendret) og er\n      // variant-uavhengig \u2014 ingen swap ved variantbytte.\n      this.updateStickyVisibility();\n    },\n\n    bindStickyPicker() {\n      // LSF-stil: inline size-picker i sticky-bar. Native <select> for kompakthet,\n      // mirrorer hoved-pickerens valg + opdaterer ved variant-change.\n      if (this.section.dataset.pdpComingSoon === 'true') return;\n      const slot = this.section.querySelector('[data-pdp-sticky-picker]');\n      if (!slot) return;\n      // Finn f\u00F8rste ikke-color picker (typisk st\u00F8rrelse). Bundle-set bruker\n      // delt picker \u2014 vi mirrorer den om finnes, ellers f\u00F8rste size-group.\n      const sizeGroup = this.optionGroups.find((g) => {\n        const legend = (g.querySelector('legend')?.textContent || '').toLowerCase();\n        return !g.hasAttribute('data-pdp-color-group') && !/farge|color|colour/.test(legend);\n      });\n      if (!sizeGroup) return;\n      const inputs = Array.from(sizeGroup.querySelectorAll('[data-pdp-option-input]'));\n      if (inputs.length < 2) return;\n\n      const select = document.createElement('select');\n      select.className = 'pdp-clean__sticky-select lly-control lly-control--compact';\n      select.dataset.laleySizeSelect = '';\n      select.setAttribute('aria-label', window.LaleyTranslate(\"choose_a_size_28892d\", \"Velg st\u00F8rrelse\"));\n      select.required = true;\n      const placeholder = document.createElement('option');\n      placeholder.value = '';\n      // Visible label \"St\u00F8rrelse\" so the dropdown doesn't duplicate the sticky\n      // button's \"Velg st\u00F8rrelse\" prompt (aria-label stays descriptive).\n      placeholder.textContent = window.LaleyTranslate(\"size_cf6874\", \"St\u00F8rrelse\");\n      placeholder.disabled = true;\n      placeholder.selected = true;\n      select.appendChild(placeholder);\n      inputs.forEach((input) => {\n        const opt = document.createElement('option');\n        opt.value = input.value;\n        opt.textContent = input.value;\n        opt.disabled = input.disabled;\n        select.appendChild(opt);\n      });\n      const checkedInput = inputs.find((input) => input.checked && !input.disabled);\n      if (checkedInput) select.value = checkedInput.value;\n      slot.appendChild(select);\n      slot.hidden = false;\n\n      // Change i sticky-select \u2192\n      // 1) Hvis bundle-shared finnes: click matching pill (som synker til alle 3)\n      // 2) Ellers: check radio i hoved-pickeren\n      this.on(select, 'change', () => {\n        const value = select.value;\n        if (!value) return;\n        const sharedPill = this.section.querySelector(`[data-pdp-bundle-shared]:not([hidden]) .pdp-clean__bundle-shared-pill[data-value=\"${cssEscape(value)}\"]`);\n        if (sharedPill) {\n          sharedPill.click();\n          return;\n        }\n        // For bundle uten shared (mix-mode aktiv): sync til ALLE size-grupper\n        const allSizeGroups = this.optionGroups.filter((g) => {\n          const legend = (g.querySelector('legend')?.textContent || '').toLowerCase();\n          return !g.hasAttribute('data-pdp-color-group') && !/farge|color|colour/.test(legend);\n        });\n        allSizeGroups.forEach((group) => {\n          const radio = group.querySelector(`[data-pdp-option-input][value=\"${cssEscape(value)}\"]`);\n          if (radio && !radio.disabled) {\n            radio.checked = true;\n            radio.dispatchEvent(new Event('change', { bubbles: true }));\n          }\n        });\n      });\n      // N\u00E5r hoved-radio endres \u2192 speil i sticky-select\n      inputs.forEach((input) => {\n        this.on(input, 'change', () => {\n          if (input.checked) select.value = input.value;\n        });\n      });\n    },\n\n    bindSticky() {\n      if (!this.sticky || !this.stickyButton || !this.atc) return;\n      this.bindStickyPicker();\n      this.on(this.stickyButton, 'click', () => {\n        if (!this.form || this.stickyButton.disabled) return;\n        if (this.stickyButton.dataset.mode === 'kundeklubb') {\n          if (typeof this.openKundeklubb === 'function') {\n            this.openKundeklubb(this.stickyButton);\n          } else {\n            const cta = this.section.querySelector('[data-pdp-coming-soon-cta]') || document.querySelector('[data-kk-badge]');\n            if (cta instanceof HTMLElement) cta.click();\n          }\n          return;\n        }\n        // I \"pick\"-mode: scroll til ST\u00D8RRELSE-gruppen + highlight den. IKKE add-to-cart.\n        // Viktig: optionGroups[0] er Farge (pickere rendres farge-f\u00F8rst), s\u00E5 vi m\u00E5\n        // finne f\u00F8rste ikke-farge-gruppe (st\u00F8rrelse), ikke bare ta [0].\n        if (this.stickyButton.dataset.mode === 'pick') {\n          const inlinePicker = this.section.querySelector('[data-pdp-sticky-picker]');\n          const inlineSelect = inlinePicker?.querySelector('[data-laley-size-select]');\n          const inlinePickerVisible = inlinePicker\n            && !inlinePicker.hidden\n            && window.getComputedStyle(inlinePicker).display !== 'none';\n          if (inlineSelect && inlinePickerVisible) {\n            try {\n              inlineSelect.focus({ preventScroll: true });\n            } catch (error) {\n              inlineSelect.focus();\n            }\n            if (typeof inlineSelect.showPicker === 'function') {\n              try {\n                inlineSelect.showPicker();\n              } catch (error) {\n                // Safari can reject showPicker; focus still exposes the control.\n              }\n            }\n            return;\n          }\n          // Stabil target: Liquid markerer st\u00F8rrelse-fieldset med data-pdp-size-group.\n          // Fallback til legend-tekst kun hvis attributtet mangler (eldre markup).\n          const sharedPicker = this.section.querySelector('[data-pdp-bundle-shared]:not([hidden])');\n          const sizeGroup = this.section.querySelector('[data-pdp-size-group]')\n            || this.optionGroups.find((g) => {\n              const legend = (g.querySelector('legend')?.textContent || '').toLowerCase();\n              return !g.hasAttribute('data-pdp-color-group') && !/farge|color|colour/.test(legend);\n            })\n            || this.optionGroups[0];\n          const target = sharedPicker || sizeGroup;\n          if (target) {\n            // \u00C5pne ev. dropdown (kun hvis dropdown-modus er p\u00E5)\n            target.querySelectorAll('[data-pdp-dropdown]').forEach((d) => { d.open = true; });\n            target.scrollIntoView({ behavior: 'smooth', block: 'center' });\n            // Fokuser dropdown-trigger (dropdown-modus) eller f\u00F8rste ledige st\u00F8rrelse (knapp-modus)\n            const focusEl = target.querySelector('.pdp-clean__bundle-shared-pill:not(:disabled), .pdp-clean__dropdown-trigger, [data-pdp-option-input]:not(:disabled)');\n            if (focusEl && typeof focusEl.focus === 'function') {\n              try { focusEl.focus({ preventScroll: true }); } catch (e) { focusEl.focus(); }\n            }\n            // Visuell puls s\u00E5 brukeren ser HVOR de skal velge\n            target.classList.add('pdp-clean__picker--flash');\n            const timer = window.setTimeout(() => target.classList.remove('pdp-clean__picker--flash'), 1300);\n            this.timers.push(timer);\n          }\n          return;\n        }\n        // bis/add \u2192 call the ONE action owner directly with an explicit source. No\n        // proxy-click on the main CTA, no transient _restockSource flag. runPrimaryAction\n        // reads the authoritative mode from the main CTA (the sticky mirrors it).\n        this.runPrimaryAction({ source: 'sticky' });\n      });\n\n      const request = () => {\n        if (this.stickyRaf) return;\n        this.stickyRaf = window.requestAnimationFrame(() => {\n          this.stickyRaf = null;\n          this.updateStickyVisibility();\n        });\n      };\n      const requestWithMetrics = () => {\n        this.refreshStickyMetrics();\n        request();\n      };\n      this.on(window, 'scroll', request, { passive: true });\n      this.on(window, 'resize', requestWithMetrics, { passive: true });\n      this.on(window, 'orientationchange', requestWithMetrics, { passive: true });\n      this.updateStickyVisibility();\n    },\n\n    updateStickyVisibility() {\n      if (!this.sticky || !this.atc) return;\n      // Mobile keeps the purchase action available while browsing images.\n      // Yield only when the entire main CTA is usable below the visible header;\n      // a partly exposed CTA at either viewport edge still needs the sticky.\n      // Desktop retains its existing after-main behaviour.\n      const isMobile = window.matchMedia('(max-width: 989px)').matches;\n      const atcRect = this.atc.getBoundingClientRect();\n      const header = document.querySelector('[id^=\"LaleyHeaderV2-\"]')\n        || document.querySelector('[data-header-wrapper]');\n      const headerBottom = header ? header.getBoundingClientRect().bottom : 0;\n      const visibleTop = Math.max(0, Math.min(window.innerHeight, headerBottom));\n      const mainFullyVisible = atcRect.top >= visibleTop && atcRect.bottom <= window.innerHeight;\n      let galleryVisible = false;\n      if (isMobile && this.galleryWrap) {\n        const galleryRect = this.galleryWrap.getBoundingClientRect();\n        galleryVisible = galleryRect.bottom > 0 && galleryRect.top < window.innerHeight;\n      }\n      const stickyHeight = isMobile\n        ? this.mobileStickyHeight\n        : (this.sticky.hidden ? 64 : this.sticky.getBoundingClientRect().height);\n      const footer = document.querySelector('.laley-footer');\n      const footerRect = footer ? footer.getBoundingClientRect() : null;\n      const footerVisible = !!footerRect\n        && footerRect.bottom > 0\n        && footerRect.top < (window.innerHeight + Math.min(stickyHeight + 16, 92));\n      const show = !footerVisible && (isMobile ? !mainFullyVisible : atcRect.bottom < 0);\n      this.sticky.hidden = !show;\n      this.section.classList.toggle('pdp-clean--sticky-visible', show);\n      // Mirror the sticky-visible state onto <body> so the OUTER content owner\n      // (main#MainContent) can token-drive its bottom clearance without a :has() patch.\n      document.body.classList.toggle('pdp-sticky-visible', show);\n      this.section.classList.toggle('pdp-clean--gallery-visible', galleryVisible);\n      this.section.classList.toggle('pdp-clean--footer-visible', footerVisible);\n      if (isMobile && show) this.refreshStickyMetrics();\n    },\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
