import { useEffect, useState } from 'react' /** Совпадает с мобильным брейкпоинтом комнаты (`room.css`, `max-width: 600px`). */ const COMPACT_VIEWPORT_QUERY = '(max-width: 600px)' /** * Живое отслеживание мобильной ширины — та же схема, что системная тема в * `useTheme.ts` (matchMedia + change-листенер). * * Нужен там, где мобильный вариант — это ДРУГАЯ разметка, а не другие стили: * шторка вместо модалки (`DeviceSettingsDialog`) и условный рендеринг кнопок * тулбара (`RoomToolbar`). Прятать элементы новым CSS-правилом поверх * медиазапроса в `room.css` намеренно не стали — там уже была битва * специфичности (см. комментарий в конце `room.css`). */ export function useIsCompactViewport(): boolean { const [isCompact, setIsCompact] = useState(() => window.matchMedia(COMPACT_VIEWPORT_QUERY).matches) useEffect(() => { const media = window.matchMedia(COMPACT_VIEWPORT_QUERY) const handleChange = (event: MediaQueryListEvent) => setIsCompact(event.matches) media.addEventListener('change', handleChange) return () => media.removeEventListener('change', handleChange) }, []) return isCompact }