@@ -20,7 +20,14 @@ const PANEL_ID = `${ADDON_ID}/panel`;
20
20
21
21
const Readme = props => {
22
22
const [ markdown , setMarkdown ] = useState ( ) ;
23
+ const [ useDarkMode , setUseDarkMode ] = useState ( ) ;
24
+
23
25
useEffect ( ( ) => {
26
+ setUseDarkMode ( window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) ;
27
+ window
28
+ . matchMedia ( '(prefers-color-scheme: dark)' )
29
+ . addEventListener ( 'change' , updateUseDarkMode ) ;
30
+
24
31
const api = props . api ;
25
32
api . on ( STORY_RENDERED , ( ) => {
26
33
setMarkdown ( '' ) ;
@@ -49,10 +56,16 @@ const Readme = props => {
49
56
}
50
57
}
51
58
} ) ;
59
+
60
+ return function cleanup ( ) {
61
+ window
62
+ . matchMedia ( '(prefers-color-scheme: dark)' )
63
+ . removeEventListener ( 'change' , updateUseDarkMode ) ;
64
+ } ;
52
65
} , [ ] ) ;
53
66
54
- const shouldUseDarkTheme = ( ) => {
55
- return window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
67
+ const updateUseDarkMode = event => {
68
+ setUseDarkMode ( event . matches ) ;
56
69
} ;
57
70
58
71
const renderReadme = ( ) => (
@@ -67,7 +80,7 @@ const Readme = props => {
67
80
className = "storybook-readme-syntax-highlighter"
68
81
children = { String ( children ) . replace ( / \n $ / , '' ) }
69
82
style = { {
70
- ...( shouldUseDarkTheme ( ) ? vscDarkPlus : vs ) ,
83
+ ...( useDarkMode ? vscDarkPlus : vs ) ,
71
84
'pre[class*="language-"]' : { display : 'none' } ,
72
85
} }
73
86
language = { match [ 1 ] }
0 commit comments