{"version":3,"file":"use-scrollbar.mjs","sources":["../../../../../../../packages/components/table-v2/src/composables/use-scrollbar.ts"],"sourcesContent":["import { ref, unref, watch } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Alignment as ScrollStrategy } from '@bigin/components/virtual-list'\nimport type { TableV2Props } from '../table'\nimport type { TableGridInstance } from '../table-grid'\n\nexport type ScrollPos = { scrollLeft: number; scrollTop: number }\ntype GridInstanceRef = Ref<TableGridInstance | undefined>\n\ntype UseScrollBarProps = {\n  mainTableRef: GridInstanceRef\n  leftTableRef: GridInstanceRef\n  rightTableRef: GridInstanceRef\n\n  onMaybeEndReached: () => void\n}\n\nexport type { ScrollStrategy }\n\nexport const useScrollbar = (\n  props: TableV2Props,\n  {\n    mainTableRef,\n    leftTableRef,\n    rightTableRef,\n    onMaybeEndReached,\n  }: UseScrollBarProps\n) => {\n  const scrollPos = ref<ScrollPos>({ scrollLeft: 0, scrollTop: 0 })\n\n  function doScroll(params: ScrollPos) {\n    const { scrollTop } = params\n\n    mainTableRef.value?.scrollTo(params)\n    leftTableRef.value?.scrollToTop(scrollTop)\n    rightTableRef.value?.scrollToTop(scrollTop)\n  }\n\n  // methods\n  function scrollTo(params: ScrollPos) {\n    scrollPos.value = params\n\n    doScroll(params)\n  }\n\n  function scrollToTop(scrollTop: number) {\n    scrollPos.value.scrollTop = scrollTop\n\n    doScroll(unref(scrollPos))\n  }\n\n  function scrollToLeft(scrollLeft: number) {\n    scrollPos.value.scrollLeft = scrollLeft\n\n    mainTableRef.value?.scrollTo?.(unref(scrollPos))\n  }\n\n  function onScroll(params: ScrollPos) {\n    scrollTo(params)\n    props.onScroll?.(params)\n  }\n\n  function onVerticalScroll({ scrollTop }: ScrollPos) {\n    const { scrollTop: currentScrollTop } = unref(scrollPos)\n    if (scrollTop !== currentScrollTop) scrollToTop(scrollTop)\n  }\n\n  function scrollToRow(row: number, strategy: ScrollStrategy = 'auto') {\n    mainTableRef.value?.scrollToRow(row, strategy)\n  }\n\n  // When scrollTop changes, maybe reaching the bottom\n  watch(\n    () => unref(scrollPos).scrollTop,\n    (cur, prev) => {\n      if (cur > prev) onMaybeEndReached()\n    }\n  )\n\n  return {\n    scrollPos,\n\n    scrollTo,\n    scrollToLeft,\n    scrollToTop,\n    scrollToRow,\n    onScroll,\n    onVerticalScroll,\n  }\n}\n"],"names":[],"mappings":";;AAoBa,MAAA,YAAA,GAAe,CAC1B,KACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AACF,CACG,KAAA;AACH,EAAA,MAAM,YAAY,GAAe,CAAA,EAAE,YAAY,CAAG,EAAA,SAAA,EAAW,GAAG,CAAA,CAAA;AAEhE,EAAA,SAAS,SAAS,MAAmB,EAAA;AACnC,IAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AAEtB,IAAa,YAAA,CAAA,KAAA,EAAO,SAAS,MAAM,CAAA,CAAA;AACnC,IAAa,YAAA,CAAA,KAAA,EAAO,YAAY,SAAS,CAAA,CAAA;AACzC,IAAc,aAAA,CAAA,KAAA,EAAO,YAAY,SAAS,CAAA,CAAA;AAAA,GAC5C;AAGA,EAAA,SAAS,SAAS,MAAmB,EAAA;AACnC,IAAA,SAAA,CAAU,KAAQ,GAAA,MAAA,CAAA;AAElB,IAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,GACjB;AAEA,EAAA,SAAS,YAAY,SAAmB,EAAA;AACtC,IAAA,SAAA,CAAU,MAAM,SAAY,GAAA,SAAA,CAAA;AAE5B,IAAS,QAAA,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAAA,GAC3B;AAEA,EAAA,SAAS,aAAa,UAAoB,EAAA;AACxC,IAAA,SAAA,CAAU,MAAM,UAAa,GAAA,UAAA,CAAA;AAE7B,IAAA,YAAA,CAAa,KAAO,EAAA,QAAA,GAAW,KAAM,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GACjD;AAEA,EAAA,SAAS,SAAS,MAAmB,EAAA;AACnC,IAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AACf,IAAA,KAAA,CAAM,WAAW,MAAM,CAAA,CAAA;AAAA,GACzB;AAEA,EAAS,SAAA,gBAAA,CAAiB,EAAE,SAAA,EAAwB,EAAA;AAClD,IAAA,MAAM,EAAE,SAAA,EAAW,gBAAiB,EAAA,GAAI,MAAM,SAAS,CAAA,CAAA;AACvD,IAAA,IAAI,SAAc,KAAA,gBAAA;AAAkB,MAAA,WAAA,CAAY,SAAS,CAAA,CAAA;AAAA,GAC3D;AAEA,EAAS,SAAA,WAAA,CAAY,GAAa,EAAA,QAAA,GAA2B,MAAQ,EAAA;AACnE,IAAa,YAAA,CAAA,KAAA,EAAO,WAAY,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AAAA,GAC/C;AAGA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,SAAS,CAAE,CAAA,SAAA;AAAA,IACvB,CAAC,KAAK,IAAS,KAAA;AACb,MAAA,IAAI,GAAM,GAAA,IAAA;AAAM,QAAkB,iBAAA,EAAA,CAAA;AAAA,KACpC;AAAA,GACF,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IAEA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF;;;;"}