All files / src/renderer/lib/helpers mouse.ts

0% Statements 0/26
0% Branches 0/5
0% Functions 0/4
0% Lines 0/21

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 30 31 32 33 34 35 36 37 38 39 40 41 42                                                                                   
export const mousePosition = {
  x: 0,
  y: 0,
};
 
let initialized = false;
 
export const initMouseTracking = () => {
  Iif (initialized) return;
  initialized = true;
 
  window.addEventListener(
    "mousemove",
    (e) => {
      mousePosition.x = e.clientX;
      mousePosition.y = e.clientY;
    },
    { passive: true },
  );
};
 
export const isElementHovered = (el: HTMLElement | undefined | null) => {
  Iif (!el) return false;
  const underMouse = throttledGetElementUnderMouse();
  return !!underMouse && el.contains(underMouse);
};
 
let lastCheckTime = 0;
let cachedElement: Element | null = null;
const THROTTLE_MS = 100;
 
export const throttledGetElementUnderMouse = (): Element | null => {
  const now = performance.now();
 
  Iif (now - lastCheckTime > THROTTLE_MS) {
    lastCheckTime = now;
    cachedElement = document.elementFromPoint(mousePosition.x, mousePosition.y);
  }
 
  return cachedElement;
};