{"version":3,"file":"use-grid-wheel.mjs","sources":["../../../../../../../packages/components/virtual-list/src/hooks/use-grid-wheel.ts"],"sourcesContent":["import { rAF, cAF } from '@sgui-plus/utils/raf'\r\nimport { isFF } from '../utils'\r\n\r\nimport type { ComputedRef } from 'vue'\r\n\r\ninterface GridWheelState {\r\n  atXStartEdge: ComputedRef<boolean>\r\n  atXEndEdge: ComputedRef<boolean>\r\n  atYStartEdge: ComputedRef<boolean>\r\n  atYEndEdge: ComputedRef<boolean>\r\n}\r\n\r\ntype GridWheelHandler = (x: number, y: number) => void\r\n\r\nexport const useGridWheel = (\r\n  { atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }: GridWheelState,\r\n  onWheelDelta: GridWheelHandler\r\n) => {\r\n  let frameHandle: number | null = null\r\n  let xOffset = 0\r\n  let yOffset = 0\r\n\r\n  const hasReachedEdge = (x: number, y: number) => {\r\n    const xEdgeReached =\r\n      (x < 0 && atXStartEdge.value) || (x > 0 && atXEndEdge.value)\r\n    const yEdgeReached =\r\n      (y < 0 && atYStartEdge.value) || (y > 0 && atYEndEdge.value)\r\n    return xEdgeReached && yEdgeReached\r\n  }\r\n\r\n  const onWheel = (e: WheelEvent) => {\r\n    cAF(frameHandle!)\r\n\r\n    const x = e.deltaX\r\n    const y = e.deltaY\r\n\r\n    if (\r\n      hasReachedEdge(xOffset, yOffset) &&\r\n      hasReachedEdge(xOffset + x, yOffset + y)\r\n    )\r\n      return\r\n\r\n    xOffset += x\r\n    yOffset += y\r\n\r\n    if (!isFF) {\r\n      e.preventDefault()\r\n    }\r\n\r\n    frameHandle = rAF(() => {\r\n      onWheelDelta(xOffset, yOffset)\r\n      xOffset = 0\r\n      yOffset = 0\r\n    })\r\n  }\r\n\r\n  return {\r\n    hasReachedEdge,\r\n    onWheel,\r\n  }\r\n}\r\n"],"names":[],"mappings":";;;AAEY,MAAC,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,YAAY,KAAK;AACtG,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC;AACzB,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;AAClB,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;AAClB,EAAE,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AACnC,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;AAClF,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;AAClF,IAAI,OAAO,YAAY,IAAI,YAAY,CAAC;AACxC,GAAG,CAAC;AACJ,EAAE,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK;AACzB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AACrB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACvB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACvB,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;AACpF,MAAM,OAAO;AACb,IAAI,OAAO,IAAI,CAAC,CAAC;AACjB,IAAI,OAAO,IAAI,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,WAAW,GAAG,GAAG,CAAC,MAAM;AAC5B,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACrC,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,OAAO;AACT,IAAI,cAAc;AAClB,IAAI,OAAO;AACX,GAAG,CAAC;AACJ;;;;"}