{"version":3,"file":"utils.mjs","sources":["../../../../../../../packages/components/tabs/src/utils.ts"],"sourcesContent":["import { useRect } from '@xzx-design/hooks'\nimport {\n  cancelRaf,\n  getRootScrollTop,\n  getScrollTop,\n  raf,\n  setScrollTop,\n} from '@xzx-design/utils'\n\nimport type { ScrollElement } from '@xzx-design/utils'\n\nexport function scrollLeftTo(\n  scroller: HTMLElement,\n  to: number,\n  duration: number\n) {\n  let rafId: number\n  let count = 0\n  const from = scroller.scrollLeft\n  const frames = duration === 0 ? 1 : Math.round((duration * 1000) / 16)\n  let scrollLeft = from\n\n  function cancel() {\n    cancelRaf(rafId)\n  }\n\n  function animate() {\n    scrollLeft += (to - from) / frames\n    scroller.scrollLeft = scrollLeft\n\n    if (++count < frames) {\n      rafId = raf(animate)\n    }\n  }\n\n  animate()\n\n  return cancel\n}\n\nexport function scrollTopTo(\n  scroller: ScrollElement,\n  to: number,\n  duration: number,\n  callback: () => void\n) {\n  let rafId: number\n  let current = getScrollTop(scroller)\n  const isDown = current < to\n  const frames = duration === 0 ? 1 : Math.round((duration * 1000) / 16)\n  const step = (to - current) / frames\n\n  function cancel() {\n    cancelRaf(rafId)\n  }\n\n  function animate() {\n    current += step\n\n    if ((isDown && current > to) || (!isDown && current < to)) {\n      current = to\n    }\n\n    setScrollTop(scroller, current)\n\n    if ((isDown && current < to) || (!isDown && current > to)) {\n      rafId = raf(animate)\n    } else if (callback) {\n      rafId = raf(callback as FrameRequestCallback)\n    }\n  }\n\n  animate()\n\n  return cancel\n}\n\nexport function getElementTop(el: ScrollElement, scroller?: ScrollElement) {\n  if (el === window) {\n    return 0\n  }\n\n  const scrollTop = scroller ? getScrollTop(scroller) : getRootScrollTop()\n  return useRect(el).top + scrollTop\n}\n"],"names":[],"mappings":";;;;;;AAWgB,SAAA,YAAA,CACd,QACA,EAAA,EAAA,EACA,QACA,EAAA;AACA,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,EAAA,MAAM,OAAO,QAAS,CAAA,UAAA,CAAA;AACtB,EAAM,MAAA,MAAA,GAAS,aAAa,CAAI,GAAA,CAAA,GAAI,KAAK,KAAO,CAAA,QAAA,GAAW,MAAQ,EAAE,CAAA,CAAA;AACrE,EAAA,IAAI,UAAa,GAAA,IAAA,CAAA;AAEjB,EAAA,SAAS,MAAS,GAAA;AAChB,IAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,GACjB;AAEA,EAAA,SAAS,OAAU,GAAA;AACjB,IAAA,UAAA,IAAA,CAAe,KAAK,IAAQ,IAAA,MAAA,CAAA;AAC5B,IAAA,QAAA,CAAS,UAAa,GAAA,UAAA,CAAA;AAEtB,IAAI,IAAA,EAAE,QAAQ,MAAQ,EAAA;AACpB,MAAA,KAAA,GAAQ,IAAI,OAAO,CAAA,CAAA;AAAA,KACrB;AAAA,GACF;AAEA,EAAQ,OAAA,EAAA,CAAA;AAER,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEO,SAAS,WACd,CAAA,QAAA,EACA,EACA,EAAA,QAAA,EACA,QACA,EAAA;AACA,EAAI,IAAA,KAAA,CAAA;AACJ,EAAI,IAAA,OAAA,GAAU,aAAa,QAAQ,CAAA,CAAA;AACnC,EAAA,MAAM,SAAS,OAAU,GAAA,EAAA,CAAA;AACzB,EAAM,MAAA,MAAA,GAAS,aAAa,CAAI,GAAA,CAAA,GAAI,KAAK,KAAO,CAAA,QAAA,GAAW,MAAQ,EAAE,CAAA,CAAA;AACrE,EAAM,MAAA,IAAA,GAAA,CAAQ,KAAK,OAAW,IAAA,MAAA,CAAA;AAE9B,EAAA,SAAS,MAAS,GAAA;AAChB,IAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,GACjB;AAEA,EAAA,SAAS,OAAU,GAAA;AACjB,IAAW,OAAA,IAAA,IAAA,CAAA;AAEX,IAAA,IAAK,UAAU,OAAU,GAAA,EAAA,IAAQ,CAAC,MAAA,IAAU,UAAU,EAAK,EAAA;AACzD,MAAU,OAAA,GAAA,EAAA,CAAA;AAAA,KACZ;AAEA,IAAA,YAAA,CAAa,UAAU,OAAO,CAAA,CAAA;AAE9B,IAAA,IAAK,UAAU,OAAU,GAAA,EAAA,IAAQ,CAAC,MAAA,IAAU,UAAU,EAAK,EAAA;AACzD,MAAA,KAAA,GAAQ,IAAI,OAAO,CAAA,CAAA;AAAA,eACV,QAAU,EAAA;AACnB,MAAA,KAAA,GAAQ,IAAI,QAAgC,CAAA,CAAA;AAAA,KAC9C;AAAA,GACF;AAEA,EAAQ,OAAA,EAAA,CAAA;AAER,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEgB,SAAA,aAAA,CAAc,IAAmB,QAA0B,EAAA;AACzE,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,SAAY,GAAA,QAAA,GAAW,YAAa,CAAA,QAAQ,IAAI,gBAAiB,EAAA,CAAA;AACvE,EAAO,OAAA,OAAA,CAAQ,EAAE,CAAA,CAAE,GAAM,GAAA,SAAA,CAAA;AAC3B;;;;"}