UNPKG

higlass

Version:

HiGlass Hi-C / genomic / large data viewer

243 lines (218 loc) 6.93 kB
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; // TODO: Generate from 'schema.json' 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>; // biome-ignore format: Biome formatting messes up tsc parsing 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; // TODO } /** Minimum information describing a tileset. */ export type TilesetInfoShared = { name: string; min_pos: number[]; // should be [number, number] | [number] max_pos: number[]; // should be [number, number] | [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[]; // biome-ignore lint/suspicious/noExplicitAny: We can't know what the options are 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; } // Tileset API export type TilesRequest = { id: string; tileIds: Array<string>; server: string; // biome-ignore lint/suspicious/noExplicitAny: We can't know what the options are 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>; };