higlass
Version:
HiGlass Hi-C / genomic / large data viewer
725 lines (724 loc) • 32.7 kB
TypeScript
/** @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';