{
  "version": 3,
  "sources": ["/cdn/shop/t/92/assets/laley-rail-navigation.js?lly=laley-custom-20260921-epostsjekk-v860"],
  "sourcesContent": ["(() => {\n  if (window.__laleyRailNavigation) return;\n\n  const railQuery = window.matchMedia('(min-width: 750px) and (hover: hover) and (pointer: fine)');\n  let revealFrame;\n\n  const revealCurrentRails = () => {\n    window.cancelAnimationFrame(revealFrame);\n    revealFrame = window.requestAnimationFrame(() => {\n      document.querySelectorAll('[data-lly-reveal-current]').forEach((rail) => {\n        const active = rail.querySelector('[aria-current=\"page\"],[aria-current=\"true\"],[aria-pressed=\"true\"],.is-active');\n        const railRect = rail.getBoundingClientRect();\n        const activeRect = active?.getBoundingClientRect();\n        const edge = Number.parseFloat(window.getComputedStyle(rail).getPropertyValue('--lly-scroll-x-edge')) || 0;\n        if (!activeRect?.width) return;\n        if (activeRect.left >= railRect.left + edge && activeRect.right <= railRect.right - edge) return;\n        rail.scrollLeft += activeRect.left - railRect.left - (rail.clientWidth - activeRect.width) / 2;\n      });\n    });\n  };\n\n  const buildRailNav = (rail, config) => {\n    if (rail.dataset.llyRailNav === 'ready') return;\n    const frame = rail.closest('[data-lly-scroll-frame]') || rail.parentElement;\n    if (!frame) return;\n\n    rail.dataset.llyRailNav = 'ready';\n    frame.classList.add(config.frameClass);\n\n    const makeButton = (direction, label, path) => {\n      const button = document.createElement('button');\n      button.type = 'button';\n      const actionClasses = config.actionClasses || 'lly-icon-action lly-icon-action--framed';\n      button.className = `${config.navClass} ${config.navClass}--${direction} ${actionClasses}`;\n      button.setAttribute('aria-label', label);\n      button.hidden = true;\n      button.innerHTML = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"${path}\"></path></svg>`;\n      return button;\n    };\n\n    const previous = makeButton('prev', config.previousLabel, 'M15 5l-7 7 7 7');\n    const next = makeButton('next', config.nextLabel, 'M9 5l7 7-7 7');\n    frame.append(previous, next);\n\n    let navFrame;\n    const update = () => {\n      window.cancelAnimationFrame(navFrame);\n      navFrame = window.requestAnimationFrame(() => {\n        const hasOverflow = rail.scrollWidth > rail.clientWidth + 1;\n        const atStart = rail.scrollLeft <= 1;\n        const atEnd = rail.scrollLeft >= rail.scrollWidth - rail.clientWidth - 1;\n        previous.hidden = !hasOverflow || atStart;\n        next.hidden = !hasOverflow || atEnd;\n\n        if (config.frameHasClass) {\n          frame.classList.toggle(`${config.frameClass}--has-prev`, !previous.hidden);\n          frame.classList.toggle(`${config.frameClass}--has-next`, !next.hidden);\n        }\n        if (config.centerOnRail) {\n          const centerTarget = config.centerSelector\n            ? rail.querySelector(config.centerSelector)\n            : rail;\n          const targetOffset = centerTarget === rail ? 0 : centerTarget?.offsetTop || 0;\n          const targetHeight = centerTarget?.clientHeight || rail.clientHeight;\n          const top = `${Math.round(rail.offsetTop + targetOffset + targetHeight / 2)}px`;\n          previous.style.top = top;\n          next.style.top = top;\n        }\n      });\n    };\n\n    const scroll = (direction) => {\n      const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      rail.scrollBy({\n        left: Math.round(rail.clientWidth * 0.8) * direction,\n        behavior: reducedMotion ? 'auto' : 'smooth',\n      });\n    };\n    previous.addEventListener('click', () => scroll(-1));\n    next.addEventListener('click', () => scroll(1));\n\n    // Product rails already live inside the theme's <grid-slider>, which owns\n    // mouse dragging and momentum. Running a second pointer drag loop here made\n    // both handlers write scrollLeft on every move, producing visible stutter.\n    // Plain Laley rails still use this helper; product rails keep one owner.\n    if (config.pointerDrag !== false) {\n      const dragThreshold = 6;\n      let pointer = null;\n      rail.addEventListener('pointerdown', (event) => {\n        if (event.pointerType !== 'mouse' || event.button !== 0 || rail.scrollWidth <= rail.clientWidth + 1) return;\n        pointer = { x: event.clientX, scroll: rail.scrollLeft, id: event.pointerId, dragging: false };\n      });\n      rail.addEventListener('pointermove', (event) => {\n        if (!pointer || event.pointerId !== pointer.id) return;\n        const delta = event.clientX - pointer.x;\n        if (!pointer.dragging && Math.abs(delta) < dragThreshold) return;\n        if (!pointer.dragging) {\n          pointer.dragging = true;\n          rail.style.userSelect = 'none';\n          rail.style.scrollSnapType = 'none';\n          try { rail.setPointerCapture(pointer.id); } catch (error) {}\n        }\n        rail.scrollLeft = pointer.scroll - delta;\n        event.preventDefault();\n      });\n      rail.addEventListener('dragstart', (event) => {\n        if (pointer) event.preventDefault();\n      });\n\n      const endDrag = () => {\n        if (!pointer) return;\n        if (pointer.dragging) {\n          try { rail.releasePointerCapture(pointer.id); } catch (error) {}\n          rail.style.userSelect = '';\n          rail.style.scrollSnapType = '';\n          const swallowClick = (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n          };\n          rail.addEventListener('click', swallowClick, { capture: true, once: true });\n          window.setTimeout(() => rail.removeEventListener('click', swallowClick, true), 60);\n        }\n        pointer = null;\n      };\n      rail.addEventListener('pointerup', endDrag);\n      rail.addEventListener('pointercancel', endDrag);\n    } else {\n      // The theme dragger does not suppress the synthetic click that follows a\n      // mouse drag. Observe the gesture without moving the rail, then swallow\n      // only that one click so releasing over a card never opens it by accident.\n      const dragThreshold = 6;\n      let pointer = null;\n      rail.addEventListener('pointerdown', (event) => {\n        if (event.pointerType !== 'mouse' || event.button !== 0 || rail.scrollWidth <= rail.clientWidth + 1) return;\n        pointer = { x: event.clientX, y: event.clientY, id: event.pointerId, dragging: false };\n      });\n      rail.addEventListener('pointermove', (event) => {\n        if (!pointer || event.pointerId !== pointer.id) return;\n        const distanceX = event.clientX - pointer.x;\n        const distanceY = event.clientY - pointer.y;\n        if (Math.abs(distanceX) >= dragThreshold && Math.abs(distanceX) > Math.abs(distanceY)) {\n          pointer.dragging = true;\n        }\n      });\n      rail.addEventListener('pointerup', (event) => {\n        if (!pointer || event.pointerId !== pointer.id) return;\n        if (pointer.dragging) {\n          const swallowClick = (clickEvent) => {\n            clickEvent.preventDefault();\n            clickEvent.stopPropagation();\n          };\n          rail.addEventListener('click', swallowClick, { capture: true, once: true });\n          window.setTimeout(() => rail.removeEventListener('click', swallowClick, true), 120);\n        }\n        pointer = null;\n      });\n      rail.addEventListener('pointercancel', () => {\n        pointer = null;\n      });\n    }\n    rail.addEventListener('scroll', update, { passive: true });\n    if ('ResizeObserver' in window) new ResizeObserver(update).observe(rail);\n    update();\n  };\n\n  const setup = () => {\n    revealCurrentRails();\n    if (!railQuery.matches) return;\n\n    document.querySelectorAll('.cat-tiles__row[data-lly-reveal-current]').forEach((rail) => buildRailNav(rail, {\n      navClass: 'cat-tiles__nav',\n      frameClass: 'cat-tiles__frame',\n      frameHasClass: true,\n      centerOnRail: false,\n      previousLabel: 'Forrige kategorier',\n      nextLabel: 'Neste kategorier',\n    }));\n    document.querySelectorAll('.laley-discovery-tiles__row[data-lly-reveal-current]').forEach((rail) => buildRailNav(rail, {\n      navClass: 'laley-discovery-tiles__nav',\n      frameClass: 'laley-discovery-tiles--framed',\n      frameHasClass: false,\n      centerOnRail: true,\n      centerSelector: '.laley-discovery-tile__media',\n      previousLabel: 'Forrige kolleksjoner',\n      nextLabel: 'Neste kolleksjoner',\n    }));\n    document.querySelectorAll('.laley-info-tabs__list[data-lly-reveal-current]').forEach((rail) => buildRailNav(rail, {\n      navClass: 'laley-info-tabs__nav',\n      frameClass: 'laley-info-tabs--framed',\n      frameHasClass: false,\n      centerOnRail: true,\n      actionClasses: 'lly-icon-action',\n      previousLabel: 'Forrige kundeservicesider',\n      nextLabel: 'Neste kundeservicesider',\n    }));\n    document.querySelectorAll('[data-lly-product-rail]').forEach((rail) => buildRailNav(rail, {\n      navClass: 'lly-rail-nav',\n      frameClass: 'lly-rail-frame',\n      frameHasClass: false,\n      centerOnRail: true,\n      pointerDrag: !rail.closest('grid-slider'),\n      previousLabel: window.LaleyTranslate(\"previous_products_e867c8\", \"Forrige produkter\"),\n      nextLabel: window.LaleyTranslate(\"next_products_012a9e\", \"Neste produkter\"),\n    }));\n    document.querySelectorAll('[data-lly-editorial-rail]').forEach((rail) => buildRailNav(rail, {\n      navClass: 'lly-rail-nav',\n      frameClass: 'lly-rail-frame',\n      frameHasClass: false,\n      centerOnRail: true,\n      centerSelector: '.laley-cat-push__media',\n      previousLabel: 'Forrige kategorier',\n      nextLabel: 'Neste kategorier',\n    }));\n  };\n\n  window.__laleyRailNavigation = { version: '20260826-v6', refresh: setup };\n  setup();\n  document.addEventListener('shopify:section:load', setup);\n  document.addEventListener('laley:collection:updated', setup);\n  window.addEventListener('resize', revealCurrentRails, { passive: true });\n  railQuery.addEventListener?.('change', (event) => {\n    if (event.matches) setup();\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
