import { Component, ReactNode } from "react";
import { LogViewer } from "@equinor/videx-wellog";
import { Track } from "@equinor/videx-wellog";
import { Plot } from "@equinor/videx-wellog";
import "!vue-style-loader!css-loader!sass-loader!./styles.scss";
import { WellLog } from "./WellLogTypes";
import { Template } from "./WellLogTemplateTypes";
import { ColorTable } from "./ColorTableTypes";
import { AxesInfo } from "../utils/tracks";
import { TemplatePlot } from "./WellLogTemplateTypes";
import { TemplateTrack } from "./WellLogTemplateTypes";
export declare function addTrack(parent: HTMLElement, wellLogView: WellLogView, onOK: (templateTrack: TemplateTrack) => void): void;
export declare function editTrack(parent: HTMLElement, wellLogView: WellLogView, templateTrack: TemplateTrack, onOK: (templateTrack: TemplateTrack) => void): void;
export interface TrackMouseEvent {
    track: Track;
    type: /*string, */ "click" | "contextmenu" | "dblclick";
    area: /*string, */ "title" | "legend" | "container";
    plot: Plot | null;
    element: HTMLElement;
    ev: Event;
}
export interface WellLogController {
    zoomContentTo(domain: [number, number]): boolean;
    scrollContentTo(f: number): boolean;
    zoomContent(zoom: number): void;
    selectContent(selection: [number | undefined, number | undefined]): void;
    setContentBaseDomain(domain: [number, number]): void;
    getContentBaseDomain(): [number, number];
    getContentDomain(): [number, number];
    getContentZoom(): number;
    getContentSelection(): [number | undefined, number | undefined];
    scrollTrackTo(pos: number): void;
    scrollTrackBy(delta: number): void;
    getTrackScrollPos(): number;
    getTrackScrollPosMax(): number;
    getTrackZoom(): number;
    setSelectedTrackIndeces(selection: number[]): boolean;
    getSelectedTrackIndeces(): number[];
    setTemplate(template: Template): void;
    getTemplate(): Template;
}
import { Info } from "./InfoTypes";
interface Props {
    /**
     * Array of JSON objects describing well log data.
     */
    welllog: WellLog;
    /**
     * Prop containing track template data.
     */
    template: Template;
    /**
     * Prop containing color table data.
     */
    colorTables: ColorTable[];
    /**
     * Orientation of the track plots on the screen.
     */
    horizontal?: boolean;
    primaryAxis: string;
    /**
     * Show Titles on the tracks
     */
    hideTitles?: boolean;
    /**
     * Hide Legends on the tracks
     */
    hideLegend?: boolean;
    axisTitles: Record<string, string>;
    axisMnemos: Record<string, string[]>;
    maxVisibleTrackNum?: number;
    maxContentZoom?: number;
    /**
     * Validate JSON datafile against schems
     */
    checkDatafileSchema?: boolean;
    onCreateController?: (controller: WellLogController) => void;
    onInfo?: (x: number, logController: LogViewer, iFrom: number, iTo: number) => void;
    /**
     * called when track scrolling is changed
     */
    onTrackScroll?: () => void;
    /**
     * called when track selection is changed
     */
    onTrackSelection?: () => void;
    /**
     * called when content zoom and scrolling are changed
     */
    onContentRescale?: () => void;
    /**
     * called when content zoom and scrolling are changed
     */
    onContentSelection?: () => void;
    /**
     * called when mouse click on a track
     */
    onTrackMouseEvent?: (wellLogView: WellLogView, ev: TrackMouseEvent) => void;
    /**
     * called when template is changed
     */
    onTemplateChanged?: () => void;
}
interface State {
    infos: Info[];
    scrollTrackPos: number;
    errorText?: string;
}
declare class WellLogView extends Component<Props, State> implements WellLogController {
    container?: HTMLElement;
    logController?: LogViewer;
    selCurrent: number | undefined;
    selPinned: number | undefined;
    selPersistent: boolean | undefined;
    template: Template;
    constructor(props: Props);
    componentDidMount(): void;
    shouldComponentUpdate(nextProps: Props, nextState: State): boolean;
    componentDidUpdate(prevProps: Props, prevState: State): void;
    createLogViewer(): void;
    getAxesInfo(): AxesInfo;
    setTracks(checkSchema?: boolean): void;
    findTrackById(trackId: string | number): Track | undefined;
    /**
      Display current state of track scrolling
      */
    onTrackScroll(): void;
    onTrackSelection(): void;
    setInfo(x?: number): void;
    onContentRescale(): void;
    onContentSelection(): void;
    onTrackMouseEvent(ev: TrackMouseEvent): void;
    onTemplateChanged(): void;
    zoomContentTo(domain: [number, number]): boolean;
    scrollContentTo(f: number): boolean;
    zoomContent(zoom: number): boolean;
    showSelection(): void;
    selectContent(selection: [number | undefined, number | undefined]): void;
    setContentBaseDomain(domain: [number, number]): void;
    getContentBaseDomain(): [number, number];
    getContentDomain(): [number, number];
    getContentZoom(): number;
    getContentSelection(): [number | undefined, number | undefined];
    _graphTrackMax(): number;
    _newTrackScrollPos(pos: number): number;
    _maxVisibleTrackNum(): number;
    scrollTrackBy(delta: number): void;
    scrollTrackTo(pos: number): void;
    getTrackScrollPos(): number;
    getTrackScrollPosMax(): number;
    getTrackZoom(): number;
    getSelectedTrackIndeces(): number[];
    setSelectedTrackIndeces(selection: number[]): boolean;
    getTemplate(): Template;
    setTemplate(template: Template): void;
    _generateTemplate(): Template;
    _addTrack(trackCurrent: Track, templateTrack: TemplateTrack): void;
    _editTrack(track: Track, templateTrack: TemplateTrack): void;
    removeTrack(track: Track): void;
    isTrackSelected(track: Track): boolean;
    selectTrack(track: Track, selected: boolean): boolean;
    addTrackPlot(track: Track, templatePlot: TemplatePlot): void;
    _editTrackPlot(track: Track, plot: Plot, _templatePlot: TemplatePlot): void;
    removeTrackPlot(track: Track, plot: Plot): void;
    addTrack(parent: HTMLElement | null, trackCurrent: Track): void;
    editTrack(parent: HTMLElement | null, track: Track): void;
    addPlot(parent: HTMLElement | null, track: Track): void;
    editPlot(parent: HTMLElement | null, track: Track, plot: Plot): void;
    render(): ReactNode;
}
export default WellLogView;
