Out of the box, Bifrost will apply light or dark mode colors corresponding to
current OS color mode by using the prefers-color-scheme media query.
For most apps this should be sufficient but if your app requires a manual color
mode picker for some reason, you can apply .bf-darkmode or .bf-lightmode on
<html>.
The following example uses
use-local-storage-state
npm package to persist state in localStorage.
importReactfrom"react";importuseLocalStorageStatefrom"use-local-storage-state";import{faCircleHalfStroke}from"@fortawesome/free-solid-svg-icons";importNavfrom"@intility/bifrost-react/Nav";importCheckboxfrom"@intility/bifrost-react/Checkbox";importuseApplyColorModefrom"@intility/bifrost-react/hooks/useApplyColorMode";importtype{ColorMode}from"@intility/bifrost-react";// ColorModePicker.tsxexportfunctionColorModePicker(){// persist color mode state in local storage.// you might want to use a cookie or a database instead?const[colorMode,setColorMode] = useLocalStorageState<ColorMode>("colorMode",// local storage key{defaultValue:"system",},);// keep document color mode in sync with stateuseApplyColorMode(colorMode);return(<Nav.Groupicon={faCircleHalfStroke}aria-label="Color mode picker"><section><Nav.Header>Color mode</Nav.Header><Checkboxtype="radio"label="Light"name="color-mode"checked={colorMode === "light"}onChange={()=>setColorMode("light")}/><Checkboxtype="radio"label="Dark"name="color-mode"checked={colorMode === "dark"}onChange={()=>setColorMode("dark")}/><Checkboxtype="radio"label="System"name="color-mode"checked={colorMode === "system"}onChange={()=>setColorMode("system")}/></section></Nav.Group>);}// App.tsx or wherever you use <Nav>exportdefaultfunctionAppDemo(){return(<Navlogo="Demo app"top={<>{/* other Nav.Items or Nav.Groups */}
<ColorModePicker/></>}>
[App content]
</Nav>);}