Files
inkclip/webapp/src/lib/utils/media.svelte.ts
T
2025-04-07 19:43:09 -04:00

19 lines
521 B
TypeScript

import { onDestroy } from 'svelte'
export interface ReactiveMediaQuery {
readonly matches: boolean
}
export function createMediaQuery(query: string): ReactiveMediaQuery {
const queryList = matchMedia(query)
const queryState = $state({ matches: queryList.matches })
const updateQueryState = (e: MediaQueryListEvent) => (queryState.matches = e.matches)
queryList.addEventListener('change', updateQueryState)
onDestroy(() => queryList.removeEventListener('change', updateQueryState))
return queryState
}