{"version":3,"file":"use-grid-wheel.mjs","sources":["../../../../../../../packages/components/virtual-list/src/hooks/use-grid-wheel.ts"],"sourcesContent":["import { rAF, cAF } from '@element-plus/utils/raf'\nimport { isFF } from '../utils'\n\nimport type { ComputedRef } from 'vue'\n\ninterface GridWheelState {\n  atXStartEdge: ComputedRef<boolean>\n  atXEndEdge: ComputedRef<boolean>\n  atYStartEdge: ComputedRef<boolean>\n  atYEndEdge: ComputedRef<boolean>\n}\n\ntype GridWheelHandler = (x: number, y: number) => void\n\nexport const useGridWheel = (\n  { atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }: GridWheelState,\n  onWheelDelta: GridWheelHandler\n) => {\n  let frameHandle: number | null = null\n  let xOffset = 0\n  let yOffset = 0\n\n  const hasReachedEdge = (x: number, y: number) => {\n    const xEdgeReached =\n      (x < 0 && atXStartEdge.value) || (x > 0 && atXEndEdge.value)\n    const yEdgeReached =\n      (y < 0 && atYStartEdge.value) || (y > 0 && atYEndEdge.value)\n    return xEdgeReached && yEdgeReached\n  }\n\n  const onWheel = (e: WheelEvent) => {\n    cAF(frameHandle!)\n\n    const x = e.deltaX\n    const y = e.deltaY\n\n    if (\n      hasReachedEdge(xOffset, yOffset) &&\n      hasReachedEdge(xOffset + x, yOffset + y)\n    )\n      return\n\n    xOffset += x\n    yOffset += y\n\n    if (!isFF) {\n      e.preventDefault()\n    }\n\n    frameHandle = rAF(() => {\n      onWheelDelta(xOffset, yOffset)\n      xOffset = 0\n      yOffset = 0\n    })\n  }\n\n  return {\n    hasReachedEdge,\n    onWheel,\n  }\n}\n"],"names":[],"mappings":";;;MAca,eAAe,CAC1B,EAAE,YAAY,cAAc,YAAY,gBACxC,iBACG;AACH,MAAI,cAA6B;AACjC,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,QAAM,iBAAiB,CAAC,GAAW,MAAc;AAC/C,UAAM,eACH,IAAI,KAAK,aAAa,SAAW,IAAI,KAAK,WAAW;AACxD,UAAM,eACH,IAAI,KAAK,aAAa,SAAW,IAAI,KAAK,WAAW;AACxD,WAAO,gBAAgB;AAAA;AAGzB,QAAM,UAAU,CAAC,MAAkB;AACjC,QAAI;AAEJ,UAAM,IAAI,EAAE;AACZ,UAAM,IAAI,EAAE;AAEZ,QACE,eAAe,SAAS,YACxB,eAAe,UAAU,GAAG,UAAU;AAEtC;AAEF,eAAW;AACX,eAAW;AAEX,QAAI,CAAC,MAAM;AACT,QAAE;AAAA;AAGJ,kBAAc,IAAI,MAAM;AACtB,mBAAa,SAAS;AACtB,gBAAU;AACV,gBAAU;AAAA;AAAA;AAId,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;;;;"}