import { OGSConnectivity } from "./OGSConnectivity";
import { GobanConfig } from "../GobanBase";
export declare const GOBAN_FONT = "Verdana,Arial,sans-serif";
export type ShadowTheme = "none" | "low" | "mid" | "high" | "custom" | "default" | "anime";
export interface CustomShadowConfig {
    black?: {
        gradientTransform?: string;
        shadow_color?: string;
    };
    white?: {
        gradientTransform?: string;
        shadow_color?: string;
    };
}
export interface GobanSelectedThemes {
    "board": string;
    "white": string;
    "black": string;
    "removal-graphic": "square" | "x";
    "removal-scale": number;
    "stone-shadows"?: ShadowTheme;
    "custom-shadow-config"?: CustomShadowConfig;
}
export type LabelPosition = "all" | "none" | "top-left" | "top-right" | "bottom-right" | "bottom-left";
export interface GobanMetrics {
    width: number;
    height: number;
    mid: number;
    offset: number;
}
export interface CaptureDisplayConfig {
    stone_color: "black" | "white";
    stone_count: number;
    stone_radius?: number;
    stone_overlap?: number;
    max_stones?: number;
}
export interface CaptureDisplay {
    readonly element: HTMLCanvasElement | SVGSVGElement;
    updateStoneCount(count: number): void;
    destroy(): void;
}
/**
 * Goban serves as a base class for our renderers as well as a namespace for various
 * classes, types, and enums.
 *
 * You can't create an instance of a Goban directly, you have to create an instance of
 * one of the renderers, such as GobanSVG.
 */
export declare abstract class Goban extends OGSConnectivity {
    static THEMES: import("./themes").ThemesInterface;
    static THEMES_SORTED: {
        [key: string]: import("./themes").GobanTheme[];
        white: import("./themes").GobanTheme[];
        black: import("./themes").GobanTheme[];
        board: import("./themes").GobanTheme[];
    };
    protected abstract setTheme(themes: GobanSelectedThemes, dont_redraw: boolean): void;
    parent: HTMLElement;
    protected title_div?: HTMLElement;
    evaluation_bar_container?: HTMLDivElement;
    evaluation_bar_div?: HTMLDivElement;
    private analysis_scoring_color?;
    private analysis_scoring_last_position;
    private _evaluation;
    private _evaluation_bar_width;
    constructor(config: GobanConfig, preloaded_data?: GobanConfig);
    destroy(): void;
    set evaluation(value: number);
    get evaluation(): number;
    protected getSelectedThemes(): GobanSelectedThemes;
    protected putOrClearLabel(x: number, y: number, mode?: "put" | "clear"): boolean;
    protected getAnalysisScoreColorAtLocation(x: number, y: number): "black" | "white" | string | undefined;
    protected putAnalysisScoreColorAtLocation(x: number, y: number, color?: "black" | "white" | string, sync_review_move?: boolean): void;
    protected putAnalysisRemovalAtLocation(x: number, y: number, removal?: boolean): void;
    /** Marks scores on the board when in analysis mode. Note: this will not
     * clear existing scores, this is intentional as I think it's the expected
     * behavior of reviewers */
    markAnalysisScores(): void;
    setSquareSizeBasedOnDisplayWidth(display_width: number, suppress_redraw?: boolean): void;
    set evaluation_bar_width(width: number);
    get evaluation_bar_width(): number;
    static computeEvaluationBarWidth(display_width: number): number;
    static computeSquareSizeFromDisplayWidth(display_width: number, config: {
        bounded_width: number;
        bounded_height: number;
        draw_left_labels: boolean;
        draw_right_labels: boolean;
        draw_top_labels: boolean;
        draw_bottom_labels: boolean;
        evaluation_bar: boolean;
    }): number;
    setLabelPosition(label_position: LabelPosition): void;
    protected onAnalysisToggleStoneRemoval(ev: MouseEvent | TouchEvent): void;
    /** Clears any analysis scores on the board */
    clearAnalysisScores(): void;
    setSquareSize(new_ss: number, suppress_redraw?: boolean): void;
    setStoneFontScale(new_ss: number, suppress_redraw?: boolean): void;
    computeMetrics(): GobanMetrics;
    protected onAnalysisScoringStart(ev: MouseEvent | TouchEvent): void;
    protected onAnalysisScoringMove(ev: MouseEvent | TouchEvent): void;
    protected normalizeCaptureConfig(config: CaptureDisplayConfig): Required<CaptureDisplayConfig>;
    protected calculateCaptureDisplayDimensions(config: Required<CaptureDisplayConfig>, count: number): {
        radius: number;
        displayCount: number;
        stone_spacing: number;
        width: number;
        height: number;
    };
}
