import { Action, GraphMergeSpec, GraphMergesSpec, GraphPinSpec, GraphSpec, GraphSubPinSpec, GraphUnitSpec, GraphUnitsSpec } from '../../types';
import { IO } from '../../types/IO';
export declare type State = GraphSpec;
export declare const defaultState: State;
export declare const setSpec: ({ spec }: {
    spec: State;
}) => GraphSpec;
export declare const setName: ({ name }: {
    name: string;
}, state: State) => State;
export declare const addUnit: ({ id, unit }: {
    id: string;
    unit: GraphUnitSpec;
}, state: State) => State;
export declare const addUnits: ({ units }: {
    units: GraphUnitsSpec;
}, state: State) => State;
export declare const removeUnits: ({ ids }: {
    ids: string[];
}, state: State) => State;
export declare const mergeUnits: ({ units }: {
    units: GraphUnitsSpec;
}, state: State) => State;
export declare const expandUnit: ({ unitId, spec }: {
    unitId: string;
    spec: GraphSpec;
}, state: State) => State;
export declare const collapseUnits: (unitIds: string[], state: State) => State;
export declare const removeUnitExposedTypePins: ({ id, type }: {
    id: string;
    type: IO;
}, state: State) => State;
export declare const removeUnitExposedPins: ({ id }: {
    id: string;
}, state: State) => State;
export declare const removeUnitMerges: ({ id }: {
    id: string;
}, state: State) => State;
export declare const removeUnit: ({ unitId }: {
    unitId: string;
}, state: State) => State;
export declare const addMerge: ({ mergeId, merge }: {
    mergeId: string;
    merge: GraphMergeSpec;
}, state: State) => State;
export declare const addPinToMerge: ({ id, unitId, type, pinId, }: {
    id: string;
    type: IO;
    unitId: string;
    pinId: string;
}, state: State) => State;
export declare const addMerges: ({ merges }: {
    merges: GraphMergesSpec;
}, state: State) => State;
export declare const removeMerge: ({ id }: {
    id: string;
}, state: State) => State;
export declare const mergeMerges: ({ a, b }: {
    a: string;
    b: string;
}, state: State) => State;
export declare const _removePinFromMerge: ({ id, unitId, type, pinId, }: {
    id: string;
    type: IO;
    unitId: string;
    pinId: string;
}, state: State) => State;
export declare const removePinFromMerge: ({ id, unitId, type, pinId, }: {
    id: string;
    type: IO;
    unitId: string;
    pinId: string;
}, state: State) => State;
export declare const isPinMerged: (state: State, id: any, unitId: string, type: IO, pinId: string) => boolean;
export declare const coverPinSet: ({ pinId, type }: {
    pinId: string;
    type: IO;
}, state: State) => State;
export declare const coverPin: ({ id, type, subPinId, }: {
    id: string;
    type: IO;
    subPinId: string;
}, state: State) => State;
export declare const exposePinSet: ({ pinId, type, pin }: {
    pinId: string;
    type: IO;
    pin: GraphPinSpec;
}, state: State) => State;
export declare const exposePin: ({ pinId, type, subPinId, subPin, }: {
    pinId: string;
    type: IO;
    subPinId: string;
    subPin: GraphSubPinSpec;
}, state: State) => State;
export declare const exposeInputSet: ({ id, input }: {
    id: string;
    input: GraphPinSpec;
}, state: State) => State;
export declare const exposeInput: ({ id, subPinId, input, }: {
    id: string;
    subPinId: string;
    input: GraphSubPinSpec;
}, state: State) => State;
export declare const plugPin: ({ type, pinId, subPinId, subPinSpec, }: {
    type: IO;
    pinId: string;
    subPinId: string;
    subPinSpec: GraphSubPinSpec;
}, state: State) => State;
export declare const unplugInput: ({ pinId, subPinId, }: {
    pinId: string;
    subPinId: string;
}, state: State) => State;
export declare const unplugOutput: ({ id, subPinId, }: {
    id: string;
    subPinId: string;
}, state: State) => State;
export declare const unplugPin: ({ type, pinId, subPinId, }: {
    type: IO;
    pinId: string;
    subPinId: string;
}, state: State) => State;
export declare const coverInputSet: ({ id }: {
    id: string;
}, state: State) => State;
export declare const coverInput: ({ id, subPinId, }: {
    id: string;
    subPinId: string;
}, state: State) => State;
export declare const exposeOutputSet: ({ id, output }: {
    id: string;
    output: GraphPinSpec;
}, state: State) => State;
export declare const exposeOutput: ({ id, subPinId, output, }: {
    id: string;
    subPinId: string;
    output: GraphSubPinSpec;
}, state: State) => State;
export declare const coverOutputSet: ({ id }: {
    id: string;
}, state: State) => State;
export declare const coverOutput: ({ id, subPinId, }: {
    id: string;
    subPinId: string;
}, state: State) => State;
export declare const setUnitErr: ({ unitId, err }: {
    unitId: string;
    err: string | null;
}, state: State) => State;
export declare const setPinSetName: ({ type, id, name }: {
    type: IO;
    id: string;
    name: string;
}, state: State) => State;
export declare const setPinSetId: ({ type, id, newId }: {
    type: IO;
    id: string;
    newId: string;
}, state: State) => State;
export declare const setPinSetFunctional: ({ type, pinId, functional }: {
    type: IO;
    pinId: string;
    functional: boolean;
}, state: State) => State;
export declare const setPinSetRef: ({ type, pinId, ref }: {
    type: IO;
    pinId: string;
    ref: boolean;
}, state: State) => State;
export declare const setUnitInput: ({ id, name, data }: {
    id: string;
    name: string;
    data: string;
}, state: State) => State;
export declare const setUnitOutput: ({ id, name, data }: {
    id: string;
    name: string;
    data: string;
}, state: State) => State;
export declare const setUnitPinData: ({ unitId, type, pinId, data, }: {
    unitId: string;
    type: IO;
    pinId: string;
    data: any;
}, state: State) => State;
export declare const setUnitInputConstant: ({ unitId, pinId, constant, }: {
    unitId: string;
    pinId: string;
    constant: boolean;
}, state: State) => State;
export declare const setUnitOutputConstant: ({ unitId, pinId, constant, }: {
    unitId: string;
    pinId: string;
    constant: boolean;
}, state: State) => State;
export declare const setUnitPinIgnored: ({ unitId, type, pinId, ignored, }: {
    unitId: string;
    type: IO;
    pinId: string;
    ignored: boolean;
}, state: State) => GraphSpec;
export declare const setUnitOutputIgnored: ({ unitId, pinId, ignored, }: {
    unitId: string;
    pinId: string;
    ignored: boolean;
}, state: State) => State;
export declare const setUnitInputIgnored: ({ unitId, pinId, ignored, }: {
    unitId: string;
    pinId: string;
    ignored: boolean;
}, state: State) => State;
export declare const removeUnitPinData: ({ unitId, type, pinId }: {
    unitId: string;
    type: IO;
    pinId: string;
}, state: State) => State;
export declare const setMetadata: ({ path, value }: {
    path: string[];
    value: any;
}, state: State) => State;
export declare const setUnitMetadata: ({ id, path, value }: {
    id: string;
    path: string[];
    value: any;
}, state: State) => State;
export default function (state: State, { type, data }: Action): State;
