@@ -10,13 +10,16 @@ import Yoga.Prelude.View
11import Data.Array as Array
11import Data.Array as Array
12import Fahrtwind as F
12import Fahrtwind as F
13+import MediaQuery (matchMedia, matches)
14+import MediaQuery.Types (MediaQueryList)
15+import MediaQuery.Types as MediaQueryList
13import React.Basic.DOM as R
16import React.Basic.DOM as R
14import React.Basic.Emotion as E
17import React.Basic.Emotion as E
15import React.Basic.Hooks as React
18import React.Basic.Hooks as React
16import Web.Event.EventTarget (addEventListener, eventListener, removeEventListener)
19import Web.Event.EventTarget (addEventListener, eventListener, removeEventListener)
17import Web.HTML (window)
20import Web.HTML (window)
18import Web.HTML.Event.EventTypes as Event
21import Web.HTML.Event.EventTypes as Event
19−import Yoga.Block.Container.Style (DarkOrLightMode(..), matchMedia, matches, setDarkOrLightMode)
22+import Yoga.Block.Container.Style (DarkOrLightMode(..), setDarkOrLightMode)
20import Yoga.Block.Container.Style as Styles
23import Yoga.Block.Container.Style as Styles
22type PropsF f =
25type PropsF f =
@@ -32,10 +35,10 @@ type Props =
32component ∷ ∀ p q. Union p q Props => ReactComponent { | p }
35component ∷ ∀ p q. Union p q Props => ReactComponent { | p }
33component = rawComponent
36component = rawComponent
35−mkPrefersDark ∷ Effect Styles.MediaQueryList
38+mkPrefersDark ∷ Effect MediaQueryList
36mkPrefersDark = matchMedia "(prefers-color-scheme: dark)" =<< window
39mkPrefersDark = matchMedia "(prefers-color-scheme: dark)" =<< window
38−mkPrefersLight ∷ Effect Styles.MediaQueryList
41+mkPrefersLight ∷ Effect MediaQueryList
39mkPrefersLight = matchMedia "(prefers-color-scheme: light)" =<< window
42mkPrefersLight = matchMedia "(prefers-color-scheme: light)" =<< window
41rawComponent ∷ ∀ p. ReactComponent { | p }
44rawComponent ∷ ∀ p. ReactComponent { | p }
@@ -64,18 +67,18 @@ rawComponent =
64 whenM (matches prefersDarkMediaQuery) do
67 whenM (matches prefersDarkMediaQuery) do
65 setSystemThemeVariant (Just DarkMode)
68 setSystemThemeVariant (Just DarkMode)
66 notifySystemThemeChanged DarkMode
69 notifySystemThemeChanged DarkMode
67− addEventListener Event.change darkModeListener true (Styles.toEventTarget prefersDarkMediaQuery)
70+ addEventListener Event.change darkModeListener true (MediaQueryList.toEventTarget prefersDarkMediaQuery)
68 -- Light Mode listener
71 -- Light Mode listener
69 lightModeListener <-
72 lightModeListener <-
70 eventListener \_ -> do
73 eventListener \_ -> do
71 whenM (matches prefersLightMediaQuery) do
74 whenM (matches prefersLightMediaQuery) do
72 setSystemThemeVariant (Just LightMode)
75 setSystemThemeVariant (Just LightMode)
73 notifySystemThemeChanged LightMode
76 notifySystemThemeChanged LightMode
74− addEventListener Event.change darkModeListener true (Styles.toEventTarget prefersDarkMediaQuery)
77+ addEventListener Event.change darkModeListener true (MediaQueryList.toEventTarget prefersDarkMediaQuery)
75− addEventListener Event.change lightModeListener true (Styles.toEventTarget prefersLightMediaQuery)
78+ addEventListener Event.change lightModeListener true (MediaQueryList.toEventTarget prefersLightMediaQuery)
77− removeEventListener Event.change darkModeListener true (Styles.toEventTarget prefersDarkMediaQuery)
80+ removeEventListener Event.change darkModeListener true (MediaQueryList.toEventTarget prefersDarkMediaQuery)
78− removeEventListener Event.change lightModeListener true (Styles.toEventTarget prefersLightMediaQuery)
81+ removeEventListener Event.change lightModeListener true (MediaQueryList.toEventTarget prefersLightMediaQuery)
80 $ fragment
83 $ fragment
81 [ R.div' </ { ref }
84 [ R.div' </ { ref }