{"version":3,"file":"use-grid-touch.mjs","sources":["../../../../../../../packages/components/virtual-list/src/hooks/use-grid-touch.ts"],"sourcesContent":["import { ref, unref } from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { cAF, rAF } from '@element-plus/utils'\n\nimport type { ComputedRef, Ref } from 'vue'\nimport type { GridScrollOptions, GridStates } from '../types'\n\nexport const useGridTouch = (\n  windowRef: Ref<HTMLElement | undefined>,\n  states: Ref<GridStates>,\n  scrollTo: (scrollOptions: GridScrollOptions) => void,\n  estimatedTotalWidth: ComputedRef<number>,\n  estimatedTotalHeight: ComputedRef<number>,\n  parsedWidth: ComputedRef<number>,\n  parsedHeight: ComputedRef<number>\n) => {\n  const touchStartX = ref(0)\n  const touchStartY = ref(0)\n  let frameHandle: number | undefined\n  let deltaX = 0\n  let deltaY = 0\n\n  const handleTouchStart = (event: TouchEvent) => {\n    cAF(frameHandle!)\n    touchStartX.value = event.touches[0].clientX\n    touchStartY.value = event.touches[0].clientY\n    deltaX = 0\n    deltaY = 0\n  }\n\n  const handleTouchMove = (event: TouchEvent) => {\n    event.preventDefault()\n    cAF(frameHandle!)\n\n    deltaX += touchStartX.value - event.touches[0].clientX\n    deltaY += touchStartY.value - event.touches[0].clientY\n    touchStartX.value = event.touches[0].clientX\n    touchStartY.value = event.touches[0].clientY\n\n    frameHandle = rAF(() => {\n      const maxScrollLeft = estimatedTotalWidth.value - unref(parsedWidth)\n      const maxScrollTop = estimatedTotalHeight.value - unref(parsedHeight)\n\n      const safeScrollLeft = Math.min(\n        states.value.scrollLeft + deltaX,\n        maxScrollLeft\n      )\n      const safeScrollTop = Math.min(\n        states.value.scrollTop + deltaY,\n        maxScrollTop\n      )\n\n      scrollTo({\n        scrollLeft: safeScrollLeft,\n        scrollTop: safeScrollTop,\n      })\n\n      deltaX = 0\n      deltaY = 0\n    })\n  }\n\n  useEventListener(windowRef, 'touchstart', handleTouchStart, {\n    passive: true,\n  })\n  useEventListener(windowRef, 'touchmove', handleTouchMove, {\n    passive: false,\n  })\n\n  return {\n    touchStartX,\n    touchStartY,\n    handleTouchStart,\n    handleTouchMove,\n  }\n}\n"],"names":[],"mappings":";;;;AAOO,MAAM,YAAA,GAAe,CAC1B,SAAA,EACA,MAAA,EACA,UACA,mBAAA,EACA,oBAAA,EACA,aACA,YAAA,KACG;AACH,EAAA,MAAM,WAAA,GAAc,IAAI,CAAC,CAAA;AACzB,EAAA,MAAM,WAAA,GAAc,IAAI,CAAC,CAAA;AACzB,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAsB;AAC9C,IAAA,GAAA,CAAI,WAAY,CAAA;AAChB,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AACrC,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AACrC,IAAA,MAAA,GAAS,CAAA;AACT,IAAA,MAAA,GAAS,CAAA;AAAA,EACX,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAsB;AAC7C,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,GAAA,CAAI,WAAY,CAAA;AAEhB,IAAA,MAAA,IAAU,WAAA,CAAY,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AAC/C,IAAA,MAAA,IAAU,WAAA,CAAY,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AAC/C,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AACrC,IAAA,WAAA,CAAY,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AAErC,IAAA,WAAA,GAAc,IAAI,MAAM;AACtB,MAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,KAAA,GAAQ,KAAA,CAAM,WAAW,CAAA;AACnE,MAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,KAAA,GAAQ,KAAA,CAAM,YAAY,CAAA;AAEpE,MAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA;AAAA,QAC1B,MAAA,CAAO,MAAM,UAAA,GAAa,MAAA;AAAA,QAC1B;AAAA,OACF;AACA,MAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA;AAAA,QACzB,MAAA,CAAO,MAAM,SAAA,GAAY,MAAA;AAAA,QACzB;AAAA,OACF;AAEA,MAAA,QAAA,CAAS;AAAA,QACP,UAAA,EAAY,cAAA;AAAA,QACZ,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,MAAA,GAAS,CAAA;AACT,MAAA,MAAA,GAAS,CAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,gBAAA,CAAiB,SAAA,EAAW,cAAc,gBAAA,EAAkB;AAAA,IAC1D,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,gBAAA,CAAiB,SAAA,EAAW,aAAa,eAAA,EAAiB;AAAA,IACxD,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}