{
  "version": 3,
  "sources": ["/cdn/shop/t/81/assets/pdp-clean-v4-siblings-v2.js?lly=laley-custom-20260808-release-v313"],
  "sourcesContent": ["/* ============================================================\n   Laley PDP Clean v4 \u2014 siblings\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: siblings');\n    return;\n  }\n\n  const SIBLING_COLOR_FALLBACK_TOKENS = [];\n\n\n  PDP.registerModule('siblings', {\n    parseSiblingColorPairs(raw) {\n      return String(raw || '')\n        .split('|')\n        .map((pair) => {\n          const [token, label, hex] = String(pair || '').split(':');\n          return {\n            token: String(token || '').trim(),\n            label: String(label || token || '').trim(),\n            hex: String(hex || '').trim() || 'var(--lly-swatch-fallback)',\n          };\n        })\n        .filter((color) => color.token && color.label)\n        .sort((a, b) => b.token.length - a.token.length);\n    },\n\n    siblingColorTokens(root) {\n      const sourceRoot = root || this.section?.querySelector('[data-pdp-sibling-colors]');\n      const source = sourceRoot?.dataset?.colorPairs || '';\n\n      if (source && this._siblingColorPairsSource !== source) {\n        const parsed = this.parseSiblingColorPairs(source);\n        if (parsed.length) {\n          this._siblingColorPairsSource = source;\n          this._siblingColorTokens = parsed;\n          this._siblingColorBaseTokens = null;\n          this.siblingTitleColorTokens = null;\n        }\n      }\n\n      if (!this._siblingColorTokens) this._siblingColorTokens = SIBLING_COLOR_FALLBACK_TOKENS;\n      return this._siblingColorTokens;\n    },\n\n    siblingColorForHandle(handle) {\n      const normalized = String(handle || '').toLowerCase().replace(/_/g, '-');\n      return this.siblingColorTokens().find((color) => normalized.endsWith(`-${color.token}`) || normalized === color.token) || null;\n    },\n\n    siblingKnownColorForText(value) {\n      const token = this.siblingTextToken(value);\n      if (!token) return null;\n      const exactToken = this.siblingColorTokens().find((color) => token === this.siblingTextToken(color.token));\n      if (exactToken) return exactToken;\n      const exactLabel = this.siblingColorTokens().find((color) => token === this.siblingTextToken(color.label));\n      if (exactLabel) return exactLabel;\n      return null;\n    },\n\n    siblingReadableColorLabel(value) {\n      return String(value || '')\n        .replace(/[_-]+/g, ' ')\n        .replace(/\\s+/g, ' ')\n        .trim()\n        .split(' ')\n        .filter(Boolean)\n        .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n        .join(' ');\n    },\n\n    siblingColorBaseTokens() {\n      if (!this._siblingColorBaseTokens) {\n        this._siblingColorBaseTokens = new Set();\n        this.siblingColorTokens().forEach((color) => {\n          this._siblingColorBaseTokens.add(this.siblingTextToken(color.token));\n          this._siblingColorBaseTokens.add(this.siblingTextToken(color.label));\n        });\n      }\n      return this._siblingColorBaseTokens;\n    },\n\n    siblingColorFromValue(value) {\n      const known = this.siblingKnownColorForText(value);\n      if (known) return known;\n      const token = this.siblingTextToken(value);\n      if (!token) return null;\n      return {\n        token,\n        label: this.siblingReadableColorLabel(value) || token,\n        hex: 'var(--lly-swatch-fallback)',\n      };\n    },\n\n    siblingColorForTitle(title) {\n      const value = String(title || '').trim();\n      if (!value) return null;\n\n      const parenthetical = value.match(/\\(([^)]+)\\)/g) || [];\n      for (const part of parenthetical) {\n        const color = this.siblingColorFromValue(part.replace(/[()]/g, ''));\n        if (color) return color;\n      }\n\n      const words = value.split(/\\s+/).filter(Boolean);\n      for (let size = Math.min(3, words.length); size >= 1; size -= 1) {\n        const color = this.siblingKnownColorForText(words.slice(-size).join(' '));\n        if (color) return color;\n      }\n\n      return null;\n    },\n\n    siblingInferredColorFromSuffix(handle, baseHint) {\n      const normalized = String(handle || '').toLowerCase().replace(/_/g, '-');\n      const base = String(baseHint || '').toLowerCase().replace(/_/g, '-');\n      if (!normalized || !base || !normalized.startsWith(`${base}-`)) return null;\n      const token = normalized.slice(base.length + 1).replace(/^-+|-+$/g, '');\n      if (!token || token.length > 40) return null;\n      const exact = this.siblingKnownColorForText(token);\n      if (exact) return exact;\n      return this.siblingColorFromValue(token);\n    },\n\n    siblingColorForProduct(product, baseHint) {\n      const handle = product?.handle || this.handleFromProductUrl(product?.url || '');\n      return this.siblingColorForTitle(product?.title)\n        || this.siblingColorForHandle(handle)\n        || this.siblingInferredColorFromSuffix(handle, baseHint)\n        || null;\n    },\n\n    siblingBaseHandle(handle, colorToken) {\n      const normalized = String(handle || '').toLowerCase().replace(/_/g, '-');\n      const color = this.siblingColorForHandle(normalized);\n      let base = color ? normalized.slice(0, -(`-${color.token}`).length) : normalized;\n      const explicitToken = this.siblingTextToken(colorToken);\n      if (!color && explicitToken && normalized.endsWith(`-${explicitToken}`)) {\n        base = normalized.slice(0, -(`-${explicitToken}`).length);\n      }\n      return base;\n    },\n\n    siblingTextToken(value) {\n      return String(value || '')\n        .toLowerCase()\n        .replace(/\u00E5/g, 'a')\n        .replace(/\u00F8/g, 'o')\n        .replace(/\u00E6/g, 'ae')\n        .replace(/[^a-z0-9]+/g, '-')\n        .replace(/^-+|-+$/g, '');\n    },\n\n    stripSiblingColorFromTitle(title) {\n      const value = String(title || '').trim();\n      const withoutParenthetical = value.replace(/\\s*\\([^)]*\\)\\s*/g, ' ').replace(/\\s+/g, ' ').trim();\n      if (withoutParenthetical && withoutParenthetical !== value) return withoutParenthetical;\n\n      const words = value.split(/\\s+/).filter(Boolean);\n      if (words.length <= 1) return value;\n\n      if (!this.siblingTitleColorTokens) {\n        this.siblingTitleColorTokens = new Set();\n        this.siblingColorTokens().forEach((color) => {\n          this.siblingTitleColorTokens.add(this.siblingTextToken(color.token));\n          this.siblingTitleColorTokens.add(this.siblingTextToken(color.label));\n        });\n      }\n\n      for (let size = Math.min(3, words.length - 1); size >= 1; size -= 1) {\n        const tail = this.siblingTextToken(words.slice(-size).join(' '));\n        if (this.siblingTitleColorTokens.has(tail)) return words.slice(0, -size).join(' ');\n      }\n\n      return value;\n    },\n\n    siblingNormalizedImageUrl(image) {\n      const raw = typeof image === 'string' ? image : (image?.src || image?.url || '');\n      let url = String(raw || '').trim();\n      if (url && url.startsWith('//')) url = `${window.location.protocol}${url}`;\n      return url;\n    },\n\n    siblingImageIsPackshot(url) {\n      const value = String(url || '').toLowerCase();\n      return [\n        'packshot',\n        'pack-shot',\n        'pack_shot',\n        '_pack.',\n        '_pack_',\n        '-pack.',\n        '-pack_',\n        'flatlay',\n        'flat-lay',\n        'flat_lay',\n        'cutout',\n        'cut-out',\n        'cut_out',\n        'produktbilde',\n        'product-shot',\n        'product_shot',\n      ].some((token) => value.includes(token));\n    },\n\n    siblingImageIsLifestyle(url) {\n      const value = String(url || '').toLowerCase();\n      return [\n        'model',\n        'modell',\n        'lifestyle',\n        'lookbook',\n        'onbody',\n        'on-body',\n        'worn',\n        'wear',\n        'r1-',\n        'r2-',\n        'r3-',\n        'r4-',\n        'dsc',\n        'img_',\n      ].some((token) => value.includes(token));\n    },\n\n    siblingPackshotImageFromProduct(product) {\n      const images = (Array.isArray(product?.images) ? product.images : [])\n        .map((image) => this.siblingNormalizedImageUrl(image))\n        .filter(Boolean);\n      const explicitPackshot = images.slice().reverse().find((image) => this.siblingImageIsPackshot(image));\n      if (explicitPackshot) return explicitPackshot;\n\n      const lastImage = images[images.length - 1] || this.siblingNormalizedImageUrl(product?.featured_image || '');\n      if (lastImage) return lastImage;\n\n      const cleanProductImage = images.find((image, index) => index > 0 && !this.siblingImageIsLifestyle(image));\n      if (cleanProductImage) return cleanProductImage;\n\n      return '';\n    },\n\n    async siblingPackshotImage(handle) {\n      const normalizedHandle = String(handle || '').trim();\n      if (!normalizedHandle) return '';\n      if (!this.siblingImageCache) this.siblingImageCache = new Map();\n      if (this.siblingImageCache.has(normalizedHandle)) return this.siblingImageCache.get(normalizedHandle);\n\n      const data = await this.fetchProductJson(normalizedHandle);\n      const image = this.siblingPackshotImageFromProduct(data);\n\n      this.siblingImageCache.set(normalizedHandle, image);\n      return image;\n    },\n\n    async hydrateSiblingImages(items) {\n      const missingImages = items.filter((item) => item?.handle && !item.image);\n      await Promise.all(missingImages.map(async (item) => {\n        const image = await this.siblingPackshotImage(item.handle);\n        if (image) item.image = image;\n      }));\n      return items;\n    },\n\n    handleFromProductUrl(url) {\n      try {\n        const parsed = new URL(url, window.location.origin);\n        const match = parsed.pathname.match(/\\/products\\/([^/?#]+)/);\n        return match ? match[1] : '';\n      } catch (e) {\n        return '';\n      }\n    },\n\n    siblingBaseFromTags(handle, tags) {\n      const normalizedHandle = String(handle || '').toLowerCase().replace(/_/g, '-');\n      if (!normalizedHandle) return '';\n      const genericTags = new Set(['sale', 'salg', 'outlet', 'new', 'nyheter', 'drop', 'genser', 'hoodie', 'set', 'sett', 'bundle']);\n      const colorTags = this.siblingColorBaseTokens();\n      return String(tags || '')\n        .split(/[,\\s]+/)\n        .map((tag) => this.siblingTextToken(tag))\n        .filter((tag) => tag.length > 2 && !genericTags.has(tag) && !colorTags.has(tag) && normalizedHandle.startsWith(`${tag}-`))\n        .sort((a, b) => b.length - a.length)[0] || '';\n    },\n\n    siblingProductFromSearch(product, baseHint) {\n      const handle = product?.handle || this.handleFromProductUrl(product?.url || '');\n      if (!handle) return null;\n      const color = this.siblingColorForProduct({ ...product, handle }, baseHint)\n        || this.siblingColorFromValue(product?.title || handle);\n      const knownBase = this.siblingBaseHandle(handle, color?.token);\n      const normalizedBaseHint = String(baseHint || '').toLowerCase().replace(/_/g, '-');\n      const base = (knownBase === handle && normalizedBaseHint && handle.startsWith(`${normalizedBaseHint}-`))\n        ? normalizedBaseHint\n        : knownBase;\n      return {\n        handle,\n        base,\n        title: product?.title || '',\n        url: `/products/${handle}`,\n        image: product?.image || product?.featured_image?.url || '',\n        color,\n      };\n    },\n\n    renderSiblingColorPicker(root, items) {\n      const swatches = root.querySelector('[data-pdp-sibling-swatches]');\n      if (!swatches || !items.length) return;\n      const currentHandle = root.dataset.currentHandle || this.section.dataset.productHandle || '';\n      const byColor = new Map();\n      items.forEach((item) => {\n        const colorKey = this.siblingTextToken(item?.color?.token || item?.color?.label || '');\n        if (!item?.handle || !colorKey) return;\n        const existing = byColor.get(colorKey);\n        if (!existing || item.handle === currentHandle) byColor.set(colorKey, item);\n      });\n      const distinctItems = Array.from(byColor.values());\n      // \u00C9n farge = ingen valgmulighet: raden er server-rendret hidden og\n      // vises kun n\u00E5r vi faktisk har 2+ distinkte farger \u00E5 velge mellom.\n      root.hidden = distinctItems.length < 2;\n      if (distinctItems.length < 2) return;\n\n      const current = distinctItems.find((item) => item.handle === currentHandle) || distinctItems[0];\n      const label = root.querySelector('[data-pdp-sibling-color-label]');\n      if (label && current?.color?.label) label.textContent = current.color.label;\n\n      const ordered = distinctItems.slice().sort((a, b) => {\n        if (a.handle === currentHandle) return -1;\n        if (b.handle === currentHandle) return 1;\n        return a.color.label.localeCompare(b.color.label, 'nb');\n      });\n\n      swatches.replaceChildren(...ordered.map((item) => {\n        const swatch = document.createElement('a');\n        swatch.className = 'pdp-clean__sibling-swatch';\n        swatch.href = item.url;\n        swatch.setAttribute('aria-label', item.color.label);\n        swatch.dataset.pdpSiblingSwatch = '';\n        swatch.dataset.colorToken = item.color.token;\n        if (item.handle === currentHandle) {\n          swatch.classList.add('is-active');\n          swatch.setAttribute('aria-current', 'page');\n          this.on(swatch, 'click', (event) => event.preventDefault());\n        }\n\n        const media = document.createElement('span');\n        media.className = 'pdp-clean__sibling-swatch-media';\n        media.setAttribute('aria-hidden', 'true');\n        media.style.setProperty('--pdp-sibling-color', item.color.hex);\n        if (item.image) {\n          media.style.setProperty('--pdp-sibling-surface', 'var(--lly-surface-media)');\n          media.style.setProperty('--pdp-sibling-image', `url(\"${item.image}\")`);\n        }\n\n        const name = document.createElement('span');\n        name.className = 'pdp-clean__visually-hidden';\n        name.textContent = item.color.label;\n\n        swatch.append(media, name);\n        return swatch;\n      }));\n    },\n\n    syncServerSiblingVisibility(root) {\n      if (!root) return;\n      const swatches = Array.from(root.querySelectorAll('[data-pdp-sibling-swatch]'));\n      const colorKeys = new Set(swatches\n        .map((swatch) => this.siblingTextToken(swatch.dataset.colorToken || swatch.getAttribute('aria-label') || ''))\n        .filter(Boolean));\n      if (swatches.length < 2 || colorKeys.size < 2) root.hidden = true;\n    },\n\n    async bindSiblingColorPicker() {\n      const root = this.section.querySelector('[data-pdp-sibling-colors]');\n      if (!root || root.dataset.pdpSiblingBound === 'true') return;\n      root.dataset.pdpSiblingBound = 'true';\n\n      const currentHandle = root.dataset.currentHandle || this.section.dataset.productHandle || '';\n      const currentTitle = root.dataset.currentTitle || '';\n      const handleColor = this.siblingColorForHandle(currentHandle);\n      const titleColor = this.siblingColorForTitle(currentTitle);\n      const datasetColor = {\n        token: root.dataset.currentColorToken || '',\n        label: root.dataset.currentColorLabel || '',\n        hex: root.dataset.currentColorHex || 'var(--lly-swatch-fallback)',\n      };\n      const currentColor = (datasetColor.token ? datasetColor : null)\n        || titleColor\n        || handleColor\n        || this.siblingColorFromValue(currentTitle || currentHandle);\n      const handleBase = this.siblingBaseHandle(currentHandle, handleColor?.token || currentColor?.token);\n      const tagBase = this.siblingBaseFromTags(currentHandle, root.dataset.currentTags);\n      const currentBase = handleBase && handleBase !== currentHandle ? handleBase : (tagBase || handleBase);\n      const activeSwatch = root.querySelector('[data-pdp-sibling-swatch].is-active');\n      if (activeSwatch) this.on(activeSwatch, 'click', (event) => event.preventDefault());\n      this.on(root, 'click', (event) => {\n        const link = event.target.closest?.('[data-pdp-sibling-swatch][href]:not(.is-active)');\n        if (!link) return;\n        const values = this.optionGroups\n          .filter((group) => group.hasAttribute('data-pdp-size-group'))\n          .map((group) => group.querySelector('[data-pdp-option-input]:checked')?.value || '')\n          .filter(Boolean);\n        if (!values.length) return;\n        try {\n          const target = new URL(link.href, window.location.origin);\n          window.sessionStorage.setItem('laley:pdp:sibling-size', JSON.stringify({\n            path: target.pathname,\n            values,\n            savedAt: Date.now(),\n          }));\n        } catch (error) {\n          // Navigation still works if storage is unavailable.\n        }\n      });\n      this.syncServerSiblingVisibility(root);\n      // Liquid/metafields are authoritative. Never replace explicit siblings\n      // with speculative handle scans or additional network requests.\n      if (root.querySelectorAll('[data-pdp-sibling-swatch]').length > 1 && !root.hidden) {\n        return;\n      }\n      if (!currentHandle) return;\n\n      const current = {\n        handle: currentHandle,\n        base: currentBase,\n        title: currentTitle,\n        url: root.dataset.currentUrl || this.section.dataset.productUrl || window.location.pathname,\n        image: root.dataset.currentColorImage || '',\n        color: currentColor,\n      };\n\n      try {\n        const strippedTitle = this.stripSiblingColorFromTitle(current.title);\n        const queries = [strippedTitle, current.base.replace(/-/g, ' '), current.title]\n          .map((query) => String(query || '').trim())\n          .filter(Boolean);\n        const products = [];\n        const seenQueries = new Set();\n\n        for (const query of queries) {\n          const normalizedQuery = query.toLowerCase();\n          if (seenQueries.has(normalizedQuery)) continue;\n          seenQueries.add(normalizedQuery);\n\n          const url = `${this.cartUrl('search/suggest.json')}?q=${encodeURIComponent(query)}&resources[type]=product&resources[limit]=10&resources[options][unavailable_products]=last`;\n          const response = await fetch(url, { headers: { Accept: 'application/json' } });\n          if (!response.ok) continue;\n          const data = await response.json();\n          const resultProducts = data?.resources?.results?.products || [];\n          products.push(...resultProducts);\n          const hasSibling = resultProducts\n            .map((product) => this.siblingProductFromSearch(product, current.base))\n            .some((item) => item && item.base === current.base && item.handle !== current.handle);\n          if (hasSibling) break;\n        }\n\n        const siblings = products\n          .map((product) => this.siblingProductFromSearch(product, current.base))\n          .filter((item) => item && item.base === current.base);\n        const byHandle = new Map();\n        [current, ...siblings].forEach((item) => {\n          if (!item?.handle || item.base !== current.base) return;\n          if (byHandle.has(item.handle)) return;\n          byHandle.set(item.handle, { ...item, url: item.url || `/products/${item.handle}` });\n        });\n        const items = Array.from(byHandle.values());\n        if (items.length > 1) {\n          await this.hydrateSiblingImages(items);\n          this.renderSiblingColorPicker(root, items);\n        }\n      } catch (e) {\n        // The Liquid singleton remains hidden if predictive search is unavailable.\n      }\n    },\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
