import * as React from 'react';
import { ThemeMode, ResolvedTheme, ThemeConfig } from '../theme/index.js';
export { ResolvedTheme, ThemeConfig, ThemeMode, ThemeState } from '../theme/index.js';

interface ThemeContextValue {
    mode: ThemeMode;
    resolved: ResolvedTheme;
    setMode: (mode: ThemeMode) => void;
}
interface ThemeProviderProps extends ThemeConfig {
    children: React.ReactNode;
}
declare function ThemeProvider({ children, defaultMode, storageKey, attribute, }: ThemeProviderProps): React.FunctionComponentElement<React.ProviderProps<ThemeContextValue | null>>;
declare function useTheme(): ThemeContextValue;

interface ThemeToggleProps {
    className?: string;
    /** 'dropdown' shows a menu, 'segmented' shows inline buttons */
    variant?: 'dropdown' | 'segmented';
}
declare function ThemeToggle({ className, variant }: ThemeToggleProps): React.DetailedReactHTMLElement<{
    className: string;
    role: "radiogroup";
    'aria-label': string;
}, HTMLElement> | React.DetailedReactHTMLElement<{
    ref: React.RefObject<HTMLDivElement | null>;
    className: string;
}, HTMLDivElement>;

interface ThemeScriptProps {
    storageKey?: string;
    attribute?: 'class' | 'data-theme';
}
/**
 * Renders an inline <script> that prevents theme flash on SSR pages.
 * Place this in the <head> of your document (in Next.js layout.tsx, Remix root, etc.)
 */
declare function ThemeScript({ storageKey, attribute, }: ThemeScriptProps): React.DetailedReactHTMLElement<{
    dangerouslySetInnerHTML: {
        __html: string;
    };
}, HTMLElement>;

export { type ThemeContextValue, ThemeProvider, type ThemeProviderProps, ThemeScript, type ThemeScriptProps, ThemeToggle, type ThemeToggleProps, useTheme };
