/**
 * Live OS theme watcher: `prefers-color-scheme` and `prefers-contrast`.
 *
 * A chart that samples the OS theme once at construction is wrong the moment
 * the viewer switches their system to dark, which on most desktops happens on a
 * schedule. This watches both queries and tells the product to re-theme, so a
 * `@media (prefers-color-scheme: dark)` block that redefines the `--apx-*`
 * tokens is actually picked up rather than merely declared.
 *
 * Kept separate from {@link ReducedMotionWatcher} because they answer different
 * questions and a product may want one without the other, but they share the
 * same shape: construct, read `matches`, `dispose()` on teardown, and
 * `addListener`/`removeListener` fallbacks for Safari < 14.
 *
 * SSR-safe: with no `window`/`matchMedia` the watcher is inert and reports the
 * light, normal-contrast defaults.
 */
/** What the OS currently asks for. */
export interface OSThemeState {
    /** `'dark'` when the OS asks for a dark scheme. */
    mode: 'dark' | 'light';
    /** True when the OS asks for increased contrast. */
    highContrast: boolean;
}
export interface OSThemeWatcherOptions {
    /**
     * Called whenever either preference changes. A product typically re-reads its
     * tokens and re-renders from here.
     */
    onChange?: (state: OSThemeState) => void;
}
export declare class OSThemeWatcher {
    private dark;
    private contrast;
    private handler;
    constructor(options?: OSThemeWatcherOptions);
    /** The current OS preferences. */
    get state(): OSThemeState;
    /** Detach both media listeners. */
    dispose(): void;
}
//# sourceMappingURL=OSThemeWatcher.d.ts.map