import { color, scale, xy } from '@synnaxlabs/x';
import { z } from 'zod';
import { aether } from '../../../aether/aether';
import { telem } from '../../../telem/aether';
import { text } from '../../../text/core';
import { theming } from '../../../theming/aether';
import { Element } from '../../diagram/aether/Diagram';
import { Draw2D } from '../../draw2d';
import { render } from '../../render';
export declare const GAUGE_SIZES: {
    readonly small: 80;
    readonly medium: 120;
    readonly large: 160;
    readonly huge: 200;
};
export type GaugeSize = keyof typeof GAUGE_SIZES;
export declare const gaugeSizeZ: z.ZodEnum<{
    small: "small";
    medium: "medium";
    large: "large";
    huge: "huge";
}>;
declare const gaugeState: z.ZodObject<{
    box: z.ZodObject<{
        one: z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
        }, z.core.$strip>;
        two: z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
        }, z.core.$strip>;
        root: z.ZodObject<{
            x: z.ZodEnum<{
                right: "right";
                left: "left";
            }>;
            y: z.ZodEnum<{
                top: "top";
                bottom: "bottom";
            }>;
        }, z.core.$strip>;
    }, z.core.$strip>;
    telem: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        type: z.ZodString;
        props: z.ZodAny;
        transfer: z.ZodOptional<z.ZodArray<z.ZodCustom<ArrayBuffer, ArrayBuffer>>>;
        variant: z.ZodLiteral<"source">;
        valueType: z.ZodLiteral<"string">;
    }, z.core.$strip>>>;
    backgroundTelem: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        type: z.ZodString;
        props: z.ZodAny;
        transfer: z.ZodOptional<z.ZodArray<z.ZodCustom<ArrayBuffer, ArrayBuffer>>>;
        variant: z.ZodLiteral<"source">;
        valueType: z.ZodLiteral<"color">;
    }, z.core.$strip>>>;
    level: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
        small: "small";
        h1: "h1";
        h2: "h2";
        h3: "h3";
        h4: "h4";
        h5: "h5";
        p: "p";
    }>>>;
    color: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
        rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
    }, z.core.$strip>]>, z.ZodTransform<[number, number, number, number], string | [number, number, number] | [number, number, number, number] | {
        rgba255: [number, number, number, number];
    }>>>>;
    precision: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    minWidth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    width: z.ZodOptional<z.ZodNumber>;
    notation: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
        standard: "standard";
        scientific: "scientific";
        engineering: "engineering";
    }>>>;
    location: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        x: z.ZodUnion<[z.ZodEnum<{
            right: "right";
            left: "left";
        }>, z.ZodEnum<{
            center: "center";
        }>]>;
        y: z.ZodUnion<[z.ZodEnum<{
            top: "top";
            bottom: "bottom";
        }>, z.ZodEnum<{
            center: "center";
        }>]>;
    }, z.core.$strip>>>;
    units: z.ZodDefault<z.ZodOptional<z.ZodString>>;
    bounds: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        lower: z.ZodNumber;
        upper: z.ZodNumber;
    }, z.core.$strip>>>;
    barWidth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
}, z.core.$strip>;
export interface GaugeProps {
    scale?: scale.XY;
}
interface InternalState {
    theme: theming.Theme;
    render: render.Context;
    telem: telem.StringSource;
    draw2d: Draw2D;
    stopListening?: () => void;
    backgroundTelem: telem.ColorSource;
    stopListeningBackground?: () => void;
    requestRender: render.Requestor | null;
    textColor: color.Color;
    strokeColor: color.Color;
    gaugeStartAngle: number;
    gaugeEndAngle: number;
    gaugeAngleRange: number;
    outerRadius: number;
    innerRadius: number;
    labelRadius: number;
    labelInwardShift: number;
    minLabelPos: xy.XY;
    maxLabelPos: xy.XY;
    centerPos: xy.XY;
    valueTextPos: xy.XY;
    unitsTextPos: xy.XY;
    textLevel: text.Level;
    labelLevel: text.Level;
}
export declare class Gauge extends aether.Leaf<typeof gaugeState, InternalState> implements Element {
    static readonly TYPE = "gauge";
    static readonly z: z.ZodObject<{
        box: z.ZodObject<{
            one: z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
            }, z.core.$strip>;
            two: z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
            }, z.core.$strip>;
            root: z.ZodObject<{
                x: z.ZodEnum<{
                    right: "right";
                    left: "left";
                }>;
                y: z.ZodEnum<{
                    top: "top";
                    bottom: "bottom";
                }>;
            }, z.core.$strip>;
        }, z.core.$strip>;
        telem: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            type: z.ZodString;
            props: z.ZodAny;
            transfer: z.ZodOptional<z.ZodArray<z.ZodCustom<ArrayBuffer, ArrayBuffer>>>;
            variant: z.ZodLiteral<"source">;
            valueType: z.ZodLiteral<"string">;
        }, z.core.$strip>>>;
        backgroundTelem: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            type: z.ZodString;
            props: z.ZodAny;
            transfer: z.ZodOptional<z.ZodArray<z.ZodCustom<ArrayBuffer, ArrayBuffer>>>;
            variant: z.ZodLiteral<"source">;
            valueType: z.ZodLiteral<"color">;
        }, z.core.$strip>>>;
        level: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
            small: "small";
            h1: "h1";
            h2: "h2";
            h3: "h3";
            h4: "h4";
            h5: "h5";
            p: "p";
        }>>>;
        color: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
            rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
        }, z.core.$strip>]>, z.ZodTransform<[number, number, number, number], string | [number, number, number] | [number, number, number, number] | {
            rgba255: [number, number, number, number];
        }>>>>;
        precision: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
        minWidth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
        width: z.ZodOptional<z.ZodNumber>;
        notation: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
            standard: "standard";
            scientific: "scientific";
            engineering: "engineering";
        }>>>;
        location: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            x: z.ZodUnion<[z.ZodEnum<{
                right: "right";
                left: "left";
            }>, z.ZodEnum<{
                center: "center";
            }>]>;
            y: z.ZodUnion<[z.ZodEnum<{
                top: "top";
                bottom: "bottom";
            }>, z.ZodEnum<{
                center: "center";
            }>]>;
        }, z.core.$strip>>>;
        units: z.ZodDefault<z.ZodOptional<z.ZodString>>;
        bounds: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            lower: z.ZodNumber;
            upper: z.ZodNumber;
        }, z.core.$strip>>>;
        barWidth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    }, z.core.$strip>;
    schema: z.ZodObject<{
        box: z.ZodObject<{
            one: z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
            }, z.core.$strip>;
            two: z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
            }, z.core.$strip>;
            root: z.ZodObject<{
                x: z.ZodEnum<{
                    right: "right";
                    left: "left";
                }>;
                y: z.ZodEnum<{
                    top: "top";
                    bottom: "bottom";
                }>;
            }, z.core.$strip>;
        }, z.core.$strip>;
        telem: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            type: z.ZodString;
            props: z.ZodAny;
            transfer: z.ZodOptional<z.ZodArray<z.ZodCustom<ArrayBuffer, ArrayBuffer>>>;
            variant: z.ZodLiteral<"source">;
            valueType: z.ZodLiteral<"string">;
        }, z.core.$strip>>>;
        backgroundTelem: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            type: z.ZodString;
            props: z.ZodAny;
            transfer: z.ZodOptional<z.ZodArray<z.ZodCustom<ArrayBuffer, ArrayBuffer>>>;
            variant: z.ZodLiteral<"source">;
            valueType: z.ZodLiteral<"color">;
        }, z.core.$strip>>>;
        level: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
            small: "small";
            h1: "h1";
            h2: "h2";
            h3: "h3";
            h4: "h4";
            h5: "h5";
            p: "p";
        }>>>;
        color: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
            rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
        }, z.core.$strip>]>, z.ZodTransform<[number, number, number, number], string | [number, number, number] | [number, number, number, number] | {
            rgba255: [number, number, number, number];
        }>>>>;
        precision: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
        minWidth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
        width: z.ZodOptional<z.ZodNumber>;
        notation: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
            standard: "standard";
            scientific: "scientific";
            engineering: "engineering";
        }>>>;
        location: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            x: z.ZodUnion<[z.ZodEnum<{
                right: "right";
                left: "left";
            }>, z.ZodEnum<{
                center: "center";
            }>]>;
            y: z.ZodUnion<[z.ZodEnum<{
                top: "top";
                bottom: "bottom";
            }>, z.ZodEnum<{
                center: "center";
            }>]>;
        }, z.core.$strip>>>;
        units: z.ZodDefault<z.ZodOptional<z.ZodString>>;
        bounds: z.ZodDefault<z.ZodOptional<z.ZodObject<{
            lower: z.ZodNumber;
            upper: z.ZodNumber;
        }, z.core.$strip>>>;
        barWidth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    }, z.core.$strip>;
    afterUpdate(ctx: aether.Context): void;
    afterDelete(): void;
    private requestRender;
    render({ viewportScale }: {
        viewportScale?: scale.XY | undefined;
    }): void;
}
export declare const REGISTRY: aether.ComponentRegistry;
export {};
//# sourceMappingURL=gauge.d.ts.map