@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,241 @@
1
+ import { embed, loadSpec } from "./index.js";
2
+
3
+ const DEFAULT_CONTAINER_WIDTH = 600;
4
+ const DEFAULT_CONTAINER_HEIGHT = 320;
5
+ const DEFAULT_LAZY_READY_TIMEOUT_MS = 30_000;
6
+ const READY_DELAY_MS = 100;
7
+
8
+ /**
9
+ * @typedef {{
10
+ * status: string,
11
+ * detail: string,
12
+ * error: string,
13
+ * capture: () => Promise<{ logicalSize: { width: number, height: number }, dataUrl: string }>
14
+ * }} ScreenshotState
15
+ */
16
+
17
+ /**
18
+ * @typedef {Window & typeof globalThis & { __genomeSpyScreenshot: ScreenshotState }} ScreenshotWindow
19
+ */
20
+
21
+ const frameElement = /** @type {HTMLElement} */ (
22
+ document.querySelector("#frame")
23
+ );
24
+ const specPathElement = /** @type {HTMLElement} */ (
25
+ document.querySelector("#spec-path")
26
+ );
27
+ const statusElement = /** @type {HTMLElement} */ (
28
+ document.querySelector("#status")
29
+ );
30
+ const screenshotWindow = /** @type {ScreenshotWindow} */ (window);
31
+
32
+ const query = new URLSearchParams(window.location.search);
33
+ const specUrl = query.get("spec");
34
+ const lazyReadyTimeoutMs = parseTimeoutMs(
35
+ query.get("lazy-timeout-ms"),
36
+ DEFAULT_LAZY_READY_TIMEOUT_MS
37
+ );
38
+
39
+ screenshotWindow.__genomeSpyScreenshot = {
40
+ status: "booting",
41
+ detail: "Booting screenshot harness",
42
+ error: "",
43
+ async capture() {
44
+ throw new Error("Screenshot harness is not ready yet.");
45
+ },
46
+ };
47
+
48
+ if (!specUrl) {
49
+ setFailure("Missing required ?spec=... query parameter.");
50
+ } else {
51
+ specPathElement.textContent = specUrl;
52
+ frameElement.style.width = `${DEFAULT_CONTAINER_WIDTH}px`;
53
+ frameElement.style.height = `${DEFAULT_CONTAINER_HEIGHT}px`;
54
+ void initializeHarness(specUrl);
55
+ }
56
+
57
+ /**
58
+ * @param {string} url
59
+ */
60
+ async function initializeHarness(url) {
61
+ try {
62
+ setState("loading", "Loading spec…");
63
+ await loadSpec(url);
64
+
65
+ setState("embedding", "Embedding visualization…");
66
+ const api = await embed(frameElement, url, {
67
+ onError(error) {
68
+ throw error;
69
+ },
70
+ });
71
+
72
+ if (
73
+ typeof api.getLogicalCanvasSize !== "function" ||
74
+ typeof api.getRenderedBounds !== "function" ||
75
+ typeof api.awaitVisibleLazyData !== "function"
76
+ ) {
77
+ throw new Error(
78
+ "Embed did not return a usable GenomeSpy instance."
79
+ );
80
+ }
81
+
82
+ setState("waitingForData", "Waiting for visible lazy data…");
83
+ await waitForVisibleLazyData(api, lazyReadyTimeoutMs);
84
+
85
+ setState("rendering", "Waiting for initial render…");
86
+ await waitForSettledRender();
87
+
88
+ const logicalSize = resolveExportSize(
89
+ api.getRenderedBounds(),
90
+ api.getLogicalCanvasSize()
91
+ );
92
+
93
+ screenshotWindow.__genomeSpyScreenshot = {
94
+ status: "ready",
95
+ detail: `Ready (${logicalSize.width}x${logicalSize.height}, DPR 1)`,
96
+ error: "",
97
+ async capture() {
98
+ const currentSize = resolveExportSize(
99
+ api.getRenderedBounds(),
100
+ api.getLogicalCanvasSize()
101
+ );
102
+ return {
103
+ logicalSize: currentSize,
104
+ dataUrl: api.exportCanvas(
105
+ currentSize.width,
106
+ currentSize.height,
107
+ 1,
108
+ "white"
109
+ ),
110
+ };
111
+ },
112
+ };
113
+
114
+ setStatus(`Ready (${logicalSize.width}x${logicalSize.height}, DPR 1)`);
115
+ } catch (error) {
116
+ setFailure(error instanceof Error ? error.message : String(error));
117
+ }
118
+ }
119
+
120
+ async function waitForSettledRender() {
121
+ await waitForAnimationFrame();
122
+ await waitForAnimationFrame();
123
+ await wait(READY_DELAY_MS);
124
+ }
125
+
126
+ /**
127
+ * @param {{
128
+ * awaitVisibleLazyData: (signal?: AbortSignal) => Promise<void>
129
+ * }} api
130
+ * @param {number} timeoutMs
131
+ */
132
+ async function waitForVisibleLazyData(api, timeoutMs) {
133
+ const controller = new AbortController();
134
+ let timedOut = false;
135
+ const timeoutId = window.setTimeout(() => {
136
+ timedOut = true;
137
+ controller.abort();
138
+ }, timeoutMs);
139
+
140
+ try {
141
+ await api.awaitVisibleLazyData(controller.signal);
142
+ } catch (error) {
143
+ if (timedOut) {
144
+ throw new Error(
145
+ `Timed out after ${timeoutMs} ms while waiting for visible lazy data.`,
146
+ { cause: error }
147
+ );
148
+ }
149
+
150
+ throw error;
151
+ } finally {
152
+ window.clearTimeout(timeoutId);
153
+ }
154
+ }
155
+
156
+ function waitForAnimationFrame() {
157
+ return new Promise((resolve) => requestAnimationFrame(() => resolve()));
158
+ }
159
+
160
+ /**
161
+ * @param {number} milliseconds
162
+ */
163
+ function wait(milliseconds) {
164
+ return new Promise((resolve) => window.setTimeout(resolve, milliseconds));
165
+ }
166
+
167
+ /**
168
+ * @param {string | null} value
169
+ * @param {number} fallback
170
+ */
171
+ function parseTimeoutMs(value, fallback) {
172
+ if (value == null) {
173
+ return fallback;
174
+ }
175
+
176
+ const parsed = Number(value);
177
+ if (!Number.isFinite(parsed) || parsed <= 0) {
178
+ throw new Error(
179
+ `Invalid lazy-data timeout value: ${value}. Expected a positive number.`
180
+ );
181
+ }
182
+
183
+ return parsed;
184
+ }
185
+
186
+ /**
187
+ * @param {{ width: number | undefined, height: number | undefined }} renderedBounds
188
+ * @param {{ width: number, height: number }} logicalSize
189
+ */
190
+ function resolveExportSize(renderedBounds, logicalSize) {
191
+ return {
192
+ width:
193
+ Number.isFinite(renderedBounds.width) && renderedBounds.width > 0
194
+ ? Math.ceil(renderedBounds.width)
195
+ : Number.isFinite(logicalSize.width) && logicalSize.width > 0
196
+ ? logicalSize.width
197
+ : DEFAULT_CONTAINER_WIDTH,
198
+ height:
199
+ Number.isFinite(renderedBounds.height) && renderedBounds.height > 0
200
+ ? Math.ceil(renderedBounds.height)
201
+ : Number.isFinite(logicalSize.height) && logicalSize.height > 0
202
+ ? logicalSize.height
203
+ : DEFAULT_CONTAINER_HEIGHT,
204
+ };
205
+ }
206
+
207
+ /**
208
+ * @param {string} message
209
+ */
210
+ function setStatus(message) {
211
+ statusElement.textContent = message;
212
+ }
213
+
214
+ /**
215
+ * @param {string} status
216
+ * @param {string} detail
217
+ */
218
+ function setState(status, detail) {
219
+ screenshotWindow.__genomeSpyScreenshot = {
220
+ ...screenshotWindow.__genomeSpyScreenshot,
221
+ status,
222
+ detail,
223
+ };
224
+ setStatus(detail);
225
+ }
226
+
227
+ /**
228
+ * @param {string} message
229
+ */
230
+ function setFailure(message) {
231
+ screenshotWindow.__genomeSpyScreenshot = {
232
+ status: "error",
233
+ detail: message,
234
+ error: message,
235
+ async capture() {
236
+ throw new Error(message);
237
+ },
238
+ };
239
+ statusElement.textContent = message;
240
+ statusElement.style.color = "#a03018";
241
+ }
@@ -9,5 +9,5 @@ if (specUrl) {
9
9
  document.body.innerHTML = `
10
10
  <p style="color: firebrick">No 'spec' url parameter defined!</p>
11
11
  <p>Try this one from the "static" folder, for example:
12
- <a href="?spec=examples/first.json">examples/first.json</a></p>`;
12
+ <a href="?spec=examples/core/first.json">examples/core/first.json</a></p>`;
13
13
  }
@@ -1,4 +1,5 @@
1
1
  import { Align, Baseline, FontStyle, FontWeight } from "./font.js";
2
+ import { ZIndexProps } from "./decoration.js";
2
3
 
3
4
  export interface GenomeAxis extends Axis {
4
5
  chromTicks?: boolean;
@@ -91,7 +92,13 @@ export interface GenomeAxis extends Axis {
91
92
 
92
93
  export type AxisOrient = "top" | "bottom" | "left" | "right";
93
94
 
94
- export interface Axis extends BaseAxis {
95
+ export interface Axis extends BaseAxis, ZIndexProps {
96
+ /**
97
+ * Named style reference(s) resolved from `config.style`.
98
+ * If an array is provided, later styles override earlier ones.
99
+ */
100
+ style?: string | string[];
101
+
95
102
  /**
96
103
  * The orientation of the axis. One of `"top"`, `"bottom"`, `"left"` or `"right"`. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart).
97
104
  *
@@ -131,68 +138,72 @@ export interface Axis extends BaseAxis {
131
138
  * Explicitly set the visible axis tick and label values.
132
139
  */
133
140
  values?: any[];
141
+
142
+ /**
143
+ * Z-order of the axis relative to the view content.
144
+ *
145
+ * Values greater than `0` render after the view marks. Values less than or
146
+ * equal to `0` render before the marks.
147
+ *
148
+ * __Default value:__ `0`, or `10` when the view content is clipped or
149
+ * scrollable.
150
+ */
151
+ zindex?: number;
134
152
  }
135
153
 
136
- export interface BaseAxis<
137
- N = number,
138
- B = boolean,
139
- S = string,
140
- C = string,
141
- FW = string,
142
- FS = string,
143
- > {
154
+ export interface BaseAxis {
144
155
  /**
145
156
  * The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.
146
157
  *
147
158
  * __Default value:__ `30` for y-axis; `undefined` for x-axis.
148
159
  */
149
- minExtent?: N;
160
+ minExtent?: number;
150
161
 
151
162
  /**
152
163
  * The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.
153
164
  *
154
165
  * __Default value:__ `undefined`.
155
166
  */
156
- maxExtent?: N;
167
+ maxExtent?: number;
157
168
 
158
169
  // ---------- Title ----------
159
170
  /**
160
171
  * The padding, in pixels, between title and axis.
161
172
  */
162
- titlePadding?: N;
173
+ titlePadding?: number;
163
174
 
164
175
  /**
165
176
  * Color of the title, can be in hex color code or regular color name.
166
177
  */
167
- titleColor?: C;
178
+ titleColor?: string;
168
179
 
169
180
  /**
170
181
  * Font of the title. (e.g., `"Helvetica Neue"`).
171
182
  */
172
- titleFont?: S;
183
+ titleFont?: string;
173
184
 
174
185
  /**
175
186
  * Font size of the title.
176
187
  *
177
188
  * @minimum 0
178
189
  */
179
- titleFontSize?: N;
190
+ titleFontSize?: number;
180
191
 
181
192
  /**
182
193
  * Font style of the title.
183
194
  */
184
- titleFontStyle?: FS;
195
+ titleFontStyle?: FontStyle;
185
196
 
186
197
  /**
187
198
  * Font weight of the title.
188
199
  * This can be either a string (e.g `"bold"`, `"normal"`) or a number (`100`, `200`, `300`, ..., `900` where `"normal"` = `400` and `"bold"` = `700`).
189
200
  */
190
- titleFontWeight?: FW;
201
+ titleFontWeight?: FontWeight;
191
202
 
192
203
  /**
193
204
  * Opacity of the axis title.
194
205
  */
195
- titleOpacity?: N;
206
+ titleOpacity?: number;
196
207
 
197
208
  // ---------- Domain ----------
198
209
  /**
@@ -224,14 +235,14 @@ export interface BaseAxis<
224
235
  *
225
236
  * __Default value:__ `"gray"`.
226
237
  */
227
- domainColor?: C;
238
+ domainColor?: string;
228
239
 
229
240
  /**
230
241
  * Stroke width of axis domain line
231
242
  *
232
243
  * __Default value:__ `1`
233
244
  */
234
- domainWidth?: N;
245
+ domainWidth?: number;
235
246
 
236
247
  // ---------- Ticks ----------
237
248
  /**
@@ -239,7 +250,7 @@ export interface BaseAxis<
239
250
  *
240
251
  * __Default value:__ `true`
241
252
  */
242
- ticks?: B;
253
+ ticks?: boolean;
243
254
 
244
255
  /**
245
256
  * The stroke cap for the tick lines' ending style. One of `"butt"`, `"round"` or `"square"`.
@@ -253,7 +264,7 @@ export interface BaseAxis<
253
264
  *
254
265
  * __Default value:__ `"gray"`
255
266
  */
256
- tickColor?: C;
267
+ tickColor?: string;
257
268
 
258
269
  /**
259
270
  * An array of alternating [stroke, space] lengths for dashed tick mark lines.
@@ -271,7 +282,7 @@ export interface BaseAxis<
271
282
  * __Default value:__ `5`
272
283
  * @minimum 0
273
284
  */
274
- tickSize?: N;
285
+ tickSize?: number;
275
286
 
276
287
  /**
277
288
  * The width, in pixels, of ticks.
@@ -279,7 +290,7 @@ export interface BaseAxis<
279
290
  * __Default value:__ `1`
280
291
  * @minimum 0
281
292
  */
282
- tickWidth?: N;
293
+ tickWidth?: number;
283
294
 
284
295
  // ---------- Labels ----------
285
296
  /**
@@ -313,36 +324,36 @@ export interface BaseAxis<
313
324
  /**
314
325
  * The color of the tick label, can be in hex color code or regular color name.
315
326
  */
316
- labelColor?: C;
327
+ labelColor?: string;
317
328
 
318
329
  /**
319
330
  * The font of the tick label.
320
331
  */
321
- labelFont?: S;
332
+ labelFont?: string;
322
333
 
323
334
  /**
324
335
  * The font size of the label, in pixels.
325
336
  *
326
337
  * @minimum 0
327
338
  */
328
- labelFontSize?: N;
339
+ labelFontSize?: number;
329
340
 
330
341
  /**
331
342
  * Font style of the title.
332
343
  */
333
- labelFontStyle?: FS;
344
+ labelFontStyle?: FontStyle;
334
345
 
335
346
  /**
336
347
  * Font weight of axis tick labels.
337
348
  */
338
- labelFontWeight?: FW;
349
+ labelFontWeight?: FontWeight;
339
350
 
340
351
  /**
341
352
  * Maximum allowed pixel width of axis tick labels.
342
353
  *
343
354
  * __Default value:__ `180`
344
355
  */
345
- labelLimit?: N;
356
+ labelLimit?: number;
346
357
 
347
358
  /**
348
359
  * The padding, in pixels, between axis and text labels.
@@ -268,15 +268,17 @@ export type FieldOrDatumDefWithCondition<
268
268
  /**
269
269
  * @minProperties 1
270
270
  */
271
- export type ValueDefWithCondition<V extends Value = Value> = Partial<
272
- ValueDef<V | ExprRef>
273
- > & {
271
+ export type ValueDefWithCondition<
272
+ V extends Value = Value,
273
+ T extends Type = Type,
274
+ > = Partial<ValueDef<V | ExprRef>> & {
274
275
  /**
275
276
  * A field definition or one or more value definition(s) with a parameter predicate.
276
277
  */
277
278
  condition?:
278
- | Conditional<FieldDef>
279
- | Conditional<DatumDef>
279
+ | Conditional<MarkPropFieldDef<T>>
280
+ | Conditional<ScaleDatumDef>
281
+ | Conditional<MarkPropExprDef<T>>
280
282
  | Conditional<ValueDef<V | ExprRef>>
281
283
  | Conditional<ValueDef<V | ExprRef>>[];
282
284
  };
@@ -289,7 +291,7 @@ export type MarkPropFieldOrDatumOrExprDef<T extends Type = Type> =
289
291
  export type MarkPropDef<V extends Value, T extends Type = Type> =
290
292
  | FieldOrDatumDefWithCondition<MarkPropFieldDef<T>, V>
291
293
  | FieldOrDatumDefWithCondition<ScaleDatumDef, V>
292
- | ValueDefWithCondition<V>;
294
+ | ValueDefWithCondition<V, T>;
293
295
 
294
296
  export type ColorDef = MarkPropDef<string | null>;
295
297
 
@@ -381,9 +383,13 @@ export type NumericMarkPropDef = MarkPropDef<number>;
381
383
 
382
384
  export type ShapeDef = MarkPropDef<string | null, TypeForShape>;
383
385
 
384
- export interface StringFieldDef extends FieldDefWithoutScale, FormatMixins {}
386
+ export type StringFieldDef = FieldDef<Type> & FormatMixins;
385
387
 
386
- export type TextDef = StringFieldDef | StringDatumDef | ExprDef; // TODO: Conditions
388
+ export type TextDef =
389
+ | StringFieldDef
390
+ | StringDatumDef
391
+ | ExprDef
392
+ | ValueDef<string>; // TODO: Conditions
387
393
 
388
394
  export type ChannelDef = Exclude<
389
395
  Encoding[keyof Encoding],
@@ -549,5 +555,5 @@ export interface Encoding {
549
555
  // TODO: proper type
550
556
  facetIndex?: FieldDefWithoutScale;
551
557
 
552
- semanticScore?: FieldDefWithoutScale;
558
+ semanticScore?: FieldDefWithoutScale & Partial<TypeMixins<Type>>;
553
559
  }