@@ -55,6 +55,37 @@ export const VisualSettingsProvider = ({ children }) => {
5555 const [ isAppFullscreen , setIsAppFullscreen ] = usePersistentState ( 'is-app-fullscreen' , false ) ;
5656 const [ fezcodexTheme , setFezcodexTheme ] = usePersistentState ( 'fezcodex-theme' , 'brutalist' ) ; // 'brutalist' or 'luxe'
5757
58+ // URL Parameter Observer - Consumes ?fezTheme=... and ?fezBlogMode=...
59+ useEffect ( ( ) => {
60+ const params = new URLSearchParams ( window . location . search ) ;
61+ const themeParam = params . get ( 'fezTheme' ) ;
62+ const blogModeParam = params . get ( 'fezBlogMode' ) ;
63+ let changed = false ;
64+
65+ if ( themeParam && [ 'brutalist' , 'luxe' ] . includes ( themeParam ) ) {
66+ setFezcodexTheme ( themeParam ) ;
67+ changed = true ;
68+ }
69+
70+ if ( blogModeParam && [
71+ 'brutalist' , 'editorial' , 'dossier' , 'terminal' ,
72+ 'dokument' , 'terminal-green' , 'old' , 'luxe'
73+ ] . includes ( blogModeParam ) ) {
74+ setBlogPostViewMode ( blogModeParam ) ;
75+ changed = true ;
76+ }
77+
78+ if ( changed ) {
79+ // Clean up the URL
80+ const newParams = new URLSearchParams ( window . location . search ) ;
81+ newParams . delete ( 'fezTheme' ) ;
82+ newParams . delete ( 'fezBlogMode' ) ;
83+ const newSearch = newParams . toString ( ) ;
84+ const newUrl = window . location . pathname + ( newSearch ? `?${ newSearch } ` : '' ) + window . location . hash ;
85+ window . history . replaceState ( { } , '' , newUrl ) ;
86+ }
87+ } , [ setFezcodexTheme , setBlogPostViewMode ] ) ;
88+
5889 const [ isSidebarOpen , setIsSidebarOpen ] = React . useState ( window . innerWidth > 768 ) ;
5990 useEffect ( ( ) => {
6091 const handleResize = ( ) => {
0 commit comments