import type { ThemeSemanticColors } from "../stream/types";
/**
 * Extract the semantic-role subset of a `SemioticTheme` into the flat
 * `ThemeSemanticColors` shape that Stream Frames thread through to
 * scene builders via `pipelineConfig.themeSemantic`.
 *
 * Centralizes two fallback rules documented on `SemioticTheme.colors`:
 *   - `secondary` falls back to `primary` when unset
 *   - `surface`   falls back to `background` when unset
 *
 * Called from every Stream Frame (XY / Ordinal / Network / Geo) so role
 * additions and fallback tweaks land in exactly one place.
 *
 * Returns `undefined` when no theme is available so scene builders can
 * skip the theme-default path and use their hardcoded fallbacks.
 */
export declare function resolveThemeSemanticColors(theme: SemioticTheme | null | undefined): ThemeSemanticColors | undefined;
/** Apply accessibility flags to a resolved theme. Shared by ThemeStore and server themeResolver. */
export declare function applyThemeAccessibility(theme: SemioticTheme): SemioticTheme;
export interface SemioticTheme {
    mode: "light" | "dark" | "auto";
    colors: {
        primary: string;
        /** Secondary accent color. Falls back to `primary` when unset. */
        secondary?: string;
        categorical: string[];
        sequential: string;
        /** d3-scale-chromatic diverging scheme name, e.g. "RdBu", "PiYG" */
        diverging?: string;
        background: string;
        /** Elevated surface fill (e.g. card/tooltip bg). Falls back to `background`. */
        surface?: string;
        text: string;
        textSecondary: string;
        grid: string;
        border: string;
        /** Separator/border color for cell-like marks such as treemap tiles and heatmap cells. Falls back to `border`. */
        cellBorder?: string;
        focus?: string;
        /** Linked hover/selection highlight color */
        selection?: string;
        /** Opacity for non-selected (dimmed) elements, 0–1 */
        selectionOpacity?: number;
        /** Default annotation text/marker color. Falls back to `text` if unset. */
        annotation?: string;
        /** Positive outcomes, gains, "ok" states. */
        success?: string;
        /** Negative outcomes, losses, destructive actions. */
        danger?: string;
        /** Cautionary states, degraded but not failed. */
        warning?: string;
        /** Failed states, blocking errors. Typically more intense than `danger`. */
        error?: string;
        /** Neutral informational callouts, tips, help content. */
        info?: string;
    };
    typography: {
        fontFamily: string;
        titleSize: number;
        labelSize: number;
        tickSize: number;
        /** Font size for legend text. Falls back to `labelSize` if unset. */
        legendSize?: number;
        /** Font family for axis tick labels. Use monospace for aligned numerics. Falls back to `fontFamily`. */
        tickFontFamily?: string;
        /** Font size for chart title. Falls back to `titleSize` if unset. */
        titleFontSize?: number;
    };
    tooltip?: {
        background?: string;
        text?: string;
        borderRadius?: string;
        fontSize?: string;
        shadow?: string;
    };
    borderRadius?: string;
    accessibility?: {
        /** Auto-swap to color-blind safe palette when true */
        colorBlindSafe?: boolean;
        /** Enforce minimum 3:1 contrast ratios */
        highContrast?: boolean;
    };
}
/** Color-blind safe categorical palette (8 colors).
 *  Derived from Wong (2011) "Points of view: Color blindness" — safe for
 *  deuteranopia, protanopia, and tritanopia. */
export declare const COLOR_BLIND_SAFE_CATEGORICAL: string[];
export declare const LIGHT_THEME: SemioticTheme;
export declare const DARK_THEME: SemioticTheme;
export declare const HIGH_CONTRAST_THEME: SemioticTheme;
export interface ThemeStoreState {
    theme: SemioticTheme;
    setTheme: (theme: ThemeStoreUpdate) => void;
}
export type SemioticThemeUpdate = Omit<Partial<SemioticTheme>, "colors" | "typography" | "tooltip" | "accessibility"> & {
    colors?: Partial<SemioticTheme["colors"]>;
    typography?: Partial<SemioticTheme["typography"]>;
    tooltip?: Partial<NonNullable<SemioticTheme["tooltip"]>>;
    accessibility?: Partial<NonNullable<SemioticTheme["accessibility"]>>;
};
export type ThemeStoreUpdate = SemioticThemeUpdate | "light" | "dark" | "high-contrast";
export declare function resolveThemeUpdate(current: SemioticTheme, theme: ThemeStoreUpdate): SemioticTheme;
export declare const ThemeProvider: import("react").FC<import("./createStore").StoreProviderProps<ThemeStoreState>>, useThemeSelector: <R>(selector: (state: ThemeStoreState) => R) => R;
