import React from 'react'; import LeafyGreenProvider, { useDarkMode as useLeafyGreenDarkMode, } from '@leafygreen-ui/leafygreen-provider'; enum Theme { Light = 'Light', Dark = 'Dark', } export function useDarkMode(localDarkMode?: boolean): boolean | undefined { const darkMode = useLeafyGreenDarkMode(localDarkMode); return darkMode.darkMode; } interface WithDarkModeProps { darkMode?: boolean; } // @deprecated Only left for browser-shell compatibility export const ThemeProvider = ({ children, theme, }: { children: React.ReactNode; theme: { theme: Theme; enabled: boolean; }; }): React.ReactElement => { return theme.enabled ? ( {children} ) : ( <>{children} ); }; // High Order Component(HOC) used to inject Compass' theme pulled from the available // theme on the React context from LeafyGreen's provider into the wrapped component. const withDarkMode = function < ComponentProps extends WithDarkModeProps = WithDarkModeProps >( WrappedComponent: React.ComponentType ): React.ComponentType { const ComponentWithDarkMode = ( props: ComponentProps, ref: React.ForwardedRef< React.ComponentType > ) => { const darkMode = useDarkMode(); return ( ); }; const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; ComponentWithDarkMode.displayName = `WithDarkMode(${displayName})`; return React.forwardRef(ComponentWithDarkMode) as typeof WrappedComponent; }; export { Theme, withDarkMode };