import { Accessor, JSX } from 'solid-js';
import { LightOrDark, ThemeOptions, ThemeProviderRuntimeProps, WithSystem } from './types';
export type ThemeSetter<TTheme extends string = LightOrDark, TEnableSystem extends boolean = true> = (value: WithSystem<TTheme, TEnableSystem> | ((prev: WithSystem<TTheme, TEnableSystem>) => WithSystem<TTheme, TEnableSystem>)) => void;
/**
 * Framework-specific theme state returned by
 * `useTheme()`.
 *
 * Exposes the current selected theme, the
 * resolved document theme, the current system
 * theme, and a setter for updates.
 */
export interface ThemeResult<TTheme extends string = LightOrDark, TEnableSystem extends boolean = true> {
    /** All selectable theme names for this config */
    themes: Accessor<ReadonlyArray<WithSystem<TTheme, TEnableSystem>>>;
    /** Theme forced for the current page, if any */
    forced: Accessor<TTheme | undefined>;
    /** Updates the selected theme */
    setSelected: ThemeSetter<TTheme, TEnableSystem>;
    /** Current selected theme preference */
    selected: Accessor<WithSystem<TTheme, TEnableSystem> | undefined>;
    /** Current concrete theme applied to the document */
    resolved: Accessor<Exclude<TTheme, 'system'> | undefined>;
    /** Current browser system theme */
    system: Accessor<LightOrDark | undefined>;
}
export interface ThemeProviderProps<TTheme extends string = LightOrDark, TEnableSystem extends boolean = true> extends ThemeOptions<TTheme, TEnableSystem>, ThemeProviderRuntimeProps<TTheme, TEnableSystem> {
    children?: JSX.Element;
}
export type ThemeContextValue = ThemeResult<string, boolean>;
export declare const ThemeContext: import('solid-js').Context<ThemeContextValue | undefined>;
export declare const useTheme: <TTheme extends string = LightOrDark, TEnableSystem extends boolean = true>() => ThemeResult<TTheme, TEnableSystem>;
export declare const ThemeProvider: <TTheme extends string = LightOrDark, TEnableSystem extends boolean = true>(props: ThemeProviderProps<TTheme, TEnableSystem>) => JSX.Element;
//# sourceMappingURL=solid-bindings.d.ts.map