color-mode

Resolves the active color mode from the OS preference (prefers-color-scheme) and a user override. userSelectedColorModeAtom is settable ("light" | "dark" | "system"); colorModeSelector returns the resolved "light" | "dark".

Install

bun add @valdres/color-mode

Live example

Loading demo…

Usage

import { Component } from "@angular/core"
import { injectValue } from "valdres-angular"
import { colorModeSelector } from "@valdres/color-mode"

@Component({
    selector: "theme-label",
    template: `{{ mode() }}`,
})
export class ThemeLabel {
    mode = injectValue(colorModeSelector) // Signal<"light" | "dark">
}

Exports

ExportKindType
colorModeSelectorselector"light" | "dark"
isDarkModeSelectorselectorboolean
isLightModeSelectorselectorboolean
systemColorModeAtomatom (read-only)"light" | "dark"
userSelectedColorModeAtomatom (settable)"light" | "dark" | "system"
getSystemColorModeutil fn() => "light" | "dark"
ColorModetype"light" | "dark"
UserSelectedColorModetype"light" | "dark" | "system"

Cross-framework

Global atoms and selectors — only the read primitive's name changes per framework. The prefers-color-scheme listener starts on the first subscriber and stops when the last one leaves.