{"version":3,"file":"use-grid-wheel.mjs","sources":["../../../../../../packages/components/virtual-list/src/hooks/use-grid-wheel.ts"],"sourcesContent":["import { cAF, isFirefox, rAF } from '@element-ultra/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    let x = e.deltaX\n    let y = e.deltaY\n    // Simulate native behavior when using touch pad/track pad for wheeling.\n    if (Math.abs(x) > Math.abs(y)) {\n      y = 0\n    } else {\n      x = 0\n    }\n\n    // Special case for windows machine with shift key + wheel scrolling\n    if (e.shiftKey && y !== 0) {\n      x = y\n      y = 0\n    }\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 (!isFirefox()) {\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":";;;;AAaa,MAAA,YAAA,GAAe,CAC1B,EAAE,UAAA,EAAY,cAAc,UAAY,EAAA,YAAA,IACxC,YACG,KAAA;AACH,EAAA,IAAI,WAA6B,GAAA,IAAA,CAAA;AACjC,EAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AACd,EAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AAEd,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAA,EAAW,CAAc,KAAA;AAC/C,IAAA,MAAM,eACH,CAAI,GAAA,CAAA,IAAK,aAAa,KAAW,IAAA,CAAA,GAAI,KAAK,UAAW,CAAA,KAAA,CAAA;AACxD,IAAA,MAAM,eACH,CAAI,GAAA,CAAA,IAAK,aAAa,KAAW,IAAA,CAAA,GAAI,KAAK,UAAW,CAAA,KAAA,CAAA;AACxD,IAAA,OAAO,YAAgB,IAAA,YAAA,CAAA;AAAA,GACzB,CAAA;AAEA,EAAM,MAAA,OAAA,GAAU,CAAC,CAAkB,KAAA;AACjC,IAAA,GAAA,CAAI,WAAY,CAAA,CAAA;AAEhB,IAAA,IAAI,IAAI,CAAE,CAAA,MAAA,CAAA;AACV,IAAA,IAAI,IAAI,CAAE,CAAA,MAAA,CAAA;AAEV,IAAA,IAAI,KAAK,GAAI,CAAA,CAAC,IAAI,IAAK,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA;AAC7B,MAAI,CAAA,GAAA,CAAA,CAAA;AAAA,KACC,MAAA;AACL,MAAI,CAAA,GAAA,CAAA,CAAA;AAAA,KACN;AAGA,IAAI,IAAA,CAAA,CAAE,QAAY,IAAA,CAAA,KAAM,CAAG,EAAA;AACzB,MAAI,CAAA,GAAA,CAAA,CAAA;AACJ,MAAI,CAAA,GAAA,CAAA,CAAA;AAAA,KACN;AAEA,IACE,IAAA,cAAA,CAAe,SAAS,OAAO,CAAA,IAC/B,eAAe,OAAU,GAAA,CAAA,EAAG,UAAU,CAAC,CAAA;AAEvC,MAAA,OAAA;AAEF,IAAW,OAAA,IAAA,CAAA,CAAA;AACX,IAAW,OAAA,IAAA,CAAA,CAAA;AAEX,IAAI,IAAA,CAAC,WAAa,EAAA;AAChB,MAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AAAA,KACnB;AAEA,IAAA,WAAA,GAAc,IAAI,MAAM;AACtB,MAAA,YAAA,CAAa,SAAS,OAAO,CAAA,CAAA;AAC7B,MAAU,OAAA,GAAA,CAAA,CAAA;AACV,MAAU,OAAA,GAAA,CAAA,CAAA;AAAA,KACX,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACF;;;;"}