import * as PIXI from 'pixi.js';
export declare type ShapeTextureType = {
    texture?: PIXI.Texture;
    matrix?: PIXI.Matrix;
    setTexture: (texture?: PIXI.Texture) => void;
    setMatrix: (matrix?: PIXI.Matrix) => void;
};
export declare type FillDefinition = FillStyleType & TextureStyleType;
export declare type LineDefinition = LineStyleType & TextureStyleType;
export declare type ShapeStyleType = {
    fill?: FillDefinition;
    line?: LineDefinition;
    holes?: ShapeType[];
    setFillStyle: (fill?: FillDefinition) => void;
    setLineStyle: (line?: LineDefinition) => void;
    setHoles: (holes?: ShapeType[]) => void;
};
export declare enum LineJoin {
    Miter = "miter",
    Round = "round",
    Bevel = "bevel"
}
export declare enum LineCap {
    Butt = "butt",
    Round = "round",
    Square = "square"
}
export declare enum ShapeAction {
    UpdateShape = 0,
    RemoveShape = 1
}
export declare type GraphicsState = {
    shapes: string[];
    shapeMap: Map<string, DrawShapeDefinition>;
};
export declare type ShapeActionType = {
    type: ShapeAction;
    id: string;
    definition?: DrawShapeDefinition;
};
export declare enum Shapes {
    Path = 0,
    Circle = 1,
    Ellipse = 2,
    Polygon = 3,
    Rect = 4,
    RoundedRect = 5,
    Star = 6,
    Arc = 7,
    ArcCurve = 8,
    BezierCurve = 9,
    QuadraticCurve = 10
}
export declare type ShapeGenericType = {
    name?: string;
};
export declare type ShapeType = ShapeGenericType & {
    type: Shapes;
    params: number[];
    points?: PIXI.Point[];
};
declare type TextureStyleType = {
    texture?: PIXI.Texture;
    matrix?: PIXI.Matrix;
};
export declare type FillStyleType = {
    alpha?: number;
    color?: number;
};
export declare type LineStyleType = FillStyleType & {
    alignment?: number;
    cap?: LineCap;
    join?: LineJoin;
    miterLimit?: number;
    native?: boolean;
    width?: number;
};
export declare type DrawShapeDefinition = ShapeType & {
    id: string;
    fill?: FillDefinition;
    line?: LineDefinition;
    holes?: ShapeType[];
};
export declare type GraphicsContextType = {
    drawShape: (definition: DrawShapeDefinition) => void;
    removeShape: (id: string) => void;
};
export declare type Coords = {
    x: number;
    y: number;
};
export declare type Area = Coords & {
    width: number;
    height: number;
};
export declare type RectangleType = ShapeGenericType & Area & {
    borderRadius?: number;
};
export declare type CircleType = ShapeGenericType & Coords & {
    radius: number;
};
export declare type QuadraticCurveType = ShapeGenericType & {
    xFrom?: number;
    yFrom?: number;
    xTo: number;
    yTo: number;
    controlX: number;
    controlY: number;
};
export declare type ArcCurveType = QuadraticCurveType & {
    radius: number;
};
export declare type BezierCurveType = QuadraticCurveType & {
    controlX2: number;
    controlY2: number;
};
export declare type ArcType = ShapeGenericType & CircleType & Coords & {
    startAngle: number;
    endAngle: number;
    anticlockwise?: boolean;
};
export declare type EllipseType = ShapeGenericType & Area;
export declare type RegularPolygonType = CircleType & {
    sides?: number;
    rotation?: number;
};
export declare type StarType = CircleType & {
    points?: number;
    innerRadius?: number;
    rotation?: number;
};
export declare type PointProps = Coords & {
    id?: string;
};
export declare type PointsContextType = {
    points: PIXI.Point[];
    addPoint: (id: string, point: Coords) => void;
    removePoint: (id: string) => void;
};
export declare type PointsState = {
    points: string[];
    pointMap: Map<string, Coords>;
};
export declare enum PointAction {
    Add = 0,
    Remove = 1
}
export declare type PointActionType = {
    type: PointAction;
    id: string;
    point?: Coords;
};
export {};
