loom-browser 0.0.1 → 0.0.2

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 (185) hide show
  1. package/dist/loom.esm.min.js.map +1 -1
  2. package/dist/types/commandDispatcher.d.ts +22 -1
  3. package/dist/types/index.d.ts +1 -1
  4. package/dist/types/remoteProtocol.d.ts +2 -0
  5. package/package.json +8 -2
  6. package/dist/igv.d.ts +0 -667
  7. package/dist/igv.esm.js +0 -76708
  8. package/dist/igv.esm.min.js +0 -26
  9. package/dist/igv.esm.min.js.map +0 -1
  10. package/dist/igv.js +0 -76716
  11. package/dist/igv.min.js +0 -26
  12. package/dist/igv.min.js.map +0 -1
  13. package/dist/loom.d.ts +0 -667
  14. package/dist/types/agent/index.d.ts +0 -4
  15. package/dist/types/agent/stateProjection.d.ts +0 -115
  16. package/dist/types/agent/trackSelector.d.ts +0 -31
  17. package/dist/types/baseTrackCanvas.d.ts +0 -62
  18. package/dist/types/bigwig/binaryParser.d.ts +0 -25
  19. package/dist/types/bigwig/bpTree.d.ts +0 -40
  20. package/dist/types/bigwig/bwReader.d.ts +0 -69
  21. package/dist/types/bigwig/chromTree.d.ts +0 -28
  22. package/dist/types/bigwig/inflate.d.ts +0 -9
  23. package/dist/types/bigwig/rangeReader.d.ts +0 -48
  24. package/dist/types/bigwig/rpTree.d.ts +0 -27
  25. package/dist/types/dataSources/dynseqDataSource.d.ts +0 -20
  26. package/dist/types/dynseqRenderer.d.ts +0 -37
  27. package/dist/types/geneRenderer.d.ts +0 -17
  28. package/dist/types/geneThemes.d.ts +0 -11
  29. package/dist/types/geneTrackCanvas.d.ts +0 -46
  30. package/dist/types/renderTheme.d.ts +0 -72
  31. package/dist/types/renderThemePresets.d.ts +0 -16
  32. package/dist/types/rulerRenderer.d.ts +0 -14
  33. package/dist/types/rulerTrackCanvas.d.ts +0 -32
  34. package/dist/types/src/bigwig/index.d.ts +0 -66
  35. package/dist/types/src/canvasProvider.d.ts +0 -36
  36. package/dist/types/src/commandDispatcher.d.ts +0 -220
  37. package/dist/types/src/contextMenu.d.ts +0 -64
  38. package/dist/types/src/contextMenuProvider.d.ts +0 -25
  39. package/dist/types/src/data/cachedSequence.d.ts +0 -19
  40. package/dist/types/src/data/ucscApi.d.ts +0 -21
  41. package/dist/types/src/data/ucscSequence.d.ts +0 -19
  42. package/dist/types/src/dataLifecycle.d.ts +0 -16
  43. package/dist/types/src/dataSources/bigWigDataSource.d.ts +0 -24
  44. package/dist/types/src/dataSources/dataSourceCacheKey.d.ts +0 -9
  45. package/dist/types/src/dataSources/featureSourceFactory.d.ts +0 -46
  46. package/dist/types/src/dataSources/geneDataSource.d.ts +0 -16
  47. package/dist/types/src/dataSources/gtxDataSource.d.ts +0 -42
  48. package/dist/types/src/dataSources/sequenceDataSource.d.ts +0 -15
  49. package/dist/types/src/dataSources/textFeatureSource.d.ts +0 -63
  50. package/dist/types/src/decode/bed.d.ts +0 -64
  51. package/dist/types/src/decode/bedpe.d.ts +0 -36
  52. package/dist/types/src/decode/exonUtils.d.ts +0 -29
  53. package/dist/types/src/decode/gff.d.ts +0 -58
  54. package/dist/types/src/decode/interact.d.ts +0 -19
  55. package/dist/types/src/decode/ucsc.d.ts +0 -56
  56. package/dist/types/src/events.d.ts +0 -23
  57. package/dist/types/src/export/canvas2svg.d.ts +0 -166
  58. package/dist/types/src/export/index.d.ts +0 -2
  59. package/dist/types/src/featureCache.d.ts +0 -69
  60. package/dist/types/src/formats/featureParser.d.ts +0 -72
  61. package/dist/types/src/formats/formatDetection.d.ts +0 -46
  62. package/dist/types/src/genome/chromAlias.d.ts +0 -46
  63. package/dist/types/src/genome/chromSizes.d.ts +0 -53
  64. package/dist/types/src/genome/genome.d.ts +0 -51
  65. package/dist/types/src/genomeBrowser.d.ts +0 -189
  66. package/dist/types/src/gtx/fetchCoordinator.d.ts +0 -34
  67. package/dist/types/src/gtx/gtxReader.d.ts +0 -144
  68. package/dist/types/src/gtx/index.d.ts +0 -40
  69. package/dist/types/src/gtx/zstdWasm.d.ts +0 -22
  70. package/dist/types/src/headlessGenomeBrowser.d.ts +0 -450
  71. package/dist/types/src/index.d.ts +0 -123
  72. package/dist/types/src/intervalTree.d.ts +0 -56
  73. package/dist/types/src/io/binaryParser.d.ts +0 -25
  74. package/dist/types/src/io/index.d.ts +0 -7
  75. package/dist/types/src/io/rangeReader.d.ts +0 -48
  76. package/dist/types/src/locusUtils.d.ts +0 -37
  77. package/dist/types/src/pack.d.ts +0 -41
  78. package/dist/types/src/popupProvider.d.ts +0 -22
  79. package/dist/types/src/remoteProtocol.d.ts +0 -81
  80. package/dist/types/src/roi/index.d.ts +0 -3
  81. package/dist/types/src/roi/roiRenderer.d.ts +0 -24
  82. package/dist/types/src/roi/roiSet.d.ts +0 -41
  83. package/dist/types/src/sequence/sequenceUtils.d.ts +0 -44
  84. package/dist/types/src/session.d.ts +0 -55
  85. package/dist/types/src/stateProjection.d.ts +0 -115
  86. package/dist/types/src/tabix/index.d.ts +0 -48
  87. package/dist/types/src/themes/index.d.ts +0 -3
  88. package/dist/types/src/themes/renderTheme.d.ts +0 -86
  89. package/dist/types/src/themes/renderThemePresets.d.ts +0 -16
  90. package/dist/types/src/trackRegistry.d.ts +0 -81
  91. package/dist/types/src/trackSelector.d.ts +0 -31
  92. package/dist/types/src/tracks/annotation/annotationRenderer.d.ts +0 -17
  93. package/dist/types/src/tracks/annotation/annotationThemes.d.ts +0 -11
  94. package/dist/types/src/tracks/annotation/annotationTrackCanvas.d.ts +0 -58
  95. package/dist/types/src/tracks/annotation/index.d.ts +0 -4
  96. package/dist/types/src/tracks/axis/axisRenderer.d.ts +0 -19
  97. package/dist/types/src/tracks/axis/index.d.ts +0 -1
  98. package/dist/types/src/tracks/baseTrackCanvas.d.ts +0 -113
  99. package/dist/types/src/tracks/dynseq/dynseqRenderer.d.ts +0 -38
  100. package/dist/types/src/tracks/dynseq/index.d.ts +0 -1
  101. package/dist/types/src/tracks/index.d.ts +0 -7
  102. package/dist/types/src/tracks/interaction/index.d.ts +0 -4
  103. package/dist/types/src/tracks/interaction/interactionRenderer.d.ts +0 -52
  104. package/dist/types/src/tracks/interaction/interactionTrackCanvas.d.ts +0 -54
  105. package/dist/types/src/tracks/ruler/index.d.ts +0 -3
  106. package/dist/types/src/tracks/ruler/rulerRenderer.d.ts +0 -25
  107. package/dist/types/src/tracks/ruler/rulerTrackCanvas.d.ts +0 -43
  108. package/dist/types/src/tracks/sequence/index.d.ts +0 -5
  109. package/dist/types/src/tracks/sequence/sequenceRenderer.d.ts +0 -34
  110. package/dist/types/src/tracks/sequence/sequenceThemes.d.ts +0 -11
  111. package/dist/types/src/tracks/sequence/sequenceTrackCanvas.d.ts +0 -67
  112. package/dist/types/src/tracks/wig/index.d.ts +0 -5
  113. package/dist/types/src/tracks/wig/wigRenderer.d.ts +0 -15
  114. package/dist/types/src/tracks/wig/wigSummary.d.ts +0 -31
  115. package/dist/types/src/tracks/wig/wigThemes.d.ts +0 -15
  116. package/dist/types/src/tracks/wig/wigTrackCanvas.d.ts +0 -82
  117. package/dist/types/src/types.d.ts +0 -885
  118. package/dist/types/src/ui/components/LoomBrowserShell.d.ts +0 -52
  119. package/dist/types/src/ui/components/LoomChromosomeSelect.d.ts +0 -18
  120. package/dist/types/src/ui/components/LoomContextMenu.d.ts +0 -39
  121. package/dist/types/src/ui/components/LoomExportControls.d.ts +0 -13
  122. package/dist/types/src/ui/components/LoomInputDialog.d.ts +0 -27
  123. package/dist/types/src/ui/components/LoomLocusInput.d.ts +0 -18
  124. package/dist/types/src/ui/components/LoomNavbar.d.ts +0 -15
  125. package/dist/types/src/ui/components/LoomPopup.d.ts +0 -32
  126. package/dist/types/src/ui/components/LoomWindowSize.d.ts +0 -14
  127. package/dist/types/src/ui/components/LoomZoomControls.d.ts +0 -10
  128. package/dist/types/src/ui/index.d.ts +0 -21
  129. package/dist/types/src/ui/themes.d.ts +0 -14
  130. package/dist/types/src/worker/nodeWorkerProvider.d.ts +0 -28
  131. package/dist/types/src/worker/taskHandler.d.ts +0 -15
  132. package/dist/types/src/worker/webWorkerProvider.d.ts +0 -51
  133. package/dist/types/src/worker/workerScript.d.ts +0 -11
  134. package/dist/types/src/workerProvider.d.ts +0 -76
  135. package/dist/types/tabix/bgzBlockLoader.d.ts +0 -60
  136. package/dist/types/tabix/bgzf.d.ts +0 -43
  137. package/dist/types/tabix/tabixIndex.d.ts +0 -85
  138. package/dist/types/tabix/tabixReader.d.ts +0 -60
  139. package/dist/types/tabix/virtualOffset.d.ts +0 -41
  140. package/dist/types/test/src/mockCanvasProvider.d.ts +0 -67
  141. package/dist/types/test/src/testBedDecode.d.ts +0 -1
  142. package/dist/types/test/src/testCanvas2SVG.d.ts +0 -7
  143. package/dist/types/test/src/testChromAlias.d.ts +0 -1
  144. package/dist/types/test/src/testCommandDispatcher.d.ts +0 -1
  145. package/dist/types/test/src/testData.d.ts +0 -7
  146. package/dist/types/test/src/testDataLifecycle.d.ts +0 -1
  147. package/dist/types/test/src/testDataSourceCacheKey.d.ts +0 -1
  148. package/dist/types/test/src/testDataSources.d.ts +0 -5
  149. package/dist/types/test/src/testDecodeUcsc.d.ts +0 -1
  150. package/dist/types/test/src/testEvents.d.ts +0 -1
  151. package/dist/types/test/src/testFeatureCache.d.ts +0 -1
  152. package/dist/types/test/src/testFeatureParser.d.ts +0 -1
  153. package/dist/types/test/src/testFormatDetection.d.ts +0 -1
  154. package/dist/types/test/src/testGffDecode.d.ts +0 -1
  155. package/dist/types/test/src/testHeadlessBrowser.d.ts +0 -1
  156. package/dist/types/test/src/testInteractionDecoder.d.ts +0 -1
  157. package/dist/types/test/src/testIntervalTree.d.ts +0 -1
  158. package/dist/types/test/src/testLocusUtils.d.ts +0 -1
  159. package/dist/types/test/src/testPack.d.ts +0 -1
  160. package/dist/types/test/src/testROI.d.ts +0 -1
  161. package/dist/types/test/src/testRemoteProtocol.d.ts +0 -1
  162. package/dist/types/test/src/testRenderTheme.d.ts +0 -1
  163. package/dist/types/test/src/testSVGExport.d.ts +0 -5
  164. package/dist/types/test/src/testSequence.d.ts +0 -1
  165. package/dist/types/test/src/testSession.d.ts +0 -1
  166. package/dist/types/test/src/testTrackSelector.d.ts +0 -1
  167. package/dist/types/test/src/testTrackSerialize.d.ts +0 -1
  168. package/dist/types/test/src/testWigSummary.d.ts +0 -1
  169. package/dist/types/test/src/testWorkerDispatch.d.ts +0 -9
  170. package/dist/types/tracks/gene/geneRenderer.d.ts +0 -17
  171. package/dist/types/tracks/gene/geneThemes.d.ts +0 -11
  172. package/dist/types/tracks/gene/geneTrackCanvas.d.ts +0 -58
  173. package/dist/types/tracks/gene/index.d.ts +0 -4
  174. package/dist/types/ui/components/IgvBrowserShell.d.ts +0 -52
  175. package/dist/types/ui/components/IgvChromosomeSelect.d.ts +0 -18
  176. package/dist/types/ui/components/IgvExportControls.d.ts +0 -13
  177. package/dist/types/ui/components/IgvLocusInput.d.ts +0 -18
  178. package/dist/types/ui/components/IgvNavbar.d.ts +0 -15
  179. package/dist/types/ui/components/IgvWindowSize.d.ts +0 -14
  180. package/dist/types/ui/components/IgvZoomControls.d.ts +0 -10
  181. package/dist/types/wigRenderer.d.ts +0 -15
  182. package/dist/types/wigSummary.d.ts +0 -31
  183. package/dist/types/wigThemes.d.ts +0 -15
  184. package/dist/types/wigTrackCanvas.d.ts +0 -46
  185. package/dist/types/worker/decodeWig.d.ts +0 -20
@@ -1,16 +0,0 @@
1
- /**
2
- * Built-in RenderTheme presets.
3
- *
4
- * These are Partial<RenderTheme> objects — pass them to resolveTheme() to get
5
- * a fully resolved theme with defaults filled in.
6
- *
7
- * Usage:
8
- * import {resolveTheme} from './renderTheme'
9
- * import {modernRenderTheme} from './renderThemePresets'
10
- * const theme = resolveTheme(modernRenderTheme)
11
- */
12
- import type { RenderTheme } from './renderTheme';
13
- /** Modern theme — blue/pink palette, rounded exons, system font. */
14
- export declare const modernRenderTheme: Partial<RenderTheme>;
15
- /** Dark theme — adapted for dark backgrounds, high contrast. */
16
- export declare const darkRenderTheme: Partial<RenderTheme>;
@@ -1,14 +0,0 @@
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
- /**
9
- * Render a genomic coordinate ruler onto a canvas context.
10
- *
11
- * Stateless — all state is passed as parameters.
12
- * Draws tick marks, labels with SI-prefix units, and a baseline.
13
- */
14
- export declare function renderRulerTrack(ctx: CanvasRenderingContext2D, config: RulerRenderConfig, rc: RenderContext): void;
@@ -1,32 +0,0 @@
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 './renderTheme';
15
- import { BaseTrackCanvas } from './baseTrackCanvas';
16
- export interface RulerTrackCanvasOptions {
17
- locus: Locus;
18
- /** Per-track config overrides. Applied after theme-derived defaults. */
19
- config?: Partial<RulerRenderConfig>;
20
- /** Unified render theme. Palette drives default colors/fonts. */
21
- theme?: Partial<RenderTheme>;
22
- /** Canvas provider for environment abstraction. Default: DOMCanvasProvider. */
23
- canvasProvider?: CanvasProvider;
24
- }
25
- export declare class RulerTrackCanvas extends BaseTrackCanvas<RulerRenderConfig> {
26
- readonly type = "ruler";
27
- constructor(canvas: HTMLCanvasElement, options: RulerTrackCanvasOptions);
28
- protected computeHeight(_width: number): number;
29
- protected getBackground(): string;
30
- protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
31
- serializeConfig(theme: RenderTheme): RulerTrackSessionConfig;
32
- }
@@ -1,66 +0,0 @@
1
- /**
2
- * BigWig reader — public API.
3
- *
4
- * Thin wrapper around @gmod/bbi that preserves the existing public API.
5
- * All binary parsing, decompression, and zoom level selection is handled
6
- * by @gmod/bbi internally.
7
- */
8
- import type { WigFeature, WindowFunction, Locus } from '../types';
9
- import type { WorkerProvider } from '../workerProvider';
10
- export { BinaryParser } from '../io/binaryParser';
11
- export interface FetchBigWigOptions {
12
- /** Resolution in base pairs per pixel. Used to select an appropriate zoom level. */
13
- bpPerPixel?: number;
14
- /** Aggregation function for zoom-level data. Default: 'mean'. */
15
- windowFunction?: WindowFunction;
16
- /** @deprecated Worker dispatch is handled internally by @gmod/bbi. */
17
- workerProvider?: WorkerProvider;
18
- /** AbortSignal for cancelling in-flight HTTP requests. */
19
- signal?: AbortSignal;
20
- }
21
- /** Header metadata from a BigWig file. */
22
- export interface BigWigHeader {
23
- bwVersion: number;
24
- nZoomLevels: number;
25
- chromTreeOffset: number;
26
- fullDataOffset: number;
27
- fullIndexOffset: number;
28
- fieldCount: number;
29
- definedFieldCount: number;
30
- autoSqlOffset: number;
31
- totalSummaryOffset: number;
32
- uncompressBuffSize: number;
33
- extensionOffset: number;
34
- }
35
- /** Summary statistics for the entire BigWig file. */
36
- export interface BigWigTotalSummary {
37
- basesCovered: number;
38
- minVal: number;
39
- maxVal: number;
40
- sumData: number;
41
- sumSquares: number;
42
- mean: number;
43
- stddev: number;
44
- }
45
- /**
46
- * Thin wrapper around @gmod/bbi BigWig that preserves the legacy API.
47
- */
48
- export declare class BigWigReader {
49
- private readonly bw;
50
- constructor(url: string, _workerProvider?: WorkerProvider);
51
- loadHeader(signal?: AbortSignal): Promise<BigWigHeader>;
52
- getTotalSummary(signal?: AbortSignal): Promise<BigWigTotalSummary | undefined>;
53
- readFeatures(chr: string, bpStart: number, bpEnd: number, bpPerPixel?: number, windowFunction?: WindowFunction, signal?: AbortSignal): Promise<WigFeature[]>;
54
- readWGFeatures(chromNames: string[], bpPerPixel: number, windowFunction?: WindowFunction, signal?: AbortSignal): Promise<WigFeature[]>;
55
- }
56
- /**
57
- * Fetch BigWig features for a genomic locus.
58
- */
59
- export declare function fetchBigWigFeatures(url: string, locus: Locus, options?: FetchBigWigOptions): Promise<WigFeature[]>;
60
- /**
61
- * Fetch BigWig features across all specified chromosomes for whole genome view.
62
- * Returns features with per-chromosome coordinates (caller transforms to genome-wide).
63
- */
64
- export declare function fetchBigWigWGFeatures(url: string, chromNames: string[], bpPerPixel: number, options?: Pick<FetchBigWigOptions, 'windowFunction' | 'workerProvider' | 'signal'>): Promise<WigFeature[]>;
65
- /** Clear the BigWig reader cache (useful for testing or memory management). */
66
- export declare function clearBigWigCache(): void;
@@ -1,36 +0,0 @@
1
- /**
2
- * CanvasProvider — environment abstraction for canvas creation and DPR.
3
- *
4
- * Decouples track rendering from browser globals (document, window).
5
- * DOMCanvasProvider is the default for browser environments.
6
- * Future: NodeCanvasProvider (wrapping node-canvas) for server-side rendering,
7
- * MockCanvasProvider for tests.
8
- *
9
- * Reference: ai_docs/modernization/headless-v2.md (Phase 1)
10
- */
11
- /** A canvas and its 2D rendering context, returned by CanvasProvider.createCanvas(). */
12
- export interface CanvasAndContext {
13
- canvas: HTMLCanvasElement;
14
- ctx: CanvasRenderingContext2D;
15
- }
16
- /**
17
- * Abstraction over canvas creation and device pixel ratio.
18
- *
19
- * Implementations:
20
- * - DOMCanvasProvider — browser (default)
21
- * - Future: NodeCanvasProvider — server-side (wraps node-canvas)
22
- * - Future: MockCanvasProvider — tests
23
- */
24
- export interface CanvasProvider {
25
- /** Create a canvas element with the given logical (CSS) dimensions. */
26
- createCanvas(width: number, height: number): CanvasAndContext;
27
- /** Device pixel ratio for sharp rendering on high-DPI displays. */
28
- readonly devicePixelRatio: number;
29
- }
30
- /** Browser-based CanvasProvider using DOM APIs. */
31
- export declare class DOMCanvasProvider implements CanvasProvider {
32
- createCanvas(width: number, height: number): CanvasAndContext;
33
- get devicePixelRatio(): number;
34
- }
35
- /** Default CanvasProvider for browser environments. */
36
- export declare const defaultCanvasProvider: CanvasProvider;
@@ -1,220 +0,0 @@
1
- /**
2
- * CommandDispatcher — transport-agnostic command dispatch for HeadlessGenomeBrowser.
3
- *
4
- * Maps a vocabulary of 8 commands (discriminated union on `command` field) to
5
- * browser method calls. Designed for reuse across WebSocket (remoteProtocol.ts)
6
- * and future MCP transport.
7
- *
8
- * Follows the discriminated-union + result-map pattern from workerProvider.ts.
9
- */
10
- import type { HeadlessGenomeBrowser } from './headlessGenomeBrowser';
11
- import type { ROI, ROISetConfig, TrackSessionConfig, SessionConfig } from './types';
12
- import type { TrackSelector } from './trackSelector';
13
- import type { ProjectedState, TrackSummary } from './stateProjection';
14
- export type CommandErrorCode = 'UNKNOWN_COMMAND' | 'INVALID_ARGS' | 'TRACK_NOT_FOUND' | 'NOT_IMPLEMENTED' | 'EXPORT_UNAVAILABLE' | 'NAVIGATION_FAILED' | 'INTERNAL_ERROR';
15
- export declare class CommandError extends Error {
16
- readonly code: CommandErrorCode;
17
- constructor(code: CommandErrorCode, message: string);
18
- }
19
- /** JSON-serializable variant of TrackSelector. */
20
- export interface WireTrackSelector {
21
- /** Exact match against track ID. */
22
- id?: string;
23
- /** Case-insensitive substring match against track name. */
24
- name?: string;
25
- /** Regex pattern string — converted to RegExp(pattern, 'i'). Takes precedence over `name`. */
26
- nameRegex?: string;
27
- /** Exact match against track type (e.g. 'wig', 'annotation', 'interact'). */
28
- type?: string;
29
- /** Metadata key-value matching. AND semantics. */
30
- where?: Record<string, string>;
31
- }
32
- /** Convert wire selector to internal TrackSelector. */
33
- export declare function toTrackSelector(wire: WireTrackSelector): TrackSelector;
34
- export interface GetBrowserStateArgs {
35
- command: 'get_browser_state';
36
- /** Record state under this snapshot key for future diff() calls. */
37
- record?: string;
38
- }
39
- export interface NavigateArgs {
40
- command: 'navigate';
41
- /** Locus string (e.g. "chr17:7,668,000-7,688,000" or gene name "TP53"). */
42
- locus?: string;
43
- /** Zoom direction. */
44
- zoom?: 'in' | 'out';
45
- /** Zoom factor (default 2). */
46
- factor?: number;
47
- }
48
- export interface ModifyTracksArgs {
49
- command: 'modify_tracks';
50
- actions: ModifyTrackAction[];
51
- }
52
- export type ModifyTrackAction = {
53
- action: 'add';
54
- config: TrackSessionConfig;
55
- } | {
56
- action: 'remove';
57
- selector: WireTrackSelector;
58
- } | {
59
- action: 'find';
60
- selector: WireTrackSelector;
61
- } | {
62
- action: 'update_metadata';
63
- selector: WireTrackSelector;
64
- metadata: Record<string, string>;
65
- };
66
- export interface QueryFeaturesArgs {
67
- command: 'query_features';
68
- /** Track ID to query. */
69
- trackId: string;
70
- /** If true, return a feature summary instead of raw features. */
71
- summarize?: boolean;
72
- }
73
- export interface AnnotateArgs {
74
- command: 'annotate';
75
- }
76
- export interface SetLayoutArgs {
77
- command: 'set_layout';
78
- /** Desired track configuration. Reconciler diffs against current state. */
79
- tracks: TrackSessionConfig[];
80
- /** If provided, navigate to this locus. */
81
- locus?: string;
82
- }
83
- export interface ExportViewArgs {
84
- command: 'export_view';
85
- format: 'svg' | 'png' | 'session';
86
- /** Override width in pixels. */
87
- width?: number;
88
- }
89
- export interface ManageROIsArgs {
90
- command: 'manage_rois';
91
- action: ROIAction;
92
- }
93
- export type ROIAction = {
94
- action: 'add';
95
- roi: ROI;
96
- setName?: string;
97
- } | {
98
- action: 'remove';
99
- roiId: string;
100
- } | {
101
- action: 'update';
102
- roiId: string;
103
- changes: Partial<Omit<ROI, 'id'>>;
104
- } | {
105
- action: 'clear';
106
- } | {
107
- action: 'list';
108
- } | {
109
- action: 'list_sets';
110
- } | {
111
- action: 'find_at_locus';
112
- chr: string;
113
- start: number;
114
- end: number;
115
- } | {
116
- action: 'get_visible';
117
- };
118
- export interface SubscribeEventsArgs {
119
- command: 'subscribe_events';
120
- /** Event names to subscribe to. Use `['*']` for all events, `[]` for none. */
121
- events: string[];
122
- }
123
- export type CommandArgs = GetBrowserStateArgs | NavigateArgs | ModifyTracksArgs | QueryFeaturesArgs | AnnotateArgs | SetLayoutArgs | ExportViewArgs | ManageROIsArgs | SubscribeEventsArgs;
124
- export interface ModifyTrackActionResult {
125
- action: string;
126
- success: boolean;
127
- trackId?: string;
128
- tracks?: TrackSummary[];
129
- count?: number;
130
- error?: string;
131
- }
132
- export interface ModifyTracksResult {
133
- results: ModifyTrackActionResult[];
134
- }
135
- export interface QueryFeaturesResult {
136
- trackId: string;
137
- featureCount: number;
138
- features?: unknown[];
139
- summary?: unknown;
140
- }
141
- export interface SetLayoutResult {
142
- added: string[];
143
- removed: string[];
144
- unchanged: string[];
145
- }
146
- export type ManageROIsResult = {
147
- action: 'add';
148
- roi: ROI;
149
- } | {
150
- action: 'remove';
151
- success: boolean;
152
- } | {
153
- action: 'update';
154
- roi: ROI | undefined;
155
- } | {
156
- action: 'clear';
157
- } | {
158
- action: 'list';
159
- rois: ROI[];
160
- } | {
161
- action: 'list_sets';
162
- sets: ROISetConfig[];
163
- } | {
164
- action: 'find_at_locus';
165
- rois: ROI[];
166
- } | {
167
- action: 'get_visible';
168
- rois: ROI[];
169
- };
170
- export interface SubscribeEventsResult {
171
- subscribed: string[];
172
- }
173
- export interface CommandResultMap {
174
- get_browser_state: ProjectedState;
175
- navigate: boolean;
176
- modify_tracks: ModifyTracksResult;
177
- query_features: QueryFeaturesResult;
178
- annotate: never;
179
- set_layout: SetLayoutResult;
180
- export_view: string | SessionConfig;
181
- manage_rois: ManageROIsResult;
182
- subscribe_events: SubscribeEventsResult;
183
- }
184
- export interface CommandDispatcherOptions {
185
- /** Whether the browser supports PNG export (true for DOM GenomeBrowser). */
186
- supportsPNG?: boolean;
187
- /** Custom PNG exporter — called when format is 'png'. Allows GenomeBrowser to inject toPNG(). */
188
- exportPNG?: () => Promise<string>;
189
- /** Callback when agent subscribes to events. Used by RemoteConnection to filter forwarding. */
190
- onSubscribeEvents?: (events: string[]) => void;
191
- }
192
- export declare class CommandDispatcher {
193
- private browser;
194
- private options;
195
- constructor(browser: HeadlessGenomeBrowser, options?: CommandDispatcherOptions);
196
- /** Dispatch a command to the appropriate handler. */
197
- dispatch(args: GetBrowserStateArgs): Promise<ProjectedState>;
198
- dispatch(args: NavigateArgs): Promise<boolean>;
199
- dispatch(args: ModifyTracksArgs): Promise<ModifyTracksResult>;
200
- dispatch(args: QueryFeaturesArgs): Promise<QueryFeaturesResult>;
201
- dispatch(args: AnnotateArgs): Promise<never>;
202
- dispatch(args: SetLayoutArgs): Promise<SetLayoutResult>;
203
- dispatch(args: ExportViewArgs): Promise<string | SessionConfig>;
204
- dispatch(args: ManageROIsArgs): Promise<ManageROIsResult>;
205
- dispatch(args: SubscribeEventsArgs): Promise<SubscribeEventsResult>;
206
- dispatch(args: CommandArgs): Promise<CommandResultMap[CommandArgs['command']]>;
207
- private handleGetState;
208
- private handleNavigate;
209
- private handleModifyTracks;
210
- private handleQueryFeatures;
211
- private handleAnnotate;
212
- private handleSetLayout;
213
- /** Find a current track that matches a desired config. */
214
- private findMatchingTrack;
215
- /** Compute a stable match key from a track session config's data source. */
216
- private layoutMatchKey;
217
- private handleExportView;
218
- private handleManageROIs;
219
- private handleSubscribeEvents;
220
- }
@@ -1,64 +0,0 @@
1
- /**
2
- * Common context menu item factories.
3
- *
4
- * Stateless functions that return ContextMenuItem[] — no DOM, no side effects.
5
- * The ContextMenuCallbacks interface decouples menu items from browser-level
6
- * actions (removing tracks, showing dialogs).
7
- *
8
- * `numericDataMenuItems()` mirrors igv.js `TrackBase.numericDataMenuItems()`
9
- * (js/trackBase.ts lines 510-552), which is shared by WigTrack, BAMTrack,
10
- * QTLTrack, GCNVTrack, CNVPytorTrack, GWASTrack, InteractionTrack, and
11
- * MergedTrack — any track with a Y-axis data range.
12
- */
13
- import type { ContextMenuItem, NumericState, Track, ROI, Locus } from './types';
14
- /**
15
- * Callback interface for common menu actions that require browser-level
16
- * coordination. GenomeBrowser provides the implementation.
17
- */
18
- export interface ContextMenuCallbacks {
19
- /** Set the track's pixel height and re-render. */
20
- setTrackHeight(track: Track, height: number): void;
21
- /** Remove the track from the browser. */
22
- removeTrack(track: Track): void;
23
- /** Show an input dialog. Returns the entered value, or null if cancelled. */
24
- promptInput(label: string, currentValue: string | number): Promise<string | null>;
25
- }
26
- /** Common menu items that apply to all tracks (set height, remove). */
27
- export declare function commonContextMenuItems(track: Track, callbacks: ContextMenuCallbacks): ContextMenuItem[];
28
- /**
29
- * Menu items for quantitative/numeric tracks: set data range, log scale, autoscale.
30
- *
31
- * Mirrors igv.js `TrackBase.numericDataMenuItems()` (js/trackBase.ts lines 510-552).
32
- * In igv.js this is a method on TrackBase used by 8 track classes. In our
33
- * architecture it's a stateless factory that takes the track's NumericState
34
- * (state + callbacks combined), matching our separation of data from DOM.
35
- *
36
- * Items produced:
37
- * 1. "Set data range" — prompts for min/max, disables autoscale when set
38
- * (mirrors igv.js DataRangeDialog → TrackBase.setDataRange)
39
- * 2. "Log scale" checkbox — only if logScale is supported (state.logScale !== undefined)
40
- * (mirrors igv.js conditional on this.logScale !== undefined)
41
- * 3. "Autoscale" checkbox
42
- * (mirrors igv.js autoScaleHandler)
43
- */
44
- export declare function numericDataMenuItems(state: NumericState, promptInput: ContextMenuCallbacks['promptInput']): ContextMenuItem[];
45
- /**
46
- * Callback interface for ROI menu actions that require browser-level coordination.
47
- */
48
- export interface ROIMenuCallbacks {
49
- /** Navigate the browser to the ROI's genomic region. */
50
- goToRegion(locus: Locus): void;
51
- /** Update an ROI's properties. */
52
- updateROI(roiId: string, changes: Partial<Omit<ROI, 'id'>>): void;
53
- /** Remove an ROI by ID. */
54
- removeROI(roiId: string): void;
55
- /** Show an input dialog. Returns the entered value, or null if cancelled. */
56
- promptInput(label: string, currentValue: string | number): Promise<string | null>;
57
- }
58
- /**
59
- * Context menu items for an ROI region.
60
- *
61
- * Mirrors igv.js ROIMenu (js/roi/ROIMenu.ts) but with stateless factory pattern.
62
- * Items: edit name, edit description, set color, separator, go to region, remove.
63
- */
64
- export declare function roiContextMenuItems(roi: ROI, callbacks: ROIMenuCallbacks): ContextMenuItem[];
@@ -1,25 +0,0 @@
1
- /**
2
- * ContextMenuProvider — abstraction for context menu rendering.
3
- *
4
- * Follows the PopupProvider / CanvasProvider / WorkerProvider pattern.
5
- * Provide a custom implementation to replace the default `<loom-context-menu>`
6
- * Web Component with your own React, Vue, or vanilla JS context menu.
7
- *
8
- * Unlike PopupProvider, a default context menu provider is created automatically
9
- * when none is specified. Pass `null` to disable context menus entirely.
10
- *
11
- * When no context menu provider is active, the browser still emits
12
- * `trackcontextmenu` events — consumers can handle menus entirely via events.
13
- */
14
- import type { ContextMenuItem } from './types';
15
- export interface ContextMenuProvider {
16
- /** Show a context menu with the given items, positioned relative to the container. */
17
- show(items: ContextMenuItem[], position: {
18
- x: number;
19
- y: number;
20
- }, container: HTMLElement): void;
21
- /** Hide/dismiss the context menu. */
22
- hide(): void;
23
- /** Clean up resources (remove DOM elements, event listeners, etc). */
24
- dispose(): void;
25
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Interval-based sequence cache, matching igv.js CachedSequence.
3
- *
4
- * Wraps any SequenceProvider and adds:
5
- * - 100kb minimum query expansion (amortizes small requests)
6
- * - 10-slot interval cache with FIFO eviction
7
- * - Deduplication of concurrent in-flight requests
8
- * - Subsumption: new intervals evict smaller overlapping ones
9
- *
10
- * Module-level singleton pattern: call `createCachedSequence(provider)` once,
11
- * then pass the returned function as the SequenceProvider to WigTrackCanvas.
12
- */
13
- import type { SequenceProvider } from '../types';
14
- /**
15
- * Create a cached SequenceProvider wrapping a raw provider.
16
- *
17
- * The returned function is a drop-in SequenceProvider with transparent caching.
18
- */
19
- export declare function createCachedSequence(provider: SequenceProvider): SequenceProvider;
@@ -1,21 +0,0 @@
1
- /**
2
- * UCSC Genome Browser REST API client.
3
- *
4
- * Fetches gene annotation data from the UCSC REST API and decodes it
5
- * into GeneFeature objects using the same parsing logic as igv.js.
6
- *
7
- * API docs: https://genome.ucsc.edu/goldenPath/help/api.html
8
- */
9
- import type { AnnotationFeature, Locus } from '../types';
10
- export interface FetchGenesOptions {
11
- /** Genome assembly, e.g. "hg38", "hg19", "mm10". Default: "hg38". */
12
- genome?: string;
13
- /** UCSC track name, e.g. "ncbiRefSeq", "knownGene". Default: "ncbiRefSeq". */
14
- track?: string;
15
- }
16
- /**
17
- * Fetch gene features for a genomic region from the UCSC REST API.
18
- *
19
- * Uses the same ncbiRefSeq track that igv.js loads by default for hg38.
20
- */
21
- export declare function fetchGeneFeatures(locus: Locus, options?: FetchGenesOptions, signal?: AbortSignal): Promise<AnnotationFeature[]>;
@@ -1,19 +0,0 @@
1
- /**
2
- * UCSC Genome Browser REST API client for genomic sequences.
3
- *
4
- * Fetches DNA sequence data from the UCSC REST API.
5
- * API docs: https://genome.ucsc.edu/goldenPath/help/api.html
6
- */
7
- import type { Locus } from '../types';
8
- export interface FetchSequenceOptions {
9
- /** Genome assembly, e.g. "hg38", "hg19", "mm10". Default: "hg38". */
10
- genome?: string;
11
- }
12
- /**
13
- * Fetch DNA sequence for a genomic region from the UCSC REST API.
14
- *
15
- * @param locus - The genomic region to fetch
16
- * @param options - Optional genome assembly (default: hg38)
17
- * @returns The DNA sequence string (lowercase)
18
- */
19
- export declare function fetchSequence(locus: Locus, options?: FetchSequenceOptions, signal?: AbortSignal): Promise<string>;
@@ -1,16 +0,0 @@
1
- /**
2
- * Data lifecycle utilities for GenomeBrowser.
3
- *
4
- * Pure functions for cache validation and viewport buffering.
5
- * Used internally by GenomeBrowser to decide when to re-fetch track data.
6
- */
7
- import type { Locus, FeatureCacheEntry } from './types';
8
- /**
9
- * Check if a cache entry covers a viewport at a compatible resolution.
10
- */
11
- export declare function cacheCoversViewport<F>(cache: FeatureCacheEntry<F>, viewport: Locus, bpPerPixel: number): boolean;
12
- /**
13
- * Expand a locus by BUFFER_SCREENS on each side for pre-fetching.
14
- * Produces a 3x viewport region.
15
- */
16
- export declare function bufferLocus(locus: Locus): Locus;
@@ -1,24 +0,0 @@
1
- import type { DataSource, Locus, WigFeature, WindowFunction } from '../types';
2
- import type { WorkerProvider } from '../workerProvider';
3
- import type { CumulativeOffsets } from '../genome/chromSizes';
4
- export declare class BigWigDataSource implements DataSource<WigFeature> {
5
- private url;
6
- private _windowFunction;
7
- private workerProvider?;
8
- private _cumulativeOffsets?;
9
- private _resolveChromName?;
10
- constructor(url: string, windowFunction?: WindowFunction, workerProvider?: WorkerProvider);
11
- get windowFunction(): WindowFunction;
12
- /** Update the window function for future fetches. */
13
- setWindowFunction(wf: WindowFunction): void;
14
- /** Set cumulative offsets for whole genome view coordinate transformation. */
15
- setCumulativeOffsets(offsets: CumulativeOffsets): void;
16
- /** Set a chromosome name resolver for alias resolution (e.g., "1" → "chr1"). */
17
- setChromNameResolver(resolver: (chr: string) => string): void;
18
- fetch(locus: Locus, bpPerPixel: number, signal: AbortSignal): Promise<WigFeature[]>;
19
- /**
20
- * Fetch all chromosomes for whole genome view and transform to genome-wide coordinates.
21
- * Port of js/bigwig/bwSource.ts getWGValues().
22
- */
23
- private fetchWG;
24
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Derive a stable cache key from a DataSourceConfig.
3
- *
4
- * Used by HeadlessGenomeBrowser to group tracks that share the same
5
- * underlying data source, enabling fetch deduplication when multiple
6
- * tracks point to the same URL/region.
7
- */
8
- import type { DataSourceConfig } from '../types';
9
- export declare function dataSourceCacheKey(config: DataSourceConfig): string;
@@ -1,46 +0,0 @@
1
- /**
2
- * Feature source factory — URL config → DataSource + inferred track type.
3
- *
4
- * Routes to the appropriate DataSource implementation based on detected format:
5
- * - Binary formats (bigwig, bigbed) → BigWigDataSource
6
- * - Text formats (bed, gff, narrowpeak, etc.) → TextFeatureSource
7
- *
8
- * Port of js/feature/featureSource.ts factory logic.
9
- *
10
- * Layer 1 (Data + Layout): no DOM.
11
- */
12
- import type { DataSource } from '../types';
13
- import type { WorkerProvider } from '../workerProvider';
14
- export interface FeatureSourceConfig {
15
- /** URL to the data file. */
16
- url: string;
17
- /** Explicit format override. When absent, inferred from URL. */
18
- format?: string;
19
- /** Index URL override for tabix-indexed files. */
20
- indexURL?: string;
21
- /** Whether the file is indexed (tabix). Auto-detected if absent. */
22
- indexed?: boolean;
23
- /** For GFF: whether to assemble transcript models. Default: true. */
24
- assembleGFF?: boolean;
25
- /** Window function for BigWig/GTX summarization. Default: 'mean'. */
26
- windowFunction?: 'mean' | 'min' | 'max';
27
- /** Experiment ID within a GTX file. Required for GTX format. */
28
- experimentId?: string;
29
- }
30
- export interface FeatureSourceResult {
31
- /** The created DataSource. */
32
- dataSource: DataSource;
33
- /** Inferred track type string (e.g., 'wig', 'annotation', 'variant'). */
34
- trackType: string;
35
- /** Detected format string (e.g., 'bed', 'bigwig', 'gff3'). */
36
- format: string;
37
- }
38
- /**
39
- * Create a DataSource from a URL config.
40
- *
41
- * Detects format from the URL, routes to the appropriate DataSource
42
- * implementation, and infers the track type.
43
- *
44
- * Port of js/feature/featureSource.ts factory routing logic.
45
- */
46
- export declare function createFeatureSource(config: FeatureSourceConfig, workerProvider?: WorkerProvider): FeatureSourceResult;
@@ -1,16 +0,0 @@
1
- import type { DataSource, Locus, AnnotationFeature } from '../types';
2
- import type { CumulativeOffsets } from '../genome/chromSizes';
3
- import type { FetchGenesOptions } from '../data/ucscApi';
4
- export declare class GeneDataSource implements DataSource<AnnotationFeature> {
5
- private options;
6
- private _cumulativeOffsets?;
7
- constructor(options?: FetchGenesOptions);
8
- /** Set cumulative offsets for whole genome view coordinate transformation. */
9
- setCumulativeOffsets(offsets: CumulativeOffsets): void;
10
- fetch(locus: Locus, _bpPerPixel: number, signal: AbortSignal): Promise<AnnotationFeature[]>;
11
- /**
12
- * Fetch genes for all main chromosomes and transform to genome-wide coordinates.
13
- * Follows igv.js computeWGFeatures() pattern: strips exons, downsamples.
14
- */
15
- private fetchWG;
16
- }