{
  "version": 3,
  "sources": ["../src/modules/intersect.js"],
  "sourcesContent": ["// zelvior-runtime/intersect -- one shared IntersectionObserver per distinct\n// rootMargin, fanning out to many callbacks, instead of one instance per\n// watched element (the pattern most lazy-load libraries use, and the\n// dominant real cost on element-heavy low-end pages). Falls back to a\n// throttled scroll/resize rect check when IntersectionObserver is\n// unavailable. ESM source of truth; bundled by build.mjs.\n\nvar hasIO = typeof window !== 'undefined' && typeof window.IntersectionObserver === 'function';\n\nvar observers = {}; // rootMargin -> IntersectionObserver\nvar callbacks = (typeof WeakMap === 'function') ? new WeakMap() : null;\nvar fallbackEls = [];\nvar fallbackTimer = null;\n\nfunction key(margin) { return margin || '0px'; }\n\nfunction handleEntries(entries) {\n  for (var i = 0; i < entries.length; i++) {\n    var e = entries[i];\n    var cbs = callbacks && callbacks.get(e.target);\n    if (cbs) for (var j = 0; j < cbs.length; j++) { try { cbs[j](e.isIntersecting, e); } catch (err) {} }\n  }\n}\n\nfunction fallbackCheck() {\n  fallbackTimer = null;\n  var vh = window.innerHeight || document.documentElement.clientHeight;\n  var vw = window.innerWidth || document.documentElement.clientWidth;\n  for (var i = 0; i < fallbackEls.length; i++) {\n    var el = fallbackEls[i];\n    var r = el.getBoundingClientRect();\n    var visible = r.top <= vh + 50 && r.bottom >= -50 && r.left <= vw + 50 && r.right >= -50;\n    var cbs = callbacks && callbacks.get(el);\n    if (cbs) for (var j = 0; j < cbs.length; j++) { try { cbs[j](visible, { target: el, isIntersecting: visible }); } catch (err) {} }\n  }\n}\nfunction scheduleFallback() {\n  if (fallbackTimer) return;\n  fallbackTimer = setTimeout(fallbackCheck, 100);\n}\n\n/** Watch `el`; `cb(isIntersecting, entry)` may be called many times, shared across watchers using the same rootMargin. Returns an unwatch function. */\nexport function onIntersect(el, cb, opts) {\n  if (!callbacks) callbacks = new WeakMap();\n  var cbs = callbacks.get(el);\n  if (!cbs) { cbs = []; callbacks.set(el, cbs); }\n  cbs.push(cb);\n\n  var margin = opts && opts.rootMargin;\n  if (hasIO) {\n    var k = key(margin);\n    var obs = observers[k];\n    if (!obs) { obs = new IntersectionObserver(handleEntries, { rootMargin: k }); observers[k] = obs; }\n    obs.observe(el);\n  } else {\n    if (fallbackEls.indexOf(el) === -1) fallbackEls.push(el);\n    if (typeof window !== 'undefined' && !window.__zelvior_io_fallback__) {\n      window.__zelvior_io_fallback__ = true;\n      window.addEventListener('scroll', scheduleFallback, { passive: true });\n      window.addEventListener('resize', scheduleFallback, { passive: true });\n    }\n    scheduleFallback();\n  }\n\n  return function unwatch() {\n    var arr = callbacks.get(el);\n    if (arr) {\n      var idx = arr.indexOf(cb);\n      if (idx > -1) arr.splice(idx, 1);\n      if (!arr.length) {\n        if (hasIO) { var obs2 = observers[key(margin)]; if (obs2) obs2.unobserve(el); }\n        var fi = fallbackEls.indexOf(el);\n        if (fi > -1) fallbackEls.splice(fi, 1);\n      }\n    }\n  };\n}\n\nexport var supported = hasIO;\n"],
  "mappings": "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",
  "names": ["intersect_exports", "__export", "onIntersect", "supported", "__toCommonJS", "hasIO", "observers", "callbacks", "fallbackEls", "fallbackTimer", "key", "margin", "handleEntries", "entries", "i", "e", "cbs", "j", "err", "fallbackCheck", "vh", "vw", "el", "visible", "scheduleFallback", "cb", "opts", "k", "obs", "arr", "idx", "obs2", "fi"]
}
