@genome-spy/core 0.72.0 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/LICENSE +1 -1
  2. package/dist/bundle/AbortablePromiseCache-3gHJdF3E.js +96 -0
  3. package/dist/bundle/browser-BTgw5ieH.js +126 -0
  4. package/dist/bundle/chunk-DmhlhrBa.js +11 -0
  5. package/dist/bundle/esm-BDFRLEuD.js +1248 -0
  6. package/dist/bundle/esm-BygJiwh0.js +573 -0
  7. package/dist/bundle/esm-CGX-qz1d.js +155 -0
  8. package/dist/bundle/esm-CgfVIRJ-.js +121 -0
  9. package/dist/bundle/esm-CuMSzCHy.js +298 -0
  10. package/dist/bundle/esm-DMXpJXM4.js +369 -0
  11. package/dist/bundle/esm-DQiq2Zhd.js +1426 -0
  12. package/dist/bundle/esm-DtE8VqAv.js +1015 -0
  13. package/dist/bundle/esm-sIoQYZ21.js +461 -0
  14. package/dist/bundle/index.es.js +21078 -24556
  15. package/dist/bundle/index.js +379 -383
  16. package/dist/bundle/parquetRead-DG_-F5j5.js +1609 -0
  17. package/dist/schema.json +13349 -7082
  18. package/dist/src/config/axisConfig.d.ts +16 -0
  19. package/dist/src/config/axisConfig.d.ts.map +1 -0
  20. package/dist/src/config/axisConfig.js +84 -0
  21. package/dist/src/config/defaultConfig.d.ts +3 -0
  22. package/dist/src/config/defaultConfig.d.ts.map +1 -0
  23. package/dist/src/config/defaultConfig.js +38 -0
  24. package/dist/src/config/defaults/axisDefaults.d.ts +5 -0
  25. package/dist/src/config/defaults/axisDefaults.d.ts.map +1 -0
  26. package/dist/src/config/defaults/axisDefaults.js +72 -0
  27. package/dist/src/config/defaults/markDefaults.d.ts +15 -0
  28. package/dist/src/config/defaults/markDefaults.d.ts.map +1 -0
  29. package/dist/src/config/defaults/markDefaults.js +121 -0
  30. package/dist/src/config/defaults/scaleDefaults.d.ts +5 -0
  31. package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -0
  32. package/dist/src/config/defaults/scaleDefaults.js +18 -0
  33. package/dist/src/config/defaults/titleDefaults.d.ts +5 -0
  34. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -0
  35. package/dist/src/config/defaults/titleDefaults.js +47 -0
  36. package/dist/src/config/defaults/viewDefaults.d.ts +3 -0
  37. package/dist/src/config/defaults/viewDefaults.d.ts.map +1 -0
  38. package/dist/src/config/defaults/viewDefaults.js +2 -0
  39. package/dist/src/config/markConfig.d.ts +8 -0
  40. package/dist/src/config/markConfig.d.ts.map +1 -0
  41. package/dist/src/config/markConfig.js +27 -0
  42. package/dist/src/config/mergeConfig.d.ts +8 -0
  43. package/dist/src/config/mergeConfig.d.ts.map +1 -0
  44. package/dist/src/config/mergeConfig.js +81 -0
  45. package/dist/src/config/resolveConfig.d.ts +22 -0
  46. package/dist/src/config/resolveConfig.d.ts.map +1 -0
  47. package/dist/src/config/resolveConfig.js +32 -0
  48. package/dist/src/config/scaleConfig.d.ts +40 -0
  49. package/dist/src/config/scaleConfig.d.ts.map +1 -0
  50. package/dist/src/config/scaleConfig.js +220 -0
  51. package/dist/src/config/styleUtils.d.ts +6 -0
  52. package/dist/src/config/styleUtils.d.ts.map +1 -0
  53. package/dist/src/config/styleUtils.js +10 -0
  54. package/dist/src/config/themes.d.ts +15 -0
  55. package/dist/src/config/themes.d.ts.map +1 -0
  56. package/dist/src/config/themes.js +293 -0
  57. package/dist/src/config/titleConfig.d.ts +12 -0
  58. package/dist/src/config/titleConfig.d.ts.map +1 -0
  59. package/dist/src/config/titleConfig.js +42 -0
  60. package/dist/src/config/viewConfig.d.ts +7 -0
  61. package/dist/src/config/viewConfig.d.ts.map +1 -0
  62. package/dist/src/config/viewConfig.js +29 -0
  63. package/dist/src/data/flowNode.d.ts +22 -1
  64. package/dist/src/data/flowNode.d.ts.map +1 -1
  65. package/dist/src/data/flowNode.js +37 -1
  66. package/dist/src/data/formats/bed.d.ts +8 -0
  67. package/dist/src/data/formats/bed.d.ts.map +1 -0
  68. package/dist/src/data/formats/bed.js +58 -0
  69. package/dist/src/data/formats/bedpe.d.ts +8 -0
  70. package/dist/src/data/formats/bedpe.d.ts.map +1 -0
  71. package/dist/src/data/formats/bedpe.js +164 -0
  72. package/dist/src/data/formats/fasta.d.ts.map +1 -1
  73. package/dist/src/data/formats/fasta.js +4 -0
  74. package/dist/src/data/formats/parquet.d.ts.map +1 -1
  75. package/dist/src/data/formats/parquet.js +4 -0
  76. package/dist/src/data/sources/dataSourceFactory.d.ts +2 -13
  77. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
  78. package/dist/src/data/sources/dataSourceFactory.js +5 -141
  79. package/dist/src/data/sources/dataUtils.d.ts +16 -0
  80. package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
  81. package/dist/src/data/sources/dataUtils.js +53 -3
  82. package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
  83. package/dist/src/data/sources/lazy/axisGenomeSource.js +11 -0
  84. package/dist/src/data/sources/lazy/axisTickSource.d.ts +1 -1
  85. package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
  86. package/dist/src/data/sources/lazy/axisTickSource.js +19 -8
  87. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  88. package/dist/src/data/sources/lazy/bamSource.js +11 -0
  89. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  90. package/dist/src/data/sources/lazy/bigBedSource.js +12 -1
  91. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  92. package/dist/src/data/sources/lazy/bigWigSource.js +11 -0
  93. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  94. package/dist/src/data/sources/lazy/gff3Source.js +12 -1
  95. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  96. package/dist/src/data/sources/lazy/indexedFastaSource.js +11 -0
  97. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts +27 -0
  98. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.d.ts.map +1 -0
  99. package/dist/src/data/sources/lazy/lazyDataSourceRegistry.js +65 -0
  100. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts +2 -0
  101. package/dist/src/data/sources/lazy/registerBuiltInLazySources.d.ts.map +1 -0
  102. package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +8 -0
  103. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  104. package/dist/src/data/sources/lazy/singleAxisLazySource.js +11 -2
  105. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  106. package/dist/src/data/sources/lazy/vcfSource.js +11 -0
  107. package/dist/src/data/sources/urlSource.d.ts +4 -0
  108. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  109. package/dist/src/data/sources/urlSource.js +138 -16
  110. package/dist/src/data/transforms/aggregate.d.ts +1 -0
  111. package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
  112. package/dist/src/data/transforms/aggregate.js +30 -8
  113. package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -1
  114. package/dist/src/data/transforms/aggregateOps.js +12 -1
  115. package/dist/src/data/transforms/coverage.js +2 -2
  116. package/dist/src/data/transforms/filter.js +1 -1
  117. package/dist/src/data/transforms/filterScoredLabels.d.ts +6 -0
  118. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  119. package/dist/src/data/transforms/filterScoredLabels.js +9 -0
  120. package/dist/src/data/transforms/measureText.d.ts +1 -0
  121. package/dist/src/data/transforms/measureText.d.ts.map +1 -1
  122. package/dist/src/data/transforms/measureText.js +14 -5
  123. package/dist/src/data/transforms/pileup.d.ts.map +1 -1
  124. package/dist/src/data/transforms/pileup.js +1 -2
  125. package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
  126. package/dist/src/data/transforms/regexFold.js +0 -1
  127. package/dist/src/embedFactory.d.ts +13 -0
  128. package/dist/src/embedFactory.d.ts.map +1 -0
  129. package/dist/src/embedFactory.js +127 -0
  130. package/dist/src/encoder/accessor.d.ts +3 -12
  131. package/dist/src/encoder/accessor.d.ts.map +1 -1
  132. package/dist/src/encoder/accessor.js +10 -65
  133. package/dist/src/encoder/encoder.d.ts +51 -8
  134. package/dist/src/encoder/encoder.d.ts.map +1 -1
  135. package/dist/src/encoder/encoder.js +179 -55
  136. package/dist/src/fonts/bmFontManager.js +1 -1
  137. package/dist/src/full.d.ts +2 -0
  138. package/dist/src/full.d.ts.map +1 -0
  139. package/dist/src/full.js +2 -0
  140. package/dist/src/genome/assemblyPreflight.d.ts +31 -0
  141. package/dist/src/genome/assemblyPreflight.d.ts.map +1 -0
  142. package/dist/src/genome/assemblyPreflight.js +99 -0
  143. package/dist/src/genome/genome.d.ts +10 -2
  144. package/dist/src/genome/genome.d.ts.map +1 -1
  145. package/dist/src/genome/genome.js +20 -2
  146. package/dist/src/genome/genomeStore.d.ts +34 -3
  147. package/dist/src/genome/genomeStore.d.ts.map +1 -1
  148. package/dist/src/genome/genomeStore.js +409 -18
  149. package/dist/src/genome/rootGenomeConfig.d.ts +26 -0
  150. package/dist/src/genome/rootGenomeConfig.d.ts.map +1 -0
  151. package/dist/src/genome/rootGenomeConfig.js +98 -0
  152. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  153. package/dist/src/genome/scaleLocus.js +26 -7
  154. package/dist/src/genomeSpy/cursorManager.d.ts +69 -0
  155. package/dist/src/genomeSpy/cursorManager.d.ts.map +1 -0
  156. package/dist/src/genomeSpy/cursorManager.js +131 -0
  157. package/dist/src/genomeSpy/headlessBootstrap.d.ts +113 -0
  158. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -0
  159. package/dist/src/genomeSpy/headlessBootstrap.js +246 -0
  160. package/dist/src/genomeSpy/interactionController.d.ts +10 -1
  161. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
  162. package/dist/src/genomeSpy/interactionController.js +448 -40
  163. package/dist/src/genomeSpy/interactionDispatcher.d.ts +50 -0
  164. package/dist/src/genomeSpy/interactionDispatcher.d.ts.map +1 -0
  165. package/dist/src/genomeSpy/interactionDispatcher.js +203 -0
  166. package/dist/src/genomeSpy/renderCoordinator.js +1 -1
  167. package/dist/src/genomeSpy/viewContextFactory.d.ts +4 -2
  168. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
  169. package/dist/src/genomeSpy/viewContextFactory.js +12 -4
  170. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  171. package/dist/src/genomeSpy/viewDataInit.js +7 -3
  172. package/dist/src/genomeSpy.d.ts +1 -114
  173. package/dist/src/genomeSpy.d.ts.map +1 -1
  174. package/dist/src/genomeSpy.js +7 -614
  175. package/dist/src/genomeSpyBase.d.ts +133 -0
  176. package/dist/src/genomeSpyBase.d.ts.map +1 -0
  177. package/dist/src/genomeSpyBase.js +719 -0
  178. package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
  179. package/dist/src/gl/arrayBuilder.js +0 -3
  180. package/dist/src/gl/canvasSizeHelper.d.ts +74 -0
  181. package/dist/src/gl/canvasSizeHelper.d.ts.map +1 -0
  182. package/dist/src/gl/canvasSizeHelper.js +203 -0
  183. package/dist/src/gl/colorUtils.d.ts.map +1 -1
  184. package/dist/src/gl/colorUtils.js +3 -0
  185. package/dist/src/gl/dataToVertices.d.ts.map +1 -1
  186. package/dist/src/gl/dataToVertices.js +13 -8
  187. package/dist/src/gl/glslScaleGenerator.d.ts +2 -2
  188. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  189. package/dist/src/gl/glslScaleGenerator.js +5 -7
  190. package/dist/src/gl/webGLHelper.d.ts +25 -11
  191. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  192. package/dist/src/gl/webGLHelper.js +59 -33
  193. package/dist/src/index.d.ts +3 -9
  194. package/dist/src/index.d.ts.map +1 -1
  195. package/dist/src/index.js +5 -111
  196. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +4462 -0
  197. package/dist/src/marks/link.d.ts.map +1 -1
  198. package/dist/src/marks/link.js +5 -26
  199. package/dist/src/marks/mark.d.ts +8 -1
  200. package/dist/src/marks/mark.d.ts.map +1 -1
  201. package/dist/src/marks/mark.js +67 -21
  202. package/dist/src/marks/markUtils.d.ts +18 -1
  203. package/dist/src/marks/markUtils.d.ts.map +1 -1
  204. package/dist/src/marks/markUtils.js +52 -4
  205. package/dist/src/marks/point.d.ts.map +1 -1
  206. package/dist/src/marks/point.js +6 -26
  207. package/dist/src/marks/rect.d.ts.map +1 -1
  208. package/dist/src/marks/rect.js +13 -21
  209. package/dist/src/marks/rule.d.ts +7 -2
  210. package/dist/src/marks/rule.d.ts.map +1 -1
  211. package/dist/src/marks/rule.js +125 -16
  212. package/dist/src/marks/text.d.ts.map +1 -1
  213. package/dist/src/marks/text.js +5 -47
  214. package/dist/src/minimal.d.ts +8 -0
  215. package/dist/src/minimal.d.ts.map +1 -0
  216. package/dist/src/minimal.js +21 -0
  217. package/dist/src/paramRuntime/viewParamRuntime.d.ts +19 -0
  218. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  219. package/dist/src/paramRuntime/viewParamRuntime.js +35 -0
  220. package/dist/src/scale/scale.d.ts.map +1 -1
  221. package/dist/src/scale/scale.js +13 -7
  222. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  223. package/dist/src/scales/axisResolution.js +9 -5
  224. package/dist/src/scales/domainPlanner.d.ts +58 -7
  225. package/dist/src/scales/domainPlanner.d.ts.map +1 -1
  226. package/dist/src/scales/domainPlanner.js +395 -40
  227. package/dist/src/scales/indexLikeDomainUtils.d.ts +29 -0
  228. package/dist/src/scales/indexLikeDomainUtils.d.ts.map +1 -0
  229. package/dist/src/scales/indexLikeDomainUtils.js +67 -0
  230. package/dist/src/scales/resolutionMemberOrder.d.ts +15 -0
  231. package/dist/src/scales/resolutionMemberOrder.d.ts.map +1 -0
  232. package/dist/src/scales/resolutionMemberOrder.js +22 -0
  233. package/dist/src/scales/scaleInstanceManager.d.ts +2 -1
  234. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
  235. package/dist/src/scales/scaleInstanceManager.js +10 -11
  236. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
  237. package/dist/src/scales/scaleInteractionController.js +59 -18
  238. package/dist/src/scales/scalePropsResolver.d.ts +3 -1
  239. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
  240. package/dist/src/scales/scalePropsResolver.js +83 -6
  241. package/dist/src/scales/scaleResolution.d.ts +39 -0
  242. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  243. package/dist/src/scales/scaleResolution.js +504 -82
  244. package/dist/src/scales/scaleResolutionTestUtils.d.ts +21 -0
  245. package/dist/src/scales/scaleResolutionTestUtils.d.ts.map +1 -0
  246. package/dist/src/scales/scaleResolutionTestUtils.js +37 -0
  247. package/dist/src/scales/scaleRules.d.ts.map +1 -1
  248. package/dist/src/scales/scaleRules.js +16 -2
  249. package/dist/src/scales/selectionDomainUtils.d.ts +52 -0
  250. package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -0
  251. package/dist/src/scales/selectionDomainUtils.js +194 -0
  252. package/dist/src/scales/zoomDomainUtils.d.ts +18 -0
  253. package/dist/src/scales/zoomDomainUtils.d.ts.map +1 -0
  254. package/dist/src/scales/zoomDomainUtils.js +69 -0
  255. package/dist/src/screenshotHarness.d.ts +16 -0
  256. package/dist/src/screenshotHarness.d.ts.map +1 -0
  257. package/dist/src/screenshotHarness.js +241 -0
  258. package/dist/src/singlePageApp.js +1 -1
  259. package/dist/src/spec/axis.d.ts +41 -30
  260. package/dist/src/spec/channel.d.ts +15 -9
  261. package/dist/src/spec/config.d.ts +264 -0
  262. package/dist/src/spec/data.d.ts +30 -3
  263. package/dist/src/spec/decoration.d.ts +51 -0
  264. package/dist/src/spec/exampleFiles.d.ts +12 -0
  265. package/dist/src/spec/exampleFiles.d.ts.map +1 -0
  266. package/dist/src/spec/exampleFiles.js +52 -0
  267. package/dist/src/spec/font.d.ts +1 -1
  268. package/dist/src/spec/genome.d.ts +22 -2
  269. package/dist/src/spec/mark.d.ts +97 -13
  270. package/dist/src/spec/parameter.d.ts +62 -5
  271. package/dist/src/spec/root.d.ts +34 -1
  272. package/dist/src/spec/scale.d.ts +46 -5
  273. package/dist/src/spec/title.d.ts +13 -2
  274. package/dist/src/spec/tooltip.d.ts +1 -1
  275. package/dist/src/spec/transform.d.ts +39 -4
  276. package/dist/src/spec/view.d.ts +67 -19
  277. package/dist/src/styles/genome-spy.css +63 -55
  278. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  279. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  280. package/dist/src/styles/genome-spy.css.js +31 -22
  281. package/dist/src/testSetup.d.ts +2 -0
  282. package/dist/src/testSetup.d.ts.map +1 -0
  283. package/dist/src/testSetup.js +5 -0
  284. package/dist/src/tooltip/dataTooltipHandler.js +66 -11
  285. package/dist/src/tooltip/tooltipContext.d.ts.map +1 -1
  286. package/dist/src/tooltip/tooltipContext.js +3 -2
  287. package/dist/src/types/embedApi.d.ts +26 -0
  288. package/dist/src/types/encoder.d.ts +17 -15
  289. package/dist/src/types/scaleResolutionApi.d.ts +20 -0
  290. package/dist/src/types/viewContext.d.ts +23 -1
  291. package/dist/src/utils/expression.d.ts +2 -2
  292. package/dist/src/utils/expression.d.ts.map +1 -1
  293. package/dist/src/utils/expression.js +63 -8
  294. package/dist/src/utils/field.d.ts.map +1 -1
  295. package/dist/src/utils/field.js +0 -1
  296. package/dist/src/utils/inertia.d.ts.map +1 -1
  297. package/dist/src/utils/inertia.js +0 -1
  298. package/dist/src/utils/inferSpecBaseUrl.d.ts +14 -0
  299. package/dist/src/utils/inferSpecBaseUrl.d.ts.map +1 -0
  300. package/dist/src/utils/inferSpecBaseUrl.js +73 -0
  301. package/dist/src/utils/inputBinding.d.ts +1 -1
  302. package/dist/src/utils/interaction.d.ts +109 -0
  303. package/dist/src/utils/interaction.d.ts.map +1 -0
  304. package/dist/src/utils/interaction.js +200 -0
  305. package/dist/src/utils/interactionEvent.d.ts +62 -33
  306. package/dist/src/utils/interactionEvent.d.ts.map +1 -1
  307. package/dist/src/utils/interactionEvent.js +86 -48
  308. package/dist/src/utils/kWayMerge.js +1 -1
  309. package/dist/src/utils/mergeObjects.d.ts.map +1 -1
  310. package/dist/src/utils/mergeObjects.js +0 -2
  311. package/dist/src/utils/radixSort.d.ts.map +1 -1
  312. package/dist/src/utils/radixSort.js +0 -2
  313. package/dist/src/utils/throttle.d.ts.map +1 -1
  314. package/dist/src/utils/throttle.js +0 -2
  315. package/dist/src/utils/ui/tooltip.d.ts +1 -0
  316. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  317. package/dist/src/utils/ui/tooltip.js +1 -0
  318. package/dist/src/utils/url.js +1 -1
  319. package/dist/src/view/axisGridView.d.ts +1 -1
  320. package/dist/src/view/axisGridView.d.ts.map +1 -1
  321. package/dist/src/view/axisGridView.js +2 -47
  322. package/dist/src/view/axisView.d.ts +2 -3
  323. package/dist/src/view/axisView.d.ts.map +1 -1
  324. package/dist/src/view/axisView.js +251 -106
  325. package/dist/src/view/concatView.d.ts +2 -1
  326. package/dist/src/view/concatView.d.ts.map +1 -1
  327. package/dist/src/view/concatView.js +4 -2
  328. package/dist/src/view/containerMutationHelper.d.ts +3 -0
  329. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  330. package/dist/src/view/containerMutationHelper.js +12 -1
  331. package/dist/src/view/dataReadiness.d.ts +2 -2
  332. package/dist/src/view/dataReadiness.d.ts.map +1 -1
  333. package/dist/src/view/dataReadiness.js +63 -58
  334. package/dist/src/view/facetView.d.ts +1 -1
  335. package/dist/src/view/facetView.js +4 -4
  336. package/dist/src/view/flowBuilder.js +2 -2
  337. package/dist/src/view/gridView/gridChild.d.ts +13 -0
  338. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  339. package/dist/src/view/gridView/gridChild.js +247 -49
  340. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  341. package/dist/src/view/gridView/gridView.js +296 -99
  342. package/dist/src/view/gridView/keyboardZoomController.d.ts +2 -2
  343. package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -1
  344. package/dist/src/view/gridView/keyboardZoomController.js +1 -1
  345. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  346. package/dist/src/view/gridView/scrollbar.js +4 -2
  347. package/dist/src/view/gridView/selectionRect.d.ts +4 -0
  348. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  349. package/dist/src/view/gridView/selectionRect.js +20 -1
  350. package/dist/src/view/gridView/separatorView.d.ts +1 -0
  351. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  352. package/dist/src/view/gridView/separatorView.js +9 -0
  353. package/dist/src/view/interactionRouting.d.ts +20 -0
  354. package/dist/src/view/interactionRouting.d.ts.map +1 -0
  355. package/dist/src/view/interactionRouting.js +53 -0
  356. package/dist/src/view/layerView.d.ts.map +1 -1
  357. package/dist/src/view/layerView.js +12 -9
  358. package/dist/src/view/layout/grid.js +1 -1
  359. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  360. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +0 -2
  361. package/dist/src/view/testUtils.d.ts +17 -3
  362. package/dist/src/view/testUtils.d.ts.map +1 -1
  363. package/dist/src/view/testUtils.js +62 -69
  364. package/dist/src/view/title.d.ts +8 -1
  365. package/dist/src/view/title.d.ts.map +1 -1
  366. package/dist/src/view/title.js +66 -76
  367. package/dist/src/view/unitView.d.ts +1 -1
  368. package/dist/src/view/unitView.d.ts.map +1 -1
  369. package/dist/src/view/unitView.js +67 -17
  370. package/dist/src/view/view.d.ts +76 -30
  371. package/dist/src/view/view.d.ts.map +1 -1
  372. package/dist/src/view/view.js +136 -47
  373. package/dist/src/view/viewFactory.d.ts +11 -3
  374. package/dist/src/view/viewFactory.d.ts.map +1 -1
  375. package/dist/src/view/viewFactory.js +37 -11
  376. package/dist/src/view/viewUtils.d.ts.map +1 -1
  377. package/dist/src/view/viewUtils.js +41 -5
  378. package/dist/src/view/zoom.d.ts +15 -3
  379. package/dist/src/view/zoom.d.ts.map +1 -1
  380. package/dist/src/view/zoom.js +375 -80
  381. package/package.json +20 -10
  382. package/dist/bundle/AbortablePromiseCache-Dj0vzLnp.js +0 -149
  383. package/dist/bundle/browser-0iNU5Wit.js +0 -138
  384. package/dist/bundle/index-BYsZN7b0.js +0 -1597
  385. package/dist/bundle/index-C3kClAEN.js +0 -1771
  386. package/dist/bundle/index-C7wOh6y1.js +0 -657
  387. package/dist/bundle/index-CRaQAuki.js +0 -326
  388. package/dist/bundle/index-D9v1PCj9.js +0 -507
  389. package/dist/bundle/index-GDOuv_D5.js +0 -266
  390. package/dist/bundle/index-Gt44EOIH.js +0 -628
  391. package/dist/bundle/inflate-GtwLkvSP.js +0 -1048
  392. package/dist/bundle/parquetRead-BnAGCa4_.js +0 -1663
  393. package/dist/bundle/unzip-Bac01w6X.js +0 -1492
  394. package/dist/src/config/scaleDefaults.d.ts +0 -8
  395. package/dist/src/config/scaleDefaults.d.ts.map +0 -1
  396. package/dist/src/config/scaleDefaults.js +0 -45
@@ -4,14 +4,15 @@ import {
4
4
  isDatumDef,
5
5
  isExprDef,
6
6
  isFieldDef,
7
- isFieldOrDatumDefWithCondition,
8
7
  isValueDef,
9
- isValueDefWithCondition,
10
8
  } from "./encoder.js";
11
9
  import { field } from "../utils/field.js";
12
- import { isExprRef, makeConstantExprRef } from "../paramRuntime/paramUtils.js";
10
+ import { isExprRef } from "../paramRuntime/paramUtils.js";
13
11
 
14
12
  /**
13
+ * Creates a raw accessor for a single channel definition branch and attaches
14
+ * metadata used by scale resolution and equality checks.
15
+ *
15
16
  * @param {import("../spec/channel.js").Channel} channel
16
17
  * @param {import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>} channelDef
17
18
  * @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
@@ -24,8 +25,7 @@ export function createAccessor(channel, channelDef, paramRuntime) {
24
25
  */
25
26
 
26
27
  if (!channel) {
27
- // TODO: Don't call with an undefined channel
28
- return;
28
+ throw new Error("Cannot create an accessor without a channel.");
29
29
  }
30
30
 
31
31
  /**
@@ -53,23 +53,6 @@ export function createAccessor(channel, channelDef, paramRuntime) {
53
53
  }).domainKeyBase;
54
54
  }
55
55
 
56
- if ("param" in channelDef) {
57
- // TODO: Figure out how to fix it. Interval selection depends on FIELDS!
58
- /*
59
- a.predicate = paramRuntime.createExpression(
60
- makeSelectionTestExpression(channelDef)
61
- );
62
- a.predicate.param = channelDef.param;
63
- a.predicate.empty = channelDef.empty ?? true;
64
- */
65
- a.predicate = makeConstantExprRef(false);
66
- a.predicate.param = channelDef.param;
67
- a.predicate.empty = channelDef.empty ?? true;
68
- } else {
69
- a.predicate = makeConstantExprRef(true); // Always true (default accessor)
70
- a.predicate.empty = false;
71
- }
72
-
73
56
  a.equals = (other) => {
74
57
  if (!other) {
75
58
  return false;
@@ -89,8 +72,10 @@ export function createAccessor(channel, channelDef, paramRuntime) {
89
72
  }
90
73
 
91
74
  /**
75
+ * Creates an accessor for a literal value or an expression reference.
92
76
  *
93
77
  * @param {Scalar | import("../spec/parameter.js").ExprRef} potentialExprRef
78
+ * @returns {import("../types/encoder.js").Accessor<Scalar>}
94
79
  */
95
80
  function potentialExprRefToAccessor(potentialExprRef) {
96
81
  if (isExprRef(potentialExprRef)) {
@@ -114,10 +99,11 @@ export function createAccessor(channel, channelDef, paramRuntime) {
114
99
  try {
115
100
  return asAccessor(field(channelDef.field));
116
101
  } catch (e) {
117
- throw new Error(`Invalid field definition: ${e.message}`);
102
+ throw new Error(`Invalid field definition: ${e.message}`, {
103
+ cause: e,
104
+ });
118
105
  }
119
106
  } else if (isExprDef(channelDef)) {
120
- // TODO: If parameters change, the data should be re-evaluated
121
107
  return asAccessor(paramRuntime.createExpression(channelDef.expr));
122
108
  } else if (isDatumDef(channelDef)) {
123
109
  return potentialExprRefToAccessor(channelDef.datum);
@@ -132,47 +118,6 @@ export function createAccessor(channel, channelDef, paramRuntime) {
132
118
  }
133
119
  }
134
120
 
135
- /**
136
- * Returns an array of acessors and their predicates. A returned array with
137
- * a single element indicates that no conditions are present.
138
- * The default accessor is always the last element in the array.
139
- *
140
- * @param {import("../spec/channel.js").Channel} channel
141
- * @param {import("../spec/channel.js").ChannelDef} channelDef
142
- * @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
143
- */
144
- export function createConditionalAccessors(channel, channelDef, paramRuntime) {
145
- /** @type {import("../types/encoder.js").Accessor[]} */
146
- const conditionalAccessors = [];
147
-
148
- // TODO: Support an array of conditions
149
- if (
150
- isFieldOrDatumDefWithCondition(channelDef) ||
151
- isValueDefWithCondition(channelDef)
152
- ) {
153
- const conditions = Array.isArray(channelDef.condition)
154
- ? channelDef.condition
155
- : [channelDef.condition];
156
-
157
- for (const condition of conditions) {
158
- conditionalAccessors.push(
159
- createAccessor(channel, condition, paramRuntime)
160
- );
161
- }
162
- }
163
-
164
- conditionalAccessors.push(
165
- createAccessor(channel, channelDef, paramRuntime)
166
- );
167
-
168
- if (conditionalAccessors.filter((a) => !a.constant).length > 1) {
169
- throw new Error(
170
- "Only one accessor can be non-constant. Channel: " + channel
171
- );
172
- }
173
- return conditionalAccessors;
174
- }
175
-
176
121
  /**
177
122
  * @param {import("../types/encoder.js").Accessor} accessor
178
123
  * @returns {accessor is import("../types/encoder.js").ScaleAccessor}
@@ -1,7 +1,35 @@
1
1
  /**
2
- * Creates an object that contains encoders for every channel of a mark
2
+ * Creates a host-side predicate for selection-driven conditional encoding.
3
+ * The selection test expression is compiled lazily when the predicate is
4
+ * first evaluated so encoder construction does not depend on eager selection
5
+ * materialization.
3
6
  *
4
- * TODO: This method should have a test. But how to mock Mark...
7
+ * @param {string} param
8
+ * @param {import("../spec/channel.js").Encoding} encoding
9
+ * @param {{ findValue: (param: string) => any, createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
10
+ * @param {boolean} empty
11
+ * @returns {import("../types/encoder.js").Predicate}
12
+ */
13
+ export function createSelectionPredicate(param: string, encoding: import("../spec/channel.js").Encoding, paramRuntime: {
14
+ findValue: (param: string) => any;
15
+ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction;
16
+ }, empty: boolean): import("../types/encoder.js").Predicate;
17
+ /**
18
+ * Creates ordered conditional branches for a channel definition. The last
19
+ * branch is always the fallback branch.
20
+ *
21
+ * @param {import("../spec/channel.js").Channel} channel
22
+ * @param {import("../spec/channel.js").ChannelDef} channelDef
23
+ * @param {import("../spec/channel.js").Encoding} encoding
24
+ * @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction, findValue: (param: string) => any }} paramRuntime
25
+ * @returns {import("../types/encoder.js").EncodingBranch[]}
26
+ */
27
+ export function createConditionalBranches(channel: import("../spec/channel.js").Channel, channelDef: import("../spec/channel.js").ChannelDef, encoding: import("../spec/channel.js").Encoding, paramRuntime: {
28
+ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction;
29
+ findValue: (param: string) => any;
30
+ }): import("../types/encoder.js").EncodingBranch[];
31
+ /**
32
+ * Creates encoders for direct mark-property channels in an encoding object.
5
33
  *
6
34
  * @param {import("../view/unitView.js").default} unitView
7
35
  * @param {import("../spec/channel.js").Encoding} encoding
@@ -18,20 +46,32 @@ export default function createEncoders(unitView: import("../view/unitView.js").d
18
46
  */
19
47
  export function isNonMarkPropertyChannel(channel: import("../spec/channel.js").Channel): boolean;
20
48
  /**
21
- * @param {import("../types/encoder.js").Accessor[]} accessors
49
+ * @param {import("../types/encoder.js").Encoder} encoder
50
+ * @returns {import("../types/encoder.js").Accessor[]}
51
+ */
52
+ export function getEncoderAccessors(encoder: import("../types/encoder.js").Encoder): import("../types/encoder.js").Accessor[];
53
+ /**
54
+ * @param {import("../types/encoder.js").Encoder} encoder
55
+ * @returns {import("../types/encoder.js").Accessor | undefined}
56
+ */
57
+ export function getEncoderDataAccessor(encoder: import("../types/encoder.js").Encoder): import("../types/encoder.js").Accessor | undefined;
58
+ /**
59
+ * Creates an encoder from ordered branches. The first matching branch wins.
60
+ *
61
+ * @param {import("../types/encoder.js").EncodingBranch[]} branches
22
62
  * @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
23
63
  * @returns {Encoder}
24
64
  */
25
- export function createSimpleOrConditionalEncoder(accessors: import("../types/encoder.js").Accessor[], scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
65
+ export function createSimpleOrConditionalEncoder(branches: import("../types/encoder.js").EncodingBranch[], scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
26
66
  /**
67
+ * Wraps a single accessor with optional scale application and encoder metadata.
68
+ *
27
69
  * @param {Accessor} accessor
28
70
  * @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
29
71
  * @returns {Encoder}
30
72
  */
31
73
  export function createEncoder(accessor: import("../types/encoder.js").Accessor<import("../spec/channel.js").Scalar>, scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
32
74
  /**
33
- * TODO: Move to a more generic place
34
- *
35
75
  * @param {import("../spec/channel.js").ChannelDef} channelDef
36
76
  * @returns {channelDef is import("../spec/channel.js").ValueDef}
37
77
  */
@@ -47,6 +87,9 @@ export function isFieldDef(channelDef: import("../spec/channel.js").ChannelDef):
47
87
  */
48
88
  export function isDatumDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").DatumDef;
49
89
  /**
90
+ * Returns true for direct channel definitions that participate in scale
91
+ * resolution. Conditional wrappers must be unwrapped by the caller first.
92
+ *
50
93
  * @param {import("../spec/channel.js").ChannelDef} channelDef
51
94
  * @returns {channelDef is import("../spec/channel.js").ChannelDefWithScale}
52
95
  */
@@ -54,12 +97,12 @@ export function isChannelDefWithScale(channelDef: import("../spec/channel.js").C
54
97
  /**
55
98
  * @param {import("../spec/channel.js").ChannelDef} channelDef
56
99
  */
57
- export function findChannelDefWithScale(channelDef: import("../spec/channel.js").ChannelDef): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | (import("../spec/channel.js").ParameterPredicate & import("../spec/channel.js").ValueDefBase<string | import("../spec/parameter.js").ExprRef> & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").DomainContributionMixins) | (import("../spec/channel.js").ParameterPredicate & import("../spec/channel.js").ValueDefBase<number | import("../spec/parameter.js").ExprRef> & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").DomainContributionMixins) | (import("../spec/channel.js").ParameterPredicate & import("../spec/channel.js").FieldDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").DomainContributionMixins & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type>) | (import("../spec/channel.js").ParameterPredicate & import("../spec/channel.js").DatumDef<import("../spec/parameter.js").ExprRef | import("../spec/channel.js").Scalar> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").DomainContributionMixins);
100
+ export function findChannelDefWithScale(channelDef: import("../spec/channel.js").ChannelDef): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>> | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropExprDef<import("../spec/channel.js").Type>>;
58
101
  /**
59
102
  * @param {import("../view/unitView.js").default} view
60
103
  * @param {import("../spec/channel.js").Channel} channel
61
104
  */
62
- export function getChannelDefWithScale(view: import("../view/unitView.js").default, channel: import("../spec/channel.js").Channel): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | (import("../spec/channel.js").FieldDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").DomainContributionMixins & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").XIndexDef) | (import("../spec/channel.js").ChromPosDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").DomainContributionMixins & import("../spec/channel.js").TypeMixins<"locus"> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").XIndexDef) | (import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").DatumDef<import("../spec/parameter.js").ExprRef | import("../spec/channel.js").Scalar> & import("../spec/channel.js").DomainContributionMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").XIndexDef) | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").TypeForShape>, string>;
105
+ export function getChannelDefWithScale(view: import("../view/unitView.js").default, channel: import("../spec/channel.js").Channel): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>> | import("../spec/channel.js").Conditional<import("../spec/channel.js").MarkPropExprDef<import("../spec/channel.js").Type>>;
63
106
  /**
64
107
  * @param {import("../spec/channel.js").ChannelDef} channelDef
65
108
  * @returns {channelDef is import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type>}
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"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"}
@@ -2,62 +2,155 @@ import {
2
2
  isIntervalSelection,
3
3
  makeSelectionTestExpression,
4
4
  } from "../selection/selection.js";
5
- import { createConditionalAccessors } from "./accessor.js";
5
+ import { createAccessor } from "./accessor.js";
6
+ import { makeConstantExprRef } from "../paramRuntime/paramUtils.js";
6
7
 
7
8
  /**
8
- * TODO: Complete this. Not tested yet.
9
- *
10
- * Creates a selection predicate that can be used in conditional encoding.
9
+ * Creates a host-side predicate for selection-driven conditional encoding.
10
+ * The selection test expression is compiled lazily when the predicate is
11
+ * first evaluated so encoder construction does not depend on eager selection
12
+ * materialization.
11
13
  *
12
14
  * @param {string} param
13
15
  * @param {import("../spec/channel.js").Encoding} encoding
14
16
  * @param {{ findValue: (param: string) => any, createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction }} paramRuntime
15
17
  * @param {boolean} empty
18
+ * @returns {import("../types/encoder.js").Predicate}
16
19
  */
17
- // eslint-disable-next-line no-unused-vars
18
- function createSelectionPredicate(param, encoding, paramRuntime, empty) {
19
- const selection =
20
- /** @type {import("../types/selectionTypes.js").Selection} */ (
20
+ export function createSelectionPredicate(param, encoding, paramRuntime, empty) {
21
+ /**
22
+ * @typedef {import("../data/flowNode.js").Datum} Datum
23
+ * @typedef {import("../types/selectionTypes.js").Selection} Selection
24
+ * @typedef {import("../types/encoder.js").Predicate} Predicate
25
+ */
26
+
27
+ /** @type {import("../paramRuntime/types.js").ExprRefFunction | undefined} */
28
+ let compiled;
29
+
30
+ const fallback = makeConstantExprRef(false);
31
+
32
+ const ensureCompiled = () => {
33
+ if (compiled) {
34
+ return compiled;
35
+ }
36
+
37
+ const selection = /** @type {Selection | undefined} */ (
21
38
  paramRuntime.findValue(param)
22
39
  );
23
- if (!selection) {
24
- throw new Error(`No selection parameter found: ${param}`);
25
- }
40
+ if (!selection) {
41
+ return fallback;
42
+ }
26
43
 
27
- /** @type {Partial<Record<import("../spec/channel.js").PositionalChannel, import("../spec/channel.js").Field>>} */
28
- const fields = {};
29
- if (isIntervalSelection(selection)) {
30
- const channels = Object.keys(selection.intervals);
31
- for (const channel of channels) {
32
- const channelDef = encoding[channel];
33
- if (isFieldDef(channelDef)) {
34
- fields[channel] = channelDef.field;
35
- continue;
36
- } else if ("condition" in channelDef) {
37
- const condition = channelDef.condition;
38
- if (isFieldDef(condition)) {
39
- fields[channel] = condition.field;
44
+ /** @type {Partial<Record<import("../spec/channel.js").PositionalChannel, import("../spec/channel.js").Field>>} */
45
+ const fields = {};
46
+ if (isIntervalSelection(selection)) {
47
+ const channels = Object.keys(selection.intervals);
48
+ for (const channel of channels) {
49
+ const channelDef = encoding[channel];
50
+ if (isFieldDef(channelDef)) {
51
+ fields[channel] = channelDef.field;
40
52
  continue;
53
+ } else if (channelDef && "condition" in channelDef) {
54
+ const condition = channelDef.condition;
55
+ if (isFieldDef(condition)) {
56
+ fields[channel] = condition.field;
57
+ continue;
58
+ }
41
59
  }
60
+ throw new Error(
61
+ `Selection "${param}" has an interval for "${channel}" channel, but could not find a fieldDef: ${JSON.stringify(encoding[channel])}`
62
+ );
42
63
  }
43
- throw new Error(
44
- `Selection "${param}" has an interval for "${channel}" channel, but could not find a fieldDef: ${JSON.stringify(encoding[channel])}`
45
- );
46
64
  }
47
- }
48
65
 
49
- const expr = makeSelectionTestExpression(
50
- { type: "filter", param, fields, empty },
51
- selection
66
+ const expr = makeSelectionTestExpression(
67
+ { type: "filter", param, fields, empty },
68
+ selection
69
+ );
70
+
71
+ compiled = paramRuntime.createExpression(expr);
72
+ return compiled;
73
+ };
74
+
75
+ /** @type {Predicate} */
76
+ const predicate = Object.assign(
77
+ /** @param {Datum} datum */ (datum) => ensureCompiled()(datum),
78
+ {
79
+ param,
80
+ empty: empty ?? true,
81
+ }
52
82
  );
53
83
 
54
- return paramRuntime.createExpression(expr);
84
+ return predicate;
55
85
  }
56
86
 
57
87
  /**
58
- * Creates an object that contains encoders for every channel of a mark
88
+ * Creates ordered conditional branches for a channel definition. The last
89
+ * branch is always the fallback branch.
59
90
  *
60
- * TODO: This method should have a test. But how to mock Mark...
91
+ * @param {import("../spec/channel.js").Channel} channel
92
+ * @param {import("../spec/channel.js").ChannelDef} channelDef
93
+ * @param {import("../spec/channel.js").Encoding} encoding
94
+ * @param {{ createExpression: (expr: string) => import("../paramRuntime/types.js").ExprRefFunction, findValue: (param: string) => any }} paramRuntime
95
+ * @returns {import("../types/encoder.js").EncodingBranch[]}
96
+ */
97
+ export function createConditionalBranches(
98
+ channel,
99
+ channelDef,
100
+ encoding,
101
+ paramRuntime
102
+ ) {
103
+ const conditions =
104
+ isFieldOrDatumDefWithCondition(channelDef) ||
105
+ isValueDefWithCondition(channelDef)
106
+ ? Array.isArray(channelDef.condition)
107
+ ? channelDef.condition
108
+ : [channelDef.condition]
109
+ : [];
110
+
111
+ const branchChannelDefs = [...conditions, channelDef];
112
+
113
+ /** @type {import("../types/encoder.js").EncodingBranch[]} */
114
+ const branches = branchChannelDefs.map((branchChannelDef, index) => {
115
+ const condition = conditions[index];
116
+ const accessor = createAccessor(
117
+ channel,
118
+ branchChannelDef,
119
+ paramRuntime
120
+ );
121
+
122
+ /** @type {import("../types/encoder.js").Predicate} */
123
+ const predicate = condition?.param
124
+ ? createSelectionPredicate(
125
+ condition.param,
126
+ encoding,
127
+ paramRuntime,
128
+ condition.empty
129
+ )
130
+ : Object.assign(
131
+ makeConstantExprRef(index === branchChannelDefs.length - 1),
132
+ {
133
+ empty: false,
134
+ }
135
+ );
136
+
137
+ return {
138
+ accessor,
139
+ predicate,
140
+ };
141
+ });
142
+
143
+ if (branches.filter((branch) => !branch.accessor.constant).length > 1) {
144
+ throw new Error(
145
+ "Only one accessor can be non-constant. Channel: " + channel
146
+ );
147
+ }
148
+
149
+ return branches;
150
+ }
151
+
152
+ /**
153
+ * Creates encoders for direct mark-property channels in an encoding object.
61
154
  *
62
155
  * @param {import("../view/unitView.js").default} unitView
63
156
  * @param {import("../spec/channel.js").Encoding} encoding
@@ -91,9 +184,10 @@ export default function createEncoders(unitView, encoding) {
91
184
  const typedChannelDef =
92
185
  /** @type {import("../spec/channel.js").ChannelDef} */ (channelDef);
93
186
  encoders[typedChannel] = createSimpleOrConditionalEncoder(
94
- createConditionalAccessors(
187
+ createConditionalBranches(
95
188
  typedChannel,
96
189
  typedChannelDef,
190
+ encoding,
97
191
  unitView.paramRuntime
98
192
  ),
99
193
  scaleSource
@@ -116,23 +210,46 @@ export function isNonMarkPropertyChannel(channel) {
116
210
  }
117
211
 
118
212
  /**
119
- * @param {import("../types/encoder.js").Accessor[]} accessors
213
+ * @param {import("../types/encoder.js").Encoder} encoder
214
+ * @returns {import("../types/encoder.js").Accessor[]}
215
+ */
216
+ export function getEncoderAccessors(encoder) {
217
+ return encoder.branches.map((branch) => branch.accessor);
218
+ }
219
+
220
+ /**
221
+ * @param {import("../types/encoder.js").Encoder} encoder
222
+ * @returns {import("../types/encoder.js").Accessor | undefined}
223
+ */
224
+ export function getEncoderDataAccessor(encoder) {
225
+ return encoder.branches.find((branch) => !branch.accessor.constant)
226
+ ?.accessor;
227
+ }
228
+
229
+ /**
230
+ * Creates an encoder from ordered branches. The first matching branch wins.
231
+ *
232
+ * @param {import("../types/encoder.js").EncodingBranch[]} branches
120
233
  * @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
121
234
  * @returns {Encoder}
122
235
  */
123
- export function createSimpleOrConditionalEncoder(accessors, scaleSource) {
236
+ export function createSimpleOrConditionalEncoder(branches, scaleSource) {
124
237
  /**
125
238
  * @typedef {import("../types/encoder.js").Encoder} Encoder
126
- * @typedef {import("../types/encoder.js").Accessor} Accessor
127
239
  * @typedef {import("../data/flowNode.js").Datum} Datum
128
240
  */
129
- if (accessors.length === 1) {
130
- return createEncoder(accessors[0], scaleSource);
241
+ if (branches.length === 1) {
242
+ const encoder = createEncoder(branches[0].accessor, scaleSource);
243
+ return Object.assign(encoder, {
244
+ branches,
245
+ });
131
246
  }
132
247
 
133
- const predicates = accessors.map((a) => a.predicate);
248
+ const predicates = branches.map((branch) => branch.predicate);
134
249
 
135
- const encoders = accessors.map((a) => createEncoder(a, scaleSource));
250
+ const encoders = branches.map((branch) =>
251
+ createEncoder(branch.accessor, scaleSource)
252
+ );
136
253
 
137
254
  const encoder = Object.assign(
138
255
  (/** @type {Datum} */ datum) => {
@@ -144,12 +261,9 @@ export function createSimpleOrConditionalEncoder(accessors, scaleSource) {
144
261
  },
145
262
  {
146
263
  constant: false,
147
- accessors: /** @type {Accessor[]} */ (
148
- encoders.map((e) => e.accessors[0])
149
- ),
150
- dataAccessor: encoders.map((e) => e.dataAccessor).find((a) => a),
264
+ branches,
151
265
  scale: encoders.map((e) => e.scale).find((s) => s),
152
- channelDef: accessors.at(-1).channelDef,
266
+ channelDef: branches.at(-1).accessor.channelDef,
153
267
  }
154
268
  );
155
269
 
@@ -157,6 +271,8 @@ export function createSimpleOrConditionalEncoder(accessors, scaleSource) {
157
271
  }
158
272
 
159
273
  /**
274
+ * Wraps a single accessor with optional scale application and encoder metadata.
275
+ *
160
276
  * @param {Accessor} accessor
161
277
  * @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
162
278
  * @returns {Encoder}
@@ -189,17 +305,18 @@ export function createEncoder(accessor, scaleSource) {
189
305
  {
190
306
  scale,
191
307
  constant: accessor.constant,
192
- accessors: [accessor],
193
- dataAccessor: accessor.constant ? undefined : accessor,
194
- // TODO: Accessor already has the channelDef
308
+ branches: [
309
+ {
310
+ accessor,
311
+ predicate: makeConstantExprRef(true),
312
+ },
313
+ ],
195
314
  channelDef,
196
315
  }
197
316
  );
198
317
  }
199
318
 
200
319
  /**
201
- * TODO: Move to a more generic place
202
- *
203
320
  * @param {import("../spec/channel.js").ChannelDef} channelDef
204
321
  * @returns {channelDef is import("../spec/channel.js").ValueDef}
205
322
  */
@@ -224,11 +341,13 @@ export function isDatumDef(channelDef) {
224
341
  }
225
342
 
226
343
  /**
344
+ * Returns true for direct channel definitions that participate in scale
345
+ * resolution. Conditional wrappers must be unwrapped by the caller first.
346
+ *
227
347
  * @param {import("../spec/channel.js").ChannelDef} channelDef
228
348
  * @returns {channelDef is import("../spec/channel.js").ChannelDefWithScale}
229
349
  */
230
350
  export function isChannelDefWithScale(channelDef) {
231
- // TODO: Not accurate, fix
232
351
  return (
233
352
  isFieldDef(channelDef) ||
234
353
  isDatumDef(channelDef) ||
@@ -257,11 +376,16 @@ export function findChannelDefWithScale(channelDef) {
257
376
  */
258
377
  export function getChannelDefWithScale(view, channel) {
259
378
  const channelDef = view.mark.encoding[channel];
260
- if (!Array.isArray(channelDef) && isChannelDefWithScale(channelDef)) {
261
- return channelDef;
379
+ if (!Array.isArray(channelDef)) {
380
+ const channelDefWithScale = findChannelDefWithScale(channelDef);
381
+ if (channelDefWithScale) {
382
+ return channelDefWithScale;
383
+ }
262
384
  } else {
263
385
  throw new Error("Not a channel def with scale!");
264
386
  }
387
+
388
+ throw new Error("Not a channel def with scale!");
265
389
  }
266
390
 
267
391
  /**
@@ -131,7 +131,7 @@ export default class BmFontManager {
131
131
 
132
132
  fontEntry.texture = await texturePromise;
133
133
  fontEntry.metrics = await metricsPromise;
134
- } catch (error) {
134
+ } catch {
135
135
  console.warn(
136
136
  `Cannot load font: "${key.family}". Using the embedded default font.`
137
137
  );
@@ -0,0 +1,2 @@
1
+ export * from "./index.js";
2
+ //# sourceMappingURL=full.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/full.js"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ // Explicit alias for the default fat core entry point.
2
+ export * from "./index.js";
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @typedef {import("../spec/scale.js").Scale["assembly"]} AssemblyReference
3
+ */
4
+ /**
5
+ * @typedef {object} AssemblyPreflightResult
6
+ * @prop {AssemblyReference[]} assemblies
7
+ * @prop {boolean} needsDefaultAssembly
8
+ */
9
+ /**
10
+ * @param {import("../view/view.js").default} viewRoot
11
+ * @returns {AssemblyPreflightResult}
12
+ */
13
+ export function collectAssembliesFromViewHierarchy(viewRoot: import("../view/view.js").default): AssemblyPreflightResult;
14
+ /**
15
+ * Ensures that all assemblies required by the given view hierarchy are loaded
16
+ * before any scale initialization path can run.
17
+ *
18
+ * Reminder: call this immediately after view hierarchy creation and before
19
+ * operations that can implicitly initialize scales (for example, step-based
20
+ * size resolution, dynamic opacity setup, or encoder initialization).
21
+ *
22
+ * @param {import("../view/view.js").default} viewRoot
23
+ * @param {import("./genomeStore.js").default} genomeStore
24
+ */
25
+ export function ensureAssembliesForView(viewRoot: import("../view/view.js").default, genomeStore: import("./genomeStore.js").default): Promise<void>;
26
+ export type AssemblyReference = import("../spec/scale.js").Scale["assembly"];
27
+ export type AssemblyPreflightResult = {
28
+ assemblies: AssemblyReference[];
29
+ needsDefaultAssembly: boolean;
30
+ };
31
+ //# sourceMappingURL=assemblyPreflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemblyPreflight.d.ts","sourceRoot":"","sources":["../../../src/genome/assemblyPreflight.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,6DAHW,OAAO,iBAAiB,EAAE,OAAO,GAC/B,uBAAuB,CAsBnC;AAED;;;;;;;;;;GAUG;AACH,kDAHW,OAAO,iBAAiB,EAAE,OAAO,eACjC,OAAO,kBAAkB,EAAE,OAAO,iBAgB5C;gCA5DY,OAAO,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC;;gBAK/C,iBAAiB,EAAE;0BACnB,OAAO"}