export class MouseCursorHider { static #timeout: number | null; static #cursorVisible = true; static show() { document.body && (document.body.style.cursor = 'unset'); MouseCursorHider.#cursorVisible = true; } static hide() { document.body && (document.body.style.cursor = 'none'); MouseCursorHider.#timeout = null; MouseCursorHider.#cursorVisible = false; } static onMouseMove(e: MouseEvent) { // Toggle cursor !MouseCursorHider.#cursorVisible && MouseCursorHider.show(); // Setup timeout MouseCursorHider.#timeout && clearTimeout(MouseCursorHider.#timeout); MouseCursorHider.#timeout = window.setTimeout(MouseCursorHider.hide, 3000); } static start() { MouseCursorHider.show(); document.addEventListener('mousemove', MouseCursorHider.onMouseMove); } static stop() { MouseCursorHider.#timeout && clearTimeout(MouseCursorHider.#timeout); document.removeEventListener('mousemove', MouseCursorHider.onMouseMove); MouseCursorHider.show(); } }