import { TrackOptions, Transform, OnMountEvent, OnUnmountEvent, OnUpdateEvent, OnRescaleEvent } from './interfaces';
import { D3Selection, Scale } from '../common/interfaces';
import { LegendTriggerFunction } from '../utils/legend-helper';
/**
 * Abstract base class for wellog tracks
 */
export default abstract class Track<TRACK_OPTIONS extends TrackOptions = TrackOptions> {
    options: TRACK_OPTIONS;
    id: string | number;
    elm: HTMLElement;
    loader: D3Selection;
    transform: Transform;
    scale: Scale;
    error: Error | string;
    order: number;
    legendUpdate?: LegendTriggerFunction;
    protected _data: any;
    protected _isLoading: boolean;
    protected _mounted: boolean;
    constructor(id: string | number, options?: TRACK_OPTIONS);
    /**
     * Calls OnMount and OnUpdate. Useful if track is stand-alone
     */
    init(elm: HTMLElement, scale: Scale): void;
    /**
     * Handler for onMount event. Called by container when track DOM element
     * is added to the DOM model.
     */
    onMount(trackEvent: OnMountEvent): void;
    /**
     * Handler for onUnmount event. Called when track DOM-element is remove from the
     * DOM model. Typically, trackEvent will be an empty object, but depends on container.
     */
    onUnmount(trackEvent?: OnUnmountEvent): void;
    /**
     * Handler for onChange event. Called by container when track is resized.
     */
    onUpdate(trackEvent: OnUpdateEvent): void;
    /**
     * Handler for onRescale event. Called by container when y-scale domain/transform is changed.
     */
    onRescale(trackEvent: OnRescaleEvent): void;
    /**
     * Should be called from track implementation in case an
     * unrecoverable error occurs.
     */
    onError(error: Error | string): void;
    onDataLoaded(data?: any): void;
    /**
     * Initiate loading of data for track. Will set response to the track's
     * data property. If showLoader is set to true, the current track will be
     * hidden, and (if supplied) the loader element will be shown, until data
     * is resolved. Calls onDataLoaded if implemented by track.
     */
    loadData(data: Promise<any> | Function | any, showLoader?: boolean): void;
    clearData(): void;
    /**
     * Allow triggering of update event without parameters
     */
    refresh(): void;
    get isLoading(): boolean;
    set isLoading(val: boolean);
    get isMounted(): boolean;
    get data(): any;
    set data(data: Promise<any> | Function | any);
}
