{"version":3,"file":"syncScroll.mjs","names":["canUseDOM","syncScroll","refs","Map","handlerScroll","event","scrolledNode","currentTarget","window","requestAnimationFrame","forEach","node","removeEventListener","syncScrollPosition","addEventListener","scrollTop","scrollHeight","clientHeight","scrollLeft","scrollWidth","clientWidth","scrollTopOffset","scrollLeftOffset","nodeHeight","nodeWidth","name","set","ref","get","values"],"sources":["../../src/utils/syncScroll.ts"],"sourcesContent":["import canUseDOM from './canUseDOM';\n\nexport default function syncScroll() {\n  const refs = new Map<string, null | HTMLElement>();\n\n  function handlerScroll(event: any) {\n    const scrolledNode = event.currentTarget;\n    if (!canUseDOM()) return;\n    window.requestAnimationFrame(() => {\n      refs.forEach((node) => {\n        if (scrolledNode !== node && node) {\n          node.removeEventListener('scroll', handlerScroll);\n          syncScrollPosition(scrolledNode, node);\n          window.requestAnimationFrame(() => {\n            node.addEventListener('scroll', handlerScroll);\n          });\n        }\n      });\n    });\n  }\n\n  function syncScrollPosition(scrolledNode: HTMLElement, node: HTMLElement) {\n    const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } =\n      scrolledNode;\n\n    const scrollTopOffset = scrollHeight - clientHeight;\n    const scrollLeftOffset = scrollWidth - clientWidth;\n\n    const nodeHeight = node.scrollHeight - clientHeight;\n    const nodeWidth = node.scrollWidth - clientWidth;\n\n    if (scrollTopOffset > 0) {\n      node.scrollTop = (nodeHeight * scrollTop) / scrollTopOffset;\n    }\n    if (scrollLeftOffset > 0) {\n      node.scrollLeft = (nodeWidth * scrollLeft) / scrollLeftOffset;\n    }\n  }\n\n  return (name: string) => {\n    refs.set(name, null);\n    return (ref: any) => {\n      refs.get(name)?.removeEventListener('scroll', handlerScroll);\n      refs.set(name, ref);\n      if (ref) {\n        ref.addEventListener('scroll', handlerScroll);\n        const scrolledNode = [...refs.values()][0];\n        if (scrolledNode) {\n          syncScrollPosition(scrolledNode, ref);\n        }\n      }\n    };\n  };\n}\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,iBAAa;AAEnC,eAAe,SAASC,UAAUA,CAAA,EAAG;EACnC,MAAMC,IAAI,GAAG,IAAIC,GAAG,CAA6B,CAAC;EAElD,SAASC,aAAaA,CAACC,KAAU,EAAE;IACjC,MAAMC,YAAY,GAAGD,KAAK,CAACE,aAAa;IACxC,IAAI,CAACP,SAAS,CAAC,CAAC,EAAE;IAClBQ,MAAM,CAACC,qBAAqB,CAAC,MAAM;MACjCP,IAAI,CAACQ,OAAO,CAAEC,IAAI,IAAK;QACrB,IAAIL,YAAY,KAAKK,IAAI,IAAIA,IAAI,EAAE;UACjCA,IAAI,CAACC,mBAAmB,CAAC,QAAQ,EAAER,aAAa,CAAC;UACjDS,kBAAkB,CAACP,YAAY,EAAEK,IAAI,CAAC;UACtCH,MAAM,CAACC,qBAAqB,CAAC,MAAM;YACjCE,IAAI,CAACG,gBAAgB,CAAC,QAAQ,EAAEV,aAAa,CAAC;UAChD,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,SAASS,kBAAkBA,CAACP,YAAyB,EAAEK,IAAiB,EAAE;IACxE,MAAM;MAAEI,SAAS;MAAEC,YAAY;MAAEC,YAAY;MAAEC,UAAU;MAAEC,WAAW;MAAEC;IAAY,CAAC,GACnFd,YAAY;IAEd,MAAMe,eAAe,GAAGL,YAAY,GAAGC,YAAY;IACnD,MAAMK,gBAAgB,GAAGH,WAAW,GAAGC,WAAW;IAElD,MAAMG,UAAU,GAAGZ,IAAI,CAACK,YAAY,GAAGC,YAAY;IACnD,MAAMO,SAAS,GAAGb,IAAI,CAACQ,WAAW,GAAGC,WAAW;IAEhD,IAAIC,eAAe,GAAG,CAAC,EAAE;MACvBV,IAAI,CAACI,SAAS,GAAIQ,UAAU,GAAGR,SAAS,GAAIM,eAAe;IAC7D;IACA,IAAIC,gBAAgB,GAAG,CAAC,EAAE;MACxBX,IAAI,CAACO,UAAU,GAAIM,SAAS,GAAGN,UAAU,GAAII,gBAAgB;IAC/D;EACF;EAEA,OAAQG,IAAY,IAAK;IACvBvB,IAAI,CAACwB,GAAG,CAACD,IAAI,EAAE,IAAI,CAAC;IACpB,OAAQE,GAAQ,IAAK;MACnBzB,IAAI,CAAC0B,GAAG,CAACH,IAAI,CAAC,EAAEb,mBAAmB,CAAC,QAAQ,EAAER,aAAa,CAAC;MAC5DF,IAAI,CAACwB,GAAG,CAACD,IAAI,EAAEE,GAAG,CAAC;MACnB,IAAIA,GAAG,EAAE;QACPA,GAAG,CAACb,gBAAgB,CAAC,QAAQ,EAAEV,aAAa,CAAC;QAC7C,MAAME,YAAY,GAAG,CAAC,GAAGJ,IAAI,CAAC2B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAIvB,YAAY,EAAE;UAChBO,kBAAkB,CAACP,YAAY,EAAEqB,GAAG,CAAC;QACvC;MACF;IACF,CAAC;EACH,CAAC;AACH","ignoreList":[]}