import * as react from 'react';
import { ThemeStore, ThemeContext } from '../client.js';
import { ThemeContract, SetThemeOptions } from '../client.js';

/**
 * Re-exported under its historical name so existing imports keep working.
 * New code should prefer {@link DefaultThemeContext} from `core/context`.
 */
declare const ThemeStoreContext: react.Context<ThemeStore | null>;
/** The shape every bound `useTheme` returns, generic over the theme union. */
type UseThemeHook = <T extends string = string>() => ThemeContract & {
    theme: T | 'system';
    resolvedTheme: T;
    setTheme: (theme: T | 'system' | ((prev: T | 'system') => T | 'system'), options?: SetThemeOptions) => void;
};
/**
 * Build a `useTheme` bound to a specific {@link ThemeContext}.
 *
 * `createThemes()` uses this to bind its hooks to its own private context, so
 * two typed theme APIs in one app cannot read each other's store. The top-level
 * `useTheme` export below is simply this factory applied to the default
 * context.
 */
declare function makeUseTheme(Context: ThemeContext): UseThemeHook;
/**
 * Read the current theme state and obtain a setter. Must be called inside a
 * ThemeProvider. `T` narrows the accepted theme values for setTheme.
 */
declare const useTheme: UseThemeHook;

export { ThemeStoreContext, makeUseTheme, useTheme };
export type { UseThemeHook };
