// stores/breakpoint.ts import { readable, type Readable } from 'svelte/store'; import { breakpoints } from '../../theme'; type Breakpoint = keyof typeof breakpoints; // Store that tracks if a specific breakpoint matches export function create_breakpoint_store(breakpoint: Breakpoint): Readable { return readable(false, (set) => { const width = breakpoints[breakpoint]; const mediaQuery = window.matchMedia(`(min-width: ${width})`); // Set initial value set(mediaQuery.matches); // Update on change const handler = (e: MediaQueryListEvent) => set(e.matches); mediaQuery.addEventListener('change', handler); // Cleanup return () => mediaQuery.removeEventListener('change', handler); }); } // Create stores for each breakpoint export const screenIsSmUp: Readable = create_breakpoint_store('sm'); export const screenIsMdUp: Readable = create_breakpoint_store('md'); export const screenIsLgUp: Readable = create_breakpoint_store('lg'); export const screenIsXlUp: Readable = create_breakpoint_store('xl');