@genome-spy/core 0.72.0 → 0.74.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 (396) hide show
  1. package/LICENSE +1 -1
  2. package/dist/bundle/AbortablePromiseCache-3gHJdF3E.js +96 -0
  3. package/dist/bundle/browser-BTgw5ieH.js +126 -0
  4. package/dist/bundle/chunk-DmhlhrBa.js +11 -0
  5. package/dist/bundle/esm-BDFRLEuD.js +1248 -0
  6. package/dist/bundle/esm-BygJiwh0.js +573 -0
  7. package/dist/bundle/esm-CGX-qz1d.js +155 -0
  8. package/dist/bundle/esm-CgfVIRJ-.js +121 -0
  9. package/dist/bundle/esm-CuMSzCHy.js +298 -0
  10. package/dist/bundle/esm-DMXpJXM4.js +369 -0
  11. package/dist/bundle/esm-DQiq2Zhd.js +1426 -0
  12. package/dist/bundle/esm-DtE8VqAv.js +1015 -0
  13. package/dist/bundle/esm-sIoQYZ21.js +461 -0
  14. package/dist/bundle/index.es.js +21078 -24556
  15. package/dist/bundle/index.js +379 -383
  16. package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
  17. package/dist/schema.json +13349 -7082
  18. package/dist/src/config/axisConfig.d.ts +16 -0
  19. package/dist/src/config/axisConfig.d.ts.map +1 -0
  20. package/dist/src/config/axisConfig.js +84 -0
  21. package/dist/src/config/defaultConfig.d.ts +3 -0
  22. package/dist/src/config/defaultConfig.d.ts.map +1 -0
  23. package/dist/src/config/defaultConfig.js +38 -0
  24. package/dist/src/config/defaults/axisDefaults.d.ts +5 -0
  25. package/dist/src/config/defaults/axisDefaults.d.ts.map +1 -0
  26. package/dist/src/config/defaults/axisDefaults.js +72 -0
  27. package/dist/src/config/defaults/markDefaults.d.ts +15 -0
  28. package/dist/src/config/defaults/markDefaults.d.ts.map +1 -0
  29. package/dist/src/config/defaults/markDefaults.js +121 -0
  30. package/dist/src/config/defaults/scaleDefaults.d.ts +5 -0
  31. package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -0
  32. package/dist/src/config/defaults/scaleDefaults.js +18 -0
  33. package/dist/src/config/defaults/titleDefaults.d.ts +5 -0
  34. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -0
  35. package/dist/src/config/defaults/titleDefaults.js +47 -0
  36. package/dist/src/config/defaults/viewDefaults.d.ts +3 -0
  37. package/dist/src/config/defaults/viewDefaults.d.ts.map +1 -0
  38. package/dist/src/config/defaults/viewDefaults.js +2 -0
  39. package/dist/src/config/markConfig.d.ts +8 -0
  40. package/dist/src/config/markConfig.d.ts.map +1 -0
  41. package/dist/src/config/markConfig.js +27 -0
  42. package/dist/src/config/mergeConfig.d.ts +8 -0
  43. package/dist/src/config/mergeConfig.d.ts.map +1 -0
  44. package/dist/src/config/mergeConfig.js +81 -0
  45. package/dist/src/config/resolveConfig.d.ts +22 -0
  46. package/dist/src/config/resolveConfig.d.ts.map +1 -0
  47. package/dist/src/config/resolveConfig.js +32 -0
  48. package/dist/src/config/scaleConfig.d.ts +40 -0
  49. package/dist/src/config/scaleConfig.d.ts.map +1 -0
  50. package/dist/src/config/scaleConfig.js +220 -0
  51. package/dist/src/config/styleUtils.d.ts +6 -0
  52. package/dist/src/config/styleUtils.d.ts.map +1 -0
  53. package/dist/src/config/styleUtils.js +10 -0
  54. package/dist/src/config/themes.d.ts +15 -0
  55. package/dist/src/config/themes.d.ts.map +1 -0
  56. package/dist/src/config/themes.js +293 -0
  57. package/dist/src/config/titleConfig.d.ts +12 -0
  58. package/dist/src/config/titleConfig.d.ts.map +1 -0
  59. package/dist/src/config/titleConfig.js +42 -0
  60. package/dist/src/config/viewConfig.d.ts +7 -0
  61. package/dist/src/config/viewConfig.d.ts.map +1 -0
  62. package/dist/src/config/viewConfig.js +29 -0
  63. package/dist/src/data/flowNode.d.ts +22 -1
  64. package/dist/src/data/flowNode.d.ts.map +1 -1
  65. package/dist/src/data/flowNode.js +37 -1
  66. package/dist/src/data/formats/bed.d.ts +8 -0
  67. package/dist/src/data/formats/bed.d.ts.map +1 -0
  68. package/dist/src/data/formats/bed.js +58 -0
  69. package/dist/src/data/formats/bedpe.d.ts +8 -0
  70. package/dist/src/data/formats/bedpe.d.ts.map +1 -0
  71. package/dist/src/data/formats/bedpe.js +164 -0
  72. package/dist/src/data/formats/fasta.d.ts.map +1 -1
  73. package/dist/src/data/formats/fasta.js +4 -0
  74. package/dist/src/data/formats/parquet.d.ts.map +1 -1
  75. package/dist/src/data/formats/parquet.js +4 -0
  76. package/dist/src/data/sources/dataSourceFactory.d.ts +2 -13
  77. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
  78. package/dist/src/data/sources/dataSourceFactory.js +5 -141
  79. package/dist/src/data/sources/dataUtils.d.ts +16 -0
  80. package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
  81. package/dist/src/data/sources/dataUtils.js +53 -3
  82. package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
  83. package/dist/src/data/sources/lazy/axisGenomeSource.js +11 -0
  84. package/dist/src/data/sources/lazy/axisTickSource.d.ts +1 -1
  85. package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
  86. package/dist/src/data/sources/lazy/axisTickSource.js +19 -8
  87. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  88. package/dist/src/data/sources/lazy/bamSource.js +11 -0
  89. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  90. package/dist/src/data/sources/lazy/bigBedSource.js +12 -1
  91. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  92. package/dist/src/data/sources/lazy/bigWigSource.js +11 -0
  93. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  94. package/dist/src/data/sources/lazy/gff3Source.js +12 -1
  95. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  96. package/dist/src/data/sources/lazy/indexedFastaSource.js +11 -0
  97. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts +27 -0
  98. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts.map +1 -0
  99. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.js +65 -0
  100. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts +2 -0
  101. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts.map +1 -0
  102. package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +8 -0
  103. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  104. package/dist/src/data/sources/lazy/singleAxisLazySource.js +11 -2
  105. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  106. package/dist/src/data/sources/lazy/vcfSource.js +11 -0
  107. package/dist/src/data/sources/urlSource.d.ts +4 -0
  108. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  109. package/dist/src/data/sources/urlSource.js +138 -16
  110. package/dist/src/data/transforms/aggregate.d.ts +1 -0
  111. package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
  112. package/dist/src/data/transforms/aggregate.js +30 -8
  113. package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -1
  114. package/dist/src/data/transforms/aggregateOps.js +12 -1
  115. package/dist/src/data/transforms/coverage.js +2 -2
  116. package/dist/src/data/transforms/filter.js +1 -1
  117. package/dist/src/data/transforms/filterScoredLabels.d.ts +6 -0
  118. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  119. package/dist/src/data/transforms/filterScoredLabels.js +9 -0
  120. package/dist/src/data/transforms/measureText.d.ts +1 -0
  121. package/dist/src/data/transforms/measureText.d.ts.map +1 -1
  122. package/dist/src/data/transforms/measureText.js +14 -5
  123. package/dist/src/data/transforms/pileup.d.ts.map +1 -1
  124. package/dist/src/data/transforms/pileup.js +1 -2
  125. package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
  126. package/dist/src/data/transforms/regexFold.js +0 -1
  127. package/dist/src/embedFactory.d.ts +13 -0
  128. package/dist/src/embedFactory.d.ts.map +1 -0
  129. package/dist/src/embedFactory.js +127 -0
  130. package/dist/src/encoder/accessor.d.ts +3 -12
  131. package/dist/src/encoder/accessor.d.ts.map +1 -1
  132. package/dist/src/encoder/accessor.js +10 -65
  133. package/dist/src/encoder/encoder.d.ts +51 -8
  134. package/dist/src/encoder/encoder.d.ts.map +1 -1
  135. package/dist/src/encoder/encoder.js +179 -55
  136. package/dist/src/fonts/bmFontManager.js +1 -1
  137. package/dist/src/full.d.ts +2 -0
  138. package/dist/src/full.d.ts.map +1 -0
  139. package/dist/src/full.js +2 -0
  140. package/dist/src/genome/assemblyPreflight.d.ts +31 -0
  141. package/dist/src/genome/assemblyPreflight.d.ts.map +1 -0
  142. package/dist/src/genome/assemblyPreflight.js +99 -0
  143. package/dist/src/genome/genome.d.ts +10 -2
  144. package/dist/src/genome/genome.d.ts.map +1 -1
  145. package/dist/src/genome/genome.js +20 -2
  146. package/dist/src/genome/genomeStore.d.ts +34 -3
  147. package/dist/src/genome/genomeStore.d.ts.map +1 -1
  148. package/dist/src/genome/genomeStore.js +409 -18
  149. package/dist/src/genome/rootGenomeConfig.d.ts +26 -0
  150. package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -0
  151. package/dist/src/genome/rootGenomeConfig.js +98 -0
  152. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  153. package/dist/src/genome/scaleLocus.js +26 -7
  154. package/dist/src/genomeSpy/cursorManager.d.ts +69 -0
  155. package/dist/src/genomeSpy/cursorManager.d.ts.map +1 -0
  156. package/dist/src/genomeSpy/cursorManager.js +131 -0
  157. package/dist/src/genomeSpy/headlessBootstrap.d.ts +113 -0
  158. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -0
  159. package/dist/src/genomeSpy/headlessBootstrap.js +246 -0
  160. package/dist/src/genomeSpy/interactionController.d.ts +10 -1
  161. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  162. package/dist/src/genomeSpy/interactionController.js +448 -40
  163. package/dist/src/genomeSpy/interactionDispatcher.d.ts +50 -0
  164. package/dist/src/genomeSpy/interactionDispatcher.d.ts.map +1 -0
  165. package/dist/src/genomeSpy/interactionDispatcher.js +203 -0
  166. package/dist/src/genomeSpy/renderCoordinator.js +1 -1
  167. package/dist/src/genomeSpy/viewContextFactory.d.ts +4 -2
  168. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
  169. package/dist/src/genomeSpy/viewContextFactory.js +12 -4
  170. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  171. package/dist/src/genomeSpy/viewDataInit.js +7 -3
  172. package/dist/src/genomeSpy.d.ts +1 -114
  173. package/dist/src/genomeSpy.d.ts.map +1 -1
  174. package/dist/src/genomeSpy.js +7 -614
  175. package/dist/src/genomeSpyBase.d.ts +133 -0
  176. package/dist/src/genomeSpyBase.d.ts.map +1 -0
  177. package/dist/src/genomeSpyBase.js +719 -0
  178. package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
  179. package/dist/src/gl/arrayBuilder.js +0 -3
  180. package/dist/src/gl/canvasSizeHelper.d.ts +74 -0
  181. package/dist/src/gl/canvasSizeHelper.d.ts.map +1 -0
  182. package/dist/src/gl/canvasSizeHelper.js +203 -0
  183. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  184. package/dist/src/gl/colorUtils.js +3 -0
  185. package/dist/src/gl/dataToVertices.d.ts.map +1 -1
  186. package/dist/src/gl/dataToVertices.js +13 -8
  187. package/dist/src/gl/glslScaleGenerator.d.ts +2 -2
  188. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  189. package/dist/src/gl/glslScaleGenerator.js +5 -7
  190. package/dist/src/gl/webGLHelper.d.ts +25 -11
  191. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  192. package/dist/src/gl/webGLHelper.js +59 -33
  193. package/dist/src/index.d.ts +3 -9
  194. package/dist/src/index.d.ts.map +1 -1
  195. package/dist/src/index.js +5 -111
  196. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +4462 -0
  197. package/dist/src/marks/link.d.ts.map +1 -1
  198. package/dist/src/marks/link.js +5 -26
  199. package/dist/src/marks/mark.d.ts +8 -1
  200. package/dist/src/marks/mark.d.ts.map +1 -1
  201. package/dist/src/marks/mark.js +67 -21
  202. package/dist/src/marks/markUtils.d.ts +18 -1
  203. package/dist/src/marks/markUtils.d.ts.map +1 -1
  204. package/dist/src/marks/markUtils.js +52 -4
  205. package/dist/src/marks/point.d.ts.map +1 -1
  206. package/dist/src/marks/point.js +6 -26
  207. package/dist/src/marks/rect.d.ts.map +1 -1
  208. package/dist/src/marks/rect.js +13 -21
  209. package/dist/src/marks/rule.d.ts +7 -2
  210. package/dist/src/marks/rule.d.ts.map +1 -1
  211. package/dist/src/marks/rule.js +125 -16
  212. package/dist/src/marks/text.d.ts.map +1 -1
  213. package/dist/src/marks/text.js +5 -47
  214. package/dist/src/minimal.d.ts +8 -0
  215. package/dist/src/minimal.d.ts.map +1 -0
  216. package/dist/src/minimal.js +21 -0
  217. package/dist/src/paramRuntime/viewParamRuntime.d.ts +19 -0
  218. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  219. package/dist/src/paramRuntime/viewParamRuntime.js +35 -0
  220. package/dist/src/scale/scale.d.ts.map +1 -1
  221. package/dist/src/scale/scale.js +13 -7
  222. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  223. package/dist/src/scales/axisResolution.js +9 -5
  224. package/dist/src/scales/domainPlanner.d.ts +58 -7
  225. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  226. package/dist/src/scales/domainPlanner.js +395 -40
  227. package/dist/src/scales/indexLikeDomainUtils.d.ts +29 -0
  228. package/dist/src/scales/indexLikeDomainUtils.d.ts.map +1 -0
  229. package/dist/src/scales/indexLikeDomainUtils.js +67 -0
  230. package/dist/src/scales/resolutionMemberOrder.d.ts +15 -0
  231. package/dist/src/scales/resolutionMemberOrder.d.ts.map +1 -0
  232. package/dist/src/scales/resolutionMemberOrder.js +22 -0
  233. package/dist/src/scales/scaleInstanceManager.d.ts +2 -1
  234. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
  235. package/dist/src/scales/scaleInstanceManager.js +10 -11
  236. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
  237. package/dist/src/scales/scaleInteractionController.js +59 -18
  238. package/dist/src/scales/scalePropsResolver.d.ts +3 -1
  239. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  240. package/dist/src/scales/scalePropsResolver.js +83 -6
  241. package/dist/src/scales/scaleResolution.d.ts +39 -0
  242. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  243. package/dist/src/scales/scaleResolution.js +504 -82
  244. package/dist/src/scales/scaleResolutionTestUtils.d.ts +21 -0
  245. package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -0
  246. package/dist/src/scales/scaleResolutionTestUtils.js +37 -0
  247. package/dist/src/scales/scaleRules.d.ts.map +1 -1
  248. package/dist/src/scales/scaleRules.js +16 -2
  249. package/dist/src/scales/selectionDomainUtils.d.ts +52 -0
  250. package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -0
  251. package/dist/src/scales/selectionDomainUtils.js +194 -0
  252. package/dist/src/scales/zoomDomainUtils.d.ts +18 -0
  253. package/dist/src/scales/zoomDomainUtils.d.ts.map +1 -0
  254. package/dist/src/scales/zoomDomainUtils.js +69 -0
  255. package/dist/src/screenshotHarness.d.ts +16 -0
  256. package/dist/src/screenshotHarness.d.ts.map +1 -0
  257. package/dist/src/screenshotHarness.js +241 -0
  258. package/dist/src/singlePageApp.js +1 -1
  259. package/dist/src/spec/axis.d.ts +41 -30
  260. package/dist/src/spec/channel.d.ts +15 -9
  261. package/dist/src/spec/config.d.ts +264 -0
  262. package/dist/src/spec/data.d.ts +30 -3
  263. package/dist/src/spec/decoration.d.ts +51 -0
  264. package/dist/src/spec/exampleFiles.d.ts +12 -0
  265. package/dist/src/spec/exampleFiles.d.ts.map +1 -0
  266. package/dist/src/spec/exampleFiles.js +52 -0
  267. package/dist/src/spec/font.d.ts +1 -1
  268. package/dist/src/spec/genome.d.ts +22 -2
  269. package/dist/src/spec/mark.d.ts +97 -13
  270. package/dist/src/spec/parameter.d.ts +62 -5
  271. package/dist/src/spec/root.d.ts +34 -1
  272. package/dist/src/spec/scale.d.ts +46 -5
  273. package/dist/src/spec/title.d.ts +13 -2
  274. package/dist/src/spec/tooltip.d.ts +1 -1
  275. package/dist/src/spec/transform.d.ts +39 -4
  276. package/dist/src/spec/view.d.ts +67 -19
  277. package/dist/src/styles/genome-spy.css +63 -55
  278. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  279. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  280. package/dist/src/styles/genome-spy.css.js +31 -22
  281. package/dist/src/testSetup.d.ts +2 -0
  282. package/dist/src/testSetup.d.ts.map +1 -0
  283. package/dist/src/testSetup.js +5 -0
  284. package/dist/src/tooltip/dataTooltipHandler.js +66 -11
  285. package/dist/src/tooltip/tooltipContext.d.ts.map +1 -1
  286. package/dist/src/tooltip/tooltipContext.js +3 -2
  287. package/dist/src/types/embedApi.d.ts +26 -0
  288. package/dist/src/types/encoder.d.ts +17 -15
  289. package/dist/src/types/scaleResolutionApi.d.ts +20 -0
  290. package/dist/src/types/viewContext.d.ts +23 -1
  291. package/dist/src/utils/expression.d.ts +2 -2
  292. package/dist/src/utils/expression.d.ts.map +1 -1
  293. package/dist/src/utils/expression.js +63 -8
  294. package/dist/src/utils/field.d.ts.map +1 -1
  295. package/dist/src/utils/field.js +0 -1
  296. package/dist/src/utils/inertia.d.ts.map +1 -1
  297. package/dist/src/utils/inertia.js +0 -1
  298. package/dist/src/utils/inferSpecBaseUrl.d.ts +14 -0
  299. package/dist/src/utils/inferSpecBaseUrl.d.ts.map +1 -0
  300. package/dist/src/utils/inferSpecBaseUrl.js +73 -0
  301. package/dist/src/utils/inputBinding.d.ts +1 -1
  302. package/dist/src/utils/interaction.d.ts +109 -0
  303. package/dist/src/utils/interaction.d.ts.map +1 -0
  304. package/dist/src/utils/interaction.js +200 -0
  305. package/dist/src/utils/interactionEvent.d.ts +62 -33
  306. package/dist/src/utils/interactionEvent.d.ts.map +1 -1
  307. package/dist/src/utils/interactionEvent.js +86 -48
  308. package/dist/src/utils/kWayMerge.js +1 -1
  309. package/dist/src/utils/mergeObjects.d.ts.map +1 -1
  310. package/dist/src/utils/mergeObjects.js +0 -2
  311. package/dist/src/utils/radixSort.d.ts.map +1 -1
  312. package/dist/src/utils/radixSort.js +0 -2
  313. package/dist/src/utils/throttle.d.ts.map +1 -1
  314. package/dist/src/utils/throttle.js +0 -2
  315. package/dist/src/utils/ui/tooltip.d.ts +1 -0
  316. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  317. package/dist/src/utils/ui/tooltip.js +1 -0
  318. package/dist/src/utils/url.js +1 -1
  319. package/dist/src/view/axisGridView.d.ts +1 -1
  320. package/dist/src/view/axisGridView.d.ts.map +1 -1
  321. package/dist/src/view/axisGridView.js +2 -47
  322. package/dist/src/view/axisView.d.ts +2 -3
  323. package/dist/src/view/axisView.d.ts.map +1 -1
  324. package/dist/src/view/axisView.js +251 -106
  325. package/dist/src/view/concatView.d.ts +2 -1
  326. package/dist/src/view/concatView.d.ts.map +1 -1
  327. package/dist/src/view/concatView.js +4 -2
  328. package/dist/src/view/containerMutationHelper.d.ts +3 -0
  329. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  330. package/dist/src/view/containerMutationHelper.js +12 -1
  331. package/dist/src/view/dataReadiness.d.ts +2 -2
  332. package/dist/src/view/dataReadiness.d.ts.map +1 -1
  333. package/dist/src/view/dataReadiness.js +63 -58
  334. package/dist/src/view/facetView.d.ts +1 -1
  335. package/dist/src/view/facetView.js +4 -4
  336. package/dist/src/view/flowBuilder.js +2 -2
  337. package/dist/src/view/gridView/gridChild.d.ts +13 -0
  338. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  339. package/dist/src/view/gridView/gridChild.js +247 -49
  340. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  341. package/dist/src/view/gridView/gridView.js +296 -99
  342. package/dist/src/view/gridView/keyboardZoomController.d.ts +2 -2
  343. package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -1
  344. package/dist/src/view/gridView/keyboardZoomController.js +1 -1
  345. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  346. package/dist/src/view/gridView/scrollbar.js +4 -2
  347. package/dist/src/view/gridView/selectionRect.d.ts +4 -0
  348. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  349. package/dist/src/view/gridView/selectionRect.js +20 -1
  350. package/dist/src/view/gridView/separatorView.d.ts +1 -0
  351. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  352. package/dist/src/view/gridView/separatorView.js +9 -0
  353. package/dist/src/view/interactionRouting.d.ts +20 -0
  354. package/dist/src/view/interactionRouting.d.ts.map +1 -0
  355. package/dist/src/view/interactionRouting.js +53 -0
  356. package/dist/src/view/layerView.d.ts.map +1 -1
  357. package/dist/src/view/layerView.js +12 -9
  358. package/dist/src/view/layout/grid.js +1 -1
  359. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  360. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +0 -2
  361. package/dist/src/view/testUtils.d.ts +17 -3
  362. package/dist/src/view/testUtils.d.ts.map +1 -1
  363. package/dist/src/view/testUtils.js +62 -69
  364. package/dist/src/view/title.d.ts +8 -1
  365. package/dist/src/view/title.d.ts.map +1 -1
  366. package/dist/src/view/title.js +66 -76
  367. package/dist/src/view/unitView.d.ts +1 -1
  368. package/dist/src/view/unitView.d.ts.map +1 -1
  369. package/dist/src/view/unitView.js +67 -17
  370. package/dist/src/view/view.d.ts +76 -30
  371. package/dist/src/view/view.d.ts.map +1 -1
  372. package/dist/src/view/view.js +136 -47
  373. package/dist/src/view/viewFactory.d.ts +11 -3
  374. package/dist/src/view/viewFactory.d.ts.map +1 -1
  375. package/dist/src/view/viewFactory.js +37 -11
  376. package/dist/src/view/viewUtils.d.ts.map +1 -1
  377. package/dist/src/view/viewUtils.js +41 -5
  378. package/dist/src/view/zoom.d.ts +15 -3
  379. package/dist/src/view/zoom.d.ts.map +1 -1
  380. package/dist/src/view/zoom.js +375 -80
  381. package/package.json +20 -10
  382. package/dist/bundle/AbortablePromiseCache-Dj0vzLnp.js +0 -149
  383. package/dist/bundle/browser-0iNU5Wit.js +0 -138
  384. package/dist/bundle/index-BYsZN7b0.js +0 -1597
  385. package/dist/bundle/index-C3kClAEN.js +0 -1771
  386. package/dist/bundle/index-C7wOh6y1.js +0 -657
  387. package/dist/bundle/index-CRaQAuki.js +0 -326
  388. package/dist/bundle/index-D9v1PCj9.js +0 -507
  389. package/dist/bundle/index-GDOuv_D5.js +0 -266
  390. package/dist/bundle/index-Gt44EOIH.js +0 -628
  391. package/dist/bundle/inflate-GtwLkvSP.js +0 -1048
  392. package/dist/bundle/parquetRead-BnAGCa4_.js +0 -1663
  393. package/dist/bundle/unzip-Bac01w6X.js +0 -1492
  394. package/dist/src/config/scaleDefaults.d.ts +0 -8
  395. package/dist/src/config/scaleDefaults.d.ts.map +0 -1
  396. package/dist/src/config/scaleDefaults.js +0 -45
@@ -0,0 +1,42 @@
1
+ import { mergeConfigScopes } from "./mergeConfig.js";
2
+ import { normalizeStyle } from "./styleUtils.js";
3
+
4
+ /**
5
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} scopes
6
+ * @returns {import("../spec/config.js").TitleConfig}
7
+ */
8
+ export function getConfiguredTitleConfig(scopes) {
9
+ return /** @type {import("../spec/config.js").TitleConfig} */ (
10
+ mergeConfigScopes(
11
+ scopes.map(
12
+ (scope) =>
13
+ /** @type {Record<string, any> | undefined} */ (scope.title)
14
+ )
15
+ )
16
+ );
17
+ }
18
+
19
+ /**
20
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} scopes
21
+ * @param {string | string[]} [styleName]
22
+ * @returns {import("../spec/config.js").StyleConfig}
23
+ */
24
+ export function getConfiguredStyleConfig(scopes, styleName) {
25
+ const styles = normalizeStyle(styleName);
26
+ if (styles.length == 0) {
27
+ return {};
28
+ }
29
+
30
+ return /** @type {import("../spec/config.js").StyleConfig} */ (
31
+ mergeConfigScopes(
32
+ scopes.flatMap((scope) =>
33
+ styles.map(
34
+ (name) =>
35
+ /** @type {Record<string, any> | undefined} */ (
36
+ scope.style?.[name]
37
+ )
38
+ )
39
+ )
40
+ )
41
+ );
42
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} scopes
3
+ * @param {import("../spec/view.js").ViewBackground} [explicitViewBackground]
4
+ * @returns {import("../spec/view.js").ViewBackground}
5
+ */
6
+ export function getConfiguredViewBackground(scopes: import("../spec/config.js").GenomeSpyConfig[], explicitViewBackground?: import("../spec/view.js").ViewBackground): import("../spec/view.js").ViewBackground;
7
+ //# sourceMappingURL=viewConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewConfig.d.ts","sourceRoot":"","sources":["../../../src/config/viewConfig.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,oDAJW,OAAO,mBAAmB,EAAE,eAAe,EAAE,2BAC7C,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,cAAc,CAsBpD"}
@@ -0,0 +1,29 @@
1
+ import { mergeConfigScopes } from "./mergeConfig.js";
2
+ import { normalizeStyle } from "./styleUtils.js";
3
+
4
+ /**
5
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} scopes
6
+ * @param {import("../spec/view.js").ViewBackground} [explicitViewBackground]
7
+ * @returns {import("../spec/view.js").ViewBackground}
8
+ */
9
+ export function getConfiguredViewBackground(scopes, explicitViewBackground) {
10
+ // Mirrors Vega-Lite behavior: view backgrounds use the implicit "cell"
11
+ // style, and explicit view.style entries augment it.
12
+ const styles = ["cell", ...normalizeStyle(explicitViewBackground?.style)];
13
+
14
+ return /** @type {import("../spec/view.js").ViewBackground} */ (
15
+ mergeConfigScopes(
16
+ scopes
17
+ .flatMap((scope) => [
18
+ /** @type {Record<string, any> | undefined} */ (scope.view),
19
+ ...styles.map(
20
+ (styleName) =>
21
+ /** @type {Record<string, any> | undefined} */ (
22
+ scope.style?.[styleName]
23
+ )
24
+ ),
25
+ ])
26
+ .concat([explicitViewBackground])
27
+ )
28
+ );
29
+ }
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Walks upstream from a flow node and collects scale channels whose current
3
+ * domain affects the produced data. Downstream encodings on these channels
4
+ * must not re-register as domain contributors or they will invalidate the
5
+ * domain that they themselves depend on.
6
+ *
7
+ * @param {FlowNode | undefined} node
8
+ * @returns {Set<import("../spec/channel.js").ChannelWithScale>}
9
+ */
10
+ export function collectDomainSensitiveScaleChannels(node: FlowNode | undefined): Set<import("../spec/channel.js").ChannelWithScale>;
1
11
  /**
2
12
  * @param {import("../types/flowBatch.js").FlowBatch} flowBatch
3
13
  * @returns {flowBatch is import("../types/flowBatch.js").FileBatch}
@@ -24,7 +34,9 @@ export const BEHAVIOR_MODIFIES: number;
24
34
  */
25
35
  export const BEHAVIOR_COLLECTS: number;
26
36
  /**
27
- * @typedef {{paramRuntime?: import("../paramRuntime/viewParamRuntime.js").default}} ParamRuntimeProvider
37
+ * @typedef {object} ParamRuntimeProvider
38
+ * @prop {import("../paramRuntime/viewParamRuntime.js").default} [paramRuntime]
39
+ * @prop {import("../types/viewContext.js").default} [context]
28
40
  */
29
41
  /**
30
42
  * This is heavily inspired by Vega's and Vega-Lite's data flow system.
@@ -49,6 +61,14 @@ export default class FlowNode {
49
61
  */
50
62
  paramRuntimeProvider: ParamRuntimeProvider;
51
63
  get behavior(): number;
64
+ /**
65
+ * Scale channels whose current domain affects this node's output.
66
+ * Downstream views must not feed these channels back into shared-domain
67
+ * resolution or domain-dependent flows can invalidate themselves.
68
+ *
69
+ * @returns {import("../spec/channel.js").ChannelWithScale[]}
70
+ */
71
+ get domainSensitiveScaleChannels(): import("../spec/channel.js").ChannelWithScale[];
52
72
  /**
53
73
  * A human-readable label for the node. Used for debugging and logging.
54
74
  *
@@ -173,6 +193,7 @@ export default class FlowNode {
173
193
  }
174
194
  export type ParamRuntimeProvider = {
175
195
  paramRuntime?: import("../paramRuntime/viewParamRuntime.js").default;
196
+ context?: import("../types/viewContext.js").default;
176
197
  };
177
198
  /**
178
199
  * This is heavily inspired by Vega's and Vega-Lite's data flow system.
@@ -1 +1 @@
1
- {"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.js"],"names":[],"mappings":"AA8YA;;;GAGG;AACH,uCAHW,OAAO,uBAAuB,EAAE,SAAS,GACvC,SAAS,IAAI,OAAO,uBAAuB,EAAE,SAAS,CAIlE;AAED;;;GAGG;AACH,wCAHW,OAAO,uBAAuB,EAAE,SAAS,GACvC,SAAS,IAAI,OAAO,uBAAuB,EAAE,UAAU,CAInE;AA1ZD;;;GAGG;AACH,qCAAsC;AAEtC;;;GAGG;AACH,uCAAwC;AAExC;;;GAGG;AACH,uCAAwC;AAExC;;GAEG;AAEH;;;;;GAKG;AACH;IAoCI;;OAEG;IACH,mCAFW,oBAAoB,EAa9B;IAjDD;;QAEI,oBAAoB;eAAT,KAAK;MAElB;IAWF;;;;OAIG;IACH,sBAFU,oBAAoB,CAEF;IAE5B,uBAEC;IAED;;;;OAIG;IACH,aAFa,MAAM,CAIlB;IAQG,yBAAyB;IACzB,UADW,QAAQ,EAAE,CACH;IAElB,uBAAuB;IACvB,QADW,QAAQ,CACI;IAEvB,2CAA2C;IAC3C,mBAAsB;IAG1B,wBAEC;IAED;;;OAGG;IACH,cASC;IAED;;;;;;OAMG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAMC;IA2QD;;;OAGG;IACH,4BAHW,KAAK,QAKf;IAxPD;;;OAGG;IACH,kBAFW,QAAQ,QAIlB;IAED;;;OAGG;IACH,gBAFW,QAAQ,QAUlB;IAED;;OAEG;IACH,YAFW,QAAQ,QAQlB;IAED;;OAEG;IACH,6BAFW,QAAQ,QAMlB;IAED;;OAEG;IACH,0BAFW,QAAQ,QAalB;IAED;;;OAGG;IACH,mBAFW,QAAQ,QAWlB;IAED;;OAEG;IACH,eAiBC;IAED,kBAEC;IAED,uBAEC;IAED,sBAEC;IAED;;;;OAIG;IACH,eAFW,CAAC,CAAS,IAAQ,EAAR,QAAQ,KAAE,IAAI,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,CAAS,IAAQ,EAAR,QAAQ,KAAE,IAAI,CAAA;KAAC,QAchF;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;OAGG;IACH,cAFW,KAAK,QAKf;IAED,iBAMC;IAED;;;;OAIG;IACH,2BAFW,MAAM,IAAI,QAQpB;IAED;;OAEG;IACH,gBAWC;IAED;;OAEG;IACH,uBAOC;IAED;;;;OAIG;IACH,sBAFW,OAAO,uBAAuB,EAAE,SAAS,QAMnD;IAED;;;OAGG;IACH,8BAHa,OAAO,qCAAqC,EAAE,OAAO,CAcjE;IAED;;;;OAIG;IACH,8BAQC;;CASJ;mCAvXY;IAAC,YAAY,CAAC,EAAE,OAAO,qCAAqC,EAAE,OAAO,CAAA;CAAC;;;;oBAMtE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;mBACnB,KAAK,EAAE"}
1
+ {"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.js"],"names":[],"mappings":"AA2ZA;;;;;;;;GAQG;AACH,0DAHW,QAAQ,GAAG,SAAS,GAClB,GAAG,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,CAAC,CAc9D;AAED;;;GAGG;AACH,uCAHW,OAAO,uBAAuB,EAAE,SAAS,GACvC,SAAS,IAAI,OAAO,uBAAuB,EAAE,SAAS,CAIlE;AAED;;;GAGG;AACH,wCAHW,OAAO,uBAAuB,EAAE,SAAS,GACvC,SAAS,IAAI,OAAO,uBAAuB,EAAE,UAAU,CAInE;AA9bD;;;GAGG;AACH,qCAAsC;AAEtC;;;GAGG;AACH,uCAAwC;AAExC;;;GAGG;AACH,uCAAwC;AAExC;;;;GAIG;AAEH;;;;;GAKG;AACH;IA+CI;;OAEG;IACH,mCAFW,oBAAoB,EAa9B;IA5DD;;QAEI,oBAAoB;eAAT,KAAK;MAElB;IAWF;;;;OAIG;IACH,sBAFU,oBAAoB,CAEF;IAE5B,uBAEC;IAED;;;;;;OAMG;IACH,oCAFa,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,CAI3D;IAED;;;;OAIG;IACH,aAFa,MAAM,CAIlB;IAQG,yBAAyB;IACzB,UADW,QAAQ,EAAE,CACH;IAElB,uBAAuB;IACvB,QADW,QAAQ,CACI;IAEvB,2CAA2C;IAC3C,mBAAsB;IAG1B,wBAEC;IAED;;;OAGG;IACH,cASC;IAED;;;;;;OAMG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAMC;IA2QD;;;OAGG;IACH,4BAHW,KAAK,QAKf;IAxPD;;;OAGG;IACH,kBAFW,QAAQ,QAIlB;IAED;;;OAGG;IACH,gBAFW,QAAQ,QAUlB;IAED;;OAEG;IACH,YAFW,QAAQ,QAQlB;IAED;;OAEG;IACH,6BAFW,QAAQ,QAMlB;IAED;;OAEG;IACH,0BAFW,QAAQ,QAalB;IAED;;;OAGG;IACH,mBAFW,QAAQ,QAWlB;IAED;;OAEG;IACH,eAiBC;IAED,kBAEC;IAED,uBAEC;IAED,sBAEC;IAED;;;;OAIG;IACH,eAFW,CAAC,CAAS,IAAQ,EAAR,QAAQ,KAAE,IAAI,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,CAAS,IAAQ,EAAR,QAAQ,KAAE,IAAI,CAAA;KAAC,QAchF;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;OAGG;IACH,cAFW,KAAK,QAKf;IAED,iBAMC;IAED;;;;OAIG;IACH,2BAFW,MAAM,IAAI,QAQpB;IAED;;OAEG;IACH,gBAWC;IAED;;OAEG;IACH,uBAOC;IAED;;;;OAIG;IACH,sBAFW,OAAO,uBAAuB,EAAE,SAAS,QAMnD;IAED;;;OAGG;IACH,8BAHa,OAAO,qCAAqC,EAAE,OAAO,CAcjE;IAED;;;;OAIG;IACH,8BAQC;;CASJ;;mBAnYS,OAAO,qCAAqC,EAAE,OAAO;cACrD,OAAO,yBAAyB,EAAE,OAAO;;;;;oBAMtC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;mBACnB,KAAK,EAAE"}
@@ -19,7 +19,9 @@ export const BEHAVIOR_MODIFIES = 1 << 1;
19
19
  export const BEHAVIOR_COLLECTS = 1 << 2;
20
20
 
21
21
  /**
22
- * @typedef {{paramRuntime?: import("../paramRuntime/viewParamRuntime.js").default}} ParamRuntimeProvider
22
+ * @typedef {object} ParamRuntimeProvider
23
+ * @prop {import("../paramRuntime/viewParamRuntime.js").default} [paramRuntime]
24
+ * @prop {import("../types/viewContext.js").default} [context]
23
25
  */
24
26
 
25
27
  /**
@@ -55,6 +57,17 @@ export default class FlowNode {
55
57
  return 0;
56
58
  }
57
59
 
60
+ /**
61
+ * Scale channels whose current domain affects this node's output.
62
+ * Downstream views must not feed these channels back into shared-domain
63
+ * resolution or domain-dependent flows can invalidate themselves.
64
+ *
65
+ * @returns {import("../spec/channel.js").ChannelWithScale[]}
66
+ */
67
+ get domainSensitiveScaleChannels() {
68
+ return [];
69
+ }
70
+
58
71
  /**
59
72
  * A human-readable label for the node. Used for debugging and logging.
60
73
  *
@@ -396,6 +409,29 @@ export default class FlowNode {
396
409
  }
397
410
  }
398
411
 
412
+ /**
413
+ * Walks upstream from a flow node and collects scale channels whose current
414
+ * domain affects the produced data. Downstream encodings on these channels
415
+ * must not re-register as domain contributors or they will invalidate the
416
+ * domain that they themselves depend on.
417
+ *
418
+ * @param {FlowNode | undefined} node
419
+ * @returns {Set<import("../spec/channel.js").ChannelWithScale>}
420
+ */
421
+ export function collectDomainSensitiveScaleChannels(node) {
422
+ /** @type {Set<import("../spec/channel.js").ChannelWithScale>} */
423
+ const channels = new Set();
424
+
425
+ while (node) {
426
+ for (const channel of node.domainSensitiveScaleChannels) {
427
+ channels.add(channel);
428
+ }
429
+ node = node.parent;
430
+ }
431
+
432
+ return channels;
433
+ }
434
+
399
435
  /**
400
436
  * @param {import("../types/flowBatch.js").FlowBatch} flowBatch
401
437
  * @returns {flowBatch is import("../types/flowBatch.js").FileBatch}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parse BED text data.
3
+ *
4
+ * @param {string} data
5
+ * @returns {Promise<Record<string, any>[]>}
6
+ */
7
+ export default function bed(data: string): Promise<Record<string, any>[]>;
8
+ //# sourceMappingURL=bed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bed.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/bed.js"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,kCAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAsC1C"}
@@ -0,0 +1,58 @@
1
+ import { formats as vegaFormats } from "vega-loader";
2
+
3
+ const blankLinePattern = /^\s*$/;
4
+ const controlLinePattern = /^\s*(?:browser\b|track\b|#)/;
5
+
6
+ /** @type {Promise<any> | undefined} */
7
+ let bedParserPromise;
8
+
9
+ async function loadBedParser() {
10
+ bedParserPromise ??= import("@gmod/bed").then((mod) => mod.default);
11
+ return bedParserPromise;
12
+ }
13
+
14
+ /**
15
+ * Parse BED text data.
16
+ *
17
+ * @param {string} data
18
+ * @returns {Promise<Record<string, any>[]>}
19
+ */
20
+ export default async function bed(data) {
21
+ const BED = await loadBedParser();
22
+ const parser = new BED();
23
+ let dataStarted = false;
24
+
25
+ /** @type {Record<string, any>[]} */
26
+ const rows = [];
27
+
28
+ const lines = data.split(/\r?\n/);
29
+
30
+ for (let i = 0; i < lines.length; i++) {
31
+ const line = lines[i];
32
+ if (line.length == 0) {
33
+ continue;
34
+ }
35
+
36
+ if (!dataStarted) {
37
+ if (blankLinePattern.test(line) || controlLinePattern.test(line)) {
38
+ continue;
39
+ }
40
+ dataStarted = true;
41
+ }
42
+
43
+ try {
44
+ rows.push(parser.parseLine(line));
45
+ } catch (error) {
46
+ throw new Error(
47
+ `Cannot parse BED line ${i + 1}: ${
48
+ /** @type {Error} */ (error).message
49
+ }`,
50
+ { cause: error }
51
+ );
52
+ }
53
+ }
54
+
55
+ return rows;
56
+ }
57
+
58
+ vegaFormats("bed", bed);
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param {string} data
3
+ * @param {{ columns?: string[] }} [format]
4
+ */
5
+ export default function bedpe(data: string, format?: {
6
+ columns?: string[];
7
+ }): Record<string, any>[];
8
+ //# sourceMappingURL=bedpe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedpe.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/bedpe.js"],"names":[],"mappings":"AAiFA;;;GAGG;AACH,oCAHW,MAAM,WACN;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,yBA8EhC"}
@@ -0,0 +1,164 @@
1
+ import { formats as vegaFormats } from "vega-loader";
2
+
3
+ const blankLinePattern = /^\s*$/;
4
+ const controlLinePattern = /^\s*(?:browser\b|track\b|#)/;
5
+
6
+ const defaultColumns = [
7
+ "chrom1",
8
+ "start1",
9
+ "end1",
10
+ "chrom2",
11
+ "start2",
12
+ "end2",
13
+ "name",
14
+ "score",
15
+ "strand1",
16
+ "strand2",
17
+ ];
18
+
19
+ const requiredColumns = defaultColumns.slice(0, 6);
20
+
21
+ const normalizeNone = (/** @type {string} */ value) => value;
22
+ const normalizeStringSentinel = (/** @type {string} */ value) =>
23
+ value == "." ? null : value;
24
+ const normalizeStrand = (/** @type {string} */ value) => {
25
+ if (value == "+") {
26
+ return 1;
27
+ }
28
+ if (value == "-") {
29
+ return -1;
30
+ }
31
+ return 0;
32
+ };
33
+ const normalizeCoordinate = (/** @type {string} */ value) => {
34
+ if (value == "." || value == "-1" || value == "") {
35
+ return null;
36
+ }
37
+ const parsed = Number(value);
38
+ return Number.isInteger(parsed) ? parsed : null;
39
+ };
40
+ const normalizeScore = (/** @type {string} */ value) => {
41
+ if (value == "." || value == "") {
42
+ return null;
43
+ }
44
+ const parsed = Number(value);
45
+ return Number.isNaN(parsed) ? value : parsed;
46
+ };
47
+
48
+ /** @type {Record<string, (value: string) => any>} */
49
+ const columnNormalizers = {
50
+ chrom1: normalizeStringSentinel,
51
+ chrom2: normalizeStringSentinel,
52
+ name: normalizeStringSentinel,
53
+ strand1: normalizeStrand,
54
+ strand2: normalizeStrand,
55
+ start1: normalizeCoordinate,
56
+ end1: normalizeCoordinate,
57
+ start2: normalizeCoordinate,
58
+ end2: normalizeCoordinate,
59
+ score: normalizeScore,
60
+ };
61
+
62
+ /**
63
+ * BEDPE has fixed required leading columns; optional tail columns vary by producer.
64
+ * Detect a header row by matching only the required prefix.
65
+ *
66
+ * @param {string[]} row
67
+ */
68
+ function looksLikeHeaderRow(row) {
69
+ if (row.length < requiredColumns.length) {
70
+ return false;
71
+ }
72
+
73
+ for (let i = 0; i < requiredColumns.length; i++) {
74
+ if (row[i] != requiredColumns[i]) {
75
+ return false;
76
+ }
77
+ }
78
+
79
+ return true;
80
+ }
81
+
82
+ /**
83
+ * @param {string} data
84
+ * @param {{ columns?: string[] }} [format]
85
+ */
86
+ export default function bedpe(data, format = {}) {
87
+ const lines = data.split(/\r?\n/);
88
+ const explicitColumns = format.columns;
89
+ let dataStarted = false;
90
+ let columnsInitialized = false;
91
+ let lineNumber = 0;
92
+
93
+ /** @type {string[]} */
94
+ const columns = [];
95
+ /** @type {((value: string) => any)[]} */
96
+ const normalizers = [];
97
+ /** @type {Record<string, any>[]} */
98
+ const rows = [];
99
+
100
+ for (const line of lines) {
101
+ lineNumber++;
102
+
103
+ if (line.length == 0) {
104
+ continue;
105
+ }
106
+
107
+ if (!dataStarted) {
108
+ if (blankLinePattern.test(line) || controlLinePattern.test(line)) {
109
+ continue;
110
+ }
111
+ dataStarted = true;
112
+ }
113
+
114
+ if (blankLinePattern.test(line)) {
115
+ continue;
116
+ }
117
+
118
+ const row = line.split("\t");
119
+
120
+ if (!columnsInitialized) {
121
+ const baseColumns = explicitColumns
122
+ ? explicitColumns
123
+ : looksLikeHeaderRow(row)
124
+ ? row
125
+ : defaultColumns;
126
+
127
+ for (const column of baseColumns) {
128
+ columns.push(column);
129
+ normalizers.push(columnNormalizers[column] ?? normalizeNone);
130
+ }
131
+
132
+ columnsInitialized = true;
133
+
134
+ if (!explicitColumns && baseColumns == row) {
135
+ continue;
136
+ }
137
+ }
138
+
139
+ while (columns.length < row.length) {
140
+ columns.push("field" + (columns.length + 1));
141
+ normalizers.push(normalizeNone);
142
+ }
143
+
144
+ if (row.length < requiredColumns.length) {
145
+ throw new Error(
146
+ `BEDPE line ${lineNumber} has ${row.length} columns, expected at least ${requiredColumns.length}.`
147
+ );
148
+ }
149
+
150
+ /** @type {Record<string, any>} */
151
+ const datum = {};
152
+
153
+ for (let i = 0; i < row.length; i++) {
154
+ const columnName = columns[i];
155
+ datum[columnName] = normalizers[i](row[i]);
156
+ }
157
+
158
+ rows.push(datum);
159
+ }
160
+
161
+ return rows;
162
+ }
163
+
164
+ vegaFormats("bedpe", bedpe);
@@ -1 +1 @@
1
- {"version":3,"file":"fasta.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/fasta.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,oCAJW,MAAM,WACN,GAAG,GACD,aAAa,EAAE,CAsB3B;;;;;gBA3BS,MAAM;cACN,MAAM"}
1
+ {"version":3,"file":"fasta.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/fasta.js"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,oCAJW,MAAM,WACN,GAAG,GACD,aAAa,EAAE,CAsB3B;;;;;gBA3BS,MAAM;cACN,MAAM"}
@@ -1,3 +1,5 @@
1
+ import { formats as vegaFormats } from "vega-loader";
2
+
1
3
  /**
2
4
  * A bare-bones FASTA-parser
3
5
  *
@@ -30,3 +32,5 @@ export default function fasta(data, options) {
30
32
 
31
33
  return sequences;
32
34
  }
35
+
36
+ vegaFormats("fasta", fasta);
@@ -1 +1 @@
1
- {"version":3,"file":"parquet.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/parquet.js"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,+BAJW,WAAW,GAAC,UAAU,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAC,GAAG,CAAC,EAAE,CAAC,CAWzC"}
1
+ {"version":3,"file":"parquet.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/parquet.js"],"names":[],"mappings":"AAcA;;;;;GAKG;AACH,+BAJW,WAAW,GAAC,UAAU,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAC,GAAG,CAAC,EAAE,CAAC,CAWzC"}
@@ -1,3 +1,5 @@
1
+ import { formats as vegaFormats } from "vega-loader";
2
+
1
3
  /*
2
4
  * Adapted from: https://github.com/vega/vega-loader-parquet/blob/main/src/index.js
3
5
  */
@@ -27,3 +29,5 @@ export default async function parquet(data) {
27
29
  }
28
30
 
29
31
  parquet.responseType = "arrayBuffer";
32
+
33
+ vegaFormats("parquet", parquet);
@@ -1,19 +1,8 @@
1
- /**
2
- * Registers a lazy data source for a custom type.
3
- *
4
- * @template {import("../../spec/data.js").LazyDataParams} P
5
- * @param {LazySourceEntry<P>["guard"]} guard
6
- * @param {LazySourceEntry<P>["Source"]} Source
7
- * @returns {() => void}
8
- */
9
- export function registerLazyDataSource<P extends import("../../spec/data.js").LazyDataParams>(guard: LazySourceEntry<P>["guard"], Source: LazySourceEntry<P>["Source"]): () => void;
10
1
  /**
11
2
  * @param {Partial<import("../../spec/data.js").Data>} params
12
3
  * @param {import("../../view/view.js").default} view
13
4
  */
14
5
  export default function createDataSource(params: Partial<import("../../spec/data.js").Data>, view: import("../../view/view.js").default): import("./dataSource.js").default;
15
- export type LazySourceEntry<P extends import("../../spec/data.js").LazyDataParams> = {
16
- guard: (params: import("../../spec/data.js").LazyDataParams) => params is P;
17
- Source: new (params: P, view: import("../../view/view.js").default) => import("./dataSource.js").default;
18
- };
6
+ export { registerLazyDataSource };
7
+ import { registerLazyDataSource } from "./lazy/lazyDataSourceRegistry.js";
19
8
  //# sourceMappingURL=dataSourceFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataSourceFactory.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataSourceFactory.js"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AACH,uCAL2D,CAAC,SAA/C,OAAQ,oBAAoB,EAAE,cAAe,SAC/C,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAC3B,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAC1B,MAAM,IAAI,CAYtB;AAED;;;GAGG;AACH,iDAHW,OAAO,CAAC,OAAO,oBAAoB,EAAE,IAAI,CAAC,QAC1C,OAAO,oBAAoB,EAAE,OAAO,qCAgB9C;4BAhD0D,CAAC,SAA/C,OAAQ,oBAAoB,EAAE,cAAe,IAC7C;IACR,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,oBAAoB,EAAE,cAAc,KAAK,MAAM,IAAI,CAAC,CAAC;IAC5E,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,oBAAoB,EAAE,OAAO,KAAK,OAAO,iBAAiB,EAAE,OAAO,CAAA;CACzG"}
1
+ {"version":3,"file":"dataSourceFactory.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataSourceFactory.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,iDAHW,OAAO,CAAC,OAAO,oBAAoB,EAAE,IAAI,CAAC,QAC1C,OAAO,oBAAoB,EAAE,OAAO,qCAgB9C;;uCApBM,kCAAkC"}
@@ -1,45 +1,10 @@
1
1
  import InlineSource, { isInlineData } from "./inlineSource.js";
2
2
  import UrlSource, { isUrlData } from "./urlSource.js";
3
3
  import SequenceSource, { isSequenceGenerator } from "./sequenceSource.js";
4
- import AxisTickSource from "./lazy/axisTickSource.js";
5
- import AxisGenomeSource from "./lazy/axisGenomeSource.js";
6
- import IndexedFastaSource from "./lazy/indexedFastaSource.js";
7
- import BigWigSource from "./lazy/bigWigSource.js";
8
- import BigBedSource from "./lazy/bigBedSource.js";
9
- import BamSource from "./lazy/bamSource.js";
10
- import Gff3Source from "./lazy/gff3Source.js";
11
- import VcfSource from "./lazy/vcfSource.js";
12
-
13
- /**
14
- * @template {import("../../spec/data.js").LazyDataParams} P
15
- * @typedef {{
16
- * guard: (params: import("../../spec/data.js").LazyDataParams) => params is P,
17
- * Source: new (params: P, view: import("../../view/view.js").default) => import("./dataSource.js").default
18
- * }} LazySourceEntry
19
- */
20
-
21
- /** @type {LazySourceEntry<any>[]} */
22
- const customLazySources = [];
23
-
24
- /**
25
- * Registers a lazy data source for a custom type.
26
- *
27
- * @template {import("../../spec/data.js").LazyDataParams} P
28
- * @param {LazySourceEntry<P>["guard"]} guard
29
- * @param {LazySourceEntry<P>["Source"]} Source
30
- * @returns {() => void}
31
- */
32
- export function registerLazyDataSource(guard, Source) {
33
- /** @type {LazySourceEntry<any>} */
34
- const entry = { guard, Source };
35
- customLazySources.push(entry);
36
- return () => {
37
- const index = customLazySources.indexOf(entry);
38
- if (index >= 0) {
39
- customLazySources.splice(index, 1);
40
- }
41
- };
42
- }
4
+ import {
5
+ createLazyDataSource,
6
+ registerLazyDataSource,
7
+ } from "./lazy/lazyDataSourceRegistry.js";
43
8
 
44
9
  /**
45
10
  * @param {Partial<import("../../spec/data.js").Data>} params
@@ -70,105 +35,4 @@ function isLazyData(params) {
70
35
  return "lazy" in params;
71
36
  }
72
37
 
73
- /**
74
- *
75
- * @param {import("../../spec/data.js").LazyDataParams} params
76
- * @returns {params is import("../../spec/data.js").AxisTicksData}
77
- */
78
- function isAxisTickSource(params) {
79
- return params?.type == "axisTicks";
80
- }
81
-
82
- /**
83
- *
84
- * @param {import("../../spec/data.js").LazyDataParams} params
85
- * @returns {params is import("../../spec/data.js").AxisGenomeData}
86
- */
87
- function isAxisGenomeSource(params) {
88
- return params?.type == "axisGenome";
89
- }
90
-
91
- /**
92
- *
93
- * @param {import("../../spec/data.js").LazyDataParams} params
94
- * @returns {params is import("../../spec/data.js").IndexedFastaData}
95
- */
96
- function isIndexedFastaSource(params) {
97
- return params?.type == "indexedFasta";
98
- }
99
-
100
- /**
101
- *
102
- * @param {import("../../spec/data.js").LazyDataParams} params
103
- * @returns {params is import("../../spec/data.js").BigWigData}
104
- */
105
- function isBigWigSource(params) {
106
- return params?.type == "bigwig";
107
- }
108
-
109
- /**
110
- *
111
- * @param {import("../../spec/data.js").LazyDataParams} params
112
- * @returns {params is import("../../spec/data.js").BigBedData}
113
- */
114
- function isBigBedSource(params) {
115
- return params?.type == "bigbed";
116
- }
117
-
118
- /**
119
- *
120
- * @param {import("../../spec/data.js").LazyDataParams} params
121
- * @returns {params is import("../../spec/data.js").BamData}
122
- */
123
- function isBamSource(params) {
124
- return params?.type == "bam";
125
- }
126
-
127
- /**
128
- * @param {import("../../spec/data.js").LazyDataParams} params
129
- * @returns {params is import("../../spec/data.js").Gff3Data}
130
- */
131
- function isGff3Source(params) {
132
- return params?.type == "gff3";
133
- }
134
-
135
- /**
136
- * @param {import("../../spec/data.js").LazyDataParams} params
137
- * @returns {params is import("../../spec/data.js").VcfData}
138
- */
139
- function isVcfSource(params) {
140
- return params?.type == "vcf";
141
- }
142
-
143
- /** @type {LazySourceEntry<any>[]} */
144
- const builtinLazySources = [
145
- { guard: isAxisTickSource, Source: AxisTickSource },
146
- { guard: isAxisGenomeSource, Source: AxisGenomeSource },
147
- { guard: isIndexedFastaSource, Source: IndexedFastaSource },
148
- { guard: isBigWigSource, Source: BigWigSource },
149
- { guard: isBigBedSource, Source: BigBedSource },
150
- { guard: isBamSource, Source: BamSource },
151
- { guard: isGff3Source, Source: Gff3Source },
152
- { guard: isVcfSource, Source: VcfSource },
153
- ];
154
-
155
- /**
156
- * @param {import("../../spec/data.js").LazyDataParams} params
157
- * @param {import("../../view/view.js").default} view
158
- */
159
- function createLazyDataSource(params, view) {
160
- for (const entry of customLazySources) {
161
- if (entry.guard(params)) {
162
- return new entry.Source(/** @type {any} */ (params), view);
163
- }
164
- }
165
- for (const entry of builtinLazySources) {
166
- if (entry.guard(params)) {
167
- return new entry.Source(/** @type {any} */ (params), view);
168
- }
169
- }
170
-
171
- throw new Error(
172
- "Cannot figure out the data source type: " + JSON.stringify(params)
173
- );
174
- }
38
+ export { registerLazyDataSource };