import React, { CSSProperties, HTMLAttributes } from "react";
import { EdgeProps } from "./Edge";
import { NodeFrontProps, NodeProps } from "./Node";
type EdgeConfig = {
stroke?: string;
strokeWidth?: number;
descriptionColor?: string;
descriptionSize?: number;
hoveredColor?: string;
flyLineEffect?: "line" | "arrow";
arrowIcon?: React.ReactNode;
};
type NodeConfig = {
fill?: string;
radius?: number;
nameSize?: number;
typeSize?: number;
nameColor?: string;
typeColor?: string;
hoverStyle?: CSSProperties;
};
type TypeConfig = {
[type: string]: NodeConfig;
};
type ExploreFunc = (
id: string,
node: NodeProps
) => Promise<{
inside: NodeProps[];
outside: NodeProps[];
edges: EdgeProps[];
}>;
type ConfigProps = {
basicDistence: number; // 基础半径
explore: ExploreFunc;
onExploreEnd?: () => void;
node: NodeProps;
position: { x: number; y: number };
typeConfig?: TypeConfig;
edgeConfig?: EdgeConfig;
width: number | string;
height: number | string;
showHelper?: boolean;
helperConfig?: {
color?: string;
size?: number;
};
showNodeMenu?: boolean;
onClickInfo?: (node: NodeFrontProps) => void;
onClickAddon?: (node: NodeFrontProps) => void;
showFilter?: boolean;
enableAutoExplore?: boolean;
filterConfig?: {
color?: string;
size?: number;
};
dragRenderOptimization?: "react" | "dom";
} & HTMLAttributes;
type CanvasConfig = {
x: number;
y: number;
scale: number;
};
export type {
EdgeConfig,
ConfigProps,
NodeConfig,
TypeConfig,
CanvasConfig,
ExploreFunc,
};