import { PointModel } from './../primitives/point-model';
import { TextOverflow, TextWrap, Scale, ImageAlignment } from '../enum/enum';
import { GradientModel } from '../core/appearance-model';
import { PdfAnnotationType } from '../../drawing';
/**
 * @hidden
 * canvas interface
 */
export interface StyleAttributes {
    fill: string;
    stroke: string;
    strokeWidth: number;
    dashArray: string;
    opacity: number;
    gradient?: GradientModel;
    class?: string;
    thickness?: number;
    isSharpEdge?: boolean;
}
/**
 * @hidden
 * BaseAttributes interface
 */
export interface BaseAttributes extends StyleAttributes {
    id: string;
    x: number;
    y: number;
    width: number;
    height: number;
    angle: number;
    pivotX: number;
    pivotY: number;
    visible: boolean;
    description?: string;
    canApplyStyle?: boolean;
    relativeMode?: string;
    isEJ2?: boolean;
    isRectangle?: boolean;
    annotationType?: PdfAnnotationType;
}
/**
 * @hidden
 * LineAttributes interface
 */
export interface LineAttributes extends BaseAttributes {
    startPoint: PointModel;
    endPoint: PointModel;
}
/**
 * @hidden
 * CircleAttributes interface
 */
export interface CircleAttributes extends BaseAttributes {
    centerX: number;
    centerY: number;
    radius: number;
    id: string;
}
/**
 * @hidden
 * Alignment interface
 */
export interface Alignment {
    vAlign?: string;
    hAlign?: string;
}
/**
 * @hidden
 * SegmentInfo interface
 */
export interface SegmentInfo {
    point?: PointModel;
    index?: number;
    angle?: number;
}
/**
 * @hidden
 * RectAttributes interface
 */
export interface RectAttributes extends BaseAttributes {
    cornerRadius?: number;
}
/**
 * @hidden
 * PathAttributes interface
 */
export interface PathAttributes extends BaseAttributes {
    data: string;
}
/**
 * @hidden
 * TextAttributes interface
 */
export interface TextAttributes extends BaseAttributes {
    isShapeLabel: boolean;
    freeTextSelectorWidth: number;
    whiteSpace: string;
    content: string;
    breakWord: string;
    fontSize: number;
    textWrapping: TextWrap;
    fontFamily: string;
    bold: boolean;
    italic: boolean;
    textAlign: string;
    color: string;
    textOverflow: TextOverflow;
    textDecoration: string;
    doWrap: boolean;
    wrapBounds: TextBounds;
    childNodes: SubTextElement[];
    thickness: number;
}
/**
 * @hidden
 * SubTextElement interface
 */
export interface SubTextElement {
    text: string;
    x: number;
    dy: number;
    width: number;
}
/**
 * @hidden
 * TextBounds interface
 */
export interface TextBounds {
    x: number;
    width: number;
}
/**
 * @hidden
 * PathSegment interface
 */
export interface PathSegment {
    command?: string;
    angle?: number;
    largeArc?: boolean;
    x2?: number;
    sweep?: boolean;
    x1?: number;
    y1?: number;
    y2?: number;
    x0?: number;
    y0?: number;
    x?: number;
    y?: number;
    r1?: number;
    r2?: number;
    centp?: {
        x?: number;
        y?: number;
    };
    xAxisRotation?: number;
    rx?: number;
    ry?: number;
    a1?: number;
    ad?: number;
}
/**
 * @hidden
 * ImageAttributes interface
 */
export interface ImageAttributes extends BaseAttributes {
    source: string;
    sourceX: number;
    sourceY: number;
    sourceWidth: number;
    sourceHeight: number;
    scale: Scale;
    alignment: ImageAlignment;
    printID?: string;
}
/**
 * @hidden
 * ImageEntry interface
 */
export interface ImageEntry {
    id: string;
    image: HTMLImageElement;
    canvasId: string;
}
