@genome-spy/core 0.73.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 (359) hide show
  1. package/dist/bundle/AbortablePromiseCache-3gHJdF3E.js +96 -0
  2. package/dist/bundle/browser-BTgw5ieH.js +126 -0
  3. package/dist/bundle/chunk-DmhlhrBa.js +11 -0
  4. package/dist/bundle/esm-BDFRLEuD.js +1248 -0
  5. package/dist/bundle/esm-BygJiwh0.js +573 -0
  6. package/dist/bundle/esm-CGX-qz1d.js +155 -0
  7. package/dist/bundle/esm-CgfVIRJ-.js +121 -0
  8. package/dist/bundle/esm-CuMSzCHy.js +298 -0
  9. package/dist/bundle/esm-DMXpJXM4.js +369 -0
  10. package/dist/bundle/esm-DQiq2Zhd.js +1426 -0
  11. package/dist/bundle/esm-DtE8VqAv.js +1015 -0
  12. package/dist/bundle/esm-sIoQYZ21.js +461 -0
  13. package/dist/bundle/index.es.js +21071 -25935
  14. package/dist/bundle/index.js +363 -379
  15. package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
  16. package/dist/schema.json +13098 -7095
  17. package/dist/src/config/axisConfig.d.ts +16 -0
  18. package/dist/src/config/axisConfig.d.ts.map +1 -0
  19. package/dist/src/config/axisConfig.js +84 -0
  20. package/dist/src/config/defaultConfig.d.ts +3 -0
  21. package/dist/src/config/defaultConfig.d.ts.map +1 -0
  22. package/dist/src/config/defaultConfig.js +38 -0
  23. package/dist/src/config/defaults/axisDefaults.d.ts +5 -0
  24. package/dist/src/config/defaults/axisDefaults.d.ts.map +1 -0
  25. package/dist/src/config/defaults/axisDefaults.js +72 -0
  26. package/dist/src/config/defaults/markDefaults.d.ts +15 -0
  27. package/dist/src/config/defaults/markDefaults.d.ts.map +1 -0
  28. package/dist/src/config/defaults/markDefaults.js +121 -0
  29. package/dist/src/config/defaults/scaleDefaults.d.ts +5 -0
  30. package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -0
  31. package/dist/src/config/defaults/scaleDefaults.js +18 -0
  32. package/dist/src/config/defaults/titleDefaults.d.ts +5 -0
  33. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -0
  34. package/dist/src/config/defaults/titleDefaults.js +47 -0
  35. package/dist/src/config/defaults/viewDefaults.d.ts +3 -0
  36. package/dist/src/config/defaults/viewDefaults.d.ts.map +1 -0
  37. package/dist/src/config/defaults/viewDefaults.js +2 -0
  38. package/dist/src/config/markConfig.d.ts +8 -0
  39. package/dist/src/config/markConfig.d.ts.map +1 -0
  40. package/dist/src/config/markConfig.js +27 -0
  41. package/dist/src/config/mergeConfig.d.ts +8 -0
  42. package/dist/src/config/mergeConfig.d.ts.map +1 -0
  43. package/dist/src/config/mergeConfig.js +81 -0
  44. package/dist/src/config/resolveConfig.d.ts +22 -0
  45. package/dist/src/config/resolveConfig.d.ts.map +1 -0
  46. package/dist/src/config/resolveConfig.js +32 -0
  47. package/dist/src/config/scaleConfig.d.ts +40 -0
  48. package/dist/src/config/scaleConfig.d.ts.map +1 -0
  49. package/dist/src/config/scaleConfig.js +220 -0
  50. package/dist/src/config/styleUtils.d.ts +6 -0
  51. package/dist/src/config/styleUtils.d.ts.map +1 -0
  52. package/dist/src/config/styleUtils.js +10 -0
  53. package/dist/src/config/themes.d.ts +15 -0
  54. package/dist/src/config/themes.d.ts.map +1 -0
  55. package/dist/src/config/themes.js +293 -0
  56. package/dist/src/config/titleConfig.d.ts +12 -0
  57. package/dist/src/config/titleConfig.d.ts.map +1 -0
  58. package/dist/src/config/titleConfig.js +42 -0
  59. package/dist/src/config/viewConfig.d.ts +7 -0
  60. package/dist/src/config/viewConfig.d.ts.map +1 -0
  61. package/dist/src/config/viewConfig.js +29 -0
  62. package/dist/src/data/flowNode.d.ts +22 -1
  63. package/dist/src/data/flowNode.d.ts.map +1 -1
  64. package/dist/src/data/flowNode.js +37 -1
  65. package/dist/src/data/formats/bed.d.ts.map +1 -1
  66. package/dist/src/data/formats/bed.js +6 -1
  67. package/dist/src/data/formats/bedpe.d.ts.map +1 -1
  68. package/dist/src/data/formats/bedpe.js +4 -0
  69. package/dist/src/data/formats/fasta.d.ts.map +1 -1
  70. package/dist/src/data/formats/fasta.js +4 -0
  71. package/dist/src/data/formats/parquet.d.ts.map +1 -1
  72. package/dist/src/data/formats/parquet.js +4 -0
  73. package/dist/src/data/sources/dataSourceFactory.d.ts +2 -13
  74. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
  75. package/dist/src/data/sources/dataSourceFactory.js +5 -141
  76. package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
  77. package/dist/src/data/sources/lazy/axisGenomeSource.js +11 -0
  78. package/dist/src/data/sources/lazy/axisTickSource.d.ts +1 -1
  79. package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
  80. package/dist/src/data/sources/lazy/axisTickSource.js +19 -8
  81. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  82. package/dist/src/data/sources/lazy/bamSource.js +11 -0
  83. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  84. package/dist/src/data/sources/lazy/bigBedSource.js +12 -1
  85. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  86. package/dist/src/data/sources/lazy/bigWigSource.js +11 -0
  87. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  88. package/dist/src/data/sources/lazy/gff3Source.js +12 -1
  89. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  90. package/dist/src/data/sources/lazy/indexedFastaSource.js +11 -0
  91. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts +27 -0
  92. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts.map +1 -0
  93. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.js +65 -0
  94. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts +2 -0
  95. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts.map +1 -0
  96. package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +8 -0
  97. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  98. package/dist/src/data/sources/lazy/singleAxisLazySource.js +11 -2
  99. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  100. package/dist/src/data/sources/lazy/vcfSource.js +11 -0
  101. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  102. package/dist/src/data/sources/urlSource.js +5 -2
  103. package/dist/src/data/transforms/aggregate.d.ts +1 -0
  104. package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
  105. package/dist/src/data/transforms/aggregate.js +30 -8
  106. package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -1
  107. package/dist/src/data/transforms/aggregateOps.js +12 -1
  108. package/dist/src/data/transforms/coverage.js +2 -2
  109. package/dist/src/data/transforms/filter.js +1 -1
  110. package/dist/src/data/transforms/filterScoredLabels.d.ts +6 -0
  111. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  112. package/dist/src/data/transforms/filterScoredLabels.js +9 -0
  113. package/dist/src/data/transforms/measureText.d.ts +1 -0
  114. package/dist/src/data/transforms/measureText.d.ts.map +1 -1
  115. package/dist/src/data/transforms/measureText.js +14 -5
  116. package/dist/src/data/transforms/pileup.d.ts.map +1 -1
  117. package/dist/src/data/transforms/pileup.js +1 -2
  118. package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
  119. package/dist/src/data/transforms/regexFold.js +0 -1
  120. package/dist/src/embedFactory.d.ts +13 -0
  121. package/dist/src/embedFactory.d.ts.map +1 -0
  122. package/dist/src/embedFactory.js +127 -0
  123. package/dist/src/encoder/accessor.d.ts +3 -12
  124. package/dist/src/encoder/accessor.d.ts.map +1 -1
  125. package/dist/src/encoder/accessor.js +10 -65
  126. package/dist/src/encoder/encoder.d.ts +51 -8
  127. package/dist/src/encoder/encoder.d.ts.map +1 -1
  128. package/dist/src/encoder/encoder.js +179 -55
  129. package/dist/src/fonts/bmFontManager.js +1 -1
  130. package/dist/src/full.d.ts +2 -0
  131. package/dist/src/full.d.ts.map +1 -0
  132. package/dist/src/full.js +2 -0
  133. package/dist/src/genome/genome.d.ts +8 -0
  134. package/dist/src/genome/genome.d.ts.map +1 -1
  135. package/dist/src/genome/genome.js +16 -2
  136. package/dist/src/genome/genomeStore.js +1 -1
  137. package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -1
  138. package/dist/src/genome/rootGenomeConfig.js +6 -2
  139. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  140. package/dist/src/genome/scaleLocus.js +26 -7
  141. package/dist/src/genomeSpy/cursorManager.d.ts +69 -0
  142. package/dist/src/genomeSpy/cursorManager.d.ts.map +1 -0
  143. package/dist/src/genomeSpy/cursorManager.js +131 -0
  144. package/dist/src/genomeSpy/headlessBootstrap.d.ts +113 -0
  145. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -0
  146. package/dist/src/genomeSpy/headlessBootstrap.js +246 -0
  147. package/dist/src/genomeSpy/interactionController.d.ts +5 -0
  148. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  149. package/dist/src/genomeSpy/interactionController.js +212 -19
  150. package/dist/src/genomeSpy/interactionDispatcher.d.ts +50 -0
  151. package/dist/src/genomeSpy/interactionDispatcher.d.ts.map +1 -0
  152. package/dist/src/genomeSpy/interactionDispatcher.js +203 -0
  153. package/dist/src/genomeSpy/viewContextFactory.d.ts +4 -2
  154. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
  155. package/dist/src/genomeSpy/viewContextFactory.js +12 -4
  156. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  157. package/dist/src/genomeSpy/viewDataInit.js +7 -3
  158. package/dist/src/genomeSpy.d.ts +1 -124
  159. package/dist/src/genomeSpy.d.ts.map +1 -1
  160. package/dist/src/genomeSpy.js +7 -688
  161. package/dist/src/genomeSpyBase.d.ts +133 -0
  162. package/dist/src/genomeSpyBase.d.ts.map +1 -0
  163. package/dist/src/genomeSpyBase.js +719 -0
  164. package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
  165. package/dist/src/gl/arrayBuilder.js +0 -3
  166. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  167. package/dist/src/gl/colorUtils.js +3 -0
  168. package/dist/src/gl/dataToVertices.d.ts.map +1 -1
  169. package/dist/src/gl/dataToVertices.js +13 -8
  170. package/dist/src/gl/glslScaleGenerator.d.ts +2 -2
  171. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  172. package/dist/src/gl/glslScaleGenerator.js +5 -7
  173. package/dist/src/index.d.ts +3 -9
  174. package/dist/src/index.d.ts.map +1 -1
  175. package/dist/src/index.js +5 -114
  176. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +4462 -0
  177. package/dist/src/marks/link.d.ts.map +1 -1
  178. package/dist/src/marks/link.js +0 -23
  179. package/dist/src/marks/mark.d.ts +8 -1
  180. package/dist/src/marks/mark.d.ts.map +1 -1
  181. package/dist/src/marks/mark.js +61 -20
  182. package/dist/src/marks/markUtils.d.ts +18 -1
  183. package/dist/src/marks/markUtils.d.ts.map +1 -1
  184. package/dist/src/marks/markUtils.js +52 -4
  185. package/dist/src/marks/point.d.ts.map +1 -1
  186. package/dist/src/marks/point.js +6 -26
  187. package/dist/src/marks/rect.d.ts.map +1 -1
  188. package/dist/src/marks/rect.js +13 -21
  189. package/dist/src/marks/rule.d.ts +7 -2
  190. package/dist/src/marks/rule.d.ts.map +1 -1
  191. package/dist/src/marks/rule.js +125 -16
  192. package/dist/src/marks/text.d.ts.map +1 -1
  193. package/dist/src/marks/text.js +5 -47
  194. package/dist/src/minimal.d.ts +8 -0
  195. package/dist/src/minimal.d.ts.map +1 -0
  196. package/dist/src/minimal.js +21 -0
  197. package/dist/src/paramRuntime/viewParamRuntime.d.ts +19 -0
  198. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  199. package/dist/src/paramRuntime/viewParamRuntime.js +35 -0
  200. package/dist/src/scale/scale.d.ts.map +1 -1
  201. package/dist/src/scale/scale.js +13 -7
  202. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  203. package/dist/src/scales/axisResolution.js +9 -5
  204. package/dist/src/scales/domainPlanner.d.ts +28 -8
  205. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  206. package/dist/src/scales/domainPlanner.js +207 -73
  207. package/dist/src/scales/indexLikeDomainUtils.d.ts +29 -0
  208. package/dist/src/scales/indexLikeDomainUtils.d.ts.map +1 -0
  209. package/dist/src/scales/indexLikeDomainUtils.js +67 -0
  210. package/dist/src/scales/resolutionMemberOrder.d.ts +15 -0
  211. package/dist/src/scales/resolutionMemberOrder.d.ts.map +1 -0
  212. package/dist/src/scales/resolutionMemberOrder.js +22 -0
  213. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
  214. package/dist/src/scales/scaleInteractionController.js +43 -4
  215. package/dist/src/scales/scalePropsResolver.d.ts +3 -1
  216. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  217. package/dist/src/scales/scalePropsResolver.js +83 -6
  218. package/dist/src/scales/scaleResolution.d.ts +23 -0
  219. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  220. package/dist/src/scales/scaleResolution.js +220 -58
  221. package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -1
  222. package/dist/src/scales/scaleResolutionTestUtils.js +6 -2
  223. package/dist/src/scales/scaleRules.d.ts.map +1 -1
  224. package/dist/src/scales/scaleRules.js +16 -2
  225. package/dist/src/scales/selectionDomainUtils.d.ts +30 -0
  226. package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
  227. package/dist/src/scales/selectionDomainUtils.js +116 -1
  228. package/dist/src/screenshotHarness.js +3 -4
  229. package/dist/src/spec/axis.d.ts +41 -30
  230. package/dist/src/spec/channel.d.ts +15 -9
  231. package/dist/src/spec/config.d.ts +264 -0
  232. package/dist/src/spec/data.d.ts +7 -0
  233. package/dist/src/spec/decoration.d.ts +51 -0
  234. package/dist/src/spec/exampleFiles.d.ts +12 -0
  235. package/dist/src/spec/exampleFiles.d.ts.map +1 -0
  236. package/dist/src/spec/exampleFiles.js +52 -0
  237. package/dist/src/spec/font.d.ts +1 -1
  238. package/dist/src/spec/mark.d.ts +97 -13
  239. package/dist/src/spec/parameter.d.ts +30 -10
  240. package/dist/src/spec/root.d.ts +14 -0
  241. package/dist/src/spec/scale.d.ts +18 -13
  242. package/dist/src/spec/title.d.ts +13 -2
  243. package/dist/src/spec/tooltip.d.ts +1 -1
  244. package/dist/src/spec/transform.d.ts +39 -4
  245. package/dist/src/spec/view.d.ts +67 -19
  246. package/dist/src/styles/genome-spy.css +55 -55
  247. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  248. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  249. package/dist/src/styles/genome-spy.css.js +23 -22
  250. package/dist/src/testSetup.d.ts +2 -0
  251. package/dist/src/testSetup.d.ts.map +1 -0
  252. package/dist/src/testSetup.js +5 -0
  253. package/dist/src/tooltip/dataTooltipHandler.js +8 -2
  254. package/dist/src/tooltip/tooltipContext.d.ts.map +1 -1
  255. package/dist/src/tooltip/tooltipContext.js +3 -2
  256. package/dist/src/types/embedApi.d.ts +7 -0
  257. package/dist/src/types/encoder.d.ts +17 -15
  258. package/dist/src/types/scaleResolutionApi.d.ts +20 -0
  259. package/dist/src/types/viewContext.d.ts +23 -1
  260. package/dist/src/utils/expression.d.ts +2 -2
  261. package/dist/src/utils/expression.d.ts.map +1 -1
  262. package/dist/src/utils/expression.js +63 -8
  263. package/dist/src/utils/field.d.ts.map +1 -1
  264. package/dist/src/utils/field.js +0 -1
  265. package/dist/src/utils/inertia.d.ts.map +1 -1
  266. package/dist/src/utils/inertia.js +0 -1
  267. package/dist/src/utils/inputBinding.d.ts +1 -1
  268. package/dist/src/utils/interaction.d.ts +109 -0
  269. package/dist/src/utils/interaction.d.ts.map +1 -0
  270. package/dist/src/utils/interaction.js +200 -0
  271. package/dist/src/utils/interactionEvent.d.ts +21 -42
  272. package/dist/src/utils/interactionEvent.d.ts.map +1 -1
  273. package/dist/src/utils/interactionEvent.js +43 -66
  274. package/dist/src/utils/kWayMerge.js +1 -1
  275. package/dist/src/utils/mergeObjects.d.ts.map +1 -1
  276. package/dist/src/utils/mergeObjects.js +0 -2
  277. package/dist/src/utils/radixSort.d.ts.map +1 -1
  278. package/dist/src/utils/radixSort.js +0 -2
  279. package/dist/src/utils/throttle.d.ts.map +1 -1
  280. package/dist/src/utils/throttle.js +0 -2
  281. package/dist/src/utils/ui/tooltip.d.ts +1 -0
  282. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  283. package/dist/src/utils/ui/tooltip.js +1 -0
  284. package/dist/src/utils/url.js +1 -1
  285. package/dist/src/view/axisGridView.d.ts +1 -1
  286. package/dist/src/view/axisGridView.d.ts.map +1 -1
  287. package/dist/src/view/axisGridView.js +2 -47
  288. package/dist/src/view/axisView.d.ts +2 -3
  289. package/dist/src/view/axisView.d.ts.map +1 -1
  290. package/dist/src/view/axisView.js +251 -106
  291. package/dist/src/view/concatView.d.ts +2 -1
  292. package/dist/src/view/concatView.d.ts.map +1 -1
  293. package/dist/src/view/concatView.js +4 -2
  294. package/dist/src/view/containerMutationHelper.d.ts +3 -0
  295. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  296. package/dist/src/view/containerMutationHelper.js +4 -1
  297. package/dist/src/view/facetView.d.ts +1 -1
  298. package/dist/src/view/facetView.js +3 -3
  299. package/dist/src/view/flowBuilder.js +2 -2
  300. package/dist/src/view/gridView/gridChild.d.ts +6 -0
  301. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  302. package/dist/src/view/gridView/gridChild.js +72 -43
  303. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  304. package/dist/src/view/gridView/gridView.js +255 -101
  305. package/dist/src/view/gridView/keyboardZoomController.d.ts +2 -2
  306. package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -1
  307. package/dist/src/view/gridView/keyboardZoomController.js +1 -1
  308. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  309. package/dist/src/view/gridView/scrollbar.js +4 -2
  310. package/dist/src/view/gridView/selectionRect.d.ts +4 -0
  311. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  312. package/dist/src/view/gridView/selectionRect.js +20 -1
  313. package/dist/src/view/gridView/separatorView.d.ts +1 -0
  314. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  315. package/dist/src/view/gridView/separatorView.js +9 -0
  316. package/dist/src/view/interactionRouting.d.ts +20 -0
  317. package/dist/src/view/interactionRouting.d.ts.map +1 -0
  318. package/dist/src/view/interactionRouting.js +53 -0
  319. package/dist/src/view/layerView.d.ts.map +1 -1
  320. package/dist/src/view/layerView.js +12 -9
  321. package/dist/src/view/layout/grid.js +1 -1
  322. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  323. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +0 -2
  324. package/dist/src/view/testUtils.d.ts +17 -3
  325. package/dist/src/view/testUtils.d.ts.map +1 -1
  326. package/dist/src/view/testUtils.js +62 -69
  327. package/dist/src/view/title.d.ts +8 -1
  328. package/dist/src/view/title.d.ts.map +1 -1
  329. package/dist/src/view/title.js +66 -76
  330. package/dist/src/view/unitView.d.ts +1 -1
  331. package/dist/src/view/unitView.d.ts.map +1 -1
  332. package/dist/src/view/unitView.js +67 -17
  333. package/dist/src/view/view.d.ts +76 -30
  334. package/dist/src/view/view.d.ts.map +1 -1
  335. package/dist/src/view/view.js +136 -47
  336. package/dist/src/view/viewFactory.d.ts +11 -3
  337. package/dist/src/view/viewFactory.d.ts.map +1 -1
  338. package/dist/src/view/viewFactory.js +37 -11
  339. package/dist/src/view/viewUtils.d.ts.map +1 -1
  340. package/dist/src/view/viewUtils.js +41 -5
  341. package/dist/src/view/zoom.d.ts +2 -2
  342. package/dist/src/view/zoom.d.ts.map +1 -1
  343. package/dist/src/view/zoom.js +21 -23
  344. package/package.json +18 -10
  345. package/dist/bundle/AbortablePromiseCache-Dj0vzLnp.js +0 -149
  346. package/dist/bundle/browser-0iNU5Wit.js +0 -138
  347. package/dist/bundle/index-BYsZN7b0.js +0 -1597
  348. package/dist/bundle/index-C3kClAEN.js +0 -1771
  349. package/dist/bundle/index-C7wOh6y1.js +0 -657
  350. package/dist/bundle/index-CRaQAuki.js +0 -326
  351. package/dist/bundle/index-D9v1PCj9.js +0 -507
  352. package/dist/bundle/index-GDOuv_D5.js +0 -266
  353. package/dist/bundle/index-Gt44EOIH.js +0 -628
  354. package/dist/bundle/inflate-GtwLkvSP.js +0 -1048
  355. package/dist/bundle/parquetRead-BnAGCa4_.js +0 -1663
  356. package/dist/bundle/unzip-Bac01w6X.js +0 -1492
  357. package/dist/src/config/scaleDefaults.d.ts +0 -8
  358. package/dist/src/config/scaleDefaults.d.ts.map +0 -1
  359. package/dist/src/config/scaleDefaults.js +0 -45
@@ -1,11 +1,13 @@
1
1
  import UnitView from "../view/unitView.js";
2
2
  import { VISIT_STOP } from "../view/view.js";
3
3
  import { readPickingPixel } from "../gl/webGLHelper.js";
4
- import InteractionEvent from "../utils/interactionEvent.js";
5
4
  import Inertia, { makeEventTemplate } from "../utils/inertia.js";
6
5
  import Point from "../view/layout/point.js";
7
6
  import { isStillZooming } from "../view/zoom.js";
8
7
  import createTooltipContext from "../tooltip/tooltipContext.js";
8
+ import { FREEZE_INTERACTION_CLASS_NAME } from "../utils/ui/tooltip.js";
9
+ import InteractionDispatcher from "./interactionDispatcher.js";
10
+ import CursorManager from "./cursorManager.js";
9
11
 
10
12
  export default class InteractionController {
11
13
  /** @type {import("../view/view.js").default} */
@@ -24,6 +26,10 @@ export default class InteractionController {
24
26
  #renderPickingFramebuffer;
25
27
  /** @type {() => number} */
26
28
  #getDevicePixelRatio;
29
+ /** @type {InteractionDispatcher} */
30
+ #interactionDispatcher;
31
+ /** @type {CursorManager} */
32
+ #cursorManager;
27
33
  /**
28
34
  * @type {{ mark: import("../marks/mark.js").default, datum: import("../data/flowNode.js").Datum, uniqueId: number }}
29
35
  */
@@ -32,8 +38,14 @@ export default class InteractionController {
32
38
  #wheelInertia;
33
39
  /** @type {Point} */
34
40
  #mouseDownCoords;
41
+ /** @type {Point | undefined} */
42
+ #lastPointerPoint;
35
43
  /** @type {boolean} */
36
44
  #tooltipUpdateRequested;
45
+ /** @type {number} */
46
+ #hoverTrackingSuspensionCount;
47
+ /** @type {boolean} */
48
+ #postRenderHoverRefreshRequested;
37
49
  /**
38
50
  * @param {object} options
39
51
  * @param {import("../view/view.js").default} options.viewRoot
@@ -63,6 +75,8 @@ export default class InteractionController {
63
75
  this.#tooltipHandlers = tooltipHandlers;
64
76
  this.#renderPickingFramebuffer = renderPickingFramebuffer;
65
77
  this.#getDevicePixelRatio = getDevicePixelRatio;
78
+ this.#interactionDispatcher = new InteractionDispatcher({ viewRoot });
79
+ this.#cursorManager = new CursorManager({ canvas: glHelper.canvas });
66
80
 
67
81
  /**
68
82
  * Currently hovered mark and datum
@@ -74,14 +88,72 @@ export default class InteractionController {
74
88
 
75
89
  /** @type {Point} */
76
90
  this.#mouseDownCoords = undefined;
91
+ this.#lastPointerPoint = undefined;
77
92
 
78
93
  this.#tooltipUpdateRequested = false;
94
+ this.#hoverTrackingSuspensionCount = 0;
95
+ this.#postRenderHoverRefreshRequested = false;
79
96
  }
80
97
 
81
98
  getCurrentHover() {
82
99
  return this.#currentHover;
83
100
  }
84
101
 
102
+ suspendHoverTracking() {
103
+ this.#hoverTrackingSuspensionCount++;
104
+ this.#tooltip.clear();
105
+ this.#tooltipUpdateRequested = false;
106
+ }
107
+
108
+ /**
109
+ * @param {MouseEvent} [mouseEvent]
110
+ */
111
+ resumeHoverTracking(mouseEvent) {
112
+ if (this.#hoverTrackingSuspensionCount <= 0) {
113
+ return;
114
+ }
115
+
116
+ this.#hoverTrackingSuspensionCount--;
117
+ if (this.#hoverTrackingSuspensionCount > 0) {
118
+ return;
119
+ }
120
+
121
+ this.#tooltip.clear();
122
+ this.#tooltipUpdateRequested = false;
123
+
124
+ if (this.#isInteractionFrozen()) {
125
+ return;
126
+ }
127
+
128
+ if (mouseEvent) {
129
+ const point = this.#toCanvasPoint(mouseEvent);
130
+ this.#lastPointerPoint = point;
131
+ if (this.#isInsideCanvas(point)) {
132
+ this.#refreshHover(point);
133
+ this.#cursorManager.update({
134
+ target: this.#interactionDispatcher.getCurrentTarget(),
135
+ hover: this.#currentHover,
136
+ });
137
+ return;
138
+ }
139
+
140
+ this.#interactionDispatcher.handlePointerLeave(mouseEvent);
141
+ } else if (
142
+ this.#lastPointerPoint &&
143
+ this.#isInsideCanvas(this.#lastPointerPoint)
144
+ ) {
145
+ this.#refreshHover(this.#lastPointerPoint);
146
+ this.#cursorManager.update({
147
+ target: this.#interactionDispatcher.getCurrentTarget(),
148
+ hover: this.#currentHover,
149
+ });
150
+ return;
151
+ }
152
+
153
+ this.#currentHover = null;
154
+ this.#cursorManager.clear();
155
+ }
156
+
85
157
  registerInteractionEvents() {
86
158
  const canvas = this.#glHelper.canvas;
87
159
 
@@ -93,17 +165,26 @@ export default class InteractionController {
93
165
  /**
94
166
  * @param {Point} point
95
167
  * @param {import("../utils/interactionEvent.js").InteractionUiEvent} uiEvent
96
- * @returns {InteractionEvent}
168
+ * @returns {import("../utils/interaction.js").default}
97
169
  */
98
- const dispatchInteractionEvent = (point, uiEvent) => {
99
- const interactionEvent = new InteractionEvent(point, uiEvent);
100
- this.#viewRoot.propagateInteractionEvent(interactionEvent);
170
+ const dispatchInteraction = (point, uiEvent) => {
171
+ const interaction = this.#interactionDispatcher.dispatch(
172
+ point,
173
+ uiEvent
174
+ );
101
175
 
102
176
  if (!this.#tooltipUpdateRequested) {
103
177
  this.#tooltip.clear();
104
178
  }
105
179
 
106
- return interactionEvent;
180
+ if (uiEvent instanceof MouseEvent && uiEvent.type !== "mouseout") {
181
+ this.#cursorManager.update({
182
+ target: interaction.target,
183
+ hover: this.#currentHover,
184
+ });
185
+ }
186
+
187
+ return interaction;
107
188
  };
108
189
 
109
190
  /** @param {Event} event */
@@ -112,13 +193,21 @@ export default class InteractionController {
112
193
  const wheeling = now - lastWheelEvent < 200;
113
194
 
114
195
  if (event instanceof MouseEvent) {
115
- const rect = canvas.getBoundingClientRect();
116
- const point = new Point(
117
- event.clientX - rect.left - canvas.clientLeft,
118
- event.clientY - rect.top - canvas.clientTop
119
- );
196
+ if (
197
+ event.type !== "contextmenu" &&
198
+ this.#isInteractionFrozen()
199
+ ) {
200
+ return;
201
+ }
120
202
 
121
- if (event.type == "mousemove" && !wheeling) {
203
+ const point = this.#toCanvasPoint(event);
204
+ this.#lastPointerPoint = point;
205
+
206
+ if (
207
+ event.type == "mousemove" &&
208
+ !wheeling &&
209
+ this.#hoverTrackingSuspensionCount === 0
210
+ ) {
122
211
  this.#tooltip.handleMouseMove(event);
123
212
  this.#tooltipUpdateRequested = false;
124
213
 
@@ -135,7 +224,7 @@ export default class InteractionController {
135
224
  * @param {MouseEvent} dispatchedEvent
136
225
  */
137
226
  const dispatchEvent = (dispatchedEvent) => {
138
- dispatchInteractionEvent(point, dispatchedEvent);
227
+ dispatchInteraction(point, dispatchedEvent);
139
228
  };
140
229
 
141
230
  if (event.type != "wheel") {
@@ -174,7 +263,7 @@ export default class InteractionController {
174
263
  // wheel ownership without running real wheel side
175
264
  // effects first. Inertia is layered on top of that
176
265
  // decision and is not the reason for the probe.
177
- const probeEvent = dispatchInteractionEvent(point, {
266
+ const probeEvent = dispatchInteraction(point, {
178
267
  type: "wheelclaimprobe",
179
268
  });
180
269
 
@@ -239,7 +328,17 @@ export default class InteractionController {
239
328
  this.#mouseDownCoords?.subtract(Point.fromMouseEvent(event))
240
329
  .length < 3
241
330
  ) {
242
- dispatchEvent(event);
331
+ const interaction = dispatchInteraction(point, event);
332
+
333
+ if (
334
+ event.type == "dblclick" &&
335
+ this.#hoverTrackingSuspensionCount === 0 &&
336
+ this.#isInsideCanvas(point)
337
+ ) {
338
+ this.#scheduleHoverRefreshAfterRender();
339
+ }
340
+
341
+ return interaction;
243
342
  }
244
343
  }
245
344
  };
@@ -313,7 +412,7 @@ export default class InteractionController {
313
412
  zDelta
314
413
  ) => {
315
414
  const point = toCanvasPoint(x, y);
316
- dispatchInteractionEvent(point, {
415
+ dispatchInteraction(point, {
317
416
  type: "touchgesture",
318
417
  phase,
319
418
  pointerCount,
@@ -428,7 +527,10 @@ export default class InteractionController {
428
527
  document.addEventListener(
429
528
  "mouseup",
430
529
  () => this.#tooltip.popEnabledState(),
431
- { once: true }
530
+ {
531
+ once: true,
532
+ capture: true,
533
+ }
432
534
  );
433
535
  this.#tooltip.pushEnabledState(false);
434
536
  };
@@ -454,12 +556,103 @@ export default class InteractionController {
454
556
  event.stopPropagation()
455
557
  );
456
558
 
457
- canvas.addEventListener("mouseout", () => {
559
+ canvas.addEventListener("mouseout", (event) => {
560
+ if (this.#isInteractionFrozen()) {
561
+ return;
562
+ }
563
+
564
+ if (this.#hoverTrackingSuspensionCount > 0) {
565
+ this.#tooltip.clear();
566
+ this.#tooltipUpdateRequested = false;
567
+ return;
568
+ }
569
+
570
+ this.#interactionDispatcher.handlePointerLeave(
571
+ /** @type {MouseEvent} */ (event)
572
+ );
573
+ this.#cursorManager.clear();
458
574
  this.#tooltip.clear();
459
575
  this.#currentHover = null;
460
576
  });
461
577
  }
462
578
 
579
+ /**
580
+ * @param {MouseEvent} event
581
+ */
582
+ #toCanvasPoint(event) {
583
+ const canvas = this.#glHelper.canvas;
584
+ const rect = canvas.getBoundingClientRect();
585
+ return new Point(
586
+ event.clientX - rect.left - canvas.clientLeft,
587
+ event.clientY - rect.top - canvas.clientTop
588
+ );
589
+ }
590
+
591
+ /**
592
+ * @param {Point} point
593
+ */
594
+ #isInsideCanvas(point) {
595
+ const canvas = this.#glHelper.canvas;
596
+ return (
597
+ point.x >= 0 &&
598
+ point.y >= 0 &&
599
+ point.x <= canvas.clientWidth &&
600
+ point.y <= canvas.clientHeight
601
+ );
602
+ }
603
+
604
+ /**
605
+ * @param {Point} point
606
+ */
607
+ #refreshHover(point) {
608
+ if (!isStillZooming()) {
609
+ this.#renderPickingFramebuffer();
610
+ this.#handlePicking(point.x, point.y);
611
+ }
612
+ }
613
+
614
+ #scheduleHoverRefreshAfterRender() {
615
+ if (this.#postRenderHoverRefreshRequested) {
616
+ return;
617
+ }
618
+
619
+ this.#postRenderHoverRefreshRequested = true;
620
+ this.#animator.requestRender();
621
+ window.requestAnimationFrame(() => {
622
+ this.#postRenderHoverRefreshRequested = false;
623
+
624
+ if (
625
+ this.#hoverTrackingSuspensionCount > 0 ||
626
+ this.#isInteractionFrozen()
627
+ ) {
628
+ return;
629
+ }
630
+
631
+ const point = this.#lastPointerPoint;
632
+ if (!point || !this.#isInsideCanvas(point)) {
633
+ this.#currentHover = null;
634
+ this.#cursorManager.clear();
635
+ return;
636
+ }
637
+
638
+ this.#tooltip.clear();
639
+ this.#tooltipUpdateRequested = false;
640
+ this.#refreshHover(point);
641
+ this.#cursorManager.update({
642
+ target: this.#interactionDispatcher.getCurrentTarget(),
643
+ hover: this.#currentHover,
644
+ });
645
+ });
646
+ }
647
+
648
+ #isInteractionFrozen() {
649
+ return (
650
+ typeof document !== "undefined" &&
651
+ !!document.body &&
652
+ document.body.classList.contains(FREEZE_INTERACTION_CLASS_NAME)
653
+ );
654
+ }
655
+
463
656
  /**
464
657
  * @param {number} x
465
658
  * @param {number} y
@@ -520,7 +713,7 @@ export default class InteractionController {
520
713
 
521
714
  const tooltipProps = mark.properties.tooltip;
522
715
 
523
- if (tooltipProps !== null) {
716
+ if (tooltipProps !== null && tooltipProps !== false) {
524
717
  const handlerName = tooltipProps?.handler ?? "default";
525
718
  const handler = this.#tooltipHandlers[handlerName];
526
719
  if (!handler) {
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Dispatches `Interaction` objects through the view hierarchy and synthesizes
3
+ * subtree-level pointer transition events.
4
+ *
5
+ * The dispatcher keeps track of the previously hovered target path and
6
+ * compares it with the current one on every `mousemove`. From that diff it
7
+ * emits:
8
+ * - `mouseleave` for views that are no longer in the pointed subtree
9
+ * - `mouseenter` for views that have newly entered the pointed subtree
10
+ *
11
+ * This is intentionally closer to `mouseenter` / `mouseleave` semantics than
12
+ * DOM `mouseover` / `mouseout`. Moving between descendants inside the same
13
+ * subtree does not cause the ancestor to leave and re-enter.
14
+ *
15
+ * `dispatch()` handles ordinary event propagation and updates the current
16
+ * pointed target. `handlePointerLeave()` is used when the pointer leaves the
17
+ * canvas entirely, in which case the dispatcher emits `mouseleave` for the
18
+ * whole previously hovered path and clears its tracked state.
19
+ *
20
+ * The dispatcher does not do hit testing itself. It relies on views to route
21
+ * the incoming interaction and set `interaction.target` during propagation.
22
+ */
23
+ export default class InteractionDispatcher {
24
+ /**
25
+ * @param {object} options
26
+ * @param {import("../view/view.js").default} options.viewRoot
27
+ */
28
+ constructor({ viewRoot }: {
29
+ viewRoot: import("../view/view.js").default;
30
+ });
31
+ /**
32
+ * Dispatches an interaction through the view tree and updates the tracked
33
+ * hover path for transition synthesis.
34
+ *
35
+ * @param {import("../view/layout/point.js").default} point
36
+ * @param {import("../utils/interactionEvent.js").InteractionUiEvent} uiEvent
37
+ * @returns {Interaction}
38
+ */
39
+ dispatch(point: import("../view/layout/point.js").default, uiEvent: import("../utils/interactionEvent.js").InteractionUiEvent): Interaction;
40
+ /**
41
+ * Dispatches mouseleave transitions when the pointer leaves the canvas.
42
+ *
43
+ * @param {import("../utils/interactionEvent.js").InteractionUiEvent} uiEvent
44
+ */
45
+ handlePointerLeave(uiEvent: import("../utils/interactionEvent.js").InteractionUiEvent): void;
46
+ getCurrentTarget(): import("../view/view.js").default<import("../spec/view.js").ViewSpec>;
47
+ #private;
48
+ }
49
+ import Interaction from "../utils/interaction.js";
50
+ //# sourceMappingURL=interactionDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactionDispatcher.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/interactionDispatcher.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAUI;;;OAGG;IACH,0BAFG;QAAmD,QAAQ,EAAnD,OAAO,iBAAiB,EAAE,OAAO;KAC3C,EAGA;IAED;;;;;;;OAOG;IACH,gBAJW,OAAO,yBAAyB,EAAE,OAAO,WACzC,OAAO,8BAA8B,EAAE,kBAAkB,GACvD,WAAW,CAavB;IAED;;;;OAIG;IACH,4BAFW,OAAO,8BAA8B,EAAE,kBAAkB,QAiBnE;IAED,0FAEC;;CAmHJ;wBA1MuB,yBAAyB"}
@@ -0,0 +1,203 @@
1
+ import Interaction from "../utils/interaction.js";
2
+
3
+ /**
4
+ * Dispatches `Interaction` objects through the view hierarchy and synthesizes
5
+ * subtree-level pointer transition events.
6
+ *
7
+ * The dispatcher keeps track of the previously hovered target path and
8
+ * compares it with the current one on every `mousemove`. From that diff it
9
+ * emits:
10
+ * - `mouseleave` for views that are no longer in the pointed subtree
11
+ * - `mouseenter` for views that have newly entered the pointed subtree
12
+ *
13
+ * This is intentionally closer to `mouseenter` / `mouseleave` semantics than
14
+ * DOM `mouseover` / `mouseout`. Moving between descendants inside the same
15
+ * subtree does not cause the ancestor to leave and re-enter.
16
+ *
17
+ * `dispatch()` handles ordinary event propagation and updates the current
18
+ * pointed target. `handlePointerLeave()` is used when the pointer leaves the
19
+ * canvas entirely, in which case the dispatcher emits `mouseleave` for the
20
+ * whole previously hovered path and clears its tracked state.
21
+ *
22
+ * The dispatcher does not do hit testing itself. It relies on views to route
23
+ * the incoming interaction and set `interaction.target` during propagation.
24
+ */
25
+ export default class InteractionDispatcher {
26
+ /** @type {import("../view/view.js").default} */
27
+ #viewRoot;
28
+ /** @type {import("../view/layout/point.js").default | undefined} */
29
+ #lastPoint;
30
+ /** @type {import("../view/view.js").default | undefined} */
31
+ #lastTarget;
32
+ /** @type {import("../view/view.js").default[]} */
33
+ #previousPath = [];
34
+
35
+ /**
36
+ * @param {object} options
37
+ * @param {import("../view/view.js").default} options.viewRoot
38
+ */
39
+ constructor({ viewRoot }) {
40
+ this.#viewRoot = viewRoot;
41
+ }
42
+
43
+ /**
44
+ * Dispatches an interaction through the view tree and updates the tracked
45
+ * hover path for transition synthesis.
46
+ *
47
+ * @param {import("../view/layout/point.js").default} point
48
+ * @param {import("../utils/interactionEvent.js").InteractionUiEvent} uiEvent
49
+ * @returns {Interaction}
50
+ */
51
+ dispatch(point, uiEvent) {
52
+ this.#lastPoint = point;
53
+ const interaction = new Interaction(point, uiEvent);
54
+ this.#viewRoot.propagateInteraction(interaction);
55
+ this.#lastTarget = interaction.target;
56
+
57
+ if (interaction.type === "mousemove") {
58
+ this.#dispatchPointerTransitions(interaction);
59
+ }
60
+
61
+ return interaction;
62
+ }
63
+
64
+ /**
65
+ * Dispatches mouseleave transitions when the pointer leaves the canvas.
66
+ *
67
+ * @param {import("../utils/interactionEvent.js").InteractionUiEvent} uiEvent
68
+ */
69
+ handlePointerLeave(uiEvent) {
70
+ if (!this.#lastPoint || this.#previousPath.length === 0) {
71
+ this.#previousPath = [];
72
+ this.#lastTarget = undefined;
73
+ return;
74
+ }
75
+
76
+ const interaction = new Interaction(
77
+ this.#lastPoint,
78
+ uiEvent,
79
+ "mouseleave"
80
+ );
81
+ this.#dispatchLeaveEvents(interaction, this.#previousPath, undefined);
82
+ this.#previousPath = [];
83
+ this.#lastTarget = undefined;
84
+ }
85
+
86
+ getCurrentTarget() {
87
+ return this.#lastTarget;
88
+ }
89
+
90
+ /**
91
+ * Diffs the old and new pointed paths and emits synthetic subtree
92
+ * transitions.
93
+ *
94
+ * @param {Interaction} interaction
95
+ */
96
+ #dispatchPointerTransitions(interaction) {
97
+ const currentPath = this.#toRootPath(interaction.target);
98
+ const previousPath = this.#previousPath;
99
+
100
+ let commonLength = 0;
101
+ while (
102
+ commonLength < previousPath.length &&
103
+ commonLength < currentPath.length &&
104
+ previousPath[commonLength] === currentPath[commonLength]
105
+ ) {
106
+ commonLength++;
107
+ }
108
+
109
+ if (commonLength < previousPath.length) {
110
+ this.#dispatchLeaveEvents(
111
+ interaction,
112
+ previousPath.slice(commonLength),
113
+ currentPath.at(-1)
114
+ );
115
+ }
116
+
117
+ if (commonLength < currentPath.length) {
118
+ this.#dispatchEnterEvents(
119
+ interaction,
120
+ currentPath.slice(commonLength),
121
+ previousPath.at(-1)
122
+ );
123
+ }
124
+
125
+ this.#previousPath = currentPath;
126
+ }
127
+
128
+ /**
129
+ * @param {Interaction} baseInteraction
130
+ * @param {import("../view/view.js").default[]} leavingViews
131
+ * @param {import("../view/view.js").default | undefined} relatedTarget
132
+ */
133
+ #dispatchLeaveEvents(baseInteraction, leavingViews, relatedTarget) {
134
+ for (let i = leavingViews.length - 1; i >= 0; i--) {
135
+ const interaction = new Interaction(
136
+ baseInteraction.point,
137
+ baseInteraction.uiEvent,
138
+ "mouseleave"
139
+ );
140
+ const view = leavingViews[i];
141
+ interaction.target = view;
142
+ interaction.currentTarget = view;
143
+ interaction.relatedTarget = relatedTarget;
144
+ this.#dispatchDirect(view, interaction);
145
+
146
+ if (interaction.stopped) {
147
+ return;
148
+ }
149
+ }
150
+ }
151
+
152
+ /**
153
+ * @param {Interaction} baseInteraction
154
+ * @param {import("../view/view.js").default[]} enteringViews
155
+ * @param {import("../view/view.js").default | undefined} relatedTarget
156
+ */
157
+ #dispatchEnterEvents(baseInteraction, enteringViews, relatedTarget) {
158
+ for (const view of enteringViews) {
159
+ const interaction = new Interaction(
160
+ baseInteraction.point,
161
+ baseInteraction.uiEvent,
162
+ "mouseenter"
163
+ );
164
+ interaction.target = view;
165
+ interaction.currentTarget = view;
166
+ interaction.relatedTarget = relatedTarget;
167
+ this.#dispatchDirect(view, interaction);
168
+
169
+ if (interaction.stopped) {
170
+ return;
171
+ }
172
+ }
173
+ }
174
+
175
+ /**
176
+ * @param {import("../view/view.js").default | undefined} target
177
+ * @returns {import("../view/view.js").default[]}
178
+ */
179
+ #toRootPath(target) {
180
+ return target ? target.getLayoutAncestors().reverse() : [];
181
+ }
182
+
183
+ /**
184
+ * Dispatches a synthetic transition directly on a single view.
185
+ *
186
+ * Unlike ordinary routed propagation, enter/leave transitions are already
187
+ * resolved to a specific view. Therefore the dispatcher invokes that
188
+ * view's capture listeners first and bubble listeners second without
189
+ * re-entering container routing.
190
+ *
191
+ * @param {import("../view/view.js").default} view
192
+ * @param {Interaction} interaction
193
+ */
194
+ #dispatchDirect(view, interaction) {
195
+ view.handleInteraction(interaction, true);
196
+
197
+ if (interaction.stopped) {
198
+ return;
199
+ }
200
+
201
+ view.handleInteraction(interaction, false);
202
+ }
203
+ }
@@ -7,12 +7,14 @@
7
7
  * what they need while keeping production usage explicit.
8
8
  *
9
9
  * @param {Partial<ViewContext> & {
10
- * createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void) => Promise<import("../view/view.js").default>
10
+ * createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void, options?: import("../types/viewContext.js").CreateViewOptions) => Promise<import("../view/view.js").default>
11
+ * allowMissingGlHelper?: boolean
11
12
  * }} options
12
13
  * @returns {ViewContext}
13
14
  */
14
15
  export function createViewContext(options: Partial<ViewContext> & {
15
- createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void) => Promise<import("../view/view.js").default>;
16
+ createOrImportViewWithContext?: (context: ViewContext, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, layoutParent?: import("../view/containerView.js").default, dataParent?: import("../view/view.js").default, defaultName?: string, validator?: (spec: import("../spec/view.js").ViewSpec) => void, options?: import("../types/viewContext.js").CreateViewOptions) => Promise<import("../view/view.js").default>;
17
+ allowMissingGlHelper?: boolean;
16
18
  }): ViewContext;
17
19
  export type ViewContext = import("../types/viewContext.js").default;
18
20
  //# sourceMappingURL=viewContextFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"viewContextFactory.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewContextFactory.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,2CALW,OAAO,CAAC,WAAW,CAAC,GAAG;IAC7B,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,KAAK,IAAI,KAAK,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAA;CACvX,GACS,WAAW,CAiEvB;0BA5EY,OAAO,yBAAyB,EAAE,OAAO"}
1
+ {"version":3,"file":"viewContextFactory.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewContextFactory.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;GAUG;AACH,2CANW,OAAO,CAAC,WAAW,CAAC,GAAG;IAC7B,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,yBAAyB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAA;IACrb,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,GACS,WAAW,CAwEvB;0BApFY,OAAO,yBAAyB,EAAE,OAAO"}