higlass
Version:
HiGlass Hi-C / genomic / large data viewer
197 lines (196 loc) • 6.04 kB
TypeScript
export default Track;
export type TrackContext = {
/**
* - The track ID.
*/
id: string;
/**
* - The pub-sub channel.
*/
pubSub?: (import("pub-sub-es").PubSub & {
__fake__?: boolean;
}) | undefined;
/**
* - A function that returns the current theme.
*/
getTheme?: (() => import("./types").Theme) | undefined;
};
export type ExtendedTrackContext<T> = T & TrackContext;
/**
* @typedef TrackContext
* @property {string} id - The track ID.
* @property {import('pub-sub-es').PubSub & { __fake__?: boolean }} [pubSub] - The pub-sub channel.
* @property {() => import('./types').Theme} [getTheme] - A function that returns the current theme.
*/
/**
* @template T
* @typedef {T & TrackContext} ExtendedTrackContext
*/
/** @template Options */
declare class Track<Options> {
/**
* @param {TrackContext} context
* @param {Options} options
*/
constructor(context: TrackContext, options: Options);
context: TrackContext;
/** @type {import('pub-sub-es').PubSub} */
pubSub: import("pub-sub-es").PubSub;
/** @type {string} */
id: string;
/** @type {import('./types').Scale} */
_xScale: import("./types").Scale;
/** @type {import('./types').Scale} */
_yScale: import("./types").Scale;
/** @type {import('./types').Scale} */
_refXScale: import("./types").Scale;
/** @type {import('./types').Scale} */
_refYScale: import("./types").Scale;
/** @type {[number, number]} */
position: [number, number];
/** @type {[number, number]} */
dimensions: [number, number];
/** @type {Options} */
options: Options;
/** @type {Array<import('pub-sub-es').Subscription>} */
pubSubs: Array<import("pub-sub-es").Subscription>;
/** @type {() => (import('./types').Theme | undefined)} */
getTheme: () => (import("./types").Theme | undefined);
isLeftModified: boolean;
/**
* Check if a 2d location (x, y) is within the bounds of this track.
*
* @param {number} x - X position to be tested.
* @param {number} y - Y position to be tested.
* @return {boolean} If `true` location is within the track.
*/
isWithin(x: number, y: number): boolean;
/**
* Get a property from the track.
* @template {keyof this} T
* @param {T} prop - The property to get.
* @return {() => this[T]}
*/
getProp<T extends keyof this>(prop: T): () => this[T];
getData(): void;
/**
* Capture click events. x and y are relative to the track position
* @template T
* @param {number} x - X position of the click event.
* @param {number} y - Y position of the click event.
* @param {T} evt - The event.
* @return {{ type: 'generic', event: T, payload: null }}
*/
click<T>(x: number, y: number, evt: T): {
type: "generic";
event: T;
payload: null;
};
/** There was a click event outside the track * */
clickOutside(): void;
/** @returns {[number, number]} */
getDimensions(): [number, number];
/** @param {[number, number]} newDimensions */
setDimensions(newDimensions: [number, number]): void;
/**
* @overload
* @return {import('./types').Scale}
*/
refXScale(): import("./types").Scale;
/**
* @overload
* @param {import('./types').Scale} scale
* @return {this}
*/
refXScale(scale: import("./types").Scale): this;
/**
* @overload
* @return {import('./types').Scale}
*/
refYScale(): import("./types").Scale;
/**
* @overload
* @param {import('./types').Scale} scale
* @return {this}
*/
refYScale(scale: import("./types").Scale): this;
/**
* @overload
* @return {import('./types').Scale}
*/
xScale(): import("./types").Scale;
/**
* @overload
* @param {import('./types').Scale} scale
* @return {this}
*/
xScale(scale: import("./types").Scale): this;
/**
* @overload
* @return {import('./types').Scale}
*/
yScale(): import("./types").Scale;
/**
* @overload
* @param {import('./types').Scale} scale
* @return {this}
*/
yScale(scale: import("./types").Scale): this;
/**
* @param {import('./types').Scale} newXScale
* @param {import('./types').Scale} newYScale
* @returns {void}
*/
zoomed(newXScale: import("./types").Scale, newYScale: import("./types").Scale): void;
/**
* @param {import('./types').Scale} refXScale
* @param {import('./types').Scale} refYScale
* @returns {void}
*/
refScalesChanged(refXScale: import("./types").Scale, refYScale: import("./types").Scale): void;
/** @returns {void} */
draw(): void;
/** @returns {[number, number]} */
getPosition(): [number, number];
/**
* @param {[number, number]} newPosition
* @returns {void}
*/
setPosition(newPosition: [number, number]): void;
/**
* A blank handler for MouseMove / Zoom events. Should be overriden
* by individual tracks to provide
*
* @param {{}} evt
* @returns {void}
*/
defaultMouseMoveHandler(evt: {}): void;
/** @returns {void} */
remove(): void;
/**
* @param {Options} options
* @returns {void}
*/
rerender(options: Options): void;
/**
* This function is for seeing whether this track should respond
* to events at this mouse position. The difference to `isWithin()` is that it
* can be overwritten if a track is inactive for example.
*
* @param {number} x - X position to be tested.
* @param {number} y - Y position to be tested.
* @returns {boolean}
*/
respondsToPosition(x: number, y: number): boolean;
/**
* @param {number} trackY
* @param {number} kMultiplier
* @returns {void}
*/
zoomedY(trackY: number, kMultiplier: number): void;
/**
* @param {number} dY
* @returns {void}
*/
movedY(dY: number): void;
}