/// <reference types="react" resolution-mode="require"/>
/// <reference types="web" />
import * as d3 from 'd3';
import { Data, DataItem, PieShapeOption } from '../../types/options.js';
import { PolarShape } from './index.js';
import { View } from '../../chart/view.js';
export declare const DEFAULT_RADIUS_DIFF = 8;
export declare const ACTIVE_RADIUS_ENLARGE_SIZE = 2;
interface PieItemConfig {
    padAngle: number;
    startAngle: number;
    endAngle: number;
    innerRadius: number;
    outerRadius: number;
    borderRadius: number;
    borderWidth: number;
    color: string;
}
interface PieItemValue {
    path: string;
    config: PieItemConfig;
    data: Data;
    selected?: boolean;
    polylinePoints?: Array<[number, number]>;
}
interface LabelLayoutData {
    startPoint: [number, number];
    elbowPoint: [number, number];
    endPoint: [number, number];
    textX: number;
    textY: number;
    textAlign: 'start' | 'end';
    labelText: string;
    color: string;
    data: Data;
    visible: boolean;
    index: number;
}
/**
 * Pie 饼图 / 环形图 组件
 */
export default class Pie extends PolarShape<PieShapeOption> {
    type: string;
    pieGuide: d3.Selection<HTMLDivElement, unknown, null, undefined>;
    svgEl: d3.Selection<SVGSVGElement, unknown, null, undefined>;
    data: Data;
    get nullData(): boolean;
    get totalValue(): number;
    get colorVar(): Record<string, string>;
    init(): void;
    render(): void;
    /**
     * 生成标签文本
     */
    getLabelText(data: DataItem): string;
    /**
     * 估算标签最大长度用于计算半径
     */
    calculateLabelLength(data: any): number;
    renderPie(clientHeight: number): void;
    /**
     * 重心平衡布局 + 可见性过滤
     */
    calculateLabelLayout(paths: any[]): LabelLayoutData[];
    /**
     * 渲染引导线：增加 class 和 初始 opacity
     */
    renderGuidelines(paths: any): void;
    /**
     * 交互事件监听：增加 Hover 联动
     */
    addListener(): void;
    onMousemove(res: {
        self: unknown;
        data: PieItemValue;
        event: MouseEvent;
    }): void;
    onMouseleave(res: {
        self: unknown;
        data: PieItemValue;
        event: MouseEvent;
    }): void;
    renderLabel(): void;
    redraw(): void;
}
export declare function getPath(config: {
    padAngle?: number;
    startAngle: number;
    endAngle: number;
    innerRadius: number;
    outerRadius: number;
    borderRadius: number;
    borderWidth?: number;
    color?: string;
}): string;
export declare function calculatePaths(data: Data, option: PieShapeOption, color: string, ctrl: View): ({
    path: string;
    config: {
        padAngle?: number;
        startAngle: number;
        endAngle: number;
        innerRadius?: number;
        outerRadius?: number;
        borderRadius?: number;
        borderWidth?: number;
        color: string;
    };
    data?: undefined;
} | {
    path: string;
    config: {
        startAngle: number;
        endAngle: number;
        padAngle?: number;
        innerRadius?: number;
        outerRadius?: number;
        borderRadius?: number;
        borderWidth?: number;
        color: string;
    };
    data: any;
})[];
export declare function getRadius(option: PieShapeOption): {
    outerRadius: number;
    innerRadius: number;
};
export {};
