loom-browser 0.0.9 → 0.0.11

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.
Files changed (99) hide show
  1. package/dist/loom-react.esm.js +3810 -3099
  2. package/dist/loom-react.esm.min.js +1 -1
  3. package/dist/loom-react.esm.min.js.map +1 -1
  4. package/dist/loom-worker.js +191 -137
  5. package/dist/loom-worker.min.js +1 -1
  6. package/dist/loom-worker.min.js.map +1 -1
  7. package/dist/loom.esm.js +3641 -2883
  8. package/dist/loom.esm.min.js +1 -1
  9. package/dist/loom.esm.min.js.map +1 -1
  10. package/dist/loom.js +3652 -2886
  11. package/dist/loom.min.js +1 -1
  12. package/dist/loom.min.js.map +1 -1
  13. package/dist/tsconfig.src.tsbuildinfo +1 -1
  14. package/dist/types/browser/dom/browserExport.d.ts +32 -0
  15. package/dist/types/browser/dom/contextMenu.d.ts +64 -0
  16. package/dist/types/browser/dom/contextMenuManager.d.ts +49 -0
  17. package/dist/types/browser/dom/defaultProviders.d.ts +23 -0
  18. package/dist/types/browser/dom/genomeBrowser.d.ts +171 -0
  19. package/dist/types/browser/dom/pointerEventManager.d.ts +109 -0
  20. package/dist/types/browser/dom/roiOverlayManager.d.ts +38 -0
  21. package/dist/types/browser/dom/svgFeatureOverlay.d.ts +27 -0
  22. package/dist/types/browser/headless/errors.d.ts +10 -0
  23. package/dist/types/browser/headless/headlessGenomeBrowser.d.ts +391 -0
  24. package/dist/types/browser/headless/roiManager.d.ts +47 -0
  25. package/dist/types/browser/headless/session.d.ts +45 -0
  26. package/dist/types/browser/headless/trackDataManager.d.ts +53 -0
  27. package/dist/types/browser/headless/trackFactories.d.ts +145 -0
  28. package/dist/types/browser/index.d.ts +24 -0
  29. package/dist/types/browserExport.d.ts +32 -0
  30. package/dist/types/commandDispatcher.d.ts +1 -1
  31. package/dist/types/contextMenuManager.d.ts +49 -0
  32. package/dist/types/data/searchService.d.ts +24 -0
  33. package/dist/types/dataSourceWorkerProvider.d.ts +3 -3
  34. package/dist/types/dataSources/bigWigDataSource.d.ts +2 -2
  35. package/dist/types/dataSources/config.d.ts +40 -0
  36. package/dist/types/dataSources/configureDataSource.d.ts +17 -0
  37. package/dist/types/dataSources/createDataSource.d.ts +14 -0
  38. package/dist/types/dataSources/geneDataSource.d.ts +4 -3
  39. package/dist/types/dataSources/gtxDataSource.d.ts +2 -2
  40. package/dist/types/dataSources/memoryDataSource.d.ts +2 -2
  41. package/dist/types/dataSources/sequenceDataSource.d.ts +4 -1
  42. package/dist/types/dataSources/textFeatureSource.d.ts +4 -2
  43. package/dist/types/dataSources/wholeGenomeUtils.d.ts +37 -0
  44. package/dist/types/defaultProviders.d.ts +23 -0
  45. package/dist/types/errors.d.ts +10 -0
  46. package/dist/types/formats/featureParser.d.ts +1 -1
  47. package/dist/types/genomeBrowser.d.ts +18 -91
  48. package/dist/types/headlessGenomeBrowser.d.ts +88 -225
  49. package/dist/types/index.d.ts +21 -14
  50. package/dist/types/io/binaryParser.d.ts +0 -1
  51. package/dist/types/logger.d.ts +20 -0
  52. package/dist/types/pointerEventManager.d.ts +109 -0
  53. package/dist/types/react/GenomeBrowserContext.d.ts +1 -1
  54. package/dist/types/react/LoomBrowser.d.ts +4 -4
  55. package/dist/types/react/hooks/useBrowserEvent.d.ts +1 -1
  56. package/dist/types/react/hooks/useGenomeBrowser.d.ts +1 -1
  57. package/dist/types/react/hooks/useTrackManager.d.ts +1 -1
  58. package/dist/types/react/tracks/BedTrack.d.ts +7 -7
  59. package/dist/types/react/ui/ChromosomeSelect.d.ts +1 -1
  60. package/dist/types/react/ui/ExportControls.d.ts +1 -1
  61. package/dist/types/react/ui/LocusInput.d.ts +1 -1
  62. package/dist/types/react/ui/Navbar.d.ts +1 -1
  63. package/dist/types/react/ui/WindowSize.d.ts +1 -1
  64. package/dist/types/react/ui/ZoomControls.d.ts +1 -1
  65. package/dist/types/remoteProtocol.d.ts +1 -1
  66. package/dist/types/roiManager.d.ts +47 -0
  67. package/dist/types/roiOverlayManager.d.ts +38 -0
  68. package/dist/types/stateProjection.d.ts +1 -1
  69. package/dist/types/trackDataManager.d.ts +48 -0
  70. package/dist/types/trackFactories.d.ts +140 -0
  71. package/dist/types/trackSelector.d.ts +1 -1
  72. package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +0 -1
  73. package/dist/types/tracks/annotation/config.d.ts +61 -0
  74. package/dist/types/tracks/baseTrackCanvas.d.ts +10 -0
  75. package/dist/types/tracks/configDiff.d.ts +14 -0
  76. package/dist/types/tracks/interaction/config.d.ts +40 -0
  77. package/dist/types/tracks/ruler/config.d.ts +24 -0
  78. package/dist/types/tracks/sequence/config.d.ts +56 -0
  79. package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +3 -0
  80. package/dist/types/tracks/wig/config.d.ts +77 -0
  81. package/dist/types/types/igvCompat.d.ts +36 -0
  82. package/dist/types/types.d.ts +48 -284
  83. package/dist/types/ui/components/LoomBrowserShell.d.ts +2 -2
  84. package/dist/types/ui/components/LoomChromosomeSelect.d.ts +1 -1
  85. package/dist/types/ui/components/LoomContextMenu.d.ts +1 -0
  86. package/dist/types/ui/components/LoomExportControls.d.ts +1 -1
  87. package/dist/types/ui/components/LoomLocusInput.d.ts +1 -1
  88. package/dist/types/ui/components/LoomNavbar.d.ts +1 -1
  89. package/dist/types/ui/components/LoomWindowSize.d.ts +1 -1
  90. package/dist/types/ui/components/LoomZoomControls.d.ts +1 -1
  91. package/dist/types/undoManager.d.ts +49 -0
  92. package/dist/types/worker/dataSourceRegistry.d.ts +2 -2
  93. package/dist/types/worker/serializedError.d.ts +16 -0
  94. package/dist/types/worker/taskTimeout.d.ts +21 -0
  95. package/dist/types/worker/webWorkerPool.d.ts +5 -2
  96. package/dist/types/worker/webWorkerProvider.d.ts +3 -0
  97. package/dist/types/workerDataSource.d.ts +2 -2
  98. package/dist/types/workerProvider.d.ts +2 -2
  99. package/package.json +1 -1
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Track convenience factories — create and wire tracks with data sources.
3
+ *
4
+ * Extracted from HeadlessGenomeBrowser to isolate repetitive track creation
5
+ * boilerplate. Each factory:
6
+ * 1. Creates a canvas via CanvasProvider
7
+ * 2. Creates a TrackCanvas instance
8
+ * 3. Builds a DataSourceConfig
9
+ * 4. Creates a worker proxy or direct data source
10
+ * 5. Wires chromosome alias resolution + cumulative offsets
11
+ * 6. Returns the track + data source + config for the browser to register
12
+ *
13
+ * Layer 3 (Headless): no DOM dependencies.
14
+ */
15
+ import type { Locus, DataSource, DataSourceConfig, WindowFunction, WigFeature, BedFeature, WigRenderConfig, AnnotationRenderConfig, RulerRenderConfig, SequenceRenderConfig, InteractionRenderConfig, TextFileFormat, SequenceProvider, Genome } from './types';
16
+ import type { CanvasProvider } from './canvasProvider';
17
+ import type { DataSourceWorkerProvider } from './dataSourceWorkerProvider';
18
+ import type { RenderTheme } from './themes/renderTheme';
19
+ import type { ChromSizes, CumulativeOffsets } from './genome/chromSizes';
20
+ import { WorkerDataSource } from './workerDataSource';
21
+ import { RulerTrackCanvas } from './tracks/ruler/rulerTrackCanvas';
22
+ import { WigTrackCanvas } from './tracks/wig/wigTrackCanvas';
23
+ import { AnnotationTrackCanvas } from './tracks/annotation/annotationTrackCanvas';
24
+ import { InteractionTrackCanvas } from './tracks/interaction/interactionTrackCanvas';
25
+ export interface AddRulerOptions {
26
+ config?: Partial<RulerRenderConfig>;
27
+ maxTrackHeight?: number;
28
+ }
29
+ export interface AddWigTrackOptions {
30
+ config?: Partial<WigRenderConfig>;
31
+ height?: number;
32
+ background?: string;
33
+ windowFunction?: WindowFunction;
34
+ maxTrackHeight?: number;
35
+ name?: string;
36
+ metadata?: Record<string, string>;
37
+ }
38
+ export interface AddGtxTrackOptions {
39
+ experimentId: string;
40
+ config?: Partial<WigRenderConfig>;
41
+ height?: number;
42
+ background?: string;
43
+ windowFunction?: WindowFunction;
44
+ maxTrackHeight?: number;
45
+ name?: string;
46
+ metadata?: Record<string, string>;
47
+ }
48
+ export interface AddSequenceTrackOptions {
49
+ config?: Partial<SequenceRenderConfig>;
50
+ maxTrackHeight?: number;
51
+ }
52
+ export interface AddBedTrackOptions {
53
+ config?: Partial<AnnotationRenderConfig>;
54
+ height?: number;
55
+ background?: string;
56
+ format?: TextFileFormat;
57
+ indexURL?: string;
58
+ indexed?: boolean;
59
+ maxTrackHeight?: number;
60
+ name?: string;
61
+ metadata?: Record<string, string>;
62
+ }
63
+ export interface AddInteractionTrackOptions {
64
+ config?: Partial<InteractionRenderConfig>;
65
+ background?: string;
66
+ format?: TextFileFormat;
67
+ indexURL?: string;
68
+ indexed?: boolean;
69
+ name?: string;
70
+ metadata?: Record<string, string>;
71
+ }
72
+ export interface AddAnnotationTrackOptions {
73
+ config?: Partial<AnnotationRenderConfig>;
74
+ height?: number;
75
+ background?: string;
76
+ genome?: string;
77
+ track?: string;
78
+ maxTrackHeight?: number;
79
+ name?: string;
80
+ metadata?: Record<string, string>;
81
+ }
82
+ export interface AddWigTrackWithFeaturesOptions {
83
+ config?: Partial<WigRenderConfig>;
84
+ height?: number;
85
+ background?: string;
86
+ maxTrackHeight?: number;
87
+ name?: string;
88
+ metadata?: Record<string, string>;
89
+ }
90
+ export interface AddBedTrackWithFeaturesOptions {
91
+ config?: Partial<AnnotationRenderConfig>;
92
+ height?: number;
93
+ background?: string;
94
+ maxTrackHeight?: number;
95
+ name?: string;
96
+ metadata?: Record<string, string>;
97
+ }
98
+ /** Context needed by all factories — passed from HeadlessGenomeBrowser. */
99
+ export interface TrackFactoryContext {
100
+ locus: Locus;
101
+ canvasProvider: CanvasProvider;
102
+ theme: RenderTheme;
103
+ genome?: Genome;
104
+ chromSizes?: ChromSizes;
105
+ cumulativeOffsets?: CumulativeOffsets;
106
+ sequenceProvider?: SequenceProvider;
107
+ dataSourceWorkerProvider?: DataSourceWorkerProvider;
108
+ }
109
+ /** Result of a factory — the browser registers this via addTrack(). */
110
+ export interface FactoryResult<T> {
111
+ track: T;
112
+ dataSource?: DataSource;
113
+ dataSourceConfig?: DataSourceConfig;
114
+ maxTrackHeight?: number;
115
+ metadata?: Record<string, string>;
116
+ order?: number;
117
+ /** Post-registration callback (e.g., wiring onWindowFunctionChange). */
118
+ onRegistered?: (findMT: () => {
119
+ cache: null | unknown;
120
+ dataSourceConfig: DataSourceConfig | null;
121
+ }) => void;
122
+ }
123
+ /**
124
+ * Create a WorkerDataSource proxy for worker-eligible configs, or return null
125
+ * if dataSourceWorkerProvider is not set. Handles create + chrom alias + offsets wiring.
126
+ */
127
+ export declare function createWorkerDataSource<F>(config: DataSourceConfig, ctx: Pick<TrackFactoryContext, 'dataSourceWorkerProvider' | 'genome' | 'cumulativeOffsets'>): WorkerDataSource<F> | null;
128
+ /**
129
+ * Wire chromosome alias resolution and cumulative offsets on a direct (non-worker) data source.
130
+ * Consolidates the pattern repeated 7+ times in the old HeadlessGenomeBrowser.
131
+ */
132
+ export declare function wireDataSource(ds: DataSource, ctx: Pick<TrackFactoryContext, 'genome' | 'cumulativeOffsets'>): void;
133
+ export declare function createRuler(ctx: TrackFactoryContext, options?: AddRulerOptions): FactoryResult<RulerTrackCanvas>;
134
+ export declare function createWigTrack(ctx: TrackFactoryContext, url: string, options?: AddWigTrackOptions): FactoryResult<WigTrackCanvas>;
135
+ export declare function createGtxTrack(ctx: TrackFactoryContext, url: string, options: AddGtxTrackOptions): FactoryResult<WigTrackCanvas>;
136
+ export declare function createGeneTrack(ctx: TrackFactoryContext, options?: AddAnnotationTrackOptions): FactoryResult<AnnotationTrackCanvas>;
137
+ export declare function createBedTrack(ctx: TrackFactoryContext, url: string, options?: AddBedTrackOptions): FactoryResult<AnnotationTrackCanvas>;
138
+ export declare function createInteractionTrack(ctx: TrackFactoryContext, url: string, options?: AddInteractionTrackOptions): FactoryResult<InteractionTrackCanvas>;
139
+ export declare function createWigTrackWithFeatures(ctx: TrackFactoryContext, features: WigFeature[], options?: AddWigTrackWithFeaturesOptions): FactoryResult<WigTrackCanvas>;
140
+ export declare function createBedTrackWithFeatures(ctx: TrackFactoryContext, features: BedFeature[], options?: AddBedTrackWithFeaturesOptions): FactoryResult<AnnotationTrackCanvas>;
@@ -13,7 +13,7 @@
13
13
  * browser.findTracks({ type: 'wig', where: { biosample: 'K562' } })
14
14
  * ```
15
15
  */
16
- import type { ManagedTrack } from './headlessGenomeBrowser';
16
+ import type { ManagedTrack } from './browser/headless/headlessGenomeBrowser';
17
17
  /** Selector for matching tracks by ID, name, type, and/or metadata. */
18
18
  export interface TrackSelector {
19
19
  /** Exact match against track ID. */
@@ -14,7 +14,6 @@ import type { AnnotationFeature, AnnotationRenderConfig, Locus, RenderContext, A
14
14
  import type { CanvasProvider } from '../../canvasProvider';
15
15
  import type { RenderTheme } from '../../themes/renderTheme';
16
16
  import { BaseTrackCanvas } from '../baseTrackCanvas';
17
- export type { Locus } from '../../types';
18
17
  export interface AnnotationTrackCanvasOptions {
19
18
  locus: Locus;
20
19
  features: AnnotationFeature[];
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Annotation track render configuration.
3
+ *
4
+ * Controls rendering of gene, BED, GFF, and peak features.
5
+ *
6
+ * Layer 2 (Track Canvases): no DOM.
7
+ */
8
+ /** Display mode for gene features. */
9
+ export type DisplayMode = 'COLLAPSED' | 'SQUISHED' | 'EXPANDED';
10
+ /** Configuration controlling how annotation features (gene, BED, GFF, peaks) are rendered. */
11
+ export interface AnnotationRenderConfig {
12
+ displayMode: DisplayMode;
13
+ featureHeight: number;
14
+ margin: number;
15
+ /** Row height in EXPANDED mode (featureHeight + label space + padding). */
16
+ expandedRowHeight: number;
17
+ /** Row height in SQUISHED mode. */
18
+ squishedRowHeight: number;
19
+ /** Pixel spacing between strand-direction arrows. */
20
+ arrowSpacing: number;
21
+ /** Default fill color for CDS exons. */
22
+ color: string;
23
+ /** Color for features on the opposite strand (if desired). */
24
+ altColor?: string;
25
+ /** Which feature property to use as the label. */
26
+ labelField: string;
27
+ /** CSS font string for labels, e.g. "10px sans-serif". */
28
+ font: string;
29
+ /** Whether to draw labels. */
30
+ drawLabels: boolean;
31
+ /** Label display mode — "SLANT" rotates labels 45°. */
32
+ labelDisplayMode?: 'SLANT';
33
+ /** UTR fill color. Defaults to main color. */
34
+ utrColor?: string;
35
+ /** Alt UTR color (for - strand when altColor is set). */
36
+ altUtrColor?: string;
37
+ /** Exon stroke outline color. No outline when undefined. */
38
+ borderColor?: string;
39
+ /** Exon outline width. Default: 0 (no outline). */
40
+ borderWidth?: number;
41
+ /** Rounded corner radius for exon rects. Default: 0 (square). */
42
+ borderRadius?: number;
43
+ /** Intron line color. Defaults to main color. */
44
+ intronColor?: string;
45
+ /** Intron line width. Default: 1. */
46
+ intronLineWidth?: number;
47
+ /** Dash pattern for intron lines, e.g. [3, 3]. Default: [] (solid). */
48
+ intronDash?: number[];
49
+ /** Strand arrow color on intron lines. Defaults to current stroke color. */
50
+ arrowColor?: string;
51
+ /** Strand arrow color inside exons. Default: 'white'. */
52
+ arrowInExonColor?: string;
53
+ /** Label text color. Defaults to feature color. */
54
+ labelColor?: string;
55
+ /** Background color behind labels. When set, fills behind labels instead of clearing to transparent. */
56
+ labelBackground?: string;
57
+ /** Separate CSS font string for labels. Defaults to `font`. */
58
+ labelFont?: string;
59
+ }
60
+ /** Returns sensible defaults for annotation feature rendering. */
61
+ export declare function defaultAnnotationRenderConfig(): AnnotationRenderConfig;
@@ -35,6 +35,16 @@ export declare abstract class BaseTrackCanvas<TConfig> implements Track {
35
35
  * Set to undefined or 0 to disable (always fetch). Set > 0 to enable.
36
36
  */
37
37
  visibilityWindow?: number;
38
+ /**
39
+ * Callback invoked just before setConfig() applies changes.
40
+ * The browser registers this to snapshot state for undo (capturing pre-mutation state).
41
+ */
42
+ onBeforeConfigChange?: () => void;
43
+ /**
44
+ * Callback invoked after setConfig() merges new config and re-renders.
45
+ * The browser registers this to emit TrackConfigChanged.
46
+ */
47
+ onConfigChanged?: () => void;
38
48
  abstract readonly type: string;
39
49
  get canvas(): HTMLCanvasElement;
40
50
  get locus(): Locus;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Typed config diff utility for track session serialization.
3
+ *
4
+ * Compares a track's current config against theme defaults and returns
5
+ * only the fields that differ. Eliminates the `as Record<string, unknown>`
6
+ * casts previously duplicated across track canvas serializeConfig() methods.
7
+ *
8
+ * Layer 2 (Track Canvases): no DOM.
9
+ */
10
+ /**
11
+ * Compute the diff between a config object and its defaults.
12
+ * Returns a Partial containing only changed fields, or undefined if no changes.
13
+ */
14
+ export declare function diffConfig<T extends object>(config: T, defaults: T): Partial<T> | undefined;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Interaction track render configuration.
3
+ *
4
+ * Controls rendering of chromatin interaction arcs (Hi-C, ChIA-PET, BEDPE).
5
+ *
6
+ * Layer 2 (Track Canvases): no DOM.
7
+ */
8
+ /** Arc orientation: arcs open upward or downward. */
9
+ export type ArcOrientation = 'UP' | 'DOWN';
10
+ /** Display mode for interaction arcs. */
11
+ export type ArcDisplayMode = 'nested' | 'proportional';
12
+ /** Configuration controlling how interaction features are rendered as arcs. */
13
+ export interface InteractionRenderConfig {
14
+ /** Track height in CSS pixels. Default: 250. */
15
+ height: number;
16
+ /** Arc direction. Default: 'UP'. */
17
+ arcOrientation: ArcOrientation;
18
+ /** Display mode. Default: 'nested'. */
19
+ displayMode: ArcDisplayMode;
20
+ /** Show small rectangles at feature endpoints. Default: true. */
21
+ showBlocks: boolean;
22
+ /** Height of endpoint rectangles in pixels. Default: 3. */
23
+ blockHeight: number;
24
+ /** Arc stroke width in pixels. Default: 1. */
25
+ thickness: number;
26
+ /** Default arc color. Default: 'rgb(180,25,137)'. */
27
+ color: string;
28
+ /** Fill alpha for arcs. Default: 0.02. */
29
+ alpha: number;
30
+ /** Use log scale for proportional arc heights. Default: true. */
31
+ logScale: boolean;
32
+ /** Background color. Default: '#ffffff'. */
33
+ background: string;
34
+ /** Font for inter-chromosome labels. Default: '8px sans-serif'. */
35
+ font: string;
36
+ /** Whether to use score-based shading. Default: false. */
37
+ useScore: boolean;
38
+ }
39
+ /** Returns sensible defaults for interaction rendering. */
40
+ export declare function defaultInteractionRenderConfig(): InteractionRenderConfig;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Ruler track render configuration.
3
+ *
4
+ * Controls rendering of the coordinate ruler track.
5
+ *
6
+ * Layer 2 (Track Canvases): no DOM.
7
+ */
8
+ /** Configuration for ruler track rendering. */
9
+ export interface RulerRenderConfig {
10
+ /** Total height in CSS pixels. Default: 40. */
11
+ height: number;
12
+ /** Font for tick labels. Default: 'bold 10px sans-serif'. */
13
+ font: string;
14
+ /** Tick line color. Default: 'rgb(150, 150, 150)'. */
15
+ tickColor: string;
16
+ /** Label text color. Default: 'rgb(0, 0, 0)'. */
17
+ labelColor: string;
18
+ /** Baseline (bottom rule) color. Default: 'rgb(150, 150, 150)'. */
19
+ baselineColor: string;
20
+ /** Background color. Default: 'white'. */
21
+ background: string;
22
+ }
23
+ /** Returns sensible defaults for ruler rendering. */
24
+ export declare function defaultRulerRenderConfig(): RulerRenderConfig;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Sequence track render configuration.
3
+ *
4
+ * Controls rendering of DNA sequence tracks with optional 3-frame translation.
5
+ *
6
+ * Layer 2 (Track Canvases): no DOM.
7
+ */
8
+ /** Sequence type for the sequence track. */
9
+ export type SequenceType = 'dna' | 'rna' | 'prot';
10
+ /** Configuration controlling how sequence features are rendered. */
11
+ export interface SequenceRenderConfig {
12
+ /** Sequence type (affects coloring). Default: 'dna'. */
13
+ sequenceType: SequenceType;
14
+ /** Show reverse complement. Default: false. */
15
+ reversed: boolean;
16
+ /** Show three-frame amino acid translation. Default: false. */
17
+ frameTranslate: boolean;
18
+ /** Override color for all bases. When set, ignores nucleotide color map. */
19
+ color?: string;
20
+ /** Background color. Default: '#ffffff'. */
21
+ background: string;
22
+ /** Nucleotide color mapping (A, C, G, T, N). Used when sequenceType is 'dna'. */
23
+ nucleotideColors: Record<string, string>;
24
+ /** Default color for RNA/protein bases. Default: 'rgb(0, 0, 150)'. */
25
+ nonDnaColor: string;
26
+ /** Track height without translation frames. Default: 25. */
27
+ defaultHeight: number;
28
+ /** Track height with translation frames. Default: 115. */
29
+ translatedHeight: number;
30
+ /** Height of the sequence row. Default: 15. */
31
+ sequenceHeight: number;
32
+ /** Height of each translation frame row. Default: 25. */
33
+ frameHeight: number;
34
+ /** Border/padding between elements. Default: 5. */
35
+ frameBorder: number;
36
+ /** Alternating background color 1 for translation frames. Default: 'rgb(160,160,160)'. */
37
+ frameColor1: string;
38
+ /** Alternating background color 2 for translation frames. Default: 'rgb(224,224,224)'. */
39
+ frameColor2: string;
40
+ /** Stop codon highlight color. Default: 'rgb(255, 0, 0)'. */
41
+ stopCodonColor: string;
42
+ /** Start codon (M) highlight color. Default: 'rgb(0, 153, 0)'. */
43
+ startCodonColor: string;
44
+ /** Use fillText instead of strokeText for base and amino acid labels. Default: false (strokeText, matching igv.js). */
45
+ useFillText: boolean;
46
+ /** Color for amino acid labels in translation frames. Default: '#000000'. */
47
+ frameLabelColor: string;
48
+ /** Color for amino acid labels on start/stop codon backgrounds. Default: same as frameLabelColor. */
49
+ codonLabelColor?: string;
50
+ /** Font for amino acid labels in translation frames. Default: 'bold 10px sans-serif'. */
51
+ frameFont: string;
52
+ /** Border radius for start/stop codon highlights (roundRect). 0 = sharp rectangles. Default: 0. */
53
+ codonBorderRadius: number;
54
+ }
55
+ /** Returns sensible defaults for sequence rendering. */
56
+ export declare function defaultSequenceRenderConfig(): SequenceRenderConfig;
@@ -28,11 +28,14 @@ export interface SequenceTrackCanvasOptions {
28
28
  config?: Partial<SequenceRenderConfig>;
29
29
  theme?: Partial<RenderTheme>;
30
30
  canvasProvider?: CanvasProvider;
31
+ /** bpPerPixel threshold above which sequence data is not loaded. Default: 10. */
32
+ bppSequenceThreshold?: number;
31
33
  }
32
34
  export declare class SequenceTrackCanvas extends BaseTrackCanvas<SequenceRenderConfig> {
33
35
  readonly type = "sequence";
34
36
  private _sequence;
35
37
  private _theme;
38
+ private _bppThreshold;
36
39
  constructor(canvas: HTMLCanvasElement, options: SequenceTrackCanvasOptions);
37
40
  /**
38
41
  * Whether the current viewport is zoomed in enough to fetch/render sequence.
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Wig track render configuration.
3
+ *
4
+ * Controls rendering of quantitative signal tracks (BigWig, GTX).
5
+ *
6
+ * Layer 2 (Track Canvases): no DOM.
7
+ */
8
+ import type { WindowFunction } from '../../types';
9
+ /** Graph type for wig track rendering. */
10
+ export type WigGraphType = 'bar' | 'line' | 'points' | 'dynseq';
11
+ /** A horizontal guide line drawn at a specific data value. */
12
+ export interface WigGuideLine {
13
+ /** The data value at which to draw the line. */
14
+ y: number;
15
+ /** Line color. */
16
+ color: string;
17
+ /** Whether to draw a dashed line. */
18
+ dotted: boolean;
19
+ }
20
+ /** Color value for wig features: a static CSS color string or a function mapping value → color. */
21
+ export type WigColorValue = string | ((value: number) => string);
22
+ /** Configuration controlling how wig features are rendered. */
23
+ export interface WigRenderConfig {
24
+ /** Track height in CSS pixels. Default: 50. */
25
+ height: number;
26
+ /** Graph rendering style. Default: 'bar'. */
27
+ graphType: WigGraphType;
28
+ /** Data aggregation when zoomed out. Default: 'mean'. */
29
+ windowFunction: WindowFunction;
30
+ /** Y-axis data range. Features are scaled to this range. */
31
+ dataRange: {
32
+ min: number;
33
+ max: number;
34
+ };
35
+ /** Whether to auto-compute dataRange from features. Default: true. */
36
+ autoscale: boolean;
37
+ /** Fill/stroke color for positive values. String or (value) => color function. Default: 'rgb(150, 150, 150)'. */
38
+ color: WigColorValue;
39
+ /** Fill/stroke color for negative values. String or (value) => color function. Uses `color` when undefined. */
40
+ altColor?: WigColorValue;
41
+ /** Alpha transparency for feature colors (0–1). Applied on top of resolved color. Default: undefined (fully opaque). */
42
+ alpha?: number;
43
+ /** Flip the y-axis (values grow downward). Default: false. */
44
+ flipAxis: boolean;
45
+ /** Use logarithmic scale for the y-axis. Default: false. */
46
+ logScale: boolean;
47
+ /** Color for the zero-line baseline. Default: 'lightGray'. */
48
+ baselineColor: string;
49
+ /** Color for out-of-range value indicators. Default: 'rgb(255, 32, 255)'. */
50
+ overflowColor: string;
51
+ /** Point diameter in pixels (for 'points' graphType). Default: 3. */
52
+ pointSize: number;
53
+ /** Background color. Default: '#ffffff'. */
54
+ background: string;
55
+ /** Optional horizontal guide lines. */
56
+ guideLines?: WigGuideLine[];
57
+ /** Nucleotide colors for dynseq rendering. Keys: A, C, G, T, N. */
58
+ nucleotideColors?: Record<string, string>;
59
+ /** Multiply all feature values by this factor before rendering. Default: undefined (no scaling). */
60
+ scaleFactor?: number;
61
+ /**
62
+ * Normalization factor applied to all feature values (e.g. reads-per-million from TDF).
63
+ * When set, all values are multiplied by this factor before scaleFactor is applied.
64
+ * Typically provided by the data source rather than set manually.
65
+ */
66
+ normalizationFactor?: number;
67
+ /** Whether to draw min/max data range labels on the track. Default: true. */
68
+ showDataRange: boolean;
69
+ /** Color for data range label text. Default: palette.foreground. */
70
+ labelColor: string;
71
+ /** Font for data range labels. Default: 'bold 9px sans-serif'. */
72
+ labelFont: string;
73
+ /** Track name to display as an overlay label (igv.js style, top-left). */
74
+ trackName?: string;
75
+ }
76
+ /** Returns sensible defaults for wig rendering. */
77
+ export declare function defaultWigRenderConfig(): WigRenderConfig;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * IGV.js compatibility types.
3
+ *
4
+ * Minimal type definitions for igv.js session import/export.
5
+ * Used only by session serialization — not part of the core Loom type system.
6
+ */
7
+ /** Minimal igv.js session shape — just enough to parse/produce sessions. */
8
+ export interface IgvSessionObject {
9
+ version?: string;
10
+ reference?: IgvReferenceConfig;
11
+ genome?: string;
12
+ locus?: string | string[];
13
+ tracks?: IgvTrackConfig[];
14
+ }
15
+ export interface IgvReferenceConfig {
16
+ id?: string;
17
+ fastaURL?: string;
18
+ indexURL?: string;
19
+ }
20
+ export interface IgvTrackConfig {
21
+ type?: string;
22
+ format?: string;
23
+ url?: string;
24
+ indexURL?: string;
25
+ name?: string;
26
+ color?: string;
27
+ altColor?: string;
28
+ height?: number;
29
+ min?: number;
30
+ max?: number;
31
+ autoscale?: boolean;
32
+ displayMode?: string;
33
+ order?: number;
34
+ visibilityWindow?: number;
35
+ windowFunction?: string;
36
+ }