1 line
13 KiB
Plaintext
1 line
13 KiB
Plaintext
{"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","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","transition","Error"],"sources":["../../../src/components/VNavigationDrawer/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 ({ isActive, isTemporary, width, touchless, position }: {\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(() => ['left', 'right'].includes(position.value))\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' ? pos\n : position.value === 'right' ? document.documentElement.clientWidth - pos\n : position.value === 'top' ? pos\n : position.value === 'bottom' ? document.documentElement.clientHeight - pos\n : oops()\n ) - (active ? width.value : 0)\n }\n\n function getProgress (pos: number, limit = true): number {\n const progress = (\n position.value === 'left' ? (pos - offset.value) / width.value\n : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value\n : position.value === 'top' ? (pos - offset.value) / width.value\n : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value\n : oops()\n )\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' ? touchX < touchZone\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone\n : position.value === 'top' ? touchY < touchZone\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone\n : oops()\n\n const inElement: boolean = isActive.value && (\n position.value === 'left' ? touchX < width.value\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value\n : position.value === 'top' ? touchY < width.value\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value\n : oops()\n )\n\n if (\n inTouchZone ||\n inElement ||\n (isActive.value && isTemporary.value)\n ) {\n maybeDragging = true\n start = [touchX, touchY]\n\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value)\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 = velocity.direction === ({\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 transform:\n position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))`\n : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))`\n : oops(),\n transition: 'none',\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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"} |