Foundation and layout
ThemeProvider
Supplies reactive light, dark, and system theme state.
Live example
Theme contextOne preference, resolved before paint.
Theme contextOne preference, resolved before paint.
Theme context One preference, resolved before paint.
Usage
Each example includes the complete adapter-specific parameter reference. Copy it as a starting point, then remove options your use case does not need.
React
import { ThemeProvider } from "@cofob/design-system-react";
/**
* Complete ThemeProvider parameter reference.
* @param preference
* type: "light" | "dark" | "system"
* default: context / bindable
* example: "dark"
* @param defaultPreference
* type: "light" | "dark" | "system"
* default: "system"
* example: "system"
* @param onPreferenceChange
* type: (preference: ThemePreference) => void
* default: —
* example: {handlePreferenceChange}
* @param storageKey
* type: string
* default: "cf-theme"
* example: "cf-theme"
* @param children
* type: ReactNode | Svelte Snippet | child HTML
* default: —
* example: children / snippet / child HTML
*/
export function ThemeProviderExample() {
return (
<ThemeProvider><App /></ThemeProvider>
);
}Svelte
<script lang="ts">
import { ThemeProvider } from "@cofob/design-system-svelte";
// Complete ThemeProvider parameter reference.
// preference
// type: "light" | "dark" | "system"
// default: context / bindable
// example: "dark"
// defaultPreference
// type: "light" | "dark" | "system"
// default: "system"
// example: "system"
// onPreferenceChange
// type: (preference: ThemePreference) => void
// default: —
// example: {handlePreferenceChange}
// storageKey
// type: string
// default: "cf-theme"
// example: "cf-theme"
// children
// type: ReactNode | Svelte Snippet | child HTML
// default: —
// example: children / snippet / child HTML
</script>
<ThemeProvider>{@render children()}</ThemeProvider>HTML
<!--
Complete ThemeProvider parameter reference.
preference
type: "light" | "dark" | "system"
default: context / bindable
example: "dark"
defaultPreference
type: "light" | "dark" | "system"
default: "system"
example: "system"
onPreferenceChange
type: (preference: ThemePreference) => void
default: —
example: {handlePreferenceChange}
storageKey
type: string
default: "cf-theme"
example: "cf-theme"
children
type: ReactNode | Svelte Snippet | child HTML
default: —
example: children / snippet / child HTML
-->
<html data-theme="dark" data-theme-preference="dark">…</html>
<script type="module">
import { initDesignSystem } from "@cofob/design-system-css";
const designSystem = initDesignSystem(document);
window.addEventListener("pagehide", () => designSystem.destroy(), { once: true });
</script>Parameters
Adapter differences are explicit. Native element attributes are forwarded in React and Svelte and can be written directly in HTML.
| Parameter | Type | Default | Adapters | Example | Description |
|---|---|---|---|---|---|
preference | "light" | "dark" | "system" | context / bindable | React · Svelte · HTML | "dark" | Controlled theme preference. |
defaultPreference | "light" | "dark" | "system" | "system" | React · Svelte · HTML | "system" | Initial preference for uncontrolled usage. |
onPreferenceChange | (preference: ThemePreference) => void | — | React · Svelte · HTML | {handlePreferenceChange} | Runs after the user selects a new theme preference. |
storageKey | string | "cf-theme" | React · Svelte · HTML | "cf-theme" | Browser storage key shared by ThemeScript and ThemeProvider. |
children | ReactNode | Svelte Snippet | child HTML | — | React · Svelte · HTML | children / snippet / child HTML | Idiomatic adapter composition content. |