import * as d3 from 'd3';
export type Marker = {
    id: string;
    label: string;
    x: number;
    y: number;
    u: number;
    v: number;
    xm: number | null;
    ym: number | null;
    zm: number | null;
    colour: string;
    opacity: number;
    feature: string;
    group: string | null;
    show: boolean;
    update: boolean;
};
export type Measurement = {
    id: string;
    label: string;
    x: number;
    y: number;
    u: number;
    v: number;
    from: string;
    to: string;
    distance: number;
    slope: number;
    text: string | null;
};
export interface CursorMoveEvent extends CustomEvent {
    detail: {
        rangeCoords: [number, number];
        domainCoords: [number, number];
    };
}
export interface ChangeDomainEvent extends CustomEvent {
    detail: {
        xDomain: [number, number];
        yDomain: [number, number];
    };
}
export interface ChangeMarkersEvent extends CustomEvent {
    detail: {
        markers: Marker[];
    };
}
export interface ChangeMeasurementsEvent extends CustomEvent {
    detail: {
        measurements: Measurement[];
    };
}
export declare class Scatterplot {
    private readonly vertexShaderSource;
    private readonly fragmentShaderSource;
    boundingBox: {
        xMin: number;
        xMax: number;
        yMin: number;
        yMax: number;
    };
    pointSize: number;
    groupID: string;
    measure: boolean;
    draw: boolean;
    gridVisible: boolean;
    backgroundColor: [number, number, number, number];
    xGridColor: [number, number, number, number];
    yGridColor: [number, number, number, number];
    xDomain: [number, number];
    yDomain: [number, number];
    verticalExaggeration: number;
    markers: Marker[];
    measurements: Measurement[];
    canvasScalingFactor: number;
    cx0: number | null;
    cy0: number | null;
    x0: number;
    y0: number;
    annotationPadX: number;
    annotationPadY: number;
    annotationGapY: number;
    parent: HTMLDivElement;
    canvas: d3.Selection<HTMLCanvasElement, unknown, null, unknown>;
    containerSVG: d3.Selection<SVGSVGElement, unknown, null, unknown>;
    private readonly margins;
    private xy;
    private rgb;
    private drag;
    private measurementsSVG;
    private pointsSVG;
    private markerLabelBoxesSVG;
    private markerLabelsSVG;
    private measurementLabelBoxesSVG;
    private measurementLabelsSVG;
    private zoom;
    private xAxis;
    private yAxis;
    private xGrid;
    private yGrid;
    private draggedElement;
    private cursorMoveEvent;
    private domainEvent;
    private drawEvent;
    private measureEvent;
    private gl;
    private shaderProgram;
    private pointsize_uniform;
    private offset_uniform;
    private range_uniform;
    private matrix_uniform;
    private vertex_attrib;
    private color_attrib;
    private vertexBuffer;
    private colorBuffer;
    private indexBuffer;
    private currentIndex;
    constructor(parent: HTMLDivElement, margins: {
        left: number;
        right: number;
        top: number;
        bottom: number;
    }, xy: Float32Array, rgb: Uint8Array);
    private initializeD3;
    private initializeWebGL;
    private initializeEvents;
    get measurementPoints(): Marker[];
    get height(): number;
    get width(): number;
    get innerWidth(): number;
    get innerHeight(): number;
    get xRange(): [number, number];
    get yRange(): [number, number];
    get domainWidth(): number;
    get domainHeight(): number;
    get domainAspectRatio(): number;
    get rangeAspectRatio(): number;
    get xDomainAdjusted(): [number, number];
    get yDomainAdjusted(): [number, number];
    get xScale(): d3.ScaleLinear<number, number>;
    get yScale(): d3.ScaleLinear<number, number>;
    get nPoints(): number;
    get zoomTransform(): d3.ZoomTransform;
    updateBody(): void;
    updateCanvas(): void;
    appendAxis(id: string): void;
    updateXAxis(): void;
    updateYAxis(): void;
    updateXGrid(): void;
    updateYGrid(): void;
    updateBoundingBox(): void;
    updatePoints(xy: Float32Array): void;
    updateColors(rgb: Uint8Array): void;
    updateColorsSlice(slice: Uint8Array, offset: number): void;
    updateIndex(index: Uint32Array): void;
    updatePaths(): void;
    updateMarkers(): void;
    appendMarker(id: string, coords: [number, number]): void;
    updateMeasurements(): void;
    printMeasurementLabel(distance: number, slope: number): string;
    updateLabels(): void;
    setGridVisibility(val: boolean): void;
    setBackgroundColor(val: string): void;
    handleZoom(_e: d3.D3ZoomEvent<HTMLCanvasElement, unknown>): void;
    setZoom(tf: {
        k: number;
        tx: number;
        ty: number;
    }): void;
    resetZoom(): void;
    getDraggedElement(event: Event): SVGCircleElement;
    updateDraggedElements(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
    dragstarted(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
    dragged(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
    dragended(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
    updatePointSize(val: number): void;
    updateVerticalExaggeration(val: number): void;
    toggleAnnotation(val: boolean): void;
    deleteAllMarkers(): void;
    deleteMarker(id: string): void;
    toggleMeasurement(val: boolean): void;
    addMeasurement(id: string): void;
    deleteAllMeasurements(): void;
    updatePlot(): void;
    resetPlot(): void;
    generateId(markers: Marker[]): string;
    clearGLPoints(): void;
    initializeGL(): void;
    multiplyMatrix(a: Float32Array, b: Float32Array): Float32Array;
    createOrthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Float32Array;
    createTranslation(tx: number, ty: number, tz: number): Float32Array;
    createScale(sx: number, sy: number, sz: number): Float32Array;
    updateTransform(): void;
    GLShader(gl: WebGL2RenderingContext, type: GLenum, code: string): WebGLShader;
    GLProgram(gl: WebGL2RenderingContext, vertex_source: string, fragment_source: string): WebGLProgram;
}
