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.
Files changed (290) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +287 -0
  3. package/dist/igv.d.ts +667 -0
  4. package/dist/igv.esm.js +76708 -0
  5. package/dist/igv.esm.min.js +26 -0
  6. package/dist/igv.esm.min.js.map +1 -0
  7. package/dist/igv.js +76716 -0
  8. package/dist/igv.min.js +26 -0
  9. package/dist/igv.min.js.map +1 -0
  10. package/dist/loom.d.ts +667 -0
  11. package/dist/loom.esm.js +14927 -0
  12. package/dist/loom.esm.min.js +2 -0
  13. package/dist/loom.esm.min.js.map +1 -0
  14. package/dist/loom.js +15114 -0
  15. package/dist/loom.min.js +2 -0
  16. package/dist/loom.min.js.map +1 -0
  17. package/dist/types/agent/index.d.ts +4 -0
  18. package/dist/types/agent/stateProjection.d.ts +115 -0
  19. package/dist/types/agent/trackSelector.d.ts +31 -0
  20. package/dist/types/baseTrackCanvas.d.ts +62 -0
  21. package/dist/types/bigwig/binaryParser.d.ts +25 -0
  22. package/dist/types/bigwig/bpTree.d.ts +40 -0
  23. package/dist/types/bigwig/bwReader.d.ts +69 -0
  24. package/dist/types/bigwig/chromTree.d.ts +28 -0
  25. package/dist/types/bigwig/index.d.ts +66 -0
  26. package/dist/types/bigwig/inflate.d.ts +9 -0
  27. package/dist/types/bigwig/rangeReader.d.ts +48 -0
  28. package/dist/types/bigwig/rpTree.d.ts +27 -0
  29. package/dist/types/canvasProvider.d.ts +36 -0
  30. package/dist/types/commandDispatcher.d.ts +199 -0
  31. package/dist/types/contextMenu.d.ts +64 -0
  32. package/dist/types/contextMenuProvider.d.ts +25 -0
  33. package/dist/types/data/cachedSequence.d.ts +19 -0
  34. package/dist/types/data/ucscApi.d.ts +21 -0
  35. package/dist/types/data/ucscSequence.d.ts +19 -0
  36. package/dist/types/dataLifecycle.d.ts +16 -0
  37. package/dist/types/dataSources/bigWigDataSource.d.ts +24 -0
  38. package/dist/types/dataSources/dataSourceCacheKey.d.ts +9 -0
  39. package/dist/types/dataSources/dynseqDataSource.d.ts +20 -0
  40. package/dist/types/dataSources/featureSourceFactory.d.ts +46 -0
  41. package/dist/types/dataSources/geneDataSource.d.ts +16 -0
  42. package/dist/types/dataSources/gtxDataSource.d.ts +42 -0
  43. package/dist/types/dataSources/sequenceDataSource.d.ts +15 -0
  44. package/dist/types/dataSources/textFeatureSource.d.ts +63 -0
  45. package/dist/types/decode/bed.d.ts +64 -0
  46. package/dist/types/decode/bedpe.d.ts +36 -0
  47. package/dist/types/decode/exonUtils.d.ts +29 -0
  48. package/dist/types/decode/gff.d.ts +58 -0
  49. package/dist/types/decode/interact.d.ts +19 -0
  50. package/dist/types/decode/ucsc.d.ts +56 -0
  51. package/dist/types/dynseqRenderer.d.ts +37 -0
  52. package/dist/types/events.d.ts +23 -0
  53. package/dist/types/export/canvas2svg.d.ts +166 -0
  54. package/dist/types/export/index.d.ts +2 -0
  55. package/dist/types/featureCache.d.ts +69 -0
  56. package/dist/types/formats/featureParser.d.ts +72 -0
  57. package/dist/types/formats/formatDetection.d.ts +46 -0
  58. package/dist/types/geneRenderer.d.ts +17 -0
  59. package/dist/types/geneThemes.d.ts +11 -0
  60. package/dist/types/geneTrackCanvas.d.ts +46 -0
  61. package/dist/types/genome/chromAlias.d.ts +46 -0
  62. package/dist/types/genome/chromSizes.d.ts +53 -0
  63. package/dist/types/genome/genome.d.ts +51 -0
  64. package/dist/types/genomeBrowser.d.ts +189 -0
  65. package/dist/types/gtx/fetchCoordinator.d.ts +34 -0
  66. package/dist/types/gtx/gtxReader.d.ts +144 -0
  67. package/dist/types/gtx/index.d.ts +40 -0
  68. package/dist/types/gtx/zstdWasm.d.ts +22 -0
  69. package/dist/types/headlessGenomeBrowser.d.ts +450 -0
  70. package/dist/types/index.d.ts +123 -0
  71. package/dist/types/intervalTree.d.ts +56 -0
  72. package/dist/types/io/binaryParser.d.ts +25 -0
  73. package/dist/types/io/index.d.ts +7 -0
  74. package/dist/types/io/rangeReader.d.ts +48 -0
  75. package/dist/types/locusUtils.d.ts +37 -0
  76. package/dist/types/pack.d.ts +41 -0
  77. package/dist/types/popupProvider.d.ts +22 -0
  78. package/dist/types/remoteProtocol.d.ts +79 -0
  79. package/dist/types/renderTheme.d.ts +72 -0
  80. package/dist/types/renderThemePresets.d.ts +16 -0
  81. package/dist/types/roi/index.d.ts +3 -0
  82. package/dist/types/roi/roiRenderer.d.ts +24 -0
  83. package/dist/types/roi/roiSet.d.ts +41 -0
  84. package/dist/types/rulerRenderer.d.ts +14 -0
  85. package/dist/types/rulerTrackCanvas.d.ts +32 -0
  86. package/dist/types/sequence/sequenceUtils.d.ts +44 -0
  87. package/dist/types/session.d.ts +55 -0
  88. package/dist/types/src/bigwig/index.d.ts +66 -0
  89. package/dist/types/src/canvasProvider.d.ts +36 -0
  90. package/dist/types/src/commandDispatcher.d.ts +220 -0
  91. package/dist/types/src/contextMenu.d.ts +64 -0
  92. package/dist/types/src/contextMenuProvider.d.ts +25 -0
  93. package/dist/types/src/data/cachedSequence.d.ts +19 -0
  94. package/dist/types/src/data/ucscApi.d.ts +21 -0
  95. package/dist/types/src/data/ucscSequence.d.ts +19 -0
  96. package/dist/types/src/dataLifecycle.d.ts +16 -0
  97. package/dist/types/src/dataSources/bigWigDataSource.d.ts +24 -0
  98. package/dist/types/src/dataSources/dataSourceCacheKey.d.ts +9 -0
  99. package/dist/types/src/dataSources/featureSourceFactory.d.ts +46 -0
  100. package/dist/types/src/dataSources/geneDataSource.d.ts +16 -0
  101. package/dist/types/src/dataSources/gtxDataSource.d.ts +42 -0
  102. package/dist/types/src/dataSources/sequenceDataSource.d.ts +15 -0
  103. package/dist/types/src/dataSources/textFeatureSource.d.ts +63 -0
  104. package/dist/types/src/decode/bed.d.ts +64 -0
  105. package/dist/types/src/decode/bedpe.d.ts +36 -0
  106. package/dist/types/src/decode/exonUtils.d.ts +29 -0
  107. package/dist/types/src/decode/gff.d.ts +58 -0
  108. package/dist/types/src/decode/interact.d.ts +19 -0
  109. package/dist/types/src/decode/ucsc.d.ts +56 -0
  110. package/dist/types/src/events.d.ts +23 -0
  111. package/dist/types/src/export/canvas2svg.d.ts +166 -0
  112. package/dist/types/src/export/index.d.ts +2 -0
  113. package/dist/types/src/featureCache.d.ts +69 -0
  114. package/dist/types/src/formats/featureParser.d.ts +72 -0
  115. package/dist/types/src/formats/formatDetection.d.ts +46 -0
  116. package/dist/types/src/genome/chromAlias.d.ts +46 -0
  117. package/dist/types/src/genome/chromSizes.d.ts +53 -0
  118. package/dist/types/src/genome/genome.d.ts +51 -0
  119. package/dist/types/src/genomeBrowser.d.ts +189 -0
  120. package/dist/types/src/gtx/fetchCoordinator.d.ts +34 -0
  121. package/dist/types/src/gtx/gtxReader.d.ts +144 -0
  122. package/dist/types/src/gtx/index.d.ts +40 -0
  123. package/dist/types/src/gtx/zstdWasm.d.ts +22 -0
  124. package/dist/types/src/headlessGenomeBrowser.d.ts +450 -0
  125. package/dist/types/src/index.d.ts +123 -0
  126. package/dist/types/src/intervalTree.d.ts +56 -0
  127. package/dist/types/src/io/binaryParser.d.ts +25 -0
  128. package/dist/types/src/io/index.d.ts +7 -0
  129. package/dist/types/src/io/rangeReader.d.ts +48 -0
  130. package/dist/types/src/locusUtils.d.ts +37 -0
  131. package/dist/types/src/pack.d.ts +41 -0
  132. package/dist/types/src/popupProvider.d.ts +22 -0
  133. package/dist/types/src/remoteProtocol.d.ts +81 -0
  134. package/dist/types/src/roi/index.d.ts +3 -0
  135. package/dist/types/src/roi/roiRenderer.d.ts +24 -0
  136. package/dist/types/src/roi/roiSet.d.ts +41 -0
  137. package/dist/types/src/sequence/sequenceUtils.d.ts +44 -0
  138. package/dist/types/src/session.d.ts +55 -0
  139. package/dist/types/src/stateProjection.d.ts +115 -0
  140. package/dist/types/src/tabix/index.d.ts +48 -0
  141. package/dist/types/src/themes/index.d.ts +3 -0
  142. package/dist/types/src/themes/renderTheme.d.ts +86 -0
  143. package/dist/types/src/themes/renderThemePresets.d.ts +16 -0
  144. package/dist/types/src/trackRegistry.d.ts +81 -0
  145. package/dist/types/src/trackSelector.d.ts +31 -0
  146. package/dist/types/src/tracks/annotation/annotationRenderer.d.ts +17 -0
  147. package/dist/types/src/tracks/annotation/annotationThemes.d.ts +11 -0
  148. package/dist/types/src/tracks/annotation/annotationTrackCanvas.d.ts +58 -0
  149. package/dist/types/src/tracks/annotation/index.d.ts +4 -0
  150. package/dist/types/src/tracks/axis/axisRenderer.d.ts +19 -0
  151. package/dist/types/src/tracks/axis/index.d.ts +1 -0
  152. package/dist/types/src/tracks/baseTrackCanvas.d.ts +113 -0
  153. package/dist/types/src/tracks/dynseq/dynseqRenderer.d.ts +38 -0
  154. package/dist/types/src/tracks/dynseq/index.d.ts +1 -0
  155. package/dist/types/src/tracks/index.d.ts +7 -0
  156. package/dist/types/src/tracks/interaction/index.d.ts +4 -0
  157. package/dist/types/src/tracks/interaction/interactionRenderer.d.ts +52 -0
  158. package/dist/types/src/tracks/interaction/interactionTrackCanvas.d.ts +54 -0
  159. package/dist/types/src/tracks/ruler/index.d.ts +3 -0
  160. package/dist/types/src/tracks/ruler/rulerRenderer.d.ts +25 -0
  161. package/dist/types/src/tracks/ruler/rulerTrackCanvas.d.ts +43 -0
  162. package/dist/types/src/tracks/sequence/index.d.ts +5 -0
  163. package/dist/types/src/tracks/sequence/sequenceRenderer.d.ts +34 -0
  164. package/dist/types/src/tracks/sequence/sequenceThemes.d.ts +11 -0
  165. package/dist/types/src/tracks/sequence/sequenceTrackCanvas.d.ts +67 -0
  166. package/dist/types/src/tracks/wig/index.d.ts +5 -0
  167. package/dist/types/src/tracks/wig/wigRenderer.d.ts +15 -0
  168. package/dist/types/src/tracks/wig/wigSummary.d.ts +31 -0
  169. package/dist/types/src/tracks/wig/wigThemes.d.ts +15 -0
  170. package/dist/types/src/tracks/wig/wigTrackCanvas.d.ts +82 -0
  171. package/dist/types/src/types.d.ts +885 -0
  172. package/dist/types/src/ui/components/LoomBrowserShell.d.ts +52 -0
  173. package/dist/types/src/ui/components/LoomChromosomeSelect.d.ts +18 -0
  174. package/dist/types/src/ui/components/LoomContextMenu.d.ts +39 -0
  175. package/dist/types/src/ui/components/LoomExportControls.d.ts +13 -0
  176. package/dist/types/src/ui/components/LoomInputDialog.d.ts +27 -0
  177. package/dist/types/src/ui/components/LoomLocusInput.d.ts +18 -0
  178. package/dist/types/src/ui/components/LoomNavbar.d.ts +15 -0
  179. package/dist/types/src/ui/components/LoomPopup.d.ts +32 -0
  180. package/dist/types/src/ui/components/LoomWindowSize.d.ts +14 -0
  181. package/dist/types/src/ui/components/LoomZoomControls.d.ts +10 -0
  182. package/dist/types/src/ui/index.d.ts +21 -0
  183. package/dist/types/src/ui/themes.d.ts +14 -0
  184. package/dist/types/src/worker/nodeWorkerProvider.d.ts +28 -0
  185. package/dist/types/src/worker/taskHandler.d.ts +15 -0
  186. package/dist/types/src/worker/webWorkerProvider.d.ts +51 -0
  187. package/dist/types/src/worker/workerScript.d.ts +11 -0
  188. package/dist/types/src/workerProvider.d.ts +76 -0
  189. package/dist/types/stateProjection.d.ts +115 -0
  190. package/dist/types/tabix/bgzBlockLoader.d.ts +60 -0
  191. package/dist/types/tabix/bgzf.d.ts +43 -0
  192. package/dist/types/tabix/index.d.ts +48 -0
  193. package/dist/types/tabix/tabixIndex.d.ts +85 -0
  194. package/dist/types/tabix/tabixReader.d.ts +60 -0
  195. package/dist/types/tabix/virtualOffset.d.ts +41 -0
  196. package/dist/types/test/src/mockCanvasProvider.d.ts +67 -0
  197. package/dist/types/test/src/testBedDecode.d.ts +1 -0
  198. package/dist/types/test/src/testCanvas2SVG.d.ts +7 -0
  199. package/dist/types/test/src/testChromAlias.d.ts +1 -0
  200. package/dist/types/test/src/testCommandDispatcher.d.ts +1 -0
  201. package/dist/types/test/src/testData.d.ts +7 -0
  202. package/dist/types/test/src/testDataLifecycle.d.ts +1 -0
  203. package/dist/types/test/src/testDataSourceCacheKey.d.ts +1 -0
  204. package/dist/types/test/src/testDataSources.d.ts +5 -0
  205. package/dist/types/test/src/testDecodeUcsc.d.ts +1 -0
  206. package/dist/types/test/src/testEvents.d.ts +1 -0
  207. package/dist/types/test/src/testFeatureCache.d.ts +1 -0
  208. package/dist/types/test/src/testFeatureParser.d.ts +1 -0
  209. package/dist/types/test/src/testFormatDetection.d.ts +1 -0
  210. package/dist/types/test/src/testGffDecode.d.ts +1 -0
  211. package/dist/types/test/src/testHeadlessBrowser.d.ts +1 -0
  212. package/dist/types/test/src/testInteractionDecoder.d.ts +1 -0
  213. package/dist/types/test/src/testIntervalTree.d.ts +1 -0
  214. package/dist/types/test/src/testLocusUtils.d.ts +1 -0
  215. package/dist/types/test/src/testPack.d.ts +1 -0
  216. package/dist/types/test/src/testROI.d.ts +1 -0
  217. package/dist/types/test/src/testRemoteProtocol.d.ts +1 -0
  218. package/dist/types/test/src/testRenderTheme.d.ts +1 -0
  219. package/dist/types/test/src/testSVGExport.d.ts +5 -0
  220. package/dist/types/test/src/testSequence.d.ts +1 -0
  221. package/dist/types/test/src/testSession.d.ts +1 -0
  222. package/dist/types/test/src/testTrackSelector.d.ts +1 -0
  223. package/dist/types/test/src/testTrackSerialize.d.ts +1 -0
  224. package/dist/types/test/src/testWigSummary.d.ts +1 -0
  225. package/dist/types/test/src/testWorkerDispatch.d.ts +9 -0
  226. package/dist/types/themes/index.d.ts +3 -0
  227. package/dist/types/themes/renderTheme.d.ts +86 -0
  228. package/dist/types/themes/renderThemePresets.d.ts +16 -0
  229. package/dist/types/trackRegistry.d.ts +81 -0
  230. package/dist/types/trackSelector.d.ts +31 -0
  231. package/dist/types/tracks/annotation/annotationRenderer.d.ts +17 -0
  232. package/dist/types/tracks/annotation/annotationThemes.d.ts +11 -0
  233. package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +58 -0
  234. package/dist/types/tracks/annotation/index.d.ts +4 -0
  235. package/dist/types/tracks/axis/axisRenderer.d.ts +19 -0
  236. package/dist/types/tracks/axis/index.d.ts +1 -0
  237. package/dist/types/tracks/baseTrackCanvas.d.ts +113 -0
  238. package/dist/types/tracks/dynseq/dynseqRenderer.d.ts +38 -0
  239. package/dist/types/tracks/dynseq/index.d.ts +1 -0
  240. package/dist/types/tracks/gene/geneRenderer.d.ts +17 -0
  241. package/dist/types/tracks/gene/geneThemes.d.ts +11 -0
  242. package/dist/types/tracks/gene/geneTrackCanvas.d.ts +58 -0
  243. package/dist/types/tracks/gene/index.d.ts +4 -0
  244. package/dist/types/tracks/index.d.ts +7 -0
  245. package/dist/types/tracks/interaction/index.d.ts +4 -0
  246. package/dist/types/tracks/interaction/interactionRenderer.d.ts +52 -0
  247. package/dist/types/tracks/interaction/interactionTrackCanvas.d.ts +54 -0
  248. package/dist/types/tracks/ruler/index.d.ts +3 -0
  249. package/dist/types/tracks/ruler/rulerRenderer.d.ts +25 -0
  250. package/dist/types/tracks/ruler/rulerTrackCanvas.d.ts +43 -0
  251. package/dist/types/tracks/sequence/index.d.ts +5 -0
  252. package/dist/types/tracks/sequence/sequenceRenderer.d.ts +34 -0
  253. package/dist/types/tracks/sequence/sequenceThemes.d.ts +11 -0
  254. package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +67 -0
  255. package/dist/types/tracks/wig/index.d.ts +5 -0
  256. package/dist/types/tracks/wig/wigRenderer.d.ts +15 -0
  257. package/dist/types/tracks/wig/wigSummary.d.ts +31 -0
  258. package/dist/types/tracks/wig/wigThemes.d.ts +15 -0
  259. package/dist/types/tracks/wig/wigTrackCanvas.d.ts +82 -0
  260. package/dist/types/types.d.ts +885 -0
  261. package/dist/types/ui/components/IgvBrowserShell.d.ts +52 -0
  262. package/dist/types/ui/components/IgvChromosomeSelect.d.ts +18 -0
  263. package/dist/types/ui/components/IgvExportControls.d.ts +13 -0
  264. package/dist/types/ui/components/IgvLocusInput.d.ts +18 -0
  265. package/dist/types/ui/components/IgvNavbar.d.ts +15 -0
  266. package/dist/types/ui/components/IgvWindowSize.d.ts +14 -0
  267. package/dist/types/ui/components/IgvZoomControls.d.ts +10 -0
  268. package/dist/types/ui/components/LoomBrowserShell.d.ts +52 -0
  269. package/dist/types/ui/components/LoomChromosomeSelect.d.ts +18 -0
  270. package/dist/types/ui/components/LoomContextMenu.d.ts +39 -0
  271. package/dist/types/ui/components/LoomExportControls.d.ts +13 -0
  272. package/dist/types/ui/components/LoomInputDialog.d.ts +27 -0
  273. package/dist/types/ui/components/LoomLocusInput.d.ts +18 -0
  274. package/dist/types/ui/components/LoomNavbar.d.ts +15 -0
  275. package/dist/types/ui/components/LoomPopup.d.ts +32 -0
  276. package/dist/types/ui/components/LoomWindowSize.d.ts +14 -0
  277. package/dist/types/ui/components/LoomZoomControls.d.ts +10 -0
  278. package/dist/types/ui/index.d.ts +21 -0
  279. package/dist/types/ui/themes.d.ts +14 -0
  280. package/dist/types/wigRenderer.d.ts +15 -0
  281. package/dist/types/wigSummary.d.ts +31 -0
  282. package/dist/types/wigThemes.d.ts +15 -0
  283. package/dist/types/wigTrackCanvas.d.ts +46 -0
  284. package/dist/types/worker/decodeWig.d.ts +20 -0
  285. package/dist/types/worker/nodeWorkerProvider.d.ts +28 -0
  286. package/dist/types/worker/taskHandler.d.ts +15 -0
  287. package/dist/types/worker/webWorkerProvider.d.ts +51 -0
  288. package/dist/types/worker/workerScript.d.ts +11 -0
  289. package/dist/types/workerProvider.d.ts +76 -0
  290. package/package.json +102 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014-2025 Broad Institute of MIT and Harvard, Regents of the University of California
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,287 @@
1
+ <p align="center">
2
+ <img src="docs-site/static/img/logo.svg" alt="Loom" width="200" />
3
+ </p>
4
+
5
+ <h1 align="center">Loom</h1>
6
+
7
+ <p align="center">A modular, headless-first genomic visualization engine built in TypeScript.</p>
8
+
9
+ [![npm](https://img.shields.io/npm/v/loom-browser.svg)](https://www.npmjs.com/package/loom-browser)
10
+ [![license](https://img.shields.io/npm/l/loom-browser.svg)](LICENSE)
11
+
12
+ Loom renders genomic tracks (genes, signal, sequence, interactions) to Canvas or SVG. It works headlessly in Node for server-side rendering, in web workers, and in the browser with full interactivity.
13
+
14
+ ## Quick Start
15
+
16
+ ```
17
+ npm install loom-browser
18
+ ```
19
+
20
+ ### Interactive browser (DOM)
21
+
22
+ ```ts
23
+ import { GenomeBrowser } from 'loom-browser'
24
+
25
+ const browser = new GenomeBrowser(document.getElementById('container')!, {
26
+ locus: { chr: 'chr17', start: 7_668_000, end: 7_688_000 },
27
+ })
28
+
29
+ browser.addRuler()
30
+ browser.addGeneTrack() // UCSC RefSeq genes
31
+ browser.addWigTrack('https://example.com/signal.bigWig', {
32
+ config: { color: '#4A90D9', height: 80 },
33
+ })
34
+ browser.addBedTrack('https://example.com/peaks.bed.gz')
35
+ browser.addInteractionTrack('https://example.com/loops.bedpe')
36
+ browser.addSequenceTrack() // visible at base-level zoom
37
+ ```
38
+
39
+ Built-in drag-to-pan, sweep-to-zoom on the ruler, pinch-to-zoom, and responsive resizing — no setup needed.
40
+
41
+ ### Headless (Node / SSR)
42
+
43
+ ```ts
44
+ import { HeadlessGenomeBrowser } from 'loom-browser'
45
+
46
+ const browser = new HeadlessGenomeBrowser({
47
+ locus: { chr: 'chr17', start: 7_668_000, end: 7_688_000 },
48
+ viewportWidth: 1200,
49
+ })
50
+
51
+ browser.addRuler()
52
+ browser.addGeneTrack()
53
+ browser.addWigTrack('https://example.com/signal.bigWig')
54
+
55
+ // Wait for data, then export
56
+ browser.on('dataloaded', () => {
57
+ const svg = browser.toSVG({ width: 1200, backdropColor: '#fff' })
58
+ fs.writeFileSync('output.svg', svg)
59
+ })
60
+ ```
61
+
62
+ ### UI Shell (web components)
63
+
64
+ Drop in a full browser shell with navbar, locus search, zoom controls, and export buttons:
65
+
66
+ ```ts
67
+ import { createShell } from 'loom-browser'
68
+
69
+ const shell = createShell(document.getElementById('container')!, {
70
+ locus: { chr: 'chr17', start: 7_668_000, end: 7_688_000 },
71
+ shellTheme: 'modern', // 'classic' | 'modern' | 'dark'
72
+ })
73
+
74
+ shell.browser.addRuler()
75
+ shell.browser.addGeneTrack()
76
+ ```
77
+
78
+ Or use the custom element directly:
79
+
80
+ ```html
81
+ <loom-browser theme="modern" id="my-browser"></loom-browser>
82
+ ```
83
+
84
+ ## Track Types
85
+
86
+ | Type | Method | Formats | Description |
87
+ |------|--------|---------|-------------|
88
+ | **Ruler** | `addRuler()` | — | Genomic coordinate axis with tick marks |
89
+ | **Gene / Annotation** | `addGeneTrack()`, `addBedTrack(url)` | BED, GFF3, GTF, GenePred, RefFlat, NarrowPeak, BroadPeak | Gene models with exons, UTR, strand arrows, labels |
90
+ | **Signal** | `addWigTrack(url)` | BigWig, BedGraph | Bar, line, points, or dynamic-sequence graphs with autoscale |
91
+ | **Sequence** | `addSequenceTrack()` | UCSC API | DNA bases with optional 3-frame translation |
92
+ | **Interaction** | `addInteractionTrack(url)` | BEDPE, UCSC interact | Arc diagrams for chromatin loops and contacts |
93
+
94
+ ## Navigation
95
+
96
+ ```ts
97
+ browser.search('TP53') // gene name lookup
98
+ browser.search('chr17:7,668,000-7,688,000') // locus string
99
+ browser.setLocus({ chr: 'chr17', start: 7_668_000, end: 7_688_000 })
100
+ browser.zoomIn() // 2x
101
+ browser.zoomOut(4) // 4x
102
+ ```
103
+
104
+ ## Events
105
+
106
+ ```ts
107
+ browser.on('locuschange', ({ locus }) => { /* navigation happened */ })
108
+ browser.on('dataloaded', ({ track }) => { /* track finished loading */ })
109
+ browser.on('trackclick', ({ track, feature, x, y }) => { /* feature clicked */ })
110
+ browser.on('trackcontextmenu', ({ track, feature, x, y }) => { /* right-click */ })
111
+ ```
112
+
113
+ Full list: `locuschange`, `trackadded`, `trackremoved`, `trackorderchanged`, `dataloaded`, `dataerror`, `rendererror`, `trackclick`, `trackhover`, `trackcontextmenu`, `roiadded`, `roiremoved`, `roichanged`, `roiclick`, `roicontextmenu`.
114
+
115
+ ## Themes
116
+
117
+ Three built-in render themes control colors for all track types:
118
+
119
+ ```ts
120
+ import { defaultRenderTheme, modernRenderTheme, darkRenderTheme } from 'loom-browser'
121
+
122
+ const browser = new GenomeBrowser(container, {
123
+ locus,
124
+ theme: darkRenderTheme,
125
+ })
126
+ ```
127
+
128
+ Override individual properties or provide per-track overrides:
129
+
130
+ ```ts
131
+ browser.addWigTrack(url, {
132
+ config: { color: '#E74C3C', graphType: 'line', height: 60 },
133
+ })
134
+ ```
135
+
136
+ ## Export
137
+
138
+ ```ts
139
+ // SVG string
140
+ const svg = browser.toSVG({ width: 1200, backdropColor: '#ffffff' })
141
+
142
+ // PNG data URL (DOM browser only)
143
+ const png = await browser.toPNG()
144
+
145
+ // Download files
146
+ browser.saveSVGtoFile('my-region.svg')
147
+ await browser.savePNGtoFile('my-region.png')
148
+ ```
149
+
150
+ ## Regions of Interest (ROIs)
151
+
152
+ ```ts
153
+ browser.addROI({
154
+ chr: 'chr17', start: 7_674_000, end: 7_676_000,
155
+ color: 'rgba(255, 0, 0, 0.15)',
156
+ label: 'Exon 7',
157
+ })
158
+
159
+ const rois = browser.getVisibleROIs()
160
+ browser.removeROI(rois[0].id)
161
+ ```
162
+
163
+ ## Sessions
164
+
165
+ Save and restore browser state:
166
+
167
+ ```ts
168
+ const session = browser.toJSON() // serialize
169
+ browser.loadSession(session) // restore
170
+
171
+ // Import from igv.js session format
172
+ import { fromIgvSession } from 'loom-browser'
173
+ const loomSession = fromIgvSession(igvSessionObject)
174
+ ```
175
+
176
+ ## Remote Control (WebSocket)
177
+
178
+ Let an LLM or agent control the browser over WebSocket:
179
+
180
+ ```ts
181
+ const ws = new WebSocket('wss://your-server/browser')
182
+ browser.attachRemote(ws)
183
+ ```
184
+
185
+ Or use `CommandDispatcher` in-process:
186
+
187
+ ```ts
188
+ import { CommandDispatcher } from 'loom-browser'
189
+
190
+ const dispatcher = new CommandDispatcher(browser)
191
+ const state = await dispatcher.dispatch({ command: 'get_browser_state' })
192
+ await dispatcher.dispatch({ command: 'navigate', locus: 'BRCA1' })
193
+ await dispatcher.dispatch({
194
+ command: 'modify_tracks',
195
+ actions: [{ action: 'add', type: 'wig', url: 'https://example.com/signal.bigWig' }],
196
+ })
197
+ ```
198
+
199
+ Commands: `get_browser_state`, `navigate`, `modify_tracks`, `query_features`, `set_layout`, `export_view`, `manage_rois`, `subscribe_events`.
200
+
201
+ ## State Projection
202
+
203
+ Inspect browser state programmatically (useful for agents/LLMs):
204
+
205
+ ```ts
206
+ const state = browser.state.getState()
207
+ // { locus, locusString, span, zoomLevel, tracks: [...], rois: [...] }
208
+
209
+ // Diff workflow
210
+ browser.state.getState({ record: 'before' })
211
+ browser.search('chr1:1,000,000-2,000,000')
212
+ const diff = browser.state.diff('before')
213
+ // { locus: { from, to }, zoomLevel: { from, to }, ... }
214
+ ```
215
+
216
+ ## Web Workers
217
+
218
+ Offload BigWig decoding and feature packing to a worker thread:
219
+
220
+ ```ts
221
+ import { GenomeBrowser, WebWorkerProvider } from 'loom-browser'
222
+
223
+ const browser = new GenomeBrowser(container, {
224
+ locus,
225
+ workerProvider: new WebWorkerProvider('/loom-worker.js'),
226
+ })
227
+ ```
228
+
229
+ In Node:
230
+
231
+ ```ts
232
+ import { NodeWorkerProvider } from 'loom-browser'
233
+ const browser = new HeadlessGenomeBrowser({
234
+ locus,
235
+ viewportWidth: 1200,
236
+ workerProvider: new NodeWorkerProvider(),
237
+ })
238
+ ```
239
+
240
+ ## Low-Level Renderer API
241
+
242
+ Use standalone renderers and track canvases directly — no browser instance needed:
243
+
244
+ ```ts
245
+ import { AnnotationTrackCanvas, fetchGeneFeatures } from 'loom-browser'
246
+
247
+ const canvas = document.createElement('canvas')
248
+ const track = new AnnotationTrackCanvas(canvas, {
249
+ locus: { chr: 'chr17', start: 7_668_000, end: 7_688_000 },
250
+ features: [],
251
+ config: { displayMode: 'EXPANDED', featureHeight: 14, drawLabels: true },
252
+ })
253
+ track.attachTo(document.getElementById('track-container')!)
254
+
255
+ const features = await fetchGeneFeatures(track.locus)
256
+ track.setFeatures(features)
257
+ ```
258
+
259
+ ## Architecture
260
+
261
+ Loom uses a four-layer architecture. Each layer has zero dependencies on the layers above it:
262
+
263
+ 1. **Data + Layout** — Types, decoders, data sources, feature packing. No DOM, no canvas. Safe for Node and workers.
264
+ 2. **Renderers** — Stateless pure functions: `(ctx, features, config, viewport) → pixels`. Takes `CanvasRenderingContext2D`, no DOM.
265
+ 3. **Headless Browser** — Track orchestration, data lifecycle, navigation, session serialization, SVG export. No DOM.
266
+ 4. **DOM Shell** — `GenomeBrowser` adds pointer events, drag/pan/zoom, axis columns, ResizeObserver. Web components for UI.
267
+
268
+ ## Development
269
+
270
+ ```
271
+ git clone https://github.com/riyavsinha/loom.git
272
+ cd loom
273
+ npm install
274
+ npm run build
275
+ ```
276
+
277
+ ```
278
+ npm test # unit tests (Vitest)
279
+ npm run typecheck # type check src/
280
+ npx tsc --noEmit # type check js/ (legacy)
281
+ npm run storybook # component stories
282
+ npm run test:visual # Playwright screenshot tests
283
+ ```
284
+
285
+ ## License
286
+
287
+ [MIT](LICENSE)