loom-browser 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/loom-react.esm.js +3877 -3173
- package/dist/loom-react.esm.min.js +1 -1
- package/dist/loom-react.esm.min.js.map +1 -1
- package/dist/loom-worker.js +191 -137
- package/dist/loom-worker.min.js +1 -1
- package/dist/loom-worker.min.js.map +1 -1
- package/dist/loom.esm.js +4163 -3412
- package/dist/loom.esm.min.js +1 -1
- package/dist/loom.esm.min.js.map +1 -1
- package/dist/loom.js +4174 -3415
- package/dist/loom.min.js +1 -1
- package/dist/loom.min.js.map +1 -1
- package/dist/tsconfig.src.tsbuildinfo +1 -1
- package/dist/types/browser/dom/browserExport.d.ts +32 -0
- package/dist/types/browser/dom/contextMenu.d.ts +64 -0
- package/dist/types/browser/dom/contextMenuManager.d.ts +49 -0
- package/dist/types/browser/dom/defaultProviders.d.ts +23 -0
- package/dist/types/browser/dom/genomeBrowser.d.ts +171 -0
- package/dist/types/browser/dom/pointerEventManager.d.ts +109 -0
- package/dist/types/browser/dom/roiOverlayManager.d.ts +38 -0
- package/dist/types/browser/dom/svgFeatureOverlay.d.ts +27 -0
- package/dist/types/browser/headless/errors.d.ts +10 -0
- package/dist/types/browser/headless/headlessGenomeBrowser.d.ts +391 -0
- package/dist/types/browser/headless/roiManager.d.ts +47 -0
- package/dist/types/browser/headless/session.d.ts +45 -0
- package/dist/types/browser/headless/trackDataManager.d.ts +48 -0
- package/dist/types/browser/headless/trackFactories.d.ts +145 -0
- package/dist/types/browser/index.d.ts +24 -0
- package/dist/types/browserExport.d.ts +32 -0
- package/dist/types/commandDispatcher.d.ts +1 -1
- package/dist/types/contextMenuManager.d.ts +49 -0
- package/dist/types/data/searchService.d.ts +24 -0
- package/dist/types/dataSourceWorkerProvider.d.ts +3 -3
- package/dist/types/dataSources/bigWigDataSource.d.ts +2 -2
- package/dist/types/dataSources/config.d.ts +40 -0
- package/dist/types/dataSources/configureDataSource.d.ts +17 -0
- package/dist/types/dataSources/createDataSource.d.ts +14 -0
- package/dist/types/dataSources/geneDataSource.d.ts +4 -3
- package/dist/types/dataSources/gtxDataSource.d.ts +2 -2
- package/dist/types/dataSources/memoryDataSource.d.ts +2 -2
- package/dist/types/dataSources/sequenceDataSource.d.ts +4 -1
- package/dist/types/dataSources/textFeatureSource.d.ts +4 -2
- package/dist/types/dataSources/wholeGenomeUtils.d.ts +37 -0
- package/dist/types/defaultProviders.d.ts +23 -0
- package/dist/types/errors.d.ts +10 -0
- package/dist/types/formats/featureParser.d.ts +1 -1
- package/dist/types/genomeBrowser.d.ts +18 -91
- package/dist/types/headlessGenomeBrowser.d.ts +88 -227
- package/dist/types/index.d.ts +21 -14
- package/dist/types/io/binaryParser.d.ts +0 -1
- package/dist/types/logger.d.ts +20 -0
- package/dist/types/pointerEventManager.d.ts +109 -0
- package/dist/types/react/GenomeBrowserContext.d.ts +1 -1
- package/dist/types/react/LoomBrowser.d.ts +4 -4
- package/dist/types/react/hooks/useBrowserEvent.d.ts +1 -1
- package/dist/types/react/hooks/useGenomeBrowser.d.ts +1 -1
- package/dist/types/react/hooks/useTrackManager.d.ts +1 -1
- package/dist/types/react/tracks/BedTrack.d.ts +1 -5
- package/dist/types/react/ui/ChromosomeSelect.d.ts +1 -1
- package/dist/types/react/ui/ExportControls.d.ts +1 -1
- package/dist/types/react/ui/LocusInput.d.ts +1 -1
- package/dist/types/react/ui/Navbar.d.ts +1 -1
- package/dist/types/react/ui/WindowSize.d.ts +1 -1
- package/dist/types/react/ui/ZoomControls.d.ts +1 -1
- package/dist/types/remoteProtocol.d.ts +1 -1
- package/dist/types/roiManager.d.ts +47 -0
- package/dist/types/roiOverlayManager.d.ts +38 -0
- package/dist/types/stateProjection.d.ts +1 -1
- package/dist/types/trackDataManager.d.ts +48 -0
- package/dist/types/trackFactories.d.ts +140 -0
- package/dist/types/trackSelector.d.ts +1 -1
- package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +0 -1
- package/dist/types/tracks/annotation/config.d.ts +61 -0
- package/dist/types/tracks/baseTrackCanvas.d.ts +10 -0
- package/dist/types/tracks/configDiff.d.ts +14 -0
- package/dist/types/tracks/interaction/config.d.ts +40 -0
- package/dist/types/tracks/ruler/config.d.ts +24 -0
- package/dist/types/tracks/sequence/config.d.ts +56 -0
- package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +3 -0
- package/dist/types/tracks/wig/config.d.ts +77 -0
- package/dist/types/types/igvCompat.d.ts +36 -0
- package/dist/types/types.d.ts +49 -285
- package/dist/types/ui/components/LoomBrowserShell.d.ts +2 -2
- package/dist/types/ui/components/LoomChromosomeSelect.d.ts +1 -1
- package/dist/types/ui/components/LoomContextMenu.d.ts +1 -0
- package/dist/types/ui/components/LoomExportControls.d.ts +1 -1
- package/dist/types/ui/components/LoomLocusInput.d.ts +1 -1
- package/dist/types/ui/components/LoomNavbar.d.ts +1 -1
- package/dist/types/ui/components/LoomWindowSize.d.ts +1 -1
- package/dist/types/ui/components/LoomZoomControls.d.ts +1 -1
- package/dist/types/undoManager.d.ts +49 -0
- package/dist/types/worker/dataSourceRegistry.d.ts +2 -2
- package/dist/types/worker/serializedError.d.ts +16 -0
- package/dist/types/worker/taskTimeout.d.ts +21 -0
- package/dist/types/worker/webWorkerPool.d.ts +5 -2
- package/dist/types/worker/webWorkerProvider.d.ts +3 -0
- package/dist/types/workerDataSource.d.ts +2 -2
- package/dist/types/workerProvider.d.ts +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless GenomeBrowser — pure data/navigation/caching core with zero DOM dependencies.
|
|
3
|
+
*
|
|
4
|
+
* Manages locus state, track coordination, data lifecycle, events, and theming.
|
|
5
|
+
* Can run in Node.js, workers, or any environment.
|
|
6
|
+
*
|
|
7
|
+
* Delegates to focused single-responsibility modules:
|
|
8
|
+
* - ROIManager: Region of Interest CRUD and spatial queries
|
|
9
|
+
* - TrackDataManager: fetch dedup, caching, abort, debounce
|
|
10
|
+
* - Track factories: convenience track creation (trackFactories.ts)
|
|
11
|
+
*
|
|
12
|
+
* The DOM-attached `GenomeBrowser` extends this class to add pointer events,
|
|
13
|
+
* ResizeObserver, canvas stacking, and sweep-to-zoom.
|
|
14
|
+
*
|
|
15
|
+
* Usage (headless):
|
|
16
|
+
* const browser = new HeadlessGenomeBrowser({
|
|
17
|
+
* locus: { chr: 'chr17', start: 7668000, end: 7688000 },
|
|
18
|
+
* viewportWidth: 800,
|
|
19
|
+
* })
|
|
20
|
+
* browser.addTrack(track, dataSource)
|
|
21
|
+
* browser.setLocus({ chr: 'chr17', start: 7670000, end: 7680000 })
|
|
22
|
+
* browser.dispose()
|
|
23
|
+
*/
|
|
24
|
+
import type { Locus, Track, DataSource, FeatureCacheEntry, SessionConfig, TrackSessionConfig, DataSourceConfig, TrackInteractionEvent, TrackContextMenuEvent, WigFeature, BedFeature, SequenceProvider, Genome, ROI, ROISetConfig, ROIInteractionEvent } from '../../types';
|
|
25
|
+
import { ROISet } from '../../roi/roiSet';
|
|
26
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
27
|
+
import type { WorkerProvider } from '../../workerProvider';
|
|
28
|
+
import type { DataSourceWorkerProvider } from '../../dataSourceWorkerProvider';
|
|
29
|
+
import type { PopupProvider } from '../../popupProvider';
|
|
30
|
+
import type { ContextMenuProvider } from '../../contextMenuProvider';
|
|
31
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
32
|
+
import { EventEmitter } from '../../events';
|
|
33
|
+
import type { ChromSizes, CumulativeOffsets } from '../../genome/chromSizes';
|
|
34
|
+
import { type CreateTrackFromSessionOptions } from './session';
|
|
35
|
+
import { SequenceTrackCanvas } from '../../tracks/sequence/sequenceTrackCanvas';
|
|
36
|
+
import { StateProjection } from '../../stateProjection';
|
|
37
|
+
import type { TrackSelector } from '../../trackSelector';
|
|
38
|
+
import type { UndoEntry, UndoEntryType } from '../../undoManager';
|
|
39
|
+
import { ROIManager } from './roiManager';
|
|
40
|
+
import { TrackDataManager } from './trackDataManager';
|
|
41
|
+
export type { AddRulerOptions, AddWigTrackOptions, AddGtxTrackOptions, AddSequenceTrackOptions, AddBedTrackOptions, AddInteractionTrackOptions, AddAnnotationTrackOptions, AddWigTrackWithFeaturesOptions, AddBedTrackWithFeaturesOptions, } from './trackFactories';
|
|
42
|
+
import type { RulerTrackCanvas } from '../../tracks/ruler/rulerTrackCanvas';
|
|
43
|
+
import type { WigTrackCanvas } from '../../tracks/wig/wigTrackCanvas';
|
|
44
|
+
import type { AnnotationTrackCanvas } from '../../tracks/annotation/annotationTrackCanvas';
|
|
45
|
+
import type { InteractionTrackCanvas } from '../../tracks/interaction/interactionTrackCanvas';
|
|
46
|
+
export declare const BrowserEvent: {
|
|
47
|
+
readonly LocusChange: "locuschange";
|
|
48
|
+
readonly TrackAdded: "trackadded";
|
|
49
|
+
readonly TrackRemoved: "trackremoved";
|
|
50
|
+
readonly TrackOrderChanged: "trackorderchanged";
|
|
51
|
+
readonly DataLoaded: "dataloaded";
|
|
52
|
+
readonly DataError: "dataerror";
|
|
53
|
+
readonly RenderError: "rendererror";
|
|
54
|
+
readonly TrackClick: "trackclick";
|
|
55
|
+
readonly TrackHover: "trackhover";
|
|
56
|
+
readonly TrackContextMenu: "trackcontextmenu";
|
|
57
|
+
readonly ROIAdded: "roiadded";
|
|
58
|
+
readonly ROIRemoved: "roiremoved";
|
|
59
|
+
readonly ROIChanged: "roichanged";
|
|
60
|
+
readonly ROIClick: "roiclick";
|
|
61
|
+
readonly ROIContextMenu: "roicontextmenu";
|
|
62
|
+
readonly ThemeChanged: "themechange";
|
|
63
|
+
readonly TrackConfigChanged: "trackconfigchanged";
|
|
64
|
+
readonly Undo: "undo";
|
|
65
|
+
readonly Redo: "redo";
|
|
66
|
+
readonly UndoStackChanged: "undostackchanged";
|
|
67
|
+
};
|
|
68
|
+
export interface BrowserEvents {
|
|
69
|
+
[BrowserEvent.LocusChange]: {
|
|
70
|
+
locus: Locus;
|
|
71
|
+
};
|
|
72
|
+
[BrowserEvent.TrackAdded]: {
|
|
73
|
+
track: Track;
|
|
74
|
+
};
|
|
75
|
+
[BrowserEvent.TrackRemoved]: {
|
|
76
|
+
track: Track;
|
|
77
|
+
};
|
|
78
|
+
[BrowserEvent.TrackOrderChanged]: {
|
|
79
|
+
tracks: Track[];
|
|
80
|
+
};
|
|
81
|
+
[BrowserEvent.DataLoaded]: {
|
|
82
|
+
track: Track;
|
|
83
|
+
};
|
|
84
|
+
[BrowserEvent.DataError]: {
|
|
85
|
+
track: Track;
|
|
86
|
+
error: Error;
|
|
87
|
+
};
|
|
88
|
+
[BrowserEvent.RenderError]: {
|
|
89
|
+
track: Track;
|
|
90
|
+
error: Error;
|
|
91
|
+
};
|
|
92
|
+
[BrowserEvent.TrackClick]: TrackInteractionEvent;
|
|
93
|
+
[BrowserEvent.TrackHover]: TrackInteractionEvent;
|
|
94
|
+
[BrowserEvent.TrackContextMenu]: TrackContextMenuEvent;
|
|
95
|
+
[BrowserEvent.ROIAdded]: {
|
|
96
|
+
roi: ROI;
|
|
97
|
+
set: ROISet;
|
|
98
|
+
};
|
|
99
|
+
[BrowserEvent.ROIRemoved]: {
|
|
100
|
+
roi: ROI;
|
|
101
|
+
set: ROISet;
|
|
102
|
+
};
|
|
103
|
+
[BrowserEvent.ROIChanged]: {
|
|
104
|
+
roi: ROI;
|
|
105
|
+
changes: Partial<ROI>;
|
|
106
|
+
set: ROISet;
|
|
107
|
+
};
|
|
108
|
+
[BrowserEvent.ROIClick]: ROIInteractionEvent;
|
|
109
|
+
[BrowserEvent.ROIContextMenu]: ROIInteractionEvent;
|
|
110
|
+
[BrowserEvent.ThemeChanged]: {
|
|
111
|
+
theme: RenderTheme;
|
|
112
|
+
};
|
|
113
|
+
[BrowserEvent.TrackConfigChanged]: {
|
|
114
|
+
track: Track;
|
|
115
|
+
};
|
|
116
|
+
[BrowserEvent.Undo]: {
|
|
117
|
+
entry: UndoEntry;
|
|
118
|
+
};
|
|
119
|
+
[BrowserEvent.Redo]: {
|
|
120
|
+
entry: UndoEntry;
|
|
121
|
+
};
|
|
122
|
+
[BrowserEvent.UndoStackChanged]: {
|
|
123
|
+
canUndo: boolean;
|
|
124
|
+
canRedo: boolean;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Internal bookkeeping for a track + optional data source. */
|
|
128
|
+
export interface ManagedTrack {
|
|
129
|
+
/** Stable string identifier. Auto-generated on addTrack if not provided. */
|
|
130
|
+
id: string;
|
|
131
|
+
track: Track;
|
|
132
|
+
dataSource: DataSource | null;
|
|
133
|
+
/** Serializable data source config — stored for session save/restore. */
|
|
134
|
+
dataSourceConfig: DataSourceConfig | null;
|
|
135
|
+
/** Track name for session serialization. */
|
|
136
|
+
name?: string;
|
|
137
|
+
/** Track ordering for session serialization. */
|
|
138
|
+
order?: number;
|
|
139
|
+
/** Arbitrary key-value metadata (e.g., assay, biosample, tissue). */
|
|
140
|
+
metadata?: Record<string, string>;
|
|
141
|
+
cache: FeatureCacheEntry | null;
|
|
142
|
+
abortController: AbortController | null;
|
|
143
|
+
/** Max visible height in pixels — enables scrollable container in DOM browser. */
|
|
144
|
+
maxTrackHeight?: number;
|
|
145
|
+
}
|
|
146
|
+
export interface HeadlessGenomeBrowserOptions {
|
|
147
|
+
locus: Locus;
|
|
148
|
+
/** Viewport width in CSS pixels. Required for headless; DOM browser reads from container. */
|
|
149
|
+
viewportWidth?: number;
|
|
150
|
+
/** Canvas provider for environment abstraction. Default: DOMCanvasProvider. */
|
|
151
|
+
canvasProvider?: CanvasProvider;
|
|
152
|
+
/** Worker provider for offloading CPU-intensive tasks. Default: main-thread execution.
|
|
153
|
+
* If this also implements DataSourceWorkerProvider (e.g. WebWorkerPool),
|
|
154
|
+
* it will be used for data fetching automatically. */
|
|
155
|
+
workerProvider?: WorkerProvider;
|
|
156
|
+
/** Popup provider for rendering feature popups on click/hover. Default in GenomeBrowser: DefaultPopupProvider. Pass null to disable. */
|
|
157
|
+
popupProvider?: PopupProvider | null;
|
|
158
|
+
/** Context menu provider for right-click menus. Default: DefaultContextMenuProvider. Pass null to disable. */
|
|
159
|
+
contextMenuProvider?: ContextMenuProvider | null;
|
|
160
|
+
/** Unified render theme. Palette drives default colors/fonts for all tracks. */
|
|
161
|
+
theme?: Partial<RenderTheme>;
|
|
162
|
+
/**
|
|
163
|
+
* Genome assembly. Provides chromosome sizes, cumulative offsets, and sequence.
|
|
164
|
+
* Default: hg38Genome. Pass null to disable clamping/sequence.
|
|
165
|
+
*/
|
|
166
|
+
genome?: Genome | null;
|
|
167
|
+
/** Custom StateProjection subclass instance. Default: lazily created StateProjection. */
|
|
168
|
+
stateProjection?: StateProjection;
|
|
169
|
+
}
|
|
170
|
+
export declare class HeadlessGenomeBrowser {
|
|
171
|
+
protected _locus: Locus;
|
|
172
|
+
protected _viewportWidth: number;
|
|
173
|
+
protected managedTracks: ManagedTrack[];
|
|
174
|
+
/** When true, sortTracks() is a no-op. Used for batch track additions (e.g. loadSession). */
|
|
175
|
+
private _deferSort;
|
|
176
|
+
/** Canvas provider for environment abstraction. Available for convenience API / future use. */
|
|
177
|
+
readonly canvasProvider: CanvasProvider;
|
|
178
|
+
/** Worker provider for offloading CPU-intensive tasks. */
|
|
179
|
+
readonly workerProvider?: WorkerProvider;
|
|
180
|
+
/** Data source worker provider for running DataSources in web workers. */
|
|
181
|
+
readonly dataSourceWorkerProvider?: DataSourceWorkerProvider;
|
|
182
|
+
/** Popup provider for rendering feature popups on click/hover. */
|
|
183
|
+
readonly popupProvider?: PopupProvider;
|
|
184
|
+
/** Context menu provider for right-click menus. */
|
|
185
|
+
readonly contextMenuProvider?: ContextMenuProvider;
|
|
186
|
+
/** Resolved render theme. Available for track creation in convenience API. */
|
|
187
|
+
private _theme;
|
|
188
|
+
/**
|
|
189
|
+
* Genome assembly. Provides chromosome sizes, cumulative offsets, and optional sequence.
|
|
190
|
+
* Undefined when genome/clamping is disabled (null was passed).
|
|
191
|
+
*/
|
|
192
|
+
readonly genome?: Genome;
|
|
193
|
+
/** Chromosome sizes for locus clamping. Derived from genome. Undefined when clamping is disabled. */
|
|
194
|
+
readonly chromSizes?: ChromSizes;
|
|
195
|
+
/** Precomputed cumulative offsets for whole genome view. Derived from genome. Undefined when chromSizes is not set. */
|
|
196
|
+
readonly cumulativeOffsets?: CumulativeOffsets;
|
|
197
|
+
/** Sequence provider for dynseq rendering on wig tracks. Derived from genome.sequence unless overridden. */
|
|
198
|
+
readonly sequenceProvider?: SequenceProvider;
|
|
199
|
+
readonly events: EventEmitter<BrowserEvents>;
|
|
200
|
+
private _state?;
|
|
201
|
+
private readonly _undoManager;
|
|
202
|
+
/** ROI management — owns all ROI sets and operations. */
|
|
203
|
+
protected readonly roiManager: ROIManager;
|
|
204
|
+
/** Data lifecycle — owns fetch dedup, caching, abort, debounce. */
|
|
205
|
+
protected readonly dataManager: TrackDataManager;
|
|
206
|
+
get theme(): RenderTheme;
|
|
207
|
+
get locus(): Locus;
|
|
208
|
+
get viewportWidth(): number;
|
|
209
|
+
/** Whether undo is available. Accepts optional skip predicate for filtering entry types. */
|
|
210
|
+
canUndo(skip?: (e: UndoEntry) => boolean): boolean;
|
|
211
|
+
/** Whether redo is available. Accepts optional skip predicate for filtering entry types. */
|
|
212
|
+
canRedo(skip?: (e: UndoEntry) => boolean): boolean;
|
|
213
|
+
/** Agent-friendly state projection manager. Lazily created on first access. */
|
|
214
|
+
get state(): StateProjection;
|
|
215
|
+
constructor(options: HeadlessGenomeBrowserOptions);
|
|
216
|
+
/** Build the factory context from current browser state. */
|
|
217
|
+
private factoryContext;
|
|
218
|
+
/** Clamp a locus to valid chromosome bounds. No-op if chromSizes is not set. */
|
|
219
|
+
protected clamp(locus: Locus): Locus;
|
|
220
|
+
/** Subscribe to a browser event. Returns an unsubscribe function. */
|
|
221
|
+
on<K extends keyof BrowserEvents>(event: K, handler: (data: BrowserEvents[K]) => void): () => void;
|
|
222
|
+
/** Unsubscribe from a browser event. */
|
|
223
|
+
off<K extends keyof BrowserEvents>(event: K, handler?: (data: BrowserEvents[K]) => void): void;
|
|
224
|
+
/**
|
|
225
|
+
* Snapshot the current state before a mutation.
|
|
226
|
+
* No-op while paused (e.g., during loadSession restoration from undo/redo).
|
|
227
|
+
*/
|
|
228
|
+
protected _snapshotForUndo(type: UndoEntryType): void;
|
|
229
|
+
/**
|
|
230
|
+
* Undo the last mutation. Restores the previous session state.
|
|
231
|
+
* Optionally skip entries matching a predicate (e.g., skip navigation-only entries).
|
|
232
|
+
*/
|
|
233
|
+
undo(skip?: (e: UndoEntry) => boolean): boolean;
|
|
234
|
+
/**
|
|
235
|
+
* Redo the last undone mutation.
|
|
236
|
+
* Optionally skip entries matching a predicate.
|
|
237
|
+
*/
|
|
238
|
+
redo(skip?: (e: UndoEntry) => boolean): boolean;
|
|
239
|
+
/** Clear all undo/redo history. */
|
|
240
|
+
clearUndoHistory(): void;
|
|
241
|
+
/**
|
|
242
|
+
* Update the viewport width and re-render.
|
|
243
|
+
* In headless mode, call this when the logical viewport size changes.
|
|
244
|
+
* The DOM browser calls this automatically from ResizeObserver.
|
|
245
|
+
*/
|
|
246
|
+
setViewportWidth(width: number): void;
|
|
247
|
+
/** Add a track with an optional data source for automatic data management. */
|
|
248
|
+
addTrack<F>(track: Track, dataSource?: DataSource<F>, dataSourceConfig?: DataSourceConfig, maxTrackHeight?: number, order?: number): string;
|
|
249
|
+
/** Remove a track by reference or by stable string ID. */
|
|
250
|
+
removeTrack(trackOrId: Track | string): void;
|
|
251
|
+
/**
|
|
252
|
+
* Move a track to a new position in the track list.
|
|
253
|
+
* Emits BrowserEvent.TrackOrderChanged with the new track order.
|
|
254
|
+
*/
|
|
255
|
+
moveTrack(track: Track, toIndex: number): void;
|
|
256
|
+
/**
|
|
257
|
+
* Sort tracks by priority (descending): positive = top, 0 = middle, negative = bottom.
|
|
258
|
+
*/
|
|
259
|
+
private sortTracks;
|
|
260
|
+
/** Hook for subclasses to react to track order changes (e.g., DOM reorder). */
|
|
261
|
+
protected onTracksSorted(): void;
|
|
262
|
+
/**
|
|
263
|
+
* Persist current array positions into mt.order so future sorts preserve
|
|
264
|
+
* manual reordering.
|
|
265
|
+
*/
|
|
266
|
+
protected _assignOrderFromPosition(): void;
|
|
267
|
+
/** Find the ManagedTrack entry for a given track canvas. */
|
|
268
|
+
private findMT;
|
|
269
|
+
/** Get the current track order. */
|
|
270
|
+
getTrackOrder(): Track[];
|
|
271
|
+
/** Find a managed track by its stable string ID. Returns undefined if not found. */
|
|
272
|
+
getManagedTrack(id: string): ManagedTrack | undefined;
|
|
273
|
+
/** Find a Track by its stable string ID. Returns undefined if not found. */
|
|
274
|
+
getTrack(id: string): Track | undefined;
|
|
275
|
+
/** Get all managed tracks (read-only snapshot). */
|
|
276
|
+
getManagedTracks(): readonly ManagedTrack[];
|
|
277
|
+
/** Find all managed tracks matching a selector. */
|
|
278
|
+
findTracks(selector: TrackSelector): ManagedTrack[];
|
|
279
|
+
/** Remove all tracks matching a selector. Returns the number of tracks removed. */
|
|
280
|
+
removeTracks(selector: TrackSelector): number;
|
|
281
|
+
/** Merge metadata into all tracks matching a selector. Returns the number of tracks updated. */
|
|
282
|
+
updateTrackMetadata(selector: TrackSelector, metadata: Record<string, string>): number;
|
|
283
|
+
/** Update the locus and re-render all tracks. Clamped to chromosome bounds. */
|
|
284
|
+
setLocus(locus: Locus): void;
|
|
285
|
+
/**
|
|
286
|
+
* Parse a locus string or gene name and navigate to it.
|
|
287
|
+
*
|
|
288
|
+
* Search order (matches igv.js js/search.ts):
|
|
289
|
+
* 1. Coordinate string: "chr17:7,668,000-7,688,000"
|
|
290
|
+
* 2. Whole genome: "all" / "*"
|
|
291
|
+
* 3. Bare chromosome name: "chr17", "chrX"
|
|
292
|
+
* 4. Gene/feature name via web service: "BRCA1", "TP53"
|
|
293
|
+
*/
|
|
294
|
+
search(query: string): Promise<boolean>;
|
|
295
|
+
/** Zoom in by a factor (default 2x) around the center. */
|
|
296
|
+
zoomIn(factor?: number): void;
|
|
297
|
+
/** Zoom out by a factor (default 2x) around the center. */
|
|
298
|
+
zoomOut(factor?: number): void;
|
|
299
|
+
private zoomByFactor;
|
|
300
|
+
/**
|
|
301
|
+
* Zoom by a scale factor around an optional genomic coordinate.
|
|
302
|
+
*
|
|
303
|
+
* If `centerBP` is omitted, zooms around the viewport center (default).
|
|
304
|
+
* When provided, the zoom keeps `centerBP` at the same relative position
|
|
305
|
+
* in the viewport — e.g. for pointer-anchored pinch/wheel zoom.
|
|
306
|
+
*
|
|
307
|
+
* @param factor - Scale factor. <1 = zoom in, >1 = zoom out.
|
|
308
|
+
* @param centerBP - Optional genomic coordinate to anchor the zoom on.
|
|
309
|
+
*/
|
|
310
|
+
zoomAroundCenter(factor: number, centerBP?: number): void;
|
|
311
|
+
/** Force a data reload for all managed tracks (e.g., after config change). */
|
|
312
|
+
reloadData(): void;
|
|
313
|
+
/** Get the cached features for a track, if available. */
|
|
314
|
+
getCachedFeatures<F>(track: Track): F[] | undefined;
|
|
315
|
+
/** Re-render all tracks at current locus. */
|
|
316
|
+
render(): void;
|
|
317
|
+
/** Add a single ROI to a named set. Creates a user-defined set if it doesn't exist. */
|
|
318
|
+
addROI(roi: ROI, setName?: string): ROI;
|
|
319
|
+
/** Add a full ROI set from config. Returns the created ROISet. */
|
|
320
|
+
addROISet(config: ROISetConfig): ROISet;
|
|
321
|
+
/** Remove an ROI by ID (searches all sets). Returns true if found and removed. */
|
|
322
|
+
removeROI(roiId: string): boolean;
|
|
323
|
+
/** Update an ROI by ID. Returns the updated ROI, or undefined if not found. */
|
|
324
|
+
updateROI(roiId: string, changes: Partial<Omit<ROI, 'id'>>): ROI | undefined;
|
|
325
|
+
/** Remove a specific ROI set by instance. Returns true if found and removed. */
|
|
326
|
+
removeROISet(set: ROISet): boolean;
|
|
327
|
+
/** Remove all ROI sets. */
|
|
328
|
+
clearROIs(): void;
|
|
329
|
+
/** Get all ROIs across all sets (flattened). */
|
|
330
|
+
getROIs(): ROI[];
|
|
331
|
+
/** Get all ROI sets. */
|
|
332
|
+
getROISets(): readonly ROISet[];
|
|
333
|
+
/** Find ROIs overlapping a genomic region (searches all sets). */
|
|
334
|
+
findROIsAtLocus(chr: string, start: number, end: number): ROI[];
|
|
335
|
+
/** Get ROIs visible in the current viewport. */
|
|
336
|
+
getVisibleROIs(): ROI[];
|
|
337
|
+
/**
|
|
338
|
+
* Export the current view as an SVG string.
|
|
339
|
+
*/
|
|
340
|
+
toSVG(options?: {
|
|
341
|
+
width?: number;
|
|
342
|
+
backdropColor?: string;
|
|
343
|
+
}): string;
|
|
344
|
+
/**
|
|
345
|
+
* Serialize browser state to a SessionConfig.
|
|
346
|
+
*/
|
|
347
|
+
toJSON(): SessionConfig;
|
|
348
|
+
/**
|
|
349
|
+
* Load a session, replacing all current tracks.
|
|
350
|
+
* Disposes existing state, sets locus, and recreates tracks + data sources.
|
|
351
|
+
*/
|
|
352
|
+
loadSession(session: SessionConfig, options?: CreateTrackFromSessionOptions): void;
|
|
353
|
+
/**
|
|
354
|
+
* Create a new HeadlessGenomeBrowser from a session config.
|
|
355
|
+
*/
|
|
356
|
+
static fromSession(session: SessionConfig, options?: HeadlessGenomeBrowserOptions & CreateTrackFromSessionOptions): HeadlessGenomeBrowser;
|
|
357
|
+
/**
|
|
358
|
+
* Add a track from a session config using the track registry.
|
|
359
|
+
*/
|
|
360
|
+
addTrackFromConfig(trackConfig: TrackSessionConfig): Track;
|
|
361
|
+
/** Register a factory result: addTrack + wire metadata + post-registration callback. */
|
|
362
|
+
private registerFactory;
|
|
363
|
+
/** Add a ruler track. */
|
|
364
|
+
addRuler(options?: import('./trackFactories').AddRulerOptions): RulerTrackCanvas;
|
|
365
|
+
/** Add a BigWig signal track. */
|
|
366
|
+
addWigTrack(url: string, options?: import('./trackFactories').AddWigTrackOptions): WigTrackCanvas;
|
|
367
|
+
/** Add a GTX signal track (single experiment from a multi-experiment GTX file). */
|
|
368
|
+
addGtxTrack(url: string, options: import('./trackFactories').AddGtxTrackOptions): WigTrackCanvas;
|
|
369
|
+
/** Add a UCSC gene annotation track. */
|
|
370
|
+
addGeneTrack(options?: import('./trackFactories').AddAnnotationTrackOptions): AnnotationTrackCanvas;
|
|
371
|
+
/** Add a BED/peak annotation track from a URL. */
|
|
372
|
+
addBedTrack(url: string, options?: import('./trackFactories').AddBedTrackOptions): AnnotationTrackCanvas;
|
|
373
|
+
/** Add an interaction (arc/BEDPE) track from a URL. */
|
|
374
|
+
addInteractionTrack(url: string, options?: import('./trackFactories').AddInteractionTrackOptions): InteractionTrackCanvas;
|
|
375
|
+
/** Add a BigWig-style signal track backed by in-memory features (no URL required). */
|
|
376
|
+
addWigTrackWithFeatures(features: WigFeature[], options?: import('./trackFactories').AddWigTrackWithFeaturesOptions): WigTrackCanvas;
|
|
377
|
+
/** Add a BED/annotation track backed by in-memory features (no URL required). */
|
|
378
|
+
addBedTrackWithFeatures(features: BedFeature[], options?: import('./trackFactories').AddBedTrackWithFeaturesOptions): AnnotationTrackCanvas;
|
|
379
|
+
/** Add a DNA/RNA sequence track. */
|
|
380
|
+
addSequenceTrack(options?: import('./trackFactories').AddSequenceTrackOptions): SequenceTrackCanvas;
|
|
381
|
+
/** Apply a new render theme to the browser and all existing tracks. */
|
|
382
|
+
setTheme(theme: Partial<RenderTheme>): void;
|
|
383
|
+
/** Clean up event listeners, abort in-flight requests, clear tracks and ROIs. */
|
|
384
|
+
dispose(): void;
|
|
385
|
+
/**
|
|
386
|
+
* Resolve pixel coordinates on a track canvas to interaction data.
|
|
387
|
+
* Used by GenomeBrowser to build event payloads from pointer events.
|
|
388
|
+
*/
|
|
389
|
+
protected resolveInteraction(track: Track, x: number, y: number): TrackInteractionEvent | null;
|
|
390
|
+
protected loadAllTracksIfNeeded(): void;
|
|
391
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ROIManager — manages Region of Interest sets for a genome browser.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from HeadlessGenomeBrowser to isolate ROI CRUD operations
|
|
5
|
+
* into a single-responsibility module. Owns the `roiSets` array and
|
|
6
|
+
* emits events through a callback interface.
|
|
7
|
+
*
|
|
8
|
+
* Layer 3 (Headless): no DOM dependencies.
|
|
9
|
+
*/
|
|
10
|
+
import type { ROI, ROISetConfig, Locus } from '../../types';
|
|
11
|
+
import { ROISet } from '../../roi/roiSet';
|
|
12
|
+
/** Callback interface for ROI events — wired by HeadlessGenomeBrowser to its EventEmitter. */
|
|
13
|
+
export interface ROIEventCallbacks {
|
|
14
|
+
onROIAdded(roi: ROI, set: ROISet): void;
|
|
15
|
+
onROIRemoved(roi: ROI, set: ROISet): void;
|
|
16
|
+
onROIChanged(roi: ROI, changes: Partial<ROI>, set: ROISet): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class ROIManager {
|
|
19
|
+
private roiSets;
|
|
20
|
+
private callbacks;
|
|
21
|
+
constructor(callbacks: ROIEventCallbacks);
|
|
22
|
+
/**
|
|
23
|
+
* Add a single ROI to a named set. Creates a user-defined set if it doesn't exist.
|
|
24
|
+
* Returns the ROI (with generated ID if none provided).
|
|
25
|
+
*/
|
|
26
|
+
addROI(roi: ROI, setName?: string): ROI;
|
|
27
|
+
/** Add a full ROI set from config. Returns the created ROISet. */
|
|
28
|
+
addROISet(config: ROISetConfig): ROISet;
|
|
29
|
+
/** Remove an ROI by ID (searches all sets). Returns true if found and removed. */
|
|
30
|
+
removeROI(roiId: string): boolean;
|
|
31
|
+
/** Update an ROI by ID. Returns the updated ROI, or undefined if not found. */
|
|
32
|
+
updateROI(roiId: string, changes: Partial<Omit<ROI, 'id'>>): ROI | undefined;
|
|
33
|
+
/** Remove a specific ROI set by instance. Returns true if found and removed. */
|
|
34
|
+
removeROISet(set: ROISet): boolean;
|
|
35
|
+
/** Remove all ROI sets. */
|
|
36
|
+
clear(): void;
|
|
37
|
+
/** Get all ROIs across all sets (flattened). */
|
|
38
|
+
getROIs(): ROI[];
|
|
39
|
+
/** Get all ROI sets. */
|
|
40
|
+
getROISets(): readonly ROISet[];
|
|
41
|
+
/** Find ROIs overlapping a genomic region (searches all sets). */
|
|
42
|
+
findROIsAtLocus(chr: string, start: number, end: number): ROI[];
|
|
43
|
+
/** Get ROIs visible in the given viewport locus. */
|
|
44
|
+
getVisibleROIs(locus: Locus): ROI[];
|
|
45
|
+
/** Serialize all ROI sets for session persistence. Returns undefined if empty. */
|
|
46
|
+
serialize(): ROISetConfig[] | undefined;
|
|
47
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session serialization and igv.js compatibility.
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - igv.js session import/export (fromIgvSession / toIgvSession)
|
|
6
|
+
* - Track creation via the track registry (createTrackFromSession)
|
|
7
|
+
*
|
|
8
|
+
* Track creation is delegated to the track registry (src/trackRegistry.ts),
|
|
9
|
+
* which provides an extensible Map-based factory. This module re-exports
|
|
10
|
+
* the registry's `createTrackFromConfig` under the legacy name for backward
|
|
11
|
+
* compatibility with existing session-loading code.
|
|
12
|
+
*
|
|
13
|
+
* Per-track config serialization is distributed to each track canvas class
|
|
14
|
+
* (WigTrackCanvas.serializeConfig, AnnotationTrackCanvas.serializeConfig, etc.)
|
|
15
|
+
*/
|
|
16
|
+
import type { SessionConfig, TrackSessionConfig, Locus, SequenceProvider } from '../../types';
|
|
17
|
+
import type { IgvSessionObject } from '../../types/igvCompat';
|
|
18
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
19
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
20
|
+
export type { CreatedTrack } from '../../trackRegistry';
|
|
21
|
+
export declare const SESSION_VERSION = "1.0";
|
|
22
|
+
export interface CreateTrackFromSessionOptions {
|
|
23
|
+
/** Canvas provider for creating track canvases. */
|
|
24
|
+
canvasProvider?: CanvasProvider;
|
|
25
|
+
/** Render theme for config resolution. */
|
|
26
|
+
theme?: Partial<RenderTheme>;
|
|
27
|
+
/** Sequence provider from the genome, used by sequence tracks. */
|
|
28
|
+
sequenceProvider?: SequenceProvider;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a track canvas + data source from a serialized TrackSessionConfig.
|
|
32
|
+
*
|
|
33
|
+
* Delegates to the track registry's `createTrackFromConfig()`, which uses
|
|
34
|
+
* the extensible Map-based factory instead of a switch/case.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createTrackFromSession(trackConfig: TrackSessionConfig, locus: Locus, options?: CreateTrackFromSessionOptions): import("./session").CreatedTrack;
|
|
37
|
+
/**
|
|
38
|
+
* Convert an igv.js session object to our SessionConfig format.
|
|
39
|
+
* Unknown track types are skipped with a console warning.
|
|
40
|
+
*/
|
|
41
|
+
export declare function fromIgvSession(igvSession: IgvSessionObject): SessionConfig;
|
|
42
|
+
/**
|
|
43
|
+
* Convert our SessionConfig to an igv.js-compatible session object.
|
|
44
|
+
*/
|
|
45
|
+
export declare function toIgvSession(session: SessionConfig): IgvSessionObject;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackDataManager — data lifecycle management for genome browser tracks.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from HeadlessGenomeBrowser to isolate data fetching concerns:
|
|
5
|
+
* - Debounced loading during rapid zoom/pan
|
|
6
|
+
* - Cache validation and coverage checks
|
|
7
|
+
* - Fetch deduplication across tracks sharing the same data source
|
|
8
|
+
* - Inflight request tracking and abort management
|
|
9
|
+
* - Visibility window enforcement
|
|
10
|
+
*
|
|
11
|
+
* Layer 3 (Headless): no DOM dependencies.
|
|
12
|
+
*/
|
|
13
|
+
import type { Locus, Track, DataSource } from '../../types';
|
|
14
|
+
import type { ManagedTrack } from './headlessGenomeBrowser';
|
|
15
|
+
import type { DataSourceWorkerProvider } from '../../dataSourceWorkerProvider';
|
|
16
|
+
/** Callback interface for data lifecycle events — wired by HeadlessGenomeBrowser. */
|
|
17
|
+
export interface DataEventCallbacks {
|
|
18
|
+
onDataLoaded(track: Track): void;
|
|
19
|
+
onDataError(track: Track, error: Error): void;
|
|
20
|
+
}
|
|
21
|
+
export declare class TrackDataManager {
|
|
22
|
+
/** Inflight fetch promises keyed by (cacheKey + fetchRegion + bpPerPixel) for deduplication. */
|
|
23
|
+
private inflightFetches;
|
|
24
|
+
/** Timer for debouncing data loads during rapid zoom/pan. */
|
|
25
|
+
private loadDebounceTimer;
|
|
26
|
+
/** Set to true by dispose() to suppress post-dispose promise handlers. */
|
|
27
|
+
private _disposed;
|
|
28
|
+
private callbacks;
|
|
29
|
+
private dataSourceWorkerProvider?;
|
|
30
|
+
constructor(callbacks: DataEventCallbacks, dataSourceWorkerProvider?: DataSourceWorkerProvider);
|
|
31
|
+
/**
|
|
32
|
+
* Debounced wrapper around loadAllTracksIfNeeded.
|
|
33
|
+
* During rapid zoom/pan, this coalesces multiple setLocus() calls into a
|
|
34
|
+
* single data fetch cycle after the interaction settles (100ms quiet period).
|
|
35
|
+
* Abort in-flight requests immediately so they don't race with the eventual fetch.
|
|
36
|
+
*/
|
|
37
|
+
debouncedLoad(managedTracks: ManagedTrack[], locus: Locus, viewportWidth: number): void;
|
|
38
|
+
loadAllTracksIfNeeded(managedTracks: ManagedTrack[], locus: Locus, viewportWidth: number): void;
|
|
39
|
+
/**
|
|
40
|
+
* Load data for a single track, deduplicating against inflight fetches
|
|
41
|
+
* from other tracks with the same data source identity.
|
|
42
|
+
*/
|
|
43
|
+
loadTrackWithDedup(mt: ManagedTrack, managedTracks: ManagedTrack[], locus: Locus, viewportWidth: number): void;
|
|
44
|
+
/** Clean up: cancel debounce timer, mark as disposed. */
|
|
45
|
+
dispose(): void;
|
|
46
|
+
/** Destroy a worker-resident data source. */
|
|
47
|
+
destroyWorkerDataSource(dataSource: DataSource): void;
|
|
48
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track convenience factories — create and wire tracks with data sources.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from HeadlessGenomeBrowser to isolate repetitive track creation
|
|
5
|
+
* boilerplate. Each factory:
|
|
6
|
+
* 1. Creates a canvas via CanvasProvider
|
|
7
|
+
* 2. Creates a TrackCanvas instance
|
|
8
|
+
* 3. Builds a DataSourceConfig
|
|
9
|
+
* 4. Creates a worker proxy or direct data source
|
|
10
|
+
* 5. Wires chromosome alias resolution + cumulative offsets
|
|
11
|
+
* 6. Returns the track + data source + config for the browser to register
|
|
12
|
+
*
|
|
13
|
+
* Layer 3 (Headless): no DOM dependencies.
|
|
14
|
+
*/
|
|
15
|
+
import type { Locus, DataSource, DataSourceConfig, WindowFunction, WigFeature, BedFeature, WigRenderConfig, AnnotationRenderConfig, RulerRenderConfig, SequenceRenderConfig, InteractionRenderConfig, TextFileFormat, SequenceProvider, Genome } from '../../types';
|
|
16
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
17
|
+
import type { DataSourceWorkerProvider } from '../../dataSourceWorkerProvider';
|
|
18
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
19
|
+
import type { ChromSizes, CumulativeOffsets } from '../../genome/chromSizes';
|
|
20
|
+
import { WorkerDataSource } from '../../workerDataSource';
|
|
21
|
+
import { RulerTrackCanvas } from '../../tracks/ruler/rulerTrackCanvas';
|
|
22
|
+
import { WigTrackCanvas } from '../../tracks/wig/wigTrackCanvas';
|
|
23
|
+
import { AnnotationTrackCanvas } from '../../tracks/annotation/annotationTrackCanvas';
|
|
24
|
+
import { InteractionTrackCanvas } from '../../tracks/interaction/interactionTrackCanvas';
|
|
25
|
+
export interface AddRulerOptions {
|
|
26
|
+
config?: Partial<RulerRenderConfig>;
|
|
27
|
+
maxTrackHeight?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface AddWigTrackOptions {
|
|
30
|
+
config?: Partial<WigRenderConfig>;
|
|
31
|
+
height?: number;
|
|
32
|
+
background?: string;
|
|
33
|
+
windowFunction?: WindowFunction;
|
|
34
|
+
maxTrackHeight?: number;
|
|
35
|
+
name?: string;
|
|
36
|
+
metadata?: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
export interface AddGtxTrackOptions {
|
|
39
|
+
experimentId: string;
|
|
40
|
+
config?: Partial<WigRenderConfig>;
|
|
41
|
+
height?: number;
|
|
42
|
+
background?: string;
|
|
43
|
+
windowFunction?: WindowFunction;
|
|
44
|
+
maxTrackHeight?: number;
|
|
45
|
+
name?: string;
|
|
46
|
+
metadata?: Record<string, string>;
|
|
47
|
+
}
|
|
48
|
+
export interface AddSequenceTrackOptions {
|
|
49
|
+
config?: Partial<SequenceRenderConfig>;
|
|
50
|
+
maxTrackHeight?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface AddBedTrackOptions {
|
|
53
|
+
config?: Partial<AnnotationRenderConfig>;
|
|
54
|
+
height?: number;
|
|
55
|
+
background?: string;
|
|
56
|
+
format?: TextFileFormat;
|
|
57
|
+
indexURL?: string;
|
|
58
|
+
indexed?: boolean;
|
|
59
|
+
maxTrackHeight?: number;
|
|
60
|
+
name?: string;
|
|
61
|
+
metadata?: Record<string, string>;
|
|
62
|
+
}
|
|
63
|
+
export interface AddInteractionTrackOptions {
|
|
64
|
+
config?: Partial<InteractionRenderConfig>;
|
|
65
|
+
background?: string;
|
|
66
|
+
format?: TextFileFormat;
|
|
67
|
+
indexURL?: string;
|
|
68
|
+
indexed?: boolean;
|
|
69
|
+
name?: string;
|
|
70
|
+
metadata?: Record<string, string>;
|
|
71
|
+
}
|
|
72
|
+
export interface AddAnnotationTrackOptions {
|
|
73
|
+
config?: Partial<AnnotationRenderConfig>;
|
|
74
|
+
height?: number;
|
|
75
|
+
background?: string;
|
|
76
|
+
genome?: string;
|
|
77
|
+
track?: string;
|
|
78
|
+
maxTrackHeight?: number;
|
|
79
|
+
name?: string;
|
|
80
|
+
metadata?: Record<string, string>;
|
|
81
|
+
}
|
|
82
|
+
export interface AddWigTrackWithFeaturesOptions {
|
|
83
|
+
config?: Partial<WigRenderConfig>;
|
|
84
|
+
height?: number;
|
|
85
|
+
background?: string;
|
|
86
|
+
maxTrackHeight?: number;
|
|
87
|
+
name?: string;
|
|
88
|
+
metadata?: Record<string, string>;
|
|
89
|
+
}
|
|
90
|
+
export interface AddBedTrackWithFeaturesOptions {
|
|
91
|
+
config?: Partial<AnnotationRenderConfig>;
|
|
92
|
+
height?: number;
|
|
93
|
+
background?: string;
|
|
94
|
+
maxTrackHeight?: number;
|
|
95
|
+
name?: string;
|
|
96
|
+
metadata?: Record<string, string>;
|
|
97
|
+
}
|
|
98
|
+
/** Context needed by all factories — passed from HeadlessGenomeBrowser. */
|
|
99
|
+
export interface TrackFactoryContext {
|
|
100
|
+
locus: Locus;
|
|
101
|
+
canvasProvider: CanvasProvider;
|
|
102
|
+
theme: RenderTheme;
|
|
103
|
+
genome?: Genome;
|
|
104
|
+
chromSizes?: ChromSizes;
|
|
105
|
+
cumulativeOffsets?: CumulativeOffsets;
|
|
106
|
+
sequenceProvider?: SequenceProvider;
|
|
107
|
+
dataSourceWorkerProvider?: DataSourceWorkerProvider;
|
|
108
|
+
}
|
|
109
|
+
/** Result of a factory — the browser registers this via addTrack(). */
|
|
110
|
+
export interface FactoryResult<T> {
|
|
111
|
+
track: T;
|
|
112
|
+
dataSource?: DataSource;
|
|
113
|
+
dataSourceConfig?: DataSourceConfig;
|
|
114
|
+
maxTrackHeight?: number;
|
|
115
|
+
metadata?: Record<string, string>;
|
|
116
|
+
order?: number;
|
|
117
|
+
/** Post-registration callback (e.g., wiring onWindowFunctionChange). */
|
|
118
|
+
onRegistered?: (findMT: () => {
|
|
119
|
+
cache: null | unknown;
|
|
120
|
+
dataSourceConfig: DataSourceConfig | null;
|
|
121
|
+
}) => void;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a WorkerDataSource proxy for worker-eligible configs, or return null
|
|
125
|
+
* if dataSourceWorkerProvider is not set. Handles create + chrom alias + offsets wiring.
|
|
126
|
+
*/
|
|
127
|
+
export declare function createWorkerDataSource<F>(config: DataSourceConfig, ctx: Pick<TrackFactoryContext, 'dataSourceWorkerProvider' | 'genome' | 'cumulativeOffsets'>): WorkerDataSource<F> | null;
|
|
128
|
+
/**
|
|
129
|
+
* Wire chromosome alias resolution and cumulative offsets on a direct (non-worker) data source.
|
|
130
|
+
* Consolidates the pattern repeated 7+ times in the old HeadlessGenomeBrowser.
|
|
131
|
+
*/
|
|
132
|
+
export declare function wireDataSource(ds: DataSource, ctx: Pick<TrackFactoryContext, 'genome' | 'cumulativeOffsets'>): void;
|
|
133
|
+
/**
|
|
134
|
+
* Wire a WigTrackCanvas's window function change callback to trigger a data reload.
|
|
135
|
+
* Wraps the existing callback (set by the factory) so the original still fires.
|
|
136
|
+
*/
|
|
137
|
+
export declare function wireWindowFunctionReload(track: WigTrackCanvas, reloadFn: () => void): void;
|
|
138
|
+
export declare function createRuler(ctx: TrackFactoryContext, options?: AddRulerOptions): FactoryResult<RulerTrackCanvas>;
|
|
139
|
+
export declare function createWigTrack(ctx: TrackFactoryContext, url: string, options?: AddWigTrackOptions): FactoryResult<WigTrackCanvas>;
|
|
140
|
+
export declare function createGtxTrack(ctx: TrackFactoryContext, url: string, options: AddGtxTrackOptions): FactoryResult<WigTrackCanvas>;
|
|
141
|
+
export declare function createGeneTrack(ctx: TrackFactoryContext, options?: AddAnnotationTrackOptions): FactoryResult<AnnotationTrackCanvas>;
|
|
142
|
+
export declare function createBedTrack(ctx: TrackFactoryContext, url: string, options?: AddBedTrackOptions): FactoryResult<AnnotationTrackCanvas>;
|
|
143
|
+
export declare function createInteractionTrack(ctx: TrackFactoryContext, url: string, options?: AddInteractionTrackOptions): FactoryResult<InteractionTrackCanvas>;
|
|
144
|
+
export declare function createWigTrackWithFeatures(ctx: TrackFactoryContext, features: WigFeature[], options?: AddWigTrackWithFeaturesOptions): FactoryResult<WigTrackCanvas>;
|
|
145
|
+
export declare function createBedTrackWithFeatures(ctx: TrackFactoryContext, features: BedFeature[], options?: AddBedTrackWithFeaturesOptions): FactoryResult<AnnotationTrackCanvas>;
|