@genome-spy/core 0.77.0 → 0.79.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 (317) hide show
  1. package/dist/bundle/{browser-KWU9rWZT.js → browser-CETrb2cm.js} +53 -33
  2. package/dist/bundle/esm-BdLYkz-m.js +248 -0
  3. package/dist/bundle/esm-BwiDsqSb.js +1367 -0
  4. package/dist/bundle/esm-CDFd1cjk.js +441 -0
  5. package/dist/bundle/{esm-CRMf_I9V.js → esm-CTUHLDbv.js} +30 -30
  6. package/dist/bundle/esm-Cx-EbkOj.js +1221 -0
  7. package/dist/bundle/esm-DlYGqi79.js +128 -0
  8. package/dist/bundle/{esm-BygJiwh0.js → esm-k9p3oHkt.js} +133 -158
  9. package/dist/bundle/{esm-CT3ygiMq.js → esm-zAZJQO6D.js} +226 -212
  10. package/dist/bundle/index.es.js +14102 -10810
  11. package/dist/bundle/index.js +109 -95
  12. package/dist/bundle/{parquetRead-DG_-F5j5.js → parquetRead-Cad1SOVV.js} +473 -399
  13. package/dist/schema.json +23788 -11049
  14. package/dist/src/config/axisConfig.d.ts +2 -2
  15. package/dist/src/config/axisConfig.d.ts.map +1 -1
  16. package/dist/src/config/axisConfig.js +28 -44
  17. package/dist/src/config/configLayers.d.ts +45 -0
  18. package/dist/src/config/configLayers.d.ts.map +1 -0
  19. package/dist/src/config/configLayers.js +110 -0
  20. package/dist/src/config/defaultConfig.d.ts.map +1 -1
  21. package/dist/src/config/defaultConfig.js +8 -1
  22. package/dist/src/config/defaults/legendDefaults.d.ts +14 -0
  23. package/dist/src/config/defaults/legendDefaults.d.ts.map +1 -0
  24. package/dist/src/config/defaults/legendDefaults.js +46 -0
  25. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -1
  26. package/dist/src/config/defaults/titleDefaults.js +26 -18
  27. package/dist/src/config/legendConfig.d.ts +11 -0
  28. package/dist/src/config/legendConfig.d.ts.map +1 -0
  29. package/dist/src/config/legendConfig.js +63 -0
  30. package/dist/src/config/styleUtils.d.ts +8 -2
  31. package/dist/src/config/styleUtils.d.ts.map +1 -1
  32. package/dist/src/config/styleUtils.js +25 -1
  33. package/dist/src/config/themes.d.ts.map +1 -1
  34. package/dist/src/config/themes.js +21 -2
  35. package/dist/src/config/titleConfig.d.ts.map +1 -1
  36. package/dist/src/config/titleConfig.js +2 -18
  37. package/dist/src/data/collector.d.ts.map +1 -1
  38. package/dist/src/data/collector.js +40 -18
  39. package/dist/src/data/flowInit.d.ts +6 -0
  40. package/dist/src/data/flowInit.d.ts.map +1 -1
  41. package/dist/src/data/flowInit.js +1 -1
  42. package/dist/src/data/flowNode.d.ts +32 -0
  43. package/dist/src/data/flowNode.d.ts.map +1 -1
  44. package/dist/src/data/flowNode.js +59 -0
  45. package/dist/src/data/sources/lazy/bamSource.d.ts +0 -1
  46. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  47. package/dist/src/data/sources/lazy/bamSource.js +39 -30
  48. package/dist/src/data/sources/lazy/bigBedSource.d.ts +0 -10
  49. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  50. package/dist/src/data/sources/lazy/bigBedSource.js +127 -62
  51. package/dist/src/data/sources/lazy/bigWigSource.d.ts +2 -2
  52. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  53. package/dist/src/data/sources/lazy/bigWigSource.js +234 -81
  54. package/dist/src/data/sources/lazy/gff3Source.d.ts +7 -3
  55. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  56. package/dist/src/data/sources/lazy/gff3Source.js +7 -8
  57. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts +1 -1
  58. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  59. package/dist/src/data/sources/lazy/indexedFastaSource.js +28 -19
  60. package/dist/src/data/sources/lazy/legendEntriesSource.d.ts +24 -0
  61. package/dist/src/data/sources/lazy/legendEntriesSource.d.ts.map +1 -0
  62. package/dist/src/data/sources/lazy/legendEntriesSource.js +217 -0
  63. package/dist/src/data/sources/lazy/legendGradientSource.d.ts +30 -0
  64. package/dist/src/data/sources/lazy/legendGradientSource.d.ts.map +1 -0
  65. package/dist/src/data/sources/lazy/legendGradientSource.js +388 -0
  66. package/dist/src/data/sources/lazy/mockLazySource.d.ts +4 -1
  67. package/dist/src/data/sources/lazy/mockLazySource.d.ts.map +1 -1
  68. package/dist/src/data/sources/lazy/mockLazySource.js +49 -4
  69. package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
  70. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  71. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +3 -4
  72. package/dist/src/data/sources/lazy/tabixSource.d.ts +9 -4
  73. package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
  74. package/dist/src/data/sources/lazy/tabixSource.js +201 -70
  75. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +2 -3
  76. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -1
  77. package/dist/src/data/sources/lazy/tabixTsvSource.js +14 -12
  78. package/dist/src/data/sources/lazy/vcfSource.d.ts +7 -3
  79. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  80. package/dist/src/data/sources/lazy/vcfSource.js +7 -8
  81. package/dist/src/data/sources/urlDescriptor.d.ts +165 -0
  82. package/dist/src/data/sources/urlDescriptor.d.ts.map +1 -0
  83. package/dist/src/data/sources/urlDescriptor.js +473 -0
  84. package/dist/src/data/sources/urlDescriptorController.d.ts +25 -0
  85. package/dist/src/data/sources/urlDescriptorController.d.ts.map +1 -0
  86. package/dist/src/data/sources/urlDescriptorController.js +72 -0
  87. package/dist/src/data/sources/urlDescriptorState.d.ts +47 -0
  88. package/dist/src/data/sources/urlDescriptorState.d.ts.map +1 -0
  89. package/dist/src/data/sources/urlDescriptorState.js +129 -0
  90. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  91. package/dist/src/data/sources/urlSource.js +101 -61
  92. package/dist/src/data/transforms/packLegendLabels.d.ts +21 -0
  93. package/dist/src/data/transforms/packLegendLabels.d.ts.map +1 -0
  94. package/dist/src/data/transforms/packLegendLabels.js +189 -0
  95. package/dist/src/data/transforms/transformFactory.d.ts.map +1 -1
  96. package/dist/src/data/transforms/transformFactory.js +4 -0
  97. package/dist/src/data/transforms/truncateText.d.ts +27 -0
  98. package/dist/src/data/transforms/truncateText.d.ts.map +1 -0
  99. package/dist/src/data/transforms/truncateText.js +94 -0
  100. package/dist/src/debug/dataflowDebugSnapshot.d.ts +58 -0
  101. package/dist/src/debug/dataflowDebugSnapshot.d.ts.map +1 -0
  102. package/dist/src/debug/dataflowDebugSnapshot.js +159 -0
  103. package/dist/src/debug/markDebugSnapshot.d.ts +54 -0
  104. package/dist/src/debug/markDebugSnapshot.d.ts.map +1 -0
  105. package/dist/src/debug/markDebugSnapshot.js +100 -0
  106. package/dist/src/debug/paramDebugSnapshot.d.ts +53 -0
  107. package/dist/src/debug/paramDebugSnapshot.d.ts.map +1 -0
  108. package/dist/src/debug/paramDebugSnapshot.js +86 -0
  109. package/dist/src/debug/resolutionDebugSnapshot.d.ts +155 -0
  110. package/dist/src/debug/resolutionDebugSnapshot.d.ts.map +1 -0
  111. package/dist/src/debug/resolutionDebugSnapshot.js +291 -0
  112. package/dist/src/debug/valuePreview.d.ts +9 -0
  113. package/dist/src/debug/valuePreview.d.ts.map +1 -0
  114. package/dist/src/debug/valuePreview.js +57 -0
  115. package/dist/src/debug/viewDebugSnapshot.d.ts +131 -0
  116. package/dist/src/debug/viewDebugSnapshot.d.ts.map +1 -0
  117. package/dist/src/debug/viewDebugSnapshot.js +390 -0
  118. package/dist/src/embedFactory.d.ts.map +1 -1
  119. package/dist/src/embedFactory.js +6 -1
  120. package/dist/src/encoder/encoder.d.ts +2 -2
  121. package/dist/src/encoder/encoder.d.ts.map +1 -1
  122. package/dist/src/encoder/encoder.js +5 -4
  123. package/dist/src/fonts/bmFontManager.d.ts +1 -1
  124. package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
  125. package/dist/src/fonts/bmFontManager.js +45 -10
  126. package/dist/src/fonts/textMetrics.d.ts +69 -0
  127. package/dist/src/fonts/textMetrics.d.ts.map +1 -0
  128. package/dist/src/fonts/textMetrics.js +73 -0
  129. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -1
  130. package/dist/src/genomeSpy/headlessBootstrap.js +8 -0
  131. package/dist/src/genomeSpy/interactionController.d.ts +4 -1
  132. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  133. package/dist/src/genomeSpy/interactionController.js +57 -13
  134. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -1
  135. package/dist/src/genomeSpy/renderCoordinator.js +25 -3
  136. package/dist/src/genomeSpy/viewDataInit.d.ts +14 -0
  137. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  138. package/dist/src/genomeSpy/viewDataInit.js +45 -8
  139. package/dist/src/genomeSpyBase.d.ts +6 -0
  140. package/dist/src/genomeSpyBase.d.ts.map +1 -1
  141. package/dist/src/genomeSpyBase.js +25 -4
  142. package/dist/src/gl/glslScaleGenerator.d.ts +17 -0
  143. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  144. package/dist/src/gl/glslScaleGenerator.js +39 -2
  145. package/dist/src/gl/includes/common.glsl.js +1 -1
  146. package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -1
  147. package/dist/src/gl/vertexRangeIndex.js +4 -2
  148. package/dist/src/gl/webGLHelper.d.ts +1 -1
  149. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  150. package/dist/src/gl/webGLHelper.js +13 -8
  151. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +140 -3
  152. package/dist/src/marks/mark.d.ts +47 -4
  153. package/dist/src/marks/mark.d.ts.map +1 -1
  154. package/dist/src/marks/mark.js +158 -54
  155. package/dist/src/marks/point.d.ts.map +1 -1
  156. package/dist/src/marks/point.js +4 -0
  157. package/dist/src/marks/point.vertex.glsl.js +1 -1
  158. package/dist/src/marks/text.d.ts +1 -1
  159. package/dist/src/marks/text.d.ts.map +1 -1
  160. package/dist/src/marks/text.js +2 -7
  161. package/dist/src/marks/text.vertex.glsl.js +1 -1
  162. package/dist/src/paramRuntime/paramUtils.d.ts +43 -9
  163. package/dist/src/paramRuntime/paramUtils.d.ts.map +1 -1
  164. package/dist/src/paramRuntime/paramUtils.js +61 -1
  165. package/dist/src/paramRuntime/viewParamRuntime.d.ts +32 -0
  166. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  167. package/dist/src/paramRuntime/viewParamRuntime.js +63 -0
  168. package/dist/src/scales/axisResolution.d.ts +35 -0
  169. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  170. package/dist/src/scales/axisResolution.js +115 -7
  171. package/dist/src/scales/domainExpressions.d.ts +21 -0
  172. package/dist/src/scales/domainExpressions.d.ts.map +1 -0
  173. package/dist/src/scales/domainExpressions.js +43 -0
  174. package/dist/src/scales/domainPlanner.d.ts +12 -1
  175. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  176. package/dist/src/scales/domainPlanner.js +55 -36
  177. package/dist/src/scales/legendResolution.d.ts +83 -0
  178. package/dist/src/scales/legendResolution.d.ts.map +1 -0
  179. package/dist/src/scales/legendResolution.js +461 -0
  180. package/dist/src/scales/scaleInstanceManager.d.ts +1 -0
  181. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
  182. package/dist/src/scales/scaleInstanceManager.js +5 -0
  183. package/dist/src/scales/scalePropsResolver.d.ts +6 -1
  184. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  185. package/dist/src/scales/scalePropsResolver.js +35 -10
  186. package/dist/src/scales/scaleResolution.d.ts +52 -0
  187. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  188. package/dist/src/scales/scaleResolution.js +195 -16
  189. package/dist/src/scales/scaleRules.d.ts +10 -0
  190. package/dist/src/scales/scaleRules.d.ts.map +1 -1
  191. package/dist/src/scales/scaleRules.js +38 -1
  192. package/dist/src/scales/viewLevelGuideConfig.d.ts +53 -0
  193. package/dist/src/scales/viewLevelGuideConfig.d.ts.map +1 -0
  194. package/dist/src/scales/viewLevelGuideConfig.js +224 -0
  195. package/dist/src/scales/viewLevelScaleConfig.d.ts +45 -0
  196. package/dist/src/scales/viewLevelScaleConfig.d.ts.map +1 -0
  197. package/dist/src/scales/viewLevelScaleConfig.js +149 -0
  198. package/dist/src/spec/axis.d.ts +109 -3
  199. package/dist/src/spec/channel.d.ts +23 -4
  200. package/dist/src/spec/config.d.ts +59 -4
  201. package/dist/src/spec/data.d.ts +177 -17
  202. package/dist/src/spec/legend.d.ts +246 -0
  203. package/dist/src/spec/mark.d.ts +16 -4
  204. package/dist/src/spec/scale.d.ts +19 -6
  205. package/dist/src/spec/title.d.ts +58 -1
  206. package/dist/src/spec/transform.d.ts +149 -0
  207. package/dist/src/spec/view.d.ts +50 -6
  208. package/dist/src/styles/genome-spy.css +4 -1
  209. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  210. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  211. package/dist/src/styles/genome-spy.css.js +4 -1
  212. package/dist/src/types/embedApi.d.ts +262 -6
  213. package/dist/src/types/rendering.d.ts +19 -3
  214. package/dist/src/types/viewContext.d.ts +18 -2
  215. package/dist/src/utils/arrayUtils.d.ts +11 -0
  216. package/dist/src/utils/arrayUtils.d.ts.map +1 -1
  217. package/dist/src/utils/arrayUtils.js +23 -0
  218. package/dist/src/utils/suspension.d.ts +17 -0
  219. package/dist/src/utils/suspension.d.ts.map +1 -0
  220. package/dist/src/utils/suspension.js +41 -0
  221. package/dist/src/utils/ui/tooltip.d.ts +4 -0
  222. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  223. package/dist/src/utils/ui/tooltip.js +35 -10
  224. package/dist/src/view/axisGridView.d.ts.map +1 -1
  225. package/dist/src/view/axisGridView.js +1 -4
  226. package/dist/src/view/axisView.d.ts +18 -2
  227. package/dist/src/view/axisView.d.ts.map +1 -1
  228. package/dist/src/view/axisView.js +180 -75
  229. package/dist/src/view/concatView.d.ts +10 -2
  230. package/dist/src/view/concatView.d.ts.map +1 -1
  231. package/dist/src/view/concatView.js +46 -9
  232. package/dist/src/view/containerMutationHelper.d.ts +20 -1
  233. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  234. package/dist/src/view/containerMutationHelper.js +203 -32
  235. package/dist/src/view/facetView.d.ts +1 -1
  236. package/dist/src/view/gridView/gridChild.d.ts +54 -4
  237. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  238. package/dist/src/view/gridView/gridChild.js +301 -120
  239. package/dist/src/view/gridView/gridChildLegends.d.ts +57 -0
  240. package/dist/src/view/gridView/gridChildLegends.d.ts.map +1 -0
  241. package/dist/src/view/gridView/gridChildLegends.js +503 -0
  242. package/dist/src/view/gridView/gridView.d.ts +25 -0
  243. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  244. package/dist/src/view/gridView/gridView.js +454 -78
  245. package/dist/src/view/gridView/legendLayout.d.ts +26 -0
  246. package/dist/src/view/gridView/legendLayout.d.ts.map +1 -0
  247. package/dist/src/view/gridView/legendLayout.js +111 -0
  248. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  249. package/dist/src/view/gridView/scrollbar.js +1 -4
  250. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  251. package/dist/src/view/gridView/selectionRect.js +1 -4
  252. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  253. package/dist/src/view/gridView/separatorView.js +1 -4
  254. package/dist/src/view/layerView.d.ts +9 -2
  255. package/dist/src/view/layerView.d.ts.map +1 -1
  256. package/dist/src/view/layerView.js +18 -1
  257. package/dist/src/view/layout/flexLayout.d.ts +20 -4
  258. package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
  259. package/dist/src/view/layout/flexLayout.js +331 -31
  260. package/dist/src/view/layout/rectangle.d.ts +14 -0
  261. package/dist/src/view/layout/rectangle.d.ts.map +1 -1
  262. package/dist/src/view/layout/rectangle.js +40 -0
  263. package/dist/src/view/legend/legendEntries.d.ts +20 -0
  264. package/dist/src/view/legend/legendEntries.d.ts.map +1 -0
  265. package/dist/src/view/legend/legendEntries.js +21 -0
  266. package/dist/src/view/legendView.d.ts +134 -0
  267. package/dist/src/view/legendView.d.ts.map +1 -0
  268. package/dist/src/view/legendView.js +1611 -0
  269. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  270. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +26 -4
  271. package/dist/src/view/renderingContext/clipOptions.d.ts +44 -0
  272. package/dist/src/view/renderingContext/clipOptions.d.ts.map +1 -0
  273. package/dist/src/view/renderingContext/clipOptions.js +140 -0
  274. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -1
  275. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +12 -1
  276. package/dist/src/view/resolutionPlanner.d.ts +2 -1
  277. package/dist/src/view/resolutionPlanner.d.ts.map +1 -1
  278. package/dist/src/view/resolutionPlanner.js +89 -25
  279. package/dist/src/view/testUtils.d.ts +4 -2
  280. package/dist/src/view/testUtils.d.ts.map +1 -1
  281. package/dist/src/view/testUtils.js +29 -7
  282. package/dist/src/view/titleView.d.ts +37 -0
  283. package/dist/src/view/titleView.d.ts.map +1 -0
  284. package/dist/src/view/titleView.js +584 -0
  285. package/dist/src/view/unitView.d.ts +3 -3
  286. package/dist/src/view/unitView.d.ts.map +1 -1
  287. package/dist/src/view/unitView.js +3 -2
  288. package/dist/src/view/view.d.ts +25 -24
  289. package/dist/src/view/view.d.ts.map +1 -1
  290. package/dist/src/view/view.js +121 -16
  291. package/dist/src/view/viewFactory.d.ts +2 -5
  292. package/dist/src/view/viewFactory.d.ts.map +1 -1
  293. package/dist/src/view/viewFactory.js +1 -2
  294. package/dist/src/view/viewIdentityRegistry.d.ts +37 -0
  295. package/dist/src/view/viewIdentityRegistry.d.ts.map +1 -0
  296. package/dist/src/view/viewIdentityRegistry.js +71 -0
  297. package/dist/src/view/viewMutationAcidTestUtils.d.ts +112 -0
  298. package/dist/src/view/viewMutationAcidTestUtils.d.ts.map +1 -0
  299. package/dist/src/view/viewMutationAcidTestUtils.js +234 -0
  300. package/dist/src/view/viewMutationApi.d.ts +42 -0
  301. package/dist/src/view/viewMutationApi.d.ts.map +1 -0
  302. package/dist/src/view/viewMutationApi.js +811 -0
  303. package/dist/src/view/viewSelectors.d.ts +10 -0
  304. package/dist/src/view/viewSelectors.d.ts.map +1 -1
  305. package/dist/src/view/viewSelectors.js +23 -1
  306. package/package.json +4 -4
  307. package/dist/bundle/esm-0dYHNV_D.js +0 -121
  308. package/dist/bundle/esm-C49STiCR.js +0 -1248
  309. package/dist/bundle/esm-CscjKVDc.js +0 -1426
  310. package/dist/bundle/esm-CuMSzCHy.js +0 -298
  311. package/dist/bundle/esm-DMXpJXM4.js +0 -369
  312. package/dist/src/view/title.d.ts +0 -13
  313. package/dist/src/view/title.d.ts.map +0 -1
  314. package/dist/src/view/title.js +0 -154
  315. /package/dist/bundle/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BTmAcN-t.js} +0 -0
  316. /package/dist/bundle/{esm-CuVa5T98.js → esm-VvpZ9hsq.js} +0 -0
  317. /package/dist/bundle/{chunk-DmhlhrBa.js → rolldown-runtime-Dy4uBu1J.js} +0 -0
@@ -0,0 +1,388 @@
1
+ import { shallowArrayEquals } from "../../../utils/arrayUtils.js";
2
+ import createScale from "../../../scale/scale.js";
3
+ import { tickCount, tickFormat, tickValues } from "../../../scale/ticks.js";
4
+ import { findLegendScaleResolution } from "./legendEntriesSource.js";
5
+ import DataSource from "../dataSource.js";
6
+ import { registerBuiltInLazyDataSource } from "./lazyDataSourceRegistry.js";
7
+
8
+ const DEFAULT_SAMPLE_COUNT = 64;
9
+ const DEFAULT_TICK_COUNT = 5;
10
+
11
+ /**
12
+ * @typedef {((value: number) => number) & { invert: (position: number) => number }} NormalizedPositionScale
13
+ * @typedef {import("../../../spec/data.js").LegendGradientData | import("../../../spec/data.js").LegendGradientTicksData} LegendGradientSourceData
14
+ * @typedef {import("../../../types/encoder.js").VegaScale & {
15
+ * range: () => unknown[],
16
+ * invertExtent: (value: unknown) => [unknown, unknown],
17
+ * thresholds: () => unknown[]
18
+ * }} QuantizeScale
19
+ */
20
+
21
+ /**
22
+ * @param {import("../../../types/encoder.js").VegaScale} scale
23
+ * @param {number} start
24
+ * @param {number} stop
25
+ * @returns {NormalizedPositionScale}
26
+ */
27
+ function createNormalizedScale(scale, start, stop) {
28
+ const domain = getNumericScaleDomain(scale, start, stop);
29
+ const range = createNormalizedRange(domain.length);
30
+
31
+ if (
32
+ "copy" in scale &&
33
+ typeof scale.copy == "function" &&
34
+ "invert" in scale &&
35
+ typeof scale.invert == "function"
36
+ ) {
37
+ const normalizedScale = scale.copy();
38
+ normalizedScale.domain(domain);
39
+ normalizedScale.range(range);
40
+ return /** @type {NormalizedPositionScale} */ (normalizedScale);
41
+ }
42
+
43
+ const props =
44
+ /** @type {{ props?: import("../../../spec/scale.js").Scale }} */ (
45
+ scale
46
+ ).props;
47
+ const type = props?.type;
48
+
49
+ if (type) {
50
+ const positionProps = { ...props };
51
+ const extraPositionProps = /** @type {Record<string, unknown>} */ (
52
+ positionProps
53
+ );
54
+ delete positionProps.range;
55
+ delete positionProps.scheme;
56
+ delete extraPositionProps.domainMin;
57
+ delete extraPositionProps.domainMid;
58
+ delete extraPositionProps.domainMax;
59
+ delete extraPositionProps.schemeExtent;
60
+ delete extraPositionProps.schemeCount;
61
+ const positionScale = createScale({
62
+ ...positionProps,
63
+ type,
64
+ domain,
65
+ range,
66
+ zero: false,
67
+ nice: false,
68
+ });
69
+ if (
70
+ "invert" in positionScale &&
71
+ typeof positionScale.invert == "function"
72
+ ) {
73
+ return /** @type {NormalizedPositionScale} */ (positionScale);
74
+ }
75
+ }
76
+
77
+ return createLinearPositionScale(start, stop);
78
+ }
79
+
80
+ /**
81
+ * @param {import("../../../types/encoder.js").VegaScale} scale
82
+ * @param {number} start
83
+ * @param {number} stop
84
+ * @returns {number[]}
85
+ */
86
+ function getNumericScaleDomain(scale, start, stop) {
87
+ if ("domain" in scale && typeof scale.domain == "function") {
88
+ const domain = scale.domain().map(finiteNumber);
89
+ if (domain.length >= 2) {
90
+ return [start, ...domain.slice(1, -1), stop];
91
+ }
92
+ }
93
+
94
+ return [start, stop];
95
+ }
96
+
97
+ /**
98
+ * @param {number} length
99
+ * @returns {number[]}
100
+ */
101
+ function createNormalizedRange(length) {
102
+ const last = length - 1;
103
+ return Array.from({ length }, (_, index) => index / last);
104
+ }
105
+
106
+ /**
107
+ * @param {number} start
108
+ * @param {number} stop
109
+ * @returns {(position: number) => number}
110
+ */
111
+ function createLinearPositionInverter(start, stop) {
112
+ return (position) => start + (stop - start) * position;
113
+ }
114
+
115
+ /**
116
+ * @param {number} start
117
+ * @param {number} stop
118
+ * @returns {NormalizedPositionScale}
119
+ */
120
+ function createLinearPositionScale(start, stop) {
121
+ const scale = /** @type {NormalizedPositionScale} */ (
122
+ (/** @type {number} */ value) => (value - start) / (stop - start)
123
+ );
124
+ scale.invert = createLinearPositionInverter(start, stop);
125
+ return scale;
126
+ }
127
+
128
+ /**
129
+ * @param {number[]} domain
130
+ * @returns {[number, number]}
131
+ */
132
+ function extendThresholdDomain(domain) {
133
+ const start = domain[0];
134
+ const stop = domain.at(-1);
135
+ const span = stop - start;
136
+ const count = domain.length - 1;
137
+ const adjust = count ? span / count : 0.1;
138
+
139
+ return [start - adjust, stop + adjust];
140
+ }
141
+
142
+ /**
143
+ * @param {import("../../../types/encoder.js").VegaScale} scale
144
+ * @returns {scale is QuantizeScale}
145
+ */
146
+ function isQuantizeScale(scale) {
147
+ return (
148
+ scale.type == "quantize" &&
149
+ "range" in scale &&
150
+ typeof scale.range == "function" &&
151
+ "invertExtent" in scale &&
152
+ typeof scale.invertExtent == "function" &&
153
+ "thresholds" in scale &&
154
+ typeof scale.thresholds == "function"
155
+ );
156
+ }
157
+
158
+ /**
159
+ * @param {unknown} value
160
+ */
161
+ function finiteNumber(value) {
162
+ const number = Number(value);
163
+ if (!Number.isFinite(number)) {
164
+ throw new Error("Gradient legend boundaries must be finite numbers.");
165
+ }
166
+
167
+ return number;
168
+ }
169
+
170
+ class LegendGradientBaseSource extends DataSource {
171
+ /** @type {import("../../../spec/channel.js").Scalar[] | undefined} */
172
+ #domain = undefined;
173
+
174
+ /**
175
+ * @param {LegendGradientSourceData} params
176
+ * @param {import("../../../view/view.js").default} view
177
+ */
178
+ constructor(params, view) {
179
+ super(view);
180
+
181
+ this.params = params;
182
+ this.scaleResolution = findLegendScaleResolution(view, params.channel);
183
+ if (!this.scaleResolution) {
184
+ throw new Error(
185
+ `The gradient legend data source cannot find a resolved scale for channel "${params.channel}".`
186
+ );
187
+ }
188
+
189
+ const publish = () => this.#publishData();
190
+ this.scaleResolution.addEventListener("domain", publish);
191
+ this.view.registerDisposer(() =>
192
+ this.scaleResolution.removeEventListener("domain", publish)
193
+ );
194
+ }
195
+
196
+ async load() {
197
+ this.#domain = undefined;
198
+ this.#publishData();
199
+ }
200
+
201
+ #publishData() {
202
+ const domain = this.scaleResolution.getDomain();
203
+
204
+ if (!this.#domain || !shallowArrayEquals(domain, this.#domain)) {
205
+ const start = Number(domain[0]);
206
+ const stop = Number(domain.at(-1));
207
+ if (!Number.isFinite(start) || !Number.isFinite(stop)) {
208
+ throw new Error(
209
+ "Gradient legends require a finite numeric scale domain."
210
+ );
211
+ }
212
+
213
+ this.#domain = domain.slice();
214
+ this.reset();
215
+ this.beginBatch({ type: "file" });
216
+ this.publishData(start, stop);
217
+ this.complete();
218
+ }
219
+ }
220
+
221
+ /**
222
+ * @param {number} start
223
+ * @param {number} stop
224
+ */
225
+ publishData(start, stop) {
226
+ throw new Error(
227
+ "Gradient legend data source must implement publishData."
228
+ );
229
+ }
230
+ }
231
+
232
+ export default class LegendGradientSource extends LegendGradientBaseSource {
233
+ get label() {
234
+ return "legendGradientSource";
235
+ }
236
+
237
+ /**
238
+ * @param {number} start
239
+ * @param {number} stop
240
+ */
241
+ publishData(start, stop) {
242
+ const scale = this.scaleResolution.getScale();
243
+ if (scale.type == "threshold") {
244
+ this.#publishThresholdGradient();
245
+ return;
246
+ } else if (isQuantizeScale(scale)) {
247
+ this.#publishQuantizeGradient(start, stop, scale);
248
+ return;
249
+ }
250
+
251
+ const count = this.params.count ?? DEFAULT_SAMPLE_COUNT;
252
+ const positionScale = createNormalizedScale(scale, start, stop);
253
+ const invertPosition = (/** @type {number} */ position) =>
254
+ positionScale.invert(position);
255
+
256
+ for (let index = 0; index < count; index++) {
257
+ const position0 = index / count;
258
+ const position1 = (index + 1) / count;
259
+ const position = (index + 0.5) / count;
260
+ this._propagate({
261
+ position0,
262
+ position1,
263
+ position,
264
+ value: invertPosition(position),
265
+ _legendGradientIndex: index,
266
+ });
267
+ }
268
+ }
269
+
270
+ /**
271
+ * @param {number} start
272
+ * @param {number} stop
273
+ * @param {QuantizeScale} scale
274
+ */
275
+ #publishQuantizeGradient(start, stop, scale) {
276
+ const positionScale = createLinearPositionScale(start, stop);
277
+
278
+ for (const [index, rangeValue] of scale.range().entries()) {
279
+ const [extentStart, extentStop] = scale
280
+ .invertExtent(rangeValue)
281
+ .map(finiteNumber);
282
+ const value = (extentStart + extentStop) / 2;
283
+
284
+ this._propagate({
285
+ position0: positionScale(extentStart),
286
+ position1: positionScale(extentStop),
287
+ position: positionScale(value),
288
+ value,
289
+ _legendGradientIndex: index,
290
+ });
291
+ }
292
+ }
293
+
294
+ #publishThresholdGradient() {
295
+ const domain = this.scaleResolution.getDomain().map(Number);
296
+ const [start, stop] = extendThresholdDomain(domain);
297
+ const positionScale = createLinearPositionScale(start, stop);
298
+ const extendedDomain = [start, ...domain, stop];
299
+
300
+ for (let index = 0; index < extendedDomain.length - 1; index++) {
301
+ const value0 = extendedDomain[index];
302
+ const value1 = extendedDomain[index + 1];
303
+ const value = (value0 + value1) / 2;
304
+ this._propagate({
305
+ position0: positionScale(value0),
306
+ position1: positionScale(value1),
307
+ position: positionScale(value),
308
+ value,
309
+ _legendGradientIndex: index,
310
+ });
311
+ }
312
+ }
313
+ }
314
+
315
+ class LegendGradientTicksSource extends LegendGradientBaseSource {
316
+ get label() {
317
+ return "legendGradientTicksSource";
318
+ }
319
+
320
+ /**
321
+ * @param {number} start
322
+ * @param {number} stop
323
+ */
324
+ publishData(start, stop) {
325
+ const scale = this.scaleResolution.getScale();
326
+ const positionExtent =
327
+ scale.type == "threshold"
328
+ ? extendThresholdDomain(
329
+ this.scaleResolution.getDomain().map(Number)
330
+ )
331
+ : [start, stop];
332
+ const positionScale = createNormalizedScale(
333
+ scale,
334
+ positionExtent[0],
335
+ positionExtent[1]
336
+ );
337
+ const requestedCount = this.params.count ?? DEFAULT_TICK_COUNT;
338
+ const count = tickCount(scale, requestedCount, undefined);
339
+ const format = tickFormat(scale, requestedCount, this.params.format);
340
+ const values = this.params.values
341
+ ? this.params.values.map(finiteNumber).filter((value) => {
342
+ const position = positionScale(value);
343
+ return (
344
+ Number.isFinite(position) &&
345
+ position >= 0 &&
346
+ position <= 1
347
+ );
348
+ })
349
+ : isQuantizeScale(scale)
350
+ ? scale.thresholds().map(finiteNumber)
351
+ : tickValues(scale, count).map(finiteNumber);
352
+
353
+ for (const value of values) {
354
+ const label = format(value);
355
+ if (!label) {
356
+ continue;
357
+ }
358
+
359
+ this._propagate({
360
+ value,
361
+ position: positionScale(value),
362
+ label,
363
+ });
364
+ }
365
+ }
366
+ }
367
+
368
+ /**
369
+ * @param {import("../../../spec/data.js").LazyDataParams} params
370
+ * @returns {params is import("../../../spec/data.js").LegendGradientData}
371
+ */
372
+ function isLegendGradientSource(params) {
373
+ return params?.type == "legendGradient";
374
+ }
375
+
376
+ /**
377
+ * @param {import("../../../spec/data.js").LazyDataParams} params
378
+ * @returns {params is import("../../../spec/data.js").LegendGradientTicksData}
379
+ */
380
+ function isLegendGradientTicksSource(params) {
381
+ return params?.type == "legendGradientTicks";
382
+ }
383
+
384
+ registerBuiltInLazyDataSource(isLegendGradientSource, LegendGradientSource);
385
+ registerBuiltInLazyDataSource(
386
+ isLegendGradientTicksSource,
387
+ LegendGradientTicksSource
388
+ );
@@ -4,18 +4,20 @@
4
4
  */
5
5
  export default class MockLazySource extends SingleAxisLazySource {
6
6
  /**
7
- * @param {{ channel?: import("../../../spec/channel.js").PrimaryPositionalChannel, delay?: number, data?: import("../../flowNode.js").Datum[] }} params
7
+ * @param {{ channel?: import("../../../spec/channel.js").PrimaryPositionalChannel, delay?: number, data?: import("../../flowNode.js").Datum[], url?: any }} params
8
8
  * @param {import("../../../view/view.js").default} view
9
9
  */
10
10
  constructor(params: {
11
11
  channel?: import("../../../spec/channel.js").PrimaryPositionalChannel;
12
12
  delay?: number;
13
13
  data?: import("../../flowNode.js").Datum[];
14
+ url?: any;
14
15
  }, view: import("../../../view/view.js").default);
15
16
  params: {
16
17
  channel?: import("../../../spec/channel.js").PrimaryPositionalChannel;
17
18
  delay?: number;
18
19
  data?: import("../../flowNode.js").Datum[];
20
+ url?: any;
19
21
  };
20
22
  delay: number;
21
23
  /** @type {ReturnType<typeof setTimeout> | undefined} */
@@ -24,6 +26,7 @@ export default class MockLazySource extends SingleAxisLazySource {
24
26
  * @override
25
27
  */
26
28
  override onDomainChanged(): void;
29
+ #private;
27
30
  }
28
31
  import SingleAxisLazySource from "./singleAxisLazySource.js";
29
32
  //# sourceMappingURL=mockLazySource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mockLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/mockLazySource.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IACI;;;OAGG;IACH,oBAHW;QAAE,OAAO,CAAC,EAAE,OAAO,0BAA0B,EAAE,wBAAwB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,mBAAmB,EAAE,KAAK,EAAE,CAAA;KAAE,QACrI,OAAO,uBAAuB,EAAE,OAAO,EAgBjD;IAXG;kBANmB,OAAO,0BAA0B,EAAE,wBAAwB;gBAAU,MAAM;eAAS,OAAO,mBAAmB,EAAE,KAAK,EAAE;MAMtH;IACpB,cAA8B;IAC9B,wDAAwD;IACxD,cADW,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CACvB;IAUjC;;OAEG;IACH,iCAYC;CACJ;iCA3CgC,2BAA2B"}
1
+ {"version":3,"file":"mockLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/mockLazySource.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;OAGG;IACH,oBAHW;QAAE,OAAO,CAAC,EAAE,OAAO,0BAA0B,EAAE,wBAAwB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,mBAAmB,EAAE,KAAK,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,QAChJ,OAAO,uBAAuB,EAAE,OAAO,EA4BjD;IAvBG;kBANmB,OAAO,0BAA0B,EAAE,wBAAwB;gBAAU,MAAM;eAAS,OAAO,mBAAmB,EAAE,KAAK,EAAE;cAAQ,GAAG;MAMjI;IACpB,cAA8B;IAC9B,wDAAwD;IACxD,cADW,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CACvB;IAsBjC;;OAEG;IACH,iCAoBC;;CAqBJ;iCAxFgC,2BAA2B"}
@@ -1,4 +1,9 @@
1
1
  import SingleAxisLazySource from "./singleAxisLazySource.js";
2
+ import {
3
+ createDescriptorFieldAttacher,
4
+ normalizeUrlDescriptors,
5
+ watchUrlDescriptorExpressions,
6
+ } from "../urlDescriptor.js";
2
7
 
3
8
  /**
4
9
  * Testing-only lazy data source that delays data publishing.
@@ -6,7 +11,7 @@ import SingleAxisLazySource from "./singleAxisLazySource.js";
6
11
  */
7
12
  export default class MockLazySource extends SingleAxisLazySource {
8
13
  /**
9
- * @param {{ channel?: import("../../../spec/channel.js").PrimaryPositionalChannel, delay?: number, data?: import("../../flowNode.js").Datum[] }} params
14
+ * @param {{ channel?: import("../../../spec/channel.js").PrimaryPositionalChannel, delay?: number, data?: import("../../flowNode.js").Datum[], url?: any }} params
10
15
  * @param {import("../../../view/view.js").default} view
11
16
  */
12
17
  constructor(params, view) {
@@ -23,6 +28,18 @@ export default class MockLazySource extends SingleAxisLazySource {
23
28
  this.pendingTimer = undefined;
24
29
  }
25
30
  });
31
+
32
+ if (params.url && typeof params.url == "object") {
33
+ watchUrlDescriptorExpressions({
34
+ url: params.url,
35
+ paramRuntime: view.paramRuntime,
36
+ listener: () => {
37
+ this._lastLoadedDomain = undefined;
38
+ this.onDomainChanged();
39
+ },
40
+ registerDisposer: (disposer) => this.registerDisposer(disposer),
41
+ });
42
+ }
26
43
  }
27
44
 
28
45
  /**
@@ -34,11 +51,39 @@ export default class MockLazySource extends SingleAxisLazySource {
34
51
  this.pendingTimer = undefined;
35
52
  }
36
53
 
37
- const data = this.params.data ?? [];
54
+ this.setLoadingStatus("loading");
38
55
  this.pendingTimer = setTimeout(() => {
39
56
  this.pendingTimer = undefined;
40
- this.publishData([data]);
41
- this.requestRender();
57
+ this.#resolveData()
58
+ .then((data) => {
59
+ this.publishData([data]);
60
+ this.setLoadingStatus("complete");
61
+ this.requestRender();
62
+ })
63
+ .catch((e) => {
64
+ this.load();
65
+ this.setLoadingStatus("error", e.message);
66
+ });
42
67
  }, this.delay);
43
68
  }
69
+
70
+ async #resolveData() {
71
+ if (!this.params.url) {
72
+ return this.params.data ?? [];
73
+ }
74
+
75
+ const descriptors = await normalizeUrlDescriptors({
76
+ url: this.params.url,
77
+ baseUrl: this.view.getBaseUrl(),
78
+ paramRuntime: this.view.paramRuntime,
79
+ });
80
+
81
+ return descriptors.flatMap((descriptor, i) => {
82
+ const rows = this.params.data ?? [{ x: i, value: descriptor.url }];
83
+ const attachFields = createDescriptorFieldAttacher(
84
+ descriptor.fields
85
+ );
86
+ return rows.map((datum) => attachFields({ ...datum }));
87
+ });
88
+ }
44
89
  }
@@ -1,2 +1,4 @@
1
1
  import "./axisTickSource.js";
2
2
  import "./axisGenomeSource.js";
3
+ import "./legendEntriesSource.js";
4
+ import "./legendGradientSource.js";
@@ -1 +1 @@
1
- {"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAeD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IArBD;;OAEG;IACH,mCAQC;IAyBD;;;;;;;;;;OAUG;IACH,4BAHa,CAAC,YAHH,MAAM,EAAE,UACR,sBAAsB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,GACrD,OAAO,CAAC,CAAC,EAAE,CAAC,CAiDvB;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,YACN,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;mCAhNY,CAAC,IACD,CAAC,gBAAgB,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;oCAI7H,CAAC;UAEJ,sBAAsB,CAAC,CAAC,CAAC;gBACzB,CAAC,iBAAiB,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;;iCAX3G,2BAA2B"}
1
+ {"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAcD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IApBD;;OAEG;IACH,mCAOC;IAyBD;;;;;;;;;;OAUG;IACH,4BAHa,CAAC,YAHH,MAAM,EAAE,UACR,sBAAsB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,GACrD,OAAO,CAAC,CAAC,EAAE,CAAC,CAiDvB;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,YACN,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;mCA/MY,CAAC,IACD,CAAC,gBAAgB,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;oCAI7H,CAAC;UAEJ,sBAAsB,CAAC,CAAC,CAAC;gBACzB,CAAC,iBAAiB,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;;iCAX3G,2BAA2B"}
@@ -26,8 +26,8 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
26
26
  /** @type {number[]} */
27
27
  #lastQuantizedInterval = [0, 0];
28
28
 
29
- /** @type {number[]} */
30
- #lastDomain = [0, 0];
29
+ /** @type {number[] | undefined} */
30
+ #lastDomain;
31
31
 
32
32
  #lastWindowSize = 0;
33
33
 
@@ -91,9 +91,8 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
91
91
  * @protected
92
92
  */
93
93
  reloadLastDomain() {
94
- const domain = this.#lastDomain;
94
+ const domain = this.#lastDomain ?? this.scaleResolution.getDomain();
95
95
 
96
- this.#lastDomain = [0, 0];
97
96
  this.#lastQuantizedInterval = [0, 0];
98
97
  this._lastLoadedDomain = undefined;
99
98
 
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * @template T
3
+ * @template P
3
4
  * @abstract
4
5
  */
5
- export default class TabixSource<T> extends SingleAxisWindowedSource {
6
+ export default class TabixSource<T, P> extends SingleAxisWindowedSource {
6
7
  /**
7
8
  * @param {import("../../../spec/data.js").TabixData} params
8
9
  * @param {import("../../../view/view.js").default} view
@@ -11,23 +12,27 @@ export default class TabixSource<T> extends SingleAxisWindowedSource {
11
12
  params: import("../../../spec/data.js").TabixData;
12
13
  /**
13
14
  * @param {string} header
15
+ * @param {import("@gmod/tabix").TabixIndexedFile} tbiIndex
14
16
  * @protected
17
+ * @returns {Promise<P>}
15
18
  */
16
- protected _handleHeader(header: string): Promise<void>;
19
+ protected _createParser(header: string, tbiIndex: import("@gmod/tabix").TabixIndexedFile): Promise<P>;
17
20
  /**
18
21
  * Read a prefix of the Tabix file and decode it as text.
19
22
  *
23
+ * @param {import("@gmod/tabix").TabixIndexedFile} tbiIndex
20
24
  * @returns {Promise<string>}
21
25
  * @protected
22
26
  */
23
- protected _readFilePrefix(): Promise<string>;
27
+ protected _readFilePrefix(tbiIndex: import("@gmod/tabix").TabixIndexedFile): Promise<string>;
24
28
  /**
25
29
  * @abstract
26
30
  * @protected
27
31
  * @param {string[]} lines
32
+ * @param {P} parserContext
28
33
  * @returns {T[]}
29
34
  */
30
- protected _parseFeatures(lines: string[]): T[];
35
+ protected _parseFeatures(lines: string[], parserContext: P): T[];
31
36
  #private;
32
37
  }
33
38
  import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
@@ -1 +1 @@
1
- {"version":3,"file":"tabixSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/tabixSource.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,iCAHa,CAAC;IAOV;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EAyCjD;IAzBG,kDAgBC;IA0FL;;;OAGG;IACH,gCAHW,MAAM,iBAKhB;IAED;;;;;OAKG;IACH,6BAHa,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;OAKG;IACH,gCAHW,MAAM,EAAE,GACN,CAAC,EAAE,CAKf;;CACJ;qCAzKoC,+BAA+B"}
1
+ {"version":3,"file":"tabixSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/tabixSource.js"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,iCAJa,CAAC,EACD,CAAC;IAkBV;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EA+CjD;IA/BG,kDAgBC;IA0JL;;;;;OAKG;IACH,gCALW,MAAM,YACN,OAAO,aAAa,EAAE,gBAAgB,GAEpC,OAAO,CAAC,CAAC,CAAC,CAItB;IAED;;;;;;OAMG;IACH,oCAJW,OAAO,aAAa,EAAE,gBAAgB,GACpC,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;;OAMG;IACH,gCAJW,MAAM,EAAE,iBACR,CAAC,GACC,CAAC,EAAE,CAKf;;CAwCJ;qCAhSoC,+BAA+B"}