import { Point2D, ColorRGB } from '@obliczeniowo/elementary/classes';
import * as i0 from '@angular/core';
import { AfterViewInit, ElementRef } from '@angular/core';
import * as i2 from '@angular/common';

declare class Style {
    styles: any;
    toString(): string;
    constructor(styleObject: any);
}

declare class SvgGroup {
    id: string;
    svgGroupContainer: SVGGElement;
    constructor(id?: string, style?: Style | string);
    append(child: any): void;
    clear(): void;
}

declare abstract class Transform {
    abstract toString(): string;
}
declare class Rotate extends Transform {
    rotatePoint: Point2D | null;
    angle: number;
    constructor(angle: number, rotatePoint?: Point2D | null);
    toString(): string;
}

declare class SvgText {
    svg: SVGTextElement;
    rotate: Rotate;
    setText(text: string): void;
    constructor(x: number, y: number, text: string, style: Style, id: string, rotate: Rotate, svgContainer: SVGElement | SvgGroup);
    show(display: boolean): void;
    private set _transform(value);
    get transform(): string | null;
    setX(x: number): void;
    setY(y: number): void;
}

declare class PostDiagramValue {
    key: string;
    private readonly postsGroup;
    private readonly valuesGroup;
    private readonly keysGroup;
    diagramValue: number;
    private readonly svgPost;
    valueText: SvgText;
    keyText: SvgText;
    private readonly legendContainer;
    private readonly legendKey;
    set setColor(color: any);
    constructor(key: string, diagramValue: number, postsGroup: SvgGroup, valuesGroup: SvgGroup, keysGroup: SvgGroup, legendContainer: HTMLElement);
    setPost(x: number, y: number, width: number, k: number): void;
    getValue(): number;
    setValue(value: number, k: number): void;
    toString(): string;
}

declare class SvgPolyline {
    svg: SVGPolylineElement;
    points: Point2D[];
    constructor(id: string, style: Style, svgContainer: SVGElement | SvgGroup, type?: string);
    addPoint(x: number, y: number): void;
    clearPoints(): void;
}

declare class SvgPolygon {
    svg: SVGPolygonElement;
    points: Point2D[];
    constructor(id: string, style: Style, svgContainer: SVGElement | SvgGroup);
    addPoint(x: number, y: number): void;
    clearPoints(): void;
}

interface ScaleValue {
    line: SvgPolyline;
    value: SvgText;
}
declare class SvgPostDiagram {
    values: PostDiagramValue[];
    svgContainer: SVGSVGElement;
    legendContainer: HTMLElement;
    private readonly postsGroup;
    private readonly valuesGroup;
    private readonly keysGroup;
    private readonly greedGroup;
    private _displayPostKeys;
    private _diagramHeight;
    dy: number;
    diagramWidth: number;
    diagramPos: Point2D;
    base: SvgPolygon;
    leftScalePlain: SvgPolygon;
    backScalePlain: SvgPolygon;
    scaleLines: ScaleValue[];
    scaleBase: SvgText;
    private displayText;
    private valuesColor;
    private readonly scaleColor;
    id: string;
    private _colorFunction;
    set colorFunction(colorFunction: (index: number, dataLength: number, value: number, max: number) => ColorRGB);
    constructor(id: string, data: any, svgContainer: SVGSVGElement, legendContainer: HTMLElement);
    get diagramHeight(): number;
    displayPostKeys(display: boolean): void;
    getMax(): number;
    setValueColor(valuesColor: ColorRGB): void;
    private clearHtml;
    setDiagramValues(data: {
        [key: string]: number;
    }): void;
    get postWidth(): number;
    private _refreshBase;
    private _refreshLeftScalePlain;
    private _refreshBackScalePlain;
    private _refreshScale;
    refresh(): void;
    toString(): string;
    setDisplayValue(value: boolean): void;
    setValue(value: number, index: number): void;
}

declare class PostDiagramComponent implements AfterViewInit {
    yLabel: string;
    xLabel: string;
    diagramTitle: string;
    private _diagramData;
    svgContainer: ElementRef;
    diagramLegend: ElementRef;
    set diagramData(diagramData: {
        [key: string]: number;
    });
    svgDiagram: SvgPostDiagram;
    private _colorFunctionRef;
    set colorFunction(colorFunctionRef: (index: number, dataLength: number, value: number, max: number) => ColorRGB);
    ngAfterViewInit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<PostDiagramComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PostDiagramComponent, "obl-post-diagram", never, { "yLabel": { "alias": "yLabel"; "required": false; }; "xLabel": { "alias": "xLabel"; "required": false; }; "diagramTitle": { "alias": "diagramTitle"; "required": false; }; "diagramData": { "alias": "diagramData"; "required": false; }; "colorFunction": { "alias": "colorFunction"; "required": false; }; }, {}, never, never, false, never>;
}

declare class PostDiagramModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<PostDiagramModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<PostDiagramModule, [typeof PostDiagramComponent], [typeof i2.CommonModule], [typeof PostDiagramComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<PostDiagramModule>;
}

declare class SvgRect {
    svg: SVGRectElement;
    constructor(x: number, y: number, width: number, height: number, id: string, svgContainer: SVGElement | SvgGroup, style?: Style | string);
    setX(x: string | number): void;
    setY(y: string | number): void;
    setWidth(width: string | number): void;
    setHeight(height: string | number): void;
}

export { PostDiagramComponent, PostDiagramModule, Rotate, Style, SvgGroup, SvgRect, SvgText, Transform };
