@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
@@ -2,6 +2,8 @@ import { primaryPositionalChannels } from "../../encoder/encoder.js";
2
2
  import LayerView from "../layerView.js";
3
3
  import { markViewAsNonAddressable } from "../viewSelectors.js";
4
4
 
5
+ export const INTERVAL_DRAG_ACTIVE_PARAM = "intervalDragActive";
6
+
5
7
  export default class SelectionRect extends LayerView {
6
8
  /**
7
9
  * @typedef {import("../../spec/channel.js").PrimaryPositionalChannel} PrimaryPositionalChannel
@@ -18,6 +20,7 @@ export default class SelectionRect extends LayerView {
18
20
  selectionExpr()
19
21
  );
20
22
  const channels = Object.keys(initialSelection.intervals);
23
+ const { zindex = 1, ...brushMarkProps } = brushConfig;
21
24
 
22
25
  if (primaryPositionalChannels.every((c) => !channels.includes(c))) {
23
26
  throw new Error(
@@ -29,6 +32,12 @@ export default class SelectionRect extends LayerView {
29
32
  const layerSpec = {
30
33
  name: "selectionRect",
31
34
  domainInert: true,
35
+ params: [
36
+ {
37
+ name: INTERVAL_DRAG_ACTIVE_PARAM,
38
+ value: false,
39
+ },
40
+ ],
32
41
  resolve: {
33
42
  scale: {
34
43
  x: "forced",
@@ -72,7 +81,10 @@ export default class SelectionRect extends LayerView {
72
81
  stroke: "black",
73
82
  strokeWidth: 1,
74
83
  strokeOpacity: 0.2,
75
- ...brushConfig,
84
+ cursor: brushMarkProps.cursor ?? {
85
+ expr: `${INTERVAL_DRAG_ACTIVE_PARAM} ? 'grabbing' : 'move'`,
86
+ },
87
+ ...brushMarkProps,
76
88
  },
77
89
  },
78
90
  });
@@ -147,6 +159,9 @@ export default class SelectionRect extends LayerView {
147
159
  }
148
160
  );
149
161
 
162
+ /** @type {number} */
163
+ this._zindex = zindex;
164
+
150
165
  markViewAsNonAddressable(this, { skipSubtree: true });
151
166
 
152
167
  const selectionListener = () => {
@@ -171,6 +186,10 @@ export default class SelectionRect extends LayerView {
171
186
 
172
187
  this.registerDisposer(selectionExpr.subscribe(selectionListener));
173
188
  }
189
+
190
+ getZindex() {
191
+ return this._zindex;
192
+ }
174
193
  }
175
194
 
176
195
  /**
@@ -29,6 +29,7 @@ export default class SeparatorView {
29
29
  * @returns {UnitView}
30
30
  */
31
31
  get view(): UnitView;
32
+ getZindex(): number;
32
33
  /**
33
34
  * @param {import("../layout/flexLayout.js").LocSize[]} flexCoords
34
35
  * @param {number} count
@@ -1 +1 @@
1
- {"version":3,"file":"separatorView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/separatorView.js"],"names":[],"mappings":"AA2NA;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,GAC/D,OAAO,oBAAoB,EAAE,cAAc,GAAG,IAAI,CAiB9D;AA/ND;;GAEG;AACH;IAsBI;;;;;;;;;OASG;IACH,+EATW;QACN,SAAS,EAAE,kBAAkB,CAAC;QAC9B,KAAK,EAAE,OAAO,oBAAoB,EAAE,cAAc,CAAC;QACnD,OAAO,EAAE,OAAO,4BAA4B,EAAE,OAAO,CAAC;QACtD,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;QACpD,UAAU,EAAE,OAAO,YAAY,EAAE,OAAO,CAAC;QACzC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;KACpC,EAqBH;IAED;;OAEG;IACH,YAFa,QAAQ,CAIpB;IAED;;;;;;;OAOG;IACH,mBAPW,OAAO,yBAAyB,EAAE,OAAO,EAAE,SAC3C,MAAM,UACN,OAAO,wBAAwB,EAAE,OAAO,eACxC,CAAC,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,iBACtD,OAAO,YACP,OAAO,sBAAsB,EAAE,OAAO,QAKhD;IAED;;;;OAIG;IACH,gBAJW,OAAO,6CAA6C,EAAE,OAAO,UAC7D,OAAO,wBAAwB,EAAE,OAAO,WACxC,OAAO,0BAA0B,EAAE,gBAAgB,QAI7D;;CAuHJ;iCArNY,YAAY,GAAG,UAAU;qBAJjB,gBAAgB"}
1
+ {"version":3,"file":"separatorView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/separatorView.js"],"names":[],"mappings":"AAoOA;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,GAC/D,OAAO,oBAAoB,EAAE,cAAc,GAAG,IAAI,CAiB9D;AAxOD;;GAEG;AACH;IAyBI;;;;;;;;;OASG;IACH,+EATW;QACN,SAAS,EAAE,kBAAkB,CAAC;QAC9B,KAAK,EAAE,OAAO,oBAAoB,EAAE,cAAc,CAAC;QACnD,OAAO,EAAE,OAAO,4BAA4B,EAAE,OAAO,CAAC;QACtD,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;QACpD,UAAU,EAAE,OAAO,YAAY,EAAE,OAAO,CAAC;QACzC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;KACpC,EAuBH;IAED;;OAEG;IACH,YAFa,QAAQ,CAIpB;IAED,oBAEC;IAED;;;;;;;OAOG;IACH,mBAPW,OAAO,yBAAyB,EAAE,OAAO,EAAE,SAC3C,MAAM,UACN,OAAO,wBAAwB,EAAE,OAAO,eACxC,CAAC,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,iBACtD,OAAO,YACP,OAAO,sBAAsB,EAAE,OAAO,QAKhD;IAED;;;;OAIG;IACH,gBAJW,OAAO,6CAA6C,EAAE,OAAO,UAC7D,OAAO,wBAAwB,EAAE,OAAO,WACxC,OAAO,0BAA0B,EAAE,gBAAgB,QAI7D;;CAuHJ;iCA9NY,YAAY,GAAG,UAAU;qBAJjB,gBAAgB"}
@@ -26,6 +26,9 @@ export default class SeparatorView {
26
26
  /** @type {UnitView} */
27
27
  #view;
28
28
 
29
+ /** @type {number} */
30
+ #zindex;
31
+
29
32
  /** @type {import("../../data/flowNode.js").Datum[]} */
30
33
  #data = [];
31
34
 
@@ -58,8 +61,10 @@ export default class SeparatorView {
58
61
  }) {
59
62
  this.#direction = direction;
60
63
  this.#includePlotMargin = props.includePlotMargin ?? true;
64
+ this.#zindex = props.zindex ?? 0;
61
65
  const markProps = { ...props };
62
66
  delete markProps.includePlotMargin;
67
+ delete markProps.zindex;
63
68
  this.#view = this.#createView(
64
69
  markProps,
65
70
  context,
@@ -76,6 +81,10 @@ export default class SeparatorView {
76
81
  return this.#view;
77
82
  }
78
83
 
84
+ getZindex() {
85
+ return this.#zindex;
86
+ }
87
+
79
88
  /**
80
89
  * @param {import("../layout/flexLayout.js").LocSize[]} flexCoords
81
90
  * @param {number} count
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Runs the shared capture/body/bubble interaction frame for a container view.
3
+ *
4
+ * @param {import("./view.js").default} view
5
+ * @param {import("../utils/interaction.js").default} event
6
+ * @param {() => void} handler
7
+ */
8
+ export function propagateInteraction(view: import("./view.js").default, event: import("../utils/interaction.js").default, handler: () => void): void;
9
+ /**
10
+ * Propagates an interaction to a single hit-tested surface and optionally runs
11
+ * a follow-up action such as zoom handling.
12
+ *
13
+ * @param {import("../utils/interaction.js").default} event
14
+ * @param {() => boolean} hitTest
15
+ * @param {() => void} propagate
16
+ * @param {() => void} [afterPropagate]
17
+ * @returns {boolean}
18
+ */
19
+ export function propagateInteractionSurface(event: import("../utils/interaction.js").default, hitTest: () => boolean, propagate: () => void, afterPropagate?: () => void): boolean;
20
+ //# sourceMappingURL=interactionRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactionRouting.d.ts","sourceRoot":"","sources":["../../../src/view/interactionRouting.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,2CAJW,OAAO,WAAW,EAAE,OAAO,SAC3B,OAAO,yBAAyB,EAAE,OAAO,WACzC,MAAM,IAAI,QAgBpB;AAED;;;;;;;;;GASG;AACH,mDANW,OAAO,yBAAyB,EAAE,OAAO,WACzC,MAAM,OAAO,aACb,MAAM,IAAI,mBACV,MAAM,IAAI,GACR,OAAO,CAqBnB"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Runs the shared capture/body/bubble interaction frame for a container view.
3
+ *
4
+ * @param {import("./view.js").default} view
5
+ * @param {import("../utils/interaction.js").default} event
6
+ * @param {() => void} handler
7
+ */
8
+ export function propagateInteraction(view, event, handler) {
9
+ view.handleInteraction(event, true);
10
+
11
+ if (event.stopped) {
12
+ return;
13
+ }
14
+
15
+ handler();
16
+
17
+ if (event.stopped) {
18
+ return;
19
+ }
20
+
21
+ view.handleInteraction(event, false);
22
+ }
23
+
24
+ /**
25
+ * Propagates an interaction to a single hit-tested surface and optionally runs
26
+ * a follow-up action such as zoom handling.
27
+ *
28
+ * @param {import("../utils/interaction.js").default} event
29
+ * @param {() => boolean} hitTest
30
+ * @param {() => void} propagate
31
+ * @param {() => void} [afterPropagate]
32
+ * @returns {boolean}
33
+ */
34
+ export function propagateInteractionSurface(
35
+ event,
36
+ hitTest,
37
+ propagate,
38
+ afterPropagate
39
+ ) {
40
+ if (!hitTest()) {
41
+ return false;
42
+ }
43
+
44
+ propagate();
45
+
46
+ if (event.stopped) {
47
+ return true;
48
+ }
49
+
50
+ afterPropagate?.();
51
+
52
+ return true;
53
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"layerView.d.ts","sourceRoot":"","sources":["../../../src/view/layerView.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,+BAHoD,KAAK,SAA5C,OAAQ,iBAAiB,EAAE,SAAU;IAW9C;;;;;;;;OAQG;IACH,kBAPW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAWzC;IAkCD;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,SAAS,GAAG,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UAC/G,MAAM,GACJ,OAAO,CAAC,SAAS,GAAG,OAAO,eAAe,EAAE,OAAO,CAAC,CAMhE;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;IA6CD,yIAEC;;CA6CJ;0BAtLyB,oBAAoB"}
1
+ {"version":3,"file":"layerView.d.ts","sourceRoot":"","sources":["../../../src/view/layerView.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,+BAHoD,KAAK,SAA5C,OAAQ,iBAAiB,EAAE,SAAU;IAW9C;;;;;;;;OAQG;IACH,kBAPW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAQzC;IAqCD;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,SAAS,GAAG,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UAC/G,MAAM,GACJ,OAAO,CAAC,SAAS,GAAG,OAAO,eAAe,EAAE,OAAO,CAAC,CAMhE;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;IAgDD,yIAEC;;CA6CJ;0BAzLyB,oBAAoB"}
@@ -26,10 +26,7 @@ export default class LayerView extends ContainerView {
26
26
  * @param {import("./view.js").ViewOptions} [options]
27
27
  */
28
28
  constructor(spec, context, layoutParent, dataParent, name, options) {
29
- super(spec, context, layoutParent, dataParent, name, {
30
- layersChildren: true,
31
- ...options,
32
- });
29
+ super(spec, context, layoutParent, dataParent, name, options);
33
30
 
34
31
  this.spec = spec;
35
32
 
@@ -61,6 +58,9 @@ export default class LayerView extends ContainerView {
61
58
  );
62
59
  // TODO: Add view to exception
63
60
  }
61
+ },
62
+ {
63
+ layoutSizeParams: "inherit",
64
64
  }
65
65
  )
66
66
  )
@@ -130,6 +130,9 @@ export default class LayerView extends ContainerView {
130
130
  this.#children.splice(index, 1);
131
131
  },
132
132
  defaultName: () => this.getNextAutoName("layer"),
133
+ createViewOptions: {
134
+ layoutSizeParams: "inherit",
135
+ },
133
136
  });
134
137
  }
135
138
 
@@ -168,16 +171,16 @@ export default class LayerView extends ContainerView {
168
171
  }
169
172
 
170
173
  /**
171
- * @param {import("../utils/interactionEvent.js").default} event
174
+ * @param {import("../utils/interaction.js").default} event
172
175
  */
173
- propagateInteractionEvent(event) {
174
- this.handleInteractionEvent(undefined, event, true);
176
+ propagateInteraction(event) {
177
+ this.handleInteraction(event, true);
175
178
  for (let i = this.#children.length - 1; i >= 0; i--) {
176
- this.#children[i].propagateInteractionEvent(event);
179
+ this.#children[i].propagateInteraction(event);
177
180
  if (event.stopped) {
178
181
  return;
179
182
  }
180
183
  }
181
- this.handleInteractionEvent(undefined, event, false);
184
+ this.handleInteraction(event, false);
182
185
  }
183
186
  }
@@ -67,7 +67,7 @@ export default class Grid {
67
67
  * @param {number} row
68
68
  */
69
69
  getCellIndex(col, row) {
70
- let i = 0;
70
+ let i;
71
71
 
72
72
  if (this.maxCols == Infinity) {
73
73
  i = row == 0 ? col : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"bufferedViewRenderingContext.d.ts","sourceRoot":"","sources":["../../../../src/view/renderingContext/bufferedViewRenderingContext.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH;;;GAGG;AACH;IA2BI;;;OAGG;IACH,2BAHW,OAAO,0BAA0B,EAAE,sBAAsB,mBACzD,4BAA4B,EActC;IAyCD;;;OAGG;IACH,eAmCC;;CA8EJ;;iBArNS,OAAO,yBAAyB,EAAE,OAAO;;;;gBACzC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;sBAC/B,MAAM;sBACN,OAAO,SAAS,EAAE,eAAe;;;;;iBACjC,MAAM;;iCATiB,2BAA2B"}
1
+ {"version":3,"file":"bufferedViewRenderingContext.d.ts","sourceRoot":"","sources":["../../../../src/view/renderingContext/bufferedViewRenderingContext.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH;;;GAGG;AACH;IA2BI;;;OAGG;IACH,2BAHW,OAAO,0BAA0B,EAAE,sBAAsB,mBACzD,4BAA4B,EActC;IAyCD;;;OAGG;IACH,eAmCC;;CA4EJ;;iBAnNS,OAAO,yBAAyB,EAAE,OAAO;;;;gBACzC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;sBAC/B,MAAM;sBACN,OAAO,SAAS,EAAE,eAAe;;;;;iBACjC,MAAM;;iCATiB,2BAA2B"}
@@ -183,7 +183,6 @@ export default class BufferedViewRenderingContext extends ViewRenderingContext {
183
183
  continue;
184
184
  }
185
185
 
186
- // eslint-disable-next-line no-loop-func
187
186
  this.#batch.push(() => {
188
187
  enabled = mark.unitView.getEffectiveOpacity() > 0;
189
188
  });
@@ -201,7 +200,6 @@ export default class BufferedViewRenderingContext extends ViewRenderingContext {
201
200
  // Render each facet
202
201
  if (!coords.equals(previousCoords)) {
203
202
  this.#batch.push(
204
- // eslint-disable-next-line no-loop-func
205
203
  ifEnabled(() => {
206
204
  // Suppress rendering if viewport is outside the clipRect
207
205
  viewportVisible = mark.setViewport(
@@ -3,23 +3,37 @@
3
3
  * @returns
4
4
  */
5
5
  export function createTestViewContext(viewFactoryOptions?: import("./viewFactory.js").ViewFactoryOptions): import("../types/viewContext.js").default;
6
- export function create<V extends import("./view.js").default>(spec: ViewSpec, viewClass: {
6
+ /**
7
+ * @param {import("./viewFactory.js").ViewFactoryOptions} [viewFactoryOptions]
8
+ * @returns {BroadcastingViewContext}
9
+ */
10
+ export function createBroadcastingTestViewContext(viewFactoryOptions?: import("./viewFactory.js").ViewFactoryOptions): BroadcastingViewContext;
11
+ export function create<V extends import("./view.js").default>(spec: RootSpec, viewClass: {
7
12
  new (...args: any[]): V;
8
13
  }, ViewFactoryOptions?: import("./viewFactory.js").ViewFactoryOptions): Promise<V>;
9
- export function createAndInitialize<V extends import("./view.js").default>(spec: ViewSpec, viewClass: {
14
+ export function createAndInitialize<V extends import("./view.js").default>(spec: RootSpec, viewClass: {
10
15
  new (...args: any[]): V;
11
16
  }, context?: ViewContext, options?: {
12
17
  noData: boolean;
13
18
  implicitRoot: boolean;
14
19
  }): Promise<V>;
20
+ export { createHeadlessEngine };
15
21
  /**
16
22
  * Utils for Jest tests
17
23
  * TODO: Find a better place and convention
18
24
  */
19
- export type ViewSpec = import("../spec/view.js").ViewSpec;
25
+ export type RootSpec = import("../spec/root.js").RootSpec;
20
26
  /**
21
27
  * Utils for Jest tests
22
28
  * TODO: Find a better place and convention
23
29
  */
24
30
  export type ViewContext = import("../types/viewContext.js").default;
31
+ /**
32
+ * Utils for Jest tests
33
+ * TODO: Find a better place and convention
34
+ */
35
+ export type BroadcastingViewContext = ViewContext & {
36
+ emitBroadcast: (root: import("./view.js").default, type: import("../genomeSpy.js").BroadcastEventType, payload?: any) => void;
37
+ };
38
+ import { createHeadlessEngine } from "../genomeSpy/headlessBootstrap.js";
25
39
  //# sourceMappingURL=testUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../../src/view/testUtils.js"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,2DAHW,OAAO,kBAAkB,EAAE,kBAAkB,6CAoEvD;AAGS,uBAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,uBAAuB,OAAO,kBAAkB,EAAE,kBAAkB,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAgBhL,oCAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,YAAY,WAAW,YAAY;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAC,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;;;;;uBAxGpL,OAAO,iBAAiB,EAAE,QAAQ;;;;;0BAClC,OAAO,yBAAyB,EAAE,OAAO"}
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../../src/view/testUtils.js"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,2DAHW,OAAO,kBAAkB,EAAE,kBAAkB,6CAOvD;AAED;;;GAGG;AACH,uEAHW,OAAO,kBAAkB,EAAE,kBAAkB,GAC3C,uBAAuB,CAmCnC;AAGS,uBAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,uBAAuB,OAAO,kBAAkB,EAAE,kBAAkB,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAqBhL,oCAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,YAAY,WAAW,YAAY;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAC,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;;;;;;uBA/FpL,OAAO,iBAAiB,EAAE,QAAQ;;;;;0BAClC,OAAO,yBAAyB,EAAE,OAAO;;;;;sCACzC,WAAW,GAAG;IACtB,aAAa,EAAE,CACb,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,EACjC,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAClD,OAAO,CAAC,EAAE,GAAG,KACV,IAAI,CAAA;CACV;qCAcG,mCAAmC"}
@@ -2,8 +2,15 @@
2
2
  * Utils for Jest tests
3
3
  * TODO: Find a better place and convention
4
4
  *
5
- * @typedef {import("../spec/view.js").ViewSpec} ViewSpec
5
+ * @typedef {import("../spec/root.js").RootSpec} RootSpec
6
6
  * @typedef {import("../types/viewContext.js").default} ViewContext
7
+ * @typedef {ViewContext & {
8
+ * emitBroadcast: (
9
+ * root: import("./view.js").default,
10
+ * type: import("../genomeSpy.js").BroadcastEventType,
11
+ * payload?: any
12
+ * ) => void
13
+ * }} BroadcastingViewContext
7
14
  */
8
15
 
9
16
  import { checkForDuplicateScaleNames } from "./viewUtils.js";
@@ -11,90 +18,74 @@ import {
11
18
  initializeViewSubtree,
12
19
  loadViewSubtreeData,
13
20
  } from "../data/flowInit.js";
14
- import DataFlow from "../data/dataFlow.js";
15
- import { VIEW_ROOT_NAME, ViewFactory } from "./viewFactory.js";
16
- import GenomeStore from "../genome/genomeStore.js";
17
- import BmFontManager from "../fonts/bmFontManager.js";
21
+ import { VIEW_ROOT_NAME } from "./viewFactory.js";
18
22
  import UnitView from "./unitView.js";
19
23
  import ContainerView from "./containerView.js";
24
+ import {
25
+ createHeadlessEngine,
26
+ createHeadlessViewContext,
27
+ } from "../genomeSpy/headlessBootstrap.js";
20
28
 
21
29
  /**
22
30
  * @param {import("./viewFactory.js").ViewFactoryOptions} [viewFactoryOptions]
23
31
  * @returns
24
32
  */
25
33
  export function createTestViewContext(viewFactoryOptions = {}) {
26
- const viewFactory = new ViewFactory({
27
- allowImport: false,
28
- wrapRoot: false,
29
- ...viewFactoryOptions,
30
- });
31
-
32
- const genomeStore = new GenomeStore(".");
33
- genomeStore.initialize({
34
- name: "test",
35
- contigs: [
36
- { name: "chr1", size: 20 },
37
- { name: "chr2", size: 30 },
38
- ],
34
+ return createHeadlessViewContext({
35
+ viewFactoryOptions,
39
36
  });
37
+ }
40
38
 
41
- const dataFlow = new DataFlow();
42
-
43
- // @ts-expect-error
44
- const c = /** @type {ViewContext} */ ({
45
- createOrImportView: async function (
46
- spec,
47
- parent,
48
- dataParent,
49
- defaultName
50
- ) {
51
- return viewFactory.createOrImportView(
52
- spec,
53
- this,
54
- parent,
55
- dataParent,
56
- defaultName
57
- );
58
- },
59
-
60
- dataFlow,
61
- genomeStore,
62
-
63
- fontManager: new BmFontManager(),
64
- animator: /** @type {import("../utils/animator.js").default} */ (
65
- /** @type {any} */ ({
66
- requestRender: /** @type {() => void} */ (() => undefined),
67
- requestTransition:
68
- /** @type {(callback: () => void) => void} */ (
69
- (callback) => callback()
70
- ),
71
- transition: (/** @type {any} */ options) => {
72
- const to = typeof options.to === "number" ? options.to : 1;
73
- options.onUpdate(to);
74
- return Promise.resolve();
75
- },
76
- })
77
- ),
78
-
79
- requestLayoutReflow: () => undefined,
80
-
81
- isViewConfiguredVisible: () => true,
82
-
83
- addBroadcastListener: () => undefined,
84
- removeBroadcastListener: () => undefined,
85
-
86
- //...partialContext,
87
- });
39
+ /**
40
+ * @param {import("./viewFactory.js").ViewFactoryOptions} [viewFactoryOptions]
41
+ * @returns {BroadcastingViewContext}
42
+ */
43
+ export function createBroadcastingTestViewContext(viewFactoryOptions = {}) {
44
+ const context = /** @type {BroadcastingViewContext} */ (
45
+ createTestViewContext({
46
+ wrapRoot: true,
47
+ ...viewFactoryOptions,
48
+ })
49
+ );
50
+
51
+ /** @type {Map<string, Set<(message: any) => void>>} */
52
+ const listeners = new Map();
53
+
54
+ context.addBroadcastListener = (type, listener) => {
55
+ const typedListeners = listeners.get(type) ?? new Set();
56
+ typedListeners.add(listener);
57
+ listeners.set(type, typedListeners);
58
+ };
59
+
60
+ context.removeBroadcastListener = (type, listener) => {
61
+ listeners.get(type)?.delete(listener);
62
+ };
63
+
64
+ context.emitBroadcast = (root, type, payload) => {
65
+ const message = /** @type {import("./view.js").BroadcastMessage} */ ({
66
+ type,
67
+ payload,
68
+ });
69
+ root.visit((view) => view.handleBroadcast(message));
70
+ for (const listener of listeners.get(type) ?? []) {
71
+ listener(message);
72
+ }
73
+ };
88
74
 
89
- return c;
75
+ return context;
90
76
  }
91
77
 
92
78
  /**
93
- * @type {<V extends import("./view.js").default>(spec: ViewSpec, viewClass: { new(...args: any[]): V }, ViewFactoryOptions?: import("./viewFactory.js").ViewFactoryOptions) => Promise<V>}
79
+ * @type {<V extends import("./view.js").default>(spec: RootSpec, viewClass: { new(...args: any[]): V }, ViewFactoryOptions?: import("./viewFactory.js").ViewFactoryOptions) => Promise<V>}
94
80
  */
95
81
  export async function create(spec, viewClass, viewFactoryOptions = {}) {
96
82
  const c = createTestViewContext(viewFactoryOptions);
97
- const view = await c.createOrImportView(spec, null, null, VIEW_ROOT_NAME);
83
+ const view = await c.createOrImportView(
84
+ /** @type {import("../spec/view.js").ViewSpec} */ (spec),
85
+ null,
86
+ null,
87
+ VIEW_ROOT_NAME
88
+ );
98
89
 
99
90
  if (!(view instanceof viewClass)) {
100
91
  throw new Error("ViewClass and the spec do not match!");
@@ -106,7 +97,7 @@ export async function create(spec, viewClass, viewFactoryOptions = {}) {
106
97
  /**
107
98
  * Creates a view and initializes its data. Does not wrap it in an implicit root view.
108
99
  *
109
- * @type {<V extends import("./view.js").default>(spec: ViewSpec, viewClass: { new(...args: any[]): V }, context?: ViewContext, options?: {noData: boolean, implicitRoot: boolean}) => Promise<V>}
100
+ * @type {<V extends import("./view.js").default>(spec: RootSpec, viewClass: { new(...args: any[]): V }, context?: ViewContext, options?: {noData: boolean, implicitRoot: boolean}) => Promise<V>}
110
101
  */
111
102
  export async function createAndInitialize(spec, viewClass) {
112
103
  const view = await create(spec, viewClass);
@@ -126,3 +117,5 @@ export async function createAndInitialize(spec, viewClass) {
126
117
  await loadViewSubtreeData(view, dataSources);
127
118
  return view;
128
119
  }
120
+
121
+ export { createHeadlessEngine };
@@ -1,6 +1,13 @@
1
1
  /**
2
2
  * @param {string | import("../spec/title.js").Title} title
3
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} [configScopes]
4
+ * @returns {import("../spec/title.js").Title}
5
+ */
6
+ export function resolveTitleSpec(title: string | import("../spec/title.js").Title, configScopes?: import("../spec/config.js").GenomeSpyConfig[]): import("../spec/title.js").Title;
7
+ /**
8
+ * @param {string | import("../spec/title.js").Title} title
9
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} [configScopes]
3
10
  * @returns {import("../spec/view.js").UnitSpec}
4
11
  */
5
- export default function createTitle(title: string | import("../spec/title.js").Title): import("../spec/view.js").UnitSpec;
12
+ export default function createTitle(title: string | import("../spec/title.js").Title, configScopes?: import("../spec/config.js").GenomeSpyConfig[]): import("../spec/view.js").UnitSpec;
6
13
  //# sourceMappingURL=title.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../../src/view/title.js"],"names":[],"mappings":"AAuDA;;;GAGG;AACH,2CAHW,MAAM,GAAG,OAAO,kBAAkB,EAAE,KAAK,GACvC,OAAO,iBAAiB,EAAE,QAAQ,CA0G9C"}
1
+ {"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../../src/view/title.js"],"names":[],"mappings":"AAuDA;;;;GAIG;AACH,wCAJW,MAAM,GAAG,OAAO,kBAAkB,EAAE,KAAK,iBACzC,OAAO,mBAAmB,EAAE,eAAe,EAAE,GAC3C,OAAO,kBAAkB,EAAE,KAAK,CAuC5C;AAED;;;;GAIG;AACH,2CAJW,MAAM,GAAG,OAAO,kBAAkB,EAAE,KAAK,iBACzC,OAAO,mBAAmB,EAAE,eAAe,EAAE,GAC3C,OAAO,iBAAiB,EAAE,QAAQ,CAmD9C"}