higlass
Version:
HiGlass Hi-C / genomic / large data viewer
200 lines (199 loc) • 6.83 kB
TypeScript
import type * as configs from './configs';
import type { ChromsizeRow } from './utils/parse-chromsizes-rows';
export type Theme = typeof configs.THEME_DARK | typeof configs.THEME_LIGHT;
export type SizeMode = typeof configs.SIZE_MODE_DEFAULT | typeof configs.SIZE_MODE_BOUNDED | typeof configs.SIZE_MODE_OVERFLOW | typeof configs.SIZE_MODE_BOUNDED_OVERFLOW | typeof configs.SIZE_MODE_SCROLL;
export type HiGlassViewConfig = Record<string, unknown>;
/** Additional options for how the {@link HiGlassComponent} is drawn and behaves */
export interface HiGlassOptions {
/** An auth token to be included with every tile request. */
authToken?: string;
/**
* Whether the component should be sized to fit within the enclosing div.
*
* If `false`, the component will grow as needed to fit the tracks within it.
*/
bounded?: boolean;
/**
* Whether the layout be changed.
*
* If `false`, the view headers will be hidden. Overrides the `editable` value in the viewconf if specified.
*/
editable?: boolean;
/** A set of default options that will be used for newly added tracks. */
defaultTrackOptions?: {
/** Options for all tracks types. */
all?: Record<string, unknown>;
/** Options for specific tracks types. */
trackSpecific?: Record<string, Record<string, unknown>>;
};
viewMarginTop?: number;
viewMarginBottom?: number;
viewMarginLeft?: number;
viewMarginRight?: number;
viewPaddingTop?: number;
viewPaddingBottom?: number;
viewPaddingLeft?: number;
viewPaddingRight?: number;
theme?: 'dark' | 'light';
isDarkTheme?: boolean;
moustTool?: 'select' | 'track-select';
pluginTracks?: Record<string, unknown>;
pluginDataFetchers?: Record<string, unknown>;
pixelPreciseMarginPadding?: boolean;
sizeMode?: SizeMode;
renderer?: 'canvas';
onViewConfLoaded?: () => void;
cheatCodesEnabled?: boolean;
rangeSelectionOnAlt?: boolean;
tracksEditable?: boolean;
zoomFixed?: boolean;
containerPaddingX?: number;
containerPaddingY?: number;
broadcastMousePositionGlobally?: boolean;
showGlobalMousePosition?: boolean;
globalMousePosition?: boolean;
}
export type Scale = import('d3-scale').ScaleContinuousNumeric<number, number>;
export type TrackPosition = typeof import('./configs/primitives').TRACK_LOCATIONS[number];
export type ChromInfo<Name extends string = string> = {
cumPositions: {
id?: number;
pos: number;
chr: Name;
}[];
chrPositions: Record<Name, {
pos: number;
}>;
chromLengths: Record<Name, number>;
totalLength: number;
};
export type UnknownTrackConfig = {
type: string;
uid: string;
server: string;
tilesetUid: string;
options?: Record<string, unknown>;
position?: TrackPosition;
data?: Record<string, unknown>;
coordSystem?: unknown;
height?: number;
width?: number;
x?: number;
y?: number;
chromInfoPath?: string;
projectionXDomain?: [number, number];
projectionYDomain?: [number, number];
registerViewportChanged?: unknown;
removeViewportChanged?: unknown;
setDomainsCallback?: unknown;
};
export type CombinedTrackConfig = {
type: 'combined';
contents: Array<UnknownTrackConfig>;
uid: string;
server?: string;
height?: number;
width?: number;
tilesetUid?: string;
options?: Record<string, unknown>;
position?: TrackPosition;
data?: Record<string, unknown>;
coordSystem?: unknown;
x?: number;
y?: number;
chromInfoPath?: string;
projectionXDomain?: [number, number];
projectionYDomain?: [number, number];
registerViewportChanged?: unknown;
removeViewportChanged?: unknown;
setDomainsCallback?: unknown;
};
export type TrackConfig = UnknownTrackConfig | CombinedTrackConfig;
export type TrackVisitor = (track: TrackConfig, position: null | TrackPosition) => void;
type ZoomedFunction = (xScale: Scale, yScale: Scale, k?: number, x?: number, y?: number, xPosition?: number, yPosition?: number) => void;
export interface TrackObject {
draw(): void;
rerender(options: unknown): void;
delayDrawing: boolean;
flipText?: boolean;
originalTrack?: TrackObject;
childTracks?: TrackObject[];
createdTracks: Record<string, TrackObject>;
refScalesChanged(x: Scale, y: Scale): void;
position: [number, number];
dimensions: [number, number];
updateContents(contents: TrackConfig[], x: unknown): TrackObject;
zoomed: ZoomedFunction;
setPosition(position: [number, number]): void;
setDimensions(dimensions: [number, number]): void;
remove(): void;
movedY(extent: number): void;
zoomedY(yPosition: number, wheelDelta: number): void;
fetching?: Set<unknown>;
tilesetInfo?: TilesetInfo;
chromInfo?: unknown;
}
/** Minimum information describing a tileset. */
export type TilesetInfoShared = {
name: string;
min_pos: number[];
max_pos: number[];
max_zoom: number;
coordSystem?: string;
tile_size?: number;
max_tile_width?: number;
transforms?: {
name: string;
value: string;
}[];
chromsizes?: ArrayLike<ChromsizeRow>;
error?: string;
};
export type LegacyTilesetInfo = TilesetInfoShared & {
max_width: number;
bins_per_dimension?: number;
};
export type ResolutionsTilesetInfo = TilesetInfoShared & {
resolutions: number[];
};
export type TilesetInfo = LegacyTilesetInfo | ResolutionsTilesetInfo;
export type DataConfig = {
server?: string;
url?: string;
filetype?: string;
coordSystem?: string;
children?: DataConfig[];
options?: Record<string, any>;
type?: string;
slicePos?: number;
};
export type HandleTilesetInfoFinished = (info: TilesetInfo | null | {
error: string;
}, tilesetUid?: string) => void;
export interface AbstractDataFetcher<TileType, DataConfig> {
tilesetInfo(callback?: HandleTilesetInfoFinished): Promise<TilesetInfo | undefined>;
fetchTilesDebounced(receivedTiles: (tiles: Record<string, TileType>) => void, tileIds: string[]): Promise<Record<string, TileType>>;
dataConfig: DataConfig;
}
export type TilesRequest = {
id: string;
tileIds: Array<string>;
server: string;
options?: Record<string, any>;
};
export type TilesetInfoRequest = {
server: string;
tilesetUid: string;
};
export type RegisterTilesetRequest = {
server: string;
url: string;
filetype: string;
coordSystem?: string;
};
export type TileSource<T> = {
fetchTiles: (request: TilesRequest) => Promise<Record<string, T>>;
fetchTilesetInfo: (request: TilesetInfoRequest) => Promise<Record<string, TilesetInfo>>;
registerTileset: (request: RegisterTilesetRequest) => Promise<Response>;
};
export {};