{"version":3,"file":"use-wheel.mjs","sources":["../../../../../../../packages/components/virtual-list/src/hooks/use-wheel.ts"],"sourcesContent":["import { rAF, cAF } from '@element-plus/utils/raf'\nimport { isFF } from '../utils'\nimport { HORIZONTAL, VERTICAL } from '../defaults'\n\nimport type { ComputedRef } from 'vue'\nimport type { LayoutDirection } from '../types'\n\nconst LayoutKeys = {\n  [HORIZONTAL]: 'deltaX',\n  [VERTICAL]: 'deltaY',\n}\n\ninterface ListWheelState {\n  atStartEdge: ComputedRef<boolean> // exclusive to reachEnd\n  atEndEdge: ComputedRef<boolean>\n  layout: ComputedRef<LayoutDirection>\n}\n\ntype ListWheelHandler = (offset: number) => void\n\nconst useWheel = (\n  { atEndEdge, atStartEdge, layout }: ListWheelState,\n  onWheelDelta: ListWheelHandler\n) => {\n  let frameHandle: number\n  let offset = 0\n\n  // let scrollLock = false\n  // let lockHandle = null\n\n  // const lockScroll = () => {\n  //   clearTimeout(lockHandle)\n  //   scrollLock = true\n  //   lockHandle = setTimeout(() => scrollLock = false, 50)\n  // }\n\n  const hasReachedEdge = (offset: number) => {\n    const edgeReached =\n      (offset < 0 && atStartEdge.value) || (offset > 0 && atEndEdge.value)\n\n    return edgeReached\n  }\n\n  const onWheel = (e: WheelEvent) => {\n    cAF(frameHandle)\n\n    const newOffset = e[LayoutKeys[layout.value]]\n\n    if (hasReachedEdge(offset) && hasReachedEdge(offset + newOffset)) return\n\n    offset += newOffset\n\n    if (!isFF) {\n      e.preventDefault()\n    }\n\n    frameHandle = rAF(() => {\n      onWheelDelta(offset)\n      offset = 0\n    })\n  }\n\n  return {\n    hasReachedEdge,\n    onWheel,\n  }\n}\n\nexport default useWheel\n"],"names":[],"mappings":";;;;AAOA,MAAM,aAAa;AAAA,GAChB,aAAa;AAAA,GACb,WAAW;AAAA;MAWR,WAAW,CACf,EAAE,WAAW,aAAa,UAC1B,iBACG;AACH,MAAI;AACJ,MAAI,SAAS;AAWb,QAAM,iBAAiB,CAAC,YAAmB;AACzC,UAAM,cACH,UAAS,KAAK,YAAY,SAAW,UAAS,KAAK,UAAU;AAEhE,WAAO;AAAA;AAGT,QAAM,UAAU,CAAC,MAAkB;AACjC,QAAI;AAEJ,UAAM,YAAY,EAAE,WAAW,OAAO;AAEtC,QAAI,eAAe,WAAW,eAAe,SAAS;AAAY;AAElE,cAAU;AAEV,QAAI,CAAC,MAAM;AACT,QAAE;AAAA;AAGJ,kBAAc,IAAI,MAAM;AACtB,mBAAa;AACb,eAAS;AAAA;AAAA;AAIb,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;;;;"}