loom-browser 0.0.4 → 0.0.6
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 +957 -9
- package/dist/loom-react.esm.min.js +1 -1
- package/dist/loom-react.esm.min.js.map +1 -1
- package/dist/loom.esm.js +138 -2
- package/dist/loom.esm.min.js +1 -1
- package/dist/loom.esm.min.js.map +1 -1
- package/dist/loom.js +138 -1
- 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/dataSources/memoryDataSource.d.ts +32 -0
- package/dist/types/headlessGenomeBrowser.d.ts +33 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/react/GenomeBrowserContext.d.ts +3 -0
- package/dist/types/react/index.d.ts +2 -0
- package/dist/types/react/tracks/BedTrack.d.ts +8 -3
- package/dist/types/react/tracks/WigTrack.d.ts +6 -3
- package/dist/types/react/ui/ChromosomeSelect.d.ts +7 -0
- package/dist/types/react/ui/ExportControls.d.ts +7 -0
- package/dist/types/react/ui/LocusInput.d.ts +7 -0
- package/dist/types/react/ui/Navbar.d.ts +10 -0
- package/dist/types/react/ui/WindowSize.d.ts +7 -0
- package/dist/types/react/ui/ZoomControls.d.ts +7 -0
- package/dist/types/react/ui/ensureRegistered.d.ts +5 -0
- package/dist/types/react/ui/index.d.ts +12 -0
- package/dist/types/react/ui/types.d.ts +24 -0
- package/dist/types/types.d.ts +4 -1
- package/package.json +1 -1
package/dist/loom.esm.js
CHANGED
|
@@ -9100,6 +9100,72 @@ class SequenceDataSource {
|
|
|
9100
9100
|
}
|
|
9101
9101
|
}
|
|
9102
9102
|
|
|
9103
|
+
/**
|
|
9104
|
+
* DataSource backed by an in-memory feature array.
|
|
9105
|
+
*
|
|
9106
|
+
* Wraps a pre-loaded feature array in a FeatureCache for spatial queries,
|
|
9107
|
+
* enabling inline features to flow through the same data lifecycle as
|
|
9108
|
+
* URL-based data sources.
|
|
9109
|
+
*
|
|
9110
|
+
* Layer 1 (Data + Layout): no DOM, no canvas.
|
|
9111
|
+
*/
|
|
9112
|
+
/**
|
|
9113
|
+
* DataSource that serves features from an in-memory array.
|
|
9114
|
+
*
|
|
9115
|
+
* Features are indexed in a FeatureCache on construction for efficient
|
|
9116
|
+
* spatial queries. Calling `setFeatures()` replaces the cache entirely.
|
|
9117
|
+
*/
|
|
9118
|
+
class MemoryDataSource {
|
|
9119
|
+
constructor(features) {
|
|
9120
|
+
this.cache = new FeatureCache(features);
|
|
9121
|
+
}
|
|
9122
|
+
/** Replace the in-memory features and rebuild the spatial index. */
|
|
9123
|
+
setFeatures(features) {
|
|
9124
|
+
this.cache = new FeatureCache(features);
|
|
9125
|
+
}
|
|
9126
|
+
/** Set a chromosome name resolver for alias resolution. */
|
|
9127
|
+
setChromNameResolver(resolver) {
|
|
9128
|
+
this._resolveChromName = resolver;
|
|
9129
|
+
}
|
|
9130
|
+
/** Set cumulative offsets for whole genome view coordinate transformation. */
|
|
9131
|
+
setCumulativeOffsets(offsets) {
|
|
9132
|
+
this._cumulativeOffsets = offsets;
|
|
9133
|
+
}
|
|
9134
|
+
async fetch(locus, _bpPerPixel, _signal) {
|
|
9135
|
+
if (isWholeGenomeView(locus) && this._cumulativeOffsets) {
|
|
9136
|
+
return this.fetchWG();
|
|
9137
|
+
}
|
|
9138
|
+
const chr = this._resolveChromName
|
|
9139
|
+
? this._resolveChromName(locus.chr)
|
|
9140
|
+
: locus.chr;
|
|
9141
|
+
return this.cache.queryFeatures(chr, locus.start, locus.end);
|
|
9142
|
+
}
|
|
9143
|
+
fetchWG() {
|
|
9144
|
+
const offsets = this._cumulativeOffsets;
|
|
9145
|
+
const chrNames = mainChromosomeNames(Object.fromEntries(offsets.chromosomeNames.map(name => { var _a; return [name, (_a = offsets.offsets[name]) !== null && _a !== void 0 ? _a : 0]; })));
|
|
9146
|
+
const wgFeatures = [];
|
|
9147
|
+
const allByChrom = this.cache.getAllFeatures();
|
|
9148
|
+
for (const chr of chrNames) {
|
|
9149
|
+
const features = allByChrom[chr];
|
|
9150
|
+
if (!features)
|
|
9151
|
+
continue;
|
|
9152
|
+
const offset = offsets.offsets[chr];
|
|
9153
|
+
if (offset === undefined)
|
|
9154
|
+
continue;
|
|
9155
|
+
for (const f of features) {
|
|
9156
|
+
wgFeatures.push({
|
|
9157
|
+
...f,
|
|
9158
|
+
chr: 'all',
|
|
9159
|
+
start: offset + f.start,
|
|
9160
|
+
end: offset + f.end,
|
|
9161
|
+
});
|
|
9162
|
+
}
|
|
9163
|
+
}
|
|
9164
|
+
wgFeatures.sort((a, b) => a.start - b.start);
|
|
9165
|
+
return wgFeatures;
|
|
9166
|
+
}
|
|
9167
|
+
}
|
|
9168
|
+
|
|
9103
9169
|
/**
|
|
9104
9170
|
* Stateless renderer for interaction (arc/BEDPE) tracks.
|
|
9105
9171
|
*
|
|
@@ -9670,6 +9736,11 @@ function createDataSource(config, workerProvider) {
|
|
|
9670
9736
|
indexed: config.indexed,
|
|
9671
9737
|
workerProvider,
|
|
9672
9738
|
});
|
|
9739
|
+
case 'memory':
|
|
9740
|
+
// Memory data sources are created directly with features by the caller.
|
|
9741
|
+
// This path is only hit during session restore, where in-memory features
|
|
9742
|
+
// are not available — return an empty MemoryDataSource as a placeholder.
|
|
9743
|
+
return new MemoryDataSource([]);
|
|
9673
9744
|
}
|
|
9674
9745
|
}
|
|
9675
9746
|
// ─── Built-in track creators ─────────────────────────────────────────────────
|
|
@@ -10121,6 +10192,9 @@ function dataSourceCacheKey(config) {
|
|
|
10121
10192
|
return `ucsc:${(_b = config.genome) !== null && _b !== void 0 ? _b : ''}:${(_c = config.track) !== null && _c !== void 0 ? _c : ''}`;
|
|
10122
10193
|
case 'text':
|
|
10123
10194
|
return `text:${config.url}:${(_d = config.format) !== null && _d !== void 0 ? _d : ''}:${(_e = config.indexURL) !== null && _e !== void 0 ? _e : ''}`;
|
|
10195
|
+
case 'memory':
|
|
10196
|
+
// Each memory data source is unique — no deduplication.
|
|
10197
|
+
return `memory:${Math.random()}`;
|
|
10124
10198
|
}
|
|
10125
10199
|
}
|
|
10126
10200
|
|
|
@@ -11231,6 +11305,60 @@ class HeadlessGenomeBrowser {
|
|
|
11231
11305
|
this.managedTracks[this.managedTracks.length - 1].metadata = options.metadata;
|
|
11232
11306
|
return track;
|
|
11233
11307
|
}
|
|
11308
|
+
/** Add a BigWig-style signal track backed by in-memory features (no URL required). */
|
|
11309
|
+
addWigTrackWithFeatures(features, options) {
|
|
11310
|
+
const { canvas } = this.canvasProvider.createCanvas(0, 0);
|
|
11311
|
+
const track = new WigTrackCanvas(canvas, {
|
|
11312
|
+
locus: this._locus,
|
|
11313
|
+
features: [],
|
|
11314
|
+
config: options === null || options === void 0 ? void 0 : options.config,
|
|
11315
|
+
height: options === null || options === void 0 ? void 0 : options.height,
|
|
11316
|
+
background: options === null || options === void 0 ? void 0 : options.background,
|
|
11317
|
+
theme: this.theme,
|
|
11318
|
+
canvasProvider: this.canvasProvider,
|
|
11319
|
+
name: options === null || options === void 0 ? void 0 : options.name,
|
|
11320
|
+
sequenceProvider: this.sequenceProvider,
|
|
11321
|
+
});
|
|
11322
|
+
const dataSource = new MemoryDataSource(features);
|
|
11323
|
+
if (this.cumulativeOffsets) {
|
|
11324
|
+
dataSource.setCumulativeOffsets(this.cumulativeOffsets);
|
|
11325
|
+
}
|
|
11326
|
+
if (this.genome) {
|
|
11327
|
+
dataSource.setChromNameResolver(alias => this.genome.getChromosomeName(alias));
|
|
11328
|
+
}
|
|
11329
|
+
const dataSourceConfig = { type: 'memory' };
|
|
11330
|
+
this.addTrack(track, dataSource, dataSourceConfig, options === null || options === void 0 ? void 0 : options.maxTrackHeight);
|
|
11331
|
+
if (options === null || options === void 0 ? void 0 : options.metadata)
|
|
11332
|
+
this.managedTracks[this.managedTracks.length - 1].metadata = options.metadata;
|
|
11333
|
+
return track;
|
|
11334
|
+
}
|
|
11335
|
+
/** Add a BED/annotation track backed by in-memory features (no URL required). Features must include `chr`. */
|
|
11336
|
+
addBedTrackWithFeatures(features, options) {
|
|
11337
|
+
const { canvas } = this.canvasProvider.createCanvas(0, 0);
|
|
11338
|
+
const track = new AnnotationTrackCanvas(canvas, {
|
|
11339
|
+
locus: this._locus,
|
|
11340
|
+
features: [],
|
|
11341
|
+
config: options === null || options === void 0 ? void 0 : options.config,
|
|
11342
|
+
height: options === null || options === void 0 ? void 0 : options.height,
|
|
11343
|
+
background: options === null || options === void 0 ? void 0 : options.background,
|
|
11344
|
+
theme: this.theme,
|
|
11345
|
+
canvasProvider: this.canvasProvider,
|
|
11346
|
+
workerProvider: this.workerProvider,
|
|
11347
|
+
name: options === null || options === void 0 ? void 0 : options.name,
|
|
11348
|
+
});
|
|
11349
|
+
const dataSource = new MemoryDataSource(features);
|
|
11350
|
+
if (this.cumulativeOffsets) {
|
|
11351
|
+
dataSource.setCumulativeOffsets(this.cumulativeOffsets);
|
|
11352
|
+
}
|
|
11353
|
+
if (this.genome) {
|
|
11354
|
+
dataSource.setChromNameResolver(alias => this.genome.getChromosomeName(alias));
|
|
11355
|
+
}
|
|
11356
|
+
const dataSourceConfig = { type: 'memory' };
|
|
11357
|
+
this.addTrack(track, dataSource, dataSourceConfig, options === null || options === void 0 ? void 0 : options.maxTrackHeight);
|
|
11358
|
+
if (options === null || options === void 0 ? void 0 : options.metadata)
|
|
11359
|
+
this.managedTracks[this.managedTracks.length - 1].metadata = options.metadata;
|
|
11360
|
+
return track;
|
|
11361
|
+
}
|
|
11234
11362
|
/** Add a DNA/RNA sequence track. Data fetching is handled automatically via the genome's sequence provider. */
|
|
11235
11363
|
addSequenceTrack(options) {
|
|
11236
11364
|
const trackConfig = { type: 'sequence', config: options === null || options === void 0 ? void 0 : options.config };
|
|
@@ -12100,6 +12228,13 @@ class GenomeBrowser extends HeadlessGenomeBrowser {
|
|
|
12100
12228
|
this.events.on(BrowserEvent.DataLoaded, ({ track }) => {
|
|
12101
12229
|
this.updateAxisContent(track);
|
|
12102
12230
|
});
|
|
12231
|
+
// Repaint axis canvases when theme changes (track canvases update via
|
|
12232
|
+
// track.setTheme(), but axis sidebar is managed here in GenomeBrowser).
|
|
12233
|
+
this.events.on(BrowserEvent.ThemeChanged, () => {
|
|
12234
|
+
for (const mt of this.managedTracks) {
|
|
12235
|
+
this.updateAxisContent(mt.track);
|
|
12236
|
+
}
|
|
12237
|
+
});
|
|
12103
12238
|
// Re-render ROI overlays when ROIs change or viewport moves
|
|
12104
12239
|
this.events.on(BrowserEvent.ROIAdded, () => this.renderROIOverlays());
|
|
12105
12240
|
this.events.on(BrowserEvent.ROIRemoved, () => this.renderROIOverlays());
|
|
@@ -12302,9 +12437,10 @@ class GenomeBrowser extends HeadlessGenomeBrowser {
|
|
|
12302
12437
|
const { axisDiv } = entry;
|
|
12303
12438
|
const rawInfo = (_a = track.getAxisInfo) === null || _a === void 0 ? void 0 : _a.call(track);
|
|
12304
12439
|
if (!rawInfo) {
|
|
12305
|
-
// No axis info —
|
|
12440
|
+
// No axis info — keep the column for alignment but clear content
|
|
12306
12441
|
axisDiv.innerHTML = "";
|
|
12307
12442
|
axisDiv.style.borderRight = "none";
|
|
12443
|
+
axisDiv.style.backgroundColor = this.theme.palette.background;
|
|
12308
12444
|
entry.axisCanvas = null;
|
|
12309
12445
|
return;
|
|
12310
12446
|
}
|
|
@@ -14949,4 +15085,4 @@ function createFeatureSource(config, workerProvider) {
|
|
|
14949
15085
|
return { dataSource, trackType, format };
|
|
14950
15086
|
}
|
|
14951
15087
|
|
|
14952
|
-
export { AnnotationTrackCanvas, BaseTrackCanvas, BigWigDataSource, BigWigReader, BinaryParser, BrowserEvent, BufferedRangeReader, C2S, ChromAliasDefaults, CommandDispatcher, CommandError, DOMCanvasProvider, DefaultContextMenuProvider, DefaultPopupProvider, EventEmitter, FeatureCache, GeneDataSource, GenomeBrowser, GtxDataSource, GtxReader, HeadlessGenomeBrowser, InteractionTrackCanvas, IntervalTree, LoomBrowserShell, LoomChromosomeSelect, LoomContextMenu, LoomExportControls, LoomInputDialog, LoomLocusInput, LoomNavbar, LoomPopup, LoomWindowSize, LoomZoomControls, MainThreadProvider, NodeWorkerProvider, READY_STATE_OPEN, ROISet, ROI_DEFAULT_COLOR, ROI_USER_DEFINED_COLOR, RemoteConnection, RulerTrackCanvas, SESSION_VERSION, SequenceDataSource, SequenceTrackCanvas, StateProjection, TabixReader, TextFeatureSource, WebWorkerProvider, WigTrackCanvas, addCaseAliases, assembleGFFTranscripts, bufferLocus, cacheCoversViewport, clampLocus, classicThemeCSS, clearBigWigCache, clearGtxCache, commonContextMenuItems, complementBase, complementSequence, computeCumulativeOffsets, computeWigDataRange, createCachedSequence, createDataSource, createFeatureSource, createGenome, createGenomeSync, createShell, createTrackFromConfig, createTrackFromSession, darkRenderTheme, darkSequenceTheme, darkWigTheme, dataSourceCacheKey, decodeBed, decodeBedGraph, decodeBedpe, decodeBroadPeak, decodeGFF3, decodeGFFAttribute, decodeGTF, decodeGappedPeak, decodeGenePred, decodeGenePredExt, decodeInteract, decodeNarrowPeak, decodeRefGeneJson, decodeRefflat, defaultAnnotationRenderConfig, defaultCanvasProvider, defaultInteractionRenderConfig, defaultNucleotideColors, defaultRenderTheme, defaultRulerRenderConfig, defaultSequenceRenderConfig, defaultWigRenderConfig, drawLetterGlyph, fetchBigWigFeatures, fetchBigWigWGFeatures, fetchGeneFeatures, fetchGtxFeatures, fetchGtxMultiFeatures, fetchGtxWGFeatures, fetchRange, fetchSequence, findUTRs, fixBedPE, formatBpLength, formatLocus, fromIgvSession, generateROIId, genomeToChromCoord, getChromLength, getDecoder, getThemeCSS, getTrackCreator, hg38ChromSizes, hg38Genome, inferFormatFromPath, inferIndexURL, inferTrackType, isBinaryFormat, isCoding, isExon, isHiccups, isIntron, isLikelyIndexed, isMainChromosome, isTranscript, isTranscriptPart, isUTR, isWholeGenomeView, knownFileExtensions, knownTrackTypes, lineWigTheme, mainChromosomeNames, mainThreadProvider, matchesSelector, modernRenderTheme, modernSequenceTheme, modernThemeCSS, modernWigTheme, numericDataMenuItems, packFeatures, parseChromSizes, parseColorString, parseFeatures, parseGFFAttributes, parseHeader, parseLocus, parseStrand, positionString, prettyPrintNumber, registerTrackCreator, registerTypeAlias, renderAnnotationTrack, renderDynSeqFeature, renderInteractionTrack, renderLabelAxis, renderQuantitativeAxis, renderROIOverlays, renderRulerTrack, renderSequenceTrack, renderWholeGenomeRuler, renderWigTrack, resolveAnnotationConfig, resolveInteractionConfig, resolveRulerConfig, resolveSequenceConfig, resolveTheme, resolveWigConfig, reverseComplementSequence, roiContextMenuItems, selectTracks, summarizeWigData, toIgvSession, toTrackSelector, translateSequence, translationDict, warmWigTheme };
|
|
15088
|
+
export { AnnotationTrackCanvas, BaseTrackCanvas, BigWigDataSource, BigWigReader, BinaryParser, BrowserEvent, BufferedRangeReader, C2S, ChromAliasDefaults, CommandDispatcher, CommandError, DOMCanvasProvider, DefaultContextMenuProvider, DefaultPopupProvider, EventEmitter, FeatureCache, GeneDataSource, GenomeBrowser, GtxDataSource, GtxReader, HeadlessGenomeBrowser, InteractionTrackCanvas, IntervalTree, LoomBrowserShell, LoomChromosomeSelect, LoomContextMenu, LoomExportControls, LoomInputDialog, LoomLocusInput, LoomNavbar, LoomPopup, LoomWindowSize, LoomZoomControls, MainThreadProvider, MemoryDataSource, NodeWorkerProvider, READY_STATE_OPEN, ROISet, ROI_DEFAULT_COLOR, ROI_USER_DEFINED_COLOR, RemoteConnection, RulerTrackCanvas, SESSION_VERSION, SequenceDataSource, SequenceTrackCanvas, StateProjection, TabixReader, TextFeatureSource, WebWorkerProvider, WigTrackCanvas, addCaseAliases, assembleGFFTranscripts, bufferLocus, cacheCoversViewport, clampLocus, classicThemeCSS, clearBigWigCache, clearGtxCache, commonContextMenuItems, complementBase, complementSequence, computeCumulativeOffsets, computeWigDataRange, createCachedSequence, createDataSource, createFeatureSource, createGenome, createGenomeSync, createShell, createTrackFromConfig, createTrackFromSession, darkRenderTheme, darkSequenceTheme, darkWigTheme, dataSourceCacheKey, decodeBed, decodeBedGraph, decodeBedpe, decodeBroadPeak, decodeGFF3, decodeGFFAttribute, decodeGTF, decodeGappedPeak, decodeGenePred, decodeGenePredExt, decodeInteract, decodeNarrowPeak, decodeRefGeneJson, decodeRefflat, defaultAnnotationRenderConfig, defaultCanvasProvider, defaultInteractionRenderConfig, defaultNucleotideColors, defaultRenderTheme, defaultRulerRenderConfig, defaultSequenceRenderConfig, defaultWigRenderConfig, drawLetterGlyph, fetchBigWigFeatures, fetchBigWigWGFeatures, fetchGeneFeatures, fetchGtxFeatures, fetchGtxMultiFeatures, fetchGtxWGFeatures, fetchRange, fetchSequence, findUTRs, fixBedPE, formatBpLength, formatLocus, fromIgvSession, generateROIId, genomeToChromCoord, getChromLength, getDecoder, getThemeCSS, getTrackCreator, hg38ChromSizes, hg38Genome, inferFormatFromPath, inferIndexURL, inferTrackType, isBinaryFormat, isCoding, isExon, isHiccups, isIntron, isLikelyIndexed, isMainChromosome, isTranscript, isTranscriptPart, isUTR, isWholeGenomeView, knownFileExtensions, knownTrackTypes, lineWigTheme, mainChromosomeNames, mainThreadProvider, matchesSelector, modernRenderTheme, modernSequenceTheme, modernThemeCSS, modernWigTheme, numericDataMenuItems, packFeatures, parseChromSizes, parseColorString, parseFeatures, parseGFFAttributes, parseHeader, parseLocus, parseStrand, positionString, prettyPrintNumber, registerTrackCreator, registerTypeAlias, renderAnnotationTrack, renderDynSeqFeature, renderInteractionTrack, renderLabelAxis, renderQuantitativeAxis, renderROIOverlays, renderRulerTrack, renderSequenceTrack, renderWholeGenomeRuler, renderWigTrack, resolveAnnotationConfig, resolveInteractionConfig, resolveRulerConfig, resolveSequenceConfig, resolveTheme, resolveWigConfig, reverseComplementSequence, roiContextMenuItems, selectTracks, summarizeWigData, toIgvSession, toTrackSelector, translateSequence, translationDict, warmWigTheme };
|