import { box, direction, xy, type dimensions, location } from "@synnaxlabs/x";
import { type color } from '../../color/core';
import { type text } from '../../text/core';
import { type theming } from '../../theming/aether';
export interface Draw2DLineProps {
    stroke: color.Color;
    lineWidth: number;
    lineDash: number;
    start: xy.XY;
    end: xy.XY;
}
export interface Draw2DRuleProps extends Omit<Draw2DLineProps, "start" | "end"> {
    direction: direction.Direction;
    region: box.Box;
    position: number;
}
export interface Draw2DCircleProps {
    fill: color.Color;
    radius: number;
    position: xy.XY;
}
export interface Draw2DContainerProps {
    region: box.Box;
    bordered?: boolean;
    rounded?: boolean;
    borderColor?: color.Color;
    borderRadius?: number;
    borderWidth?: number;
    backgroundColor?: color.Color;
}
export interface DrawTextProps {
    text: string;
    position: xy.XY;
    level: text.Level;
    direction: direction.Direction;
}
export interface DrawTextInCenterProps extends Omit<DrawTextProps, "position" | "direction"> {
    box: box.Box;
}
export interface Draw2DMeasureTextContainerProps {
    text: string[];
    direction: direction.Direction;
    level: text.Level;
    spacing?: number;
}
export interface Draw2DTextContainerProps extends Omit<Draw2DContainerProps, "region">, Draw2DMeasureTextContainerProps {
    position: xy.XY;
    offset?: xy.XY;
    root?: location.CornerXY;
}
export declare class Draw2D {
    readonly canvas: OffscreenCanvasRenderingContext2D;
    readonly theme: theming.Theme;
    constructor(canvas: OffscreenCanvasRenderingContext2D, theme: theming.Theme);
    rule({ direction, region, position, ...props }: Draw2DRuleProps): void;
    line({ stroke, lineWidth, lineDash, start, end }: Draw2DLineProps): void;
    circle({ fill, radius, position }: Draw2DCircleProps): void;
    container({ region, bordered, rounded, borderColor, borderRadius, borderWidth, backgroundColor, }: Draw2DContainerProps): void;
    textContainer(props: Draw2DTextContainerProps): void;
    spacedTextDrawF({ text, direction: d, spacing, level, }: Draw2DMeasureTextContainerProps): [dimensions.Dimensions, (base: xy.XY) => void];
    drawTextInCenter({ text, box: b, level }: DrawTextInCenterProps): void;
}
