diff --git a/packages/logos-docusaurus-theme/src/client/containers/ThemeProvider/ThemeProvider.tsx b/packages/logos-docusaurus-theme/src/client/containers/ThemeProvider/ThemeProvider.tsx new file mode 100644 index 0000000..5dfc41e --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/containers/ThemeProvider/ThemeProvider.tsx @@ -0,0 +1,18 @@ +import { ThemeProvider as LSDThemeProvider } from '@acid-info/lsd-react' +import { Global } from '@emotion/react' +import React from 'react' +import { useTheme } from '../../lib/themes' + +export const ThemeProvider: React.FC> = ({ + children, +}) => { + const theme = useTheme() + + return ( + + + + {children} + + ) +} diff --git a/packages/logos-docusaurus-theme/src/client/containers/ThemeProvider/index.ts b/packages/logos-docusaurus-theme/src/client/containers/ThemeProvider/index.ts new file mode 100644 index 0000000..4c611bf --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/containers/ThemeProvider/index.ts @@ -0,0 +1 @@ +export * from './ThemeProvider' diff --git a/packages/logos-docusaurus-theme/src/client/lib/themes.ts b/packages/logos-docusaurus-theme/src/client/lib/themes.ts index b288628..a262cb3 100644 --- a/packages/logos-docusaurus-theme/src/client/lib/themes.ts +++ b/packages/logos-docusaurus-theme/src/client/lib/themes.ts @@ -2,7 +2,12 @@ import { createTheme, CreateThemeProps, defaultThemes, + Theme, } from '@acid-info/lsd-react' +import { useActivePlugin } from '@docusaurus/plugin-content-docs/lib/client/index.js' +import { useColorMode } from '@docusaurus/theme-common' +import { css } from '@emotion/react' +import { useMemo } from 'react' const typography: CreateThemeProps['typography'] = { h1: { @@ -75,3 +80,34 @@ export const darkTheme = createTheme( }, defaultThemes.dark, ) + +const docThemes = { + light: lightTheme, + dark: darkTheme, +} + +const useThemeCssVars = (theme: Theme, colorMode: string) => + useMemo( + () => css` + [data-theme=${colorMode}] { + ${theme.cssVars} + } + `, + [theme], + ) + +export const useTheme = () => { + const colorMode = useColorMode() + const activePlugin = useActivePlugin() + + const themes = activePlugin ? docThemes : defaultThemes + + return { + dark: themes.dark, + light: themes.light, + current: themes[colorMode.colorMode], + colorMode: colorMode.colorMode, + lightCssVars: useThemeCssVars(themes.light, 'light'), + darkCssVars: useThemeCssVars(themes.dark, 'dark'), + } +} diff --git a/packages/logos-docusaurus-theme/src/client/theme/Root.tsx b/packages/logos-docusaurus-theme/src/client/theme/Root.tsx index 9a46743..4231b8f 100644 --- a/packages/logos-docusaurus-theme/src/client/theme/Root.tsx +++ b/packages/logos-docusaurus-theme/src/client/theme/Root.tsx @@ -1,79 +1,20 @@ -import { - defaultThemes, - Theme, - ThemeProvider as LSDThemeProvider, -} from '@acid-info/lsd-react' -import { useActivePlugin } from '@docusaurus/plugin-content-docs/lib/client/index.js' -import { - ColorModeProvider, - useColorMode, -} from '@docusaurus/theme-common/internal' -import { css, Global } from '@emotion/react' -import React, { useMemo } from 'react' -import { darkTheme, lightTheme } from '../lib/themes' +import { ColorModeProvider } from '@docusaurus/theme-common/internal' +import React from 'react' +import { ThemeProvider } from '../containers/ThemeProvider' import { useDocThemeOptions } from '../lib/useThemeOptions' import styles from './style.module.css' -const docThemes = { - light: lightTheme, - dark: darkTheme, -} - -const useTheme = () => { - const colorMode = useColorMode() - const activePlugin = useActivePlugin() - - const themes = activePlugin ? docThemes : defaultThemes - - return { - dark: themes.dark, - light: themes.light, - current: themes[colorMode.colorMode], - colorMode: colorMode.colorMode, - } -} - -const useThemeCssVars = (theme: Theme, light: boolean = false) => - useMemo( - () => css` - [data-theme=${light ? 'light' : 'dark'}] { - ${theme.cssVars} - } - `, - [theme], - ) - -const ThemeProvider: React.FC> = ({ children }) => { - const theme = useTheme() - const darkCssVars = useThemeCssVars(theme.dark, false) - const lightCssVars = useThemeCssVars(theme.light, true) - - return ( - - {children} - - - - ) -} - -const Content = ({ children }) => { +export default function Root({ children }) { const options = useDocThemeOptions() const hideDocSidebar = options?.sidebar?.hide - return ( - -
- {children} -
-
- ) -} - -export default function Root({ children }) { return ( - {children} + +
+ {children} +
+
) }