wash-cli 0.21.0

wasmcloud Shell (wash) CLI tool
import {PropsWithChildren, ReactElement, createContext, useEffect} from 'react';
import {useLocalStorage} from 'usehooks-ts';

enum DarkModeOption {
  Dark = 'dark',
  Light = 'light',
  System = 'system',
}

export interface SettingsContextValue {
  darkMode: DarkModeOption;
  setDarkMode: (darkMode: DarkModeOption) => void;
}

export const SettingsContext = createContext<SettingsContextValue>({
  darkMode: DarkModeOption.System,
  setDarkMode: () => null,
});

export function SettingsProvider({children}: PropsWithChildren): ReactElement {
  const [darkMode, setDarkMode] = useLocalStorage('theme', DarkModeOption.System);

  // sync state with localStorage
  useEffect(() => {
    if (
      darkMode === DarkModeOption.Dark ||
      (darkMode === DarkModeOption.System &&
        window.matchMedia('(prefers-color-scheme: dark)').matches)
    ) {
      document.documentElement.classList.add('dark');
    } else {
      document.documentElement.classList.remove('dark');
    }
  }, [darkMode]);

  return (
    <SettingsContext.Provider value={{darkMode, setDarkMode}}>{children}</SettingsContext.Provider>
  );
}