loom-browser 0.0.1
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/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/igv.d.ts +667 -0
- package/dist/igv.esm.js +76708 -0
- package/dist/igv.esm.min.js +26 -0
- package/dist/igv.esm.min.js.map +1 -0
- package/dist/igv.js +76716 -0
- package/dist/igv.min.js +26 -0
- package/dist/igv.min.js.map +1 -0
- package/dist/loom.d.ts +667 -0
- package/dist/loom.esm.js +14927 -0
- package/dist/loom.esm.min.js +2 -0
- package/dist/loom.esm.min.js.map +1 -0
- package/dist/loom.js +15114 -0
- package/dist/loom.min.js +2 -0
- package/dist/loom.min.js.map +1 -0
- package/dist/types/agent/index.d.ts +4 -0
- package/dist/types/agent/stateProjection.d.ts +115 -0
- package/dist/types/agent/trackSelector.d.ts +31 -0
- package/dist/types/baseTrackCanvas.d.ts +62 -0
- package/dist/types/bigwig/binaryParser.d.ts +25 -0
- package/dist/types/bigwig/bpTree.d.ts +40 -0
- package/dist/types/bigwig/bwReader.d.ts +69 -0
- package/dist/types/bigwig/chromTree.d.ts +28 -0
- package/dist/types/bigwig/index.d.ts +66 -0
- package/dist/types/bigwig/inflate.d.ts +9 -0
- package/dist/types/bigwig/rangeReader.d.ts +48 -0
- package/dist/types/bigwig/rpTree.d.ts +27 -0
- package/dist/types/canvasProvider.d.ts +36 -0
- package/dist/types/commandDispatcher.d.ts +199 -0
- package/dist/types/contextMenu.d.ts +64 -0
- package/dist/types/contextMenuProvider.d.ts +25 -0
- package/dist/types/data/cachedSequence.d.ts +19 -0
- package/dist/types/data/ucscApi.d.ts +21 -0
- package/dist/types/data/ucscSequence.d.ts +19 -0
- package/dist/types/dataLifecycle.d.ts +16 -0
- package/dist/types/dataSources/bigWigDataSource.d.ts +24 -0
- package/dist/types/dataSources/dataSourceCacheKey.d.ts +9 -0
- package/dist/types/dataSources/dynseqDataSource.d.ts +20 -0
- package/dist/types/dataSources/featureSourceFactory.d.ts +46 -0
- package/dist/types/dataSources/geneDataSource.d.ts +16 -0
- package/dist/types/dataSources/gtxDataSource.d.ts +42 -0
- package/dist/types/dataSources/sequenceDataSource.d.ts +15 -0
- package/dist/types/dataSources/textFeatureSource.d.ts +63 -0
- package/dist/types/decode/bed.d.ts +64 -0
- package/dist/types/decode/bedpe.d.ts +36 -0
- package/dist/types/decode/exonUtils.d.ts +29 -0
- package/dist/types/decode/gff.d.ts +58 -0
- package/dist/types/decode/interact.d.ts +19 -0
- package/dist/types/decode/ucsc.d.ts +56 -0
- package/dist/types/dynseqRenderer.d.ts +37 -0
- package/dist/types/events.d.ts +23 -0
- package/dist/types/export/canvas2svg.d.ts +166 -0
- package/dist/types/export/index.d.ts +2 -0
- package/dist/types/featureCache.d.ts +69 -0
- package/dist/types/formats/featureParser.d.ts +72 -0
- package/dist/types/formats/formatDetection.d.ts +46 -0
- package/dist/types/geneRenderer.d.ts +17 -0
- package/dist/types/geneThemes.d.ts +11 -0
- package/dist/types/geneTrackCanvas.d.ts +46 -0
- package/dist/types/genome/chromAlias.d.ts +46 -0
- package/dist/types/genome/chromSizes.d.ts +53 -0
- package/dist/types/genome/genome.d.ts +51 -0
- package/dist/types/genomeBrowser.d.ts +189 -0
- package/dist/types/gtx/fetchCoordinator.d.ts +34 -0
- package/dist/types/gtx/gtxReader.d.ts +144 -0
- package/dist/types/gtx/index.d.ts +40 -0
- package/dist/types/gtx/zstdWasm.d.ts +22 -0
- package/dist/types/headlessGenomeBrowser.d.ts +450 -0
- package/dist/types/index.d.ts +123 -0
- package/dist/types/intervalTree.d.ts +56 -0
- package/dist/types/io/binaryParser.d.ts +25 -0
- package/dist/types/io/index.d.ts +7 -0
- package/dist/types/io/rangeReader.d.ts +48 -0
- package/dist/types/locusUtils.d.ts +37 -0
- package/dist/types/pack.d.ts +41 -0
- package/dist/types/popupProvider.d.ts +22 -0
- package/dist/types/remoteProtocol.d.ts +79 -0
- package/dist/types/renderTheme.d.ts +72 -0
- package/dist/types/renderThemePresets.d.ts +16 -0
- package/dist/types/roi/index.d.ts +3 -0
- package/dist/types/roi/roiRenderer.d.ts +24 -0
- package/dist/types/roi/roiSet.d.ts +41 -0
- package/dist/types/rulerRenderer.d.ts +14 -0
- package/dist/types/rulerTrackCanvas.d.ts +32 -0
- package/dist/types/sequence/sequenceUtils.d.ts +44 -0
- package/dist/types/session.d.ts +55 -0
- package/dist/types/src/bigwig/index.d.ts +66 -0
- package/dist/types/src/canvasProvider.d.ts +36 -0
- package/dist/types/src/commandDispatcher.d.ts +220 -0
- package/dist/types/src/contextMenu.d.ts +64 -0
- package/dist/types/src/contextMenuProvider.d.ts +25 -0
- package/dist/types/src/data/cachedSequence.d.ts +19 -0
- package/dist/types/src/data/ucscApi.d.ts +21 -0
- package/dist/types/src/data/ucscSequence.d.ts +19 -0
- package/dist/types/src/dataLifecycle.d.ts +16 -0
- package/dist/types/src/dataSources/bigWigDataSource.d.ts +24 -0
- package/dist/types/src/dataSources/dataSourceCacheKey.d.ts +9 -0
- package/dist/types/src/dataSources/featureSourceFactory.d.ts +46 -0
- package/dist/types/src/dataSources/geneDataSource.d.ts +16 -0
- package/dist/types/src/dataSources/gtxDataSource.d.ts +42 -0
- package/dist/types/src/dataSources/sequenceDataSource.d.ts +15 -0
- package/dist/types/src/dataSources/textFeatureSource.d.ts +63 -0
- package/dist/types/src/decode/bed.d.ts +64 -0
- package/dist/types/src/decode/bedpe.d.ts +36 -0
- package/dist/types/src/decode/exonUtils.d.ts +29 -0
- package/dist/types/src/decode/gff.d.ts +58 -0
- package/dist/types/src/decode/interact.d.ts +19 -0
- package/dist/types/src/decode/ucsc.d.ts +56 -0
- package/dist/types/src/events.d.ts +23 -0
- package/dist/types/src/export/canvas2svg.d.ts +166 -0
- package/dist/types/src/export/index.d.ts +2 -0
- package/dist/types/src/featureCache.d.ts +69 -0
- package/dist/types/src/formats/featureParser.d.ts +72 -0
- package/dist/types/src/formats/formatDetection.d.ts +46 -0
- package/dist/types/src/genome/chromAlias.d.ts +46 -0
- package/dist/types/src/genome/chromSizes.d.ts +53 -0
- package/dist/types/src/genome/genome.d.ts +51 -0
- package/dist/types/src/genomeBrowser.d.ts +189 -0
- package/dist/types/src/gtx/fetchCoordinator.d.ts +34 -0
- package/dist/types/src/gtx/gtxReader.d.ts +144 -0
- package/dist/types/src/gtx/index.d.ts +40 -0
- package/dist/types/src/gtx/zstdWasm.d.ts +22 -0
- package/dist/types/src/headlessGenomeBrowser.d.ts +450 -0
- package/dist/types/src/index.d.ts +123 -0
- package/dist/types/src/intervalTree.d.ts +56 -0
- package/dist/types/src/io/binaryParser.d.ts +25 -0
- package/dist/types/src/io/index.d.ts +7 -0
- package/dist/types/src/io/rangeReader.d.ts +48 -0
- package/dist/types/src/locusUtils.d.ts +37 -0
- package/dist/types/src/pack.d.ts +41 -0
- package/dist/types/src/popupProvider.d.ts +22 -0
- package/dist/types/src/remoteProtocol.d.ts +81 -0
- package/dist/types/src/roi/index.d.ts +3 -0
- package/dist/types/src/roi/roiRenderer.d.ts +24 -0
- package/dist/types/src/roi/roiSet.d.ts +41 -0
- package/dist/types/src/sequence/sequenceUtils.d.ts +44 -0
- package/dist/types/src/session.d.ts +55 -0
- package/dist/types/src/stateProjection.d.ts +115 -0
- package/dist/types/src/tabix/index.d.ts +48 -0
- package/dist/types/src/themes/index.d.ts +3 -0
- package/dist/types/src/themes/renderTheme.d.ts +86 -0
- package/dist/types/src/themes/renderThemePresets.d.ts +16 -0
- package/dist/types/src/trackRegistry.d.ts +81 -0
- package/dist/types/src/trackSelector.d.ts +31 -0
- package/dist/types/src/tracks/annotation/annotationRenderer.d.ts +17 -0
- package/dist/types/src/tracks/annotation/annotationThemes.d.ts +11 -0
- package/dist/types/src/tracks/annotation/annotationTrackCanvas.d.ts +58 -0
- package/dist/types/src/tracks/annotation/index.d.ts +4 -0
- package/dist/types/src/tracks/axis/axisRenderer.d.ts +19 -0
- package/dist/types/src/tracks/axis/index.d.ts +1 -0
- package/dist/types/src/tracks/baseTrackCanvas.d.ts +113 -0
- package/dist/types/src/tracks/dynseq/dynseqRenderer.d.ts +38 -0
- package/dist/types/src/tracks/dynseq/index.d.ts +1 -0
- package/dist/types/src/tracks/index.d.ts +7 -0
- package/dist/types/src/tracks/interaction/index.d.ts +4 -0
- package/dist/types/src/tracks/interaction/interactionRenderer.d.ts +52 -0
- package/dist/types/src/tracks/interaction/interactionTrackCanvas.d.ts +54 -0
- package/dist/types/src/tracks/ruler/index.d.ts +3 -0
- package/dist/types/src/tracks/ruler/rulerRenderer.d.ts +25 -0
- package/dist/types/src/tracks/ruler/rulerTrackCanvas.d.ts +43 -0
- package/dist/types/src/tracks/sequence/index.d.ts +5 -0
- package/dist/types/src/tracks/sequence/sequenceRenderer.d.ts +34 -0
- package/dist/types/src/tracks/sequence/sequenceThemes.d.ts +11 -0
- package/dist/types/src/tracks/sequence/sequenceTrackCanvas.d.ts +67 -0
- package/dist/types/src/tracks/wig/index.d.ts +5 -0
- package/dist/types/src/tracks/wig/wigRenderer.d.ts +15 -0
- package/dist/types/src/tracks/wig/wigSummary.d.ts +31 -0
- package/dist/types/src/tracks/wig/wigThemes.d.ts +15 -0
- package/dist/types/src/tracks/wig/wigTrackCanvas.d.ts +82 -0
- package/dist/types/src/types.d.ts +885 -0
- package/dist/types/src/ui/components/LoomBrowserShell.d.ts +52 -0
- package/dist/types/src/ui/components/LoomChromosomeSelect.d.ts +18 -0
- package/dist/types/src/ui/components/LoomContextMenu.d.ts +39 -0
- package/dist/types/src/ui/components/LoomExportControls.d.ts +13 -0
- package/dist/types/src/ui/components/LoomInputDialog.d.ts +27 -0
- package/dist/types/src/ui/components/LoomLocusInput.d.ts +18 -0
- package/dist/types/src/ui/components/LoomNavbar.d.ts +15 -0
- package/dist/types/src/ui/components/LoomPopup.d.ts +32 -0
- package/dist/types/src/ui/components/LoomWindowSize.d.ts +14 -0
- package/dist/types/src/ui/components/LoomZoomControls.d.ts +10 -0
- package/dist/types/src/ui/index.d.ts +21 -0
- package/dist/types/src/ui/themes.d.ts +14 -0
- package/dist/types/src/worker/nodeWorkerProvider.d.ts +28 -0
- package/dist/types/src/worker/taskHandler.d.ts +15 -0
- package/dist/types/src/worker/webWorkerProvider.d.ts +51 -0
- package/dist/types/src/worker/workerScript.d.ts +11 -0
- package/dist/types/src/workerProvider.d.ts +76 -0
- package/dist/types/stateProjection.d.ts +115 -0
- package/dist/types/tabix/bgzBlockLoader.d.ts +60 -0
- package/dist/types/tabix/bgzf.d.ts +43 -0
- package/dist/types/tabix/index.d.ts +48 -0
- package/dist/types/tabix/tabixIndex.d.ts +85 -0
- package/dist/types/tabix/tabixReader.d.ts +60 -0
- package/dist/types/tabix/virtualOffset.d.ts +41 -0
- package/dist/types/test/src/mockCanvasProvider.d.ts +67 -0
- package/dist/types/test/src/testBedDecode.d.ts +1 -0
- package/dist/types/test/src/testCanvas2SVG.d.ts +7 -0
- package/dist/types/test/src/testChromAlias.d.ts +1 -0
- package/dist/types/test/src/testCommandDispatcher.d.ts +1 -0
- package/dist/types/test/src/testData.d.ts +7 -0
- package/dist/types/test/src/testDataLifecycle.d.ts +1 -0
- package/dist/types/test/src/testDataSourceCacheKey.d.ts +1 -0
- package/dist/types/test/src/testDataSources.d.ts +5 -0
- package/dist/types/test/src/testDecodeUcsc.d.ts +1 -0
- package/dist/types/test/src/testEvents.d.ts +1 -0
- package/dist/types/test/src/testFeatureCache.d.ts +1 -0
- package/dist/types/test/src/testFeatureParser.d.ts +1 -0
- package/dist/types/test/src/testFormatDetection.d.ts +1 -0
- package/dist/types/test/src/testGffDecode.d.ts +1 -0
- package/dist/types/test/src/testHeadlessBrowser.d.ts +1 -0
- package/dist/types/test/src/testInteractionDecoder.d.ts +1 -0
- package/dist/types/test/src/testIntervalTree.d.ts +1 -0
- package/dist/types/test/src/testLocusUtils.d.ts +1 -0
- package/dist/types/test/src/testPack.d.ts +1 -0
- package/dist/types/test/src/testROI.d.ts +1 -0
- package/dist/types/test/src/testRemoteProtocol.d.ts +1 -0
- package/dist/types/test/src/testRenderTheme.d.ts +1 -0
- package/dist/types/test/src/testSVGExport.d.ts +5 -0
- package/dist/types/test/src/testSequence.d.ts +1 -0
- package/dist/types/test/src/testSession.d.ts +1 -0
- package/dist/types/test/src/testTrackSelector.d.ts +1 -0
- package/dist/types/test/src/testTrackSerialize.d.ts +1 -0
- package/dist/types/test/src/testWigSummary.d.ts +1 -0
- package/dist/types/test/src/testWorkerDispatch.d.ts +9 -0
- package/dist/types/themes/index.d.ts +3 -0
- package/dist/types/themes/renderTheme.d.ts +86 -0
- package/dist/types/themes/renderThemePresets.d.ts +16 -0
- package/dist/types/trackRegistry.d.ts +81 -0
- package/dist/types/trackSelector.d.ts +31 -0
- package/dist/types/tracks/annotation/annotationRenderer.d.ts +17 -0
- package/dist/types/tracks/annotation/annotationThemes.d.ts +11 -0
- package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +58 -0
- package/dist/types/tracks/annotation/index.d.ts +4 -0
- package/dist/types/tracks/axis/axisRenderer.d.ts +19 -0
- package/dist/types/tracks/axis/index.d.ts +1 -0
- package/dist/types/tracks/baseTrackCanvas.d.ts +113 -0
- package/dist/types/tracks/dynseq/dynseqRenderer.d.ts +38 -0
- package/dist/types/tracks/dynseq/index.d.ts +1 -0
- package/dist/types/tracks/gene/geneRenderer.d.ts +17 -0
- package/dist/types/tracks/gene/geneThemes.d.ts +11 -0
- package/dist/types/tracks/gene/geneTrackCanvas.d.ts +58 -0
- package/dist/types/tracks/gene/index.d.ts +4 -0
- package/dist/types/tracks/index.d.ts +7 -0
- package/dist/types/tracks/interaction/index.d.ts +4 -0
- package/dist/types/tracks/interaction/interactionRenderer.d.ts +52 -0
- package/dist/types/tracks/interaction/interactionTrackCanvas.d.ts +54 -0
- package/dist/types/tracks/ruler/index.d.ts +3 -0
- package/dist/types/tracks/ruler/rulerRenderer.d.ts +25 -0
- package/dist/types/tracks/ruler/rulerTrackCanvas.d.ts +43 -0
- package/dist/types/tracks/sequence/index.d.ts +5 -0
- package/dist/types/tracks/sequence/sequenceRenderer.d.ts +34 -0
- package/dist/types/tracks/sequence/sequenceThemes.d.ts +11 -0
- package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +67 -0
- package/dist/types/tracks/wig/index.d.ts +5 -0
- package/dist/types/tracks/wig/wigRenderer.d.ts +15 -0
- package/dist/types/tracks/wig/wigSummary.d.ts +31 -0
- package/dist/types/tracks/wig/wigThemes.d.ts +15 -0
- package/dist/types/tracks/wig/wigTrackCanvas.d.ts +82 -0
- package/dist/types/types.d.ts +885 -0
- package/dist/types/ui/components/IgvBrowserShell.d.ts +52 -0
- package/dist/types/ui/components/IgvChromosomeSelect.d.ts +18 -0
- package/dist/types/ui/components/IgvExportControls.d.ts +13 -0
- package/dist/types/ui/components/IgvLocusInput.d.ts +18 -0
- package/dist/types/ui/components/IgvNavbar.d.ts +15 -0
- package/dist/types/ui/components/IgvWindowSize.d.ts +14 -0
- package/dist/types/ui/components/IgvZoomControls.d.ts +10 -0
- package/dist/types/ui/components/LoomBrowserShell.d.ts +52 -0
- package/dist/types/ui/components/LoomChromosomeSelect.d.ts +18 -0
- package/dist/types/ui/components/LoomContextMenu.d.ts +39 -0
- package/dist/types/ui/components/LoomExportControls.d.ts +13 -0
- package/dist/types/ui/components/LoomInputDialog.d.ts +27 -0
- package/dist/types/ui/components/LoomLocusInput.d.ts +18 -0
- package/dist/types/ui/components/LoomNavbar.d.ts +15 -0
- package/dist/types/ui/components/LoomPopup.d.ts +32 -0
- package/dist/types/ui/components/LoomWindowSize.d.ts +14 -0
- package/dist/types/ui/components/LoomZoomControls.d.ts +10 -0
- package/dist/types/ui/index.d.ts +21 -0
- package/dist/types/ui/themes.d.ts +14 -0
- package/dist/types/wigRenderer.d.ts +15 -0
- package/dist/types/wigSummary.d.ts +31 -0
- package/dist/types/wigThemes.d.ts +15 -0
- package/dist/types/wigTrackCanvas.d.ts +46 -0
- package/dist/types/worker/decodeWig.d.ts +20 -0
- package/dist/types/worker/nodeWorkerProvider.d.ts +28 -0
- package/dist/types/worker/taskHandler.d.ts +15 -0
- package/dist/types/worker/webWorkerProvider.d.ts +51 -0
- package/dist/types/worker/workerScript.d.ts +11 -0
- package/dist/types/workerProvider.d.ts +76 -0
- package/package.json +102 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-browser> — Top-level shell combining navbar + GenomeBrowser.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* const shell = document.createElement('loom-browser')
|
|
6
|
+
* shell.setAttribute('theme', 'modern')
|
|
7
|
+
* container.appendChild(shell)
|
|
8
|
+
* shell.initialize({ locus: { chr: 'chr17', start: 7668000, end: 7688000 } })
|
|
9
|
+
* shell.addTrack(rulerTrack)
|
|
10
|
+
* shell.addTrack(geneTrack)
|
|
11
|
+
*
|
|
12
|
+
* Or use the createShell() helper:
|
|
13
|
+
* const shell = createShell(container, { locus, theme: 'modern' })
|
|
14
|
+
*/
|
|
15
|
+
import { GenomeBrowser } from '../../genomeBrowser';
|
|
16
|
+
import type { GenomeBrowserOptions, BrowserEvents } from '../../genomeBrowser';
|
|
17
|
+
import type { Locus, Track } from '../../types';
|
|
18
|
+
import type { ShellTheme } from '../themes';
|
|
19
|
+
export declare class LoomBrowserShell extends HTMLElement {
|
|
20
|
+
private navbar;
|
|
21
|
+
private trackContainer;
|
|
22
|
+
private themeStyle;
|
|
23
|
+
private _browser;
|
|
24
|
+
static get observedAttributes(): string[];
|
|
25
|
+
constructor();
|
|
26
|
+
attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
27
|
+
private applyTheme;
|
|
28
|
+
connectedCallback(): void;
|
|
29
|
+
/** Initialize the GenomeBrowser inside this shell. */
|
|
30
|
+
initialize(options: GenomeBrowserOptions): GenomeBrowser;
|
|
31
|
+
/** Get the underlying GenomeBrowser instance. */
|
|
32
|
+
get browser(): GenomeBrowser | null;
|
|
33
|
+
/** Proxy: add a track to the browser. */
|
|
34
|
+
addTrack(track: Track): void;
|
|
35
|
+
/** Proxy: remove a track from the browser. */
|
|
36
|
+
removeTrack(track: Track): void;
|
|
37
|
+
/** Proxy: set the locus. */
|
|
38
|
+
setLocus(locus: Locus): void;
|
|
39
|
+
/** Proxy: subscribe to browser events. */
|
|
40
|
+
on<K extends keyof BrowserEvents>(event: K, handler: (data: BrowserEvents[K]) => void): (() => void) | undefined;
|
|
41
|
+
disconnectedCallback(): void;
|
|
42
|
+
}
|
|
43
|
+
/** Options for createShell(). */
|
|
44
|
+
export interface CreateShellOptions extends GenomeBrowserOptions {
|
|
45
|
+
/** UI shell theme (CSS chrome). Separate from GenomeBrowserOptions.theme (render palette). */
|
|
46
|
+
shellTheme?: ShellTheme;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Convenience function to create an <loom-browser> shell and initialize it.
|
|
50
|
+
* Returns the shell element (with .browser for the underlying GenomeBrowser).
|
|
51
|
+
*/
|
|
52
|
+
export declare function createShell(container: HTMLElement, options: CreateShellOptions): LoomBrowserShell;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-chromosome-select> — Chromosome dropdown for quick navigation.
|
|
3
|
+
*
|
|
4
|
+
* Lists main chromosomes (chr1-22, X, Y, M) plus "All" for whole genome view.
|
|
5
|
+
* Updates automatically when the browser locus changes.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
8
|
+
export declare class LoomChromosomeSelect extends HTMLElement {
|
|
9
|
+
private select;
|
|
10
|
+
private unsubscribe;
|
|
11
|
+
private _browser;
|
|
12
|
+
constructor();
|
|
13
|
+
set browser(b: GenomeBrowser | null);
|
|
14
|
+
get browser(): GenomeBrowser | null;
|
|
15
|
+
private populate;
|
|
16
|
+
private updateSelection;
|
|
17
|
+
disconnectedCallback(): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-context-menu> — Right-click context menu Web Component.
|
|
3
|
+
*
|
|
4
|
+
* Renders ContextMenuItem[] as a styled menu with action items, checkboxes,
|
|
5
|
+
* separators, and one level of submenu nesting.
|
|
6
|
+
*
|
|
7
|
+
* Also exports DefaultContextMenuProvider which wraps this component and
|
|
8
|
+
* implements the ContextMenuProvider interface.
|
|
9
|
+
*
|
|
10
|
+
* Customizable via CSS custom properties:
|
|
11
|
+
* --loom-menu-bg, --loom-menu-border, --loom-menu-radius, --loom-menu-shadow,
|
|
12
|
+
* --loom-menu-font, --loom-menu-color, --loom-menu-hover, --loom-menu-divider
|
|
13
|
+
*/
|
|
14
|
+
import type { ContextMenuItem } from '../../types';
|
|
15
|
+
import type { ContextMenuProvider } from '../../contextMenuProvider';
|
|
16
|
+
export declare class LoomContextMenu extends HTMLElement {
|
|
17
|
+
private menuDiv;
|
|
18
|
+
constructor();
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
/** Populate the menu from typed ContextMenuItem data. */
|
|
21
|
+
setItems(items: ContextMenuItem[]): void;
|
|
22
|
+
private buildItems;
|
|
23
|
+
/** Position and show the menu, clamping to container bounds. */
|
|
24
|
+
showAt(x: number, y: number): void;
|
|
25
|
+
hide(): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Default ContextMenuProvider using the <loom-context-menu> Web Component.
|
|
29
|
+
* Lazily creates the element on first show() call (same pattern as DefaultPopupProvider).
|
|
30
|
+
*/
|
|
31
|
+
export declare class DefaultContextMenuProvider implements ContextMenuProvider {
|
|
32
|
+
private element;
|
|
33
|
+
show(items: ContextMenuItem[], position: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
}, container: HTMLElement): void;
|
|
37
|
+
hide(): void;
|
|
38
|
+
dispose(): void;
|
|
39
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-export-controls> — SVG/PNG export buttons.
|
|
3
|
+
*
|
|
4
|
+
* Adds "Save SVG" and "Save PNG" buttons to the shell navbar.
|
|
5
|
+
* Calls GenomeBrowser.saveSVGtoFile() and savePNGtoFile() respectively.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
8
|
+
export declare class LoomExportControls extends HTMLElement {
|
|
9
|
+
private _browser;
|
|
10
|
+
constructor();
|
|
11
|
+
set browser(b: GenomeBrowser | null);
|
|
12
|
+
get browser(): GenomeBrowser | null;
|
|
13
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-input-dialog> — Simple modal input dialog Web Component.
|
|
3
|
+
*
|
|
4
|
+
* Shows a label, text input, and OK/Cancel buttons. Returns the entered
|
|
5
|
+
* value via a Promise. Used by the context menu's "Set track height" action.
|
|
6
|
+
*
|
|
7
|
+
* Customizable via CSS custom properties:
|
|
8
|
+
* --loom-dialog-bg, --loom-dialog-border, --loom-dialog-shadow,
|
|
9
|
+
* --loom-dialog-font, --loom-dialog-color, --loom-dialog-radius,
|
|
10
|
+
* --loom-dialog-btn-bg, --loom-dialog-btn-color
|
|
11
|
+
*/
|
|
12
|
+
export declare class LoomInputDialog extends HTMLElement {
|
|
13
|
+
private labelEl;
|
|
14
|
+
private inputEl;
|
|
15
|
+
private okBtn;
|
|
16
|
+
private cancelBtn;
|
|
17
|
+
private resolve;
|
|
18
|
+
constructor();
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Show the dialog and return a Promise that resolves with the input value
|
|
22
|
+
* (on OK/Enter) or null (on Cancel/Escape).
|
|
23
|
+
*/
|
|
24
|
+
prompt(label: string, currentValue: string | number): Promise<string | null>;
|
|
25
|
+
private confirm;
|
|
26
|
+
private cancel;
|
|
27
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-locus-input> — Locus search/display input.
|
|
3
|
+
*
|
|
4
|
+
* Shows the current locus as a formatted string. User can type a new locus
|
|
5
|
+
* and press Enter to navigate. Updates automatically on locuschange events.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
8
|
+
export declare class LoomLocusInput extends HTMLElement {
|
|
9
|
+
private input;
|
|
10
|
+
private unsubscribe;
|
|
11
|
+
private _browser;
|
|
12
|
+
constructor();
|
|
13
|
+
set browser(b: GenomeBrowser | null);
|
|
14
|
+
get browser(): GenomeBrowser | null;
|
|
15
|
+
private updateDisplay;
|
|
16
|
+
private doSearch;
|
|
17
|
+
disconnectedCallback(): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-navbar> — Horizontal navigation bar composing locus input, window size, and zoom controls.
|
|
3
|
+
*/
|
|
4
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
5
|
+
export declare class LoomNavbar extends HTMLElement {
|
|
6
|
+
private chromSelect;
|
|
7
|
+
private locusInput;
|
|
8
|
+
private zoomControls;
|
|
9
|
+
private windowSize;
|
|
10
|
+
private exportControls;
|
|
11
|
+
private _browser;
|
|
12
|
+
constructor();
|
|
13
|
+
set browser(b: GenomeBrowser | null);
|
|
14
|
+
get browser(): GenomeBrowser | null;
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-popup> — Feature popup / tooltip Web Component.
|
|
3
|
+
*
|
|
4
|
+
* Renders PopupDataItem[] as a name/value table. Positioned as a floating
|
|
5
|
+
* element near the pointer, clamped to stay within the viewport.
|
|
6
|
+
*
|
|
7
|
+
* Also exports DefaultPopupProvider which wraps this component and
|
|
8
|
+
* implements the PopupProvider interface.
|
|
9
|
+
*/
|
|
10
|
+
import type { PopupDataItem } from '../../types';
|
|
11
|
+
import type { PopupProvider } from '../../popupProvider';
|
|
12
|
+
export declare class LoomPopup extends HTMLElement {
|
|
13
|
+
constructor();
|
|
14
|
+
/** Populate popup with data items and show it. */
|
|
15
|
+
setData(data: PopupDataItem[]): void;
|
|
16
|
+
/** Position relative to a parent container and show. */
|
|
17
|
+
showAt(x: number, y: number): void;
|
|
18
|
+
hide(): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Default PopupProvider implementation using the <loom-popup> Web Component.
|
|
22
|
+
* Creates and manages a single popup element within the browser container.
|
|
23
|
+
*/
|
|
24
|
+
export declare class DefaultPopupProvider implements PopupProvider {
|
|
25
|
+
private element;
|
|
26
|
+
show(data: PopupDataItem[], position: {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
}, container: HTMLElement): void;
|
|
30
|
+
hide(): void;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-window-size> — Read-only display of current viewport bp range.
|
|
3
|
+
*/
|
|
4
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
5
|
+
export declare class LoomWindowSize extends HTMLElement {
|
|
6
|
+
private label;
|
|
7
|
+
private unsubscribe;
|
|
8
|
+
private _browser;
|
|
9
|
+
constructor();
|
|
10
|
+
set browser(b: GenomeBrowser | null);
|
|
11
|
+
get browser(): GenomeBrowser | null;
|
|
12
|
+
private update;
|
|
13
|
+
disconnectedCallback(): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <loom-zoom-controls> — Zoom in/out buttons.
|
|
3
|
+
*/
|
|
4
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
5
|
+
export declare class LoomZoomControls extends HTMLElement {
|
|
6
|
+
private _browser;
|
|
7
|
+
constructor();
|
|
8
|
+
set browser(b: GenomeBrowser | null);
|
|
9
|
+
get browser(): GenomeBrowser | null;
|
|
10
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Shell — Web components for interacting with the headless GenomeBrowser.
|
|
3
|
+
*
|
|
4
|
+
* Importing this module auto-registers all custom elements:
|
|
5
|
+
* <loom-browser>, <loom-navbar>, <loom-chromosome-select>, <loom-locus-input>, <loom-zoom-controls>, <loom-window-size>, <loom-export-controls>
|
|
6
|
+
*/
|
|
7
|
+
export { EventEmitter } from '../events';
|
|
8
|
+
export { parseLocus, formatLocus, formatBpLength } from '../locusUtils';
|
|
9
|
+
export { classicThemeCSS, modernThemeCSS, getThemeCSS } from './themes';
|
|
10
|
+
export type { ShellTheme } from './themes';
|
|
11
|
+
export { LoomChromosomeSelect } from './components/LoomChromosomeSelect';
|
|
12
|
+
export { LoomLocusInput } from './components/LoomLocusInput';
|
|
13
|
+
export { LoomZoomControls } from './components/LoomZoomControls';
|
|
14
|
+
export { LoomWindowSize } from './components/LoomWindowSize';
|
|
15
|
+
export { LoomExportControls } from './components/LoomExportControls';
|
|
16
|
+
export { LoomNavbar } from './components/LoomNavbar';
|
|
17
|
+
export { LoomBrowserShell, createShell } from './components/LoomBrowserShell';
|
|
18
|
+
export type { CreateShellOptions } from './components/LoomBrowserShell';
|
|
19
|
+
export { LoomPopup, DefaultPopupProvider } from './components/LoomPopup';
|
|
20
|
+
export { LoomContextMenu, DefaultContextMenuProvider } from './components/LoomContextMenu';
|
|
21
|
+
export { LoomInputDialog } from './components/LoomInputDialog';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSS custom property themes for UI shell web components.
|
|
3
|
+
*
|
|
4
|
+
* Themes are injected as <style> blocks into Shadow DOM roots.
|
|
5
|
+
* Components reference CSS custom properties (--loom-*) for all visual styling.
|
|
6
|
+
*/
|
|
7
|
+
export type ShellTheme = 'classic' | 'modern' | 'dark';
|
|
8
|
+
/** Classic theme — matches igv.js navbar look. */
|
|
9
|
+
export declare const classicThemeCSS = "\n:host {\n --loom-navbar-bg: #f3f3f3;\n --loom-navbar-height: 32px;\n --loom-navbar-padding: 0 8px;\n --loom-font: 12px Arial, sans-serif;\n --loom-font-small: 11px Arial, sans-serif;\n --loom-text-color: #333;\n --loom-text-muted: #737373;\n --loom-border: 1px solid #ccc;\n --loom-border-radius: 4px;\n --loom-button-bg: white;\n --loom-button-hover: #e8e8e8;\n --loom-button-border: 1px solid #b0b0b0;\n --loom-button-size: 24px;\n --loom-input-bg: white;\n --loom-input-border: 1px solid #b0b0b0;\n --loom-input-focus-border: 1px solid #4A90D9;\n --loom-input-width: 220px;\n --loom-input-height: 22px;\n --loom-accent: #4A90D9;\n --loom-icon-color: #555;\n --loom-icon-size: 14px;\n --loom-gap: 8px;\n}\n";
|
|
10
|
+
/** Modern theme — softer colors, rounded corners, taller navbar. */
|
|
11
|
+
export declare const modernThemeCSS = "\n:host {\n --loom-navbar-bg: #fafbfc;\n --loom-navbar-height: 40px;\n --loom-navbar-padding: 0 12px;\n --loom-font: 13px Inter, system-ui, -apple-system, sans-serif;\n --loom-font-small: 11px Inter, system-ui, -apple-system, sans-serif;\n --loom-text-color: #1a1a1a;\n --loom-text-muted: #6b7280;\n --loom-border: 1px solid rgba(0, 0, 0, 0.08);\n --loom-border-radius: 8px;\n --loom-button-bg: white;\n --loom-button-hover: #f0f4ff;\n --loom-button-border: 1px solid rgba(0, 0, 0, 0.1);\n --loom-button-size: 28px;\n --loom-input-bg: white;\n --loom-input-border: 1px solid rgba(0, 0, 0, 0.12);\n --loom-input-focus-border: 1px solid #4A90D9;\n --loom-input-width: 260px;\n --loom-input-height: 28px;\n --loom-accent: #4A90D9;\n --loom-icon-color: #6b7280;\n --loom-icon-size: 16px;\n --loom-gap: 10px;\n}\n";
|
|
12
|
+
/** Dark theme — dark backgrounds, light text, high contrast. */
|
|
13
|
+
export declare const darkThemeCSS = "\n:host {\n --loom-shell-bg: #16162a;\n --loom-navbar-bg: #1a1a2e;\n --loom-navbar-height: 36px;\n --loom-navbar-padding: 0 10px;\n --loom-font: 12px Arial, sans-serif;\n --loom-font-small: 11px Arial, sans-serif;\n --loom-text-color: #e0e0e0;\n --loom-text-muted: #888;\n --loom-border: 1px solid #333;\n --loom-border-radius: 4px;\n --loom-button-bg: #2a2a3e;\n --loom-button-hover: #3a3a50;\n --loom-button-border: 1px solid #444;\n --loom-button-size: 24px;\n --loom-input-bg: #2a2a3e;\n --loom-input-border: 1px solid #444;\n --loom-input-focus-border: 1px solid #6a9fd9;\n --loom-input-width: 220px;\n --loom-input-height: 22px;\n --loom-accent: #6a9fd9;\n --loom-icon-color: #b0b0b0;\n --loom-icon-size: 14px;\n --loom-gap: 8px;\n}\n";
|
|
14
|
+
export declare function getThemeCSS(theme: ShellTheme): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeWorkerProvider — Node.js worker_threads implementation of WorkerProvider.
|
|
3
|
+
*
|
|
4
|
+
* Same RPC pattern as WebWorkerProvider but uses Node.js worker_threads API.
|
|
5
|
+
* All worker_threads references use dynamic import() to avoid requiring
|
|
6
|
+
* @types/node in browser-targeted builds.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { NodeWorkerProvider } from './worker/nodeWorkerProvider'
|
|
10
|
+
* const provider = new NodeWorkerProvider(new URL('./nodeWorkerScript.js', import.meta.url))
|
|
11
|
+
* const browser = new HeadlessGenomeBrowser({ ..., workerProvider: provider })
|
|
12
|
+
* // ...
|
|
13
|
+
* provider.dispose()
|
|
14
|
+
*/
|
|
15
|
+
import type { WorkerProvider, WorkerTask, WorkerTaskResultMap } from '../workerProvider';
|
|
16
|
+
export declare class NodeWorkerProvider implements WorkerProvider {
|
|
17
|
+
private worker;
|
|
18
|
+
private nextId;
|
|
19
|
+
private pending;
|
|
20
|
+
private initPromise;
|
|
21
|
+
/**
|
|
22
|
+
* @param workerPath - Path or URL to the Node.js worker script.
|
|
23
|
+
*/
|
|
24
|
+
constructor(workerPath: string | URL);
|
|
25
|
+
private init;
|
|
26
|
+
execute<T extends WorkerTask>(task: T, transfer?: Transferable[]): Promise<WorkerTaskResultMap[T['task']]>;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure task dispatcher for worker threads.
|
|
3
|
+
*
|
|
4
|
+
* Maps WorkerTask → result using existing pure functions. No DOM, no
|
|
5
|
+
* environment-specific APIs. Imported by both the Web Worker script
|
|
6
|
+
* and the Node.js worker_threads script.
|
|
7
|
+
*/
|
|
8
|
+
import type { WorkerTask, WorkerTaskResultMap } from '../workerProvider';
|
|
9
|
+
/**
|
|
10
|
+
* Handle a worker task and return the result.
|
|
11
|
+
*
|
|
12
|
+
* Each task is dispatched to the appropriate pure function. The return
|
|
13
|
+
* value must be structured-clone-safe (or Transferable for ArrayBuffers).
|
|
14
|
+
*/
|
|
15
|
+
export declare function handleTask(task: WorkerTask): Promise<WorkerTaskResultMap[WorkerTask['task']]>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebWorkerProvider — browser Web Worker implementation of WorkerProvider.
|
|
3
|
+
*
|
|
4
|
+
* Creates a pool of worker threads and dispatches tasks via round-robin.
|
|
5
|
+
* Supports Transferable for zero-copy ArrayBuffer transfer.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const provider = new WebWorkerProvider({ workerUrl: '/loom-worker.js', poolSize: 4 })
|
|
9
|
+
* const browser = new GenomeBrowser({ ..., workerProvider: provider })
|
|
10
|
+
* // ...
|
|
11
|
+
* provider.dispose()
|
|
12
|
+
*/
|
|
13
|
+
import type { WorkerProvider, WorkerTask, WorkerTaskResultMap } from '../workerProvider';
|
|
14
|
+
export interface WebWorkerProviderOptions {
|
|
15
|
+
/**
|
|
16
|
+
* URL to the worker script (built from workerScript.ts).
|
|
17
|
+
* Can be a blob URL, data URL, or path to a bundled worker script.
|
|
18
|
+
* Mutually exclusive with `workerFactory`.
|
|
19
|
+
*/
|
|
20
|
+
workerUrl?: string | URL;
|
|
21
|
+
/**
|
|
22
|
+
* Factory function that creates Worker instances.
|
|
23
|
+
* Use this with bundlers like webpack 5 that require `new Worker(new URL(...))` in
|
|
24
|
+
* the same expression for static analysis:
|
|
25
|
+
*
|
|
26
|
+
* workerFactory: () => new Worker(new URL('./workerScript.ts', import.meta.url))
|
|
27
|
+
*
|
|
28
|
+
* Mutually exclusive with `workerUrl`.
|
|
29
|
+
*/
|
|
30
|
+
workerFactory?: () => Worker;
|
|
31
|
+
/**
|
|
32
|
+
* Number of workers in the pool. Tasks are distributed round-robin.
|
|
33
|
+
* Default: 1.
|
|
34
|
+
*/
|
|
35
|
+
poolSize?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare class WebWorkerProvider implements WorkerProvider {
|
|
38
|
+
private workers;
|
|
39
|
+
private nextId;
|
|
40
|
+
private nextWorker;
|
|
41
|
+
private pending;
|
|
42
|
+
/**
|
|
43
|
+
* @param optionsOrUrl - Options object with workerUrl and poolSize,
|
|
44
|
+
* or a URL string/URL for backward compatibility (single worker).
|
|
45
|
+
*/
|
|
46
|
+
constructor(optionsOrUrl: WebWorkerProviderOptions | string | URL);
|
|
47
|
+
/** Number of workers in the pool. */
|
|
48
|
+
get poolSize(): number;
|
|
49
|
+
execute<T extends WorkerTask>(task: T, transfer?: Transferable[]): Promise<WorkerTaskResultMap[T['task']]>;
|
|
50
|
+
dispose(): void;
|
|
51
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Worker entry point.
|
|
3
|
+
*
|
|
4
|
+
* This file is the script that runs inside the Web Worker. It listens
|
|
5
|
+
* for messages from the main thread, dispatches them to the task handler,
|
|
6
|
+
* and posts results back.
|
|
7
|
+
*
|
|
8
|
+
* Bundle this file as a standalone module (e.g. via Rollup/Vite worker plugin)
|
|
9
|
+
* and pass the resulting URL to WebWorkerProvider.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkerProvider — environment abstraction for offloading CPU-intensive tasks.
|
|
3
|
+
*
|
|
4
|
+
* Follows the same injection pattern as CanvasProvider:
|
|
5
|
+
* - Interface with minimal methods
|
|
6
|
+
* - Concrete implementations for each environment
|
|
7
|
+
* - Optional injection with a sensible default (MainThreadProvider)
|
|
8
|
+
*
|
|
9
|
+
* Implementations:
|
|
10
|
+
* - MainThreadProvider — synchronous fallback (runs tasks on main thread)
|
|
11
|
+
* - WebWorkerProvider — browser (Web Workers)
|
|
12
|
+
* - NodeWorkerProvider — Node.js (worker_threads)
|
|
13
|
+
*/
|
|
14
|
+
import type { AnnotationFeature, WigFeature, WindowFunction, TextFileFormat } from './types';
|
|
15
|
+
import type { FeatureHeader } from './formats/featureParser';
|
|
16
|
+
export interface PackTask {
|
|
17
|
+
task: 'pack';
|
|
18
|
+
features: AnnotationFeature[];
|
|
19
|
+
maxRows?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface SummarizeWigTask {
|
|
22
|
+
task: 'summarize';
|
|
23
|
+
features: WigFeature[];
|
|
24
|
+
startBP: number;
|
|
25
|
+
bpPerPixel: number;
|
|
26
|
+
windowFunction: WindowFunction;
|
|
27
|
+
}
|
|
28
|
+
export interface ComputeWigRangeTask {
|
|
29
|
+
task: 'computeWigRange';
|
|
30
|
+
features: WigFeature[];
|
|
31
|
+
}
|
|
32
|
+
export interface ParseFeaturesTask {
|
|
33
|
+
task: 'parseFeatures';
|
|
34
|
+
/** Raw text lines to parse. */
|
|
35
|
+
lines: string[];
|
|
36
|
+
/** File format (bed, gff3, narrowpeak, etc.). */
|
|
37
|
+
format: TextFileFormat;
|
|
38
|
+
/** Pre-parsed header metadata. */
|
|
39
|
+
header?: FeatureHeader;
|
|
40
|
+
/** Whether to assemble GFF transcripts. Default: true. */
|
|
41
|
+
assembleGFF?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export type WorkerTask = PackTask | SummarizeWigTask | ComputeWigRangeTask | ParseFeaturesTask;
|
|
44
|
+
/** Maps task name → result type. */
|
|
45
|
+
export interface WorkerTaskResultMap {
|
|
46
|
+
pack: AnnotationFeature[];
|
|
47
|
+
summarize: WigFeature[];
|
|
48
|
+
computeWigRange: {
|
|
49
|
+
min: number;
|
|
50
|
+
max: number;
|
|
51
|
+
};
|
|
52
|
+
parseFeatures: unknown[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Execute CPU-intensive tasks, potentially in a worker thread.
|
|
56
|
+
*
|
|
57
|
+
* The `transfer` parameter accepts `Transferable` objects (e.g. `ArrayBuffer`)
|
|
58
|
+
* for zero-copy transfer to the worker. After transfer, the original buffer
|
|
59
|
+
* becomes detached on the sending side.
|
|
60
|
+
*/
|
|
61
|
+
export interface WorkerProvider {
|
|
62
|
+
execute<T extends WorkerTask>(task: T, transfer?: Transferable[]): Promise<WorkerTaskResultMap[T['task']]>;
|
|
63
|
+
/** Terminate worker threads and release resources. */
|
|
64
|
+
dispose(): void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Runs all tasks on the main thread using direct function calls.
|
|
68
|
+
* This is the default when no WorkerProvider is supplied.
|
|
69
|
+
*/
|
|
70
|
+
export declare class MainThreadProvider implements WorkerProvider {
|
|
71
|
+
execute<T extends WorkerTask>(task: T): Promise<WorkerTaskResultMap[T['task']]>;
|
|
72
|
+
private dispatch;
|
|
73
|
+
dispose(): void;
|
|
74
|
+
}
|
|
75
|
+
/** Default worker provider: runs everything on the main thread. */
|
|
76
|
+
export declare const mainThreadProvider: WorkerProvider;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StateProjection — concise state snapshots with record/diff support.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a HeadlessGenomeBrowser to produce compact, serializable state objects.
|
|
5
|
+
* Supports snapshotting (record) and incremental diffs against prior snapshots.
|
|
6
|
+
*
|
|
7
|
+
* Feature summarization reads from the browser's cache via getCachedFeatures(),
|
|
8
|
+
* filters to the visible viewport, and applies type-specific summarization.
|
|
9
|
+
*
|
|
10
|
+
* Swappable: consumers can extend or replace this class for custom projection logic.
|
|
11
|
+
*/
|
|
12
|
+
import type { Locus, TrackFeatureSummary, ROISetConfig } from './types';
|
|
13
|
+
import type { HeadlessGenomeBrowser, ManagedTrack } from './headlessGenomeBrowser';
|
|
14
|
+
/** Zoom level classification based on viewport span. */
|
|
15
|
+
export type ZoomLevel = 'base' | 'element' | 'gene' | 'region' | 'chromosome' | 'genome';
|
|
16
|
+
/** Concise summary of a single track, suitable for LLM consumption. */
|
|
17
|
+
export interface TrackSummary {
|
|
18
|
+
id: string;
|
|
19
|
+
type: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
metadata?: Record<string, string>;
|
|
22
|
+
/** True when a data source exists but no cached data is available yet. */
|
|
23
|
+
loading?: boolean;
|
|
24
|
+
featureSummary?: TrackFeatureSummary;
|
|
25
|
+
}
|
|
26
|
+
/** Full projected state of the browser — concise, JSON-serializable. */
|
|
27
|
+
export interface ProjectedState {
|
|
28
|
+
locus: Locus;
|
|
29
|
+
/** Formatted locus string, e.g. "chr17:7,668,421-7,687,490" */
|
|
30
|
+
locusString: string;
|
|
31
|
+
/** Viewport span in base pairs. */
|
|
32
|
+
span: number;
|
|
33
|
+
zoomLevel: ZoomLevel;
|
|
34
|
+
genome?: string;
|
|
35
|
+
tracks: TrackSummary[];
|
|
36
|
+
rois: ROISetConfig[];
|
|
37
|
+
}
|
|
38
|
+
/** Per-field [before, after] diff for a track whose feature summary changed. */
|
|
39
|
+
export interface TrackChangeDiff {
|
|
40
|
+
id: string;
|
|
41
|
+
type: string;
|
|
42
|
+
featureCount?: [number, number];
|
|
43
|
+
signalRange?: [{
|
|
44
|
+
min: number;
|
|
45
|
+
max: number;
|
|
46
|
+
}, {
|
|
47
|
+
min: number;
|
|
48
|
+
max: number;
|
|
49
|
+
}];
|
|
50
|
+
featureNames?: [string[], string[]];
|
|
51
|
+
packingDepth?: [number, number];
|
|
52
|
+
valueRange?: [{
|
|
53
|
+
min: number;
|
|
54
|
+
max: number;
|
|
55
|
+
}, {
|
|
56
|
+
min: number;
|
|
57
|
+
max: number;
|
|
58
|
+
}];
|
|
59
|
+
}
|
|
60
|
+
/** Diff between two projected states — only includes what changed. */
|
|
61
|
+
export interface StateDiff {
|
|
62
|
+
/** Present if locus changed. */
|
|
63
|
+
locus?: [Locus, Locus];
|
|
64
|
+
/** Present if zoom level changed. */
|
|
65
|
+
zoomLevel?: [ZoomLevel, ZoomLevel];
|
|
66
|
+
/** Tracks added since the snapshot. */
|
|
67
|
+
tracksAdded?: TrackSummary[];
|
|
68
|
+
/** Track IDs removed since the snapshot. */
|
|
69
|
+
tracksRemoved?: string[];
|
|
70
|
+
/** Tracks whose feature summary changed, with per-field [before, after] tuples. */
|
|
71
|
+
tracksChanged?: TrackChangeDiff[];
|
|
72
|
+
/** Present if ROIs changed. */
|
|
73
|
+
roisChanged?: boolean;
|
|
74
|
+
/** True if nothing changed. */
|
|
75
|
+
unchanged: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface GetStateOptions {
|
|
78
|
+
/** If provided, record the state under this key for future diff() calls. */
|
|
79
|
+
record?: string;
|
|
80
|
+
}
|
|
81
|
+
export declare class StateProjection {
|
|
82
|
+
private browser;
|
|
83
|
+
private snapshots;
|
|
84
|
+
constructor(browser: HeadlessGenomeBrowser);
|
|
85
|
+
/** Get the current projected state. Optionally record it under a key. */
|
|
86
|
+
getState(options?: GetStateOptions): ProjectedState;
|
|
87
|
+
/**
|
|
88
|
+
* Diff the current state against a named snapshot.
|
|
89
|
+
* Returns an object describing only what changed.
|
|
90
|
+
* Throws if the key doesn't exist.
|
|
91
|
+
*/
|
|
92
|
+
diff(key: string): StateDiff;
|
|
93
|
+
/** Record the current state under a key without returning it. */
|
|
94
|
+
record(key: string): void;
|
|
95
|
+
/** Delete a snapshot by key. */
|
|
96
|
+
deleteSnapshot(key: string): boolean;
|
|
97
|
+
/** Get a previously recorded snapshot by key. */
|
|
98
|
+
getSnapshot(key: string): ProjectedState | undefined;
|
|
99
|
+
/** List all snapshot keys. */
|
|
100
|
+
snapshotKeys(): string[];
|
|
101
|
+
/** Clear all snapshots. */
|
|
102
|
+
clearSnapshots(): void;
|
|
103
|
+
private project;
|
|
104
|
+
private projectTrack;
|
|
105
|
+
/**
|
|
106
|
+
* Summarize cached features for a track, filtered to the visible viewport.
|
|
107
|
+
* Reads from the browser's cache via getCachedFeatures() and applies
|
|
108
|
+
* type-specific summarization. Override this method in subclasses for
|
|
109
|
+
* custom summary formats.
|
|
110
|
+
*/
|
|
111
|
+
protected summarizeFeatures(mt: ManagedTrack, locus: Locus): TrackFeatureSummary | undefined;
|
|
112
|
+
private summarizeWig;
|
|
113
|
+
private summarizeAnnotation;
|
|
114
|
+
private summarizeInteraction;
|
|
115
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BGZF block loader — fetches and decompresses BGZF blocks via HTTP range requests.
|
|
3
|
+
*
|
|
4
|
+
* Given two virtual offsets (from a tabix index), fetches the compressed bytes
|
|
5
|
+
* covering those blocks, decompresses them, and returns the data between the
|
|
6
|
+
* virtual offset boundaries.
|
|
7
|
+
*
|
|
8
|
+
* Caches the most recent compressed byte range so sequential/overlapping queries
|
|
9
|
+
* (common when iterating through tabix chunks) avoid redundant HTTP requests.
|
|
10
|
+
*
|
|
11
|
+
* Port of js/bam/bgzBlockLoader.ts BGZBlockLoader.
|
|
12
|
+
* Layer 1 (Data + Layout): pure data, no DOM.
|
|
13
|
+
*/
|
|
14
|
+
import type { VirtualOffset } from './virtualOffset';
|
|
15
|
+
import type { WorkerProvider } from '../workerProvider';
|
|
16
|
+
export interface BgzBlockLoaderOptions {
|
|
17
|
+
/**
|
|
18
|
+
* Cache compressed blocks for sequential/overlapping queries.
|
|
19
|
+
* Default: true. Disable for memory-constrained environments.
|
|
20
|
+
* Matches igv.js BGZBlockLoader.cacheBlocks config.
|
|
21
|
+
*/
|
|
22
|
+
cacheBlocks?: boolean;
|
|
23
|
+
/** Worker provider for offloading BGZF decompression. */
|
|
24
|
+
workerProvider?: WorkerProvider;
|
|
25
|
+
}
|
|
26
|
+
export declare class BgzBlockLoader {
|
|
27
|
+
private readonly url;
|
|
28
|
+
private readonly cacheEnabled;
|
|
29
|
+
private readonly workerProvider?;
|
|
30
|
+
private cache;
|
|
31
|
+
constructor(url: string, options?: BgzBlockLoaderOptions);
|
|
32
|
+
/**
|
|
33
|
+
* Fetch and decompress data between two virtual offsets.
|
|
34
|
+
*
|
|
35
|
+
* Uses a single-entry cache of compressed bytes. When the requested range
|
|
36
|
+
* overlaps or falls within the cached range, only the missing portions are
|
|
37
|
+
* fetched. This matches the igv.js pattern where sequential tabix chunks
|
|
38
|
+
* often share or overlap compressed block ranges.
|
|
39
|
+
*
|
|
40
|
+
* Port of js/bam/bgzBlockLoader.ts BGZBlockLoader.getData().
|
|
41
|
+
*/
|
|
42
|
+
getData(minv: VirtualOffset, maxv: VirtualOffset, signal?: AbortSignal): Promise<Uint8Array>;
|
|
43
|
+
/**
|
|
44
|
+
* Return inflated blocks for the given compressed block range.
|
|
45
|
+
* Manages the compressed-data cache to minimize HTTP requests.
|
|
46
|
+
*
|
|
47
|
+
* Port of js/bam/bgzBlockLoader.ts BGZBlockLoader.getInflatedBlocks().
|
|
48
|
+
*/
|
|
49
|
+
private getInflatedBlocks;
|
|
50
|
+
/**
|
|
51
|
+
* Decompress BGZF blocks, delegating to worker when available.
|
|
52
|
+
*/
|
|
53
|
+
private inflate;
|
|
54
|
+
/**
|
|
55
|
+
* Fetch compressed block data from the remote file.
|
|
56
|
+
*
|
|
57
|
+
* Port of js/bam/bgzBlockLoader.ts BGZBlockLoader.loadBLockData().
|
|
58
|
+
*/
|
|
59
|
+
private loadBlockData;
|
|
60
|
+
}
|