21 lines
652 B
TypeScript
21 lines
652 B
TypeScript
import { useEffect, useState } from 'react';
|
|
|
|
const QUERY = '(min-width: 1024px)';
|
|
|
|
/** True on viewports >= 1024px — drives the desktop GameTable layout
|
|
* (score sidebar, larger oval, bigger cards). */
|
|
export function useIsDesktop(): boolean {
|
|
const [isDesktop, setIsDesktop] = useState(
|
|
() => typeof window !== 'undefined' && window.matchMedia(QUERY).matches,
|
|
);
|
|
|
|
useEffect(() => {
|
|
const mql = window.matchMedia(QUERY);
|
|
const handler = (e: MediaQueryListEvent) => setIsDesktop(e.matches);
|
|
mql.addEventListener('change', handler);
|
|
return () => mql.removeEventListener('change', handler);
|
|
}, []);
|
|
|
|
return isDesktop;
|
|
}
|