@genome-spy/core 0.36.0 → 0.37.0

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 (523) hide show
  1. package/README.md +1 -0
  2. package/dist/{index.es.js → bundled/index.es.js} +4227 -4085
  3. package/dist/{index.js → bundled/index.js} +191 -55
  4. package/dist/src/data/collector.d.ts +36 -0
  5. package/dist/src/data/collector.d.ts.map +1 -0
  6. package/dist/src/data/collector.js +184 -0
  7. package/dist/src/data/collector.test.js +84 -0
  8. package/dist/src/data/dataFlow.d.ts +65 -0
  9. package/dist/src/data/dataFlow.d.ts.map +1 -0
  10. package/dist/src/data/dataFlow.js +142 -0
  11. package/dist/src/data/dataFlow.test.js +5 -0
  12. package/dist/src/data/facetNode.d.ts +17 -0
  13. package/dist/src/data/facetNode.d.ts.map +1 -0
  14. package/dist/src/data/facetNode.js +17 -0
  15. package/dist/src/data/flow.test.js +72 -0
  16. package/dist/src/data/flowNode.d.ts +136 -0
  17. package/dist/src/data/flowNode.d.ts.map +1 -0
  18. package/dist/src/data/flowNode.js +286 -0
  19. package/dist/src/data/flowNode.test.js +50 -0
  20. package/dist/src/data/flowOptimizer.d.ts +27 -0
  21. package/dist/src/data/flowOptimizer.d.ts.map +1 -0
  22. package/dist/src/data/flowOptimizer.js +133 -0
  23. package/dist/src/data/flowOptimizer.test.js +193 -0
  24. package/dist/src/data/flowTestUtils.d.ts +30 -0
  25. package/dist/src/data/flowTestUtils.d.ts.map +1 -0
  26. package/dist/src/data/flowTestUtils.js +63 -0
  27. package/dist/src/data/formats/fasta.d.ts +20 -0
  28. package/dist/src/data/formats/fasta.d.ts.map +1 -0
  29. package/dist/src/data/formats/fasta.js +32 -0
  30. package/dist/src/data/formats/fasta.test.js +27 -0
  31. package/dist/src/data/sources/dataSource.d.ts +12 -0
  32. package/dist/src/data/sources/dataSource.d.ts.map +1 -0
  33. package/dist/src/data/sources/dataSource.js +25 -0
  34. package/dist/src/data/sources/dataSourceFactory.d.ts +16 -0
  35. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -0
  36. package/dist/src/data/sources/dataSourceFactory.js +127 -0
  37. package/dist/src/data/sources/dataUtils.d.ts +50 -0
  38. package/dist/src/data/sources/dataUtils.d.ts.map +1 -0
  39. package/dist/src/data/sources/dataUtils.js +83 -0
  40. package/dist/src/data/sources/dynamic/README.md +3 -0
  41. package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts +13 -0
  42. package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts.map +1 -0
  43. package/dist/src/data/sources/dynamic/axisGenomeSource.js +19 -0
  44. package/dist/src/data/sources/dynamic/axisTickSource.d.ts +18 -0
  45. package/dist/src/data/sources/dynamic/axisTickSource.d.ts.map +1 -0
  46. package/dist/src/data/sources/dynamic/axisTickSource.js +73 -0
  47. package/dist/src/data/sources/dynamic/bamSource.d.ts +46 -0
  48. package/dist/src/data/sources/dynamic/bamSource.d.ts.map +1 -0
  49. package/dist/src/data/sources/dynamic/bamSource.js +115 -0
  50. package/dist/src/data/sources/dynamic/bigBedSource.d.ts +51 -0
  51. package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +1 -0
  52. package/dist/src/data/sources/dynamic/bigBedSource.js +128 -0
  53. package/dist/src/data/sources/dynamic/bigWigSource.d.ts +58 -0
  54. package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +1 -0
  55. package/dist/src/data/sources/dynamic/bigWigSource.js +166 -0
  56. package/dist/src/data/sources/dynamic/gff3Source.d.ts +8 -0
  57. package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +1 -0
  58. package/dist/src/data/sources/dynamic/gff3Source.js +19 -0
  59. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts +30 -0
  60. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +1 -0
  61. package/dist/src/data/sources/dynamic/indexedFastaSource.js +86 -0
  62. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts +42 -0
  63. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +1 -0
  64. package/dist/src/data/sources/dynamic/singleAxisLazySource.js +129 -0
  65. package/dist/src/data/sources/dynamic/tabixSource.d.ts +54 -0
  66. package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +1 -0
  67. package/dist/src/data/sources/dynamic/tabixSource.js +140 -0
  68. package/dist/src/data/sources/dynamic/windowedMixin.d.ts +32 -0
  69. package/dist/src/data/sources/dynamic/windowedMixin.d.ts.map +1 -0
  70. package/dist/src/data/sources/dynamic/windowedMixin.js +53 -0
  71. package/dist/src/data/sources/inlineSource.d.ts +16 -0
  72. package/dist/src/data/sources/inlineSource.d.ts.map +1 -0
  73. package/dist/src/data/sources/inlineSource.js +68 -0
  74. package/dist/src/data/sources/inlineSource.test.js +56 -0
  75. package/dist/src/data/sources/namedSource.d.ts +25 -0
  76. package/dist/src/data/sources/namedSource.d.ts.map +1 -0
  77. package/dist/src/data/sources/namedSource.js +80 -0
  78. package/dist/src/data/sources/sequenceSource.d.ts +17 -0
  79. package/dist/src/data/sources/sequenceSource.d.ts.map +1 -0
  80. package/dist/src/data/sources/sequenceSource.js +47 -0
  81. package/dist/src/data/sources/sequenceSource.test.js +46 -0
  82. package/dist/src/data/sources/urlSource.d.ts +16 -0
  83. package/dist/src/data/sources/urlSource.d.ts.map +1 -0
  84. package/dist/src/data/sources/urlSource.js +74 -0
  85. package/dist/src/data/transforms/aggregate.d.ts +18 -0
  86. package/dist/src/data/transforms/aggregate.d.ts.map +1 -0
  87. package/dist/src/data/transforms/aggregate.js +67 -0
  88. package/dist/src/data/transforms/clone.d.ts +15 -0
  89. package/dist/src/data/transforms/clone.d.ts.map +1 -0
  90. package/dist/src/data/transforms/clone.js +40 -0
  91. package/dist/src/data/transforms/clone.test.js +11 -0
  92. package/dist/src/data/transforms/coverage.d.ts +30 -0
  93. package/dist/src/data/transforms/coverage.d.ts.map +1 -0
  94. package/dist/src/data/transforms/coverage.js +183 -0
  95. package/dist/src/data/transforms/coverage.test.js +123 -0
  96. package/dist/src/data/transforms/filter.d.ts +12 -0
  97. package/dist/src/data/transforms/filter.d.ts.map +1 -0
  98. package/dist/src/data/transforms/filter.js +33 -0
  99. package/dist/src/data/transforms/filter.test.js +18 -0
  100. package/dist/src/data/transforms/filterScoredLabels.d.ts +29 -0
  101. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -0
  102. package/dist/src/data/transforms/filterScoredLabels.js +134 -0
  103. package/dist/src/data/transforms/flatten.d.ts +10 -0
  104. package/dist/src/data/transforms/flatten.d.ts.map +1 -0
  105. package/dist/src/data/transforms/flatten.js +68 -0
  106. package/dist/src/data/transforms/flatten.test.js +93 -0
  107. package/dist/src/data/transforms/flattenCompressedExons.d.ts +19 -0
  108. package/dist/src/data/transforms/flattenCompressedExons.d.ts.map +1 -0
  109. package/dist/src/data/transforms/flattenCompressedExons.js +53 -0
  110. package/dist/src/data/transforms/flattenDelimited.d.ts +10 -0
  111. package/dist/src/data/transforms/flattenDelimited.d.ts.map +1 -0
  112. package/dist/src/data/transforms/flattenDelimited.js +66 -0
  113. package/dist/src/data/transforms/flattenDelimited.test.js +87 -0
  114. package/dist/src/data/transforms/flattenSequence.d.ts +11 -0
  115. package/dist/src/data/transforms/flattenSequence.d.ts.map +1 -0
  116. package/dist/src/data/transforms/flattenSequence.js +35 -0
  117. package/dist/src/data/transforms/flattenSequence.test.js +34 -0
  118. package/dist/src/data/transforms/formula.d.ts +13 -0
  119. package/dist/src/data/transforms/formula.d.ts.map +1 -0
  120. package/dist/src/data/transforms/formula.js +35 -0
  121. package/dist/src/data/transforms/formula.test.js +19 -0
  122. package/dist/src/data/transforms/identifier.d.ts +40 -0
  123. package/dist/src/data/transforms/identifier.d.ts.map +1 -0
  124. package/dist/src/data/transforms/identifier.js +106 -0
  125. package/dist/src/data/transforms/identifier.test.js +83 -0
  126. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts +10 -0
  127. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -0
  128. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +97 -0
  129. package/dist/src/data/transforms/measureText.d.ts +18 -0
  130. package/dist/src/data/transforms/measureText.d.ts.map +1 -0
  131. package/dist/src/data/transforms/measureText.js +42 -0
  132. package/dist/src/data/transforms/pileup.d.ts +10 -0
  133. package/dist/src/data/transforms/pileup.d.ts.map +1 -0
  134. package/dist/src/data/transforms/pileup.js +126 -0
  135. package/dist/src/data/transforms/pileup.test.js +70 -0
  136. package/dist/src/data/transforms/project.d.ts +13 -0
  137. package/dist/src/data/transforms/project.d.ts.map +1 -0
  138. package/dist/src/data/transforms/project.js +38 -0
  139. package/dist/src/data/transforms/project.test.js +32 -0
  140. package/dist/src/data/transforms/regexExtract.d.ts +13 -0
  141. package/dist/src/data/transforms/regexExtract.d.ts.map +1 -0
  142. package/dist/src/data/transforms/regexExtract.js +57 -0
  143. package/dist/src/data/transforms/regexExtract.test.js +67 -0
  144. package/dist/src/data/transforms/regexFold.d.ts +14 -0
  145. package/dist/src/data/transforms/regexFold.d.ts.map +1 -0
  146. package/dist/src/data/transforms/regexFold.js +139 -0
  147. package/dist/src/data/transforms/regexFold.test.js +160 -0
  148. package/dist/src/data/transforms/sample.d.ts +42 -0
  149. package/dist/src/data/transforms/sample.d.ts.map +1 -0
  150. package/dist/src/data/transforms/sample.js +99 -0
  151. package/dist/src/data/transforms/sample.test.js +38 -0
  152. package/dist/src/data/transforms/stack.d.ts +11 -0
  153. package/dist/src/data/transforms/stack.d.ts.map +1 -0
  154. package/dist/src/data/transforms/stack.js +134 -0
  155. package/dist/src/data/transforms/stack.test.js +91 -0
  156. package/dist/src/data/transforms/transformFactory.d.ts +12 -0
  157. package/dist/src/data/transforms/transformFactory.d.ts.map +1 -0
  158. package/dist/src/data/transforms/transformFactory.js +59 -0
  159. package/dist/src/encoder/accessor.d.ts +15 -0
  160. package/dist/src/encoder/accessor.d.ts.map +1 -0
  161. package/dist/src/encoder/accessor.js +76 -0
  162. package/dist/src/encoder/accessor.test.js +47 -0
  163. package/dist/src/encoder/encoder.d.ts +144 -0
  164. package/dist/src/encoder/encoder.d.ts.map +1 -0
  165. package/dist/src/encoder/encoder.js +400 -0
  166. package/dist/src/encoder/encoder.test.js +98 -0
  167. package/dist/src/fonts/Lato-Regular.json +1267 -0
  168. package/dist/src/fonts/Lato-Regular.png +0 -0
  169. package/dist/src/fonts/OFL.txt +93 -0
  170. package/dist/src/fonts/README.md +3 -0
  171. package/dist/src/fonts/bmFontManager.d.ts +182 -0
  172. package/dist/src/fonts/bmFontManager.d.ts.map +1 -0
  173. package/dist/src/fonts/bmFontManager.js +359 -0
  174. package/dist/src/fonts/bmFontMetrics.d.ts +45 -0
  175. package/dist/src/fonts/bmFontMetrics.d.ts.map +1 -0
  176. package/dist/src/fonts/bmFontMetrics.js +108 -0
  177. package/dist/src/genome/genome.d.ts +172 -0
  178. package/dist/src/genome/genome.d.ts.map +1 -0
  179. package/dist/src/genome/genome.js +379 -0
  180. package/dist/src/genome/genome.test.js +226 -0
  181. package/dist/src/genome/genomeStore.d.ts +20 -0
  182. package/dist/src/genome/genomeStore.d.ts.map +1 -0
  183. package/dist/src/genome/genomeStore.js +54 -0
  184. package/dist/src/genome/locusFormat.d.ts +14 -0
  185. package/dist/src/genome/locusFormat.d.ts.map +1 -0
  186. package/dist/src/genome/locusFormat.js +37 -0
  187. package/dist/src/genome/scaleIndex.d.ts +6 -0
  188. package/dist/src/genome/scaleIndex.d.ts.map +1 -0
  189. package/dist/src/genome/scaleIndex.js +165 -0
  190. package/dist/src/genome/scaleIndex.test.js +78 -0
  191. package/dist/src/genome/scaleLocus.d.ts +3 -0
  192. package/dist/src/genome/scaleLocus.d.ts.map +1 -0
  193. package/dist/src/genome/scaleLocus.js +101 -0
  194. package/dist/src/genome/scaleLocus.test.js +4 -0
  195. package/dist/src/genomeSpy.d.ts +141 -0
  196. package/dist/src/genomeSpy.d.ts.map +1 -0
  197. package/dist/src/genomeSpy.js +788 -0
  198. package/dist/src/gl/arrayBuilder.d.ts +71 -0
  199. package/dist/src/gl/arrayBuilder.d.ts.map +1 -0
  200. package/dist/src/gl/arrayBuilder.js +199 -0
  201. package/dist/src/gl/dataToVertices.d.ts +194 -0
  202. package/dist/src/gl/dataToVertices.d.ts.map +1 -0
  203. package/dist/src/gl/dataToVertices.js +639 -0
  204. package/dist/src/gl/includes/common.glsl.js +2 -0
  205. package/dist/src/gl/includes/picking.fragment.glsl.js +2 -0
  206. package/dist/src/gl/includes/picking.vertex.glsl.js +2 -0
  207. package/dist/src/gl/includes/sampleFacet.glsl.js +2 -0
  208. package/dist/src/gl/includes/scales.glsl.js +2 -0
  209. package/dist/src/gl/link.fragment.glsl.js +2 -0
  210. package/dist/src/gl/link.vertex.glsl.js +2 -0
  211. package/dist/src/gl/point.fragment.glsl.js +2 -0
  212. package/dist/src/gl/point.vertex.glsl.js +2 -0
  213. package/dist/src/gl/rect.fragment.glsl.js +2 -0
  214. package/dist/src/gl/rect.vertex.glsl.js +2 -0
  215. package/dist/src/gl/rule.fragment.glsl.js +2 -0
  216. package/dist/src/gl/rule.vertex.glsl.js +2 -0
  217. package/dist/src/gl/text.fragment.glsl.js +2 -0
  218. package/dist/src/gl/text.vertex.glsl.js +2 -0
  219. package/dist/src/gl/webGLHelper.d.ts +118 -0
  220. package/dist/src/gl/webGLHelper.d.ts.map +1 -0
  221. package/dist/src/gl/webGLHelper.js +513 -0
  222. package/dist/src/img/bowtie.svg +1 -0
  223. package/dist/src/img/genomespy-favicon.svg +34 -0
  224. package/dist/src/index.d.ts +15 -0
  225. package/dist/src/index.d.ts.map +1 -0
  226. package/dist/src/index.html +11 -0
  227. package/dist/src/index.js +129 -0
  228. package/dist/src/marks/link.d.ts +11 -0
  229. package/dist/src/marks/link.d.ts.map +1 -0
  230. package/dist/src/marks/link.js +175 -0
  231. package/dist/src/marks/mark.d.ts +226 -0
  232. package/dist/src/marks/mark.d.ts.map +1 -0
  233. package/dist/src/marks/mark.js +1004 -0
  234. package/dist/src/marks/markUtils.d.ts +23 -0
  235. package/dist/src/marks/markUtils.d.ts.map +1 -0
  236. package/dist/src/marks/markUtils.js +125 -0
  237. package/dist/src/marks/pointMark.d.ts +11 -0
  238. package/dist/src/marks/pointMark.d.ts.map +1 -0
  239. package/dist/src/marks/pointMark.js +251 -0
  240. package/dist/src/marks/rectMark.d.ts +18 -0
  241. package/dist/src/marks/rectMark.d.ts.map +1 -0
  242. package/dist/src/marks/rectMark.js +255 -0
  243. package/dist/src/marks/rule.d.ts +6 -0
  244. package/dist/src/marks/rule.d.ts.map +1 -0
  245. package/dist/src/marks/rule.js +250 -0
  246. package/dist/src/marks/text.d.ts +13 -0
  247. package/dist/src/marks/text.d.ts.map +1 -0
  248. package/dist/src/marks/text.js +279 -0
  249. package/dist/src/scale/colorUtils.d.ts +34 -0
  250. package/dist/src/scale/colorUtils.d.ts.map +1 -0
  251. package/dist/src/scale/colorUtils.js +184 -0
  252. package/dist/src/scale/glslScaleGenerator.d.ts +45 -0
  253. package/dist/src/scale/glslScaleGenerator.d.ts.map +1 -0
  254. package/dist/src/scale/glslScaleGenerator.js +506 -0
  255. package/dist/src/scale/scale.d.ts +10 -0
  256. package/dist/src/scale/scale.d.ts.map +1 -0
  257. package/dist/src/scale/scale.js +456 -0
  258. package/dist/src/scale/scale.test.js +324 -0
  259. package/dist/src/scale/ticks.d.ts +47 -0
  260. package/dist/src/scale/ticks.d.ts.map +1 -0
  261. package/dist/src/scale/ticks.js +203 -0
  262. package/dist/src/scale/ticks.test.js +40 -0
  263. package/dist/src/singlePageApp.d.ts +2 -0
  264. package/dist/src/singlePageApp.d.ts.map +1 -0
  265. package/dist/src/singlePageApp.js +13 -0
  266. package/dist/src/spec/axis.d.ts +402 -0
  267. package/dist/src/spec/channel.d.ts +440 -0
  268. package/dist/src/spec/data.d.ts +370 -0
  269. package/dist/src/spec/font.d.ts +15 -0
  270. package/dist/src/spec/genome.d.ts +35 -0
  271. package/dist/src/spec/mark.d.ts +435 -0
  272. package/dist/src/spec/root.d.ts +22 -0
  273. package/dist/src/spec/sampleView.d.ts +185 -0
  274. package/dist/src/spec/scale.d.ts +273 -0
  275. package/dist/src/spec/title.d.ts +102 -0
  276. package/dist/src/spec/tooltip.d.ts +9 -0
  277. package/dist/src/spec/transform.d.ts +504 -0
  278. package/dist/src/spec/view.d.ts +214 -0
  279. package/dist/src/styles/genome-spy.css.d.ts +3 -0
  280. package/dist/src/styles/genome-spy.css.d.ts.map +1 -0
  281. package/dist/src/styles/genome-spy.css.js +114 -0
  282. package/dist/src/styles/genome-spy.scss +153 -0
  283. package/dist/src/tooltip/dataTooltipHandler.d.ts +2 -0
  284. package/dist/src/tooltip/dataTooltipHandler.d.ts.map +1 -0
  285. package/dist/src/tooltip/dataTooltipHandler.js +64 -0
  286. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts +2 -0
  287. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts.map +1 -0
  288. package/dist/src/tooltip/refseqGeneTooltipHandler.js +78 -0
  289. package/dist/src/tooltip/tooltipHandler.d.ts +9 -0
  290. package/dist/src/tooltip/tooltipHandler.d.ts.map +1 -0
  291. package/dist/src/tooltip/tooltipHandler.ts +12 -0
  292. package/dist/src/types/bmFont.d.ts +58 -0
  293. package/dist/src/types/embedApi.d.ts +67 -0
  294. package/dist/src/types/encoder.d.ts +84 -0
  295. package/dist/src/types/flowBatch.d.ts +40 -0
  296. package/dist/src/types/rendering.d.ts +65 -0
  297. package/dist/src/types/scaleResolutionApi.d.ts +40 -0
  298. package/dist/src/types/viewContext.d.ts +85 -0
  299. package/dist/src/utils/addBaseUrl.d.ts +6 -0
  300. package/dist/src/utils/addBaseUrl.d.ts.map +1 -0
  301. package/dist/src/utils/addBaseUrl.js +19 -0
  302. package/dist/src/utils/addBaseUrl.test.js +22 -0
  303. package/dist/src/utils/animator.d.ts +41 -0
  304. package/dist/src/utils/animator.d.ts.map +1 -0
  305. package/dist/src/utils/animator.js +83 -0
  306. package/dist/src/utils/arrayUtils.d.ts +34 -0
  307. package/dist/src/utils/arrayUtils.d.ts.map +1 -0
  308. package/dist/src/utils/arrayUtils.js +61 -0
  309. package/dist/src/utils/binnedIndex.d.ts +23 -0
  310. package/dist/src/utils/binnedIndex.d.ts.map +1 -0
  311. package/dist/src/utils/binnedIndex.js +167 -0
  312. package/dist/src/utils/binnedIndex.test.js +155 -0
  313. package/dist/src/utils/clamp.d.ts +7 -0
  314. package/dist/src/utils/clamp.d.ts.map +1 -0
  315. package/dist/src/utils/clamp.js +8 -0
  316. package/dist/src/utils/cloner.d.ts +16 -0
  317. package/dist/src/utils/cloner.d.ts.map +1 -0
  318. package/dist/src/utils/cloner.js +34 -0
  319. package/dist/src/utils/cloner.test.js +24 -0
  320. package/dist/src/utils/coalesce.d.ts +6 -0
  321. package/dist/src/utils/coalesce.d.ts.map +1 -0
  322. package/dist/src/utils/coalesce.js +11 -0
  323. package/dist/src/utils/coalesce.test.js +16 -0
  324. package/dist/src/utils/concatIterables.d.ts +8 -0
  325. package/dist/src/utils/concatIterables.d.ts.map +1 -0
  326. package/dist/src/utils/concatIterables.js +26 -0
  327. package/dist/src/utils/concatIterables.test.js +8 -0
  328. package/dist/src/utils/debounce.d.ts +8 -0
  329. package/dist/src/utils/debounce.d.ts.map +1 -0
  330. package/dist/src/utils/debounce.js +37 -0
  331. package/dist/src/utils/domainArray.d.ts +61 -0
  332. package/dist/src/utils/domainArray.d.ts.map +1 -0
  333. package/dist/src/utils/domainArray.js +216 -0
  334. package/dist/src/utils/domainArray.test.js +130 -0
  335. package/dist/src/utils/eerp.d.ts +12 -0
  336. package/dist/src/utils/eerp.d.ts.map +1 -0
  337. package/dist/src/utils/eerp.js +13 -0
  338. package/dist/src/utils/expression.d.ts +9 -0
  339. package/dist/src/utils/expression.d.ts.map +1 -0
  340. package/dist/src/utils/expression.js +32 -0
  341. package/dist/src/utils/field.d.ts +17 -0
  342. package/dist/src/utils/field.d.ts.map +1 -0
  343. package/dist/src/utils/field.js +28 -0
  344. package/dist/src/utils/formatObject.d.ts +7 -0
  345. package/dist/src/utils/formatObject.d.ts.map +1 -0
  346. package/dist/src/utils/formatObject.js +37 -0
  347. package/dist/src/utils/indexer.d.ts +16 -0
  348. package/dist/src/utils/indexer.d.ts.map +1 -0
  349. package/dist/src/utils/indexer.js +43 -0
  350. package/dist/src/utils/indexer.test.js +47 -0
  351. package/dist/src/utils/inertia.d.ts +42 -0
  352. package/dist/src/utils/inertia.d.ts.map +1 -0
  353. package/dist/src/utils/inertia.js +124 -0
  354. package/dist/src/utils/interactionEvent.d.ts +26 -0
  355. package/dist/src/utils/interactionEvent.d.ts.map +1 -0
  356. package/dist/src/utils/interactionEvent.js +33 -0
  357. package/dist/src/utils/iterateNestedMaps.d.ts +11 -0
  358. package/dist/src/utils/iterateNestedMaps.d.ts.map +1 -0
  359. package/dist/src/utils/iterateNestedMaps.js +21 -0
  360. package/dist/src/utils/iterateNestedMaps.test.js +33 -0
  361. package/dist/src/utils/kWayMerge.d.ts +9 -0
  362. package/dist/src/utils/kWayMerge.d.ts.map +1 -0
  363. package/dist/src/utils/kWayMerge.js +42 -0
  364. package/dist/src/utils/kWayMerge.test.js +26 -0
  365. package/dist/src/utils/layout/flexLayout.d.ts +182 -0
  366. package/dist/src/utils/layout/flexLayout.d.ts.map +1 -0
  367. package/dist/src/utils/layout/flexLayout.js +381 -0
  368. package/dist/src/utils/layout/flexLayout.test.js +323 -0
  369. package/dist/src/utils/layout/grid.d.ts +29 -0
  370. package/dist/src/utils/layout/grid.d.ts.map +1 -0
  371. package/dist/src/utils/layout/grid.js +95 -0
  372. package/dist/src/utils/layout/grid.test.js +71 -0
  373. package/dist/src/utils/layout/padding.d.ts +83 -0
  374. package/dist/src/utils/layout/padding.d.ts.map +1 -0
  375. package/dist/src/utils/layout/padding.js +155 -0
  376. package/dist/src/utils/layout/point.d.ts +16 -0
  377. package/dist/src/utils/layout/point.d.ts.map +1 -0
  378. package/dist/src/utils/layout/point.js +23 -0
  379. package/dist/src/utils/layout/rectangle.d.ts +142 -0
  380. package/dist/src/utils/layout/rectangle.d.ts.map +1 -0
  381. package/dist/src/utils/layout/rectangle.js +296 -0
  382. package/dist/src/utils/layout/rectangle.test.js +172 -0
  383. package/dist/src/utils/mergeObjects.d.ts +15 -0
  384. package/dist/src/utils/mergeObjects.d.ts.map +1 -0
  385. package/dist/src/utils/mergeObjects.js +99 -0
  386. package/dist/src/utils/mergeObjects.test.js +42 -0
  387. package/dist/src/utils/numberExtractor.d.ts +9 -0
  388. package/dist/src/utils/numberExtractor.d.ts.map +1 -0
  389. package/dist/src/utils/numberExtractor.js +24 -0
  390. package/dist/src/utils/numberExtractor.test.js +6 -0
  391. package/dist/src/utils/point.d.ts +9 -0
  392. package/dist/src/utils/point.d.ts.map +1 -0
  393. package/dist/src/utils/point.js +14 -0
  394. package/dist/src/utils/propertyCacher.d.ts +30 -0
  395. package/dist/src/utils/propertyCacher.d.ts.map +1 -0
  396. package/dist/src/utils/propertyCacher.js +70 -0
  397. package/dist/src/utils/propertyCacher.test.js +85 -0
  398. package/dist/src/utils/propertyCoalescer.d.ts +15 -0
  399. package/dist/src/utils/propertyCoalescer.d.ts.map +1 -0
  400. package/dist/src/utils/propertyCoalescer.js +42 -0
  401. package/dist/src/utils/propertyCoalescer.test.js +22 -0
  402. package/dist/src/utils/reservationMap.d.ts +42 -0
  403. package/dist/src/utils/reservationMap.d.ts.map +1 -0
  404. package/dist/src/utils/reservationMap.js +103 -0
  405. package/dist/src/utils/reservationMap.test.js +20 -0
  406. package/dist/src/utils/scaleNull.d.ts +13 -0
  407. package/dist/src/utils/scaleNull.d.ts.map +1 -0
  408. package/dist/src/utils/scaleNull.js +21 -0
  409. package/dist/src/utils/setOperations.d.ts +31 -0
  410. package/dist/src/utils/setOperations.d.ts.map +1 -0
  411. package/dist/src/utils/setOperations.js +75 -0
  412. package/dist/src/utils/smoothstep.d.ts +7 -0
  413. package/dist/src/utils/smoothstep.d.ts.map +1 -0
  414. package/dist/src/utils/smoothstep.js +10 -0
  415. package/dist/src/utils/throttle.d.ts +8 -0
  416. package/dist/src/utils/throttle.d.ts.map +1 -0
  417. package/dist/src/utils/throttle.js +34 -0
  418. package/dist/src/utils/topK.d.ts +22 -0
  419. package/dist/src/utils/topK.d.ts.map +1 -0
  420. package/dist/src/utils/topK.js +76 -0
  421. package/dist/src/utils/topK.test.js +64 -0
  422. package/dist/src/utils/transition.d.ts +44 -0
  423. package/dist/src/utils/transition.d.ts.map +1 -0
  424. package/dist/src/utils/transition.js +74 -0
  425. package/dist/src/utils/trees.d.ts +56 -0
  426. package/dist/src/utils/trees.d.ts.map +1 -0
  427. package/dist/src/utils/trees.js +92 -0
  428. package/dist/src/utils/trees.test.js +130 -0
  429. package/dist/src/utils/ui/tooltip.d.ts +50 -0
  430. package/dist/src/utils/ui/tooltip.d.ts.map +1 -0
  431. package/dist/src/utils/ui/tooltip.js +189 -0
  432. package/dist/src/utils/url.d.ts +9 -0
  433. package/dist/src/utils/url.d.ts.map +1 -0
  434. package/dist/src/utils/url.js +22 -0
  435. package/dist/src/utils/variableTools.d.ts +14 -0
  436. package/dist/src/utils/variableTools.d.ts.map +1 -0
  437. package/dist/src/utils/variableTools.js +24 -0
  438. package/dist/src/utils/variableTools.test.js +13 -0
  439. package/dist/src/view/axisGridView.d.ts +39 -0
  440. package/dist/src/view/axisGridView.d.ts.map +1 -0
  441. package/dist/src/view/axisGridView.js +246 -0
  442. package/dist/src/view/axisResolution.d.ts +24 -0
  443. package/dist/src/view/axisResolution.d.ts.map +1 -0
  444. package/dist/src/view/axisResolution.js +141 -0
  445. package/dist/src/view/axisResolution.test.js +201 -0
  446. package/dist/src/view/axisView.d.ts +49 -0
  447. package/dist/src/view/axisView.d.ts.map +1 -0
  448. package/dist/src/view/axisView.js +629 -0
  449. package/dist/src/view/concatView.d.ts +16 -0
  450. package/dist/src/view/concatView.d.ts.map +1 -0
  451. package/dist/src/view/concatView.js +84 -0
  452. package/dist/src/view/containerView.d.ts +43 -0
  453. package/dist/src/view/containerView.d.ts.map +1 -0
  454. package/dist/src/view/containerView.js +137 -0
  455. package/dist/src/view/facetView.d.ts +71 -0
  456. package/dist/src/view/facetView.d.ts.map +1 -0
  457. package/dist/src/view/facetView.js +492 -0
  458. package/dist/src/view/flowBuilder.d.ts +37 -0
  459. package/dist/src/view/flowBuilder.d.ts.map +1 -0
  460. package/dist/src/view/flowBuilder.js +383 -0
  461. package/dist/src/view/flowBuilder.test.js +125 -0
  462. package/dist/src/view/gridView.d.ts +111 -0
  463. package/dist/src/view/gridView.d.ts.map +1 -0
  464. package/dist/src/view/gridView.js +1086 -0
  465. package/dist/src/view/implicitRootView.d.ts +9 -0
  466. package/dist/src/view/implicitRootView.d.ts.map +1 -0
  467. package/dist/src/view/implicitRootView.js +23 -0
  468. package/dist/src/view/importView.d.ts +17 -0
  469. package/dist/src/view/importView.d.ts.map +1 -0
  470. package/dist/src/view/importView.js +22 -0
  471. package/dist/src/view/layerView.d.ts +25 -0
  472. package/dist/src/view/layerView.d.ts.map +1 -0
  473. package/dist/src/view/layerView.js +77 -0
  474. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts +30 -0
  475. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -0
  476. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +175 -0
  477. package/dist/src/view/renderingContext/compositeViewRenderingContext.d.ts +14 -0
  478. package/dist/src/view/renderingContext/compositeViewRenderingContext.d.ts.map +1 -0
  479. package/dist/src/view/renderingContext/compositeViewRenderingContext.js +51 -0
  480. package/dist/src/view/renderingContext/debuggingViewRenderingContext.d.ts +51 -0
  481. package/dist/src/view/renderingContext/debuggingViewRenderingContext.d.ts.map +1 -0
  482. package/dist/src/view/renderingContext/debuggingViewRenderingContext.js +94 -0
  483. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.d.ts +60 -0
  484. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.d.ts.map +1 -0
  485. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.js +128 -0
  486. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts +19 -0
  487. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -0
  488. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +64 -0
  489. package/dist/src/view/renderingContext/svgViewRenderingContext.d.ts +22 -0
  490. package/dist/src/view/renderingContext/svgViewRenderingContext.d.ts.map +1 -0
  491. package/dist/src/view/renderingContext/svgViewRenderingContext.js +125 -0
  492. package/dist/src/view/renderingContext/viewRenderingContext.d.ts +33 -0
  493. package/dist/src/view/renderingContext/viewRenderingContext.d.ts.map +1 -0
  494. package/dist/src/view/renderingContext/viewRenderingContext.js +41 -0
  495. package/dist/src/view/scaleResolution.d.ts +170 -0
  496. package/dist/src/view/scaleResolution.d.ts.map +1 -0
  497. package/dist/src/view/scaleResolution.js +874 -0
  498. package/dist/src/view/scaleResolution.test.js +658 -0
  499. package/dist/src/view/testUtils.d.ts +30 -0
  500. package/dist/src/view/testUtils.d.ts.map +1 -0
  501. package/dist/src/view/testUtils.js +101 -0
  502. package/dist/src/view/title.d.ts +6 -0
  503. package/dist/src/view/title.d.ts.map +1 -0
  504. package/dist/src/view/title.js +165 -0
  505. package/dist/src/view/unitView.d.ts +93 -0
  506. package/dist/src/view/unitView.d.ts.map +1 -0
  507. package/dist/src/view/unitView.js +345 -0
  508. package/dist/src/view/view.d.ts +291 -0
  509. package/dist/src/view/view.d.ts.map +1 -0
  510. package/dist/src/view/view.js +691 -0
  511. package/dist/src/view/view.test.js +214 -0
  512. package/dist/src/view/viewFactory.d.ts +76 -0
  513. package/dist/src/view/viewFactory.d.ts.map +1 -0
  514. package/dist/src/view/viewFactory.js +178 -0
  515. package/dist/src/view/viewFactory.test.js +17 -0
  516. package/dist/src/view/viewUtils.d.ts +90 -0
  517. package/dist/src/view/viewUtils.d.ts.map +1 -0
  518. package/dist/src/view/viewUtils.js +326 -0
  519. package/dist/src/view/zoom.d.ts +23 -0
  520. package/dist/src/view/zoom.d.ts.map +1 -0
  521. package/dist/src/view/zoom.js +89 -0
  522. package/package.json +15 -12
  523. package/dist/style.css +0 -1
@@ -0,0 +1,166 @@
1
+ import { BigWig } from "@gmod/bbi";
2
+ import { RemoteFile } from "generic-filehandle";
3
+
4
+ import { debounce } from "../../../utils/debounce";
5
+ import SingleAxisLazySource from "./singleAxisLazySource";
6
+ import windowedMixin from "./windowedMixin";
7
+ import addBaseUrl from "../../../utils/addBaseUrl";
8
+
9
+ /**
10
+ *
11
+ */
12
+ export default class BigWigSource extends windowedMixin(SingleAxisLazySource) {
13
+ /** @type {number[]} */
14
+ reductionLevels = [];
15
+
16
+ /** Keep track of the order of the requests */
17
+ lastRequestId = 0;
18
+
19
+ /**
20
+ * @param {import("../../../spec/data").BigWigData} params
21
+ * @param {import("../../../view/view").default} view
22
+ */
23
+ constructor(params, view) {
24
+ /** @type {import("../../../spec/data").BigWigData} */
25
+ const paramsWithDefaults = {
26
+ pixelsPerBin: 2,
27
+ channel: "x",
28
+ ...params,
29
+ };
30
+
31
+ super(view, paramsWithDefaults.channel);
32
+
33
+ this.params = paramsWithDefaults;
34
+
35
+ if (!this.params.url) {
36
+ throw new Error("No URL provided for BigWigSource");
37
+ }
38
+
39
+ this.bbi = new BigWig({
40
+ filehandle: new RemoteFile(
41
+ addBaseUrl(this.params.url, this.view.getBaseUrl())
42
+ ),
43
+ });
44
+
45
+ this.doDebouncedRequest = debounce(
46
+ this.doRequest.bind(this),
47
+ 200,
48
+ false
49
+ );
50
+
51
+ this.headerPromise = this.bbi.getHeader();
52
+
53
+ this.headerPromise.then((header) => {
54
+ this.reductionLevels = /** @type {{reductionLevel: number}[]} */ (
55
+ header.zoomLevels
56
+ )
57
+ .map((z) => z.reductionLevel)
58
+ .reverse();
59
+
60
+ // Add the non-reduced level. Not sure if this is the best way to do it.
61
+ // Afaik, the non-reduced bin size is not available in the header.
62
+ this.reductionLevels.push(1);
63
+ });
64
+ }
65
+
66
+ /**
67
+ * Listen to the domain change event and update data when the covered windows change.
68
+ *
69
+ * @param {number[]} domain Linearized domain
70
+ */
71
+ async onDomainChanged(domain) {
72
+ // Header must be available to determine the reduction level
73
+ await this.headerPromise;
74
+
75
+ // TODO: Postpone the initial load until layout is computed and remove 700.
76
+ const length = this.getAxisLength() || 700;
77
+
78
+ const reductionLevel = findReductionLevel(
79
+ domain,
80
+ length,
81
+ this.reductionLevels
82
+ );
83
+
84
+ // The sensible minimum window size actually depends on the non-reduced data density...
85
+ // Using 5000 as a default to avoid too many requests.
86
+ const windowSize = Math.max(reductionLevel * length, 5000);
87
+
88
+ const quantizedInterval = this.quantizeInterval(domain, windowSize);
89
+
90
+ if (this.checkAndUpdateLastInterval(quantizedInterval)) {
91
+ this.doDebouncedRequest(quantizedInterval, reductionLevel);
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Listen to the domain change event and update data when the covered windows change.
97
+ *
98
+ * @param {number[]} interval linearized domain
99
+ * @param {number} reductionLevel
100
+ */
101
+ async doRequest(interval, reductionLevel) {
102
+ const featureResponse = await this.getFeatures(
103
+ interval,
104
+ 1 / 2 / reductionLevel / this.params.pixelsPerBin
105
+ );
106
+
107
+ // Discard late responses
108
+ if (featureResponse.requestId < this.lastRequestId) {
109
+ return;
110
+ }
111
+
112
+ this.publishData(featureResponse.features);
113
+ }
114
+
115
+ /**
116
+ *
117
+ * @param {number[]} interval
118
+ * @param {number} scale
119
+ */
120
+ async getFeatures(interval, scale) {
121
+ let requestId = ++this.lastRequestId;
122
+
123
+ // TODO: Abort previous requests
124
+ const abortController = new AbortController();
125
+
126
+ const discreteChromosomeIntervals =
127
+ this.genome.continuousToDiscreteChromosomeIntervals(interval);
128
+
129
+ // TODO: Error handling
130
+ const featuresWithChrom = await Promise.all(
131
+ discreteChromosomeIntervals.map((d) =>
132
+ this.bbi
133
+ .getFeatures(d.chrom, d.startPos, d.endPos, {
134
+ scale,
135
+ signal: abortController.signal,
136
+ })
137
+ .then((features) =>
138
+ features.map((f) => ({
139
+ chrom: d.chrom,
140
+ start: f.start,
141
+ end: f.end,
142
+ score: f.score,
143
+ }))
144
+ )
145
+ )
146
+ );
147
+
148
+ return {
149
+ requestId,
150
+ abort: () => abortController.abort(),
151
+ features: featuresWithChrom.flat(), // TODO: Use batches, not flat
152
+ };
153
+ }
154
+ }
155
+
156
+ /**
157
+ * @param {number[]} domain
158
+ * @param {number} widthInPixels view width in pixels
159
+ * @param {number[]} reductionLevels
160
+ */
161
+ function findReductionLevel(domain, widthInPixels, reductionLevels) {
162
+ const bpPerPixel = (domain[1] - domain[0]) / widthInPixels;
163
+ return (
164
+ reductionLevels.find((r) => r < bpPerPixel) ?? reductionLevels.at(-1)
165
+ );
166
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @extends {TabixSource<import("@gmod/gff").GFF3Feature>}
3
+ */
4
+ export default class Gff3Source extends TabixSource<import("@gmod/gff").GFF3Feature> {
5
+ constructor(params: import("../../../spec/data").TabixData, view: import("../../../view/view").default);
6
+ }
7
+ import TabixSource from "./tabixSource";
8
+ //# sourceMappingURL=gff3Source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gff3Source.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/gff3Source.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IAaoF,wGAAsrC;CADzwC;wBAjBuB,eAAe"}
@@ -0,0 +1,19 @@
1
+ import gff from "@gmod/gff";
2
+ import TabixSource from "./tabixSource";
3
+
4
+ /**
5
+ * @extends {TabixSource<import("@gmod/gff").GFF3Feature>}
6
+ */
7
+ export default class Gff3Source extends TabixSource {
8
+ /**
9
+ * @param {string[]} lines
10
+ */
11
+ _parseFeatures(lines) {
12
+ // eslint-disable-next-line no-sync
13
+ const features = gff.parseStringSync(lines.join("\n"), {
14
+ parseSequences: false,
15
+ });
16
+
17
+ return features;
18
+ }
19
+ }
@@ -0,0 +1,30 @@
1
+ declare const IndexedFastaSource_base: {
2
+ new (...args: any[]): {
3
+ [x: string]: any;
4
+ lastQuantizedInterval: number[];
5
+ quantizeInterval(interval: number[], windowSize: number): number[];
6
+ checkAndUpdateLastInterval(interval: number[]): boolean;
7
+ };
8
+ } & typeof SingleAxisLazySource;
9
+ /**
10
+ *
11
+ */
12
+ export default class IndexedFastaSource extends IndexedFastaSource_base {
13
+ /**
14
+ * @param {import("../../../spec/data").IndexedFastaData} params
15
+ * @param {import("../../../view/view").default} view
16
+ */
17
+ constructor(params: import("../../../spec/data").IndexedFastaData, view: import("../../../view/view").default);
18
+ params: import("../../../spec/data").IndexedFastaData;
19
+ fasta: IndexedFasta;
20
+ /**
21
+ * Listen to the domain change event and update data when the covered windows change.
22
+ *
23
+ * @param {number[]} domain Linearized domain
24
+ */
25
+ onDomainChanged(domain: number[]): Promise<void>;
26
+ }
27
+ import SingleAxisLazySource from "./singleAxisLazySource";
28
+ import { IndexedFasta } from "@gmod/indexedfasta";
29
+ export {};
30
+ //# sourceMappingURL=indexedFastaSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedFastaSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/indexedFastaSource.js"],"names":[],"mappings":";;;;;;;;AAcA;;GAEG;AACH;IAGI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,gBAAgB,QAC7C,OAAO,oBAAoB,EAAE,OAAO,EAyB9C;IAbG,sDAAgC;IAShC,oBAGE;IAGN;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAgClB;CACJ;iCAjFgC,wBAAwB;6BAH5B,oBAAoB"}
@@ -0,0 +1,86 @@
1
+ import { Buffer } from "buffer";
2
+ import { IndexedFasta } from "@gmod/indexedfasta";
3
+ import { RemoteFile } from "generic-filehandle";
4
+
5
+ import SingleAxisLazySource from "./singleAxisLazySource";
6
+ import windowedMixin from "./windowedMixin";
7
+ import addBaseUrl from "@genome-spy/core/utils/addBaseUrl";
8
+
9
+ // Hack needed by @gmod/indexedfasta
10
+ // TODO: Submit a PR to @gmod/indexedfasta to make this unnecessary
11
+ if (typeof window !== "undefined") {
12
+ window.Buffer = Buffer;
13
+ }
14
+
15
+ /**
16
+ *
17
+ */
18
+ export default class IndexedFastaSource extends windowedMixin(
19
+ SingleAxisLazySource
20
+ ) {
21
+ /**
22
+ * @param {import("../../../spec/data").IndexedFastaData} params
23
+ * @param {import("../../../view/view").default} view
24
+ */
25
+ constructor(params, view) {
26
+ /** @type {import("../../../spec/data").IndexedFastaData} */
27
+ const paramsWithDefaults = {
28
+ channel: "x",
29
+ windowSize: 7000,
30
+ ...params,
31
+ };
32
+
33
+ super(view, paramsWithDefaults.channel);
34
+
35
+ this.params = paramsWithDefaults;
36
+
37
+ if (!this.params.url) {
38
+ throw new Error("No URL provided for IndexedFastaSource");
39
+ }
40
+
41
+ const withBase = (/** @type {string} */ uri) =>
42
+ new RemoteFile(addBaseUrl(uri, this.view.getBaseUrl()));
43
+
44
+ this.fasta = new IndexedFasta({
45
+ fasta: withBase(this.params.url),
46
+ fai: withBase(this.params.indexUrl ?? this.params.url + ".fai"),
47
+ });
48
+ }
49
+
50
+ /**
51
+ * Listen to the domain change event and update data when the covered windows change.
52
+ *
53
+ * @param {number[]} domain Linearized domain
54
+ */
55
+ async onDomainChanged(domain) {
56
+ const windowSize = this.params.windowSize;
57
+
58
+ if (domain[1] - domain[0] > windowSize) {
59
+ return;
60
+ }
61
+
62
+ const quantizedInterval = this.quantizeInterval(domain, windowSize);
63
+
64
+ if (this.checkAndUpdateLastInterval(quantizedInterval)) {
65
+ const discreteChromosomeIntervals =
66
+ this.genome.continuousToDiscreteChromosomeIntervals(
67
+ quantizedInterval
68
+ );
69
+
70
+ // TODO: Error handling
71
+ const sequencesWithChrom = await Promise.all(
72
+ discreteChromosomeIntervals.map((d) =>
73
+ this.fasta
74
+ .getSequence(d.chrom, d.startPos, d.endPos)
75
+ .then((sequence) => ({
76
+ chrom: d.chrom,
77
+ start: d.startPos,
78
+ sequence,
79
+ }))
80
+ )
81
+ );
82
+
83
+ this.publishData(sequencesWithChrom);
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Base class for data sources that listen a domain and propagate data lazily.
3
+ */
4
+ export default class SingleAxisLazySource extends DataSource {
5
+ /**
6
+ * @param {import("../../../view/view").default} view
7
+ * @param {import("../../../spec/channel").PrimaryPositionalChannel} channel
8
+ */
9
+ constructor(view: import("../../../view/view").default, channel: import("../../../spec/channel").PrimaryPositionalChannel);
10
+ view: import("../../../view/view").default;
11
+ /** @type {import("../../../spec/channel").PrimaryPositionalChannel} */
12
+ channel: import("../../../spec/channel").PrimaryPositionalChannel;
13
+ scaleResolution: import("@genome-spy/core/view/scaleResolution").default;
14
+ /**
15
+ * Returns the length of the axis in pixels. Chooses the smallest of the views.
16
+ * They should all be the same, but some exotic configuration might break that assumption.
17
+ */
18
+ getAxisLength(): number;
19
+ /**
20
+ * Convenience getter for genome.
21
+ */
22
+ get genome(): import("../../../genome/genome").default;
23
+ /**
24
+ * Listen to the domain change event and update data when the covered windows change.
25
+ *
26
+ * @param {number[]} domain Linearized domain
27
+ * @param {import("../../../spec/genome").ChromosomalLocus[]} complexDomain Chrom/Pos domain
28
+ */
29
+ onDomainChanged(domain: number[], complexDomain: import("../../../spec/genome").ChromosomalLocus[]): Promise<void>;
30
+ /**
31
+ * TODO: Get rid of this method.
32
+ * Rendering should be requested by the collector.
33
+ */
34
+ requestRender(): void;
35
+ /**
36
+ *
37
+ * @param {import("../../flowNode").Datum[]} data
38
+ */
39
+ publishData(data: import("../../flowNode").Datum[]): void;
40
+ }
41
+ import DataSource from "../dataSource";
42
+ //# sourceMappingURL=singleAxisLazySource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IACI;;;OAGG;IACH,kBAHW,OAAO,oBAAoB,EAAE,OAAO,WACpC,OAAO,uBAAuB,EAAE,wBAAwB,EAiDlE;IA5CG,2CAAgB;IAYhB,wEAAwE;IACxE,SADW,OAAO,uBAAuB,EAAE,wBAAwB,CAC7C;IAEtB,yEAA4D;IA+BhE;;;OAGG;IACH,wBAWC;IAED;;OAEG;IACH,uDAEC;IAED;;;;;OAKG;IACH,wBAHW,MAAM,EAAE,iBACR,OAAO,sBAAsB,EAAE,gBAAgB,EAAE,iBAI3D;IAED;;;OAGG;IACH,sBAGC;IAQD;;;OAGG;IACH,kBAFW,OAAO,gBAAgB,EAAE,KAAK,EAAE,QAe1C;CACJ;uBA/HsB,eAAe"}
@@ -0,0 +1,129 @@
1
+ import UnitView from "@genome-spy/core/view/unitView";
2
+ import DataSource from "../dataSource";
3
+ import { reconfigureScales } from "@genome-spy/core/view/scaleResolution";
4
+
5
+ /**
6
+ * Base class for data sources that listen a domain and propagate data lazily.
7
+ */
8
+ export default class SingleAxisLazySource extends DataSource {
9
+ /**
10
+ * @param {import("../../../view/view").default} view
11
+ * @param {import("../../../spec/channel").PrimaryPositionalChannel} channel
12
+ */
13
+ constructor(view, channel) {
14
+ super();
15
+
16
+ this.view = view;
17
+
18
+ if (!channel) {
19
+ throw new Error(
20
+ `No channel has been specified for the dynamic data source. Must be either "x" or "y".`
21
+ );
22
+ } else if (channel !== "x" && channel !== "y") {
23
+ throw new Error(
24
+ `Invalid channel specified for the dynamic data source: ${channel}. Must be either "x" or "y"`
25
+ );
26
+ }
27
+
28
+ /** @type {import("../../../spec/channel").PrimaryPositionalChannel} */
29
+ this.channel = channel;
30
+
31
+ this.scaleResolution = this.view.getScaleResolution(channel);
32
+ if (!this.scaleResolution) {
33
+ const sentences = [
34
+ `The dynamic data source cannot find a resolved scale for channel "${channel}".`,
35
+ ];
36
+ if (!(this.view instanceof UnitView)) {
37
+ sentences.push(
38
+ `Make sure the view has a "shared" scale resolution as it is not a unit view.`
39
+ );
40
+ }
41
+
42
+ throw new Error(sentences.join(" "));
43
+ }
44
+
45
+ const fireDomainChanged = () => {
46
+ if (this.view.isVisible()) {
47
+ this.onDomainChanged(
48
+ this.scaleResolution.getDomain(),
49
+ /** @type {import("../../../spec/genome").ChromosomalLocus[]} */
50
+ (this.scaleResolution.getComplexDomain())
51
+ );
52
+ }
53
+ };
54
+
55
+ this.scaleResolution.addEventListener("domain", fireDomainChanged);
56
+ this.view.context.addBroadcastListener(
57
+ "layoutComputed",
58
+ fireDomainChanged
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Returns the length of the axis in pixels. Chooses the smallest of the views.
64
+ * They should all be the same, but some exotic configuration might break that assumption.
65
+ */
66
+ getAxisLength() {
67
+ const lengths = this.scaleResolution.members
68
+ .map(
69
+ (m) =>
70
+ m.view.coords?.[this.channel === "x" ? "width" : "height"]
71
+ )
72
+ .filter((len) => len > 0);
73
+
74
+ return lengths.length
75
+ ? lengths.reduce((a, b) => Math.min(a, b), 10000)
76
+ : 0;
77
+ }
78
+
79
+ /**
80
+ * Convenience getter for genome.
81
+ */
82
+ get genome() {
83
+ return this.scaleResolution.getGenome();
84
+ }
85
+
86
+ /**
87
+ * Listen to the domain change event and update data when the covered windows change.
88
+ *
89
+ * @param {number[]} domain Linearized domain
90
+ * @param {import("../../../spec/genome").ChromosomalLocus[]} complexDomain Chrom/Pos domain
91
+ */
92
+ async onDomainChanged(domain, complexDomain) {
93
+ // Override me
94
+ }
95
+
96
+ /**
97
+ * TODO: Get rid of this method.
98
+ * Rendering should be requested by the collector.
99
+ */
100
+ requestRender() {
101
+ // An awfully hacky way.
102
+ this.view.context.animator.requestRender();
103
+ }
104
+
105
+ async load() {
106
+ // Dummy initialization cycle. TODO: Figure out why this is needed.
107
+ this.reset();
108
+ this.complete();
109
+ }
110
+
111
+ /**
112
+ *
113
+ * @param {import("../../flowNode").Datum[]} data
114
+ */
115
+ publishData(data) {
116
+ this.reset();
117
+ this.beginBatch({ type: "file" });
118
+
119
+ for (const d of data) {
120
+ this._propagate(d);
121
+ }
122
+
123
+ this.complete();
124
+
125
+ reconfigureScales(this.view);
126
+
127
+ this.requestRender();
128
+ }
129
+ }
@@ -0,0 +1,54 @@
1
+ declare const TabixSource_base: {
2
+ new (...args: any[]): {
3
+ [x: string]: any;
4
+ lastQuantizedInterval: number[];
5
+ quantizeInterval(interval: number[], windowSize: number): number[];
6
+ checkAndUpdateLastInterval(interval: number[]): boolean;
7
+ };
8
+ } & typeof SingleAxisLazySource;
9
+ /**
10
+ * @template T
11
+ */
12
+ export default class TabixSource<T> extends TabixSource_base {
13
+ /**
14
+ * @param {import("../../../spec/data").TabixData} params
15
+ * @param {import("../../../view/view").default} view
16
+ */
17
+ constructor(params: import("../../../spec/data").TabixData, view: import("../../../view/view").default);
18
+ /** Keep track of the order of the requests */
19
+ lastRequestId: number;
20
+ /** @type {TabixIndexedFile} */
21
+ tbiIndex: TabixIndexedFile;
22
+ params: import("../../../spec/data").TabixData;
23
+ /**
24
+ * Listen to the domain change event and update data when the covered windows change.
25
+ *
26
+ * @param {number[]} domain Linearized domain
27
+ */
28
+ onDomainChanged(domain: number[]): Promise<void>;
29
+ /**
30
+ * Listen to the domain change event and update data when the covered windows change.
31
+ *
32
+ * @param {number[]} interval linearized domain
33
+ */
34
+ doRequest(interval: number[]): Promise<void>;
35
+ /**
36
+ *
37
+ * @param {number[]} interval
38
+ */
39
+ getFeatures(interval: number[]): Promise<{
40
+ requestId: number;
41
+ abort: () => void;
42
+ features: T[];
43
+ }>;
44
+ /**
45
+ * @abstract
46
+ * @param {string[]} lines
47
+ * @returns {T[]}
48
+ */
49
+ _parseFeatures(lines: string[]): T[];
50
+ }
51
+ import SingleAxisLazySource from "./singleAxisLazySource";
52
+ import { TabixIndexedFile } from "@gmod/tabix";
53
+ export {};
54
+ //# sourceMappingURL=tabixSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabixSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/tabixSource.js"],"names":[],"mappings":";;;;;;;;AAQA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,SAAS,QACtC,OAAO,oBAAoB,EAAE,OAAO,EAoC9C;IA5CD,8CAA8C;IAC9C,sBAAkB;IAElB,+BAA+B;IAC/B,UADW,gBAAgB,CAClB;IAiBL,+CAAgC;IAyBpC;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAclB;IAED;;;;OAIG;IACH,oBAFW,MAAM,EAAE,iBAWlB;IAED;;;OAGG;IACH,sBAFW,MAAM,EAAE;;;;OAkClB;IAED;;;;OAIG;IACH,sBAHW,MAAM,EAAE,GACN,CAAC,EAAE,CAIf;CACJ;iCAxIgC,wBAAwB;iCAFxB,aAAa"}