import { Form } from '@formily/core'; import useCellActions from '../components/Editor/hooks/useCellActions'; import useGraphActions from '../components/Editor/hooks/useGraphActions'; import { executeAction } from '../components/Editor/utils'; import { IEdge, IEdgeInstance, IEdgeShapeType } from './edge'; import { INode, INodeInstance, INodeSource } from './node'; import { IGraph } from './graph'; import { CSSProperties, MutableRefObject } from 'react'; export declare type IForm = Form & { customSubmit?: (values: any) => Promise; formInputChanged?: boolean; }; export interface IMinimapOptions { height?: number; width?: number; viewportStyle?: CSSProperties; containerStyle?: CSSProperties; nodeColor?: string; } export interface ITheme { primaryColor?: string; } export interface IFormPanelConfig { width?: number; maxWidth?: number; minWidth?: number; resizeBarType?: 'icon' | 'line'; autoCollapse?: number; } export interface IBottomPanelConfig { height?: number; minHeight?: number; maxHeight?: number; resizeBarType?: 'icon' | 'line'; autoCollapse?: number; } export interface INodeConfig { START?: { width?: number | string; minWidth?: number; height?: number; color?: string; background?: string; toolsStyle: { background?: string; }; }; END?: { width?: number | string; minWidth?: number; height?: number; color?: string; background?: string; toolsStyle: { background?: string; }; }; TASK?: { width?: number | string; minWidth?: number; height?: number; color?: string; background?: string; hoveredStyle?: { borderColor?: string; }; selectedStyle?: { borderColor?: string; }; toolsStyle: { background?: string; }; }; RELATION?: { width?: number | string; minWidth?: number; height?: number; color?: string; background?: string; toolsStyle: { background?: string; }; }; } export interface IEdgeConfig { shape?: { shapeType?: IEdgeShapeType; width?: number; color?: string; }; label?: { labelPosition?: number; color?: string; background?: string; }; } export interface IGraphConfig { grid?: { shapeType?: 'line' | 'circle'; gap?: number; background?: string; circleRadiu?: number; circleColor?: string; }; action?: { copyType: 'removeAttr' | 'preserveAttr'; }; node?: { propertyKey?: string; }; edge?: { propertyKey?: string; }; } export declare type INodePanelConfig = { type?: 'list' | 'tree'; width?: number; maxWidth?: number; minWidth?: number; }; export interface IFlowEditor { theme?: ITheme; className?: string; style?: CSSProperties; editable?: boolean; minimap?: boolean | IMinimapOptions; nodeRender?: INodeRender; nodeConfig?: INodeConfig; edgeRender?: IEdgeRender; edgeConfig?: IEdgeConfig; formRender?: IFormRender; formPanelRender?: IFormPanelRender; formPanelConfig?: IFormPanelConfig; nodePanelRender?: INodePanelRender; nodePanelConfig?: INodePanelConfig; toolbarRender?: IToolbarRender; toolbarConfig?: IToolbarConfig; nodeSources?: { title: string; children: INodeSource[]; }[]; onGraphLoaded?: (graph: IGraph) => void; data?: { nodes: INode[]; edges: IEdge[]; }; graphConfig?: IGraphConfig; graphRef?: MutableRefObject; endpointRender?: IEndpointRender; onAddNode?: (item: any) => Promise; onValidateAddNode?: (item: any) => Promise; onNodeClick?: (item: any) => void; onNodeRightClick?: (item: any) => void; additionalMenuData?: Array<{ title: string; icon: string; onClick: () => void; disabled: boolean; }>; loading?: boolean; bottomPanelConfig?: IBottomPanelConfig; bottomContentRender?: IBottomContentRender; } export declare type INodeRender = (props: { node: INode; graph: IGraph; config?: INodeConfig; }) => JSX.Element; export declare type IEndpointRender = (props: { node: INodeInstance; type: 'source' | 'target'; }) => JSX.Element | HTMLElement; export declare type IEdgeRender = (props: { edge: IEdge & { isCreate: boolean; }; graph: IGraph; config?: IEdgeConfig; }) => { shapeType: IEdgeShapeType; labelRender?: (edgeInstance: IEdgeInstance) => JSX.Element | HTMLElement | string; color?: string; width?: number; opacity?: number; lineStyle?: 'solid' | 'dashed'; labelPosition?: number; animation?: boolean | { color?: string; radius?: number; dur?: string; repeatCount?: number | 'indefinite'; }; } | IEdgeShapeType; export declare type IFormRender = (props: { graph?: IGraph; selectedItem?: INodeInstance | IEdgeInstance; form?: IForm; editable: boolean; }) => React.ReactElement; export declare type IFormPanelRender = (props: { graph?: IGraph; selectedItem?: INodeInstance | IEdgeInstance; formVisible: boolean; formRender?: IFormRender; config?: IFormPanelConfig; editable: boolean; }) => React.ReactElement; declare type IItem = { children?: IItem[]; onLoadChildren?: () => Promise; icon?: string; title?: string; } | INodeSource; export declare type ITreeNodeSources = ({ title: string; subTitle?: string; onSearch?: (keyword: string) => Promise; onLoadChildren?: () => Promise; children?: IItem[]; }[]); export declare type IListNodeSources = { title: string; children: INodeSource[]; }[]; export declare type INodePanelRender = (props: { DndNode?: React.FC<{ nodeProps: INodeSource; children: any; }>; graph?: IGraph; type?: 'list' | 'tree'; nodeSources?: IListNodeSources | ITreeNodeSources; theme?: ITheme; }) => React.ReactElement; export declare type IToolbarRender = (props: { graph?: IGraph; config?: IToolbarConfig; actions: ReturnType & ReturnType; executeAction: typeof executeAction; }) => React.ReactElement; export declare type IBottomContentRender = (props: { graph?: IGraph; selectedItem?: INodeInstance | IEdgeInstance; }) => React.ReactElement; export declare type IToolbarConfig = { actions: ('undo_redo' | 'zoom' | 'duplicateCell' | 'autoLayout' | 'graphAutoZoom' | 'multipleSelect')[]; }; export {};