import { useEffect, useState } from 'react'; /** CSS 미디어 쿼리 매칭 여부 (모바일·태블릿 분기용) */ export function useMediaQuery(query: string): boolean { const [matches, setMatches] = useState(() => { if (typeof window === 'undefined') return false; return window.matchMedia(query).matches; }); useEffect(() => { const mq = window.matchMedia(query); const onChange = () => setMatches(mq.matches); onChange(); mq.addEventListener('change', onChange); return () => mq.removeEventListener('change', onChange); }, [query]); return matches; } /** 차트 메인 레이아웃 모바일 분기 (≤768px) */ export function useIsMobile(): boolean { return useMediaQuery('(max-width: 768px)'); } /** 모바일·태블릿 — ticker REST 경량·WS 위주 (≤1024px) */ export function useIsCompactDevice(): boolean { return useMediaQuery('(max-width: 1024px)'); }