zz-chart
Version:
Alauda Chart components by Alauda Frontend Team
128 lines (127 loc) • 3.35 kB
TypeScript
/// <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 {};