@@ -16,6 +16,15 @@ const STORAGE_KEYS = {
1616
1717const THEME_STYLE_ID = "oc-theme"
1818
19+ function normalize ( id : string | null | undefined ) {
20+ return id === "oc-1" ? "oc-2" : id
21+ }
22+
23+ function clear ( ) {
24+ localStorage . removeItem ( STORAGE_KEYS . THEME_CSS_LIGHT )
25+ localStorage . removeItem ( STORAGE_KEYS . THEME_CSS_DARK )
26+ }
27+
1928function ensureThemeStyleElement ( ) : HTMLStyleElement {
2029 const existing = document . getElementById ( THEME_STYLE_ID ) as HTMLStyleElement | null
2130 if ( existing ) return existing
@@ -71,7 +80,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
7180 init : ( props : { defaultTheme ?: string } ) => {
7281 const [ store , setStore ] = createStore ( {
7382 themes : DEFAULT_THEMES as Record < string , DesktopTheme > ,
74- themeId : props . defaultTheme ?? "oc-2" ,
83+ themeId : normalize ( props . defaultTheme ) ?? "oc-2" ,
7584 colorScheme : "system" as ColorScheme ,
7685 mode : getSystemMode ( ) ,
7786 previewThemeId : null as string | null ,
@@ -89,9 +98,14 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
8998 onCleanup ( ( ) => mediaQuery . removeEventListener ( "change" , handler ) )
9099
91100 const savedTheme = localStorage . getItem ( STORAGE_KEYS . THEME_ID )
101+ const themeId = normalize ( savedTheme )
92102 const savedScheme = localStorage . getItem ( STORAGE_KEYS . COLOR_SCHEME ) as ColorScheme | null
93- if ( savedTheme && store . themes [ savedTheme ] ) {
94- setStore ( "themeId" , savedTheme )
103+ if ( themeId && store . themes [ themeId ] ) {
104+ setStore ( "themeId" , themeId )
105+ }
106+ if ( savedTheme && themeId && savedTheme !== themeId ) {
107+ localStorage . setItem ( STORAGE_KEYS . THEME_ID , themeId )
108+ clear ( )
95109 }
96110 if ( savedScheme ) {
97111 setStore ( "colorScheme" , savedScheme )
@@ -113,14 +127,23 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
113127 } )
114128
115129 const setTheme = ( id : string ) => {
116- const theme = store . themes [ id ]
130+ const next = normalize ( id )
131+ if ( ! next ) {
132+ console . warn ( `Theme "${ id } " not found` )
133+ return
134+ }
135+ const theme = store . themes [ next ]
117136 if ( ! theme ) {
118137 console . warn ( `Theme "${ id } " not found` )
119138 return
120139 }
121- setStore ( "themeId" , id )
122- localStorage . setItem ( STORAGE_KEYS . THEME_ID , id )
123- cacheThemeVariants ( theme , id )
140+ setStore ( "themeId" , next )
141+ localStorage . setItem ( STORAGE_KEYS . THEME_ID , next )
142+ if ( next === "oc-2" ) {
143+ clear ( )
144+ return
145+ }
146+ cacheThemeVariants ( theme , next )
124147 }
125148
126149 const setColorScheme = ( scheme : ColorScheme ) => {
@@ -138,15 +161,17 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
138161 setColorScheme,
139162 registerTheme : ( theme : DesktopTheme ) => setStore ( "themes" , theme . id , theme ) ,
140163 previewTheme : ( id : string ) => {
141- const theme = store . themes [ id ]
164+ const next = normalize ( id )
165+ if ( ! next ) return
166+ const theme = store . themes [ next ]
142167 if ( ! theme ) return
143- setStore ( "previewThemeId" , id )
168+ setStore ( "previewThemeId" , next )
144169 const previewMode = store . previewScheme
145170 ? store . previewScheme === "system"
146171 ? getSystemMode ( )
147172 : store . previewScheme
148173 : store . mode
149- applyThemeCss ( theme , id , previewMode )
174+ applyThemeCss ( theme , next , previewMode )
150175 } ,
151176 previewColorScheme : ( scheme : ColorScheme ) => {
152177 setStore ( "previewScheme" , scheme )
0 commit comments