Files
brave-core/components/common/BraveCoreThemeProvider.tsx
Simon Hong f064098d43 Cleanup deprecated brave theme apis (#32089)
Issue: brave/brave-browser#40863

This is the effort to reduce the size of #31939
and only removes already deprecated codes that refers brave dark theme api.
2025-10-30 09:24:51 +09:00

50 lines
1.6 KiB
TypeScript

// Copyright (c) 2019 The Brave Authors. All rights reserved.
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// you can obtain one at https://mozilla.org/MPL/2.0/.
import * as React from 'react'
import { ThemeProvider } from 'styled-components'
import DefaultTheme from 'brave-ui/theme/brave-default'
import DefaultDarkTheme from 'brave-ui/theme/brave-dark'
import IBraveTheme from 'brave-ui/theme/theme-interface'
export type Props = {
dark?: IBraveTheme
light?: IBraveTheme
}
const darkModeMediaMatcher = window.matchMedia('(prefers-color-scheme: dark)')
export default function LightDarkThemeProvider (props: React.PropsWithChildren<Props>) {
const [isDarkMode, setIsDarkMode] = React.useState(darkModeMediaMatcher.matches)
React.useEffect(() => {
const handleDarkModeChange = (e: MediaQueryListEvent) => {
setIsDarkMode(e.matches)
}
const onVisibilityChange = () => {
if (document.visibilityState === 'visible') {
setIsDarkMode(darkModeMediaMatcher.matches)
}
}
darkModeMediaMatcher.addEventListener('change', handleDarkModeChange)
document.addEventListener('visibilitychange', onVisibilityChange)
return () => {
darkModeMediaMatcher.removeEventListener('change', handleDarkModeChange)
document.removeEventListener('visibilitychange', onVisibilityChange)
}
}, [])
const selectedTheme = isDarkMode
? props.dark || DefaultDarkTheme
: props.light || DefaultTheme
return (
<ThemeProvider theme={selectedTheme}>
{React.Children.only(props.children)}
</ThemeProvider>
)
}