import { type box, type xy } from "@synnaxlabs/x";
import { z } from "zod";
import { color } from '../../color/core';
import { type TickFactoryContext } from './ticks';
export interface RenderResult {
    size: number;
}
export declare const axisStateZ: z.ZodObject<{
    tickSpacing: z.ZodDefault<z.ZodNumber>;
    color: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodType<color.Color, z.ZodTypeDef, color.Color>, z.ZodObject<{
        rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
    }, "strip", z.ZodTypeAny, {
        rgba255: [number, number, number, number];
    }, {
        rgba255: [number, number, number, number];
    }>]>, color.Color, string | [number, number, number, number] | {
        rgba255: [number, number, number, number];
    } | color.Color | [number, number, number]>;
    type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["linear", "time"]>>>;
    font: z.ZodString;
    showGrid: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    location: z.ZodEnum<["top", "right", "bottom", "left"]>;
    gridColor: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodType<color.Color, z.ZodTypeDef, color.Color>, z.ZodObject<{
        rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
    }, "strip", z.ZodTypeAny, {
        rgba255: [number, number, number, number];
    }, {
        rgba255: [number, number, number, number];
    }>]>, color.Color, string | [number, number, number, number] | {
        rgba255: [number, number, number, number];
    } | color.Color | [number, number, number]>;
}, "strip", z.ZodTypeAny, {
    type: "time" | "linear";
    color: color.Color;
    font: string;
    location: "bottom" | "left" | "right" | "top";
    tickSpacing: number;
    showGrid: boolean;
    gridColor: color.Color;
}, {
    color: string | [number, number, number, number] | {
        rgba255: [number, number, number, number];
    } | color.Color | [number, number, number] | (string & [number, number, number, number]) | (string & {
        rgba255: [number, number, number, number];
    }) | (string & color.Color) | (string & [number, number, number]) | ([number, number, number, number] & string) | ([number, number, number, number] & {
        rgba255: [number, number, number, number];
    }) | ([number, number, number, number] & color.Color) | ({
        rgba255: [number, number, number, number];
    } & string) | ({
        rgba255: [number, number, number, number];
    } & [number, number, number, number]) | ({
        rgba255: [number, number, number, number];
    } & color.Color) | ({
        rgba255: [number, number, number, number];
    } & [number, number, number]) | (color.Color & string) | (color.Color & [number, number, number, number]) | (color.Color & {
        rgba255: [number, number, number, number];
    }) | (color.Color & [number, number, number]) | ([number, number, number] & string) | ([number, number, number] & {
        rgba255: [number, number, number, number];
    }) | ([number, number, number] & color.Color);
    font: string;
    location: "bottom" | "left" | "right" | "top";
    gridColor: string | [number, number, number, number] | {
        rgba255: [number, number, number, number];
    } | color.Color | [number, number, number] | (string & [number, number, number, number]) | (string & {
        rgba255: [number, number, number, number];
    }) | (string & color.Color) | (string & [number, number, number]) | ([number, number, number, number] & string) | ([number, number, number, number] & {
        rgba255: [number, number, number, number];
    }) | ([number, number, number, number] & color.Color) | ({
        rgba255: [number, number, number, number];
    } & string) | ({
        rgba255: [number, number, number, number];
    } & [number, number, number, number]) | ({
        rgba255: [number, number, number, number];
    } & color.Color) | ({
        rgba255: [number, number, number, number];
    } & [number, number, number]) | (color.Color & string) | (color.Color & [number, number, number, number]) | (color.Color & {
        rgba255: [number, number, number, number];
    }) | (color.Color & [number, number, number]) | ([number, number, number] & string) | ([number, number, number] & {
        rgba255: [number, number, number, number];
    }) | ([number, number, number] & color.Color);
    tickSpacing?: number | undefined;
    type?: "time" | "linear" | undefined;
    showGrid?: boolean | undefined;
}>;
export type AxisState = z.input<typeof axisStateZ>;
export type ParsedAxisState = z.output<typeof axisStateZ>;
export interface AxisProps extends Omit<TickFactoryContext, "size"> {
    plot: box.Box;
    position: xy.XY;
    size: number;
}
export interface Axis {
    setState: (state: AxisState) => void;
    render: (props: AxisProps) => RenderResult;
}
