API Reference
createThemes
Typed factory for ThemeProvider and theme hooks.
Edit on GitHub
Last updated on
createThemes lets you define your themes once and get typed provider/hooks everywhere.
"use client";
import { createThemes } from "@wrksz/themes/client";
export const { ThemeProvider, useTheme, useThemeValue, useThemeEffect, ThemedImage } =
createThemes({
themes: ["light", "dark", "high-contrast"] as const,
defaultTheme: "system",
attribute: "class",
storage: "hybrid",
disableTransitionOnChange: true,
themeColor: { light: "#ffffff", dark: "#0f1115" },
});Why use it
- You define the theme tuple once, and type inference propagates to all consumers.
setThemeaccepts only valid values from your configured theme union.useThemeValuemaps are checked against your union (plus optionaldefault).- Provider defaults can still be overridden per usage.
Return value
createThemes(config) returns:
ThemeProvideruseThemeuseThemeValueuseThemeEffectThemedImage
Per-usage overrides
Factory defaults are just defaults. You can override them per mount:
import { ThemeProvider } from "@/app/theme";
export function AuthLayout({ children }: { children: React.ReactNode }) {
return <ThemeProvider defaultTheme="light">{children}</ThemeProvider>;
}Generic useTheme<T>() vs createThemes
- Use
createThemesfor shipped app code with one canonical theme configuration. - Use
useTheme<T>()for quick experiments and local prototypes.