{"version":3,"file":"touch.mjs","names":["useVelocity","computed","onBeforeUnmount","onMounted","shallowRef","useTouch","_ref","isActive","isTemporary","width","touchless","position","window","addEventListener","onTouchstart","passive","onTouchmove","onTouchend","removeEventListener","isHorizontal","includes","value","_useVelocity","addMovement","endTouch","getVelocity","maybeDragging","isDragging","dragProgress","offset","start","getOffset","pos","active","document","documentElement","clientWidth","clientHeight","oops","getProgress","limit","arguments","length","undefined","progress","Math","max","min","e","touchX","changedTouches","clientX","touchY","clientY","touchZone","inTouchZone","inElement","cancelable","dx","abs","dy","thresholdMet","preventDefault","velocity","identifier","vx","x","vy","y","direction","left","right","top","bottom","dragStyles","transform","concat","transition","Error"],"sources":["../../../src/components/USidebar/touch.ts"],"sourcesContent":["// Composables\nimport { useVelocity } from '@/composables/touch'\n\n// Utilities\nimport { computed, onBeforeUnmount, onMounted, shallowRef } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTouch({\n  isActive,\n  isTemporary,\n  width,\n  touchless,\n  position,\n}: {\n  isActive: Ref<boolean>\n  isTemporary: Ref<boolean>\n  width: Ref<number>\n  touchless: Ref<boolean>\n  position: Ref<'left' | 'right' | 'top' | 'bottom'>\n}) {\n  onMounted(() => {\n    window.addEventListener('touchstart', onTouchstart, { passive: true })\n    window.addEventListener('touchmove', onTouchmove, { passive: false })\n    window.addEventListener('touchend', onTouchend, { passive: true })\n  })\n\n  onBeforeUnmount(() => {\n    window.removeEventListener('touchstart', onTouchstart)\n    window.removeEventListener('touchmove', onTouchmove)\n    window.removeEventListener('touchend', onTouchend)\n  })\n\n  const isHorizontal = computed(() =>\n    ['left', 'right'].includes(position.value)\n  )\n\n  const { addMovement, endTouch, getVelocity } = useVelocity()\n  let maybeDragging = false\n  const isDragging = shallowRef(false)\n  const dragProgress = shallowRef(0)\n  const offset = shallowRef(0)\n  let start: [number, number] | undefined\n\n  function getOffset(pos: number, active: boolean): number {\n    return (\n      (position.value === 'left'\n        ? pos\n        : position.value === 'right'\n        ? document.documentElement.clientWidth - pos\n        : position.value === 'top'\n        ? pos\n        : position.value === 'bottom'\n        ? document.documentElement.clientHeight - pos\n        : oops()) - (active ? width.value : 0)\n    )\n  }\n\n  function getProgress(pos: number, limit = true): number {\n    const progress =\n      position.value === 'left'\n        ? (pos - offset.value) / width.value\n        : position.value === 'right'\n        ? (document.documentElement.clientWidth - pos - offset.value) /\n          width.value\n        : position.value === 'top'\n        ? (pos - offset.value) / width.value\n        : position.value === 'bottom'\n        ? (document.documentElement.clientHeight - pos - offset.value) /\n          width.value\n        : oops()\n    return limit ? Math.max(0, Math.min(1, progress)) : progress\n  }\n\n  function onTouchstart(e: TouchEvent) {\n    if (touchless.value) return\n\n    const touchX = e.changedTouches[0].clientX\n    const touchY = e.changedTouches[0].clientY\n\n    const touchZone = 25\n    const inTouchZone: boolean =\n      position.value === 'left'\n        ? touchX < touchZone\n        : position.value === 'right'\n        ? touchX > document.documentElement.clientWidth - touchZone\n        : position.value === 'top'\n        ? touchY < touchZone\n        : position.value === 'bottom'\n        ? touchY > document.documentElement.clientHeight - touchZone\n        : oops()\n\n    const inElement: boolean =\n      isActive.value &&\n      (position.value === 'left'\n        ? touchX < width.value\n        : position.value === 'right'\n        ? touchX > document.documentElement.clientWidth - width.value\n        : position.value === 'top'\n        ? touchY < width.value\n        : position.value === 'bottom'\n        ? touchY > document.documentElement.clientHeight - width.value\n        : oops())\n\n    if (inTouchZone || inElement || (isActive.value && isTemporary.value)) {\n      maybeDragging = true\n      start = [touchX, touchY]\n\n      offset.value = getOffset(\n        isHorizontal.value ? touchX : touchY,\n        isActive.value\n      )\n      dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY)\n\n      endTouch(e)\n      addMovement(e)\n    }\n  }\n\n  function onTouchmove(e: TouchEvent) {\n    const touchX = e.changedTouches[0].clientX\n    const touchY = e.changedTouches[0].clientY\n\n    if (maybeDragging) {\n      if (!e.cancelable) {\n        maybeDragging = false\n        return\n      }\n\n      const dx = Math.abs(touchX - start![0])\n      const dy = Math.abs(touchY - start![1])\n\n      const thresholdMet = isHorizontal.value\n        ? dx > dy && dx > 3\n        : dy > dx && dy > 3\n\n      if (thresholdMet) {\n        isDragging.value = true\n        maybeDragging = false\n      } else if ((isHorizontal.value ? dy : dx) > 3) {\n        maybeDragging = false\n      }\n    }\n\n    if (!isDragging.value) return\n\n    e.preventDefault()\n    addMovement(e)\n\n    const progress = getProgress(isHorizontal.value ? touchX : touchY, false)\n    dragProgress.value = Math.max(0, Math.min(1, progress))\n\n    if (progress > 1) {\n      offset.value = getOffset(isHorizontal.value ? touchX : touchY, true)\n    } else if (progress < 0) {\n      offset.value = getOffset(isHorizontal.value ? touchX : touchY, false)\n    }\n  }\n\n  function onTouchend(e: TouchEvent) {\n    maybeDragging = false\n\n    if (!isDragging.value) return\n\n    addMovement(e)\n\n    isDragging.value = false\n\n    const velocity = getVelocity(e.changedTouches[0].identifier)\n    const vx = Math.abs(velocity.x)\n    const vy = Math.abs(velocity.y)\n    const thresholdMet = isHorizontal.value\n      ? vx > vy && vx > 400\n      : vy > vx && vy > 3\n\n    if (thresholdMet) {\n      isActive.value =\n        velocity.direction ===\n        ({\n          left: 'right',\n          right: 'left',\n          top: 'down',\n          bottom: 'up',\n        }[position.value] || oops())\n    } else {\n      isActive.value = dragProgress.value > 0.5\n    }\n  }\n\n  const dragStyles = computed(() => {\n    return isDragging.value\n      ? {\n          transform:\n            position.value === 'left'\n              ? `translateX(calc(-100% + ${\n                  dragProgress.value * width.value\n                }px))`\n              : position.value === 'right'\n              ? `translateX(calc(100% - ${dragProgress.value * width.value}px))`\n              : position.value === 'top'\n              ? `translateY(calc(-100% + ${\n                  dragProgress.value * width.value\n                }px))`\n              : position.value === 'bottom'\n              ? `translateY(calc(100% - ${dragProgress.value * width.value}px))`\n              : oops(),\n          transition: 'none',\n        }\n      : undefined\n  })\n\n  return {\n    isDragging,\n    dragProgress,\n    dragStyles,\n  }\n}\n\nfunction oops(): never {\n  throw new Error()\n}\n"],"mappings":"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"}