File tree Expand file tree Collapse file tree 2 files changed +40
-15
lines changed
Expand file tree Collapse file tree 2 files changed +40
-15
lines changed Original file line number Diff line number Diff line change 1- import watchMedia from 'svelte-media ' ;
1+ import { type Readable , readable } from 'svelte/store ' ;
22
3- const mediaqueries = {
3+ export type Queries = {
4+ [ key : string ] : boolean | string ;
5+ } ;
6+
7+ type MediaObject = {
8+ [ key : string ] : MediaQueryList
9+ }
10+
11+ const queries : Queries = {
412 xs : '(max-width: 480px)' ,
513 sm : '(max-width: 600px)' ,
614 md : '(max-width: 840px)' ,
@@ -15,4 +23,29 @@ const mediaqueries = {
1523 touch : '(hover: none)' ,
1624} ;
1725
18- export const media = watchMedia ( mediaqueries ) ;
26+ export const media : Readable < Queries > = mediaStore ( queries )
27+
28+ function mediaStore ( queries : Queries = { } ) {
29+ return readable ( { } , ( set ) => {
30+ let mqs = Object . entries ( queries ) . reduce ( ( mqs : MediaObject , [ key , query ] ) => {
31+ mqs [ key ] = window . matchMedia ( query as string ) ;
32+ mqs [ key ] . onchange = ( mq ) => {
33+ mqs [ key ] = mq ;
34+ update ( ) ;
35+ } ;
36+ return mqs as MediaObject ;
37+ } , { } ) ;
38+
39+ function update ( ) {
40+ const matches : Queries = Object . entries ( mqs ) . reduce ( ( matches : Queries , [ key , mq ] ) => {
41+ matches [ key ] = mq . matches ;
42+ return matches ;
43+ } , { } ) ;
44+ set ( matches ) ;
45+ }
46+
47+ update ( ) ;
48+
49+ return ( ) => mqs = { } ;
50+ } ) ;
51+ }
Original file line number Diff line number Diff line change 1- import { writable } from 'svelte/store' ;
2-
3- const darkMedia = window . matchMedia ( '(prefers-color-scheme: dark)' )
1+ import { writable , get } from 'svelte/store' ;
2+ import { media } from '@/stores/media' ;
43
54export const darkTheme = writable (
6- JSON . parse ( sessionStorage . getItem ( 'optimade_darkTheme' ) as string ) ?? darkMedia . matches
5+ JSON . parse ( sessionStorage . getItem ( 'optimade_darkTheme' ) as string ) ?? get ( media ) . dark
76) ;
8- darkTheme . subscribe ( ( val ) => sessionStorage . setItem ( 'optimade_darkTheme' , val ) ) ;
9-
10-
11- function handleMediaChange ( event : { matches : boolean ; } ) {
12- darkTheme . set ( event . matches )
13- }
14- // handleMediaChange(darkMedia)
15- darkMedia . addEventListener ( 'change' , handleMediaChange ) ;
7+ darkTheme . subscribe ( ( val ) => sessionStorage . setItem ( 'optimade_darkTheme' , val ) ) ;
You canβt perform that action at this time.
0 commit comments