Dark mode
Learn about the different methods for applying dark mode to a Pigment application.
Set as default
To set dark mode as the default for your app, add defaultScheme="dark" to the <ColorSchemeProvider> wrapper component:
tsx// index.tsximport { ColorSchemeProvider } from "@kobalte/pigment";import { render } from "solid-js/web";import App from "./App";render(() => (<ColorSchemeProvider defaultScheme="dark"><App /></ColorSchemeProvider>),document.getElementById("root") as HTMLElement);
tsx// index.tsximport { ColorSchemeProvider } from "@kobalte/pigment";import { render } from "solid-js/web";import App from "./App";render(() => (<ColorSchemeProvider defaultScheme="dark"><App /></ColorSchemeProvider>),document.getElementById("root") as HTMLElement);
Usage with SolidStart
For a SolidStart application, you need to add it to the root.tsx file, and to prevent the UI from flickering, apply the InitColorSchemeScript before the main application script:
tsx// root.tsximport { InitColorSchemeScript, ColorSchemeProvider } from "@kobalte/pigment";import { Suspense } from "solid-js";import {Body,ErrorBoundary,FileRoutes,Head,Html,Meta,Routes,Scripts,Title,} from "solid-start";export default function Root() {return (<Html lang="en"><Head><Title>SolidStart - Bare</Title><Meta charset="utf-8" /><Meta name="viewport" content="width=device-width, initial-scale=1" /></Head><Body><InitColorSchemeScript defaultScheme="dark" /><ErrorBoundary><Suspense><ColorSchemeProvider defaultScheme="dark"><Routes><FileRoutes /></Routes></ColorSchemeProvider></Suspense></ErrorBoundary><Scripts /></Body></Html>);}
tsx// root.tsximport { InitColorSchemeScript, ColorSchemeProvider } from "@kobalte/pigment";import { Suspense } from "solid-js";import {Body,ErrorBoundary,FileRoutes,Head,Html,Meta,Routes,Scripts,Title,} from "solid-start";export default function Root() {return (<Html lang="en"><Head><Title>SolidStart - Bare</Title><Meta charset="utf-8" /><Meta name="viewport" content="width=device-width, initial-scale=1" /></Head><Body><InitColorSchemeScript defaultScheme="dark" /><ErrorBoundary><Suspense><ColorSchemeProvider defaultScheme="dark"><Routes><FileRoutes /></Routes></ColorSchemeProvider></Suspense></ErrorBoundary><Scripts /></Body></Html>);}
Changing color scheme
To manage color scheme in your application, Pigment exposes the useColorScheme primitive. It gives you an accessor to get the current color scheme and a function to toggle it.
In the example below, we're using a Button component that calls toggleColorScheme from the primitive to handle the toggling.
tsximport { Button, useColorScheme } from "@kobalte/pigment";function ColorSchemeToggle() {const { colorScheme, toggleColorScheme } = useColorScheme();return (<Button onClick={toggleColorScheme}>Turn {colorScheme() === "light" ? "dark" : "light"}</Button>);}
tsximport { Button, useColorScheme } from "@kobalte/pigment";function ColorSchemeToggle() {const { colorScheme, toggleColorScheme } = useColorScheme();return (<Button onClick={toggleColorScheme}>Turn {colorScheme() === "light" ? "dark" : "light"}</Button>);}
Usage with TailwindCSS
The Pigment preset for TailwindCSS ensure the correct selector is added to the Tailwind config in order to work with the dark: modifier.
tsx<div class="rounded p-4 bg-amber-400 text-sand-900 dark:bg-amber-800 dark:text-amber-300">This box's style will change based on the color scheme.</div>
tsx<div class="rounded p-4 bg-amber-400 text-sand-900 dark:bg-amber-800 dark:text-amber-300">This box's style will change based on the color scheme.</div>
Forcing dark mode
To force dark mode in specific area of your application use either Tailwind CSS .dark class or Pigment dark color scheme data attribute [data-pg-color-scheme='dark'].
tsxexport default function App() {return (<div data-pg-theme="custom" data-pg-color-scheme="dark">This div will use the "custom" theme in dark mode.<span data-pg-color-scheme="dark">This span will use the default theme in dark mode.</span></div>);}
tsxexport default function App() {return (<div data-pg-theme="custom" data-pg-color-scheme="dark">This div will use the "custom" theme in dark mode.<span data-pg-color-scheme="dark">This span will use the default theme in dark mode.</span></div>);}