All files / lib/touch longpress.ts

0% Statements 0/8
0% Branches 0/4
0% Functions 0/4
0% Lines 0/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                                                         
import type { Attachment } from 'svelte/attachments';
 
import { clicked } from 'clicked';
 
export function onlongpress(
	timeout: number,
	callbacks: {
		long: (e: MouseEvent | TouchEvent) => void;
		short?: (e: MouseEvent | TouchEvent) => void;
	}
): Attachment<HTMLElement> {
	return (node) => {
		const c = clicked(
			node,
			({ event, type }) => {
				if (type === 'long-clicked') callbacks.long(event);
				if (type === 'clicked') callbacks.short?.(event);
			},
			{
				clicked: true,
				longClicked: true,
				longClickedTime: timeout,
			}
		);
 
		return () => c.destroy();
	};
}