@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
@@ -1 +1 @@
1
- {"version":3,"file":"arrayBuilder.d.ts","sourceRoot":"","sources":["../../../src/gl/arrayBuilder.js"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH;IAKI;;;OAGG;IACH,kBAFW,MAAM,EAehB;IAZG,aAAgB;IAEhB,mJAAmJ;IACnJ;;kBADkC,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY;2BAAiB,MAAM;sBAAY,MAAM;;MAC7H;IAEhB,kCAAkC;IAClC,SADW,CAAC,MAAW,IAAI,CAAC,EAAE,CACb;IAEjB,qCAAqC;IACrC,cADW,CAAC,CAAS,IAAG,EAAH,GAAG,KAAE,IAAI,CAAC,EAAE,CACX;IAEtB,oBAAoB;IAGxB,kBAOC;IAED;;;;OAIG;IACH,wBAHW,MAAM,YACN,iBAAiB,QAe3B;IAED;;;;;;;OAOG;IACH,6BANW,MAAM,iBACN,MAAM,oBACN,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,YAAY,mBACrG,MAAM,EAAE,GACP,CAAS,IAAe,EAAf,MAAM,GAAC,MAAM,EAAE,QAAC,CAoFpC;IAED,gBAEC;IAED;;OAEG;IACH,uBAFW,MAAM,QAIhB;IAuDD;;;OAGG;IACH,qBAFW,MAAM,QAKhB;;CACJ;;;;;;;;;OA9NS,CAAS,IAAM,EAAN,MAAM,KAAE,GAAG;;;;qBACpB,MAAM,EAAE;oBACR,MAAM;;;;sBACN,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,YAAY"}
1
+ {"version":3,"file":"arrayBuilder.d.ts","sourceRoot":"","sources":["../../../src/gl/arrayBuilder.js"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH;IAKI;;;OAGG;IACH,kBAFW,MAAM,EAehB;IAZG,aAAgB;IAEhB,mJAAmJ;IACnJ;;kBADkC,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY;2BAAiB,MAAM;sBAAY,MAAM;;MAC7H;IAEhB,kCAAkC;IAClC,SADW,CAAC,MAAW,IAAI,CAAC,EAAE,CACb;IAEjB,qCAAqC;IACrC,cADW,CAAC,CAAS,IAAG,EAAH,GAAG,KAAE,IAAI,CAAC,EAAE,CACX;IAEtB,oBAAoB;IAGxB,kBAOC;IAED;;;;OAIG;IACH,wBAHW,MAAM,YACN,iBAAiB,QAe3B;IAED;;;;;;;OAOG;IACH,6BANW,MAAM,iBACN,MAAM,oBACN,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,YAAY,mBACrG,MAAM,EAAE,GACP,CAAS,IAAe,EAAf,MAAM,GAAC,MAAM,EAAE,QAAC,CAmFpC;IAED,gBAEC;IAED;;OAEG;IACH,uBAFW,MAAM,QAIhB;IAqDD;;;OAGG;IACH,qBAFW,MAAM,QAKhB;;CACJ;;;;;;;;;OA3NS,CAAS,IAAM,EAAN,MAAM,KAAE,GAAG;;;;qBACpB,MAAM,EAAE;oBACR,MAAM;;;;sBACN,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,YAAY"}
@@ -91,7 +91,6 @@ export default class ArrayBuilder {
91
91
  let updater;
92
92
  let i = 0;
93
93
 
94
- // eslint-disable-next-line new-cap
95
94
  const array = new targetArrayType(this.size * numComponents);
96
95
 
97
96
  this.arrays[attributeName] = {
@@ -178,7 +177,6 @@ export default class ArrayBuilder {
178
177
  .join("\n");
179
178
  const pushs = this.pushers.map((_v, i) => ` p${i}();`).join("\n");
180
179
 
181
- // eslint-disable-next-line no-new-func
182
180
  this.pushAll = new Function(
183
181
  "that",
184
182
  `${preps}
@@ -206,7 +204,6 @@ ${pushs}
206
204
  .map((_v, i) => ` u${i}(datum);`)
207
205
  .join("\n");
208
206
 
209
- // eslint-disable-next-line no-new-func
210
207
  this.updateFromDatum = new Function(
211
208
  "that",
212
209
  "datum",
@@ -1 +1 @@
1
- {"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../../src/gl/colorUtils.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,kDANW,MAAM,GAAG,OAAO,kBAAkB,EAAE,YAAY,MAChD,sBAAsB,UACtB,MAAM,oBACN,YAAY,YACZ,OAAO,gBAgDjB;AAED;;;;;GAKG;AACH,uDALW,MAAM,EAAE,qBACR,OAAO,kBAAkB,EAAE,gBAAgB,GAAG,OAAO,kBAAkB,EAAE,sBAAsB,MAC/F,sBAAsB,oBACtB,YAAY,gBA6BtB;AAED;;;;;;;;GAQG;AACH,6CALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBAqBtB;AAED;;;;;;;GAOG;AACH,mDALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBActB;AAyDD;;GAEG;AACH,uCAFW,MAAM,YAKhB"}
1
+ {"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../../src/gl/colorUtils.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,kDANW,MAAM,GAAG,OAAO,kBAAkB,EAAE,YAAY,MAChD,sBAAsB,UACtB,MAAM,oBACN,YAAY,YACZ,OAAO,gBAgDjB;AAED;;;;;GAKG;AACH,uDALW,MAAM,EAAE,qBACR,OAAO,kBAAkB,EAAE,gBAAgB,GAAG,OAAO,kBAAkB,EAAE,sBAAsB,MAC/F,sBAAsB,oBACtB,YAAY,gBA6BtB;AAED;;;;;;;;GAQG;AACH,6CALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBAqBtB;AAED;;;;;;;GAOG;AACH,mDALW,MAAM,EAAE,MACR,sBAAsB,UACtB,MAAM,oBACN,YAAY,gBActB;AAyDD;;GAEG;AACH,uCAFW,MAAM,YAQhB"}
@@ -206,6 +206,9 @@ function colorArrayToTextureData(scheme, count) {
206
206
  * @param {string} color
207
207
  */
208
208
  export function cssColorToArray(color) {
209
+ // TODO: Support CSS "transparent" like Vega/Vega-Lite do. Currently
210
+ // d3-color returns NaN RGB with zero opacity, but GenomeSpy color channels
211
+ // are RGB-only and cannot carry alpha in this conversion path.
209
212
  const rgb = d3color(color).rgb();
210
213
  return [rgb.r, rgb.g, rgb.b].map((x) => x / 255);
211
214
  }
@@ -25,6 +25,13 @@ export class GeometryBuilder {
25
25
  variableEncoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
26
26
  allocatedVertices: number;
27
27
  variableBuilder: ArrayBuilder;
28
+ /** @type {Partial<Record<import("../spec/channel.js").Channel, string>>} */
29
+ attributeNames: Partial<Record<import("../spec/channel.js").Channel, string>>;
30
+ xIndexConfig: {
31
+ domain: [number, number];
32
+ xAttributeName: string;
33
+ x2AttributeName: string;
34
+ };
28
35
  lastOffset: number;
29
36
  /** @type {Map<any, RangeEntry>} keep track of facet locations within the vertex array */
30
37
  rangeMap: Map<any, RangeEntry>;
@@ -44,22 +51,13 @@ export class GeometryBuilder {
44
51
  */
45
52
  addBatch(key: any, data: object[], lo?: number, hi?: number): void;
46
53
  /**
47
- * @param {import("../data/flowNode.js").Data} data Domain, but specified using datums
48
- * @param {number} [lo]
49
- * @param {number} [hi]
50
- */
51
- prepareXIndexer(data: import("../data/flowNode.js").Data, lo?: number, hi?: number): void;
52
- /**
53
- * Add the datum to an index, which allows for efficient rendering of ranges
54
- * on the x axis. Must be called after a datum has been pushed to the ArrayBuilder.
54
+ * Builds the x-domain lookup for the current batch if x indexing is enabled.
55
55
  *
56
- * @param {import("../data/flowNode.js").Datum} datum
56
+ * @param {number} startVertexIndex
57
+ * @param {number} endVertexIndex
58
+ * @returns {import("../utils/binnedIndex.js").Lookup | undefined}
57
59
  */
58
- addToXIndex(datum: import("../data/flowNode.js").Datum): void;
59
- xIndexer: {
60
- (datum: import("../data/flowNode.js").Datum, startVertexIndex: number, endVertexIndex: number): void;
61
- getIndex: () => import("../utils/binnedIndex.js").Lookup;
62
- };
60
+ createXIndex(startVertexIndex: number, endVertexIndex: number): import("../utils/binnedIndex.js").Lookup | undefined;
63
61
  toArrays(): {
64
62
  /** @type {Record<string, {data: Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array, numComponents: number, divisor?: number}>} */
65
63
  arrays: Record<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH,mDALG;QAAsE,QAAQ,EAAtE,MAAM,CAAC,OAAO,oBAAoB,EAAE,OAAO,wCAAU;QACnC,UAAU,GAA5B,MAAM,EAAE;QACQ,WAAW,GAA3B,MAAM;KAEhB,EAiGA;IA/FG,8FAAwB;IAIxB,sGAQK;IAQL,0BAAoC;IAEpC,8BAAoD;IAqEpD,mBAAmB;IAEnB,yFAAyF;IACzF,UADW,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CACkB;IAGrD;;;;OAIG;IACH,mBAFW,GAAG,QAcb;IAED;;OAEG;IACH,oBAFW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,QAM5B;IAED;;;OAGG;IACH,cAHW,GAAG,QACH,MAAM,EAAE,kCAYlB;IAED;;;;OAIG;IACH,sBAJW,OAAO,qBAAqB,EAAE,IAAI,OAClC,MAAM,OACN,MAAM,QAgEhB;IAED;;;;;OAKG;IACH,mBAFW,OAAO,qBAAqB,EAAE,KAAK,QAI7C;IAhEO;;;MAAyB;IAkEjC;QAEQ,kJAAkJ;gBAAvI,MAAM,CAAC,MAAM,EAAE;YAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAE9I,8BAA8B;;QAE9B,8CAA8C;;;MAIrD;CACJ;AAED;IACI;;;;;;OAMG;IACH,gDAJG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EA8BA;IAnBG,qBAkBW;CA8BlB;AAED;IACI;;;;;;;;;OASG;IACH,sFAPG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,qBAAqB,GAArC,MAAM;QAEY,YAAY,GAA9B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EAuBA;IARG,uBAAgC;IAEhC,8BAA8D;IAE9D,6CAA+D;IAC/D,4CAA6D;CA6CpE;AAED;IACI;;;;;;OAMG;IACH,gDAJG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EAQA;CACJ;AAED;IACI;;;;;OAKG;IACH,gDAJG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EAQA;CAYJ;AAED;IACI;;;;;;;;;OASG;IACH,+EAPG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACkD,WAAW,EAArE,OAAO,2BAA2B,EAAE,aAAa;QACrB,UAAU,EAAtC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACH,aAAa,GAA7B,MAAM;QACW,WAAW,GAA5B,OAAO;KAAsB,EA6CvC;IA9BG,4DAA2B;IAC3B,2DAA0B;IAE1B,gCAA4B;IAO5B,qCAAqC;IACrC,cADW,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAMf;IAElB,oDAGC;IACD,qDAGC;IAED,8CAAiE;CAgJxE;;;;;;;;YA7nBS,MAAM;;;;WACN,MAAM;YACN,OAAO,yBAAyB,EAAE,MAAM;;yBAjBzB,mBAAmB"}
1
+ {"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH,mDALG;QAAsE,QAAQ,EAAtE,MAAM,CAAC,OAAO,oBAAoB,EAAE,OAAO,wCAAU;QACnC,UAAU,GAA5B,MAAM,EAAE;QACQ,WAAW,GAA3B,MAAM;KAEhB,EA0IA;IAxIG,8FAAwB;IAIxB,sGAQK;IAQL,0BAAoC;IAEpC,8BAAoD;IACpD,4EAA4E;IAC5E,gBADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAChD;IAgGpB;gBACuB,CAAC,MAAM,EAAE,MAAM,CAAC;;;MAMtC;IAKL,mBAAmB;IAEnB,yFAAyF;IACzF,UADW,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CACkB;IAGrD;;;;OAIG;IACH,mBAFW,GAAG,QAcb;IAED;;OAEG;IACH,oBAFW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,QAM5B;IAED;;;OAGG;IACH,cAHW,GAAG,QACH,MAAM,EAAE,kCASlB;IAED;;;;;;OAMG;IACH,+BAJW,MAAM,kBACN,MAAM,GACJ,OAAO,yBAAyB,EAAE,MAAM,GAAG,SAAS,CA2ChE;IAED;QAEQ,kJAAkJ;gBAAvI,MAAM,CAAC,MAAM,EAAE;YAAC,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAE9I,8BAA8B;;QAE9B,8CAA8C;;;MAIrD;CACJ;AAED;IACI;;;;;;OAMG;IACH,gDAJG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EA8BA;IAnBG,qBAkBW;CA0BlB;AAED;IACI;;;;;;;;;OASG;IACH,sFAPG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,qBAAqB,GAArC,MAAM;QAEY,YAAY,GAA9B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EAuBA;IARG,uBAAgC;IAEhC,8BAA8D;IAE9D,6CAA+D;IAC/D,4CAA6D;CAyCpE;AAED;IACI;;;;;;OAMG;IACH,gDAJG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EAQA;CAeJ;AAED;IACI;;;;;OAKG;IACH,gDAJG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACQ,QAAQ,GAAxB,MAAM;KAChB,EAQA;CA0BJ;AAED;IACI;;;;;;;;;OASG;IACH,+EAPG;QAAwC,QAAQ,EAAxC,MAAM,CAAC,MAAM,wCAAU;QACN,UAAU,EAA3B,MAAM,EAAE;QACkD,WAAW,EAArE,OAAO,2BAA2B,EAAE,aAAa;QACrB,UAAU,EAAtC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACH,aAAa,GAA7B,MAAM;QACW,WAAW,GAA5B,OAAO;KAAsB,EA6CvC;IA9BG,4DAA2B;IAC3B,2DAA0B;IAE1B,gCAA4B;IAO5B,qCAAqC;IACrC,cADW,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAMf;IAElB,oDAGC;IACD,qDAGC;IAED,8CAAiE;CA4IxE;;;;;;;;YAtpBS,MAAM;;;;WACN,MAAM;YACN,OAAO,yBAAyB,EAAE,MAAM;;yBAlBzB,mBAAmB"}
@@ -3,9 +3,9 @@ import { format } from "d3-format";
3
3
  import { isString } from "vega-util";
4
4
  import ArrayBuilder from "./arrayBuilder.js";
5
5
  import { SDF_PADDING } from "../fonts/bmFontMetrics.js";
6
- import { createBinningRangeIndexer } from "../utils/binnedIndex.js";
7
- import { isValueDef } from "../encoder/encoder.js";
6
+ import { getEncoderDataAccessor, isValueDef } from "../encoder/encoder.js";
8
7
  import {
8
+ HIGH_PRECISION_SPLIT_BASE,
9
9
  dedupeEncodingFields,
10
10
  getAttributeAndArrayTypes,
11
11
  makeAttributeName,
@@ -13,6 +13,7 @@ import {
13
13
  } from "./glslScaleGenerator.js";
14
14
  import { isContinuous } from "vega-scale";
15
15
  import createIndexer from "../utils/indexer.js";
16
+ import { createVertexRangeIndexer } from "./vertexRangeIndex.js";
16
17
 
17
18
  /**
18
19
  * @typedef {object} RangeEntry Represents a location of a vertex subset
@@ -57,10 +58,12 @@ export class GeometryBuilder {
57
58
  this.allocatedVertices = numVertices;
58
59
 
59
60
  this.variableBuilder = new ArrayBuilder(numVertices);
61
+ /** @type {Partial<Record<import("../spec/channel.js").Channel, string>>} */
62
+ this.attributeNames = {};
60
63
 
61
64
  // Create converters and updaters for all variable channels.
62
65
  for (const [channel, ce] of Object.entries(this.variableEncoders)) {
63
- const accessor = ce.dataAccessor;
66
+ const accessor = getEncoderDataAccessor(ce);
64
67
  if (!accessor) {
65
68
  continue;
66
69
  }
@@ -71,9 +74,6 @@ export class GeometryBuilder {
71
74
  const sharedChannels = dedupedEncodingFields.find((channels) =>
72
75
  channels.find((c) => c == channel)
73
76
  );
74
- if (sharedChannels && channel != sharedChannels[0]) {
75
- continue;
76
- }
77
77
 
78
78
  const numberAccessor = accessor.asNumberAccessor();
79
79
  const scale = ce.scale;
@@ -116,6 +116,13 @@ export class GeometryBuilder {
116
116
  : numberAccessor;
117
117
 
118
118
  const attributeName = makeAttributeName(sharedChannels ?? channel);
119
+ for (const sharedChannel of sharedChannels ?? [channel]) {
120
+ this.attributeNames[sharedChannel] = attributeName;
121
+ }
122
+
123
+ if (sharedChannels && channel != sharedChannels[0]) {
124
+ continue;
125
+ }
119
126
 
120
127
  this.variableBuilder.addConverter(attributeName, {
121
128
  f,
@@ -125,6 +132,41 @@ export class GeometryBuilder {
125
132
  });
126
133
  }
127
134
 
135
+ const xEncoder = this.variableEncoders.x;
136
+ const x2Encoder = this.variableEncoders.x2;
137
+ const xChannelDef =
138
+ /** @type {import("../spec/channel.js").Encoding["x"] | undefined} */ (
139
+ this.encoders.x?.channelDef
140
+ );
141
+ const xScale = xEncoder?.scale;
142
+ if (
143
+ xChannelDef?.buildIndex &&
144
+ xEncoder &&
145
+ xScale &&
146
+ isContinuous(xScale.type)
147
+ ) {
148
+ const xAttributeName = this.attributeNames.x;
149
+ if (!xAttributeName) {
150
+ throw new Error("Missing x attribute for x indexing.");
151
+ }
152
+
153
+ const x2AttributeName =
154
+ x2Encoder?.scale && isContinuous(x2Encoder.scale.type)
155
+ ? (this.attributeNames.x2 ?? xAttributeName)
156
+ : xAttributeName;
157
+
158
+ this.xIndexConfig = {
159
+ domain: /** @type {[number, number]} */ ([
160
+ xScale.domain()[0],
161
+ xScale.domain()[1],
162
+ ]),
163
+ xAttributeName,
164
+ x2AttributeName,
165
+ };
166
+ } else {
167
+ this.xIndexConfig = undefined;
168
+ }
169
+
128
170
  this.lastOffset = 0;
129
171
 
130
172
  /** @type {Map<any, RangeEntry>} keep track of facet locations within the vertex array */
@@ -144,7 +186,7 @@ export class GeometryBuilder {
144
186
  this.rangeMap.set(key, {
145
187
  offset,
146
188
  count: size,
147
- xIndex: this.xIndexer?.getIndex(),
189
+ xIndex: this.createXIndex(offset, index),
148
190
  });
149
191
  }
150
192
  this.lastOffset = index;
@@ -164,94 +206,62 @@ export class GeometryBuilder {
164
206
  * @param {object[]} data
165
207
  */
166
208
  addBatch(key, data, lo = 0, hi = data.length) {
167
- this.prepareXIndexer(data, lo, hi);
168
-
169
209
  for (let i = lo; i < hi; i++) {
170
210
  const d = data[i];
171
211
  this.variableBuilder.pushFromDatum(d);
172
- this.addToXIndex(d);
173
212
  }
174
213
 
175
214
  this.registerBatch(key);
176
215
  }
177
216
 
178
217
  /**
179
- * @param {import("../data/flowNode.js").Data} data Domain, but specified using datums
180
- * @param {number} [lo]
181
- * @param {number} [hi]
218
+ * Builds the x-domain lookup for the current batch if x indexing is enabled.
219
+ *
220
+ * @param {number} startVertexIndex
221
+ * @param {number} endVertexIndex
222
+ * @returns {import("../utils/binnedIndex.js").Lookup | undefined}
182
223
  */
183
- prepareXIndexer(data, lo = 0, hi = lo + data.length) {
184
- const disable = () => {
185
- /**
186
- * @param {import("../data/flowNode.js").Datum} datum
187
- */
188
- this.addToXIndex = (datum) => {
189
- // nop
190
- };
191
- this.xIndexer = undefined;
192
- };
193
-
194
- const channelDef = this.encoders.x?.channelDef;
195
- if (
196
- !("buildIndex" in channelDef) ||
197
- !channelDef.buildIndex ||
198
- !data.length ||
199
- hi - lo < 0
200
- ) {
201
- disable();
202
- return;
224
+ createXIndex(startVertexIndex, endVertexIndex) {
225
+ const config = this.xIndexConfig;
226
+ if (!config) {
227
+ return undefined;
203
228
  }
204
229
 
205
- /** @param {Encoder} encoder */
206
- const getContinuousEncoder = (encoder) =>
207
- encoder && isContinuous(encoder.scale?.type) && encoder;
208
-
209
- const xe = getContinuousEncoder(this.variableEncoders.x);
210
- const x2e = getContinuousEncoder(this.variableEncoders.x2);
211
-
212
- // Only index variable data
213
- if (xe && !xe.constant && (!x2e || !x2e.constant)) {
214
- const xa = xe.dataAccessor.asNumberAccessor();
215
- const x2a = x2e ? x2e.dataAccessor.asNumberAccessor() : xa;
216
-
217
- /** @type {[number, number]} */
218
- const dataDomain = [xa(data[lo]), x2a(data[hi - 1])];
219
-
220
- // No indexer for point domains that have zero extent
221
- if (dataDomain[1] > dataDomain[0]) {
222
- this.xIndexer = createBinningRangeIndexer(
223
- 50,
224
- dataDomain,
225
- xa,
226
- x2a
227
- );
228
-
229
- let lastVertexCount = this.variableBuilder.vertexCount;
230
-
231
- /**
232
- * @param {any} datum
233
- */
234
- this.addToXIndex = (datum) => {
235
- let currentVertexCount = this.variableBuilder.vertexCount;
236
- this.xIndexer(datum, lastVertexCount, currentVertexCount);
237
- lastVertexCount = currentVertexCount;
230
+ /**
231
+ * @param {string} attributeName
232
+ */
233
+ const createReader = (attributeName) => {
234
+ const attribute = this.variableBuilder.arrays[attributeName];
235
+ const { data, numComponents } = attribute;
236
+
237
+ if (numComponents == 2) {
238
+ /** @type {(vertexIndex: number) => number} */
239
+ return (vertexIndex) => {
240
+ const base = vertexIndex * numComponents;
241
+ return (
242
+ data[base] * HIGH_PRECISION_SPLIT_BASE + data[base + 1]
243
+ );
238
244
  };
239
- } else {
240
- disable();
241
245
  }
242
- } else {
243
- disable();
244
- }
245
- }
246
246
 
247
- /**
248
- * Add the datum to an index, which allows for efficient rendering of ranges
249
- * on the x axis. Must be called after a datum has been pushed to the ArrayBuilder.
250
- *
251
- * @param {import("../data/flowNode.js").Datum} datum
252
- */
253
- addToXIndex(datum) {
254
- //
247
+ /** @type {(vertexIndex: number) => number} */
248
+ return (vertexIndex) => data[vertexIndex * numComponents];
249
+ };
250
+
251
+ const xReader = createReader(config.xAttributeName);
252
+ const x2Reader =
253
+ config.x2AttributeName == config.xAttributeName
254
+ ? xReader
255
+ : createReader(config.x2AttributeName);
256
+
257
+ return createVertexRangeIndexer(
258
+ 50,
259
+ config.domain,
260
+ xReader,
261
+ x2Reader,
262
+ startVertexIndex,
263
+ endVertexIndex
264
+ );
255
265
  }
256
266
 
257
267
  toArrays() {
@@ -316,8 +326,6 @@ export class RectVertexBuilder extends GeometryBuilder {
316
326
  return;
317
327
  }
318
328
 
319
- this.prepareXIndexer(data, lo, hi);
320
-
321
329
  for (let i = lo; i < hi; i++) {
322
330
  const d = data[i];
323
331
 
@@ -327,8 +335,6 @@ export class RectVertexBuilder extends GeometryBuilder {
327
335
  // Six vertices per rect. The vertex shader is using gl_VertexID to
328
336
  // determine the vertex position within the rect.
329
337
  this.pushAllSixTimes();
330
-
331
- this.addToXIndex(d);
332
338
  }
333
339
 
334
340
  this.registerBatch(key);
@@ -370,7 +376,6 @@ export class RuleVertexBuilder extends GeometryBuilder {
370
376
  this.variableBuilder.configure();
371
377
  }
372
378
 
373
- /* eslint-disable complexity */
374
379
  /**
375
380
  *
376
381
  * @param {any} key
@@ -379,8 +384,6 @@ export class RuleVertexBuilder extends GeometryBuilder {
379
384
  addBatch(key, data, lo = 0, hi = data.length) {
380
385
  //const [lower, upper] = this.visibleRange; // TODO
381
386
 
382
- this.prepareXIndexer(data, lo, hi);
383
-
384
387
  for (let i = lo; i < hi; i++) {
385
388
  const d = data[i];
386
389
 
@@ -405,7 +408,6 @@ export class RuleVertexBuilder extends GeometryBuilder {
405
408
 
406
409
  // Duplicate the last vertex to produce a degenerate triangle between the rules
407
410
  this.variableBuilder.pushAll();
408
- this.addToXIndex(d);
409
411
  }
410
412
 
411
413
  this.registerBatch(key);
@@ -428,6 +430,20 @@ export class PointVertexBuilder extends GeometryBuilder {
428
430
  });
429
431
  this.variableBuilder.configure();
430
432
  }
433
+
434
+ /**
435
+ *
436
+ * @param {any} key
437
+ * @param {object[]} data
438
+ */
439
+ addBatch(key, data, lo = 0, hi = data.length) {
440
+ for (let i = lo; i < hi; i++) {
441
+ const d = data[i];
442
+ this.variableBuilder.pushFromDatum(d);
443
+ }
444
+
445
+ this.registerBatch(key);
446
+ }
431
447
  }
432
448
 
433
449
  export class LinkVertexBuilder extends GeometryBuilder {
@@ -446,6 +462,20 @@ export class LinkVertexBuilder extends GeometryBuilder {
446
462
  this.variableBuilder.configure();
447
463
  }
448
464
 
465
+ /**
466
+ *
467
+ * @param {any} key
468
+ * @param {object[]} data
469
+ */
470
+ addBatch(key, data, lo = 0, hi = data.length) {
471
+ for (let i = lo; i < hi; i++) {
472
+ const d = data[i];
473
+ this.variableBuilder.pushFromDatum(d);
474
+ }
475
+
476
+ this.registerBatch(key);
477
+ }
478
+
449
479
  toArrays() {
450
480
  const arrays = this.variableBuilder.arrays;
451
481
 
@@ -548,8 +578,6 @@ export class TextVertexBuilder extends GeometryBuilder {
548
578
  const textureCoord = [0, 0];
549
579
  this.updateTextureCoord(textureCoord);
550
580
 
551
- this.prepareXIndexer(data, lo, hi);
552
-
553
581
  for (let i = lo; i < hi; i++) {
554
582
  const d = data[i];
555
583
 
@@ -581,9 +609,9 @@ export class TextVertexBuilder extends GeometryBuilder {
581
609
  x -= (firstChar.width - firstChar.xadvance) / base / 2; // TODO: Fix, this is a bit off..
582
610
  }
583
611
 
584
- let bottom = -0.5,
585
- height = 1,
586
- normalWidth = 1;
612
+ let bottom;
613
+ let height;
614
+ let normalWidth;
587
615
 
588
616
  for (let i = 0; i < str.length; i++) {
589
617
  const c = this.metrics.getCharByCode(str.charCodeAt(i));
@@ -647,8 +675,6 @@ export class TextVertexBuilder extends GeometryBuilder {
647
675
 
648
676
  x += advance;
649
677
  }
650
-
651
- this.addToXIndex(d);
652
678
  }
653
679
 
654
680
  this.registerBatch(key);
@@ -65,9 +65,9 @@ export function generateScaleGlsl(channel: Channel, scale: any, channelDef: impo
65
65
  /**
66
66
  *
67
67
  * @param {Channel} channel
68
- * @param {import("../types/encoder.js").Accessor[]} accessors
68
+ * @param {import("../types/encoder.js").EncodingBranch[]} branches
69
69
  */
70
- export function generateConditionalEncoderGlsl(channel: Channel, accessors: import("../types/encoder.js").Accessor[]): string;
70
+ export function generateConditionalEncoderGlsl(channel: Channel, branches: import("../types/encoder.js").EncodingBranch[]): string;
71
71
  /**
72
72
  * @param {Channel} channel
73
73
  */
@@ -141,6 +141,9 @@ export const SCALED_FUNCTION_PREFIX: "getScaled_";
141
141
  export const RANGE_TEXTURE_PREFIX: "uRangeTexture_";
142
142
  export const PARAM_PREFIX: "uParam_";
143
143
  export const SELECTION_CHECKER_PREFIX: "checkSelection_";
144
+ export const HIGH_PRECISION_SPLIT_BITS: 12;
145
+ export const HIGH_PRECISION_SPLIT_BASE: number;
146
+ export const HIGH_PRECISION_SPLIT_MASK: number;
144
147
  export function getRangeForGlsl(scale: any, channel: Channel): number[];
145
148
  export type Channel = import("../spec/channel.js").Channel;
146
149
  export type AccessorParts = {
@@ -1 +1 @@
1
- {"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA8BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AAEH,2CALW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;EAwQjD;AAED;;;;GAIG;AACH,wDAHW,OAAO,aACP,OAAO,qBAAqB,EAAE,QAAQ,EAAE,UA+BlD;AAmED;;GAEG;AACH,qDAFW,OAAO,6BAQjB;AAuCD;;;;GAIG;AACH,iDAHW,OAAO,qBAAqB,EAAE,SAAS,WACvC,OAAO,oBAAoB,EAAE,OAAO;mBAQjB,MAAM;sBAAoB,sBAAsB,GAAG,sBAAsB,GAAG,uBAAuB;;;;;;EAkBhI;AAED;;;;GAIG;AACH,2CAFW,MAAM,6BAIhB;AAED;;;;GAIG;AACH,sCAFW,MAAM,EAAE,WAIlB;AAMD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAED;;;GAGG;AACH,2CAHW,MAAM,QACN,MAAM,EAAE,YAUlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAwBD;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACN,MAAM,CAgClB;AAr0BD,+BAAgC,OAAO,CAAC;AACxC,4BAA6B,UAAU,CAAC;AACxC,2BAA4B,QAAQ,CAAC;AACrC,uCAAwC,WAAW,CAAC;AACpD,oCAAqC,QAAQ,CAAC;AAC9C,qCAAsC,YAAY,CAAC;AACnD,mCAAoC,gBAAgB,CAAC;AACrD,2BAA4B,SAAS,CAAC;AACtC,uCAAwC,iBAAiB,CAAC;AAkxBnD,uCAJI,GAAG,WACH,OAAO,GACL,MAAM,EAAE,CAQA;sBAlxBR,OAAO,oBAAoB,EAAE,OAAO;;aA+BvC,OAAO;kBACP,MAAM;0BACN,MAAM;oBACN,MAAM;oBACN,MAAM;kBACN,MAAM;kBACN,MAAM;eACN,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG;;;;;8BAofZ,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;;;;uBAwLhD,CAAC,MAAM,EAAE,OAAO,CAAC;0BAruBJ,WAAW"}
1
+ {"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,kDAJW,OAAO,mBACP,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,mDALW,OAAO,mBACP,MAAM,SACN,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAClC,aAAa,CA4CzB;AAED;;;;;;;GAOG;AACH,4DAJW,OAAO,mBACP,MAAM,GACJ,aAAa,CAkCzB;AAED;;;;;;GAMG;AACH,0CANW,OAAO,SACP,GAAG,mBACH,MAAM,+BACN,OAAO,EAAE,GACP,aAAa,CA8BzB;AACD;;;;;GAKG;AACH,qDALW,OAAO,SACP,GAAG,mBACH,MAAM,GACJ,aAAa,CAyBzB;AAED;;;;;GAKG;AACH,2CAJW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU;;;;;;EAsQjD;AAED;;;;GAIG;AACH,wDAHW,OAAO,YACP,OAAO,qBAAqB,EAAE,cAAc,EAAE,UA+BxD;AAmED;;GAEG;AACH,qDAFW,OAAO,6BAQjB;AAuCD;;;;GAIG;AACH,iDAHW,OAAO,qBAAqB,EAAE,SAAS,WACvC,OAAO,oBAAoB,EAAE,OAAO;mBAQjB,MAAM;sBAAoB,sBAAsB,GAAG,sBAAsB,GAAG,uBAAuB;;;;;;EAoBhI;AAED;;;;GAIG;AACH,2CAFW,MAAM,6BAIhB;AAED;;;;GAIG;AACH,sCAFW,MAAM,EAAE,WAIlB;AAMD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAED;;;GAGG;AACH,2CAHW,MAAM,QACN,MAAM,EAAE,YAUlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAwBD;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACN,MAAM,CAgClB;AAr0BD,+BAAgC,OAAO,CAAC;AACxC,4BAA6B,UAAU,CAAC;AACxC,2BAA4B,QAAQ,CAAC;AACrC,uCAAwC,WAAW,CAAC;AACpD,oCAAqC,QAAQ,CAAC;AAC9C,qCAAsC,YAAY,CAAC;AACnD,mCAAoC,gBAAgB,CAAC;AACrD,2BAA4B,SAAS,CAAC;AACtC,uCAAwC,iBAAiB,CAAC;AAoqB1D,wCAAyC,EAAE,CAAC;AAC5C,+CAAwE;AACxE,+CAAuE;AA4GhE,uCAJI,GAAG,WACH,OAAO,GACL,MAAM,EAAE,CAQA;sBAlxBR,OAAO,oBAAoB,EAAE,OAAO;;aA+BvC,OAAO;kBACP,MAAM;0BACN,MAAM;oBACN,MAAM;oBACN,MAAM;kBACN,MAAM;kBACN,MAAM;eACN,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG;;;;;8BAkfZ,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;;;;uBA0LhD,CAAC,MAAM,EAAE,OAAO,CAAC;0BAruBJ,WAAW"}
@@ -241,7 +241,6 @@ ${attributeType} ${accessorFunctionName}() {
241
241
  * @param {any} scale
242
242
  * @param {import("../spec/channel.js").ChannelDef} channelDef
243
243
  */
244
- // eslint-disable-next-line complexity
245
244
  export function generateScaleGlsl(channel, scale, channelDef) {
246
245
  scale ??= scaleNull();
247
246
 
@@ -272,7 +271,6 @@ export function generateScaleGlsl(channel, scale, channelDef) {
272
271
  * @param {...any} args
273
272
  */
274
273
  const makeScaleCall = (name, ...args) =>
275
- // eslint-disable-next-line no-useless-call
276
274
  makeFunctionCall.apply(null, [name, "value", ...args]);
277
275
 
278
276
  let functionCall;
@@ -508,9 +506,9 @@ ${scaleBody.map((x) => ` ${x}\n`).join("")}
508
506
  /**
509
507
  *
510
508
  * @param {Channel} channel
511
- * @param {import("../types/encoder.js").Accessor[]} accessors
509
+ * @param {import("../types/encoder.js").EncodingBranch[]} branches
512
510
  */
513
- export function generateConditionalEncoderGlsl(channel, accessors) {
511
+ export function generateConditionalEncoderGlsl(channel, branches) {
514
512
  const type = getScaledDataTypeForChannel(channel);
515
513
 
516
514
  /** @type {string[]} */
@@ -518,10 +516,10 @@ export function generateConditionalEncoderGlsl(channel, accessors) {
518
516
  /** @type {string[]} */
519
517
  const statements = [];
520
518
 
521
- for (let i = 0; i < accessors.length; i++) {
522
- const accessor = accessors[i];
519
+ for (let i = 0; i < branches.length; i++) {
520
+ const { accessor, predicate } = branches[i];
523
521
  const accessorFunctionName = makeAccessorFunctionName(channel, i);
524
- const { param, empty } = accessor.predicate;
522
+ const { param, empty } = predicate;
525
523
 
526
524
  conditions.push(
527
525
  param ? `${SELECTION_CHECKER_PREFIX}${param}(${!!empty})` : null
@@ -678,7 +676,9 @@ export function getAttributeAndArrayTypes(scale, channel) {
678
676
  : { attributeType: "float", arrayConstructor: Float32Array };
679
677
 
680
678
  return Object.assign(props, {
681
- numComponents: +(props.attributeType.match(/^vec([234])$/)?.[1] ?? 1),
679
+ numComponents: +(
680
+ props.attributeType.match(/^(?:u)?vec([234])$/)?.[1] ?? 1
681
+ ),
682
682
  discrete,
683
683
  hp,
684
684
  largeHp,
@@ -703,9 +703,9 @@ export function isLargeGenome(domain) {
703
703
  return domain[1] > 2 ** 32;
704
704
  }
705
705
 
706
- const LOW_BITS = 12;
707
- const BS = 2 ** LOW_BITS;
708
- const BM = BS - 1;
706
+ export const HIGH_PRECISION_SPLIT_BITS = 12;
707
+ export const HIGH_PRECISION_SPLIT_BASE = 2 ** HIGH_PRECISION_SPLIT_BITS;
708
+ export const HIGH_PRECISION_SPLIT_MASK = HIGH_PRECISION_SPLIT_BASE - 1;
709
709
 
710
710
  /**
711
711
  * @param {number} x Must be an integer
@@ -714,7 +714,7 @@ const BM = BS - 1;
714
714
  export function splitHighPrecision(x, arr = []) {
715
715
  // Using a bitmask is MUCH faster than using modulo (at least on Chrome 112)
716
716
  // https://www.wikiwand.com/en/Modulo#Performance_issues
717
- const lo = x & BM;
717
+ const lo = x & HIGH_PRECISION_SPLIT_MASK;
718
718
  const hi = x - lo;
719
719
 
720
720
  arr[0] = hi;
@@ -728,8 +728,8 @@ export function splitHighPrecision(x, arr = []) {
728
728
  * @param {number[]} [arr]
729
729
  */
730
730
  export function splitLargeHighPrecision(x, arr = []) {
731
- const lo = x % BS;
732
- const hi = (x - lo) / BS;
731
+ const lo = x % HIGH_PRECISION_SPLIT_BASE;
732
+ const hi = (x - lo) / HIGH_PRECISION_SPLIT_BASE;
733
733
 
734
734
  arr[0] = hi;
735
735
  arr[1] = lo;
@@ -741,7 +741,7 @@ export function splitLargeHighPrecision(x, arr = []) {
741
741
  * @param {number} x
742
742
  */
743
743
  function exactSplitHighPrecision(x) {
744
- const lo = x % BS;
744
+ const lo = x % HIGH_PRECISION_SPLIT_BASE;
745
745
  const hi = x - lo;
746
746
 
747
747
  return [hi, lo];
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @callback VertexReader
3
+ * @param {number} vertexIndex
4
+ * @returns {number}
5
+ */
6
+ /**
7
+ * A binned index for vertex ranges that are already emitted into typed arrays.
8
+ * The readers operate on vertices, not source datums.
9
+ *
10
+ * The scan is run-based: consecutive vertices with the same effective x
11
+ * interval are collapsed into one range before binning.
12
+ *
13
+ * @param {number} size Number of bins
14
+ * @param {[number, number]} domain Domain of positions
15
+ * @param {VertexReader} readStart Reader for the start x value at a vertex
16
+ * @param {VertexReader} [readEnd=readStart] Reader for the end x value at a vertex
17
+ * @param {number} [startVertexIndex=0] First vertex index in the scanned range
18
+ * @param {number} [endVertexIndex=startVertexIndex] One past the last vertex index
19
+ * @returns {import("../utils/binnedIndex.js").Lookup | undefined}
20
+ */
21
+ export function createVertexRangeIndexer(size: number, domain: [number, number], readStart: VertexReader, readEnd?: VertexReader, startVertexIndex?: number, endVertexIndex?: number): import("../utils/binnedIndex.js").Lookup | undefined;
22
+ export type VertexReader = (vertexIndex: number) => number;
23
+ //# sourceMappingURL=vertexRangeIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertexRangeIndex.d.ts","sourceRoot":"","sources":["../../../src/gl/vertexRangeIndex.js"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,+CARW,MAAM,UACN,CAAC,MAAM,EAAE,MAAM,CAAC,aAChB,YAAY,YACZ,YAAY,qBACZ,MAAM,mBACN,MAAM,GACJ,OAAO,yBAAyB,EAAE,MAAM,GAAG,SAAS,CA6HhE;yCA9IU,MAAM,KACJ,MAAM"}