/** * 반응형 브레이크포인트 감지 훅 */ import { useState, useEffect } from "react"; import { Breakpoint, BREAKPOINTS } from "@/types/responsive"; /** * 현재 윈도우 크기에 따른 브레이크포인트 반환 */ export function useBreakpoint(): Breakpoint { const [breakpoint, setBreakpoint] = useState("desktop"); useEffect(() => { const updateBreakpoint = () => { const width = window.innerWidth; if (width >= BREAKPOINTS.desktop.minWidth) { setBreakpoint("desktop"); } else if (width >= BREAKPOINTS.tablet.minWidth) { setBreakpoint("tablet"); } else { setBreakpoint("mobile"); } }; // 초기 실행 updateBreakpoint(); // 리사이즈 이벤트 리스너 등록 window.addEventListener("resize", updateBreakpoint); return () => window.removeEventListener("resize", updateBreakpoint); }, []); return breakpoint; } /** * 현재 브레이크포인트의 컬럼 수 반환 */ export function useGridColumns(): number { const breakpoint = useBreakpoint(); return BREAKPOINTS[breakpoint].columns; }