{"version":3,"file":"scroll-helpers.cjs","sources":["../../src/util/scroll-helpers.ts"],"sourcesContent":["import { useState, useEffect, useMemo } from \"react\";\nimport { pairs } from \"d3-array\";\n\ninterface ScrollMarker {\n  id: string;\n  offset: number;\n}\n\nfunction useScrollMarkers(\n  markers: ScrollMarker[],\n  callback?: (marker: ScrollMarker | null) => void,\n): ScrollMarker | null {\n  /** Hook that notifies when we pass a scroll marker */\n  const [lastMarker, setLastMarker] = useState<ScrollMarker | null>(null);\n  const [offset, setOffset] = useState(null);\n\n  useEffect(() => {\n    const handleScroll = (event) =>\n      setOffset(document.scrollingElement.scrollTop);\n    window.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  });\n\n  const markerPairs: [ScrollMarker, ScrollMarker][] = useMemo(() => {\n    let sortedMarkers = [...markers];\n    sortedMarkers.sort((a, b) => a.offset - b.offset);\n    return pairs([\n      { id: \"start\", offset: 0 },\n      ...sortedMarkers,\n      { id: \"end\", offset: Number.MAX_SAFE_INTEGER },\n    ]);\n  }, [markers]);\n\n  useEffect(() => {\n    for (const [m1, m2] of markerPairs) {\n      if (offset >= m1.offset && offset < m2.offset) {\n        let markerToSet = m1.id === \"start\" ? null : m1;\n        if (markerToSet != lastMarker) {\n          setLastMarker(markerToSet);\n          callback?.(markerToSet);\n        }\n      }\n    }\n  }, [markerPairs, offset]);\n\n  return lastMarker;\n}\n\nexport { useScrollMarkers, ScrollMarker };\n"],"names":["useState","useEffect","useMemo","pairs"],"mappings":";;;;AAQA,SAAS,iBACP,SACA,UACqB;AAErB,QAAM,CAAC,YAAY,aAAa,IAAIA,MAAAA,SAA8B,IAAI;AACtE,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAAS,IAAI;AAEzCC,QAAAA,UAAU,MAAM;AACd,UAAM,eAAe,CAAC,UACpB,UAAU,SAAS,iBAAiB,SAAS;AAC/C,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,CAAC;AAED,QAAM,cAA8CC,MAAAA,QAAQ,MAAM;AAChE,QAAI,gBAAgB,CAAC,GAAG,OAAO;AAC/B,kBAAc,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AAChD,WAAOC,cAAM;AAAA,MACX,EAAE,IAAI,SAAS,QAAQ,EAAA;AAAA,MACvB,GAAG;AAAA,MACH,EAAE,IAAI,OAAO,QAAQ,OAAO,iBAAA;AAAA,IAAiB,CAC9C;AAAA,EACH,GAAG,CAAC,OAAO,CAAC;AAEZF,QAAAA,UAAU,MAAM;AACd,eAAW,CAAC,IAAI,EAAE,KAAK,aAAa;AAClC,UAAI,UAAU,GAAG,UAAU,SAAS,GAAG,QAAQ;AAC7C,YAAI,cAAc,GAAG,OAAO,UAAU,OAAO;AAC7C,YAAI,eAAe,YAAY;AAC7B,wBAAc,WAAW;AACzB,qBAAW,WAAW;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,CAAC;AAExB,SAAO;AACT;;"}