{
  "version": 3,
  "sources": ["/cdn/shop/t/55/assets/article-toc-scroll-fallback.js?verify=20260910"],
  "sourcesContent": ["(function () {\n  const INSTANCE_KEY = '__articleTocScrollFallback';\n  const TOC_LINK_SELECTOR = '[data-article-toc] a[href*=\"#\"], .tablecontents a[href*=\"#\"]';\n  const USER_INPUT_EVENTS = ['wheel', 'touchstart', 'pointerdown', 'mousedown'];\n  const NAVIGATION_KEYS = new Set([\n    'ArrowDown',\n    'ArrowLeft',\n    'ArrowRight',\n    'ArrowUp',\n    'End',\n    'Home',\n    'PageDown',\n    'PageUp',\n    ' ',\n    'Spacebar',\n  ]);\n  const DEBOUNCE_MS = 150;\n  const MAX_WAIT_MS = 10000;\n  const POSITION_TOLERANCE_PX = 1;\n\n  const previousInstance = window[INSTANCE_KEY];\n  if (previousInstance?.destroy) previousInstance.destroy();\n\n  let activeTracking = null;\n  let initialized = false;\n\n  function init() {\n    if (initialized) return;\n\n    initialized = true;\n    document.addEventListener('click', handleTocClick);\n  }\n\n  function destroy() {\n    cancelTracking();\n    document.removeEventListener('DOMContentLoaded', init);\n\n    if (!initialized) return;\n\n    initialized = false;\n    document.removeEventListener('click', handleTocClick);\n  }\n\n  function handleTocClick(event) {\n    const link = event.target.closest?.(TOC_LINK_SELECTOR);\n    if (!link) return;\n\n    cancelTracking();\n\n    const target = getSamePageTarget(link);\n    if (!target) return;\n\n    const content = target.closest('.article-content') || document.querySelector('.article-content');\n    if (!content) return;\n\n    startTracking(target, content);\n  }\n\n  function getSamePageTarget(link) {\n    let url;\n\n    try {\n      url = new URL(link.href, window.location.href);\n    } catch (error) {\n      return null;\n    }\n\n    if (\n      url.origin !== window.location.origin ||\n      url.pathname !== window.location.pathname ||\n      url.search !== window.location.search ||\n      !url.hash\n    ) {\n      return null;\n    }\n\n    let id;\n    try {\n      id = decodeURIComponent(url.hash.slice(1));\n    } catch (error) {\n      id = url.hash.slice(1);\n    }\n\n    return document.getElementById(id);\n  }\n\n  function startTracking(target, content) {\n    const images = getUnloadedImagesAboveTarget(content, target);\n    if (!images.length) return;\n\n    const tracking = {\n      target,\n      initialTop: getDocumentTop(target),\n      pendingImages: new Set(images),\n      imageListeners: new Map(),\n      debounceTimer: null,\n      timeoutTimer: null,\n    };\n\n    activeTracking = tracking;\n    addCancellationListeners(tracking);\n\n    images.forEach((image) => {\n      const onSettled = () => settleImage(tracking, image);\n      tracking.imageListeners.set(image, onSettled);\n      image.addEventListener('load', onSettled, { once: true });\n      image.addEventListener('error', onSettled, { once: true });\n\n      // The image can settle between the initial `complete` check and listener setup.\n      if (image.complete) settleImage(tracking, image);\n    });\n\n    tracking.timeoutTimer = window.setTimeout(() => finishTracking(tracking), MAX_WAIT_MS);\n  }\n\n  function cancelTracking() {\n    if (!activeTracking) return;\n\n    cleanupTracking(activeTracking);\n    activeTracking = null;\n  }\n\n  function getUnloadedImagesAboveTarget(content, target) {\n    const targetTop = getDocumentTop(target);\n\n    return Array.from(content.querySelectorAll('img')).filter(\n      (image) => !image.complete && getDocumentTop(image) < targetTop\n    );\n  }\n\n  function settleImage(tracking, image) {\n    if (activeTracking !== tracking || !tracking.pendingImages.has(image)) return;\n\n    tracking.pendingImages.delete(image);\n    removeImageListeners(tracking, image);\n\n    window.clearTimeout(tracking.debounceTimer);\n    tracking.debounceTimer = window.setTimeout(() => {\n      if (tracking.pendingImages.size === 0) finishTracking(tracking);\n    }, DEBOUNCE_MS);\n  }\n\n  function removeImageListeners(tracking, image) {\n    const listener = tracking.imageListeners.get(image);\n    if (!listener) return;\n\n    image.removeEventListener('load', listener);\n    image.removeEventListener('error', listener);\n    tracking.imageListeners.delete(image);\n  }\n\n  function finishTracking(tracking) {\n    if (activeTracking !== tracking) return;\n\n    const currentTop = getDocumentTop(tracking.target);\n    if (Math.abs(currentTop - tracking.initialTop) > POSITION_TOLERANCE_PX) {\n      scrollTargetIntoPosition(tracking.target);\n    }\n\n    cleanupTracking(tracking);\n    activeTracking = null;\n  }\n\n  function getDocumentTop(element) {\n    return element.getBoundingClientRect().top + window.scrollY;\n  }\n\n  function scrollTargetIntoPosition(target) {\n    const root = document.documentElement;\n    const previousBehavior = root.style.getPropertyValue('scroll-behavior');\n    const previousPriority = root.style.getPropertyPriority('scroll-behavior');\n\n    // scrollIntoView keeps the theme's existing scroll-padding/scroll-margin header\n    // compensation. The temporary override only makes this correction immediate.\n    root.style.setProperty('scroll-behavior', 'auto', 'important');\n    target.scrollIntoView({ behavior: 'auto', block: 'start' });\n\n    window.requestAnimationFrame(() => {\n      if (previousBehavior) {\n        root.style.setProperty('scroll-behavior', previousBehavior, previousPriority);\n      } else {\n        root.style.removeProperty('scroll-behavior');\n      }\n    });\n  }\n\n  function addCancellationListeners(tracking) {\n    USER_INPUT_EVENTS.forEach((eventName) => {\n      window.addEventListener(eventName, cancelTracking, { passive: true });\n    });\n    window.addEventListener('keydown', handleNavigationKey);\n    window.addEventListener('hashchange', handleHashChange);\n  }\n\n  function handleNavigationKey(event) {\n    if (NAVIGATION_KEYS.has(event.key)) cancelTracking();\n  }\n\n  function handleHashChange() {\n    if (!activeTracking) return;\n\n    let id;\n    try {\n      id = decodeURIComponent(window.location.hash.slice(1));\n    } catch (error) {\n      id = window.location.hash.slice(1);\n    }\n\n    if (document.getElementById(id) !== activeTracking.target) cancelTracking();\n  }\n\n  function cleanupTracking(tracking) {\n    window.clearTimeout(tracking.debounceTimer);\n    window.clearTimeout(tracking.timeoutTimer);\n\n    tracking.imageListeners.forEach((listener, image) => {\n      image.removeEventListener('load', listener);\n      image.removeEventListener('error', listener);\n    });\n    tracking.imageListeners.clear();\n    tracking.pendingImages.clear();\n\n    USER_INPUT_EVENTS.forEach((eventName) => {\n      window.removeEventListener(eventName, cancelTracking);\n    });\n    window.removeEventListener('keydown', handleNavigationKey);\n    window.removeEventListener('hashchange', handleHashChange);\n  }\n\n  window[INSTANCE_KEY] = {\n    cancel: cancelTracking,\n    destroy,\n    init,\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init, { once: true });\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
