import type { StyleProperties, ColorLike } from "./types";
export interface ThemeDefinition {
    colors: Record<string, string>;
    fonts: {
        heading: string;
        body: string;
        mono: string;
    };
    spacing: {
        xs: number;
        sm: number;
        md: number;
        lg: number;
        xl: number;
    };
    border_radius: {
        sm: number;
        md: number;
        lg: number;
    };
}
export interface ShapeStyle {
    fill_color?: ColorLike;
    stroke_color?: ColorLike;
    stroke_width?: number;
    opacity?: number;
    border_radius?: number;
}
export interface Position {
    x: number;
    y: number;
}
export interface Size {
    width: number;
    height: number;
}
export declare class Theme {
    name: string;
    definition: ThemeDefinition;
    private classnames;
    constructor(name: string, definition?: Partial<ThemeDefinition>);
    define_classname(name: string, style: StyleProperties): void;
    define_classname(definitions: Array<string | StyleProperties>): void;
    get_classname(name: string): StyleProperties | undefined;
    has_classname(name: string): boolean;
    remove_classname(name: string): boolean;
    clear_classnames(): void;
    merge_classname(base_style: StyleProperties, classname: string): StyleProperties;
    get_color(key: string): string;
    get_font(key: keyof ThemeDefinition["fonts"]): string;
    get_spacing(key: keyof ThemeDefinition["spacing"]): number;
    get_border_radius(key: keyof ThemeDefinition["border_radius"]): number;
    apply_to_style(base_style: StyleProperties, element_type?: "heading" | "text" | "container" | "shape"): StyleProperties;
}
export declare const create_theme: (name: string, definition?: Partial<ThemeDefinition>) => Theme;
