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,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackSelector — SQL-ish WHERE clause for matching tracks by metadata.
|
|
3
|
+
*
|
|
4
|
+
* Selectors support matching on track ID, name (string or RegExp), type,
|
|
5
|
+
* and arbitrary metadata key-value pairs. All provided fields use AND semantics:
|
|
6
|
+
* a track must match every specified criterion.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Remove all ATAC-seq tracks
|
|
10
|
+
* browser.removeTracks({ where: { assay: 'ATAC-seq' } })
|
|
11
|
+
*
|
|
12
|
+
* // Find wig tracks from K562
|
|
13
|
+
* browser.findTracks({ type: 'wig', where: { biosample: 'K562' } })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import type { ManagedTrack } from './headlessGenomeBrowser';
|
|
17
|
+
/** Selector for matching tracks by ID, name, type, and/or metadata. */
|
|
18
|
+
export interface TrackSelector {
|
|
19
|
+
/** Exact match against track ID. */
|
|
20
|
+
id?: string;
|
|
21
|
+
/** String: case-insensitive substring match. RegExp: test against track name. */
|
|
22
|
+
name?: string | RegExp;
|
|
23
|
+
/** Exact match against track type (e.g. 'wig', 'annotation', 'interact'). */
|
|
24
|
+
type?: string;
|
|
25
|
+
/** Metadata key-value matching. Every entry must match (AND semantics). */
|
|
26
|
+
where?: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
/** Test whether a single managed track matches all criteria in a selector. */
|
|
29
|
+
export declare function matchesSelector(mt: ManagedTrack, selector: TrackSelector): boolean;
|
|
30
|
+
/** Select all managed tracks matching a selector. */
|
|
31
|
+
export declare function selectTracks(tracks: readonly ManagedTrack[], selector: TrackSelector): ManagedTrack[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone annotation feature renderer.
|
|
3
|
+
*
|
|
4
|
+
* Adapted from js/feature/render/renderFeature.ts but with no `this` context —
|
|
5
|
+
* all configuration is passed as explicit parameters.
|
|
6
|
+
*
|
|
7
|
+
* Renders gene, BED, GFF, and peak features with exon/UTR/CDS structure,
|
|
8
|
+
* intron lines, strand arrows, labels, and per-feature colors.
|
|
9
|
+
*/
|
|
10
|
+
import type { AnnotationFeature, AnnotationRenderConfig, RenderContext } from '../../types';
|
|
11
|
+
/**
|
|
12
|
+
* Render a set of annotation features onto a canvas context.
|
|
13
|
+
*
|
|
14
|
+
* Features should already have `.row` assigned (via `pack()`).
|
|
15
|
+
* The canvas should be sized and cleared before calling this.
|
|
16
|
+
*/
|
|
17
|
+
export declare function renderAnnotationTrack(ctx: CanvasRenderingContext2D, features: AnnotationFeature[], config: AnnotationRenderConfig, rc: RenderContext): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset render themes for annotation tracks.
|
|
3
|
+
*
|
|
4
|
+
* Each theme is a Partial<AnnotationRenderConfig> that can be spread over defaults.
|
|
5
|
+
* Usage: { ...defaultAnnotationRenderConfig(), ...modernTheme }
|
|
6
|
+
*/
|
|
7
|
+
import type { AnnotationRenderConfig } from '../../types';
|
|
8
|
+
/** Modern theme — softer colors, rounded exons, strand-based coloring. */
|
|
9
|
+
export declare const modernTheme: Partial<AnnotationRenderConfig>;
|
|
10
|
+
/** Dark theme — modern theme adapted for dark backgrounds. */
|
|
11
|
+
export declare const darkTheme: Partial<AnnotationRenderConfig>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas manager for rendering annotation features (gene, BED, GFF, peaks).
|
|
3
|
+
*
|
|
4
|
+
* Extends BaseTrackCanvas — canvas lifecycle (DPR, resize, attach/detach,
|
|
5
|
+
* background) is handled by the base class. This class only implements
|
|
6
|
+
* annotation-specific logic: feature packing, height computation, and rendering.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const canvas = document.createElement('canvas')
|
|
10
|
+
* const track = new AnnotationTrackCanvas(canvas, { locus, features })
|
|
11
|
+
* track.attachTo(containerDiv)
|
|
12
|
+
*/
|
|
13
|
+
import type { AnnotationFeature, AnnotationRenderConfig, Locus, RenderContext, AnnotationTrackSessionConfig, HitTestResult, AxisInfo, ContextMenuItem } from '../../types';
|
|
14
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
15
|
+
import type { WorkerProvider } from '../../workerProvider';
|
|
16
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
17
|
+
import { BaseTrackCanvas } from '../baseTrackCanvas';
|
|
18
|
+
export type { Locus } from '../../types';
|
|
19
|
+
export interface AnnotationTrackCanvasOptions {
|
|
20
|
+
locus: Locus;
|
|
21
|
+
features: AnnotationFeature[];
|
|
22
|
+
/** Per-track config overrides. Applied after theme-derived defaults. */
|
|
23
|
+
config?: Partial<AnnotationRenderConfig>;
|
|
24
|
+
/** Unified render theme. Palette drives default colors/fonts. */
|
|
25
|
+
theme?: Partial<RenderTheme>;
|
|
26
|
+
/** Fixed pixel height. If not set, computed from row count. */
|
|
27
|
+
height?: number;
|
|
28
|
+
/** Background color. Default: palette.background. */
|
|
29
|
+
background?: string;
|
|
30
|
+
/** Canvas provider for environment abstraction. Default: DOMCanvasProvider. */
|
|
31
|
+
canvasProvider?: CanvasProvider;
|
|
32
|
+
/** Worker provider for offloading CPU-intensive tasks (packing). */
|
|
33
|
+
workerProvider?: WorkerProvider;
|
|
34
|
+
/** Track name for axis label. */
|
|
35
|
+
name?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare class AnnotationTrackCanvas extends BaseTrackCanvas<AnnotationRenderConfig> {
|
|
38
|
+
private features;
|
|
39
|
+
private fixedHeight;
|
|
40
|
+
private background;
|
|
41
|
+
private _name;
|
|
42
|
+
private workerProvider?;
|
|
43
|
+
/** Most recently packed features, available after render(). */
|
|
44
|
+
private packedFeatures;
|
|
45
|
+
/** Whether packedFeatures was pre-computed by async worker (skip sync pack in computeHeight). */
|
|
46
|
+
private packedReady;
|
|
47
|
+
readonly type = "annotation";
|
|
48
|
+
constructor(canvas: HTMLCanvasElement, options: AnnotationTrackCanvasOptions);
|
|
49
|
+
/** Update features and re-render. Dispatches async pack when workerProvider is set. */
|
|
50
|
+
setFeatures(features: AnnotationFeature[]): void;
|
|
51
|
+
protected computeHeight(_width: number): number;
|
|
52
|
+
protected getBackground(): string;
|
|
53
|
+
protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
|
|
54
|
+
getAxisInfo(): AxisInfo | undefined;
|
|
55
|
+
getContextMenuItems(_x: number, _y: number): ContextMenuItem[];
|
|
56
|
+
hitTest(x: number, y: number): HitTestResult<AnnotationFeature>[];
|
|
57
|
+
serializeConfig(theme: RenderTheme): AnnotationTrackSessionConfig;
|
|
58
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless axis renderers for the left-hand axis column.
|
|
3
|
+
*
|
|
4
|
+
* These are pure canvas renderers — they take a 2D context, axis info, and
|
|
5
|
+
* dimensions, and paint the axis. No DOM, no state, no side effects.
|
|
6
|
+
*
|
|
7
|
+
* Two variants:
|
|
8
|
+
* - renderQuantitativeAxis: tick marks + data range labels for numeric tracks (wig)
|
|
9
|
+
* - renderLabelAxis: centered rotated text label for annotation tracks (gene)
|
|
10
|
+
*/
|
|
11
|
+
import type { AxisInfo } from '../../types';
|
|
12
|
+
/** Format a number for axis labels (ported from igv.js paintAxis.ts). */
|
|
13
|
+
export declare function prettyPrintNumber(n: number): string;
|
|
14
|
+
export declare function renderQuantitativeAxis(ctx: CanvasRenderingContext2D, info: AxisInfo, width: number, height: number): void;
|
|
15
|
+
/**
|
|
16
|
+
* Paint a label-only axis (e.g., gene track name).
|
|
17
|
+
* Renders a vertically-rotated centered text label.
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderLabelAxis(ctx: CanvasRenderingContext2D, info: AxisInfo, width: number, height: number): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { renderQuantitativeAxis, renderLabelAxis, prettyPrintNumber } from './axisRenderer';
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for canvas-based genomic track renderers.
|
|
3
|
+
*
|
|
4
|
+
* Handles all shared canvas lifecycle: DPR scaling, sizing, resize observation,
|
|
5
|
+
* attach/detach, background fill, and RenderContext construction.
|
|
6
|
+
*
|
|
7
|
+
* Subclasses implement:
|
|
8
|
+
* - type (track type identifier)
|
|
9
|
+
* - computeHeight(width) — return CSS pixel height for current state
|
|
10
|
+
* - getBackground() — return background fill color
|
|
11
|
+
* - doRender(ctx, width, height, rc) — the actual drawing logic
|
|
12
|
+
*
|
|
13
|
+
* This eliminates ~80 lines of identical boilerplate per track type.
|
|
14
|
+
*/
|
|
15
|
+
import type { Locus, RenderContext, Track, TrackSessionConfig, HitTestResult, ContextMenuItem } from '../types';
|
|
16
|
+
import type { RenderTheme } from '../themes/renderTheme';
|
|
17
|
+
import type { CanvasProvider } from '../canvasProvider';
|
|
18
|
+
export declare abstract class BaseTrackCanvas<TConfig> implements Track {
|
|
19
|
+
protected _canvas: HTMLCanvasElement;
|
|
20
|
+
protected _locus: Locus;
|
|
21
|
+
protected _config: TConfig;
|
|
22
|
+
protected _height: number;
|
|
23
|
+
protected canvasProvider: CanvasProvider;
|
|
24
|
+
private resizeObserver;
|
|
25
|
+
private container;
|
|
26
|
+
private _renderSuspended;
|
|
27
|
+
private _renderPending;
|
|
28
|
+
private _error;
|
|
29
|
+
private _zoomedOut;
|
|
30
|
+
/**
|
|
31
|
+
* Visibility window in base pairs. When the viewport spans more than this
|
|
32
|
+
* many bp, data is not fetched and "Zoom in to see features" is shown.
|
|
33
|
+
* Mirrors igv.js TrackBase.visibilityWindow (js/trackViewport.ts checkZoomIn).
|
|
34
|
+
*
|
|
35
|
+
* Set to undefined or 0 to disable (always fetch). Set > 0 to enable.
|
|
36
|
+
*/
|
|
37
|
+
visibilityWindow?: number;
|
|
38
|
+
abstract readonly type: string;
|
|
39
|
+
get canvas(): HTMLCanvasElement;
|
|
40
|
+
get locus(): Locus;
|
|
41
|
+
get height(): number;
|
|
42
|
+
/** Current track config (read-only). Use setConfig() to update. */
|
|
43
|
+
get config(): TConfig;
|
|
44
|
+
constructor(canvas: HTMLCanvasElement, locus: Locus, config: TConfig, canvasProvider?: CanvasProvider);
|
|
45
|
+
/** Update locus and re-render. */
|
|
46
|
+
setLocus(locus: Locus): void;
|
|
47
|
+
/** Merge partial config and re-render. */
|
|
48
|
+
setConfig(config: Partial<TConfig>): void;
|
|
49
|
+
/** Suspend rendering — calls to render() will be deferred until resumeRendering(). */
|
|
50
|
+
suspendRendering(): void;
|
|
51
|
+
/** Resume rendering. If render() was called while suspended, flushes now. */
|
|
52
|
+
resumeRendering(): void;
|
|
53
|
+
/** Set an error state to render on the track canvas. Pass null to clear. */
|
|
54
|
+
setError(error: Error | null): void;
|
|
55
|
+
/**
|
|
56
|
+
* Mark this track as zoomed out beyond its visibility window.
|
|
57
|
+
* When true, render() shows "Zoom in to see features" instead of track content.
|
|
58
|
+
* Called by HeadlessGenomeBrowser during data lifecycle.
|
|
59
|
+
*/
|
|
60
|
+
setZoomedOut(zoomedOut: boolean): void;
|
|
61
|
+
/**
|
|
62
|
+
* Hit-test at canvas-relative pixel coordinates.
|
|
63
|
+
* Returns features at that point with pre-formatted popup data.
|
|
64
|
+
* Default: empty (no interactive features). Subclasses override.
|
|
65
|
+
*/
|
|
66
|
+
hitTest(_x: number, _y: number): HitTestResult[];
|
|
67
|
+
/**
|
|
68
|
+
* Return context menu items for a right-click at canvas-relative coordinates.
|
|
69
|
+
* Default: undefined (no track-specific items). Subclasses override.
|
|
70
|
+
*/
|
|
71
|
+
getContextMenuItems(_x: number, _y: number): ContextMenuItem[] | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Attach the canvas to a container element.
|
|
74
|
+
* Appends the canvas and sets up a ResizeObserver for automatic re-renders.
|
|
75
|
+
*/
|
|
76
|
+
attachTo(container: HTMLElement): void;
|
|
77
|
+
/** Detach from container and stop observing resizes. */
|
|
78
|
+
detach(): void;
|
|
79
|
+
/** Render the track. Handles DPR, sizing, background, then delegates to doRender(). */
|
|
80
|
+
render(): void;
|
|
81
|
+
/** Draw a centered error message on the canvas. */
|
|
82
|
+
protected renderError(ctx: CanvasRenderingContext2D, width: number, height: number): void;
|
|
83
|
+
/**
|
|
84
|
+
* Draw a centered "Zoom in to see features" notice.
|
|
85
|
+
* Mirrors igv.js TrackViewport.createZoomInNotice (js/trackViewport.ts).
|
|
86
|
+
*/
|
|
87
|
+
protected renderZoomInNotice(ctx: CanvasRenderingContext2D, width: number, height: number): void;
|
|
88
|
+
/**
|
|
89
|
+
* Render this track onto an arbitrary context (e.g. Canvas2SVG for SVG export).
|
|
90
|
+
* Skips DPR scaling and canvas-element lifecycle — draws directly at the given
|
|
91
|
+
* dimensions using the track's current locus and state.
|
|
92
|
+
*
|
|
93
|
+
* Mirrors igv.js TrackViewport.renderSVGContext() which calls track.draw()
|
|
94
|
+
* with a C2S context (js/trackViewport.ts lines 525-579).
|
|
95
|
+
*/
|
|
96
|
+
renderToContext(ctx: CanvasRenderingContext2D, width: number, height: number): void;
|
|
97
|
+
/**
|
|
98
|
+
* Compute the track height in CSS pixels for the current state.
|
|
99
|
+
* Called at the start of each render(). The width parameter is provided
|
|
100
|
+
* in case height depends on layout (e.g., gene packing).
|
|
101
|
+
*/
|
|
102
|
+
protected abstract computeHeight(width: number): number;
|
|
103
|
+
/** Return the background fill color for the canvas. */
|
|
104
|
+
protected abstract getBackground(): string;
|
|
105
|
+
/** Perform the actual track-specific rendering onto the prepared canvas. */
|
|
106
|
+
protected abstract doRender(ctx: CanvasRenderingContext2D, width: number, height: number, rc: RenderContext): void;
|
|
107
|
+
/**
|
|
108
|
+
* Serialize this track's config for session save/restore.
|
|
109
|
+
* Each subclass diffs its config against theme defaults and returns
|
|
110
|
+
* a typed TrackSessionConfig with only overridden fields.
|
|
111
|
+
*/
|
|
112
|
+
abstract serializeConfig(theme: RenderTheme): TrackSessionConfig;
|
|
113
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic sequence (dynseq) renderer for wig tracks.
|
|
3
|
+
*
|
|
4
|
+
* Renders DNA base letters (A, C, G, T, N) as filled glyphs whose height
|
|
5
|
+
* is proportional to the wig signal value. Only activates at high zoom
|
|
6
|
+
* (bpPerPixel < 2) where individual bases are resolvable.
|
|
7
|
+
*
|
|
8
|
+
* Ported from js/feature/wigTrack.ts renderDynSeq/drawLetterGlyph/drawSVGPath.
|
|
9
|
+
*/
|
|
10
|
+
/** Default nucleotide color scheme matching igv.js. */
|
|
11
|
+
export declare const defaultNucleotideColors: Readonly<Record<string, string>>;
|
|
12
|
+
/**
|
|
13
|
+
* Draw a single DNA base letter as a filled glyph.
|
|
14
|
+
*
|
|
15
|
+
* @param ctx - Canvas context
|
|
16
|
+
* @param base - The base character (A, C, G, T, N)
|
|
17
|
+
* @param x - Left edge pixel position
|
|
18
|
+
* @param y - Top edge pixel position
|
|
19
|
+
* @param width - Glyph width in pixels
|
|
20
|
+
* @param height - Glyph height in pixels
|
|
21
|
+
* @param color - Fill color
|
|
22
|
+
* @param flipVertical - Flip the glyph vertically (for negative values)
|
|
23
|
+
*/
|
|
24
|
+
export declare function drawLetterGlyph(ctx: CanvasRenderingContext2D, base: string, x: number, y: number, width: number, height: number, color: string, flipVertical?: boolean, backgroundColor?: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Render a single wig feature as dynseq (DNA base glyphs scaled by value).
|
|
27
|
+
*
|
|
28
|
+
* @param ctx - Canvas context
|
|
29
|
+
* @param sequence - DNA sequence string for this feature's region
|
|
30
|
+
* @param x - Left edge pixel position of the feature
|
|
31
|
+
* @param width - Pixel width of the feature
|
|
32
|
+
* @param y - Y pixel of the data value
|
|
33
|
+
* @param y0 - Y pixel of the zero line
|
|
34
|
+
* @param value - The wig data value (for determining negative/flip)
|
|
35
|
+
* @param colors - Nucleotide color map
|
|
36
|
+
* @param backgroundColor - Background color for glyph cutouts (e.g. hole in 'A')
|
|
37
|
+
*/
|
|
38
|
+
export declare function renderDynSeqFeature(ctx: CanvasRenderingContext2D, sequence: string, x: number, width: number, y: number, y0: number, value: number, colors?: Readonly<Record<string, string>>, backgroundColor?: string): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { renderDynSeqFeature, drawLetterGlyph, defaultNucleotideColors } from './dynseqRenderer';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone gene feature renderer.
|
|
3
|
+
*
|
|
4
|
+
* Adapted from js/feature/render/renderFeature.ts but with no `this` context —
|
|
5
|
+
* all configuration is passed as explicit parameters.
|
|
6
|
+
*
|
|
7
|
+
* Scope: exon/UTR/CDS rendering, intron lines, strand arrows, labels.
|
|
8
|
+
* Deferred: amino acid rendering, QTL selection highlighting.
|
|
9
|
+
*/
|
|
10
|
+
import type { GeneFeature, GeneRenderConfig, RenderContext } from '../../types';
|
|
11
|
+
/**
|
|
12
|
+
* Render a set of gene features onto a canvas context.
|
|
13
|
+
*
|
|
14
|
+
* Features should already have `.row` assigned (via `pack()`).
|
|
15
|
+
* The canvas should be sized and cleared before calling this.
|
|
16
|
+
*/
|
|
17
|
+
export declare function renderGeneTrack(ctx: CanvasRenderingContext2D, features: GeneFeature[], config: GeneRenderConfig, rc: RenderContext): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset render themes for gene tracks.
|
|
3
|
+
*
|
|
4
|
+
* Each theme is a Partial<GeneRenderConfig> that can be spread over defaults.
|
|
5
|
+
* Usage: { ...defaultGeneRenderConfig(), ...modernTheme }
|
|
6
|
+
*/
|
|
7
|
+
import type { GeneRenderConfig } from '../../types';
|
|
8
|
+
/** Modern theme — softer colors, rounded exons, strand-based coloring. */
|
|
9
|
+
export declare const modernTheme: Partial<GeneRenderConfig>;
|
|
10
|
+
/** Dark theme — modern theme adapted for dark backgrounds. */
|
|
11
|
+
export declare const darkTheme: Partial<GeneRenderConfig>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas manager for rendering gene features.
|
|
3
|
+
*
|
|
4
|
+
* Extends BaseTrackCanvas — canvas lifecycle (DPR, resize, attach/detach,
|
|
5
|
+
* background) is handled by the base class. This class only implements
|
|
6
|
+
* gene-specific logic: feature packing, height computation, and rendering.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const canvas = document.createElement('canvas')
|
|
10
|
+
* const track = new GeneTrackCanvas(canvas, { locus, features })
|
|
11
|
+
* track.attachTo(containerDiv)
|
|
12
|
+
*/
|
|
13
|
+
import type { GeneFeature, GeneRenderConfig, Locus, RenderContext, GeneTrackSessionConfig, HitTestResult, AxisInfo, ContextMenuItem } from '../../types';
|
|
14
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
15
|
+
import type { WorkerProvider } from '../../workerProvider';
|
|
16
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
17
|
+
import { BaseTrackCanvas } from '../baseTrackCanvas';
|
|
18
|
+
export type { Locus } from '../../types';
|
|
19
|
+
export interface GeneTrackCanvasOptions {
|
|
20
|
+
locus: Locus;
|
|
21
|
+
features: GeneFeature[];
|
|
22
|
+
/** Per-track config overrides. Applied after theme-derived defaults. */
|
|
23
|
+
config?: Partial<GeneRenderConfig>;
|
|
24
|
+
/** Unified render theme. Palette drives default colors/fonts. */
|
|
25
|
+
theme?: Partial<RenderTheme>;
|
|
26
|
+
/** Fixed pixel height. If not set, computed from row count. */
|
|
27
|
+
height?: number;
|
|
28
|
+
/** Background color. Default: palette.background. */
|
|
29
|
+
background?: string;
|
|
30
|
+
/** Canvas provider for environment abstraction. Default: DOMCanvasProvider. */
|
|
31
|
+
canvasProvider?: CanvasProvider;
|
|
32
|
+
/** Worker provider for offloading CPU-intensive tasks (packing). */
|
|
33
|
+
workerProvider?: WorkerProvider;
|
|
34
|
+
/** Track name for axis label. */
|
|
35
|
+
name?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare class GeneTrackCanvas extends BaseTrackCanvas<GeneRenderConfig> {
|
|
38
|
+
private features;
|
|
39
|
+
private fixedHeight;
|
|
40
|
+
private background;
|
|
41
|
+
private _name;
|
|
42
|
+
private workerProvider?;
|
|
43
|
+
/** Most recently packed features, available after render(). */
|
|
44
|
+
private packedFeatures;
|
|
45
|
+
/** Whether packedFeatures was pre-computed by async worker (skip sync pack in computeHeight). */
|
|
46
|
+
private packedReady;
|
|
47
|
+
readonly type = "gene";
|
|
48
|
+
constructor(canvas: HTMLCanvasElement, options: GeneTrackCanvasOptions);
|
|
49
|
+
/** Update features and re-render. Dispatches async pack when workerProvider is set. */
|
|
50
|
+
setFeatures(features: GeneFeature[]): void;
|
|
51
|
+
protected computeHeight(_width: number): number;
|
|
52
|
+
protected getBackground(): string;
|
|
53
|
+
protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
|
|
54
|
+
getAxisInfo(): AxisInfo | undefined;
|
|
55
|
+
getContextMenuItems(_x: number, _y: number): ContextMenuItem[];
|
|
56
|
+
hitTest(x: number, y: number): HitTestResult<GeneFeature>[];
|
|
57
|
+
serializeConfig(theme: RenderTheme): GeneTrackSessionConfig;
|
|
58
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { renderInteractionTrack, positionString } from './interactionRenderer';
|
|
2
|
+
export type { DrawnInteractionFeature, InteractionDrawState } from './interactionRenderer';
|
|
3
|
+
export { InteractionTrackCanvas } from './interactionTrackCanvas';
|
|
4
|
+
export type { InteractionTrackCanvasOptions } from './interactionTrackCanvas';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless renderer for interaction (arc/BEDPE) tracks.
|
|
3
|
+
*
|
|
4
|
+
* Draws pairwise genomic contacts as arcs connecting two regions.
|
|
5
|
+
* Two display modes:
|
|
6
|
+
* - "nested": arc height proportional to genomic distance (ctx.arc)
|
|
7
|
+
* - "proportional": arc height proportional to score/value (ctx.ellipse)
|
|
8
|
+
*
|
|
9
|
+
* Inter-chromosome interactions are drawn as colored rectangles.
|
|
10
|
+
*
|
|
11
|
+
* Port of js/feature/interactionTrack.ts draw methods.
|
|
12
|
+
* Layer 2 (Track Canvas): uses CanvasRenderingContext2D, no DOM.
|
|
13
|
+
*/
|
|
14
|
+
import type { InteractionFeature, InteractionRenderConfig, RenderContext } from '../../types';
|
|
15
|
+
/** Draw state stored on features during rendering for hit-testing. */
|
|
16
|
+
export type InteractionDrawState = NestedDrawState | ProportionalDrawState | RectDrawState;
|
|
17
|
+
interface NestedDrawState {
|
|
18
|
+
type: 'nested';
|
|
19
|
+
xc: number;
|
|
20
|
+
yc: number;
|
|
21
|
+
r: number;
|
|
22
|
+
}
|
|
23
|
+
interface ProportionalDrawState {
|
|
24
|
+
type: 'proportional';
|
|
25
|
+
xc: number;
|
|
26
|
+
yc: number;
|
|
27
|
+
radiusX: number;
|
|
28
|
+
radiusY: number;
|
|
29
|
+
}
|
|
30
|
+
interface RectDrawState {
|
|
31
|
+
type: 'rect';
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
w: number;
|
|
35
|
+
h: number;
|
|
36
|
+
}
|
|
37
|
+
/** Feature with transient draw state attached during rendering. */
|
|
38
|
+
export interface DrawnInteractionFeature extends InteractionFeature {
|
|
39
|
+
drawState?: InteractionDrawState;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Render interaction features onto a canvas context.
|
|
43
|
+
*
|
|
44
|
+
* Stateless: all state is passed in, no side effects beyond canvas drawing
|
|
45
|
+
* and attaching drawState to features for hit-testing.
|
|
46
|
+
*/
|
|
47
|
+
export declare function renderInteractionTrack(ctx: CanvasRenderingContext2D, features: DrawnInteractionFeature[], config: InteractionRenderConfig, rc: RenderContext): void;
|
|
48
|
+
/**
|
|
49
|
+
* Format a genomic position for popup display.
|
|
50
|
+
*/
|
|
51
|
+
export declare function positionString(chr: string, start: number, end: number, strand?: string): string;
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas manager for rendering interaction (arc/BEDPE) tracks.
|
|
3
|
+
*
|
|
4
|
+
* Extends BaseTrackCanvas — canvas lifecycle is handled by the base class.
|
|
5
|
+
* This class implements interaction-specific logic: arc rendering, hit-testing,
|
|
6
|
+
* and popup data.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const canvas = document.createElement('canvas')
|
|
10
|
+
* const track = new InteractionTrackCanvas(canvas, { locus, features: [] })
|
|
11
|
+
* track.attachTo(containerDiv)
|
|
12
|
+
*/
|
|
13
|
+
import type { InteractionFeature, InteractionRenderConfig, Locus, RenderContext, InteractionTrackSessionConfig, HitTestResult, AxisInfo, ContextMenuItem, NumericState } from '../../types';
|
|
14
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
15
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
16
|
+
import { BaseTrackCanvas } from '../baseTrackCanvas';
|
|
17
|
+
export interface InteractionTrackCanvasOptions {
|
|
18
|
+
locus: Locus;
|
|
19
|
+
features: InteractionFeature[];
|
|
20
|
+
/** Per-track config overrides. Applied after theme-derived defaults. */
|
|
21
|
+
config?: Partial<InteractionRenderConfig>;
|
|
22
|
+
/** Unified render theme. Palette drives default colors/fonts. */
|
|
23
|
+
theme?: Partial<RenderTheme>;
|
|
24
|
+
/** Background color. Overrides config.background if set. */
|
|
25
|
+
background?: string;
|
|
26
|
+
/** Canvas provider for environment abstraction. Default: DOMCanvasProvider. */
|
|
27
|
+
canvasProvider?: CanvasProvider;
|
|
28
|
+
/** Track name for axis label. */
|
|
29
|
+
name?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare class InteractionTrackCanvas extends BaseTrackCanvas<InteractionRenderConfig> {
|
|
32
|
+
private features;
|
|
33
|
+
private _name;
|
|
34
|
+
readonly type = "interact";
|
|
35
|
+
constructor(canvas: HTMLCanvasElement, options: InteractionTrackCanvasOptions);
|
|
36
|
+
/** Update features and re-render. */
|
|
37
|
+
setFeatures(features: InteractionFeature[]): void;
|
|
38
|
+
protected computeHeight(_width: number): number;
|
|
39
|
+
protected getBackground(): string;
|
|
40
|
+
protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
|
|
41
|
+
/** Hit-test: find features at canvas-relative pixel coordinates. */
|
|
42
|
+
hitTest(x: number, y: number): HitTestResult<InteractionFeature>[];
|
|
43
|
+
private buildPopupData;
|
|
44
|
+
/** Serialize config for session save/restore, diffed against theme defaults. */
|
|
45
|
+
serializeConfig(theme: RenderTheme): InteractionTrackSessionConfig;
|
|
46
|
+
/** Return axis info for proportional display mode. */
|
|
47
|
+
getAxisInfo(): AxisInfo | undefined;
|
|
48
|
+
/** Context menu items for arc display settings. */
|
|
49
|
+
getContextMenuItems(_x: number, _y: number): ContextMenuItem[];
|
|
50
|
+
/** Return numeric state for proportional mode (data range, log scale). */
|
|
51
|
+
getNumericState(): NumericState | undefined;
|
|
52
|
+
/** Render onto an arbitrary context (e.g. SVG export). */
|
|
53
|
+
renderToContext(ctx: CanvasRenderingContext2D, width: number, height: number): void;
|
|
54
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless ruler track renderer.
|
|
3
|
+
*
|
|
4
|
+
* Draws genomic coordinate tick marks and labels onto a canvas context.
|
|
5
|
+
* Ported from js/rulerTrack.ts but with no igv.js dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import type { RulerRenderConfig, RenderContext } from '../../types';
|
|
8
|
+
import type { CumulativeOffsets } from '../../genome/chromSizes';
|
|
9
|
+
/**
|
|
10
|
+
* Render a genomic coordinate ruler onto a canvas context.
|
|
11
|
+
*
|
|
12
|
+
* Stateless — all state is passed as parameters.
|
|
13
|
+
* Draws tick marks, labels with SI-prefix units, and a baseline.
|
|
14
|
+
*/
|
|
15
|
+
export declare function renderRulerTrack(ctx: CanvasRenderingContext2D, config: RulerRenderConfig, rc: RenderContext): void;
|
|
16
|
+
/** Whole genome context needed by the WG ruler renderer. */
|
|
17
|
+
export interface WholeGenomeRulerContext {
|
|
18
|
+
cumulativeOffsets: CumulativeOffsets;
|
|
19
|
+
chromSizes: Record<string, number>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Render a whole genome ruler showing chromosome rectangles with labels and dividers.
|
|
23
|
+
* Port of js/rulerTrack.ts drawWholeGenome() + renderChromosomeRect().
|
|
24
|
+
*/
|
|
25
|
+
export declare function renderWholeGenomeRuler(ctx: CanvasRenderingContext2D, config: RulerRenderConfig, rc: RenderContext, wg: WholeGenomeRulerContext): void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas manager for rendering a genomic coordinate ruler.
|
|
3
|
+
*
|
|
4
|
+
* Extends BaseTrackCanvas — canvas lifecycle is handled by the base class.
|
|
5
|
+
* This class only implements ruler-specific rendering.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const canvas = document.createElement('canvas')
|
|
9
|
+
* const ruler = new RulerTrackCanvas(canvas, { locus })
|
|
10
|
+
* ruler.attachTo(containerDiv)
|
|
11
|
+
*/
|
|
12
|
+
import type { Locus, RulerRenderConfig, RenderContext, RulerTrackSessionConfig } from '../../types';
|
|
13
|
+
import type { CanvasProvider } from '../../canvasProvider';
|
|
14
|
+
import type { RenderTheme } from '../../themes/renderTheme';
|
|
15
|
+
import type { CumulativeOffsets, ChromSizes } from '../../genome/chromSizes';
|
|
16
|
+
import { BaseTrackCanvas } from '../baseTrackCanvas';
|
|
17
|
+
export interface RulerTrackCanvasOptions {
|
|
18
|
+
locus: Locus;
|
|
19
|
+
/** Per-track config overrides. Applied after theme-derived defaults. */
|
|
20
|
+
config?: Partial<RulerRenderConfig>;
|
|
21
|
+
/** Unified render theme. Palette drives default colors/fonts. */
|
|
22
|
+
theme?: Partial<RenderTheme>;
|
|
23
|
+
/** Canvas provider for environment abstraction. Default: DOMCanvasProvider. */
|
|
24
|
+
canvasProvider?: CanvasProvider;
|
|
25
|
+
/** Cumulative offsets for whole genome view. */
|
|
26
|
+
cumulativeOffsets?: CumulativeOffsets;
|
|
27
|
+
/** Chromosome sizes for whole genome view. */
|
|
28
|
+
chromSizes?: ChromSizes;
|
|
29
|
+
}
|
|
30
|
+
export declare class RulerTrackCanvas extends BaseTrackCanvas<RulerRenderConfig> {
|
|
31
|
+
readonly type = "ruler";
|
|
32
|
+
private _cumulativeOffsets?;
|
|
33
|
+
private _chromSizes?;
|
|
34
|
+
constructor(canvas: HTMLCanvasElement, options: RulerTrackCanvasOptions);
|
|
35
|
+
/** Set cumulative offsets for whole genome view (called by browser). */
|
|
36
|
+
setCumulativeOffsets(offsets: CumulativeOffsets): void;
|
|
37
|
+
/** Set chromosome sizes for whole genome view (called by browser). */
|
|
38
|
+
setChromSizes(sizes: ChromSizes): void;
|
|
39
|
+
protected computeHeight(_width: number): number;
|
|
40
|
+
protected getBackground(): string;
|
|
41
|
+
protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
|
|
42
|
+
serializeConfig(theme: RenderTheme): RulerTrackSessionConfig;
|
|
43
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { renderSequenceTrack } from './sequenceRenderer';
|
|
2
|
+
export type { SequenceFeature } from './sequenceRenderer';
|
|
3
|
+
export { SequenceTrackCanvas } from './sequenceTrackCanvas';
|
|
4
|
+
export type { SequenceTrackCanvasOptions } from './sequenceTrackCanvas';
|
|
5
|
+
export { modernSequenceTheme, darkSequenceTheme } from './sequenceThemes';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure sequence track renderer — stateless, no DOM, no side effects.
|
|
3
|
+
*
|
|
4
|
+
* Layer 2 (Track Canvas + Themed Renderers): Takes a CanvasRenderingContext2D
|
|
5
|
+
* and draws. All rendering decisions are driven by the config and render context.
|
|
6
|
+
*
|
|
7
|
+
* Port of js/sequenceTrack.ts draw() method with full feature parity:
|
|
8
|
+
* - Base rendering as colored rectangles (zoomed out) or text (zoomed in)
|
|
9
|
+
* - Reverse complement display
|
|
10
|
+
* - Three-frame amino acid translation with START/STOP highlighting
|
|
11
|
+
*
|
|
12
|
+
* The BP_PER_PIXEL_THRESHOLD (1/10 = 0.1) controls text vs block rendering,
|
|
13
|
+
* matching igv.js exactly.
|
|
14
|
+
*/
|
|
15
|
+
import type { RenderContext, SequenceRenderConfig } from '../../types';
|
|
16
|
+
/** Sequence data passed from the data lifecycle to the renderer. */
|
|
17
|
+
export interface SequenceFeature {
|
|
18
|
+
/** Genomic position of the first base in the sequence string. */
|
|
19
|
+
bpStart: number;
|
|
20
|
+
/** The nucleotide sequence string. */
|
|
21
|
+
sequence: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Render the sequence track onto a canvas context.
|
|
25
|
+
*
|
|
26
|
+
* Pure function — no state, no side effects, no DOM. Matches igv.js
|
|
27
|
+
* SequenceTrack.draw() (js/sequenceTrack.ts) with exact feature parity.
|
|
28
|
+
*
|
|
29
|
+
* @param ctx - Canvas 2D rendering context (already DPR-scaled by BaseTrackCanvas)
|
|
30
|
+
* @param seqFeature - The sequence data (bpStart + sequence string), or null if no data
|
|
31
|
+
* @param config - Full resolved SequenceRenderConfig
|
|
32
|
+
* @param rc - Render context (bpStart, bpPerPixel, pixelWidth)
|
|
33
|
+
*/
|
|
34
|
+
export declare function renderSequenceTrack(ctx: CanvasRenderingContext2D, seqFeature: SequenceFeature | null, config: SequenceRenderConfig, rc: RenderContext): void;
|