@@ -5,13 +5,12 @@ import { BraidProvider, Card, PageBlock } from 'braid-design-system';
5
5
import docs from 'braid-design-system/themes/docs' ;
6
6
import seekJobs from 'braid-design-system/themes/seekJobs' ;
7
7
import wireframe from 'braid-design-system/themes/wireframe' ;
8
- import { themes } from 'prism-react-renderer' ;
9
- import React from 'react' ;
10
8
import { Helmet , HelmetProvider } from 'react-helmet-async' ;
11
9
import { BrowserRouter } from 'react-router-dom' ;
12
10
13
11
import { CodeThemeProvider } from '../src/components/CodeThemeProvider' ;
14
12
import { ScoobieLink } from '../src/components/ScoobieLink' ;
13
+ import { codeThemes } from '../src/private/codeThemes' ;
15
14
import { robotoHref , robotoMonoHref } from '../typography' ;
16
15
17
16
const THEMES = { docs, seekJobs, wireframe } ;
@@ -20,13 +19,22 @@ export type BraidThemeName = 'docs' | 'seekJobs' | 'wireframe';
20
19
21
20
export default {
22
21
globalTypes : {
22
+ colorMode : {
23
+ description : 'Color mode to use' ,
24
+ defaultValue : 'lightMode' ,
25
+ toolbar : {
26
+ title : 'Color mode' ,
27
+ icon : 'contrast' ,
28
+ items : [ 'darkMode' , 'lightMode' ] ,
29
+ } ,
30
+ } ,
23
31
codeTheme : {
24
32
description : 'Code theme to use' ,
25
33
defaultValue : 'github' ,
26
34
toolbar : {
27
35
title : 'Code theme' ,
28
36
icon : 'contrast' ,
29
- items : Object . keys ( themes ) ,
37
+ items : Object . keys ( codeThemes ) ,
30
38
} ,
31
39
} ,
32
40
theme : {
@@ -40,27 +48,37 @@ export default {
40
48
} ,
41
49
} ,
42
50
decorators : [
43
- ( Story , { globals } ) => (
44
- < BraidProvider
45
- theme = { THEMES [ globals . theme as BraidThemeName ] }
46
- linkComponent = { ScoobieLink }
47
- >
48
- < CodeThemeProvider theme = { globals . codeTheme } >
49
- < BrowserRouter >
50
- < HelmetProvider >
51
- < Helmet >
52
- < link href = { robotoHref } rel = "stylesheet" />
53
- < link href = { robotoMonoHref } rel = "stylesheet" />
54
- </ Helmet >
55
- < PageBlock >
56
- < Card >
57
- < Story />
58
- </ Card >
59
- </ PageBlock >
60
- </ HelmetProvider >
61
- </ BrowserRouter >
62
- </ CodeThemeProvider >
63
- </ BraidProvider >
64
- ) ,
51
+ ( Story , { globals } ) => {
52
+ const DARK_MODE_CLASS = 'sprinkles_darkMode__1t46ksg10' ;
53
+
54
+ if ( globals . colorMode === 'darkMode' ) {
55
+ document . documentElement . classList . add ( DARK_MODE_CLASS ) ;
56
+ } else {
57
+ document . documentElement . classList . remove ( DARK_MODE_CLASS ) ;
58
+ }
59
+
60
+ return (
61
+ < BraidProvider
62
+ theme = { THEMES [ globals . theme as BraidThemeName ] }
63
+ linkComponent = { ScoobieLink }
64
+ >
65
+ < CodeThemeProvider theme = { globals . codeTheme } >
66
+ < BrowserRouter >
67
+ < HelmetProvider >
68
+ < Helmet >
69
+ < link href = { robotoHref } rel = "stylesheet" />
70
+ < link href = { robotoMonoHref } rel = "stylesheet" />
71
+ </ Helmet >
72
+ < PageBlock >
73
+ < Card >
74
+ < Story />
75
+ </ Card >
76
+ </ PageBlock >
77
+ </ HelmetProvider >
78
+ </ BrowserRouter >
79
+ </ CodeThemeProvider >
80
+ </ BraidProvider >
81
+ ) ;
82
+ } ,
65
83
] ,
66
84
} satisfies Preview ;
0 commit comments