UNPKG

zz-chart

Version:

Alauda Chart components by Alauda Frontend Team

128 lines (127 loc) 3.35 kB
/// <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 {};