export type PlaylistMode = 'cycle' | 'random'; const STORAGE_KEY = 'playlist-mode'; function isPlaylistMode(value: unknown): value is PlaylistMode { return value === 'cycle' || value === 'random'; } /** * Режим воспроизведения плейлиста (cycle/random). Состояние общее для тумблеров в * PlayerPlaylist и логики next в useNextVideo, переживает перезагрузку — хранится в * localStorage. * * Восстанавливаем в onMounted, а не в setup: на сервере localStorage нет, а правка * значения до гидрации разошлась бы с отрендеренной разметкой (--active на тумблере). */ export function usePlaylistMode() { const mode = useState('playlistMode', () => 'cycle'); onMounted(() => { const saved = localStorage.getItem(STORAGE_KEY); if (isPlaylistMode(saved)) mode.value = saved; }); function setMode(value: PlaylistMode): void { mode.value = value; if (import.meta.client) localStorage.setItem(STORAGE_KEY, value); } return { mode, setMode }; }