UNPKG

@mui/x-internal-gestures

Version:

The core engine of GestureEvents, a modern and robust multi-pointer gesture detection library for JavaScript.

74 lines (68 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tap = void 0; /** * Implementation of the tap gesture for testing. * * @param options - The options for the tap gesture. * @param advanceTimers - Optional function to advance timers in tests. * @returns A promise that resolves when the tap gesture is completed. */ const tap = async (pointerManager, options, advanceTimers) => { const { target, taps = 1, delay = 50 } = options; if (!target) { throw new Error('Target element is required for tap gesture'); } // Parse pointer(s) based on pointer type let pointersArray; if (pointerManager.mode === 'mouse') { // For mouse, we use the MousePointer type from the options const mousePointer = 'pointer' in options ? options.pointer : undefined; pointersArray = [pointerManager.parseMousePointer(mousePointer, target)]; } // Perform the specified number of taps for (let tapCount = 0; tapCount < taps; tapCount += 1) { if (pointerManager.mode === 'touch') { // For touch, we use the Pointers type from the options const touchPointers = 'pointers' in options ? options.pointers : undefined; pointersArray = pointerManager.parsePointers(touchPointers, target, { amount: 1, distance: 0 }); } if (!pointersArray || pointersArray.length === 0) { return; } // For each tap, press and release all pointers for (const pointer of pointersArray) { pointerManager.pointerDown(pointer); } // Short delay (10ms) between down and up within a single tap // eslint-disable-next-line no-await-in-loop await (advanceTimers ? advanceTimers(10) : new Promise(resolve => { setTimeout(resolve, 10); })); for (const pointer of pointersArray) { pointerManager.pointerUp(pointer); } // If this isn't the last tap, wait for the specified delay before the next tap if (tapCount < taps - 1) { if (advanceTimers) { // eslint-disable-next-line no-await-in-loop await advanceTimers(delay); } else { // eslint-disable-next-line no-await-in-loop await new Promise(resolve => { setTimeout(resolve, delay); }); } } } }; exports.tap = tap;