{"version":3,"file":"scrollTo.mjs","sources":["../../../../../packages/utils/scroll/scrollTo.ts"],"sourcesContent":["import { isWindow } from '../is';\nimport { raf } from '../vue/raf';\n\nimport { getScroll } from './getScroll';\n\nexport function easeInOutCubic(t: number, b: number, c: number, d: number) {\n  const cc = c - b;\n  t /= d / 2;\n  if (t < 1)\n    return (cc / 2) * t * t * t + b;\n\n  return (cc / 2) * ((t -= 2) * t * t + 2) + b;\n}\n\ninterface ScrollToOptions {\n  /** Scroll container, default as window */\n  getContainer?: () => HTMLElement | Window | Document;\n  /** Scroll end callback */\n  callback?: () => any;\n  /** Animation duration, default as 450 */\n  duration?: number;\n}\n\nexport function scrollTo(y: number, options: ScrollToOptions = {}) {\n  const { getContainer = () => window, callback, duration = 450 } = options;\n  const container = getContainer();\n  const scrollTop = getScroll(container, true);\n  const startTime = Date.now();\n\n  const frameFunc = () => {\n    const timestamp = Date.now();\n    const time = timestamp - startTime;\n    const nextScrollTop = easeInOutCubic(time > duration ? duration : time, scrollTop, y, duration);\n    if (isWindow(container))\n      (container as Window).scrollTo(window.scrollX, nextScrollTop);\n    else if (container instanceof Document)\n      (container as Document).documentElement.scrollTop = nextScrollTop;\n    else\n      (container as HTMLElement).scrollTop = nextScrollTop;\n\n    if (time < duration)\n      raf(frameFunc);\n    else if (typeof callback === 'function')\n      callback();\n  };\n  raf(frameFunc);\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,cAAe,CAAA,CAAA,EAAW,CAAW,EAAA,CAAA,EAAW,CAAW,EAAA;AACzE,EAAA,MAAM,KAAK,CAAI,GAAA,CAAA,CAAA;AACf,EAAA,CAAA,IAAK,CAAI,GAAA,CAAA,CAAA;AACT,EAAA,IAAI,CAAI,GAAA,CAAA;AACN,IAAA,OAAQ,EAAK,GAAA,CAAA,GAAK,CAAI,GAAA,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA;AAEhC,EAAA,OAAQ,KAAK,CAAO,IAAA,CAAA,CAAA,IAAK,CAAK,IAAA,CAAA,GAAI,IAAI,CAAK,CAAA,GAAA,CAAA,CAAA;AAC7C,CAAA;AAWO,SAAS,QAAS,CAAA,CAAA,EAAW,OAA2B,GAAA,EAAI,EAAA;AACjE,EAAA,MAAM,EAAE,YAAe,GAAA,MAAM,QAAQ,QAAU,EAAA,QAAA,GAAW,KAAQ,GAAA,OAAA,CAAA;AAClE,EAAA,MAAM,YAAY,YAAa,EAAA,CAAA;AAC/B,EAAM,MAAA,SAAA,GAAY,SAAU,CAAA,SAAA,EAAW,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AAE3B,EAAA,MAAM,YAAY,MAAM;AACtB,IAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AAC3B,IAAA,MAAM,OAAO,SAAY,GAAA,SAAA,CAAA;AACzB,IAAM,MAAA,aAAA,GAAgB,eAAe,IAAO,GAAA,QAAA,GAAW,WAAW,IAAM,EAAA,SAAA,EAAW,GAAG,QAAQ,CAAA,CAAA;AAC9F,IAAA,IAAI,SAAS,SAAS,CAAA;AACpB,MAAC,SAAqB,CAAA,QAAA,CAAS,MAAO,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAAA,SAAA,IACrD,SAAqB,YAAA,QAAA;AAC5B,MAAC,SAAA,CAAuB,gBAAgB,SAAY,GAAA,aAAA,CAAA;AAAA;AAEpD,MAAC,UAA0B,SAAY,GAAA,aAAA,CAAA;AAEzC,IAAA,IAAI,IAAO,GAAA,QAAA;AACT,MAAA,GAAA,CAAI,SAAS,CAAA,CAAA;AAAA,SAAA,IACN,OAAO,QAAa,KAAA,UAAA;AAC3B,MAAS,QAAA,EAAA,CAAA;AAAA,GACb,CAAA;AACA,EAAA,GAAA,CAAI,SAAS,CAAA,CAAA;AACf;;;;"}