@genome-spy/core 0.73.0 → 0.75.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 (392) 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 +21266 -25938
  14. package/dist/bundle/index.js +367 -383
  15. package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
  16. package/dist/schema.json +13421 -7210
  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/dataUtils.d.ts +25 -0
  77. package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
  78. package/dist/src/data/sources/dataUtils.js +23 -0
  79. package/dist/src/data/sources/inlineSource.js +2 -2
  80. package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
  81. package/dist/src/data/sources/lazy/axisGenomeSource.js +11 -0
  82. package/dist/src/data/sources/lazy/axisTickSource.d.ts +1 -1
  83. package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
  84. package/dist/src/data/sources/lazy/axisTickSource.js +19 -8
  85. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  86. package/dist/src/data/sources/lazy/bamSource.js +11 -0
  87. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  88. package/dist/src/data/sources/lazy/bigBedSource.js +12 -1
  89. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  90. package/dist/src/data/sources/lazy/bigWigSource.js +11 -0
  91. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  92. package/dist/src/data/sources/lazy/gff3Source.js +12 -1
  93. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  94. package/dist/src/data/sources/lazy/indexedFastaSource.js +11 -0
  95. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts +27 -0
  96. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts.map +1 -0
  97. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.js +65 -0
  98. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts +2 -0
  99. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts.map +1 -0
  100. package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +8 -0
  101. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  102. package/dist/src/data/sources/lazy/singleAxisLazySource.js +11 -2
  103. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  104. package/dist/src/data/sources/lazy/vcfSource.js +11 -0
  105. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  106. package/dist/src/data/sources/urlSource.js +13 -5
  107. package/dist/src/data/transforms/aggregate.d.ts +1 -0
  108. package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
  109. package/dist/src/data/transforms/aggregate.js +30 -8
  110. package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -1
  111. package/dist/src/data/transforms/aggregateOps.js +12 -1
  112. package/dist/src/data/transforms/coverage.js +2 -2
  113. package/dist/src/data/transforms/filter.js +1 -1
  114. package/dist/src/data/transforms/filterScoredLabels.d.ts +6 -0
  115. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  116. package/dist/src/data/transforms/filterScoredLabels.js +9 -0
  117. package/dist/src/data/transforms/measureText.d.ts +1 -0
  118. package/dist/src/data/transforms/measureText.d.ts.map +1 -1
  119. package/dist/src/data/transforms/measureText.js +14 -5
  120. package/dist/src/data/transforms/pileup.d.ts.map +1 -1
  121. package/dist/src/data/transforms/pileup.js +1 -2
  122. package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
  123. package/dist/src/data/transforms/regexFold.js +0 -1
  124. package/dist/src/embedFactory.d.ts +13 -0
  125. package/dist/src/embedFactory.d.ts.map +1 -0
  126. package/dist/src/embedFactory.js +127 -0
  127. package/dist/src/encoder/accessor.d.ts +3 -12
  128. package/dist/src/encoder/accessor.d.ts.map +1 -1
  129. package/dist/src/encoder/accessor.js +10 -65
  130. package/dist/src/encoder/encoder.d.ts +51 -8
  131. package/dist/src/encoder/encoder.d.ts.map +1 -1
  132. package/dist/src/encoder/encoder.js +179 -55
  133. package/dist/src/fonts/bmFontManager.js +1 -1
  134. package/dist/src/full.d.ts +2 -0
  135. package/dist/src/full.d.ts.map +1 -0
  136. package/dist/src/full.js +2 -0
  137. package/dist/src/genome/genome.d.ts +8 -0
  138. package/dist/src/genome/genome.d.ts.map +1 -1
  139. package/dist/src/genome/genome.js +16 -2
  140. package/dist/src/genome/genomeStore.js +1 -1
  141. package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -1
  142. package/dist/src/genome/rootGenomeConfig.js +6 -2
  143. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  144. package/dist/src/genome/scaleLocus.js +31 -7
  145. package/dist/src/genomeSpy/cursorManager.d.ts +69 -0
  146. package/dist/src/genomeSpy/cursorManager.d.ts.map +1 -0
  147. package/dist/src/genomeSpy/cursorManager.js +131 -0
  148. package/dist/src/genomeSpy/headlessBootstrap.d.ts +113 -0
  149. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -0
  150. package/dist/src/genomeSpy/headlessBootstrap.js +246 -0
  151. package/dist/src/genomeSpy/interactionController.d.ts +5 -0
  152. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  153. package/dist/src/genomeSpy/interactionController.js +292 -59
  154. package/dist/src/genomeSpy/interactionDispatcher.d.ts +50 -0
  155. package/dist/src/genomeSpy/interactionDispatcher.d.ts.map +1 -0
  156. package/dist/src/genomeSpy/interactionDispatcher.js +203 -0
  157. package/dist/src/genomeSpy/viewContextFactory.d.ts +4 -2
  158. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
  159. package/dist/src/genomeSpy/viewContextFactory.js +12 -4
  160. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  161. package/dist/src/genomeSpy/viewDataInit.js +7 -3
  162. package/dist/src/genomeSpy.d.ts +1 -124
  163. package/dist/src/genomeSpy.d.ts.map +1 -1
  164. package/dist/src/genomeSpy.js +7 -688
  165. package/dist/src/genomeSpyBase.d.ts +133 -0
  166. package/dist/src/genomeSpyBase.d.ts.map +1 -0
  167. package/dist/src/genomeSpyBase.js +719 -0
  168. package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
  169. package/dist/src/gl/arrayBuilder.js +0 -3
  170. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  171. package/dist/src/gl/colorUtils.js +3 -0
  172. package/dist/src/gl/dataToVertices.d.ts +12 -14
  173. package/dist/src/gl/dataToVertices.d.ts.map +1 -1
  174. package/dist/src/gl/dataToVertices.js +121 -95
  175. package/dist/src/gl/glslScaleGenerator.d.ts +5 -2
  176. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  177. package/dist/src/gl/glslScaleGenerator.js +15 -15
  178. package/dist/src/gl/vertexRangeIndex.d.ts +23 -0
  179. package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -0
  180. package/dist/src/gl/vertexRangeIndex.js +150 -0
  181. package/dist/src/index.d.ts +3 -9
  182. package/dist/src/index.d.ts.map +1 -1
  183. package/dist/src/index.js +5 -114
  184. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +4462 -0
  185. package/dist/src/marks/link.d.ts.map +1 -1
  186. package/dist/src/marks/link.js +0 -23
  187. package/dist/src/marks/mark.d.ts +8 -1
  188. package/dist/src/marks/mark.d.ts.map +1 -1
  189. package/dist/src/marks/mark.js +61 -20
  190. package/dist/src/marks/markUtils.d.ts +18 -1
  191. package/dist/src/marks/markUtils.d.ts.map +1 -1
  192. package/dist/src/marks/markUtils.js +52 -4
  193. package/dist/src/marks/point.d.ts.map +1 -1
  194. package/dist/src/marks/point.js +6 -26
  195. package/dist/src/marks/rect.d.ts.map +1 -1
  196. package/dist/src/marks/rect.js +13 -21
  197. package/dist/src/marks/rule.d.ts +7 -2
  198. package/dist/src/marks/rule.d.ts.map +1 -1
  199. package/dist/src/marks/rule.js +125 -16
  200. package/dist/src/marks/text.d.ts.map +1 -1
  201. package/dist/src/marks/text.js +5 -47
  202. package/dist/src/minimal.d.ts +8 -0
  203. package/dist/src/minimal.d.ts.map +1 -0
  204. package/dist/src/minimal.js +21 -0
  205. package/dist/src/paramRuntime/expressionCompiler.d.ts +2 -1
  206. package/dist/src/paramRuntime/expressionCompiler.d.ts.map +1 -1
  207. package/dist/src/paramRuntime/expressionCompiler.js +3 -2
  208. package/dist/src/paramRuntime/expressionRef.d.ts +4 -1
  209. package/dist/src/paramRuntime/expressionRef.d.ts.map +1 -1
  210. package/dist/src/paramRuntime/expressionRef.js +10 -3
  211. package/dist/src/paramRuntime/graphRuntime.d.ts.map +1 -1
  212. package/dist/src/paramRuntime/graphRuntime.js +15 -6
  213. package/dist/src/paramRuntime/paramRuntime.d.ts +8 -2
  214. package/dist/src/paramRuntime/paramRuntime.d.ts.map +1 -1
  215. package/dist/src/paramRuntime/paramRuntime.js +10 -5
  216. package/dist/src/paramRuntime/types.d.ts +1 -0
  217. package/dist/src/paramRuntime/types.d.ts.map +1 -1
  218. package/dist/src/paramRuntime/types.js +1 -0
  219. package/dist/src/paramRuntime/viewParamRuntime.d.ts +24 -4
  220. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  221. package/dist/src/paramRuntime/viewParamRuntime.js +52 -6
  222. package/dist/src/scale/scale.d.ts.map +1 -1
  223. package/dist/src/scale/scale.js +14 -7
  224. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  225. package/dist/src/scales/axisResolution.js +9 -5
  226. package/dist/src/scales/domainPlanner.d.ts +82 -16
  227. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  228. package/dist/src/scales/domainPlanner.js +364 -131
  229. package/dist/src/scales/indexLikeDomainUtils.d.ts +29 -0
  230. package/dist/src/scales/indexLikeDomainUtils.d.ts.map +1 -0
  231. package/dist/src/scales/indexLikeDomainUtils.js +67 -0
  232. package/dist/src/scales/resolutionMemberOrder.d.ts +15 -0
  233. package/dist/src/scales/resolutionMemberOrder.d.ts.map +1 -0
  234. package/dist/src/scales/resolutionMemberOrder.js +22 -0
  235. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
  236. package/dist/src/scales/scaleInstanceManager.js +7 -2
  237. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
  238. package/dist/src/scales/scaleInteractionController.js +43 -4
  239. package/dist/src/scales/scalePropsResolver.d.ts +5 -3
  240. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  241. package/dist/src/scales/scalePropsResolver.js +108 -8
  242. package/dist/src/scales/scaleResolution.d.ts +35 -1
  243. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  244. package/dist/src/scales/scaleResolution.js +381 -66
  245. package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -1
  246. package/dist/src/scales/scaleResolutionTestUtils.js +6 -2
  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 +30 -0
  250. package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
  251. package/dist/src/scales/selectionDomainUtils.js +116 -1
  252. package/dist/src/screenshotExport.d.ts +23 -0
  253. package/dist/src/screenshotExport.d.ts.map +1 -0
  254. package/dist/src/screenshotExport.js +44 -0
  255. package/dist/src/screenshotHarness.d.ts.map +1 -1
  256. package/dist/src/screenshotHarness.js +26 -25
  257. package/dist/src/spec/axis.d.ts +43 -32
  258. package/dist/src/spec/channel.d.ts +19 -13
  259. package/dist/src/spec/config.d.ts +264 -0
  260. package/dist/src/spec/data.d.ts +19 -0
  261. package/dist/src/spec/decoration.d.ts +51 -0
  262. package/dist/src/spec/exampleFiles.d.ts +12 -0
  263. package/dist/src/spec/exampleFiles.d.ts.map +1 -0
  264. package/dist/src/spec/exampleFiles.js +52 -0
  265. package/dist/src/spec/font.d.ts +1 -1
  266. package/dist/src/spec/mark.d.ts +97 -13
  267. package/dist/src/spec/parameter.d.ts +30 -10
  268. package/dist/src/spec/root.d.ts +14 -0
  269. package/dist/src/spec/scale.d.ts +31 -14
  270. package/dist/src/spec/title.d.ts +13 -2
  271. package/dist/src/spec/tooltip.d.ts +1 -1
  272. package/dist/src/spec/transform.d.ts +39 -4
  273. package/dist/src/spec/view.d.ts +67 -19
  274. package/dist/src/styles/genome-spy.css +55 -55
  275. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  276. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  277. package/dist/src/styles/genome-spy.css.js +23 -22
  278. package/dist/src/testSetup.d.ts +2 -0
  279. package/dist/src/testSetup.d.ts.map +1 -0
  280. package/dist/src/testSetup.js +5 -0
  281. package/dist/src/tooltip/dataTooltipHandler.js +8 -2
  282. package/dist/src/tooltip/tooltipContext.d.ts.map +1 -1
  283. package/dist/src/tooltip/tooltipContext.js +3 -2
  284. package/dist/src/types/embedApi.d.ts +7 -0
  285. package/dist/src/types/encoder.d.ts +17 -15
  286. package/dist/src/types/scaleResolutionApi.d.ts +20 -0
  287. package/dist/src/types/viewContext.d.ts +23 -1
  288. package/dist/src/utils/expression.d.ts +18 -10
  289. package/dist/src/utils/expression.d.ts.map +1 -1
  290. package/dist/src/utils/expression.js +354 -19
  291. package/dist/src/utils/field.d.ts.map +1 -1
  292. package/dist/src/utils/field.js +0 -1
  293. package/dist/src/utils/inertia.d.ts.map +1 -1
  294. package/dist/src/utils/inertia.js +0 -1
  295. package/dist/src/utils/inputBinding.d.ts +1 -1
  296. package/dist/src/utils/interaction.d.ts +109 -0
  297. package/dist/src/utils/interaction.d.ts.map +1 -0
  298. package/dist/src/utils/interaction.js +200 -0
  299. package/dist/src/utils/interactionEvent.d.ts +21 -42
  300. package/dist/src/utils/interactionEvent.d.ts.map +1 -1
  301. package/dist/src/utils/interactionEvent.js +43 -66
  302. package/dist/src/utils/kWayMerge.js +1 -1
  303. package/dist/src/utils/mergeObjects.d.ts.map +1 -1
  304. package/dist/src/utils/mergeObjects.js +0 -2
  305. package/dist/src/utils/radixSort.d.ts.map +1 -1
  306. package/dist/src/utils/radixSort.js +0 -2
  307. package/dist/src/utils/throttle.d.ts.map +1 -1
  308. package/dist/src/utils/throttle.js +0 -2
  309. package/dist/src/utils/ui/tooltip.d.ts +1 -0
  310. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  311. package/dist/src/utils/ui/tooltip.js +1 -0
  312. package/dist/src/utils/url.js +1 -1
  313. package/dist/src/view/axisGridView.d.ts +1 -1
  314. package/dist/src/view/axisGridView.d.ts.map +1 -1
  315. package/dist/src/view/axisGridView.js +2 -47
  316. package/dist/src/view/axisView.d.ts +2 -3
  317. package/dist/src/view/axisView.d.ts.map +1 -1
  318. package/dist/src/view/axisView.js +251 -106
  319. package/dist/src/view/concatView.d.ts +2 -1
  320. package/dist/src/view/concatView.d.ts.map +1 -1
  321. package/dist/src/view/concatView.js +4 -2
  322. package/dist/src/view/containerMutationHelper.d.ts +3 -0
  323. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  324. package/dist/src/view/containerMutationHelper.js +4 -1
  325. package/dist/src/view/facetView.d.ts +1 -1
  326. package/dist/src/view/facetView.js +3 -3
  327. package/dist/src/view/flowBuilder.d.ts +1 -1
  328. package/dist/src/view/flowBuilder.d.ts.map +1 -1
  329. package/dist/src/view/flowBuilder.js +13 -9
  330. package/dist/src/view/gridView/gridChild.d.ts +6 -0
  331. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  332. package/dist/src/view/gridView/gridChild.js +72 -43
  333. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  334. package/dist/src/view/gridView/gridView.js +255 -101
  335. package/dist/src/view/gridView/keyboardZoomController.d.ts +2 -2
  336. package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -1
  337. package/dist/src/view/gridView/keyboardZoomController.js +1 -1
  338. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  339. package/dist/src/view/gridView/scrollbar.js +4 -2
  340. package/dist/src/view/gridView/selectionRect.d.ts +4 -0
  341. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  342. package/dist/src/view/gridView/selectionRect.js +20 -1
  343. package/dist/src/view/gridView/separatorView.d.ts +1 -0
  344. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  345. package/dist/src/view/gridView/separatorView.js +9 -0
  346. package/dist/src/view/interactionRouting.d.ts +20 -0
  347. package/dist/src/view/interactionRouting.d.ts.map +1 -0
  348. package/dist/src/view/interactionRouting.js +53 -0
  349. package/dist/src/view/layerView.d.ts.map +1 -1
  350. package/dist/src/view/layerView.js +12 -9
  351. package/dist/src/view/layout/grid.js +1 -1
  352. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  353. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +0 -2
  354. package/dist/src/view/resolutionPlanner.d.ts +9 -0
  355. package/dist/src/view/resolutionPlanner.d.ts.map +1 -0
  356. package/dist/src/view/resolutionPlanner.js +302 -0
  357. package/dist/src/view/testUtils.d.ts +17 -3
  358. package/dist/src/view/testUtils.d.ts.map +1 -1
  359. package/dist/src/view/testUtils.js +62 -69
  360. package/dist/src/view/title.d.ts +8 -1
  361. package/dist/src/view/title.d.ts.map +1 -1
  362. package/dist/src/view/title.js +66 -76
  363. package/dist/src/view/unitView.d.ts +1 -1
  364. package/dist/src/view/unitView.d.ts.map +1 -1
  365. package/dist/src/view/unitView.js +72 -169
  366. package/dist/src/view/view.d.ts +76 -30
  367. package/dist/src/view/view.d.ts.map +1 -1
  368. package/dist/src/view/view.js +138 -48
  369. package/dist/src/view/viewFactory.d.ts +11 -3
  370. package/dist/src/view/viewFactory.d.ts.map +1 -1
  371. package/dist/src/view/viewFactory.js +37 -11
  372. package/dist/src/view/viewUtils.d.ts.map +1 -1
  373. package/dist/src/view/viewUtils.js +41 -5
  374. package/dist/src/view/zoom.d.ts +2 -2
  375. package/dist/src/view/zoom.d.ts.map +1 -1
  376. package/dist/src/view/zoom.js +21 -23
  377. package/package.json +18 -10
  378. package/dist/bundle/AbortablePromiseCache-Dj0vzLnp.js +0 -149
  379. package/dist/bundle/browser-0iNU5Wit.js +0 -138
  380. package/dist/bundle/index-BYsZN7b0.js +0 -1597
  381. package/dist/bundle/index-C3kClAEN.js +0 -1771
  382. package/dist/bundle/index-C7wOh6y1.js +0 -657
  383. package/dist/bundle/index-CRaQAuki.js +0 -326
  384. package/dist/bundle/index-D9v1PCj9.js +0 -507
  385. package/dist/bundle/index-GDOuv_D5.js +0 -266
  386. package/dist/bundle/index-Gt44EOIH.js +0 -628
  387. package/dist/bundle/inflate-GtwLkvSP.js +0 -1048
  388. package/dist/bundle/parquetRead-BnAGCa4_.js +0 -1663
  389. package/dist/bundle/unzip-Bac01w6X.js +0 -1492
  390. package/dist/src/config/scaleDefaults.d.ts +0 -8
  391. package/dist/src/config/scaleDefaults.d.ts.map +0 -1
  392. package/dist/src/config/scaleDefaults.js +0 -45
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
3
+ * @returns {boolean}
4
+ */
5
+ export function isIndexLikeDomainType(type: import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType): boolean;
6
+ /**
7
+ * Converts a numeric user-facing inclusive interval into the internal half-open
8
+ * form used by index-like scales.
9
+ *
10
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
11
+ * @param {number[]} interval
12
+ * @returns {number[]}
13
+ */
14
+ export function toInternalIndexLikeInterval(type: import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType, interval: number[]): number[];
15
+ /**
16
+ * Converts an internal half-open interval into a user-facing inclusive form.
17
+ *
18
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
19
+ * @param {number[]} interval
20
+ * @returns {number[]}
21
+ */
22
+ export function toExternalIndexLikeInterval(type: import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType, interval: number[]): number[];
23
+ /**
24
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
25
+ * @param {number[] | undefined} interval
26
+ * @returns {number[] | undefined}
27
+ */
28
+ export function toInternalIndexLikeDataDomain(type: import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType, interval: number[] | undefined): number[] | undefined;
29
+ //# sourceMappingURL=indexLikeDomainUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexLikeDomainUtils.d.ts","sourceRoot":"","sources":["../../../src/scales/indexLikeDomainUtils.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,IAAI,GAAG,OAAO,kBAAkB,EAAE,SAAS,GACtE,OAAO,CAInB;AAED;;;;;;;GAOG;AACH,kDAJW,OAAO,oBAAoB,EAAE,IAAI,GAAG,OAAO,kBAAkB,EAAE,SAAS,YACxE,MAAM,EAAE,GACN,MAAM,EAAE,CAIpB;AAED;;;;;;GAMG;AACH,kDAJW,OAAO,oBAAoB,EAAE,IAAI,GAAG,OAAO,kBAAkB,EAAE,SAAS,YACxE,MAAM,EAAE,GACN,MAAM,EAAE,CAIpB;AAED;;;;GAIG;AACH,oDAJW,OAAO,oBAAoB,EAAE,IAAI,GAAG,OAAO,kBAAkB,EAAE,SAAS,YACxE,MAAM,EAAE,GAAG,SAAS,GAClB,MAAM,EAAE,GAAG,SAAS,CAMhC"}
@@ -0,0 +1,67 @@
1
+ import { INDEX, LOCUS } from "./scaleResolutionConstants.js";
2
+
3
+ /**
4
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
5
+ * @returns {boolean}
6
+ */
7
+ export function isIndexLikeDomainType(type) {
8
+ return type === INDEX || type === LOCUS;
9
+ }
10
+
11
+ /**
12
+ * Converts a numeric user-facing inclusive interval into the internal half-open
13
+ * form used by index-like scales.
14
+ *
15
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
16
+ * @param {number[]} interval
17
+ * @returns {number[]}
18
+ */
19
+ export function toInternalIndexLikeInterval(type, interval) {
20
+ return isIndexLikeDomainType(type) ? expandUpperBound(interval) : interval;
21
+ }
22
+
23
+ /**
24
+ * Converts an internal half-open interval into a user-facing inclusive form.
25
+ *
26
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
27
+ * @param {number[]} interval
28
+ * @returns {number[]}
29
+ */
30
+ export function toExternalIndexLikeInterval(type, interval) {
31
+ return isIndexLikeDomainType(type) ? shrinkUpperBound(interval) : interval;
32
+ }
33
+
34
+ /**
35
+ * @param {import("../spec/channel.js").Type | import("../spec/scale.js").ScaleType} type
36
+ * @param {number[] | undefined} interval
37
+ * @returns {number[] | undefined}
38
+ */
39
+ export function toInternalIndexLikeDataDomain(type, interval) {
40
+ return interval && isIndexLikeDomainType(type)
41
+ ? expandUpperBound(interval)
42
+ : interval;
43
+ }
44
+
45
+ /**
46
+ * @param {number[]} interval
47
+ * @returns {number[]}
48
+ */
49
+ function expandUpperBound(interval) {
50
+ return [interval[0], interval[1] + getDirection(interval)];
51
+ }
52
+
53
+ /**
54
+ * @param {number[]} interval
55
+ * @returns {number[]}
56
+ */
57
+ function shrinkUpperBound(interval) {
58
+ return [interval[0], interval[1] - getDirection(interval)];
59
+ }
60
+
61
+ /**
62
+ * @param {number[]} interval
63
+ * @returns {1 | -1}
64
+ */
65
+ function getDirection(interval) {
66
+ return interval[1] >= interval[0] ? 1 : -1;
67
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stable ordering for resolution members so merge behavior does not depend on
3
+ * registration order.
4
+ *
5
+ * @template {{ view: { getPathString(): string }, channel?: string }} T
6
+ * @param {Set<T> | Iterable<T>} members
7
+ * @returns {T[]}
8
+ */
9
+ export function orderResolutionMembers<T extends {
10
+ view: {
11
+ getPathString(): string;
12
+ };
13
+ channel?: string;
14
+ }>(members: Set<T> | Iterable<T>): T[];
15
+ //# sourceMappingURL=resolutionMemberOrder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolutionMemberOrder.d.ts","sourceRoot":"","sources":["../../../src/scales/resolutionMemberOrder.js"],"names":[],"mappings":"AASA;;;;;;;GAOG;AACH,uCAJuE,CAAC,SAA3D;IAAG,IAAI,EAAE;QAAE,aAAa,IAAI,MAAM,CAAA;KAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAG,WAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAClB,CAAC,EAAE,CAMf"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @param {{ view: { getPathString(): string }, channel?: string }} member
3
+ */
4
+ function memberKey(member) {
5
+ const path = member.view.getPathString();
6
+ const channel = member.channel ?? "";
7
+ return path + "|" + channel;
8
+ }
9
+
10
+ /**
11
+ * Stable ordering for resolution members so merge behavior does not depend on
12
+ * registration order.
13
+ *
14
+ * @template {{ view: { getPathString(): string }, channel?: string }} T
15
+ * @param {Set<T> | Iterable<T>} members
16
+ * @returns {T[]}
17
+ */
18
+ export function orderResolutionMembers(members) {
19
+ return Array.from(members).sort((a, b) =>
20
+ memberKey(a).localeCompare(memberKey(b))
21
+ );
22
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"scaleInstanceManager.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleInstanceManager.js"],"names":[],"mappings":"AAMA;IA0BI;;;;;;OAMG;IACH,iFALG;QAAkH,eAAe,EAAzH,MAAM;YAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,0BAA0B,EAAE,eAAe,CAAA;SAAE;QAC5E,aAAa,EAAjC,MAAM,IAAI;QACW,cAAc,GAAnC,MAAM,IAAI;QAC6D,cAAc,GAArF,MAAM,OAAO,0BAA0B,EAAE,OAAO,GAAG,SAAS;KAA0B,EAYhG;IAED;eA1CkC,OAAO,kBAAkB,EAAE,KAAK;MA4CjE;IAED;;;OAGG;IACH,0BAHW,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAC1C,OAAO,qBAAqB,EAAE,OAAO,CAajD;IAED;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,KAAK;eAhET,OAAO,kBAAkB,EAAE,KAAK;MAqFjE;IAcD;;OAEG;IACH,wBAFW,OAAO,kBAAkB,EAAE,KAAK,QAc1C;IAED;;;OAGG;IACH,4CAHW,MAAM,IAAI,GACR,IAAI,CAShB;IAmFD,gBAGC;;CACJ"}
1
+ {"version":3,"file":"scaleInstanceManager.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleInstanceManager.js"],"names":[],"mappings":"AAMA;IA0BI;;;;;;OAMG;IACH,iFALG;QAAkH,eAAe,EAAzH,MAAM;YAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,0BAA0B,EAAE,eAAe,CAAA;SAAE;QAC5E,aAAa,EAAjC,MAAM,IAAI;QACW,cAAc,GAAnC,MAAM,IAAI;QAC6D,cAAc,GAArF,MAAM,OAAO,0BAA0B,EAAE,OAAO,GAAG,SAAS;KAA0B,EAYhG;IAED;eA1CkC,OAAO,kBAAkB,EAAE,KAAK;MA4CjE;IAED;;;OAGG;IACH,0BAHW,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAC1C,OAAO,qBAAqB,EAAE,OAAO,CAajD;IAED;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,KAAK;eAhET,OAAO,kBAAkB,EAAE,KAAK;MAqFjE;IAcD;;OAEG;IACH,wBAFW,OAAO,kBAAkB,EAAE,KAAK,QAc1C;IAED;;;OAGG;IACH,4CAHW,MAAM,IAAI,GACR,IAAI,CAShB;IAwFD,gBAGC;;CACJ"}
@@ -147,10 +147,12 @@ export default class ScaleInstanceManager {
147
147
  const {
148
148
  assembly: _assembly,
149
149
  domainIndexer: _domainIndexer,
150
+ __rangeExprScope: _rangeExprScope,
150
151
  ...rest
151
152
  } = propsAny;
152
153
  void _assembly;
153
154
  void _domainIndexer;
155
+ void _rangeExprScope;
154
156
  return rest;
155
157
  }
156
158
 
@@ -168,11 +170,14 @@ export default class ScaleInstanceManager {
168
170
  this.#rangeExprRefListeners.forEach((fn) => fn.invalidate());
169
171
  this.#rangeExprRefListeners.clear();
170
172
 
173
+ const rangeExprScope = /** @type {any} */ (props).__rangeExprScope;
174
+ const paramRuntime =
175
+ rangeExprScope?.paramRuntime ?? this.#getParamRuntime();
176
+
171
177
  const resolved = resolveRange({
172
178
  range: props.range,
173
179
  reverse: props.reverse,
174
- createExpression: (expr) =>
175
- this.#getParamRuntime().createExpression(expr),
180
+ createExpression: (expr) => paramRuntime.createExpression(expr),
176
181
  registerExpr: (fn) => this.#rangeExprRefListeners.add(fn),
177
182
  });
178
183
 
@@ -1 +1 @@
1
- {"version":3,"file":"scaleInteractionController.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleInteractionController.js"],"names":[],"mappings":"AAkBA;;;;;;;GAOG;AAEH;IAsBI;;;;;;;;OAQG;IACH,wHAPG;QAAsC,QAAQ,EAAtC,MAAM,cAAc;QACkC,WAAW,EAAjE,MAAM,OAAO,sBAAsB,EAAE,OAAO;QACpB,wBAAwB,EAAhD,MAAM,MAAM,EAAE;QACU,cAAc,EAAtC,MAAM,MAAM,EAAE;QAC8C,mBAAmB,EAA/E,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;QAC1B,eAAe,EAAvC,MAAM,MAAM,EAAE;KACxB,EAeA;IAED,0BAUC;IAED,sBAEC;IAED,8BAGC;IAED;;;;OAIG;IACH,sCAJW,MAAM,EAAE,aACR,MAAM,EAAE,GACN,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAarD;IAED;;;;OAIG;IACH,oBAQC;IAED;;;;;;;OAOG;IACH,kBALW,MAAM,eACN,MAAM,OACN,MAAM,GACJ,OAAO,CA2BnB;IAED;;;;;;OAMG;IACH,eAJW,aAAa,GAAG,aAAa,aAC7B,OAAO,GAAG,MAAM,iBA+D1B;IASD;;;;OAIG;IACH,qBAcC;IAED;;OAEG;IACH,uBAOC;;CACJ;4BA5PY,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;4BACvC,OAAO,kBAAkB,EAAE,aAAa;yBACxC,OAAO,kBAAkB,EAAE,UAAU;wBACrC,OAAO,qBAAqB,EAAE,SAAS;6BACvC,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAA;CAAE"}
1
+ {"version":3,"file":"scaleInteractionController.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleInteractionController.js"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AAEH;IAsBI;;;;;;;;OAQG;IACH,wHAPG;QAAsC,QAAQ,EAAtC,MAAM,cAAc;QACkC,WAAW,EAAjE,MAAM,OAAO,sBAAsB,EAAE,OAAO;QACpB,wBAAwB,EAAhD,MAAM,MAAM,EAAE;QACU,cAAc,EAAtC,MAAM,MAAM,EAAE;QAC8C,mBAAmB,EAA/E,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;QAC1B,eAAe,EAAvC,MAAM,MAAM,EAAE;KACxB,EAeA;IAED,0BAUC;IAED,sBAEC;IAED,8BAGC;IAED;;;;OAIG;IACH,sCAJW,MAAM,EAAE,aACR,MAAM,EAAE,GACN,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAarD;IAED;;;;OAIG;IACH,oBAQC;IAED;;;;;;;OAOG;IACH,kBALW,MAAM,eACN,MAAM,OACN,MAAM,GACJ,OAAO,CA2BnB;IAED;;;;;;OAMG;IACH,eAJW,aAAa,GAAG,aAAa,aAC7B,OAAO,GAAG,MAAM,iBAkE1B;IASD;;;;OAIG;IACH,qBAcC;IAED;;OAEG;IACH,uBAOC;;CACJ;4BA/PY,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;4BACvC,OAAO,kBAAkB,EAAE,aAAa;yBACxC,OAAO,kBAAkB,EAAE,UAAU;wBACrC,OAAO,qBAAqB,EAAE,SAAS;6BACvC,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAA;CAAE"}
@@ -15,6 +15,11 @@ import eerp from "../utils/eerp.js";
15
15
  import { shallowArrayEquals } from "../utils/arrayUtils.js";
16
16
  import { createCancelToken } from "../utils/transition.js";
17
17
  import { zoomDomainByScaleType } from "./zoomDomainUtils.js";
18
+ import { toInternalIndexLikeInterval } from "./indexLikeDomainUtils.js";
19
+ import {
20
+ hasExplicitLocusUpperBound,
21
+ isChromosomalLocusInterval,
22
+ } from "../genome/genome.js";
18
23
 
19
24
  /**
20
25
  * @typedef {import("../spec/scale.js").NumericDomain} NumericDomain
@@ -177,13 +182,16 @@ export default class ScaleInteractionController {
177
182
  throw new Error("Not a zoomable scale!");
178
183
  }
179
184
 
180
- const to = this.#fromComplexInterval(domain);
185
+ const scale = this.#getScale();
186
+ const to = normalizeInteractionInterval(
187
+ /** @type {import("../spec/scale.js").ScaleType} */ (scale.type),
188
+ domain,
189
+ this.#fromComplexInterval
190
+ );
181
191
 
182
192
  // TODO: Intersect the domain with zoom extent
183
193
 
184
194
  const animator = this.#getAnimator();
185
-
186
- const scale = this.#getScale();
187
195
  const from = /** @type {number[]} */ (scale.domain());
188
196
 
189
197
  if (duration > 0 && from.length == 2) {
@@ -288,7 +296,11 @@ function resolveZoomExtent(
288
296
  ) {
289
297
  if (isZoomParams(zoom)) {
290
298
  if (isArray(zoom.extent)) {
291
- return fromComplexInterval(zoom.extent);
299
+ return normalizeInteractionInterval(
300
+ scale.props.type,
301
+ zoom.extent,
302
+ fromComplexInterval
303
+ );
292
304
  }
293
305
  }
294
306
 
@@ -362,6 +374,33 @@ function applyZoomTransform(scale, domain, scaleFactor, scaleAnchor, pan) {
362
374
  );
363
375
  }
364
376
 
377
+ /**
378
+ * Converts a user-facing interaction interval into the internal numeric domain
379
+ * representation used by index-like scales.
380
+ *
381
+ * @param {import("../spec/scale.js").ScaleType} type
382
+ * @param {ScalarDomain | ComplexDomain} interval
383
+ * @param {(domain: ScalarDomain | ComplexDomain) => number[]} fromComplexInterval
384
+ * @returns {number[]}
385
+ */
386
+ function normalizeInteractionInterval(type, interval, fromComplexInterval) {
387
+ const numericInterval =
388
+ type === "locus"
389
+ ? fromComplexInterval(interval)
390
+ : /** @type {number[]} */ (interval);
391
+
392
+ // Whole-chromosome locus intervals already resolve to the intended extent.
393
+ if (
394
+ type === "locus" &&
395
+ isChromosomalLocusInterval(interval) &&
396
+ !hasExplicitLocusUpperBound(interval)
397
+ ) {
398
+ return numericInterval;
399
+ }
400
+
401
+ return toInternalIndexLikeInterval(type, numericInterval);
402
+ }
403
+
365
404
  /**
366
405
  * @param {boolean | ZoomParams} zoom
367
406
  * @returns {zoom is ZoomParams}
@@ -7,15 +7,17 @@
7
7
  * @param {object} options
8
8
  * @param {Channel} options.channel
9
9
  * @param {import("../spec/channel.js").Type} options.dataType
10
- * @param {Set<ScaleResolutionMember>} options.members
10
+ * @param {ScaleResolutionMember[]} options.orderedMembers
11
11
  * @param {boolean} options.isExplicitDomain
12
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} options.configScopes
12
13
  * @returns {Scale}
13
14
  */
14
- export function resolveScalePropsBase({ channel, dataType, members, isExplicitDomain, }: {
15
+ export function resolveScalePropsBase({ channel, dataType, orderedMembers, isExplicitDomain, configScopes, }: {
15
16
  channel: Channel;
16
17
  dataType: import("../spec/channel.js").Type;
17
- members: Set<ScaleResolutionMember>;
18
+ orderedMembers: ScaleResolutionMember[];
18
19
  isExplicitDomain: boolean;
20
+ configScopes: import("../spec/config.js").GenomeSpyConfig[];
19
21
  }): Scale;
20
22
  export type Channel = import("../spec/channel.js").Channel;
21
23
  export type Scale = import("../spec/scale.js").Scale;
@@ -1 +1 @@
1
- {"version":3,"file":"scalePropsResolver.d.ts","sourceRoot":"","sources":["../../../src/scales/scalePropsResolver.js"],"names":[],"mappings":"AAOA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,yFANG;IAAyB,OAAO,EAAxB,OAAO;IACoC,QAAQ,EAAnD,OAAO,oBAAoB,EAAE,IAAI;IACG,OAAO,EAA3C,GAAG,CAAC,qBAAqB,CAAC;IACT,gBAAgB,EAAjC,OAAO;CACf,GAAU,KAAK,CAiDjB;sBA5DY,OAAO,oBAAoB,EAAE,OAAO;oBACpC,OAAO,kBAAkB,EAAE,KAAK;oCAChC,OAAO,sBAAsB,EAAE,qBAAqB"}
1
+ {"version":3,"file":"scalePropsResolver.d.ts","sourceRoot":"","sources":["../../../src/scales/scalePropsResolver.js"],"names":[],"mappings":"AAcA;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,8GAPG;IAAyB,OAAO,EAAxB,OAAO;IACoC,QAAQ,EAAnD,OAAO,oBAAoB,EAAE,IAAI;IACA,cAAc,EAA/C,qBAAqB,EAAE;IACN,gBAAgB,EAAjC,OAAO;IACgD,YAAY,EAAnE,OAAO,mBAAmB,EAAE,eAAe,EAAE;CACrD,GAAU,KAAK,CA6IjB;sBAzJY,OAAO,oBAAoB,EAAE,OAAO;oBACpC,OAAO,kBAAkB,EAAE,KAAK;oCAChC,OAAO,sBAAsB,EAAE,qBAAqB"}
@@ -1,7 +1,14 @@
1
1
  import { isDiscrete } from "vega-scale";
2
+ import { isColorChannel } from "../encoder/encoder.js";
3
+ import { isExprRef } from "../paramRuntime/paramUtils.js";
2
4
 
3
5
  import mergeObjects from "../utils/mergeObjects.js";
4
- import { getDefaultScaleProperties } from "../config/scaleDefaults.js";
6
+ import {
7
+ getConfiguredScaleConfig,
8
+ getConfiguredScaleDefaults,
9
+ getConfiguredNamedRange,
10
+ isConfigRangeName,
11
+ } from "../config/scaleConfig.js";
5
12
  import { applyLockedProperties, getDefaultScaleType } from "./scaleRules.js";
6
13
  import { INDEX, LOCUS } from "./scaleResolutionConstants.js";
7
14
 
@@ -15,17 +22,29 @@ import { INDEX, LOCUS } from "./scaleResolutionConstants.js";
15
22
  * @param {object} options
16
23
  * @param {Channel} options.channel
17
24
  * @param {import("../spec/channel.js").Type} options.dataType
18
- * @param {Set<ScaleResolutionMember>} options.members
25
+ * @param {ScaleResolutionMember[]} options.orderedMembers
19
26
  * @param {boolean} options.isExplicitDomain
27
+ * @param {import("../spec/config.js").GenomeSpyConfig[]} options.configScopes
20
28
  * @returns {Scale}
21
29
  */
22
30
  export function resolveScalePropsBase({
23
31
  channel,
24
32
  dataType,
25
- members,
33
+ orderedMembers,
26
34
  isExplicitDomain,
35
+ configScopes,
27
36
  }) {
28
- const propArray = Array.from(members)
37
+ const memberList = orderedMembers;
38
+
39
+ const markTypes = memberList
40
+ .map((member) =>
41
+ typeof member.view.getMarkType == "function"
42
+ ? member.view.getMarkType()
43
+ : undefined
44
+ )
45
+ .filter((markType) => !!markType);
46
+
47
+ const propArray = memberList
29
48
  .map((member) => member.channelDef.scale)
30
49
  .filter((props) => props !== undefined);
31
50
 
@@ -36,14 +55,68 @@ export function resolveScalePropsBase({
36
55
  }
37
56
 
38
57
  const props = {
39
- ...getDefaultScaleProperties(channel, dataType, isExplicitDomain),
58
+ ...getConfiguredScaleDefaults(configScopes, {
59
+ channel,
60
+ dataType,
61
+ isExplicitDomain,
62
+ markTypes: /** @type {import("../spec/mark.js").MarkType[]} */ (
63
+ markTypes
64
+ ),
65
+ hasDomainMid: mergedProps.domainMid !== undefined,
66
+ }),
40
67
  ...mergedProps,
41
68
  };
42
69
 
43
70
  if (!props.type) {
71
+ // TODO: When discrete positional scale inference is revisited, plumb
72
+ // mark-level context into getDefaultScaleType instead of deciding only
73
+ // from channel + data type. The `markTypes` collection above is the
74
+ // natural starting point for a Vega-Lite-like band-vs-point choice,
75
+ // including future rect-backed marks such as "bar".
44
76
  props.type = getDefaultScaleType(channel, dataType);
45
77
  }
46
78
 
79
+ if (typeof props.range == "string") {
80
+ if (!isConfigRangeName(props.range)) {
81
+ throw new Error(
82
+ 'Unknown named scale range "' +
83
+ props.range +
84
+ '". Supported names: shape, size, angle, heatmap, ramp, diverging.'
85
+ );
86
+ }
87
+
88
+ const resolvedNamedRange = getConfiguredNamedRange(
89
+ configScopes,
90
+ props.range
91
+ );
92
+ if (resolvedNamedRange === undefined) {
93
+ throw new Error(
94
+ 'Named scale range "' +
95
+ props.range +
96
+ '" is not configured in config.range.'
97
+ );
98
+ }
99
+
100
+ if (
101
+ isColorChannel(channel) &&
102
+ (typeof resolvedNamedRange == "string" ||
103
+ (resolvedNamedRange != null &&
104
+ typeof resolvedNamedRange == "object" &&
105
+ !Array.isArray(resolvedNamedRange)))
106
+ ) {
107
+ props.scheme =
108
+ /** @type {import("../spec/scale.js").Scale["scheme"]} */ (
109
+ resolvedNamedRange
110
+ );
111
+ delete props.range;
112
+ } else {
113
+ props.range =
114
+ /** @type {import("../spec/scale.js").Scale["range"]} */ (
115
+ resolvedNamedRange
116
+ );
117
+ }
118
+ }
119
+
47
120
  // Reverse discrete y axis
48
121
  if (
49
122
  channel == "y" &&
@@ -58,9 +131,36 @@ export function resolveScalePropsBase({
58
131
  // TODO: Props should be set more intelligently
59
132
  }
60
133
 
61
- // By default, index and locus scales are zoomable, others are not
62
- if (!("zoom" in props) && [INDEX, LOCUS].includes(props.type)) {
63
- props.zoom = true;
134
+ if (props.domainTransition === undefined) {
135
+ const hasExprDrivenDomain = memberList.some((member) =>
136
+ isExprRef(member.channelDef.scale?.domain)
137
+ );
138
+ props.domainTransition = !hasExprDrivenDomain;
139
+ }
140
+
141
+ if (
142
+ Array.isArray(props.range) &&
143
+ props.range.some(isExprRef) &&
144
+ memberList.length > 0
145
+ ) {
146
+ const rangeOwner = memberList.find(
147
+ (member) => member.channelDef.scale?.range !== undefined
148
+ )?.view;
149
+ if (rangeOwner) {
150
+ /** @type {any} */
151
+ (props).__rangeExprScope = rangeOwner;
152
+ }
153
+ }
154
+
155
+ // By default, index and locus scales are zoomable, others are not.
156
+ // Config can override this baseline via scale.zoom.
157
+ if (!("zoom" in props)) {
158
+ const scaleConfig = getConfiguredScaleConfig(configScopes, dataType);
159
+ if (scaleConfig.zoom !== undefined) {
160
+ props.zoom = scaleConfig.zoom;
161
+ } else if ([INDEX, LOCUS].includes(props.type)) {
162
+ props.zoom = true;
163
+ }
64
164
  }
65
165
 
66
166
  applyLockedProperties(props, channel);
@@ -27,10 +27,21 @@
27
27
  * @implements {ScaleResolutionApi}
28
28
  */
29
29
  export default class ScaleResolution implements ScaleResolutionApi {
30
+ /**
31
+ * Executes a group of member registrations without refreshing derived
32
+ * membership state until the callback completes.
33
+ *
34
+ * @template T
35
+ * @param {Iterable<ScaleResolution>} resolutions
36
+ * @param {() => T} callback
37
+ * @returns {T}
38
+ */
39
+ static registerInBatch<T>(resolutions: Iterable<ScaleResolution>, callback: () => T): T;
30
40
  /**
31
41
  * @param {Channel} channel
42
+ * @param {import("../view/view.js").default} [hostView]
32
43
  */
33
- constructor(channel: import("../spec/channel.js").Channel);
44
+ constructor(channel: import("../spec/channel.js").Channel, hostView?: import("../view/view.js").default);
34
45
  channel: import("../spec/channel.js").Channel;
35
46
  /** @type {import("../spec/channel.js").Type} Data type (quantitative, nominal, etc...) */
36
47
  type: import("../spec/channel.js").Type;
@@ -51,6 +62,7 @@ export default class ScaleResolution implements ScaleResolutionApi {
51
62
  * @param {ScaleResolutionListener} listener function
52
63
  */
53
64
  removeEventListener(type: import("../types/scaleResolutionApi.js").ScaleResolutionEventType, listener: import("../types/scaleResolutionApi.js").ScaleResolutionListener): void;
65
+ syncLinkedSelectionFromDomain(): void;
54
66
  /**
55
67
  * @param {ScaleResolutionMember} member
56
68
  * @returns {() => boolean}
@@ -63,6 +75,11 @@ export default class ScaleResolution implements ScaleResolutionApi {
63
75
  * @returns {() => void}
64
76
  */
65
77
  registerCollectorSubscriptions(collector: import("../data/collector.js").default, accessors: Iterable<import("../types/encoder.js").ScaleAccessor>): () => void;
78
+ /**
79
+ * Returns true if the domain has been defined explicitly, i.e. not extracted from the data.
80
+ */
81
+ isDomainDefinedExplicitly(): boolean;
82
+ isDomainInitialized(): boolean;
66
83
  /**
67
84
  * Returns locus assembly requirements without initializing the scale.
68
85
  *
@@ -79,6 +96,15 @@ export default class ScaleResolution implements ScaleResolutionApi {
79
96
  assembly: import("../spec/scale.js").Scale["assembly"] | undefined;
80
97
  needsDefaultAssembly: boolean;
81
98
  };
99
+ /**
100
+ * Returns the resolved scale type without instantiating the scale.
101
+ *
102
+ * Useful during view construction, before assembly preflight has loaded
103
+ * URL-backed locus genomes.
104
+ *
105
+ * @returns {import("../spec/scale.js").Scale["type"] | undefined}
106
+ */
107
+ getResolvedScaleType(): import("../spec/scale.js").Scale["type"] | undefined;
82
108
  /**
83
109
  * Reconfigures the scale: updates domain and other settings.
84
110
  *
@@ -128,6 +154,14 @@ export default class ScaleResolution implements ScaleResolutionApi {
128
154
  * @returns {NumericDomain | ComplexDomain}
129
155
  */
130
156
  getComplexDomain(): import("../spec/scale.js").NumericDomain | import("../spec/scale.js").ComplexDomain;
157
+ /**
158
+ * Returns metadata about a selection-linked domain, if present.
159
+ */
160
+ getLinkedSelectionDomainInfo(): {
161
+ param: string;
162
+ encoding: "x" | "y";
163
+ persist: boolean;
164
+ };
131
165
  /**
132
166
  * Return true if the scale is zoomable and the current domain differs from the initial domain.
133
167
  *
@@ -1 +1 @@
1
- {"version":3,"file":"scaleResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleResolution.js"],"names":[],"mappings":"AAgDA;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAmDI;;OAEG;IACH,2DAkCC;IAjCG,8CAAsB;IACtB,0FAA0F;IAC1F,MADW,OAAO,oBAAoB,EAAE,IAAI,CAC5B;IAEhB,iEAAiE;IACjE,MADW,MAAM,CACI;IAoEzB,2BASC;IAwBD;;;;;;;OAOG;IACH,4KAEC;IAED;;;OAGG;IACH,+KAEC;IAkLD;;;OAGG;IACH,uBAHW,qBAAqB,GACnB,MAAM,OAAO,CAazB;IAED,gBAKC;IA4CD;;;;OAIG;IACH,0CAJW,OAAO,sBAAsB,EAAE,OAAO,aACtC,QAAQ,CAAC,OAAO,qBAAqB,EAAE,aAAa,CAAC,GACnD,MAAM,IAAI,CAkCtB;IA2CD;;;;;;;;;;;OAWG;IACH,0BALa;QACR,QAAQ,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;QACnE,oBAAoB,EAAE,OAAO,CAAA;KAC9B,CAeH;IAmFD;;;;;OAKG;IACH,oBAYC;IAED;;;;;OAKG;IACH,0BAyBC;IA0HD;;OAEG;IACH;eApwBkC,OAAO,kBAAkB,EAAE,KAAK;MA2wBjE;IAED;;;;;;OAMG;IACH;eApxBkC,OAAO,kBAAkB,EAAE,KAAK;MAsxBjE;IAED;;;;OAIG;IACH;eA7xBkC,OAAO,kBAAkB,EAAE,KAAK;MAsyBjE;IAED,mBAEC;IAED;;;;OAIG;IACH,+DAEC;IAED;;OAEG;IACH,oBAFa,mFAA6B,CAMzC;IAED;;;;OAIG;IACH,oBAEC;IAED;;OAEG;IACH,sBAGC;IAED;;;;;;;OAOG;IACH,kBALW,MAAM,eACN,MAAM,OACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;OAMG;IACH,eAJW,mFAA6B,aAC7B,OAAO,GAAG,MAAM,iBAK1B;IAED;;;;OAIG;IACH,qBAEC;IAED;;;;;OAKG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,wBAoBC;IAED;;;;;OAKG;IACH,uBAFW,MAAM,yDAUhB;IAED;;OAEG;IACH,iBAFW,MAAM,yDAIhB;IAED;;;OAGG;IACH,qBAHW,MAAM,+CAAmB,GACvB,MAAM,CAIlB;IAED;;;OAGG;IACH,8BAHW,kFAA4B,GAC1B,MAAM,EAAE,CAOpB;;CACJ;kCA1+B+B,CAAC,SAApB,6CAAkB;;;;UAGrB,OAAO,qBAAqB,EAAE,OAAO;aACrC,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB;yBAChD,OAAO;;sBAhCV,+BAA+B;sBAA/B,+BAA+B;wBAA/B,+BAA+B;wBAA/B,+BAA+B;6BAA/B,+BAA+B"}
1
+ {"version":3,"file":"scaleResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleResolution.js"],"names":[],"mappings":"AAoDA;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAucI;;;;;;;;OAQG;IACH,uBALa,CAAC,eACH,QAAQ,CAAC,eAAe,CAAC,YACzB,MAAM,CAAC,GACL,CAAC,CAqBb;IA5ZD;;;OAGG;IACH,sEAFW,OAAO,iBAAiB,EAAE,OAAO,EAsC3C;IAnCG,8CAAsB;IACtB,0FAA0F;IAC1F,MADW,OAAO,oBAAoB,EAAE,IAAI,CAC5B;IAEhB,iEAAiE;IACjE,MADW,MAAM,CACI;IA0EzB,2BASC;IAwBD;;;;;;;OAOG;IACH,4KAEC;IAED;;;OAGG;IACH,+KAEC;IAiCD,sCA0CC;IA4MD;;;OAGG;IACH,uBAHW,qBAAqB,GACnB,MAAM,OAAO,CAazB;IAED,gBAMC;IAoFD;;;;OAIG;IACH,0CAJW,OAAO,sBAAsB,EAAE,OAAO,aACtC,QAAQ,CAAC,OAAO,qBAAqB,EAAE,aAAa,CAAC,GACnD,MAAM,IAAI,CAkCtB;IAED;;OAEG;IACH,qCAEC;IAED,+BAiBC;IAuED;;;;;;;;;;;OAWG;IACH,0BALa;QACR,QAAQ,EAAE,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;QACnE,oBAAoB,EAAE,OAAO,CAAA;KAC9B,CAeH;IAED;;;;;;;OAOG;IACH,wBAFa,OAAO,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAShE;IAgGD;;;;;OAKG;IACH,oBAYC;IAED;;;;;OAKG;IACH,0BA0BC;IAoID;;OAEG;IACH;eA5gCkC,OAAO,kBAAkB,EAAE,KAAK;MAmhCjE;IAED;;;;;;OAMG;IACH;eA5hCkC,OAAO,kBAAkB,EAAE,KAAK;MAmiCjE;IAED;;;;OAIG;IACH;eA1iCkC,OAAO,kBAAkB,EAAE,KAAK;MAmjCjE;IAED,mBASC;IAED;;;;OAIG;IACH,+DAEC;IAED;;OAEG;IACH,oBAFa,mFAA6B,CASzC;IAED;;OAEG;IACH;;;;MAqBC;IAED;;;;OAIG;IACH,oBAEC;IAED;;OAEG;IACH,sBASC;IAED;;;;;;;OAOG;IACH,kBALW,MAAM,eACN,MAAM,OACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;OAMG;IACH,eAJW,mFAA6B,aAC7B,OAAO,GAAG,MAAM,iBAK1B;IAED;;;;OAIG;IACH,qBAEC;IAED;;;;;OAKG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,wBAoBC;IAED;;;;;OAKG;IACH,uBAFW,MAAM,yDAUhB;IAED;;OAEG;IACH,iBAFW,MAAM,yDAIhB;IAED;;;OAGG;IACH,qBAHW,MAAM,+CAAmB,GACvB,MAAM,CAIlB;IAED;;;OAGG;IACH,8BAHW,kFAA4B,GAC1B,MAAM,EAAE,CAOpB;;CACJ;kCAjyC+B,CAAC,SAApB,6CAAkB;;;;UAGrB,OAAO,qBAAqB,EAAE,OAAO;aACrC,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB;yBAChD,OAAO;;sBApCV,+BAA+B;sBAA/B,+BAA+B;wBAA/B,+BAA+B;wBAA/B,+BAA+B;6BAA/B,+BAA+B"}