{"version":3,"file":"use-scroll.mjs","sources":["../../../../../packages/components/scrollbar/src/use-scroll.ts"],"sourcesContent":["import type { ShallowRef } from 'vue'\nimport type { BarState, BarX, BarY } from './scrollbar'\n\ninterface Options {\n  wrapper: ShallowRef<HTMLElement | undefined>\n}\n\nexport default function (options: Options) {\n  const { wrapper } = options\n\n  /**\n   * 更新滚动条样式\n   * 根据以下方程得出滚动条的样式, 其中滚动条的偏移量由transform来渲染\n   * 滚动条偏移量 / 容器高度 = 容器滚动偏移量 / 容器滚动内容高度\n   * eg: translateY / wrapper.offsetHeight = wrapper.offsetHeight / wrapper.scrollHeight\n   */\n  const updateBarStyle = (cb: (barState: BarState) => void) => {\n    const dom = wrapper.value\n    if (!dom) return\n\n    const {\n      offsetWidth,\n      scrollWidth,\n      scrollLeft,\n\n      offsetHeight,\n      scrollHeight,\n      scrollTop\n    } = dom\n\n    const visible = {\n      barX: offsetWidth !== scrollWidth,\n      barY: offsetHeight !== scrollHeight\n    }\n\n    const barX: BarX = {\n      width: 0,\n      left: 0\n    }\n\n    const barY: BarY = {\n      height: 0,\n      top: 0\n    }\n\n    const minSize = 20\n\n    // 当滚动条可见时更新\n    if (visible.barX) {\n      barX.width = offsetWidth ** 2 / scrollWidth\n      if (barX.width < minSize) {\n        barX.width = minSize\n      }\n      barX.left  = (offsetWidth - barX.width) * scrollLeft / (scrollWidth - offsetWidth)\n    }\n\n    if (visible.barY) {\n      barY.height = offsetHeight ** 2 / scrollHeight\n      if (barY.height < minSize) {\n        barY.height = minSize\n      }\n      barY.top  = (offsetHeight - barY.height) * scrollTop / (scrollHeight - offsetHeight)\n    }\n\n    cb({\n      barX,\n      barY,\n      visible,\n      wrapState: {\n        offsetWidth,\n        scrollWidth,\n        scrollLeft,\n\n        offsetHeight,\n        scrollHeight,\n        scrollTop\n      }\n    })\n  }\n\n  return updateBarStyle\n}\n"],"names":[],"mappings":"AAOA,kBAAA,CAAyB,OAAkB,EAAA;AACzC,EAAM,MAAA,EAAE,SAAY,GAAA,OAAA,CAAA;AAQpB,EAAM,MAAA,cAAA,GAAiB,CAAC,EAAqC,KAAA;AAC3D,IAAA,MAAM,MAAM,OAAQ,CAAA,KAAA,CAAA;AACpB,IAAA,IAAI,CAAC,GAAA;AAAK,MAAA,OAAA;AAEV,IAAM,MAAA;AAAA,MACJ,WAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MAEA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,KACE,GAAA,GAAA,CAAA;AAEJ,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,MAAM,WAAgB,KAAA,WAAA;AAAA,MACtB,MAAM,YAAiB,KAAA,YAAA;AAAA,KACzB,CAAA;AAEA,IAAA,MAAM,IAAa,GAAA;AAAA,MACjB,KAAO,EAAA,CAAA;AAAA,MACP,IAAM,EAAA,CAAA;AAAA,KACR,CAAA;AAEA,IAAA,MAAM,IAAa,GAAA;AAAA,MACjB,MAAQ,EAAA,CAAA;AAAA,MACR,GAAK,EAAA,CAAA;AAAA,KACP,CAAA;AAEA,IAAA,MAAM,OAAU,GAAA,EAAA,CAAA;AAGhB,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAK,IAAA,CAAA,KAAA,GAAQ,eAAe,CAAI,GAAA,WAAA,CAAA;AAChC,MAAI,IAAA,IAAA,CAAK,QAAQ,OAAS,EAAA;AACxB,QAAA,IAAA,CAAK,KAAQ,GAAA,OAAA,CAAA;AAAA,OACf;AACA,MAAA,IAAA,CAAK,IAAS,GAAA,CAAA,WAAA,GAAc,IAAK,CAAA,KAAA,IAAS,cAAc,WAAc,GAAA,WAAA,CAAA,CAAA;AAAA,KACxE;AAEA,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAK,IAAA,CAAA,MAAA,GAAS,gBAAgB,CAAI,GAAA,YAAA,CAAA;AAClC,MAAI,IAAA,IAAA,CAAK,SAAS,OAAS,EAAA;AACzB,QAAA,IAAA,CAAK,MAAS,GAAA,OAAA,CAAA;AAAA,OAChB;AACA,MAAA,IAAA,CAAK,GAAQ,GAAA,CAAA,YAAA,GAAe,IAAK,CAAA,MAAA,IAAU,aAAa,YAAe,GAAA,YAAA,CAAA,CAAA;AAAA,KACzE;AAEA,IAAG,EAAA,CAAA;AAAA,MACD,IAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAW,EAAA;AAAA,QACT,WAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QAEA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAO,OAAA,cAAA,CAAA;AACT;;;;"}