@genome-spy/core 0.72.0 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/LICENSE +1 -1
  2. package/dist/bundle/AbortablePromiseCache-3gHJdF3E.js +96 -0
  3. package/dist/bundle/browser-BTgw5ieH.js +126 -0
  4. package/dist/bundle/chunk-DmhlhrBa.js +11 -0
  5. package/dist/bundle/esm-BDFRLEuD.js +1248 -0
  6. package/dist/bundle/esm-BygJiwh0.js +573 -0
  7. package/dist/bundle/esm-CGX-qz1d.js +155 -0
  8. package/dist/bundle/esm-CgfVIRJ-.js +121 -0
  9. package/dist/bundle/esm-CuMSzCHy.js +298 -0
  10. package/dist/bundle/esm-DMXpJXM4.js +369 -0
  11. package/dist/bundle/esm-DQiq2Zhd.js +1426 -0
  12. package/dist/bundle/esm-DtE8VqAv.js +1015 -0
  13. package/dist/bundle/esm-sIoQYZ21.js +461 -0
  14. package/dist/bundle/index.es.js +21078 -24556
  15. package/dist/bundle/index.js +379 -383
  16. package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
  17. package/dist/schema.json +13349 -7082
  18. package/dist/src/config/axisConfig.d.ts +16 -0
  19. package/dist/src/config/axisConfig.d.ts.map +1 -0
  20. package/dist/src/config/axisConfig.js +84 -0
  21. package/dist/src/config/defaultConfig.d.ts +3 -0
  22. package/dist/src/config/defaultConfig.d.ts.map +1 -0
  23. package/dist/src/config/defaultConfig.js +38 -0
  24. package/dist/src/config/defaults/axisDefaults.d.ts +5 -0
  25. package/dist/src/config/defaults/axisDefaults.d.ts.map +1 -0
  26. package/dist/src/config/defaults/axisDefaults.js +72 -0
  27. package/dist/src/config/defaults/markDefaults.d.ts +15 -0
  28. package/dist/src/config/defaults/markDefaults.d.ts.map +1 -0
  29. package/dist/src/config/defaults/markDefaults.js +121 -0
  30. package/dist/src/config/defaults/scaleDefaults.d.ts +5 -0
  31. package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -0
  32. package/dist/src/config/defaults/scaleDefaults.js +18 -0
  33. package/dist/src/config/defaults/titleDefaults.d.ts +5 -0
  34. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -0
  35. package/dist/src/config/defaults/titleDefaults.js +47 -0
  36. package/dist/src/config/defaults/viewDefaults.d.ts +3 -0
  37. package/dist/src/config/defaults/viewDefaults.d.ts.map +1 -0
  38. package/dist/src/config/defaults/viewDefaults.js +2 -0
  39. package/dist/src/config/markConfig.d.ts +8 -0
  40. package/dist/src/config/markConfig.d.ts.map +1 -0
  41. package/dist/src/config/markConfig.js +27 -0
  42. package/dist/src/config/mergeConfig.d.ts +8 -0
  43. package/dist/src/config/mergeConfig.d.ts.map +1 -0
  44. package/dist/src/config/mergeConfig.js +81 -0
  45. package/dist/src/config/resolveConfig.d.ts +22 -0
  46. package/dist/src/config/resolveConfig.d.ts.map +1 -0
  47. package/dist/src/config/resolveConfig.js +32 -0
  48. package/dist/src/config/scaleConfig.d.ts +40 -0
  49. package/dist/src/config/scaleConfig.d.ts.map +1 -0
  50. package/dist/src/config/scaleConfig.js +220 -0
  51. package/dist/src/config/styleUtils.d.ts +6 -0
  52. package/dist/src/config/styleUtils.d.ts.map +1 -0
  53. package/dist/src/config/styleUtils.js +10 -0
  54. package/dist/src/config/themes.d.ts +15 -0
  55. package/dist/src/config/themes.d.ts.map +1 -0
  56. package/dist/src/config/themes.js +293 -0
  57. package/dist/src/config/titleConfig.d.ts +12 -0
  58. package/dist/src/config/titleConfig.d.ts.map +1 -0
  59. package/dist/src/config/titleConfig.js +42 -0
  60. package/dist/src/config/viewConfig.d.ts +7 -0
  61. package/dist/src/config/viewConfig.d.ts.map +1 -0
  62. package/dist/src/config/viewConfig.js +29 -0
  63. package/dist/src/data/flowNode.d.ts +22 -1
  64. package/dist/src/data/flowNode.d.ts.map +1 -1
  65. package/dist/src/data/flowNode.js +37 -1
  66. package/dist/src/data/formats/bed.d.ts +8 -0
  67. package/dist/src/data/formats/bed.d.ts.map +1 -0
  68. package/dist/src/data/formats/bed.js +58 -0
  69. package/dist/src/data/formats/bedpe.d.ts +8 -0
  70. package/dist/src/data/formats/bedpe.d.ts.map +1 -0
  71. package/dist/src/data/formats/bedpe.js +164 -0
  72. package/dist/src/data/formats/fasta.d.ts.map +1 -1
  73. package/dist/src/data/formats/fasta.js +4 -0
  74. package/dist/src/data/formats/parquet.d.ts.map +1 -1
  75. package/dist/src/data/formats/parquet.js +4 -0
  76. package/dist/src/data/sources/dataSourceFactory.d.ts +2 -13
  77. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
  78. package/dist/src/data/sources/dataSourceFactory.js +5 -141
  79. package/dist/src/data/sources/dataUtils.d.ts +16 -0
  80. package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
  81. package/dist/src/data/sources/dataUtils.js +53 -3
  82. package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
  83. package/dist/src/data/sources/lazy/axisGenomeSource.js +11 -0
  84. package/dist/src/data/sources/lazy/axisTickSource.d.ts +1 -1
  85. package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
  86. package/dist/src/data/sources/lazy/axisTickSource.js +19 -8
  87. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  88. package/dist/src/data/sources/lazy/bamSource.js +11 -0
  89. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  90. package/dist/src/data/sources/lazy/bigBedSource.js +12 -1
  91. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  92. package/dist/src/data/sources/lazy/bigWigSource.js +11 -0
  93. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  94. package/dist/src/data/sources/lazy/gff3Source.js +12 -1
  95. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  96. package/dist/src/data/sources/lazy/indexedFastaSource.js +11 -0
  97. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts +27 -0
  98. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts.map +1 -0
  99. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.js +65 -0
  100. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts +2 -0
  101. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts.map +1 -0
  102. package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +8 -0
  103. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  104. package/dist/src/data/sources/lazy/singleAxisLazySource.js +11 -2
  105. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  106. package/dist/src/data/sources/lazy/vcfSource.js +11 -0
  107. package/dist/src/data/sources/urlSource.d.ts +4 -0
  108. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  109. package/dist/src/data/sources/urlSource.js +138 -16
  110. package/dist/src/data/transforms/aggregate.d.ts +1 -0
  111. package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
  112. package/dist/src/data/transforms/aggregate.js +30 -8
  113. package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -1
  114. package/dist/src/data/transforms/aggregateOps.js +12 -1
  115. package/dist/src/data/transforms/coverage.js +2 -2
  116. package/dist/src/data/transforms/filter.js +1 -1
  117. package/dist/src/data/transforms/filterScoredLabels.d.ts +6 -0
  118. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  119. package/dist/src/data/transforms/filterScoredLabels.js +9 -0
  120. package/dist/src/data/transforms/measureText.d.ts +1 -0
  121. package/dist/src/data/transforms/measureText.d.ts.map +1 -1
  122. package/dist/src/data/transforms/measureText.js +14 -5
  123. package/dist/src/data/transforms/pileup.d.ts.map +1 -1
  124. package/dist/src/data/transforms/pileup.js +1 -2
  125. package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
  126. package/dist/src/data/transforms/regexFold.js +0 -1
  127. package/dist/src/embedFactory.d.ts +13 -0
  128. package/dist/src/embedFactory.d.ts.map +1 -0
  129. package/dist/src/embedFactory.js +127 -0
  130. package/dist/src/encoder/accessor.d.ts +3 -12
  131. package/dist/src/encoder/accessor.d.ts.map +1 -1
  132. package/dist/src/encoder/accessor.js +10 -65
  133. package/dist/src/encoder/encoder.d.ts +51 -8
  134. package/dist/src/encoder/encoder.d.ts.map +1 -1
  135. package/dist/src/encoder/encoder.js +179 -55
  136. package/dist/src/fonts/bmFontManager.js +1 -1
  137. package/dist/src/full.d.ts +2 -0
  138. package/dist/src/full.d.ts.map +1 -0
  139. package/dist/src/full.js +2 -0
  140. package/dist/src/genome/assemblyPreflight.d.ts +31 -0
  141. package/dist/src/genome/assemblyPreflight.d.ts.map +1 -0
  142. package/dist/src/genome/assemblyPreflight.js +99 -0
  143. package/dist/src/genome/genome.d.ts +10 -2
  144. package/dist/src/genome/genome.d.ts.map +1 -1
  145. package/dist/src/genome/genome.js +20 -2
  146. package/dist/src/genome/genomeStore.d.ts +34 -3
  147. package/dist/src/genome/genomeStore.d.ts.map +1 -1
  148. package/dist/src/genome/genomeStore.js +409 -18
  149. package/dist/src/genome/rootGenomeConfig.d.ts +26 -0
  150. package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -0
  151. package/dist/src/genome/rootGenomeConfig.js +98 -0
  152. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  153. package/dist/src/genome/scaleLocus.js +26 -7
  154. package/dist/src/genomeSpy/cursorManager.d.ts +69 -0
  155. package/dist/src/genomeSpy/cursorManager.d.ts.map +1 -0
  156. package/dist/src/genomeSpy/cursorManager.js +131 -0
  157. package/dist/src/genomeSpy/headlessBootstrap.d.ts +113 -0
  158. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -0
  159. package/dist/src/genomeSpy/headlessBootstrap.js +246 -0
  160. package/dist/src/genomeSpy/interactionController.d.ts +10 -1
  161. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  162. package/dist/src/genomeSpy/interactionController.js +448 -40
  163. package/dist/src/genomeSpy/interactionDispatcher.d.ts +50 -0
  164. package/dist/src/genomeSpy/interactionDispatcher.d.ts.map +1 -0
  165. package/dist/src/genomeSpy/interactionDispatcher.js +203 -0
  166. package/dist/src/genomeSpy/renderCoordinator.js +1 -1
  167. package/dist/src/genomeSpy/viewContextFactory.d.ts +4 -2
  168. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
  169. package/dist/src/genomeSpy/viewContextFactory.js +12 -4
  170. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  171. package/dist/src/genomeSpy/viewDataInit.js +7 -3
  172. package/dist/src/genomeSpy.d.ts +1 -114
  173. package/dist/src/genomeSpy.d.ts.map +1 -1
  174. package/dist/src/genomeSpy.js +7 -614
  175. package/dist/src/genomeSpyBase.d.ts +133 -0
  176. package/dist/src/genomeSpyBase.d.ts.map +1 -0
  177. package/dist/src/genomeSpyBase.js +719 -0
  178. package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
  179. package/dist/src/gl/arrayBuilder.js +0 -3
  180. package/dist/src/gl/canvasSizeHelper.d.ts +74 -0
  181. package/dist/src/gl/canvasSizeHelper.d.ts.map +1 -0
  182. package/dist/src/gl/canvasSizeHelper.js +203 -0
  183. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  184. package/dist/src/gl/colorUtils.js +3 -0
  185. package/dist/src/gl/dataToVertices.d.ts.map +1 -1
  186. package/dist/src/gl/dataToVertices.js +13 -8
  187. package/dist/src/gl/glslScaleGenerator.d.ts +2 -2
  188. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  189. package/dist/src/gl/glslScaleGenerator.js +5 -7
  190. package/dist/src/gl/webGLHelper.d.ts +25 -11
  191. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  192. package/dist/src/gl/webGLHelper.js +59 -33
  193. package/dist/src/index.d.ts +3 -9
  194. package/dist/src/index.d.ts.map +1 -1
  195. package/dist/src/index.js +5 -111
  196. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +4462 -0
  197. package/dist/src/marks/link.d.ts.map +1 -1
  198. package/dist/src/marks/link.js +5 -26
  199. package/dist/src/marks/mark.d.ts +8 -1
  200. package/dist/src/marks/mark.d.ts.map +1 -1
  201. package/dist/src/marks/mark.js +67 -21
  202. package/dist/src/marks/markUtils.d.ts +18 -1
  203. package/dist/src/marks/markUtils.d.ts.map +1 -1
  204. package/dist/src/marks/markUtils.js +52 -4
  205. package/dist/src/marks/point.d.ts.map +1 -1
  206. package/dist/src/marks/point.js +6 -26
  207. package/dist/src/marks/rect.d.ts.map +1 -1
  208. package/dist/src/marks/rect.js +13 -21
  209. package/dist/src/marks/rule.d.ts +7 -2
  210. package/dist/src/marks/rule.d.ts.map +1 -1
  211. package/dist/src/marks/rule.js +125 -16
  212. package/dist/src/marks/text.d.ts.map +1 -1
  213. package/dist/src/marks/text.js +5 -47
  214. package/dist/src/minimal.d.ts +8 -0
  215. package/dist/src/minimal.d.ts.map +1 -0
  216. package/dist/src/minimal.js +21 -0
  217. package/dist/src/paramRuntime/viewParamRuntime.d.ts +19 -0
  218. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  219. package/dist/src/paramRuntime/viewParamRuntime.js +35 -0
  220. package/dist/src/scale/scale.d.ts.map +1 -1
  221. package/dist/src/scale/scale.js +13 -7
  222. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  223. package/dist/src/scales/axisResolution.js +9 -5
  224. package/dist/src/scales/domainPlanner.d.ts +58 -7
  225. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  226. package/dist/src/scales/domainPlanner.js +395 -40
  227. package/dist/src/scales/indexLikeDomainUtils.d.ts +29 -0
  228. package/dist/src/scales/indexLikeDomainUtils.d.ts.map +1 -0
  229. package/dist/src/scales/indexLikeDomainUtils.js +67 -0
  230. package/dist/src/scales/resolutionMemberOrder.d.ts +15 -0
  231. package/dist/src/scales/resolutionMemberOrder.d.ts.map +1 -0
  232. package/dist/src/scales/resolutionMemberOrder.js +22 -0
  233. package/dist/src/scales/scaleInstanceManager.d.ts +2 -1
  234. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
  235. package/dist/src/scales/scaleInstanceManager.js +10 -11
  236. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
  237. package/dist/src/scales/scaleInteractionController.js +59 -18
  238. package/dist/src/scales/scalePropsResolver.d.ts +3 -1
  239. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  240. package/dist/src/scales/scalePropsResolver.js +83 -6
  241. package/dist/src/scales/scaleResolution.d.ts +39 -0
  242. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  243. package/dist/src/scales/scaleResolution.js +504 -82
  244. package/dist/src/scales/scaleResolutionTestUtils.d.ts +21 -0
  245. package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -0
  246. package/dist/src/scales/scaleResolutionTestUtils.js +37 -0
  247. package/dist/src/scales/scaleRules.d.ts.map +1 -1
  248. package/dist/src/scales/scaleRules.js +16 -2
  249. package/dist/src/scales/selectionDomainUtils.d.ts +52 -0
  250. package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -0
  251. package/dist/src/scales/selectionDomainUtils.js +194 -0
  252. package/dist/src/scales/zoomDomainUtils.d.ts +18 -0
  253. package/dist/src/scales/zoomDomainUtils.d.ts.map +1 -0
  254. package/dist/src/scales/zoomDomainUtils.js +69 -0
  255. package/dist/src/screenshotHarness.d.ts +16 -0
  256. package/dist/src/screenshotHarness.d.ts.map +1 -0
  257. package/dist/src/screenshotHarness.js +241 -0
  258. package/dist/src/singlePageApp.js +1 -1
  259. package/dist/src/spec/axis.d.ts +41 -30
  260. package/dist/src/spec/channel.d.ts +15 -9
  261. package/dist/src/spec/config.d.ts +264 -0
  262. package/dist/src/spec/data.d.ts +30 -3
  263. package/dist/src/spec/decoration.d.ts +51 -0
  264. package/dist/src/spec/exampleFiles.d.ts +12 -0
  265. package/dist/src/spec/exampleFiles.d.ts.map +1 -0
  266. package/dist/src/spec/exampleFiles.js +52 -0
  267. package/dist/src/spec/font.d.ts +1 -1
  268. package/dist/src/spec/genome.d.ts +22 -2
  269. package/dist/src/spec/mark.d.ts +97 -13
  270. package/dist/src/spec/parameter.d.ts +62 -5
  271. package/dist/src/spec/root.d.ts +34 -1
  272. package/dist/src/spec/scale.d.ts +46 -5
  273. package/dist/src/spec/title.d.ts +13 -2
  274. package/dist/src/spec/tooltip.d.ts +1 -1
  275. package/dist/src/spec/transform.d.ts +39 -4
  276. package/dist/src/spec/view.d.ts +67 -19
  277. package/dist/src/styles/genome-spy.css +63 -55
  278. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  279. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  280. package/dist/src/styles/genome-spy.css.js +31 -22
  281. package/dist/src/testSetup.d.ts +2 -0
  282. package/dist/src/testSetup.d.ts.map +1 -0
  283. package/dist/src/testSetup.js +5 -0
  284. package/dist/src/tooltip/dataTooltipHandler.js +66 -11
  285. package/dist/src/tooltip/tooltipContext.d.ts.map +1 -1
  286. package/dist/src/tooltip/tooltipContext.js +3 -2
  287. package/dist/src/types/embedApi.d.ts +26 -0
  288. package/dist/src/types/encoder.d.ts +17 -15
  289. package/dist/src/types/scaleResolutionApi.d.ts +20 -0
  290. package/dist/src/types/viewContext.d.ts +23 -1
  291. package/dist/src/utils/expression.d.ts +2 -2
  292. package/dist/src/utils/expression.d.ts.map +1 -1
  293. package/dist/src/utils/expression.js +63 -8
  294. package/dist/src/utils/field.d.ts.map +1 -1
  295. package/dist/src/utils/field.js +0 -1
  296. package/dist/src/utils/inertia.d.ts.map +1 -1
  297. package/dist/src/utils/inertia.js +0 -1
  298. package/dist/src/utils/inferSpecBaseUrl.d.ts +14 -0
  299. package/dist/src/utils/inferSpecBaseUrl.d.ts.map +1 -0
  300. package/dist/src/utils/inferSpecBaseUrl.js +73 -0
  301. package/dist/src/utils/inputBinding.d.ts +1 -1
  302. package/dist/src/utils/interaction.d.ts +109 -0
  303. package/dist/src/utils/interaction.d.ts.map +1 -0
  304. package/dist/src/utils/interaction.js +200 -0
  305. package/dist/src/utils/interactionEvent.d.ts +62 -33
  306. package/dist/src/utils/interactionEvent.d.ts.map +1 -1
  307. package/dist/src/utils/interactionEvent.js +86 -48
  308. package/dist/src/utils/kWayMerge.js +1 -1
  309. package/dist/src/utils/mergeObjects.d.ts.map +1 -1
  310. package/dist/src/utils/mergeObjects.js +0 -2
  311. package/dist/src/utils/radixSort.d.ts.map +1 -1
  312. package/dist/src/utils/radixSort.js +0 -2
  313. package/dist/src/utils/throttle.d.ts.map +1 -1
  314. package/dist/src/utils/throttle.js +0 -2
  315. package/dist/src/utils/ui/tooltip.d.ts +1 -0
  316. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  317. package/dist/src/utils/ui/tooltip.js +1 -0
  318. package/dist/src/utils/url.js +1 -1
  319. package/dist/src/view/axisGridView.d.ts +1 -1
  320. package/dist/src/view/axisGridView.d.ts.map +1 -1
  321. package/dist/src/view/axisGridView.js +2 -47
  322. package/dist/src/view/axisView.d.ts +2 -3
  323. package/dist/src/view/axisView.d.ts.map +1 -1
  324. package/dist/src/view/axisView.js +251 -106
  325. package/dist/src/view/concatView.d.ts +2 -1
  326. package/dist/src/view/concatView.d.ts.map +1 -1
  327. package/dist/src/view/concatView.js +4 -2
  328. package/dist/src/view/containerMutationHelper.d.ts +3 -0
  329. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  330. package/dist/src/view/containerMutationHelper.js +12 -1
  331. package/dist/src/view/dataReadiness.d.ts +2 -2
  332. package/dist/src/view/dataReadiness.d.ts.map +1 -1
  333. package/dist/src/view/dataReadiness.js +63 -58
  334. package/dist/src/view/facetView.d.ts +1 -1
  335. package/dist/src/view/facetView.js +4 -4
  336. package/dist/src/view/flowBuilder.js +2 -2
  337. package/dist/src/view/gridView/gridChild.d.ts +13 -0
  338. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  339. package/dist/src/view/gridView/gridChild.js +247 -49
  340. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  341. package/dist/src/view/gridView/gridView.js +296 -99
  342. package/dist/src/view/gridView/keyboardZoomController.d.ts +2 -2
  343. package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -1
  344. package/dist/src/view/gridView/keyboardZoomController.js +1 -1
  345. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  346. package/dist/src/view/gridView/scrollbar.js +4 -2
  347. package/dist/src/view/gridView/selectionRect.d.ts +4 -0
  348. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  349. package/dist/src/view/gridView/selectionRect.js +20 -1
  350. package/dist/src/view/gridView/separatorView.d.ts +1 -0
  351. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  352. package/dist/src/view/gridView/separatorView.js +9 -0
  353. package/dist/src/view/interactionRouting.d.ts +20 -0
  354. package/dist/src/view/interactionRouting.d.ts.map +1 -0
  355. package/dist/src/view/interactionRouting.js +53 -0
  356. package/dist/src/view/layerView.d.ts.map +1 -1
  357. package/dist/src/view/layerView.js +12 -9
  358. package/dist/src/view/layout/grid.js +1 -1
  359. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  360. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +0 -2
  361. package/dist/src/view/testUtils.d.ts +17 -3
  362. package/dist/src/view/testUtils.d.ts.map +1 -1
  363. package/dist/src/view/testUtils.js +62 -69
  364. package/dist/src/view/title.d.ts +8 -1
  365. package/dist/src/view/title.d.ts.map +1 -1
  366. package/dist/src/view/title.js +66 -76
  367. package/dist/src/view/unitView.d.ts +1 -1
  368. package/dist/src/view/unitView.d.ts.map +1 -1
  369. package/dist/src/view/unitView.js +67 -17
  370. package/dist/src/view/view.d.ts +76 -30
  371. package/dist/src/view/view.d.ts.map +1 -1
  372. package/dist/src/view/view.js +136 -47
  373. package/dist/src/view/viewFactory.d.ts +11 -3
  374. package/dist/src/view/viewFactory.d.ts.map +1 -1
  375. package/dist/src/view/viewFactory.js +37 -11
  376. package/dist/src/view/viewUtils.d.ts.map +1 -1
  377. package/dist/src/view/viewUtils.js +41 -5
  378. package/dist/src/view/zoom.d.ts +15 -3
  379. package/dist/src/view/zoom.d.ts.map +1 -1
  380. package/dist/src/view/zoom.js +375 -80
  381. package/package.json +20 -10
  382. package/dist/bundle/AbortablePromiseCache-Dj0vzLnp.js +0 -149
  383. package/dist/bundle/browser-0iNU5Wit.js +0 -138
  384. package/dist/bundle/index-BYsZN7b0.js +0 -1597
  385. package/dist/bundle/index-C3kClAEN.js +0 -1771
  386. package/dist/bundle/index-C7wOh6y1.js +0 -657
  387. package/dist/bundle/index-CRaQAuki.js +0 -326
  388. package/dist/bundle/index-D9v1PCj9.js +0 -507
  389. package/dist/bundle/index-GDOuv_D5.js +0 -266
  390. package/dist/bundle/index-Gt44EOIH.js +0 -628
  391. package/dist/bundle/inflate-GtwLkvSP.js +0 -1048
  392. package/dist/bundle/parquetRead-BnAGCa4_.js +0 -1663
  393. package/dist/bundle/unzip-Bac01w6X.js +0 -1492
  394. package/dist/src/config/scaleDefaults.d.ts +0 -8
  395. package/dist/src/config/scaleDefaults.d.ts.map +0 -1
  396. package/dist/src/config/scaleDefaults.js +0 -45
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @typedef {{
3
+ * owner: object,
4
+ * raw: unknown,
5
+ * evaluate: () => string | undefined,
6
+ * watch: (registerDisposer: (dispose: () => void) => void, listener: () => void) => void,
7
+ * }} CursorSource
8
+ */
9
+ /**
10
+ * @param {CursorView | undefined} target
11
+ * @param {{ mark?: CursorOwner } | undefined} hover
12
+ * @returns {CursorSource | undefined}
13
+ */
14
+ export function resolveCursorSource(target: CursorView | undefined, hover: {
15
+ mark?: CursorOwner;
16
+ } | undefined): CursorSource | undefined;
17
+ /**
18
+ * Resolves and applies the active canvas cursor based on the current mark hover
19
+ * and interaction target path.
20
+ */
21
+ /**
22
+ * @typedef {{
23
+ * getCursorSpec?: () => unknown,
24
+ * getCursor: () => string | undefined,
25
+ * watchCursor?: (listener: () => void, registerDisposer: (dispose: () => void) => void) => void,
26
+ * }} CursorOwner
27
+ */
28
+ /**
29
+ * @typedef {CursorOwner & {
30
+ * getLayoutAncestors: () => CursorView[],
31
+ * }} CursorView
32
+ */
33
+ export default class CursorManager {
34
+ /**
35
+ * @param {object} options
36
+ * @param {HTMLCanvasElement} options.canvas
37
+ */
38
+ constructor({ canvas }: {
39
+ canvas: HTMLCanvasElement;
40
+ });
41
+ /**
42
+ * @param {object} options
43
+ * @param {CursorView | undefined} options.target
44
+ * @param {{ mark?: CursorOwner } | undefined} options.hover
45
+ */
46
+ update({ target, hover }: {
47
+ target: CursorView | undefined;
48
+ hover: {
49
+ mark?: CursorOwner;
50
+ } | undefined;
51
+ }): void;
52
+ clear(): void;
53
+ #private;
54
+ }
55
+ export type CursorSource = {
56
+ owner: object;
57
+ raw: unknown;
58
+ evaluate: () => string | undefined;
59
+ watch: (registerDisposer: (dispose: () => void) => void, listener: () => void) => void;
60
+ };
61
+ export type CursorOwner = {
62
+ getCursorSpec?: () => unknown;
63
+ getCursor: () => string | undefined;
64
+ watchCursor?: (listener: () => void, registerDisposer: (dispose: () => void) => void) => void;
65
+ };
66
+ export type CursorView = CursorOwner & {
67
+ getLayoutAncestors: () => CursorView[];
68
+ };
69
+ //# sourceMappingURL=cursorManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursorManager.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/cursorManager.js"],"names":[],"mappings":"AA+EA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,4CAJW,UAAU,GAAG,SAAS,SACtB;IAAE,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,SAAS,GAChC,YAAY,GAAG,SAAS,CA2BpC;AAtHD;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAEH;IAUI;;;OAGG;IACH,wBAFG;QAAmC,MAAM,EAAjC,iBAAiB;KAC3B,EAGA;IAED;;;;OAIG;IACH,0BAHG;QAAwC,MAAM,EAAtC,UAAU,GAAG,SAAS;QACsB,KAAK,EAAjD;YAAE,IAAI,CAAC,EAAE,WAAW,CAAA;SAAE,GAAG,SAAS;KAC5C,QAGA;IAED,cAEC;;CA6BJ;2BAGY;IACR,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACxF;0BA/ES;IACR,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;CAC/F;yBAIS,WAAW,GAAG;IACtB,kBAAkB,EAAE,MAAM,UAAU,EAAE,CAAC;CACxC"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Resolves and applies the active canvas cursor based on the current mark hover
3
+ * and interaction target path.
4
+ */
5
+
6
+ /**
7
+ * @typedef {{
8
+ * getCursorSpec?: () => unknown,
9
+ * getCursor: () => string | undefined,
10
+ * watchCursor?: (listener: () => void, registerDisposer: (dispose: () => void) => void) => void,
11
+ * }} CursorOwner
12
+ */
13
+
14
+ /**
15
+ * @typedef {CursorOwner & {
16
+ * getLayoutAncestors: () => CursorView[],
17
+ * }} CursorView
18
+ */
19
+
20
+ export default class CursorManager {
21
+ /** @type {HTMLCanvasElement} */
22
+ #canvas;
23
+
24
+ /** @type {CursorSource | undefined} */
25
+ #activeSource;
26
+
27
+ /** @type {(() => void) | undefined} */
28
+ #disposeActiveSource;
29
+
30
+ /**
31
+ * @param {object} options
32
+ * @param {HTMLCanvasElement} options.canvas
33
+ */
34
+ constructor({ canvas }) {
35
+ this.#canvas = canvas;
36
+ }
37
+
38
+ /**
39
+ * @param {object} options
40
+ * @param {CursorView | undefined} options.target
41
+ * @param {{ mark?: CursorOwner } | undefined} options.hover
42
+ */
43
+ update({ target, hover }) {
44
+ this.#setActiveSource(resolveCursorSource(target, hover));
45
+ }
46
+
47
+ clear() {
48
+ this.#setActiveSource(undefined);
49
+ }
50
+
51
+ /**
52
+ * @param {CursorSource | undefined} source
53
+ */
54
+ #setActiveSource(source) {
55
+ if (sameSource(this.#activeSource, source)) {
56
+ this.#applyActiveCursor();
57
+ return;
58
+ }
59
+
60
+ this.#disposeActiveSource?.();
61
+ this.#disposeActiveSource = undefined;
62
+ this.#activeSource = source;
63
+
64
+ source?.watch(
65
+ (dispose) => {
66
+ this.#disposeActiveSource = dispose;
67
+ },
68
+ () => this.#applyActiveCursor()
69
+ );
70
+
71
+ this.#applyActiveCursor();
72
+ }
73
+
74
+ #applyActiveCursor() {
75
+ const cursor = this.#activeSource?.evaluate();
76
+ this.#canvas.style.cursor = typeof cursor === "string" ? cursor : "";
77
+ }
78
+ }
79
+
80
+ /**
81
+ * @typedef {{
82
+ * owner: object,
83
+ * raw: unknown,
84
+ * evaluate: () => string | undefined,
85
+ * watch: (registerDisposer: (dispose: () => void) => void, listener: () => void) => void,
86
+ * }} CursorSource
87
+ */
88
+
89
+ /**
90
+ * @param {CursorView | undefined} target
91
+ * @param {{ mark?: CursorOwner } | undefined} hover
92
+ * @returns {CursorSource | undefined}
93
+ */
94
+ export function resolveCursorSource(target, hover) {
95
+ const mark = hover?.mark;
96
+ const markCursor = mark?.getCursorSpec?.();
97
+ if (markCursor !== undefined) {
98
+ return {
99
+ owner: mark,
100
+ raw: markCursor,
101
+ evaluate: () => mark.getCursor(),
102
+ watch: (registerDisposer, listener) =>
103
+ mark.watchCursor?.(listener, registerDisposer),
104
+ };
105
+ }
106
+
107
+ for (const view of target?.getLayoutAncestors() ?? []) {
108
+ const cursor = view.getCursorSpec?.();
109
+ if (cursor !== undefined) {
110
+ return {
111
+ owner: view,
112
+ raw: cursor,
113
+ evaluate: () => view.getCursor(),
114
+ watch: (registerDisposer, listener) =>
115
+ view.watchCursor?.(listener, registerDisposer),
116
+ };
117
+ }
118
+ }
119
+ }
120
+
121
+ /**
122
+ * @param {CursorSource | undefined} a
123
+ * @param {CursorSource | undefined} b
124
+ */
125
+ function sameSource(a, b) {
126
+ if (!a || !b) {
127
+ return a === b;
128
+ }
129
+
130
+ return a.owner === b.owner && a.raw === b.raw;
131
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @param {{
3
+ * viewFactoryOptions?: import("../view/viewFactory.js").ViewFactoryOptions,
4
+ * dataFlow?: DataFlow,
5
+ * genomeStore?: GenomeStore,
6
+ * fontManager?: BmFontManager,
7
+ * animator?: import("../utils/animator.js").default,
8
+ * baseConfig?: ReturnType<typeof resolveBaseConfig>,
9
+ * getNamedDataFromProvider?: (name: string) => any[] | undefined,
10
+ * getCurrentHover?: () => any,
11
+ * updateTooltip?: <T>(datum: T, converter?: (datum: T) => Promise<any>) => void,
12
+ * requestLayoutReflow?: () => void,
13
+ * suspendHoverTracking?: () => void,
14
+ * resumeHoverTracking?: (event?: MouseEvent) => void,
15
+ * addKeyboardListener?: (
16
+ * type: "keydown" | "keyup",
17
+ * listener: (event: KeyboardEvent) => void
18
+ * ) => void,
19
+ * addBroadcastListener?: (
20
+ * type: import("../genomeSpy.js").BroadcastEventType,
21
+ * listener: (message: import("../view/view.js").BroadcastMessage) => void
22
+ * ) => void,
23
+ * removeBroadcastListener?: (
24
+ * type: import("../genomeSpy.js").BroadcastEventType,
25
+ * listener: (message: import("../view/view.js").BroadcastMessage) => void
26
+ * ) => void,
27
+ * highlightView?: (view: import("../view/view.js").default | null) => void,
28
+ * isViewConfiguredVisible?: (view: import("../view/view.js").default) => boolean,
29
+ * isViewSpec?: (spec: any) => boolean,
30
+ * glHelper?: import("../gl/webGLHelper.js").default,
31
+ * }} [options]
32
+ * @returns {ViewContext}
33
+ */
34
+ export function createHeadlessViewContext(options?: {
35
+ viewFactoryOptions?: import("../view/viewFactory.js").ViewFactoryOptions;
36
+ dataFlow?: DataFlow;
37
+ genomeStore?: GenomeStore;
38
+ fontManager?: BmFontManager;
39
+ animator?: import("../utils/animator.js").default;
40
+ baseConfig?: ReturnType<typeof resolveBaseConfig>;
41
+ getNamedDataFromProvider?: (name: string) => any[] | undefined;
42
+ getCurrentHover?: () => any;
43
+ updateTooltip?: <T>(datum: T, converter?: (datum: T) => Promise<any>) => void;
44
+ requestLayoutReflow?: () => void;
45
+ suspendHoverTracking?: () => void;
46
+ resumeHoverTracking?: (event?: MouseEvent) => void;
47
+ addKeyboardListener?: (type: "keydown" | "keyup", listener: (event: KeyboardEvent) => void) => void;
48
+ addBroadcastListener?: (type: import("../genomeSpy.js").BroadcastEventType, listener: (message: import("../view/view.js").BroadcastMessage) => void) => void;
49
+ removeBroadcastListener?: (type: import("../genomeSpy.js").BroadcastEventType, listener: (message: import("../view/view.js").BroadcastMessage) => void) => void;
50
+ highlightView?: (view: import("../view/view.js").default | null) => void;
51
+ isViewConfiguredVisible?: (view: import("../view/view.js").default) => boolean;
52
+ isViewSpec?: (spec: any) => boolean;
53
+ glHelper?: import("../gl/webGLHelper.js").default;
54
+ }): ViewContext;
55
+ /**
56
+ * Shared view-hierarchy preparation that does not require a browser shell.
57
+ *
58
+ * @param {import("../view/view.js").default} viewRoot
59
+ */
60
+ export function prepareViewHierarchy(viewRoot: import("../view/view.js").default): void;
61
+ /**
62
+ * Creates a real view hierarchy and initializes its dataflow without touching
63
+ * browser-only subsystems such as WebGL or DOM event wiring.
64
+ *
65
+ * @param {RootSpec} spec
66
+ * @param {{
67
+ * context?: ViewContext,
68
+ * contextOptions?: Parameters<typeof createHeadlessViewContext>[0],
69
+ * onDataFlowBuilt?: (dataFlow: DataFlow) => void,
70
+ * }} [options]
71
+ * @returns {Promise<{ view: import("../view/view.js").default, context: ViewContext }>}
72
+ */
73
+ export function createHeadlessEngine(spec: RootSpec, options?: {
74
+ context?: ViewContext;
75
+ contextOptions?: Parameters<typeof createHeadlessViewContext>[0];
76
+ onDataFlowBuilt?: (dataFlow: DataFlow) => void;
77
+ }): Promise<{
78
+ view: import("../view/view.js").default;
79
+ context: ViewContext;
80
+ }>;
81
+ /**
82
+ * Creates a resolved view hierarchy without initializing dataflow or loading
83
+ * assemblies ahead of time.
84
+ *
85
+ * @param {RootSpec} spec
86
+ * @param {{
87
+ * context?: ViewContext,
88
+ * contextOptions?: Parameters<typeof createHeadlessViewContext>[0],
89
+ * viewFactoryOptions?: import("../view/viewFactory.js").ViewFactoryOptions,
90
+ * }} [options]
91
+ * @returns {Promise<{ view: import("../view/view.js").default, context: ViewContext }>}
92
+ */
93
+ export function createHeadlessViewHierarchy(spec: RootSpec, options?: {
94
+ context?: ViewContext;
95
+ contextOptions?: Parameters<typeof createHeadlessViewContext>[0];
96
+ viewFactoryOptions?: import("../view/viewFactory.js").ViewFactoryOptions;
97
+ }): Promise<{
98
+ view: import("../view/view.js").default;
99
+ context: ViewContext;
100
+ }>;
101
+ /**
102
+ * Shared helpers for creating a GenomeSpy runtime without DOM or WebGL.
103
+ */
104
+ export type RootSpec = import("../spec/root.js").RootSpec;
105
+ /**
106
+ * Shared helpers for creating a GenomeSpy runtime without DOM or WebGL.
107
+ */
108
+ export type ViewContext = import("../types/viewContext.js").default;
109
+ import DataFlow from "../data/dataFlow.js";
110
+ import GenomeStore from "../genome/genomeStore.js";
111
+ import BmFontManager from "../fonts/bmFontManager.js";
112
+ import { resolveBaseConfig } from "../config/resolveConfig.js";
113
+ //# sourceMappingURL=headlessBootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headlessBootstrap.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/headlessBootstrap.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Shared helpers for creating a GenomeSpy runtime without DOM or WebGL.
3
+ *
4
+ * @typedef {import("../spec/root.js").RootSpec} RootSpec
5
+ * @typedef {import("../types/viewContext.js").default} ViewContext
6
+ */
7
+
8
+ import DataFlow from "../data/dataFlow.js";
9
+ import GenomeStore from "../genome/genomeStore.js";
10
+ import BmFontManager from "../fonts/bmFontManager.js";
11
+ import Animator from "../utils/animator.js";
12
+ import { INTERNAL_DEFAULT_CONFIG } from "../config/defaultConfig.js";
13
+ import { resolveBaseConfig } from "../config/resolveConfig.js";
14
+ import { createViewContext } from "./viewContextFactory.js";
15
+ import { ViewFactory, VIEW_ROOT_NAME } from "../view/viewFactory.js";
16
+ import { ensureAssembliesForView } from "../genome/assemblyPreflight.js";
17
+ import {
18
+ configureViewHierarchy,
19
+ configureViewOpacity,
20
+ } from "./viewHierarchyConfig.js";
21
+ import { initializeViewData } from "./viewDataInit.js";
22
+
23
+ /**
24
+ * @returns {GenomeStore}
25
+ */
26
+ function createTestGenomeStore() {
27
+ const genomeStore = new GenomeStore(".");
28
+ genomeStore.initialize({
29
+ name: "hg38",
30
+ });
31
+ return genomeStore;
32
+ }
33
+
34
+ /**
35
+ * @returns {import("../utils/animator.js").default}
36
+ */
37
+ function createHeadlessAnimator() {
38
+ class HeadlessAnimator extends Animator {
39
+ constructor() {
40
+ super(() => undefined);
41
+ }
42
+
43
+ requestRender() {
44
+ //
45
+ }
46
+
47
+ /**
48
+ * @param {(timestamp: number) => void} callback
49
+ */
50
+ requestTransition(callback) {
51
+ callback(0);
52
+ }
53
+
54
+ /**
55
+ * @param {import("../utils/transition.js").TransitionOptions} options
56
+ */
57
+ transition(options) {
58
+ const to = typeof options.to === "number" ? options.to : 1;
59
+ options.onUpdate(to);
60
+ return Promise.resolve();
61
+ }
62
+ }
63
+
64
+ return new HeadlessAnimator();
65
+ }
66
+
67
+ /**
68
+ * @param {{
69
+ * viewFactoryOptions?: import("../view/viewFactory.js").ViewFactoryOptions,
70
+ * dataFlow?: DataFlow,
71
+ * genomeStore?: GenomeStore,
72
+ * fontManager?: BmFontManager,
73
+ * animator?: import("../utils/animator.js").default,
74
+ * baseConfig?: ReturnType<typeof resolveBaseConfig>,
75
+ * getNamedDataFromProvider?: (name: string) => any[] | undefined,
76
+ * getCurrentHover?: () => any,
77
+ * updateTooltip?: <T>(datum: T, converter?: (datum: T) => Promise<any>) => void,
78
+ * requestLayoutReflow?: () => void,
79
+ * suspendHoverTracking?: () => void,
80
+ * resumeHoverTracking?: (event?: MouseEvent) => void,
81
+ * addKeyboardListener?: (
82
+ * type: "keydown" | "keyup",
83
+ * listener: (event: KeyboardEvent) => void
84
+ * ) => void,
85
+ * addBroadcastListener?: (
86
+ * type: import("../genomeSpy.js").BroadcastEventType,
87
+ * listener: (message: import("../view/view.js").BroadcastMessage) => void
88
+ * ) => void,
89
+ * removeBroadcastListener?: (
90
+ * type: import("../genomeSpy.js").BroadcastEventType,
91
+ * listener: (message: import("../view/view.js").BroadcastMessage) => void
92
+ * ) => void,
93
+ * highlightView?: (view: import("../view/view.js").default | null) => void,
94
+ * isViewConfiguredVisible?: (view: import("../view/view.js").default) => boolean,
95
+ * isViewSpec?: (spec: any) => boolean,
96
+ * glHelper?: import("../gl/webGLHelper.js").default,
97
+ * }} [options]
98
+ * @returns {ViewContext}
99
+ */
100
+ export function createHeadlessViewContext(options = {}) {
101
+ const viewFactory = new ViewFactory({
102
+ allowImport: false,
103
+ wrapRoot: false,
104
+ ...options.viewFactoryOptions,
105
+ });
106
+
107
+ const dataFlow = options.dataFlow ?? new DataFlow();
108
+ const genomeStore = options.genomeStore ?? createTestGenomeStore();
109
+ const baseConfig =
110
+ options.baseConfig ??
111
+ resolveBaseConfig({
112
+ defaultConfig: INTERNAL_DEFAULT_CONFIG,
113
+ });
114
+
115
+ return createViewContext({
116
+ allowMissingGlHelper: true,
117
+ dataFlow,
118
+ genomeStore,
119
+ glHelper: options.glHelper,
120
+ fontManager: options.fontManager ?? new BmFontManager(),
121
+ animator: options.animator ?? createHeadlessAnimator(),
122
+ requestLayoutReflow: options.requestLayoutReflow ?? (() => undefined),
123
+ updateTooltip: options.updateTooltip ?? (() => undefined),
124
+ getNamedDataFromProvider:
125
+ options.getNamedDataFromProvider ?? (() => undefined),
126
+ getCurrentHover: options.getCurrentHover ?? (() => undefined),
127
+ suspendHoverTracking: options.suspendHoverTracking ?? (() => undefined),
128
+ resumeHoverTracking: options.resumeHoverTracking ?? (() => undefined),
129
+ addKeyboardListener: options.addKeyboardListener ?? (() => undefined),
130
+ addBroadcastListener: options.addBroadcastListener ?? (() => undefined),
131
+ removeBroadcastListener:
132
+ options.removeBroadcastListener ?? (() => undefined),
133
+ highlightView: options.highlightView ?? (() => undefined),
134
+ isViewConfiguredVisible:
135
+ options.isViewConfiguredVisible ?? (() => true),
136
+ isViewSpec:
137
+ options.isViewSpec ?? viewFactory.isViewSpec.bind(viewFactory),
138
+ getBaseConfig: () => baseConfig,
139
+ createOrImportViewWithContext: (
140
+ context,
141
+ spec,
142
+ layoutParent,
143
+ dataParent,
144
+ defaultName,
145
+ validator,
146
+ createOptions
147
+ ) =>
148
+ viewFactory.createOrImportView(
149
+ spec,
150
+ context,
151
+ layoutParent,
152
+ dataParent,
153
+ defaultName,
154
+ validator,
155
+ createOptions
156
+ ),
157
+ });
158
+ }
159
+
160
+ /**
161
+ * Shared view-hierarchy preparation that does not require a browser shell.
162
+ *
163
+ * @param {import("../view/view.js").default} viewRoot
164
+ */
165
+ export function prepareViewHierarchy(viewRoot) {
166
+ configureViewHierarchy(viewRoot);
167
+ configureViewOpacity(viewRoot);
168
+ }
169
+
170
+ /**
171
+ * Creates a real view hierarchy and initializes its dataflow without touching
172
+ * browser-only subsystems such as WebGL or DOM event wiring.
173
+ *
174
+ * @param {RootSpec} spec
175
+ * @param {{
176
+ * context?: ViewContext,
177
+ * contextOptions?: Parameters<typeof createHeadlessViewContext>[0],
178
+ * onDataFlowBuilt?: (dataFlow: DataFlow) => void,
179
+ * }} [options]
180
+ * @returns {Promise<{ view: import("../view/view.js").default, context: ViewContext }>}
181
+ */
182
+ export async function createHeadlessEngine(spec, options = {}) {
183
+ const context =
184
+ options.context ?? createHeadlessViewContext(options.contextOptions);
185
+
186
+ if (spec.datasets) {
187
+ const getNamedDataFromProvider = context.getNamedDataFromProvider;
188
+ context.getNamedDataFromProvider = (name) =>
189
+ spec.datasets[name] ?? getNamedDataFromProvider(name);
190
+ }
191
+
192
+ const view = await context.createOrImportView(
193
+ /** @type {import("../spec/view.js").ViewSpec} */ (spec),
194
+ null,
195
+ null,
196
+ VIEW_ROOT_NAME
197
+ );
198
+
199
+ await ensureAssembliesForView(view, context.genomeStore);
200
+ prepareViewHierarchy(view);
201
+
202
+ await initializeViewData(
203
+ view,
204
+ context.dataFlow,
205
+ context.fontManager,
206
+ options.onDataFlowBuilt ?? (() => undefined)
207
+ );
208
+
209
+ return { view, context };
210
+ }
211
+
212
+ /**
213
+ * Creates a resolved view hierarchy without initializing dataflow or loading
214
+ * assemblies ahead of time.
215
+ *
216
+ * @param {RootSpec} spec
217
+ * @param {{
218
+ * context?: ViewContext,
219
+ * contextOptions?: Parameters<typeof createHeadlessViewContext>[0],
220
+ * viewFactoryOptions?: import("../view/viewFactory.js").ViewFactoryOptions,
221
+ * }} [options]
222
+ * @returns {Promise<{ view: import("../view/view.js").default, context: ViewContext }>}
223
+ */
224
+ export async function createHeadlessViewHierarchy(spec, options = {}) {
225
+ const context =
226
+ options.context ??
227
+ createHeadlessViewContext({
228
+ ...options.contextOptions,
229
+ viewFactoryOptions: options.viewFactoryOptions,
230
+ });
231
+
232
+ if (spec.datasets) {
233
+ const getNamedDataFromProvider = context.getNamedDataFromProvider;
234
+ context.getNamedDataFromProvider = (name) =>
235
+ spec.datasets[name] ?? getNamedDataFromProvider(name);
236
+ }
237
+
238
+ const view = await context.createOrImportView(
239
+ /** @type {import("../spec/view.js").ViewSpec} */ (spec),
240
+ null,
241
+ null,
242
+ VIEW_ROOT_NAME
243
+ );
244
+
245
+ return { view, context };
246
+ }
@@ -25,7 +25,12 @@ export default class InteractionController {
25
25
  datum: import("../data/flowNode.js").Datum;
26
26
  uniqueId: number;
27
27
  };
28
- registerMouseEvents(): void;
28
+ suspendHoverTracking(): void;
29
+ /**
30
+ * @param {MouseEvent} [mouseEvent]
31
+ */
32
+ resumeHoverTracking(mouseEvent?: MouseEvent): void;
33
+ registerInteractionEvents(): void;
29
34
  /**
30
35
  * This method should be called in a mouseMove handler. If not called, the
31
36
  * tooltip will be hidden.
@@ -37,4 +42,8 @@ export default class InteractionController {
37
42
  updateTooltip<T>(datum: T, converter?: (arg0: T) => Promise<string | HTMLElement | import("lit").TemplateResult>): void;
38
43
  #private;
39
44
  }
45
+ export type ClientPointLike = {
46
+ clientX: number;
47
+ clientY: number;
48
+ };
40
49
  //# sourceMappingURL=interactionController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactionController.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/interactionController.js"],"names":[],"mappings":"AASA;IA2BI;;;;;;;;;;OAUG;IACH,mIATG;QAAmD,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;QACe,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QACY,OAAO,EAAzD,OAAO,wBAAwB,EAAE,OAAO;QACQ,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QACM,SAAS,EAArD,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI;QAC6C,eAAe,EAA9F,MAAM,CAAC,MAAM,EAAE,OAAO,8BAA8B,EAAE,cAAc,CAAC;QACjD,wBAAwB,EAA5C,MAAM,IAAI;QACY,mBAAmB,EAAzC,MAAM,MAAM;KACtB,EAgCA;IAED;cArDkB,OAAO,kBAAkB,EAAE,OAAO;eAAS,OAAO,qBAAqB,EAAE,KAAK;kBAAY,MAAM;MAuDjH;IAED,4BAgMC;IAkFD;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAYlF;;CACJ"}
1
+ {"version":3,"file":"interactionController.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/interactionController.js"],"names":[],"mappings":"AAWA;IAqCI;;;;;;;;;;OAUG;IACH,mIATG;QAAmD,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;QACe,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QACY,OAAO,EAAzD,OAAO,wBAAwB,EAAE,OAAO;QACQ,QAAQ,EAAxD,OAAO,sBAAsB,EAAE,OAAO;QACM,SAAS,EAArD,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI;QAC6C,eAAe,EAA9F,MAAM,CAAC,MAAM,EAAE,OAAO,8BAA8B,EAAE,cAAc,CAAC;QACjD,wBAAwB,EAA5C,MAAM,IAAI;QACY,mBAAmB,EAAzC,MAAM,MAAM;KACtB,EAqCA;IAED;cAhEkB,OAAO,kBAAkB,EAAE,OAAO;eAAS,OAAO,qBAAqB,EAAE,KAAK;kBAAY,MAAM;MAkEjH;IAED,6BAIC;IAED;;OAEG;IACH,iCAFW,UAAU,QA8CpB;IAED,kCAoaC;IA+JD;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAYlF;;CACJ;8BAGY;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC"}