import '../styles/globals.css' import { GeistProvider, CssBaseline } from '@geist-ui/core' import { useEffect, useState } from 'react' import type { AppProps as NextAppProps } from "next/app"; import useSharedState from '../lib/hooks/use-shared-state'; export type ThemeProps = { theme: "light" | "dark" | string, changeTheme: () => void } type AppProps

= { pageProps: P; } & Omit, "pageProps">; export type DriftProps = ThemeProps function MyApp({ Component, pageProps }: AppProps) { const [themeType, setThemeType] = useSharedState('theme', 'light') useEffect(() => { if (typeof window === 'undefined' || !window.localStorage) return const storedTheme = window.localStorage.getItem('drift-theme') if (storedTheme) setThemeType(storedTheme) // TODO: useReducer? }, [setThemeType, themeType]) const changeTheme = () => { const newTheme = themeType === 'dark' ? 'light' : 'dark' localStorage.setItem('drift-theme', newTheme) setThemeType(last => (last === 'dark' ? 'light' : 'dark')) } return ( ) } export default MyApp