mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-13 16:16:46 +08:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import type { FC, PropsWithChildren, ReactNode } from 'react';
|
|
// eslint-disable-next-line no-restricted-imports
|
|
import {
|
|
createTheme,
|
|
ThemeProvider as MuiThemeProvider,
|
|
useTheme as muiUseTheme,
|
|
Theme as MuiTheme,
|
|
} from '@mui/material/styles';
|
|
import type { ThemeOptions as AffineThemeOptions } from './theme';
|
|
import { Theme } from './theme';
|
|
|
|
declare module '@mui/material/styles' {
|
|
interface Theme {
|
|
affine: AffineThemeOptions;
|
|
}
|
|
// allow configuration using `createTheme`
|
|
interface ThemeOptions {
|
|
affine: AffineThemeOptions;
|
|
}
|
|
}
|
|
|
|
const theme = createTheme({
|
|
affine: Theme,
|
|
});
|
|
|
|
export const ThemeProvider = ({ children }: { children?: ReactNode }) => {
|
|
return <MuiThemeProvider theme={theme}>{children}</MuiThemeProvider>;
|
|
};
|
|
|
|
export const useTheme = () => muiUseTheme();
|
|
|
|
export const withTheme = <T,>(
|
|
Component: FC<T & { theme: MuiTheme }>
|
|
): FC<T> => {
|
|
return props => {
|
|
const theme = useTheme();
|
|
return <Component {...props} theme={theme} />;
|
|
};
|
|
};
|