import { Node, NodeChange } from 'reactflow';
import { StateCreator } from 'zustand';
import { ActionOptions, ActionPayload, FlattenNodes, MetaData, NodeState } from '../../types';
import { FlowEditorStore } from '../actions';
import { NodeDispatch } from '../reducers/node';
/**
 * 公共节点操作接口
 */
export interface PublicNodesAction {
    /**
     * 分发节点操作
     * @param payload 节点操作的载荷
     * @param options 节点操作的选项
     */
    dispatchNodes: (payload: NodeDispatch, options?: ActionOptions) => void;
    /**
     * 添加节点到指定位置
     * @param node 要添加的节点
     * @param index 要添加到的位置，默认为末尾
     */
    addNode: (node: Node, index?: number) => void;
    addNodes: (nodes: Record<string, Node> | Node[], options?: ActionOptions) => void;
    /**
     * 移除指定 id 的节点
     * @param id 要移除的节点 id
     */
    deleteNode: (id: string) => void;
    /**
     * 删除节点元素
     * @param id 要删除的节点 id
     */
    deleteNodes: (ids: string[]) => void;
    /**
     * 批量删除节点
     * @param ids 要批量删除的节点 id
     */
    updateNodeMeta: <T extends keyof MetaData>(id: string, key: T, value: MetaData[T], options?: ActionOptions) => void;
    /**
     * 更新节点状态
     * @param id 要更新的节点 id
     * @param key 要更新的状态键名
     * @param value 要更新的状态值
     * @param options 节点操作的选项
     */
    updateNodeState: <T extends keyof NodeState>(id: string, key: T, value: NodeState[T], options?: ActionOptions) => void;
    /**
     * 更新节点内容
     * @param id 要更新的节点 id
     * @param key 要更新的内容键名
     * @param value 要更新的内容值
     * @param options 节点操作的选项
     */
    updateNodeContent: <T extends object>(id: string, key: keyof T, value: T[keyof T], options?: ActionOptions) => void;
    /**
     * 更新节点数据
     * @param id 要更新的节点 id
     * @param newData 要更新的数据
     * @param forceReplace 是否强制替换整个数据
     * @param options 节点操作的选项
     */
    updateNodeData: <T extends object>(id: string, newData: T, forceReplace?: boolean, options?: ActionOptions) => void;
}
export interface NodesSlice extends PublicNodesAction {
    internalUpdateNodes: (flattenNodes: FlattenNodes, payload: ActionPayload) => void;
    handleNodesChange: (changes: NodeChange[]) => void;
}
export declare const nodesSlice: StateCreator<FlowEditorStore, [
    ['zustand/devtools', never]
], [
], NodesSlice>;
