@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
@@ -1,14 +1,16 @@
1
1
  import LayerView from "./layerView.js";
2
2
  import { FlexDimensions } from "./layout/flexLayout.js";
3
+ import UnitView from "./unitView.js";
3
4
  import { markViewAsNonAddressable } from "./viewSelectors.js";
5
+ import { getConfiguredAxisDefaults } from "../config/axisConfig.js";
4
6
 
5
7
  const CHROM_LAYER_NAME = "chromosome_ticks_and_labels";
6
-
7
- /** @type {Record<import("../spec/channel.js").PrimaryPositionalChannel, import("../spec/view.js").GeometricDimension>} */
8
- const CHANNEL_DIMENSIONS = {
9
- x: "width",
10
- y: "height",
11
- };
8
+ const LABELS_LAYER_NAME = "labels_main";
9
+ const TICKS_AND_LABELS_LAYER_NAME = "ticks_and_labels";
10
+ const AXIS_EXTENT_PARAM = "axisExtent";
11
+ const LABEL_WIDTH_FIELD = "_labelWidth";
12
+ const Y_AXIS_LABEL_HEURISTIC_PX = 10;
13
+ const AUTO_EXTENT_GROW_THRESHOLD_PX = 2;
12
14
 
13
15
  /**
14
16
  * @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
@@ -49,6 +51,20 @@ export function orient2channel(slot) {
49
51
  *
50
52
  */
51
53
  export default class AxisView extends LayerView {
54
+ #effectiveExtent;
55
+
56
+ #axisExtentSetter;
57
+
58
+ /** @type {UnitView | undefined} */
59
+ #labelsView;
60
+
61
+ // This assumes the labels collector identity stays stable for the lifetime
62
+ // of the AxisView. If flow reinitialization starts replacing collectors for
63
+ // existing axis views, track the collector instance instead of a boolean.
64
+ #labelsObserverAttached = false;
65
+
66
+ #measurementScheduled = false;
67
+
52
68
  /**
53
69
  *
54
70
  * @typedef {import("../spec/view.js").LayerSpec} LayerSpec
@@ -57,8 +73,6 @@ export default class AxisView extends LayerView {
57
73
  * @typedef {import("../spec/axis.js").GenomeAxis} GenomeAxis
58
74
  * @typedef {import("../spec/axis.js").AxisOrient} AxisOrient
59
75
  * @typedef {import("./layout/flexLayout.js").SizeDef} SizeDef
60
- *
61
- * @typedef {Axis & { extent: number }} AugmentedAxis
62
76
  */
63
77
 
64
78
  /**
@@ -70,20 +84,35 @@ export default class AxisView extends LayerView {
70
84
  * @param {import("./view.js").ViewOptions} [options]
71
85
  */
72
86
  constructor(axisProps, type, context, layoutParent, dataParent, options) {
73
- // Now the presence of genomeAxis is based on field type, not scale type.
74
- // TODO: Use scale instead. However, it would make the initialization much more
75
- // complex because scales are not available before scale resolution.
76
- const genomeAxis = type == "locus";
87
+ const channel = orient2channel(axisProps.orient);
88
+ const configuredDefaults = getConfiguredAxisDefaults(
89
+ dataParent.getConfigScopes(),
90
+ {
91
+ channel,
92
+ orient: axisProps.orient,
93
+ type: /** @type {import("../spec/channel.js").Type} */ (type),
94
+ style: axisProps.style,
95
+ }
96
+ );
77
97
 
78
- // TODO: Compute extent
98
+ /** @type {Axis} */
99
+ const preliminaryAxisProps = {
100
+ ...configuredDefaults,
101
+ ...axisProps,
102
+ };
79
103
 
80
104
  /** @type {Axis | GenomeAxis} */
81
105
  const fullAxisProps = {
82
- ...(genomeAxis ? defaultGenomeAxisProps : defaultAxisProps),
83
- ...getDefaultAngleAndAlign(type, axisProps),
106
+ ...configuredDefaults,
107
+ ...getDefaultAngleAndAlign(type, preliminaryAxisProps),
84
108
  ...axisProps,
85
109
  };
86
110
 
111
+ // Now the presence of genomeAxis is based on field type, not scale type.
112
+ // TODO: Use scale instead. However, it would make the initialization much more
113
+ // complex because scales are not available before scale resolution.
114
+ const genomeAxis = type == "locus";
115
+
87
116
  super(
88
117
  genomeAxis
89
118
  ? createGenomeAxis(fullAxisProps, type)
@@ -99,10 +128,37 @@ export default class AxisView extends LayerView {
99
128
  );
100
129
 
101
130
  this.axisProps = fullAxisProps;
131
+ this.#effectiveExtent = getExtent(fullAxisProps);
132
+ this.#axisExtentSetter = this.paramRuntime.allocateSetter(
133
+ AXIS_EXTENT_PARAM,
134
+ this.#effectiveExtent
135
+ );
102
136
 
103
137
  markViewAsNonAddressable(this, { skipSubtree: true });
104
138
  }
105
139
 
140
+ async initializeChildren() {
141
+ await super.initializeChildren();
142
+
143
+ const labelsView = this.getDescendants().find(
144
+ (view) =>
145
+ view instanceof UnitView && view.name === LABELS_LAYER_NAME
146
+ );
147
+ if (labelsView instanceof UnitView) {
148
+ this.#labelsView = labelsView;
149
+ }
150
+
151
+ if (!this.axisProps.labels || !this.#labelsView) {
152
+ return;
153
+ }
154
+
155
+ this.registerDisposer(
156
+ this._addBroadcastHandler("subtreeDataReady", () =>
157
+ this.#ensureLabelsObserver()
158
+ )
159
+ );
160
+ }
161
+
106
162
  getSize() {
107
163
  /** @type {SizeDef} */
108
164
  const perpendicularSize = { px: this.getPerpendicularSize() };
@@ -118,91 +174,181 @@ export default class AxisView extends LayerView {
118
174
  }
119
175
 
120
176
  getPerpendicularSize() {
121
- return getExtent(this.axisProps);
177
+ return this.#effectiveExtent;
122
178
  }
123
179
 
124
180
  isPickingSupported() {
125
181
  return false;
126
182
  }
183
+
184
+ #scheduleAutoExtentMeasurement() {
185
+ if (this.#measurementScheduled) {
186
+ return;
187
+ }
188
+
189
+ this.#measurementScheduled = true;
190
+ queueMicrotask(() => {
191
+ this.#measurementScheduled = false;
192
+ this.#updateAutoExtent();
193
+ });
194
+ }
195
+
196
+ #ensureLabelsObserver() {
197
+ if (this.#labelsObserverAttached) {
198
+ return;
199
+ }
200
+
201
+ const collector = this.#labelsView?.getCollector();
202
+ if (!collector) {
203
+ return;
204
+ }
205
+
206
+ this.#labelsObserverAttached = true;
207
+ this.registerDisposer(
208
+ collector.observe(() => this.#scheduleAutoExtentMeasurement())
209
+ );
210
+
211
+ if (collector.completed) {
212
+ this.#scheduleAutoExtentMeasurement();
213
+ }
214
+ }
215
+
216
+ #updateAutoExtent() {
217
+ const channel = orient2channel(this.axisProps.orient);
218
+ const scaleResolution = this.dataParent.getScaleResolution(channel);
219
+ if (
220
+ scaleResolution &&
221
+ !scaleResolution.isDomainDefinedExplicitly() &&
222
+ !scaleResolution.isDomainInitialized()
223
+ ) {
224
+ return;
225
+ }
226
+
227
+ const measuredLabelExtent = getMeasuredLabelExtent(
228
+ this.axisProps,
229
+ this.context,
230
+ this.#labelsView
231
+ );
232
+ if (measuredLabelExtent === undefined) {
233
+ return;
234
+ }
235
+
236
+ const nextExtent = getExtent(this.axisProps, measuredLabelExtent);
237
+ const willGrow =
238
+ nextExtent >= this.#effectiveExtent + AUTO_EXTENT_GROW_THRESHOLD_PX;
239
+
240
+ if (!willGrow) {
241
+ return;
242
+ }
243
+
244
+ this.#effectiveExtent = nextExtent;
245
+ this.#axisExtentSetter(nextExtent);
246
+ this.invalidateSizeCache();
247
+ this.context.requestLayoutReflow();
248
+ }
127
249
  }
128
250
 
129
251
  /**
130
252
  * @param {Axis} axisProps
253
+ * @param {number} [measuredLabelExtent]
131
254
  */
132
- function getExtent(axisProps) {
133
- const mainChannel = orient2channel(axisProps.orient);
134
-
255
+ function getExtent(axisProps, measuredLabelExtent) {
135
256
  /** @type {number} */
257
+ let extent = getFixedAxisExtent(axisProps);
258
+
259
+ if (axisProps.labels) {
260
+ extent += measuredLabelExtent ?? getHeuristicLabelExtent(axisProps);
261
+ }
262
+
263
+ // TODO: Include chrom ticks and labels!
264
+
265
+ return clampAxisExtent(axisProps, extent);
266
+ }
267
+
268
+ /**
269
+ * @param {Axis} axisProps
270
+ */
271
+ function getFixedAxisExtent(axisProps) {
136
272
  let extent = (axisProps.ticks && axisProps.tickSize) || 0;
137
273
 
138
274
  if (axisProps.labels) {
139
275
  extent += axisProps.labelPadding;
140
- if (mainChannel == "x") {
141
- extent += axisProps.labelFontSize;
142
- } else {
143
- extent += 30; // TODO: Measure label lengths!
144
- }
145
276
  }
277
+
146
278
  if (axisProps.title) {
147
279
  extent += axisProps.titlePadding + axisProps.titleFontSize;
148
280
  }
149
281
 
150
- // TODO: Include chrom ticks and labels!
282
+ return extent;
283
+ }
284
+
285
+ /**
286
+ * @param {Axis} axisProps
287
+ */
288
+ function getHeuristicLabelExtent(axisProps) {
289
+ return orient2channel(axisProps.orient) == "x"
290
+ ? axisProps.labelFontSize
291
+ : Y_AXIS_LABEL_HEURISTIC_PX;
292
+ }
151
293
 
152
- extent = Math.min(
294
+ /**
295
+ * @param {Axis} axisProps
296
+ * @param {number} extent
297
+ */
298
+ function clampAxisExtent(axisProps, extent) {
299
+ return Math.min(
153
300
  axisProps.maxExtent || Infinity,
154
301
  Math.max(axisProps.minExtent || 0, extent)
155
302
  );
156
-
157
- return extent;
158
303
  }
159
304
 
160
- // Based on: https://vega.github.io/vega-lite/docs/axis.html
161
- // TODO: The defaults should be taken from config (theme)
162
- /** @type {Axis} */
163
- const defaultAxisProps = {
164
- values: null,
165
-
166
- minExtent: 20,
167
- maxExtent: Infinity,
168
- offset: 0, // TODO: Implement
169
-
170
- domain: true,
171
- domainWidth: 1,
172
- domainColor: "gray",
173
- domainDash: null,
174
- domainDashOffset: 0,
175
- domainCap: "square", // Make 1px caps crisp
176
-
177
- ticks: true,
178
- tickSize: 5,
179
- tickWidth: 1,
180
- tickColor: "gray",
181
- tickDash: null,
182
- tickDashOffset: 0,
183
- tickCap: "square", // Make 1px caps crisp
184
-
185
- // TODO: tickBand
186
-
187
- tickCount: null,
188
- tickMinStep: null,
189
-
190
- labels: true,
191
- labelAlign: "center",
192
- labelBaseline: "middle",
193
- labelPadding: 4,
194
- labelFontSize: 10,
195
- labelLimit: 180, // TODO
196
- labelColor: "black",
197
- format: null,
198
-
199
- titleColor: "black",
200
- titleFont: "sans-serif",
201
- titleFontSize: 10,
202
- titlePadding: 3,
203
-
204
- // TODO: titleX, titleY, titleAngle, titleAlign, etc
205
- };
305
+ /**
306
+ * @param {Axis} axisProps
307
+ * @param {import("../types/viewContext.js").default} context
308
+ * @param {UnitView | undefined} labelsView
309
+ */
310
+ function getMeasuredLabelExtent(axisProps, context, labelsView) {
311
+ const collector = labelsView?.getCollector();
312
+ if (!collector?.completed) {
313
+ return undefined;
314
+ }
315
+
316
+ let maxWidth = 0;
317
+ collector.visitData((datum) => {
318
+ maxWidth = Math.max(maxWidth, Number(datum[LABEL_WIDTH_FIELD]) || 0);
319
+ });
320
+
321
+ const font = axisProps.labelFont
322
+ ? context.fontManager.getFont(
323
+ axisProps.labelFont,
324
+ /** @type {import("../spec/font.js").FontStyle | undefined} */ (
325
+ axisProps.labelFontStyle
326
+ ),
327
+ /** @type {import("../spec/font.js").FontWeight | undefined} */ (
328
+ axisProps.labelFontWeight
329
+ )
330
+ )
331
+ : context.fontManager.getDefaultFont();
332
+ const metrics = font.metrics;
333
+ if (!metrics) {
334
+ return undefined;
335
+ }
336
+
337
+ const labelHeight =
338
+ ((metrics.capHeight + metrics.descent) / metrics.common.base) *
339
+ axisProps.labelFontSize;
340
+
341
+ const radians = (axisProps.labelAngle * Math.PI) / 180;
342
+ const absSin = Math.abs(Math.sin(radians));
343
+ const absCos = Math.abs(Math.cos(radians));
344
+
345
+ const perpendicularExtent =
346
+ orient2channel(axisProps.orient) == "x"
347
+ ? maxWidth * absSin + labelHeight * absCos
348
+ : maxWidth * absCos + labelHeight * absSin;
349
+
350
+ return Math.ceil(perpendicularExtent);
351
+ }
206
352
 
207
353
  /**
208
354
  * @param {string} type
@@ -258,7 +404,7 @@ function getDefaultAngleAndAlign(type, axisProps) {
258
404
  function createAxis(axisProps, type) {
259
405
  // TODO: Ensure that no channels except the positional ones are shared
260
406
 
261
- const ap = { ...axisProps, extent: getExtent(axisProps) };
407
+ const ap = axisProps;
262
408
 
263
409
  const main = orient2channel(ap.orient);
264
410
  const secondary = getPerpendicularChannel(main);
@@ -294,13 +440,27 @@ function createAxis(axisProps, type) {
294
440
  * @return {import("../spec/view.js").UnitSpec}
295
441
  */
296
442
  const createLabels = () => ({
297
- name: "labels",
443
+ name: LABELS_LAYER_NAME,
444
+ transform: [
445
+ {
446
+ type: "measureText",
447
+ field: "label",
448
+ as: LABEL_WIDTH_FIELD,
449
+ fontSize: ap.labelFontSize,
450
+ font: ap.labelFont,
451
+ fontStyle: ap.labelFontStyle,
452
+ fontWeight: ap.labelFontWeight,
453
+ },
454
+ ],
298
455
  mark: {
299
456
  type: "text",
300
457
  clip: false,
301
458
  align: ap.labelAlign,
302
459
  angle: ap.labelAngle,
303
460
  baseline: ap.labelBaseline,
461
+ font: ap.labelFont,
462
+ fontStyle: ap.labelFontStyle,
463
+ fontWeight: ap.labelFontWeight,
304
464
  [secondary + "Offset"]:
305
465
  (ap.tickSize + ap.labelPadding) * offsetDirection,
306
466
  [secondary]: anchor,
@@ -331,7 +491,11 @@ function createAxis(axisProps, type) {
331
491
  encoding: {
332
492
  [secondary]: { value: anchor },
333
493
  [secondary + "2"]: {
334
- value: anchor - (ap.tickSize / ap.extent) * (anchor ? 1 : -1),
494
+ value: {
495
+ expr: `${anchor} - ${ap.tickSize} / ${AXIS_EXTENT_PARAM} * ${
496
+ anchor ? 1 : -1
497
+ }`,
498
+ },
335
499
  },
336
500
  },
337
501
  });
@@ -363,7 +527,7 @@ function createAxis(axisProps, type) {
363
527
  const createTicksAndLabels = () => {
364
528
  /** @type {LayerSpec} */
365
529
  const spec = {
366
- name: "ticks_and_labels",
530
+ name: TICKS_AND_LABELS_LAYER_NAME,
367
531
  encoding: {
368
532
  [main]: makeMainDomainDef(),
369
533
  },
@@ -386,7 +550,6 @@ function createAxis(axisProps, type) {
386
550
  // Force the resolution towards the parent view even if it has "independent" behavior
387
551
  resolve: { scale: { [main]: "forced" } },
388
552
  domainInert: true,
389
- [CHANNEL_DIMENSIONS[getPerpendicularChannel(main)]]: ap.extent,
390
553
  data: {
391
554
  lazy: {
392
555
  type: "axisTicks",
@@ -412,34 +575,13 @@ function createAxis(axisProps, type) {
412
575
  return axisSpec;
413
576
  }
414
577
 
415
- /** @type {import("../spec/axis.js").GenomeAxis} */
416
- const defaultGenomeAxisProps = {
417
- ...defaultAxisProps,
418
-
419
- chromTicks: true,
420
- chromTickSize: 18,
421
- chromTickWidth: 1,
422
- chromTickColor: "#989898",
423
- chromTickDash: [4, 2],
424
- chromTickDashOffset: 1,
425
-
426
- chromLabels: true,
427
- chromLabelFontSize: 13,
428
- chromLabelFontWeight: "normal",
429
- chromLabelFontStyle: "normal",
430
- chromLabelColor: "black",
431
- chromLabelAlign: "left",
432
- chromLabelPadding: 7,
433
- // TODO: chromLabelAngle
434
- };
435
-
436
578
  /**
437
579
  * @param {GenomeAxis} axisProps
438
580
  * @param {string} type
439
581
  * @returns {LayerSpec}
440
582
  */
441
583
  export function createGenomeAxis(axisProps, type) {
442
- const ap = { ...axisProps, extent: getExtent(axisProps) };
584
+ const ap = axisProps;
443
585
 
444
586
  const main = orient2channel(ap.orient);
445
587
  const secondary = getPerpendicularChannel(main);
@@ -456,8 +598,11 @@ export function createGenomeAxis(axisProps, type) {
456
598
  strokeDash: axisProps.chromTickDash,
457
599
  strokeDashOffset: axisProps.chromTickDashOffset,
458
600
  [secondary]: anchor,
459
- [secondary + "2"]:
460
- anchor - (ap.chromTickSize / ap.extent) * (anchor ? 1 : -1),
601
+ [secondary + "2"]: {
602
+ expr: `${anchor} - ${ap.chromTickSize} / ${AXIS_EXTENT_PARAM} * ${
603
+ anchor ? 1 : -1
604
+ }`,
605
+ },
461
606
  color: axisProps.chromTickColor,
462
607
  size: ap.chromTickWidth,
463
608
  },
@@ -467,7 +612,7 @@ export function createGenomeAxis(axisProps, type) {
467
612
  * @return {import("../spec/view.js").UnitSpec}
468
613
  */
469
614
  const createChromosomeLabels = () => {
470
- /** @type {Partial<import("../spec/mark.js").MarkProps>} */
615
+ /** @type {Partial<import("../spec/mark.js").TextProps>} */
471
616
  let chromLabelMarkProps;
472
617
  switch (ap.orient) {
473
618
  case "top":
@@ -614,10 +759,10 @@ export function createGenomeAxis(axisProps, type) {
614
759
 
615
760
  // TODO: Simplify the following mess
616
761
  axisSpec.layer
617
- .filter((view) => view.name == "ticks_and_labels")
762
+ .filter((view) => view.name == TICKS_AND_LABELS_LAYER_NAME)
618
763
  .forEach((/** @type {LayerSpec} */ view) =>
619
764
  view.layer
620
- .filter((view) => view.name == "labels")
765
+ .filter((view) => view.name == LABELS_LAYER_NAME)
621
766
  .forEach(
622
767
  (
623
768
  /** @type {import("../spec/view.js").UnitSpec} */ view
@@ -12,8 +12,9 @@ export default class ConcatView<TSpec extends import("../spec/view.js").AnyConca
12
12
  * @param {import("./containerView.js").default} layoutParent
13
13
  * @param {import("./view.js").default} dataParent
14
14
  * @param {string} name
15
+ * @param {import("./view.js").ViewOptions} [options]
15
16
  */
16
- constructor(spec: TSpec, context: import("../types/viewContext.js").default, layoutParent: import("./containerView.js").default, dataParent: import("./view.js").default, name: string);
17
+ constructor(spec: TSpec, context: import("../types/viewContext.js").default, layoutParent: import("./containerView.js").default, dataParent: import("./view.js").default, name: string, options?: import("./view.js").ViewOptions);
17
18
  /**
18
19
  * Adds a child spec dynamically. Intended for post-initialization updates.
19
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,gCAHwD,KAAK,SAAhD,OAAQ,iBAAiB,EAAE,aAAc;IAIlD;;;;;;;OAOG;IACH,kBANW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,EAiBhB;IA6BD;;;;;;;;;OASG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,UAClC,MAAM,GACJ,OAAO,CAAC,OAAO,WAAW,EAAE,OAAO,CAAC,CAIhD;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;;CA2EJ;qBA9JoB,wBAAwB"}
1
+ {"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,gCAHwD,KAAK,SAAhD,OAAQ,iBAAiB,EAAE,aAAc;IAIlD;;;;;;;;OAQG;IACH,kBAPW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAkBzC;IA6BD;;;;;;;;;OASG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,UAClC,MAAM,GACJ,OAAO,CAAC,OAAO,WAAW,EAAE,OAAO,CAAC,CAIhD;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;;CA2EJ;qBAhKoB,wBAAwB"}
@@ -20,8 +20,9 @@ export default class ConcatView extends GridView {
20
20
  * @param {import("./containerView.js").default} layoutParent
21
21
  * @param {import("./view.js").default} dataParent
22
22
  * @param {string} name
23
+ * @param {import("./view.js").ViewOptions} [options]
23
24
  */
24
- constructor(spec, context, layoutParent, dataParent, name) {
25
+ constructor(spec, context, layoutParent, dataParent, name, options) {
25
26
  super(
26
27
  spec,
27
28
  context,
@@ -32,7 +33,8 @@ export default class ConcatView extends GridView {
32
33
  ? spec.columns
33
34
  : isVConcatSpec(spec)
34
35
  ? 1
35
- : Infinity
36
+ : Infinity,
37
+ options
36
38
  );
37
39
 
38
40
  this.spec = spec;
@@ -22,6 +22,7 @@ export default class ContainerMutationHelper {
22
22
  * prepareView?: (view: View, index: number, insertionResult: any) => Promise<void>,
23
23
  * afterRemove?: (index: number) => Promise<void>,
24
24
  * defaultName?: (index: number, spec: ViewSpec | ImportSpec) => string,
25
+ * createViewOptions?: import("../types/viewContext.js").CreateViewOptions,
25
26
  * requestLayout?: boolean
26
27
  * }} MutationOptions
27
28
  */
@@ -40,6 +41,7 @@ export default class ContainerMutationHelper {
40
41
  prepareView?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number, insertionResult: any) => Promise<void>;
41
42
  afterRemove?: (index: number) => Promise<void>;
42
43
  defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
44
+ createViewOptions?: import("../types/viewContext.js").CreateViewOptions;
43
45
  requestLayout?: boolean;
44
46
  });
45
47
  container: import("./containerView.js").default<import("../spec/view.js").ContainerSpec>;
@@ -54,6 +56,7 @@ export default class ContainerMutationHelper {
54
56
  prepareView?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number, insertionResult: any) => Promise<void>;
55
57
  afterRemove?: (index: number) => Promise<void>;
56
58
  defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
59
+ createViewOptions?: import("../types/viewContext.js").CreateViewOptions;
57
60
  requestLayout?: boolean;
58
61
  };
59
62
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,yFAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,iEAAM,CA8CzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
1
+ {"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;;OAWG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAZ3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;4BAChD,OAAO,yBAAyB,EAAE,iBAAiB;wBACvD,OAAO;OAW3B;IAFG,yFAA0B;IAC1B;uBAjBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;4BAChD,OAAO,yBAAyB,EAAE,iBAAiB;wBACvD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,iEAAM,CAuDzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
@@ -3,6 +3,7 @@ import {
3
3
  loadViewSubtreeData,
4
4
  } from "../data/flowInit.js";
5
5
  import { configureViewOpacity } from "../genomeSpy/viewHierarchyConfig.js";
6
+ import { ensureAssembliesForView } from "../genome/assemblyPreflight.js";
6
7
  import { finalizeSubtreeGraphics } from "./viewUtils.js";
7
8
 
8
9
  /**
@@ -30,6 +31,7 @@ export default class ContainerMutationHelper {
30
31
  * prepareView?: (view: View, index: number, insertionResult: any) => Promise<void>,
31
32
  * afterRemove?: (index: number) => Promise<void>,
32
33
  * defaultName?: (index: number, spec: ViewSpec | ImportSpec) => string,
34
+ * createViewOptions?: import("../types/viewContext.js").CreateViewOptions,
33
35
  * requestLayout?: boolean
34
36
  * }} MutationOptions
35
37
  */
@@ -61,7 +63,16 @@ export default class ContainerMutationHelper {
61
63
  childSpec,
62
64
  this.container,
63
65
  this.container,
64
- name
66
+ name,
67
+ undefined,
68
+ this.options.createViewOptions
69
+ );
70
+
71
+ // Reminder: ensure assemblies from the real child hierarchy before any
72
+ // downstream work that may initialize scales (axis prep / encoders).
73
+ await ensureAssembliesForView(
74
+ childView,
75
+ this.container.context.genomeStore
65
76
  );
66
77
 
67
78
  insertAt(insertIndex, childSpec);
@@ -35,12 +35,12 @@ export function isSubtreeLazyReady(subtreeRoot: View, readinessRequest: DataRead
35
35
  *
36
36
  * @param {import("../types/viewContext.js").default} context
37
37
  * @param {View} subtreeRoot
38
- * @param {DataReadinessRequest} readinessRequest
38
+ * @param {DataReadinessRequest | undefined} readinessRequest
39
39
  * @param {AbortSignal} [signal]
40
40
  * @param {(view: View) => boolean} [viewFilter]
41
41
  * @returns {Promise<void>}
42
42
  */
43
- export function awaitSubtreeLazyReady(context: import("../types/viewContext.js").default, subtreeRoot: View, readinessRequest: DataReadinessRequest, signal?: AbortSignal, viewFilter?: (view: View) => boolean): Promise<void>;
43
+ export function awaitSubtreeLazyReady(context: import("../types/viewContext.js").default, subtreeRoot: View, readinessRequest: DataReadinessRequest | undefined, signal?: AbortSignal, viewFilter?: (view: View) => boolean): Promise<void>;
44
44
  export type View = import("../view/view.js").default;
45
45
  export type DataReadinessRequest = import("../data/sources/lazy/singleAxisLazySource.js").DataReadinessRequest;
46
46
  //# sourceMappingURL=dataReadiness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataReadiness.d.ts","sourceRoot":"","sources":["../../../src/view/dataReadiness.js"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;;;GAMG;AACH,4CAJW,IAAI,YACJ,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,GACrD,oBAAoB,GAAG,SAAS,CAe5C;AAED;;;;;;;GAOG;AACH,4CALW,IAAI,oBACJ,oBAAoB,eACpB,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAiDnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,oBACJ,oBAAoB,GAAG,SAAS,eAChC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAwDnB;AAED;;;;;;;;;;GAUG;AACH,+CAPW,OAAO,yBAAyB,EAAE,OAAO,eACzC,IAAI,oBACJ,oBAAoB,WACpB,WAAW,eACX,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAAC,IAAI,CAAC,CAyGzB;mBAtQY,OAAO,iBAAiB,EAAE,OAAO;mCACjC,OAAO,8CAA8C,EAAE,oBAAoB"}
1
+ {"version":3,"file":"dataReadiness.d.ts","sourceRoot":"","sources":["../../../src/view/dataReadiness.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;;GAMG;AACH,4CAJW,IAAI,YACJ,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,GACrD,oBAAoB,GAAG,SAAS,CAe5C;AAED;;;;;;;GAOG;AACH,4CALW,IAAI,oBACJ,oBAAoB,eACpB,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAiDnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,oBACJ,oBAAoB,GAAG,SAAS,eAChC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAgBnB;AAED;;;;;;;;;;GAUG;AACH,+CAPW,OAAO,yBAAyB,EAAE,OAAO,eACzC,IAAI,oBACJ,oBAAoB,GAAG,SAAS,WAChC,WAAW,eACX,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GACrB,OAAO,CAAC,IAAI,CAAC,CA0FzB;mBA/MY,OAAO,iBAAiB,EAAE,OAAO;mCACjC,OAAO,8CAA8C,EAAE,oBAAoB"}