import { Destructor } from '@synnaxlabs/x';
import { z } from 'zod';
import { aether } from '../../../aether/aether';
import { status } from '../../../status/aether';
import { telem } from '../../../telem/aether';
import { diagram } from '../../diagram/aether';
export declare const setpointStateZ: z.ZodObject<{
    trigger: z.ZodNumber;
    command: z.ZodOptional<z.ZodNumber>;
    value: z.ZodNumber;
    sink: z.ZodDefault<z.ZodOptional<z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        type: z.ZodString;
        variant: z.ZodEnum<["source", "sink", "source-transformer", "sink-transformer"]>;
        valueType: z.ZodString;
        props: z.ZodAny;
        transfer: z.ZodOptional<z.ZodArray<z.ZodType<ArrayBuffer, z.ZodTypeDef, ArrayBuffer>, "many">>;
    }, {
        variant: z.ZodLiteral<"sink">;
    }>, {
        valueType: z.ZodLiteral<"number">;
    }>, "strip", z.ZodTypeAny, {
        type: string;
        valueType: "number";
        variant: "sink";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    }, {
        type: string;
        valueType: "number";
        variant: "sink";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    }>>>;
    source: z.ZodDefault<z.ZodOptional<z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        type: z.ZodString;
        variant: z.ZodEnum<["source", "sink", "source-transformer", "sink-transformer"]>;
        valueType: z.ZodString;
        props: z.ZodAny;
        transfer: z.ZodOptional<z.ZodArray<z.ZodType<ArrayBuffer, z.ZodTypeDef, ArrayBuffer>, "many">>;
    }, {
        variant: z.ZodLiteral<"source">;
    }>, {
        valueType: z.ZodLiteral<"number">;
    }>, "strip", z.ZodTypeAny, {
        type: string;
        valueType: "number";
        variant: "source";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    }, {
        type: string;
        valueType: "number";
        variant: "source";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    }>>>;
}, "strip", z.ZodTypeAny, {
    value: number;
    source: {
        type: string;
        valueType: "number";
        variant: "source";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    };
    trigger: number;
    sink: {
        type: string;
        valueType: "number";
        variant: "sink";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    };
    command?: number | undefined;
}, {
    value: number;
    trigger: number;
    source?: {
        type: string;
        valueType: "number";
        variant: "source";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    } | undefined;
    sink?: {
        type: string;
        valueType: "number";
        variant: "sink";
        props?: any;
        transfer?: ArrayBuffer[] | undefined;
    } | undefined;
    command?: number | undefined;
}>;
export type SetpointState = z.input<typeof setpointStateZ>;
interface InternalState {
    source: telem.NumberSource;
    sink: telem.NumberSink;
    addStatus: status.Aggregate;
    stopListening: Destructor;
}
export declare class Setpoint extends aether.Leaf<typeof setpointStateZ, InternalState> implements diagram.Element {
    static readonly TYPE = "Setpoint";
    schema: z.ZodObject<{
        trigger: z.ZodNumber;
        command: z.ZodOptional<z.ZodNumber>;
        value: z.ZodNumber;
        sink: z.ZodDefault<z.ZodOptional<z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
            type: z.ZodString;
            variant: z.ZodEnum<["source", "sink", "source-transformer", "sink-transformer"]>;
            valueType: z.ZodString;
            props: z.ZodAny;
            transfer: z.ZodOptional<z.ZodArray<z.ZodType<ArrayBuffer, z.ZodTypeDef, ArrayBuffer>, "many">>;
        }, {
            variant: z.ZodLiteral<"sink">;
        }>, {
            valueType: z.ZodLiteral<"number">;
        }>, "strip", z.ZodTypeAny, {
            type: string;
            valueType: "number";
            variant: "sink";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        }, {
            type: string;
            valueType: "number";
            variant: "sink";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        }>>>;
        source: z.ZodDefault<z.ZodOptional<z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
            type: z.ZodString;
            variant: z.ZodEnum<["source", "sink", "source-transformer", "sink-transformer"]>;
            valueType: z.ZodString;
            props: z.ZodAny;
            transfer: z.ZodOptional<z.ZodArray<z.ZodType<ArrayBuffer, z.ZodTypeDef, ArrayBuffer>, "many">>;
        }, {
            variant: z.ZodLiteral<"source">;
        }>, {
            valueType: z.ZodLiteral<"number">;
        }>, "strip", z.ZodTypeAny, {
            type: string;
            valueType: "number";
            variant: "source";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        }, {
            type: string;
            valueType: "number";
            variant: "source";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        }>>>;
    }, "strip", z.ZodTypeAny, {
        value: number;
        source: {
            type: string;
            valueType: "number";
            variant: "source";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        };
        trigger: number;
        sink: {
            type: string;
            valueType: "number";
            variant: "sink";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        };
        command?: number | undefined;
    }, {
        value: number;
        trigger: number;
        source?: {
            type: string;
            valueType: "number";
            variant: "source";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        } | undefined;
        sink?: {
            type: string;
            valueType: "number";
            variant: "sink";
            props?: any;
            transfer?: ArrayBuffer[] | undefined;
        } | undefined;
        command?: number | undefined;
    }>;
    afterUpdate(): Promise<void>;
    private reportError;
    private updateValue;
    afterDelete(): Promise<void>;
    private internalAfterDelete;
    render(): Promise<void>;
}
export declare const REGISTRY: aether.ComponentRegistry;
export {};
//# sourceMappingURL=setpoint.d.ts.map