/** @typedef {import('./types').Scale} Scale */
/** @typedef {import('./types').TrackConfig} TrackConfig */
/** @typedef {import('./types').TrackObject} TrackObject */
/** @typedef {import('./types').TilesetInfo} TilesetInfo */
/** @typedef {TrackRenderer["setCenter"]} SetCentersFunction */
/** @typedef {(x: Scale, y: Scale) => [Scale, Scale]} ProjectorFunction */
/**
 * @typedef TrackDefinition
 * @property {TrackConfig} track
 * @property {number} width
 * @property {number} height
 * @property {number} top
 * @property {number} left
 */
/**
 * @typedef MetaPluginTrackContext
 * @property {(trackId: string) => TrackObject | undefined} getTrackObject
 * @property {() => void} onNewTilesLoaded
 * @property {TrackConfig} definition
 */
/**
 * @typedef {Object} PluginTrackContext
 * @property {string} id
 * @property {string} trackUid
 * @property {string} trackType
 * @property {string} viewUid
 * @property {import('pub-sub-es').PubSub} pubSub
 * @property {import("pixi.js").Graphics} scene
 * @property {Record<string, unknown>} dataConfig
 * @property {unknown} dataFetcher
 * @property {() => unknown} getLockGroupExtrema
 * @property {(tilesetInfo: TilesetInfo) => void} handleTilesetInfoReceived
 * @property {() => void} animate
 * @property {HTMLElement} svgElement
 * @property {() => boolean} isValueScaleLocked
 * @property {() => void} onValueScaleChanged
 * @property {(newOption: Record<string, unknown>) => void} onTrackOptionsChanged
 * @property {() => void} onMouseMoveZoom
 * @property {string=} chromInfoPath
 * @property {() => boolean} isShowGlobalMousePosition
 * @property {() => import('./types').Theme} getTheme
 * @property {unknown=} AVAILABLE_FOR_PLUGINS
 * @property {(HTMLDivElement | null)=} baseEl
 * @property {TrackConfig=} definition
 * @property {number=} x
 * @property {number=} y
 * @property {number=} xPosition
 * @property {number=} yPosition
 * @property {[number, number]=} projectionXDomain
 * @property {[number, number]=} projectionYDomain
 * @property {unknown=} registerViewportChanged
 * @property {unknown=} removeViewportChanged
 * @property {unknown=} setDomainsCallback
 * @property {TrackConfig[]=} tracks
 * @property {TrackRenderer["createTrackObject"]=} createTrackObject
 * @property {string=} orientation
 * @property {boolean=} isOverlay
 */
/**
 * @typedef PluginTrack
 * @property {{ new (availableForPlugins: unknown, context: PluginTrackContext, options: Record<string, unknown>): TrackObject }} track
 * @property {false=} isMetaTrack
 */
/**
 * @typedef MetaPluginTrack
 * @property {{ new (availableForPlugins: unknown, context: MetaPluginTrackContext, options: Record<string, unknown>): TrackObject }} track
 * @property {true} isMetaTrack
 */
/**
 * @template T
 * @typedef {T & { __zoom?: import('d3-zoom').ZoomTransform }} WithZoomTransform
 */
/**
 * @typedef TrackRendererProps
 * @property {HTMLElement} canvasElement
 * @property {number} centerHeight
 * @property {number} centerWidth
 * @property {Array<JSX.Element>} children
 * @property {number} galleryDim
 * @property {number} height
 * @property {[number, number]} initialXDomain
 * @property {[number, number]} initialYDomain
 * @property {boolean} isShowGlobalMousePosition
 * @property {boolean} isRangeSelection
 * @property {number} leftWidth
 * @property {number} leftWidthNoGallery
 * @property {number} paddingLeft
 * @property {number} paddingTop
 * @property {Array<TrackConfig>} metaTracks
 * @property {() => void} onMouseMoveZoom
 * @property {(trackId?: string) => void} onNewTilesLoaded
 * @property {(x: Scale, y: Scale) => void} onScalesChanged
 * @property {import("pixi.js").Renderer} pixiRenderer
 * @property {import("pixi.js").Container} pixiStage
 * @property {Record<string, unknown>} pluginDataFetchers
 * @property {Record<string, PluginTrack | MetaPluginTrack>} pluginTracks
 * @property {Array<TrackDefinition>} positionedTracks
 * @property {import('pub-sub-es').PubSub} pubSub
 * @property {(func: SetCentersFunction) => void} setCentersFunction
 * @property {HTMLElement} svgElement
 * @property {import('./types').Theme} theme
 * @property {number} topHeight
 * @property {number} topHeightNoGallery
 * @property {{ backgroundColor?: string }} viewOptions
 * @property {number} width
 * @property {[number, number]} xDomainLimits
 * @property {[number, number]} yDomainLimits
 * @property {boolean} valueScaleZoom
 * @property {boolean} zoomable
 * @property {[number, number]} zoomDomain
 * @property {[number, number]} zoomLimits
 * @property {string} uid
 * @property {boolean} dragging
 * @property {(func: (draggingStatus: boolean) => void) => void} registerDraggingChangedListener
 * @property {boolean} disableTrackMenu
 * @property {(listener: (draggingStatus: boolean) => void) => void} removeDraggingChangedListener
 * @property {(trackId: string, tilesetInfo: TilesetInfo) => void} onTilesetInfoReceived
 * @property {(trackId: string) => unknown} getLockGroupExtrema
 * @property {(trackId: string) => boolean} isValueScaleLocked
 * @property {(trackId: string) => void} onValueScaleChanged
 * @property {(trackId: string, newOption: Record<string, unknown>) => void} onTrackOptionsChanged
 */
/**
 * @extends {React.Component<TrackRendererProps>}
 */
export class TrackRenderer extends React.Component<TrackRendererProps, any, any> {
    /**
     * Maintain a list of tracks, and re-render them whenever either
     * their size changes or the zoom level changes
     *
     * Zooming changes the domain of the scales.
     *
     * Resizing changes the range. Both trigger a rerender.
     *
     * @param {TrackRendererProps} props
     */
    constructor(props: TrackRendererProps);
    /** @type {boolean} */
    dragging: boolean;
    /** @type {WithZoomTransform<HTMLElement> | null} */
    element: WithZoomTransform<HTMLElement> | null;
    /** @type {HTMLElement | null} */
    eventTracker: HTMLElement | null;
    /** @type {HTMLElement | null} */
    eventTrackerOld: HTMLElement | null;
    /** @type {boolean} */
    closing: boolean;
    /** @type {number} */
    yPositionOffset: number;
    /** @type {number} */
    xPositionOffset: number;
    /** @type {number} */
    scrollTop: number;
    /** @type {ReturnType<typeof setTimeout> | null} */
    scrollTimeout: ReturnType<typeof setTimeout> | null;
    /** @type {number} */
    activeTransitions: number;
    /** @type {import('d3-zoom').ZoomTransform} */
    zoomTransform: import("d3-zoom").ZoomTransform;
    /** @type {() => void} */
    windowScrolledBound: () => void;
    /** @type {(event?: import('d3-zoom').D3ZoomEvent<HTMLElement, unknown>) => void} */
    zoomStartedBound: (event?: import("d3-zoom").D3ZoomEvent<HTMLElement, unknown>) => void;
    /** @type {(event: import('d3-zoom').D3ZoomEvent<HTMLElement, unknown> & { shiftKey?: boolean }) => void} */
    zoomedBound: (event: import("d3-zoom").D3ZoomEvent<HTMLElement, unknown> & {
        shiftKey?: boolean;
    }) => void;
    /** @type {() => void} */
    zoomEndedBound: () => void;
    /** @type {string} */
    uid: string;
    /** @type {string} */
    viewUid: string;
    /** @type {unknown} */
    availableForPlugins: unknown;
    /** @type {boolean} */
    mounted: boolean;
    /** @type {import("d3-zoom").ZoomBehavior<HTMLElement, unknown>} */
    emptyZoomBehavior: import("d3-zoom").ZoomBehavior<HTMLElement, unknown>;
    /** @type {TrackRendererProps} */
    currentProps: TrackRendererProps;
    /** @type {string} */
    prevPropsStr: string;
    /** @type {import("d3-zoom").ZoomBehavior<HTMLElement, unknown>} */
    zoomBehavior: import("d3-zoom").ZoomBehavior<HTMLElement, unknown>;
    /** @type {import('d3-zoom').ZoomTransform} */
    prevZoomTransform: import("d3-zoom").ZoomTransform;
    /** @type {[number, number]} */
    initialXDomain: [number, number];
    /** @type {[number, number]} */
    initialYDomain: [number, number];
    /** @type {[number, number]} */
    xDomainLimits: [number, number];
    /** @type {[number, number]} */
    yDomainLimits: [number, number];
    /** @type {[number, number]} */
    zoomLimits: [number, number];
    /** @type {number} */
    prevCenterX: number;
    /** @type {number} */
    prevCenterY: number;
    /** @type {number} */
    cumCenterXOffset: number;
    /** @type {number} */
    cumCenterYOffset: number;
    /** @type {Record<string, { trackObject: TrackObject, trackDef: TrackDefinition }>} */
    trackDefObjects: Record<string, {
        trackObject: TrackObject;
        trackDef: TrackDefinition;
    }>;
    /** @type {Record<string, { trackObject: TrackObject | UnknownPixiTrack, trackDef: TrackConfig }>} */
    metaTracks: Record<string, {
        trackObject: TrackObject | UnknownPixiTrack;
        trackDef: TrackConfig;
    }>;
    /** @type {Array<import("pub-sub-es").Subscription>} */
    pubSubs: Array<import("pub-sub-es").Subscription>;
    /** @type {<T extends Event>(event: T & { sourceUid?: string, forwarded?: boolean }) => void} */
    boundForwardEvent: <T extends Event>(event: T & {
        sourceUid?: string;
        forwarded?: boolean;
    }) => void;
    /** @type {() => void} */
    boundScrollEvent: () => void;
    /** @type {(event: { altKey: boolean, preventDefault(): void }) => void} */
    boundForwardContextMenu: (event: {
        altKey: boolean;
        preventDefault(): void;
    }) => void;
    /** @type {(event: Event & { sourceUid: string, type: string }) => void} */
    dispatchEventBound: (event: Event & {
        sourceUid: string;
        type: string;
    }) => void;
    /** @type {(opts: { pos: [number, number, number, number], animateTime: number, isMercator: boolean }) => void} */
    zoomToDataPosHandlerBound: (opts: {
        pos: [number, number, number, number];
        animateTime: number;
        isMercator: boolean;
    }) => void;
    /** @type {(scrollTop: number) => void} */
    onScrollHandlerBound: (scrollTop: number) => void;
    /** @type {{ height: number, width: number, left: number, top: number }} */
    elementPos: {
        height: number;
        width: number;
        left: number;
        top: number;
    };
    /** @type {import('d3-selection').Selection<WithZoomTransform<HTMLElement>, unknown, null, unknown> | null} */
    elementSelection: import("d3-selection").Selection<WithZoomTransform<HTMLElement>, unknown, null, unknown> | null;
    get xScale(): import("d3-scale").ScaleLinear<number, number, never>;
    get yScale(): import("d3-scale").ScaleLinear<number, number, never>;
    UNSAFE_componentWillMount(): void;
    componentDidMount(): void;
    /** @type {import('pixi.js').Graphics} */
    pStage: import("pixi.js").Graphics | undefined;
    /** @type {import('pixi.js').Graphics} */
    pMask: import("pixi.js").Graphics | undefined;
    /** @type {import('pixi.js').Graphics} */
    pOutline: import("pixi.js").Graphics | undefined;
    /** @type {import('pixi.js').Graphics} */
    pBackground: import("pixi.js").Graphics | undefined;
    svgElement: HTMLElement | undefined;
    /** @param {TrackRendererProps} nextProps */
    UNSAFE_componentWillReceiveProps(nextProps: TrackRendererProps): void;
    /** @param {TrackRendererProps} prevProps */
    componentDidUpdate(prevProps: TrackRendererProps): void;
    componentWillUnmount(): void;
    /**
     * Dispatch a forwarded event on the main DOM element
     *
     * @param  {Event & { sourceUid: string, type: string }} event Event to be dispatched.
     */
    dispatchEvent(event: Event & {
        sourceUid: string;
        type: string;
    }): void;
    /**
     * Check of a view position (i.e., pixel coords) is within this view
     *
     * @param {number} x - X position to be tested.
     * @param {number} y - Y position to be tested.
     * @return {boolean} If `true` position is within this view.
     */
    isWithin(x: number, y: number): boolean;
    /** @param {{ pos: [number, number, number, number], animateTime: number }} opts */
    zoomToDataPosHandler({ pos, animateTime }: {
        pos: [number, number, number, number];
        animateTime: number;
    }): void;
    addZoom(): void;
    removeZoom(): void;
    setMask(): void;
    setBackground(): void;
    windowScrolled(): void;
    /**
     * @param {[number, number]} initialXDomain
     * @param {[number, number]} initialYDomain
     * @param {[number, number]} xDomainLimits
     * @param {[number, number]} yDomainLimits
     * @param {[number, number]} zoomLimits
     */
    setUpInitialScales(initialXDomain?: [number, number], initialYDomain?: [number, number], xDomainLimits?: [number, number], yDomainLimits?: [number, number], zoomLimits?: [number, number]): void;
    drawableToDomainX: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    drawableToDomainY: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    /** @param {TrackRendererProps} props */
    updatablePropsToString(props: TrackRendererProps): string;
    /** @param {boolean} draggingStatus */
    draggingChanged(draggingStatus: boolean): void;
    setUpScales(notify?: boolean): void;
    _xScale: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    _yScale: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    /**
     * Get a track's viewconf definition by its object
     *
     * @param {TrackObject} trackObjectIn
     */
    getTrackDef(trackObjectIn: TrackObject): import("./types").TrackConfig | null;
    /**
     * Fetch the trackObject for a track with a given ID
     *
     * @param {string} trackId
     * @return {TrackObject | undefined}
     */
    getTrackObject(trackId: string): TrackObject | undefined;
    timedUpdatePositionAndDimensions(): void;
    /**
     * @param {Array<TrackConfig>} trackDefinitions
     */
    syncMetaTracks(trackDefinitions: Array<TrackConfig>): void;
    /**
     * @param {Array<TrackDefinition>} trackDefinitions
     */
    syncTrackObjects(trackDefinitions: Array<TrackDefinition>): void;
    /**
     * Make sure we have a track object for every passed track definition.
     *
     * If we get a track definition for which we have no Track object, we
     * create a new one.
     *
     * If we have a track object for which we have no definition, we remove
     * the object.
     *
     * All the others we ignore.
     *
     * Track definitions should be of the following form:
     *
     * { height:  100, width: 50, top: 30, left: 40, track: {...}}
     *
     * @param trackDefinitions: The definition of the track
     * @return: Nothing
     */
    prevTrackDefinitions: string | undefined;
    /**
     * Add new meta tracks
     *
     * @param {Array<TrackConfig>} metaTrackDefs  Definitions of meta tracks to be added.
     */
    addMetaTracks(metaTrackDefs: Array<TrackConfig>): void;
    /**
     * @param {Array<TrackDefinition>} newTrackDefinitions
     */
    addNewTracks(newTrackDefinitions: Array<TrackDefinition>): void;
    /** @param {unknown} _unused */
    updateMetaTracks(_unused: unknown): void;
    /** @param {Array<TrackDefinition>} newTrackDefs */
    updateExistingTrackDefs(newTrackDefs: Array<TrackDefinition>): void;
    updateTrackPositions(): boolean;
    /** @param {string[]} trackIds */
    removeMetaTracks(trackIds: string[]): void;
    /** @param {string[]} trackUids */
    removeTracks(trackUids: string[]): void;
    /**
     * Set the center of this view to a paticular X and Y coordinate
     * @param  {number}  centerX  Centeral X data? position.
     * @param  {number}  centerY  Central Y data? position.
     * @param  {number}  sourceK  Source zoom level? @Pete what's the source?
     * @param  {boolean}  notify  If `true` notify listeners that the scales
     *   have changed. This can be turned off to prevent circular updates when
     *   scales are locked.
     * @param  {number}  animateTime  Animation time in milliseconds. Only used
     *   when `animate` is true.
     * @param  {Scale}  xScale  The scale to use for the X axis.
     * @param  {Scale}  yScale  The scale to use for the Y axis.
     */
    setCenter(centerX: number, centerY: number, sourceK: number, notify?: boolean, animateTime?: number, xScale?: Scale, yScale?: Scale): [import("d3-scale").ScaleContinuousNumeric<number, number, never>, import("d3-scale").ScaleContinuousNumeric<number, number, never>] | undefined;
    /** @param {number} movement */
    valueScaleMove(movement: number): void;
    /**
     * @param {{ sourceEvent: Event }} event
     * @param {string | null} orientation
     */
    valueScaleZoom(event: {
        sourceEvent: Event;
    }, orientation: string | null): void;
    /**
     * Respond to a zoom event.
     *
     * We need to update our local record of the zoom transform and apply it
     * to all the tracks.
     *
     * @param {import("d3-zoom").D3ZoomEvent<HTMLElement, unknown> & { shiftKey?: boolean }} event
     */
    zoomed(event: import("d3-zoom").D3ZoomEvent<HTMLElement, unknown> & {
        shiftKey?: boolean;
    }): void;
    /**
     * Return a list of tracks under this position.
     *
     * The position should be relative to this.props.canvasElement.
     *
     * @param {number} x The query x position
     * @param {number} y The query y position
     * @return {Array<TrackObject>}  An array of tracks at this position
     */
    getTracksAtPosition(x: number, y: number): Array<TrackObject>;
    /** @param {import('d3-zoom').D3ZoomEvent<HTMLElement, unknown>=} event */
    zoomStarted(event?: import("d3-zoom").D3ZoomEvent<HTMLElement, unknown> | undefined): void;
    zooming: boolean | undefined;
    zoomStartPos: [number, number] | null | undefined;
    valueScaleZooming: boolean | undefined;
    zoomStartTransform: import("d3-zoom").ZoomTransform | undefined;
    zoomEnded(): void;
    /**
     * @param {boolean=} notify
     * @returns {[Scale, Scale] | undefined}
     */
    applyZoomTransform(notify?: boolean | undefined): [Scale, Scale] | undefined;
    zoomedXScale: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    zoomedYScale: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    currentXScale: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    currentYScale: import("d3-scale").ScaleLinear<number, number, never> | undefined;
    /** @param {TrackConfig} track */
    createMetaTrack(track: TrackConfig): import("./types").TrackObject | UnknownPixiTrack;
    /** @param {TrackConfig} track */
    createTrackObject(track: TrackConfig): import("./types").TrackObject | CombinedTrack | Annotations1dTrack | BedLikeTrack | Annotations2dTrack | ArrowheadDomainsTrack | HorizontalLine1DPixiTrack | CNVIntervalTrack | Chromosome2DAnnotations | Chromosome2DLabels | ChromosomeGrid | CrossRule | HeatmapTiledPixiTrack | Horizontal2DDomainsTrack | HorizontalChromosomeLabels | HorizontalGeneAnnotationsTrack | HorizontalHeatmapTrack | HorizontalMultivecTrack | HorizontalPoint1DPixiTrack | HorizontalRule | Id2DTiledPixiTrack | IdHorizontal1DTiledPixiTrack | IdVertical1DTiledPixiTrack | SVGTrack | MapboxTilesTrack | OSMTilesTrack | OSMTileIdsTrack | OverlayTrack | RasterTilesTrack | SquareMarkersTrack | VerticalRule | ViewportTracker2D | ViewportTrackerHorizontal | ViewportTrackerVertical | UnknownPixiTrack | LeftTrackModifier | Track<{}>;
    /** @param {TrackConfig} track */
    createLocationAgnosticTrackObject(track: TrackConfig): import("./types").TrackObject | CombinedTrack | Annotations1dTrack | BedLikeTrack | Annotations2dTrack | ArrowheadDomainsTrack | HorizontalLine1DPixiTrack | CNVIntervalTrack | Chromosome2DAnnotations | Chromosome2DLabels | ChromosomeGrid | CrossRule | HeatmapTiledPixiTrack | Horizontal2DDomainsTrack | HorizontalChromosomeLabels | HorizontalGeneAnnotationsTrack | HorizontalHeatmapTrack | HorizontalMultivecTrack | HorizontalPoint1DPixiTrack | HorizontalRule | Id2DTiledPixiTrack | IdHorizontal1DTiledPixiTrack | IdVertical1DTiledPixiTrack | SVGTrack | MapboxTilesTrack | OSMTilesTrack | OSMTileIdsTrack | OverlayTrack | RasterTilesTrack | SquareMarkersTrack | VerticalRule | ViewportTracker2D | ViewportTrackerHorizontal | ViewportTrackerVertical | UnknownPixiTrack | Track<{}>;
    /**
     * Zoom to a location given the data coordinates
     * @param   {number}  dataXStart  Data start X coordinate.
     * @param   {number}  dataXEnd  Data end X coordinate.
     * @param   {number}  dataYStart  Data start Y coordinate.
     * @param   {number}  dataYEnd  Data end Y coordinate.
     * @param   {number}  animateTime  Animation time in milliseconds.
     * @param   {ProjectorFunction | null}  projector  If not `null` a projector function that
     *   provides adjusted x and y scales.
     */
    zoomToDataPos(dataXStart: number, dataXEnd: number, dataYStart: number, dataYEnd: number, animateTime?: number, projector?: ProjectorFunction | null): void;
    /**
     * @param {{ altKey: boolean, preventDefault: () => void }} e
     */
    forwardContextMenu(e: {
        altKey: boolean;
        preventDefault: () => void;
    }): void;
    addEventTracker(): void;
    removeEventTracker(): void;
    scrollEvent(): void;
    /**
     * Publishes an event to the pubSub channel, first overriding the
     * sourceUid to be the uid of this track renderer.
     *
     * @template {Event} T
     * @param {T & { sourceUid?: string; forwarded?: boolean }} event
     */
    forwardEvent<T extends Event>(event: T & {
        sourceUid?: string;
        forwarded?: boolean;
    }): void;
    /** @param {number} scrollTop */
    onScrollHandler(scrollTop: number): void;
    render(): React.JSX.Element;
    baseEl: HTMLDivElement | null | undefined;
}
export namespace TrackRenderer {
    namespace defaultProps {
        let pluginDataFetchers: {};
        let pluginTracks: {};
        let canvasElement: null;
        let centerHeight: number;
        let centerWidth: number;
        let children: never[];
        let galleryDim: number;
        let height: number;
        let initialXDomain: never[];
        let initialYDomain: never[];
        let isShowGlobalMousePosition: boolean;
        let isRangeSelection: boolean;
        let leftWidth: number;
        let leftWidthNoGallery: number;
        let paddingLeft: number;
        let paddingTop: number;
        let positionedTracks: never[];
        let topHeight: number;
        let topHeightNoGallery: number;
        let width: number;
        let metaTracks: never[];
    }
    namespace propTypes {
        let canvasElement_1: PropTypes.Requireable<object>;
        export { canvasElement_1 as canvasElement };
        let centerHeight_1: PropTypes.Requireable<number>;
        export { centerHeight_1 as centerHeight };
        let centerWidth_1: PropTypes.Requireable<number>;
        export { centerWidth_1 as centerWidth };
        let children_1: PropTypes.Requireable<any[]>;
        export { children_1 as children };
        export let disableTrackMenu: PropTypes.Requireable<boolean>;
        let galleryDim_1: PropTypes.Requireable<number>;
        export { galleryDim_1 as galleryDim };
        let height_1: PropTypes.Requireable<number>;
        export { height_1 as height };
        let initialXDomain_1: PropTypes.Requireable<any[]>;
        export { initialXDomain_1 as initialXDomain };
        let initialYDomain_1: PropTypes.Requireable<any[]>;
        export { initialYDomain_1 as initialYDomain };
        let isShowGlobalMousePosition_1: PropTypes.Requireable<boolean>;
        export { isShowGlobalMousePosition_1 as isShowGlobalMousePosition };
        let isRangeSelection_1: PropTypes.Requireable<boolean>;
        export { isRangeSelection_1 as isRangeSelection };
        let leftWidth_1: PropTypes.Requireable<number>;
        export { leftWidth_1 as leftWidth };
        let leftWidthNoGallery_1: PropTypes.Requireable<number>;
        export { leftWidthNoGallery_1 as leftWidthNoGallery };
        let paddingLeft_1: PropTypes.Requireable<number>;
        export { paddingLeft_1 as paddingLeft };
        let paddingTop_1: PropTypes.Requireable<number>;
        export { paddingTop_1 as paddingTop };
        let metaTracks_1: PropTypes.Requireable<any[]>;
        export { metaTracks_1 as metaTracks };
        export let onMouseMoveZoom: PropTypes.Requireable<(...args: any[]) => any>;
        export let onNewTilesLoaded: PropTypes.Validator<(...args: any[]) => any>;
        export let onScalesChanged: PropTypes.Validator<(...args: any[]) => any>;
        export let pixiRenderer: PropTypes.Validator<object>;
        export let pixiStage: PropTypes.Validator<object>;
        let pluginDataFetchers_1: PropTypes.Requireable<object>;
        export { pluginDataFetchers_1 as pluginDataFetchers };
        let pluginTracks_1: PropTypes.Requireable<object>;
        export { pluginTracks_1 as pluginTracks };
        let positionedTracks_1: PropTypes.Requireable<any[]>;
        export { positionedTracks_1 as positionedTracks };
        export let pubSub: PropTypes.Validator<object>;
        export let setCentersFunction: PropTypes.Requireable<(...args: any[]) => any>;
        export let svgElement: PropTypes.Validator<object>;
        export let theme: PropTypes.Validator<symbol>;
        let topHeight_1: PropTypes.Requireable<number>;
        export { topHeight_1 as topHeight };
        let topHeightNoGallery_1: PropTypes.Requireable<number>;
        export { topHeightNoGallery_1 as topHeightNoGallery };
        export let viewOptions: PropTypes.Requireable<object>;
        let width_1: PropTypes.Requireable<number>;
        export { width_1 as width };
        export let xDomainLimits: PropTypes.Requireable<any[]>;
        export let yDomainLimits: PropTypes.Requireable<any[]>;
        export let valueScaleZoom: PropTypes.Requireable<boolean>;
        export let zoomable: PropTypes.Validator<boolean>;
        export let zoomDomain: PropTypes.Requireable<any[]>;
        export let uid: PropTypes.Requireable<string>;
        export let zoomLimits: PropTypes.Requireable<any[]>;
    }
}
declare const _default: typeof TrackRenderer;
export default _default;
export type Scale = import("./types").Scale;
export type TrackConfig = import("./types").TrackConfig;
export type TrackObject = import("./types").TrackObject;
export type TilesetInfo = import("./types").TilesetInfo;
export type SetCentersFunction = TrackRenderer["setCenter"];
export type ProjectorFunction = (x: Scale, y: Scale) => [Scale, Scale];
export type TrackDefinition = {
    track: TrackConfig;
    width: number;
    height: number;
    top: number;
    left: number;
};
export type MetaPluginTrackContext = {
    getTrackObject: (trackId: string) => TrackObject | undefined;
    onNewTilesLoaded: () => void;
    definition: TrackConfig;
};
export type PluginTrackContext = {
    id: string;
    trackUid: string;
    trackType: string;
    viewUid: string;
    pubSub: import("pub-sub-es").PubSub;
    scene: import("pixi.js").Graphics;
    dataConfig: Record<string, unknown>;
    dataFetcher: unknown;
    getLockGroupExtrema: () => unknown;
    handleTilesetInfoReceived: (tilesetInfo: TilesetInfo) => void;
    animate: () => void;
    svgElement: HTMLElement;
    isValueScaleLocked: () => boolean;
    onValueScaleChanged: () => void;
    onTrackOptionsChanged: (newOption: Record<string, unknown>) => void;
    onMouseMoveZoom: () => void;
    chromInfoPath?: string | undefined;
    isShowGlobalMousePosition: () => boolean;
    getTheme: () => import("./types").Theme;
    AVAILABLE_FOR_PLUGINS?: unknown | undefined;
    baseEl?: (HTMLDivElement | null) | undefined;
    definition?: TrackConfig | undefined;
    x?: number | undefined;
    y?: number | undefined;
    xPosition?: number | undefined;
    yPosition?: number | undefined;
    projectionXDomain?: [number, number] | undefined;
    projectionYDomain?: [number, number] | undefined;
    registerViewportChanged?: unknown | undefined;
    removeViewportChanged?: unknown | undefined;
    setDomainsCallback?: unknown | undefined;
    tracks?: TrackConfig[] | undefined;
    createTrackObject?: TrackRenderer["createTrackObject"] | undefined;
    orientation?: string | undefined;
    isOverlay?: boolean | undefined;
};
export type PluginTrack = {
    track: {
        new (availableForPlugins: unknown, context: PluginTrackContext, options: Record<string, unknown>): TrackObject;
    };
    isMetaTrack?: false | undefined;
};
export type MetaPluginTrack = {
    track: {
        new (availableForPlugins: unknown, context: MetaPluginTrackContext, options: Record<string, unknown>): TrackObject;
    };
    isMetaTrack: true;
};
export type WithZoomTransform<T> = T & {
    __zoom?: import("d3-zoom").ZoomTransform;
};
export type TrackRendererProps = {
    canvasElement: HTMLElement;
    centerHeight: number;
    centerWidth: number;
    children: Array<JSX.Element>;
    galleryDim: number;
    height: number;
    initialXDomain: [number, number];
    initialYDomain: [number, number];
    isShowGlobalMousePosition: boolean;
    isRangeSelection: boolean;
    leftWidth: number;
    leftWidthNoGallery: number;
    paddingLeft: number;
    paddingTop: number;
    metaTracks: Array<TrackConfig>;
    onMouseMoveZoom: () => void;
    onNewTilesLoaded: (trackId?: string) => void;
    onScalesChanged: (x: Scale, y: Scale) => void;
    pixiRenderer: import("pixi.js").Renderer;
    pixiStage: import("pixi.js").Container;
    pluginDataFetchers: Record<string, unknown>;
    pluginTracks: Record<string, PluginTrack | MetaPluginTrack>;
    positionedTracks: Array<TrackDefinition>;
    pubSub: import("pub-sub-es").PubSub;
    setCentersFunction: (func: SetCentersFunction) => void;
    svgElement: HTMLElement;
    theme: import("./types").Theme;
    topHeight: number;
    topHeightNoGallery: number;
    viewOptions: {
        backgroundColor?: string;
    };
    width: number;
    xDomainLimits: [number, number];
    yDomainLimits: [number, number];
    valueScaleZoom: boolean;
    zoomable: boolean;
    zoomDomain: [number, number];
    zoomLimits: [number, number];
    uid: string;
    dragging: boolean;
    registerDraggingChangedListener: (func: (draggingStatus: boolean) => void) => void;
    disableTrackMenu: boolean;
    removeDraggingChangedListener: (listener: (draggingStatus: boolean) => void) => void;
    onTilesetInfoReceived: (trackId: string, tilesetInfo: TilesetInfo) => void;
    getLockGroupExtrema: (trackId: string) => unknown;
    isValueScaleLocked: (trackId: string) => boolean;
    onValueScaleChanged: (trackId: string) => void;
    onTrackOptionsChanged: (trackId: string, newOption: Record<string, unknown>) => void;
};
import React from 'react';
import UnknownPixiTrack from './UnknownPixiTrack';
import CombinedTrack from './CombinedTrack';
import Annotations1dTrack from './Annotations1dTrack';
import BedLikeTrack from './BedLikeTrack';
import Annotations2dTrack from './Annotations2dTrack';
import ArrowheadDomainsTrack from './ArrowheadDomainsTrack';
import HorizontalLine1DPixiTrack from './HorizontalLine1DPixiTrack';
import CNVIntervalTrack from './CNVIntervalTrack';
import Chromosome2DAnnotations from './Chromosome2DAnnotations';
import Chromosome2DLabels from './Chromosome2DLabels';
import ChromosomeGrid from './ChromosomeGrid';
import CrossRule from './CrossRule';
import HeatmapTiledPixiTrack from './HeatmapTiledPixiTrack';
import Horizontal2DDomainsTrack from './Horizontal2DDomainsTrack';
import HorizontalChromosomeLabels from './HorizontalChromosomeLabels';
import HorizontalGeneAnnotationsTrack from './HorizontalGeneAnnotationsTrack';
import HorizontalHeatmapTrack from './HorizontalHeatmapTrack';
import HorizontalMultivecTrack from './HorizontalMultivecTrack';
import HorizontalPoint1DPixiTrack from './HorizontalPoint1DPixiTrack';
import HorizontalRule from './HorizontalRule';
import Id2DTiledPixiTrack from './Id2DTiledPixiTrack';
import IdHorizontal1DTiledPixiTrack from './IdHorizontal1DTiledPixiTrack';
import IdVertical1DTiledPixiTrack from './IdVertical1DTiledPixiTrack';
import SVGTrack from './SVGTrack';
import MapboxTilesTrack from './MapboxTilesTrack';
import OSMTilesTrack from './OSMTilesTrack';
import OSMTileIdsTrack from './OSMTileIdsTrack';
import OverlayTrack from './OverlayTrack';
import RasterTilesTrack from './RasterTilesTrack';
import SquareMarkersTrack from './SquareMarkersTrack';
import VerticalRule from './VerticalRule';
import ViewportTracker2D from './ViewportTracker2D';
import ViewportTrackerHorizontal from './ViewportTrackerHorizontal';
import ViewportTrackerVertical from './ViewportTrackerVertical';
import LeftTrackModifier from './LeftTrackModifier';
import Track from './Track';
import PropTypes from 'prop-types';
