Files
clash-proxy/src/hooks/use-visibility.ts
Sline 0b4403b67b refactor: frontend (#5068)
* refactor: setting components

* refactor: frontend

* fix: settings router
2025-10-15 18:57:44 +08:00

31 lines
925 B
TypeScript

import { useEffect, useState } from "react";
export const useVisibility = () => {
const [visible, setVisible] = useState(() =>
typeof document === "undefined"
? true
: document.visibilityState === "visible",
);
useEffect(() => {
const handleVisibilityChange = () => {
setVisible(document.visibilityState === "visible");
};
const handleFocus = () => setVisible(true);
const handlePointerDown = () => setVisible(true);
document.addEventListener("focus", handleFocus);
document.addEventListener("pointerdown", handlePointerDown);
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => {
document.removeEventListener("focus", handleFocus);
document.removeEventListener("pointerdown", handlePointerDown);
document.removeEventListener("visibilitychange", handleVisibilityChange);
};
}, []);
return visible;
};