{
  "version": 3,
  "sources": ["/cdn/shop/t/107/assets/panel-led-v4.compare-dock-auto-hide-r36.js?p2cr6r38desktop=20261004r1"],
  "sourcesContent": ["/* ========================================================================== \r\n   CANFOTO ETAP 2 \u00B7 P2-C-R6-R3.15\r\n   CROSS-VIEWPORT COMPARE DOCK SCROLL BOUNDARY OWNER\r\n   Date: 2026-10-04\r\n\r\n   Contract:\r\n   - Desktop + mobile.\r\n   - Keeps the unified compare dock available while the user is reading the\r\n     detailed comparison / expert-comment area.\r\n   - Hides the dock when the final share area (fallback: FP14 end boundary)\r\n     enters the space that would otherwise be covered by the fixed dock.\r\n   - Restores the dock automatically when the user scrolls upward above the\r\n     same boundary.\r\n   - Does NOT change compare state, selected products, scores, ranking, F/P,\r\n     share behavior, commerce, PDP, Header or any recommendation owner.\r\n   ========================================================================== */\r\n(function (W, D) {\r\n  \"use strict\";\r\n\r\n  var VERSION = \"CANFOTO-ETAP2-P2C-R6-R3.15-CROSS-VIEWPORT-DOCK-SCROLL-BOUNDARY-V1\";\r\n  var BODY_CLASS = \"gdx-r36-desktop-compare-dock-suppressed\"; /* legacy class kept for compatibility */\r\n  var COLLISION_GAP = 12;\r\n  var RESTORE_HYSTERESIS = 28;\r\n  var rafId = 0;\r\n  var rootObserver = null;\r\n  var resizeObserver = null;\r\n  var lastDockHeight = 0;\r\n\r\n  function root() {\r\n    return D.getElementById(\"gdx-panel-led-v4-root\");\r\n  }\r\n\r\n  function shellPanel() {\r\n    return D.querySelector(\"#gdxPanelV4Shell .gdx-panel-v4-panel\");\r\n  }\r\n\r\n  function resultEl() {\r\n    return D.getElementById(\"gdxPanelV4ResultPreview\");\r\n  }\r\n\r\n  function fp14DetailSection() {\r\n    return D.querySelector(\r\n      \"#gdxPanelV4ResultPreview [data-gdx-panel-fp14-detail-section='1']\"\r\n    );\r\n  }\r\n\r\n  function shareSection() {\r\n    return D.getElementById(\"gdxPanelV4SharePreview\");\r\n  }\r\n\r\n  function poolDock() {\r\n    return D.getElementById(\"gdxPanelV4PoolCompareDockR3\");\r\n  }\r\n\r\n  function top3Tray() {\r\n    var mount = D.getElementById(\"gdxPanelV4Top3CompareDockR4\");\r\n    return mount && mount.querySelector(\"[data-gdx-r2j-tray='1']\");\r\n  }\r\n\r\n  function measurableHeight(el) {\r\n    if (!el || el.hidden) return 0;\r\n    var style = W.getComputedStyle(el);\r\n    if (style.display === \"none\") return 0;\r\n    var rect = el.getBoundingClientRect();\r\n    return rect && rect.height > 0 ? rect.height : 0;\r\n  }\r\n\r\n  function dockHeight() {\r\n    /* IMPORTANT: do not reject visibility:hidden here. The suppression CSS\r\n       hides with visibility/opacity while preserving geometry. Requiring\r\n       visibility would make the owner immediately forget its own dock height. */\r\n    var heights = [];\r\n    var pool = poolDock();\r\n    var tray = top3Tray();\r\n    var h1 = measurableHeight(pool);\r\n    var h2 = measurableHeight(tray);\r\n    if (h1 > 0) heights.push(h1);\r\n    if (h2 > 0) heights.push(h2);\r\n\r\n    var measured = heights.length ? Math.max.apply(Math, heights) : 0;\r\n    if (measured > 0) lastDockHeight = measured;\r\n    return measured || lastDockHeight || 0;\r\n  }\r\n\r\n  function resultIsActive() {\r\n    var result = resultEl();\r\n    if (!result || result.hidden) return false;\r\n    var style = W.getComputedStyle(result);\r\n    return style.display !== \"none\" &&\r\n      style.visibility !== \"hidden\" &&\r\n      result.getBoundingClientRect().height > 0;\r\n  }\r\n\r\n  function elementIsUsable(el) {\r\n    if (!el || el.hidden) return false;\r\n    var style = W.getComputedStyle(el);\r\n    return style.display !== \"none\" && el.getBoundingClientRect().height > 0;\r\n  }\r\n\r\n  function scrollViewportRect() {\r\n    var panel = shellPanel();\r\n    if (panel) {\r\n      var panelRect = panel.getBoundingClientRect();\r\n      if (panelRect.height > 0) {\r\n        return {\r\n          top: panelRect.top,\r\n          bottom: panelRect.bottom,\r\n          height: panelRect.height,\r\n          owner: \"panel\"\r\n        };\r\n      }\r\n    }\r\n\r\n    var h = W.innerHeight || D.documentElement.clientHeight || 0;\r\n    return { top:0, bottom:h, height:h, owner:\"window\" };\r\n  }\r\n\r\n  function boundaryInfo() {\r\n    var share = shareSection();\r\n    if (elementIsUsable(share)) {\r\n      var shareRect = share.getBoundingClientRect();\r\n      return {\r\n        mode: \"share_start\",\r\n        value: shareRect.top,\r\n        rect: { top:shareRect.top, bottom:shareRect.bottom, height:shareRect.height }\r\n      };\r\n    }\r\n\r\n    var fp14 = fp14DetailSection();\r\n    if (elementIsUsable(fp14)) {\r\n      var fp14Rect = fp14.getBoundingClientRect();\r\n      return {\r\n        mode: \"fp14_end\",\r\n        value: fp14Rect.bottom,\r\n        rect: { top:fp14Rect.top, bottom:fp14Rect.bottom, height:fp14Rect.height }\r\n      };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function compute() {\r\n    var active = resultIsActive();\r\n    var boundary = active ? boundaryInfo() : null;\r\n    var viewport = scrollViewportRect();\r\n    var height = dockHeight();\r\n    var suppressedNow = D.body.classList.contains(BODY_CLASS);\r\n\r\n    if (!active || !boundary || !height || !viewport.height) {\r\n      return {\r\n        suppress:false,\r\n        resultActive:active,\r\n        boundary:boundary,\r\n        viewport:viewport,\r\n        dockHeight:height,\r\n        collisionLine:null,\r\n        suppressedBefore:suppressedNow\r\n      };\r\n    }\r\n\r\n    /* The fixed dock occupies the lower part of the viewport. Hide as soon as\r\n       the share-area start (or FP14 end fallback) reaches the top edge of that\r\n       occupied zone. This prevents the dock from covering the final share CTA. */\r\n    var collisionLine = viewport.bottom - height - COLLISION_GAP;\r\n    var restoreLine = collisionLine + RESTORE_HYSTERESIS;\r\n    var suppress = suppressedNow\r\n      ? boundary.value <= restoreLine\r\n      : boundary.value <= collisionLine;\r\n\r\n    return {\r\n      suppress:suppress,\r\n      resultActive:active,\r\n      boundary:boundary,\r\n      viewport:viewport,\r\n      dockHeight:height,\r\n      collisionLine:collisionLine,\r\n      restoreLine:restoreLine,\r\n      suppressedBefore:suppressedNow\r\n    };\r\n  }\r\n\r\n  function apply(reason) {\r\n    rafId = 0;\r\n    var state = compute();\r\n    D.body.classList.toggle(BODY_CLASS, !!state.suppress);\r\n\r\n    var r = root();\r\n    if (r) {\r\n      r.setAttribute(\"data-gdx-desktop-dock-auto-hidden\", state.suppress ? \"1\" : \"0\");\r\n      r.setAttribute(\"data-gdx-desktop-dock-auto-hide-reason\", String(reason || \"refresh\"));\r\n      r.setAttribute(\"data-gdx-dock-auto-hide-viewport\", state.viewport && state.viewport.owner || \"unknown\");\r\n      r.setAttribute(\"data-gdx-dock-auto-hide-boundary\", state.boundary && state.boundary.mode || \"none\");\r\n    }\r\n\r\n    return state;\r\n  }\r\n\r\n  function schedule(reason) {\r\n    if (rafId) return;\r\n    rafId = (W.requestAnimationFrame || function (fn) {\r\n      return W.setTimeout(fn, 16);\r\n    })(function () {\r\n      apply(reason);\r\n    });\r\n  }\r\n\r\n  function onAnyScroll() {\r\n    schedule(\"scroll\");\r\n  }\r\n\r\n  function bindObservers() {\r\n    if (!rootObserver && W.MutationObserver) {\r\n      var observeRoot = root() || D.body;\r\n      if (observeRoot) {\r\n        rootObserver = new W.MutationObserver(function () {\r\n          schedule(\"mutation\");\r\n          bindResizeObserver();\r\n        });\r\n        rootObserver.observe(observeRoot, {\r\n          childList:true,\r\n          subtree:true,\r\n          attributes:true,\r\n          attributeFilter:[\"hidden\", \"aria-hidden\", \"data-gdx-unified-compare-dock\"]\r\n        });\r\n      }\r\n    }\r\n    bindResizeObserver();\r\n  }\r\n\r\n  function bindResizeObserver() {\r\n    if (!W.ResizeObserver) return;\r\n    if (!resizeObserver) {\r\n      resizeObserver = new W.ResizeObserver(function () {\r\n        schedule(\"resize_observer\");\r\n      });\r\n    }\r\n\r\n    [shellPanel(), fp14DetailSection(), shareSection(), poolDock(), top3Tray()].forEach(function (el) {\r\n      if (!el || el.__gdxR315ResizeObserved) return;\r\n      el.__gdxR315ResizeObserved = true;\r\n      try { resizeObserver.observe(el); } catch (error) {}\r\n    });\r\n  }\r\n\r\n  function start() {\r\n    /* Capture phase catches scrolls from the motor panel and any nested future\r\n       scroll owner. Window listener covers page-level scrolling as a fallback. */\r\n    D.addEventListener(\"scroll\", onAnyScroll, { passive:true, capture:true });\r\n    W.addEventListener(\"scroll\", onAnyScroll, { passive:true });\r\n    W.addEventListener(\"resize\", function () { schedule(\"resize\"); }, { passive:true });\r\n    W.addEventListener(\"orientationchange\", function () { schedule(\"orientationchange\"); }, { passive:true });\r\n\r\n    D.addEventListener(\"gdx-panel-v4-result-view\", function () { schedule(\"result_view\"); }, false);\r\n    D.addEventListener(\"gdx-panel-v4-pool-compare-state\", function () { schedule(\"pool_compare_state\"); }, false);\r\n    W.addEventListener(\"canfoto:panel-r11-recommendation-rendered\", function () { schedule(\"r11_render\"); }, false);\r\n\r\n    bindObservers();\r\n\r\n    [0, 80, 220, 600, 1200].forEach(function (delay) {\r\n      W.setTimeout(function () {\r\n        bindObservers();\r\n        schedule(\"startup_\" + delay);\r\n      }, delay);\r\n    });\r\n  }\r\n\r\n  W.CANFOTO_PANEL_COMPARE_DOCK_AUTO_HIDE_R36 = {\r\n    ready:true,\r\n    version:VERSION,\r\n    refresh:function () { return apply(\"api_refresh\"); },\r\n    inspect:function () {\r\n      var state = compute();\r\n      state.ready = true;\r\n      state.version = VERSION;\r\n      state.suppressed = D.body.classList.contains(BODY_CLASS);\r\n      state.viewportWidth = W.innerWidth;\r\n      state.mobile = W.innerWidth <= 760;\r\n      return state;\r\n    }\r\n  };\r\n\r\n  if (D.readyState === \"loading\") {\r\n    D.addEventListener(\"DOMContentLoaded\", start, { once:true });\r\n  } else {\r\n    start();\r\n  }\r\n})(window, document);\r\n"],
  "mappings": "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",
  "names": []
}
