Skip to content

Dark Mode

ThemaKit supports dark mode, allowing you to create a visually appealing experience for users in low-light environments.

Enabling Dark Mode

You can enable dark mode by creating a custom theme with a dark color palette.

import { createTheme, ThemeProvider } from '@themakit/theme';

const darkTheme = createTheme({
  palette: {
    background: '#121212',
    text: '#ffffff',
    primary: '#bb86fc',
    accent: '#03dac6',
  },
  components: {
    Button: {
      backgroundColor: '#bb86fc',
      color: '#ffffff',
      hoverBackgroundColor: '#3700b3',
    },
  },
});

const App = () => (
  <ThemeProvider theme={darkTheme}>
    <h1>Dark Mode Example</h1>
  </ThemeProvider>
);

Switching Between Light and Dark Mode

You can dynamically switch between light and dark themes based on user preferences or a toggle.

import React, { useState } from 'react';
import { createTheme, ThemeProvider } from '@themakit/theme';

const lightTheme = createTheme({
  palette: {
    background: '#ffffff',
    text: '#000000',
    primary: '#4caf50',
    accent: '#ff5722',
  },
});

const darkTheme = createTheme({
  palette: {
    background: '#121212',
    text: '#ffffff',
    primary: '#bb86fc',
    accent: '#03dac6',
  },
});

const App = () => {
  const [isDarkMode, setIsDarkMode] = useState(false);

  return (
    <ThemeProvider theme={isDarkMode ? darkTheme : lightTheme}>
      <button onClick={() => setIsDarkMode(!isDarkMode)}>
        Toggle Dark Mode
      </button>
      <h1>{isDarkMode ? 'Dark Mode' : 'Light Mode'}</h1>
    </ThemeProvider>
  );
};

Using System Preferences

You can detect the user's system preference for dark mode using the window.matchMedia API.

import React, { useEffect, useState } from 'react';
import { createTheme, ThemeProvider } from '@themakit/theme';

const lightTheme = createTheme({
  palette: {
    background: '#ffffff',
    text: '#000000',
    primary: '#4caf50',
    accent: '#ff5722',
  },
});

const darkTheme = createTheme({
  palette: {
    background: '#121212',
    text: '#ffffff',
    primary: '#bb86fc',
    accent: '#03dac6',
  },
});

const App = () => {
  const [isDarkMode, setIsDarkMode] = useState(
    window.matchMedia('(prefers-color-scheme: dark)').matches
  );

  useEffect(() => {
    const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
    const handleChange = () => setIsDarkMode(mediaQuery.matches);
    mediaQuery.addEventListener('change', handleChange);
    return () => mediaQuery.removeEventListener('change', handleChange);
  }, []);

  return (
    <ThemeProvider theme={isDarkMode ? darkTheme : lightTheme}>
      <h1>{isDarkMode ? 'Dark Mode' : 'Light Mode'}</h1>
    </ThemeProvider>
  );
};

Accessibility

  • Ensure sufficient contrast between text and background colors in dark mode.
  • Test your application in both light and dark modes to ensure a consistent user experience.

Next Steps

  • Learn more about Custom Themes to further customize your dark mode.
  • Explore the Theme API for advanced theming options.