@genome-spy/core 0.64.0 → 0.66.1

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 (285) hide show
  1. package/dist/bundle/{index-CCJIjehY.js → AbortablePromiseCache-CcuMrnn7.js} +22 -91
  2. package/dist/bundle/browser-BRemItdO.js +138 -0
  3. package/dist/bundle/index-BatuyGAI.js +271 -0
  4. package/dist/bundle/index-ByuE8dvu.js +332 -0
  5. package/dist/bundle/index-Cq3QFUxX.js +1781 -0
  6. package/dist/bundle/{index-C08YCM2T.js → index-D-w7Mmt9.js} +246 -126
  7. package/dist/bundle/index-D28m8tSW.js +1607 -0
  8. package/dist/bundle/index-D74H8TTz.js +508 -0
  9. package/dist/bundle/index-DbJ0oeYM.js +631 -0
  10. package/dist/bundle/index.es.js +15034 -13842
  11. package/dist/bundle/index.js +223 -237
  12. package/dist/bundle/inflate-GtwLkvSP.js +1048 -0
  13. package/dist/bundle/unzip-NywezaRR.js +1492 -0
  14. package/dist/schema.json +22 -4
  15. package/dist/src/config/scaleDefaults.d.ts +8 -0
  16. package/dist/src/config/scaleDefaults.d.ts.map +1 -0
  17. package/dist/src/config/scaleDefaults.js +45 -0
  18. package/dist/src/data/collector.d.ts +7 -2
  19. package/dist/src/data/collector.d.ts.map +1 -1
  20. package/dist/src/data/collector.js +13 -2
  21. package/dist/src/data/dataFlow.d.ts +20 -42
  22. package/dist/src/data/dataFlow.d.ts.map +1 -1
  23. package/dist/src/data/dataFlow.js +57 -80
  24. package/dist/src/data/flowHandle.d.ts +15 -0
  25. package/dist/src/data/flowHandle.d.ts.map +1 -0
  26. package/dist/src/data/flowHandle.js +13 -0
  27. package/dist/src/data/flowInit.d.ts +85 -0
  28. package/dist/src/data/flowInit.d.ts.map +1 -0
  29. package/dist/src/data/flowInit.js +238 -0
  30. package/dist/src/data/flowInit.test.d.ts +2 -0
  31. package/dist/src/data/flowInit.test.d.ts.map +1 -0
  32. package/dist/src/data/flowOptimizer.d.ts +6 -4
  33. package/dist/src/data/flowOptimizer.d.ts.map +1 -1
  34. package/dist/src/data/flowOptimizer.js +29 -14
  35. package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
  36. package/dist/src/data/sources/lazy/bamSource.js +1 -1
  37. package/dist/src/data/sources/lazy/bigBedSource.js +1 -1
  38. package/dist/src/data/sources/lazy/bigWigSource.js +1 -1
  39. package/dist/src/data/sources/lazy/gff3Source.d.ts +2 -6
  40. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  41. package/dist/src/data/sources/lazy/gff3Source.js +4 -8
  42. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  43. package/dist/src/data/sources/lazy/indexedFastaSource.js +17 -17
  44. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +1 -1
  45. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  46. package/dist/src/data/sources/lazy/singleAxisLazySource.js +10 -3
  47. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  48. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +5 -1
  49. package/dist/src/data/sources/lazy/tabixSource.js +1 -1
  50. package/dist/src/data/transforms/filterScoredLabels.d.ts +1 -1
  51. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  52. package/dist/src/data/transforms/filterScoredLabels.js +1 -1
  53. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -1
  54. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +2 -1
  55. package/dist/src/encoder/encoder.d.ts +1 -1
  56. package/dist/src/encoder/encoder.d.ts.map +1 -1
  57. package/dist/src/encoder/encoder.js +1 -1
  58. package/dist/src/genome/scaleLocus.d.ts +39 -0
  59. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  60. package/dist/src/genome/scaleLocus.js +76 -0
  61. package/dist/src/genomeSpy/canvasExport.d.ts +19 -0
  62. package/dist/src/genomeSpy/canvasExport.d.ts.map +1 -0
  63. package/dist/src/genomeSpy/canvasExport.js +66 -0
  64. package/dist/src/genomeSpy/containerUi.d.ts +17 -0
  65. package/dist/src/genomeSpy/containerUi.d.ts.map +1 -0
  66. package/dist/src/genomeSpy/containerUi.js +78 -0
  67. package/dist/src/genomeSpy/eventListenerRegistry.d.ts +19 -0
  68. package/dist/src/genomeSpy/eventListenerRegistry.d.ts.map +1 -0
  69. package/dist/src/genomeSpy/eventListenerRegistry.js +38 -0
  70. package/dist/src/genomeSpy/inputBindingManager.d.ts +14 -0
  71. package/dist/src/genomeSpy/inputBindingManager.d.ts.map +1 -0
  72. package/dist/src/genomeSpy/inputBindingManager.js +63 -0
  73. package/dist/src/genomeSpy/interactionController.d.ts +40 -0
  74. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -0
  75. package/dist/src/genomeSpy/interactionController.js +371 -0
  76. package/dist/src/genomeSpy/keyboardListenerManager.d.ts +10 -0
  77. package/dist/src/genomeSpy/keyboardListenerManager.d.ts.map +1 -0
  78. package/dist/src/genomeSpy/keyboardListenerManager.js +31 -0
  79. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts +15 -0
  80. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts.map +1 -0
  81. package/dist/src/genomeSpy/loadingIndicatorManager.js +92 -0
  82. package/dist/src/genomeSpy/renderCoordinator.d.ts +22 -0
  83. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -0
  84. package/dist/src/genomeSpy/renderCoordinator.js +118 -0
  85. package/dist/src/genomeSpy/viewContextFactory.d.ts +18 -0
  86. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -0
  87. package/dist/src/genomeSpy/viewContextFactory.js +79 -0
  88. package/dist/src/genomeSpy/viewDataInit.d.ts +12 -0
  89. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -0
  90. package/dist/src/genomeSpy/viewDataInit.js +41 -0
  91. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts +14 -0
  92. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts.map +1 -0
  93. package/dist/src/genomeSpy/viewHierarchyConfig.js +24 -0
  94. package/dist/src/genomeSpy/viewHighlight.d.ts +5 -0
  95. package/dist/src/genomeSpy/viewHighlight.d.ts.map +1 -0
  96. package/dist/src/genomeSpy/viewHighlight.js +30 -0
  97. package/dist/src/genomeSpy.d.ts +17 -72
  98. package/dist/src/genomeSpy.d.ts.map +1 -1
  99. package/dist/src/genomeSpy.js +180 -789
  100. package/dist/src/gl/glslScaleGenerator.d.ts +1 -1
  101. package/dist/src/gl/webGLHelper.d.ts +2 -2
  102. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  103. package/dist/src/gl/webGLHelper.js +4 -4
  104. package/dist/src/index.d.ts.map +1 -1
  105. package/dist/src/index.js +2 -12
  106. package/dist/src/marks/mark.d.ts +1 -0
  107. package/dist/src/marks/mark.d.ts.map +1 -1
  108. package/dist/src/marks/mark.js +26 -3
  109. package/dist/src/{view → scales}/axisResolution.d.ts +12 -14
  110. package/dist/src/scales/axisResolution.d.ts.map +1 -0
  111. package/dist/src/{view → scales}/axisResolution.js +38 -12
  112. package/dist/src/scales/axisResolution.test.d.ts.map +1 -0
  113. package/dist/src/scales/scaleDomainAggregator.d.ts +57 -0
  114. package/dist/src/scales/scaleDomainAggregator.d.ts.map +1 -0
  115. package/dist/src/scales/scaleDomainAggregator.js +162 -0
  116. package/dist/src/scales/scaleDomainAggregator.test.d.ts +2 -0
  117. package/dist/src/scales/scaleDomainAggregator.test.d.ts.map +1 -0
  118. package/dist/src/scales/scaleInstanceManager.d.ts +40 -0
  119. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -0
  120. package/dist/src/scales/scaleInstanceManager.js +313 -0
  121. package/dist/src/scales/scaleInstanceManager.test.d.ts +2 -0
  122. package/dist/src/scales/scaleInstanceManager.test.d.ts.map +1 -0
  123. package/dist/src/scales/scaleInteractionController.d.ts +73 -0
  124. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -0
  125. package/dist/src/scales/scaleInteractionController.js +336 -0
  126. package/dist/src/scales/scaleInteractionController.test.d.ts +2 -0
  127. package/dist/src/scales/scaleInteractionController.test.d.ts.map +1 -0
  128. package/dist/src/scales/scalePropsResolver.d.ts +23 -0
  129. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -0
  130. package/dist/src/scales/scalePropsResolver.js +74 -0
  131. package/dist/src/{view → scales}/scaleResolution.d.ts +53 -31
  132. package/dist/src/scales/scaleResolution.d.ts.map +1 -0
  133. package/dist/src/scales/scaleResolution.js +658 -0
  134. package/dist/src/scales/scaleResolution.test.d.ts.map +1 -0
  135. package/dist/src/scales/scaleResolutionConstants.d.ts +6 -0
  136. package/dist/src/scales/scaleResolutionConstants.d.ts.map +1 -0
  137. package/dist/src/scales/scaleResolutionConstants.js +5 -0
  138. package/dist/src/scales/scaleRules.d.ts +16 -0
  139. package/dist/src/scales/scaleRules.d.ts.map +1 -0
  140. package/dist/src/scales/scaleRules.js +103 -0
  141. package/dist/src/scales/scaleRules.test.d.ts +2 -0
  142. package/dist/src/scales/scaleRules.test.d.ts.map +1 -0
  143. package/dist/src/spec/channel.d.ts +13 -18
  144. package/dist/src/spec/sampleView.d.ts +3 -2
  145. package/dist/src/spec/scale.d.ts +6 -0
  146. package/dist/src/types/embedApi.d.ts +5 -0
  147. package/dist/src/types/scaleResolutionApi.d.ts +1 -1
  148. package/dist/src/types/viewContext.d.ts +1 -1
  149. package/dist/src/view/concatView.d.ts +18 -0
  150. package/dist/src/view/concatView.d.ts.map +1 -1
  151. package/dist/src/view/concatView.js +73 -0
  152. package/dist/src/view/concatView.test.d.ts +2 -0
  153. package/dist/src/view/concatView.test.d.ts.map +1 -0
  154. package/dist/src/view/containerMutationHelper.d.ts +74 -0
  155. package/dist/src/view/containerMutationHelper.d.ts.map +1 -0
  156. package/dist/src/view/containerMutationHelper.js +114 -0
  157. package/dist/src/view/containerView.d.ts +0 -7
  158. package/dist/src/view/containerView.d.ts.map +1 -1
  159. package/dist/src/view/containerView.js +0 -10
  160. package/dist/src/view/facetView.d.ts.map +1 -1
  161. package/dist/src/view/facetView.js +0 -14
  162. package/dist/src/view/flowBuilder.d.ts +2 -2
  163. package/dist/src/view/flowBuilder.d.ts.map +1 -1
  164. package/dist/src/view/flowBuilder.js +21 -4
  165. package/dist/src/view/gridView/gridChild.d.ts +11 -0
  166. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  167. package/dist/src/view/gridView/gridChild.js +32 -6
  168. package/dist/src/view/gridView/gridView.d.ts +39 -1
  169. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  170. package/dist/src/view/gridView/gridView.js +113 -42
  171. package/dist/src/view/gridView/gridView.test.d.ts +2 -0
  172. package/dist/src/view/gridView/gridView.test.d.ts.map +1 -0
  173. package/dist/src/view/gridView/scrollbar.d.ts +39 -8
  174. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  175. package/dist/src/view/gridView/scrollbar.js +184 -69
  176. package/dist/src/view/gridView/selectionRect.d.ts +8 -4
  177. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  178. package/dist/src/view/gridView/selectionRect.js +28 -3
  179. package/dist/src/view/gridView/selectionRect.test.d.ts +2 -0
  180. package/dist/src/view/gridView/selectionRect.test.d.ts.map +1 -0
  181. package/dist/src/view/layerView.d.ts +14 -0
  182. package/dist/src/view/layerView.d.ts.map +1 -1
  183. package/dist/src/view/layerView.js +66 -0
  184. package/dist/src/view/layerView.test.d.ts +2 -0
  185. package/dist/src/view/layerView.test.d.ts.map +1 -0
  186. package/dist/src/view/paramMediator.d.ts +2 -1
  187. package/dist/src/view/paramMediator.d.ts.map +1 -1
  188. package/dist/src/view/paramMediator.js +13 -1
  189. package/dist/src/view/testUtils.d.ts.map +1 -1
  190. package/dist/src/view/testUtils.js +18 -5
  191. package/dist/src/view/unitView.d.ts.map +1 -1
  192. package/dist/src/view/unitView.js +52 -12
  193. package/dist/src/view/view.d.ts +23 -7
  194. package/dist/src/view/view.d.ts.map +1 -1
  195. package/dist/src/view/view.js +61 -5
  196. package/dist/src/view/viewDispose.test.d.ts +2 -0
  197. package/dist/src/view/viewDispose.test.d.ts.map +1 -0
  198. package/dist/src/view/viewUtils.d.ts +4 -4
  199. package/dist/src/view/viewUtils.d.ts.map +1 -1
  200. package/dist/src/view/viewUtils.js +19 -15
  201. package/dist/src/view/viewUtils.test.d.ts +2 -0
  202. package/dist/src/view/viewUtils.test.d.ts.map +1 -0
  203. package/package.json +10 -10
  204. package/dist/bundle/__vite-browser-external-C--ziKoh.js +0 -8
  205. package/dist/bundle/_commonjsHelpers-DjF3Plf2.js +0 -26
  206. package/dist/bundle/index-5ajWdKly.js +0 -1319
  207. package/dist/bundle/index-B03-Om4z.js +0 -274
  208. package/dist/bundle/index-BftNdA0O.js +0 -27
  209. package/dist/bundle/index-Bg7C4Xat.js +0 -2750
  210. package/dist/bundle/index-C3QR8Lv6.js +0 -2131
  211. package/dist/bundle/index-DTcHjAHp.js +0 -505
  212. package/dist/bundle/index-DnIkxb0L.js +0 -1025
  213. package/dist/bundle/index-Ww3TAo6_.js +0 -71
  214. package/dist/bundle/index-g8iXgW0W.js +0 -651
  215. package/dist/bundle/long-B-FASCSo.js +0 -2387
  216. package/dist/bundle/remoteFile-BuaqFGWk.js +0 -94
  217. package/dist/src/data/collector.test.js +0 -138
  218. package/dist/src/data/dataFlow.test.js +0 -5
  219. package/dist/src/data/flow.test.js +0 -81
  220. package/dist/src/data/flowNode.test.js +0 -50
  221. package/dist/src/data/flowOptimizer.test.js +0 -204
  222. package/dist/src/data/formats/fasta.test.js +0 -27
  223. package/dist/src/data/sources/inlineSource.test.js +0 -63
  224. package/dist/src/data/sources/sequenceSource.test.js +0 -81
  225. package/dist/src/data/transforms/aggregate.test.js +0 -134
  226. package/dist/src/data/transforms/clone.test.js +0 -11
  227. package/dist/src/data/transforms/coverage.test.js +0 -238
  228. package/dist/src/data/transforms/filter.test.js +0 -20
  229. package/dist/src/data/transforms/flatten.test.js +0 -96
  230. package/dist/src/data/transforms/flattenDelimited.test.js +0 -90
  231. package/dist/src/data/transforms/flattenSequence.test.js +0 -34
  232. package/dist/src/data/transforms/formula.test.js +0 -25
  233. package/dist/src/data/transforms/identifier.test.js +0 -92
  234. package/dist/src/data/transforms/pileup.test.js +0 -70
  235. package/dist/src/data/transforms/project.test.js +0 -32
  236. package/dist/src/data/transforms/regexExtract.test.js +0 -70
  237. package/dist/src/data/transforms/regexFold.test.js +0 -201
  238. package/dist/src/data/transforms/sample.test.js +0 -38
  239. package/dist/src/data/transforms/stack.test.js +0 -91
  240. package/dist/src/encoder/accessor.test.js +0 -162
  241. package/dist/src/encoder/encoder.test.js +0 -105
  242. package/dist/src/genome/genome.test.js +0 -268
  243. package/dist/src/genome/genomes.test.js +0 -8
  244. package/dist/src/genome/scaleIndex.test.js +0 -78
  245. package/dist/src/genome/scaleLocus.test.js +0 -4
  246. package/dist/src/scale/scale.test.js +0 -326
  247. package/dist/src/scale/ticks.test.js +0 -46
  248. package/dist/src/selection/selection.test.js +0 -14
  249. package/dist/src/utils/addBaseUrl.test.js +0 -30
  250. package/dist/src/utils/binnedIndex.test.js +0 -201
  251. package/dist/src/utils/cloner.test.js +0 -35
  252. package/dist/src/utils/coalesce.test.js +0 -16
  253. package/dist/src/utils/concatIterables.test.js +0 -8
  254. package/dist/src/utils/domainArray.test.js +0 -130
  255. package/dist/src/utils/indexer.test.js +0 -49
  256. package/dist/src/utils/interactionEvent.test.js +0 -35
  257. package/dist/src/utils/iterateNestedMaps.test.js +0 -33
  258. package/dist/src/utils/kWayMerge.test.js +0 -30
  259. package/dist/src/utils/mergeObjects.test.js +0 -42
  260. package/dist/src/utils/numberExtractor.test.js +0 -6
  261. package/dist/src/utils/propertyCacher.test.js +0 -89
  262. package/dist/src/utils/propertyCoalescer.test.js +0 -25
  263. package/dist/src/utils/radixSort.test.js +0 -51
  264. package/dist/src/utils/reservationMap.test.js +0 -20
  265. package/dist/src/utils/ringBuffer.test.js +0 -39
  266. package/dist/src/utils/topK.test.js +0 -54
  267. package/dist/src/utils/trees.test.js +0 -135
  268. package/dist/src/utils/url.test.js +0 -28
  269. package/dist/src/utils/variableTools.test.js +0 -13
  270. package/dist/src/view/axisResolution.d.ts.map +0 -1
  271. package/dist/src/view/axisResolution.test.d.ts.map +0 -1
  272. package/dist/src/view/axisResolution.test.js +0 -206
  273. package/dist/src/view/flowBuilder.test.js +0 -125
  274. package/dist/src/view/layout/flexLayout.test.js +0 -323
  275. package/dist/src/view/layout/grid.test.js +0 -71
  276. package/dist/src/view/layout/rectangle.test.js +0 -192
  277. package/dist/src/view/paramMediator.test.js +0 -260
  278. package/dist/src/view/scaleResolution.d.ts.map +0 -1
  279. package/dist/src/view/scaleResolution.js +0 -1049
  280. package/dist/src/view/scaleResolution.test.d.ts.map +0 -1
  281. package/dist/src/view/scaleResolution.test.js +0 -645
  282. package/dist/src/view/view.test.js +0 -245
  283. package/dist/src/view/viewFactory.test.js +0 -25
  284. /package/dist/src/{view → scales}/axisResolution.test.d.ts +0 -0
  285. /package/dist/src/{view → scales}/scaleResolution.test.d.ts +0 -0
@@ -71,7 +71,7 @@ export function generateConditionalEncoderGlsl(channel: Channel, accessors: impo
71
71
  /**
72
72
  * @param {Channel} channel
73
73
  */
74
- export function getScaledDataTypeForChannel(channel: Channel): "vec3" | "uint" | "float";
74
+ export function getScaledDataTypeForChannel(channel: Channel): "float" | "vec3" | "uint";
75
75
  /**
76
76
  *
77
77
  * @param {import("../types/encoder.js").VegaScale} scale
@@ -104,10 +104,10 @@ export default class WebGLHelper {
104
104
  *
105
105
  * TODO: This may be too specific to be included in WebGLHelper. Find a better place.
106
106
  *
107
- * @param {import("../view/scaleResolution.js").default} resolution
107
+ * @param {import("../scales/scaleResolution.js").default} resolution
108
108
  * @param {boolean} update Update the texture if it exists already.
109
109
  */
110
- createRangeTexture(resolution: import("../view/scaleResolution.js").default, update?: boolean): void;
110
+ createRangeTexture(resolution: import("../scales/scaleResolution.js").default, update?: boolean): void;
111
111
  /**
112
112
  * @param {import("../types/selectionTypes.js").MultiPointSelection} selection
113
113
  */
@@ -1 +1 @@
1
- {"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAwZA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAjfD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsFhC;IAnFG,wBAA2B;IAC3B;;;MAKO;IAEP,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAML,uBAGC;IAFG;;;MAAmC;IAIvC;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAcC;IAED,iBAEC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAS3C;IAED;;;OAGG;IACH;;;MAuBC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,4BAA4B,EAAE,OAAO,WAC5C,OAAO,QA0GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BA+BlE;CACJ"}
1
+ {"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAwZA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AAjfD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsFhC;IAnFG,wBAA2B;IAC3B;;;MAKO;IAEP,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAML,uBAGC;IAFG;;;MAAmC;IAIvC;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAcC;IAED,iBAEC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAS3C;IAED;;;OAGG;IACH;;;MAuBC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA0GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BA+BlE;CACJ"}
@@ -231,11 +231,11 @@ export default class WebGLHelper {
231
231
  *
232
232
  * TODO: This may be too specific to be included in WebGLHelper. Find a better place.
233
233
  *
234
- * @param {import("../view/scaleResolution.js").default} resolution
234
+ * @param {import("../scales/scaleResolution.js").default} resolution
235
235
  * @param {boolean} update Update the texture if it exists already.
236
236
  */
237
237
  createRangeTexture(resolution, update = false) {
238
- const existingTexture = this.rangeTextures.get(resolution.scale);
238
+ const existingTexture = this.rangeTextures.get(resolution.getScale());
239
239
  if (!update && existingTexture) {
240
240
  return;
241
241
  }
@@ -263,7 +263,7 @@ export default class WebGLHelper {
263
263
  const channel = resolution.channel;
264
264
 
265
265
  if (isColorChannel(channel)) {
266
- const scale = resolution.scale;
266
+ const scale = resolution.getScale();
267
267
  const props = scale.props;
268
268
 
269
269
  const range = /** @type {any[]} */ (scale.range());
@@ -317,7 +317,7 @@ export default class WebGLHelper {
317
317
 
318
318
  this.rangeTextures.set(scale, texture);
319
319
  } else {
320
- const scale = resolution.scale;
320
+ const scale = resolution.getScale();
321
321
 
322
322
  if (scale.type === "ordinal" || isDiscretizing(scale.type)) {
323
323
  /** @type {function(any):number} Handle "shape" etc */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AAyGA;;;;;GAKG;AACH,8BAFW,MAAM,gBAuBhB;sBAjIqB,gBAAgB;qBAFjB,KAAK;iBAGT,kBAAkB;oBACf,6BAA6B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":";AA+FA;;;;;GAKG;AACH,8BAFW,MAAM,gBAuBhB;sBAvHqB,gBAAgB;qBAFjB,KAAK;iBAGT,kBAAkB;oBACf,6BAA6B"}
package/dist/src/index.js CHANGED
@@ -66,21 +66,11 @@ export async function embed(el, spec, options = {}) {
66
66
  },
67
67
 
68
68
  addEventListener(type, listener) {
69
- const listenersByType = genomeSpy._eventListeners;
70
-
71
- let listeners = listenersByType.get(type);
72
- if (!listeners) {
73
- listeners = new Set();
74
- listenersByType.set(type, listeners);
75
- }
76
-
77
- listeners.add(listener);
69
+ genomeSpy.addEventListener(type, listener);
78
70
  },
79
71
 
80
72
  removeEventListener(type, listener) {
81
- const listenersByType = genomeSpy._eventListeners;
82
-
83
- listenersByType.get(type)?.delete(listener);
73
+ genomeSpy.removeEventListener(type, listener);
84
74
  },
85
75
 
86
76
  getScaleResolutionByName(name) {
@@ -200,6 +200,7 @@ export default class Mark<P extends import("../spec/mark.js").MarkProps = import
200
200
  * Delete WebGL buffers etc.
201
201
  */
202
202
  deleteGraphicsData(): void;
203
+ dispose(): void;
203
204
  /**
204
205
  *
205
206
  * @param {any} vertexData TODO: Extract type from VertexBuilder
@@ -1 +1 @@
1
- {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
@@ -95,6 +95,11 @@ export default class Mark {
95
95
  */
96
96
  #callAfterShaderCompilation = [];
97
97
 
98
+ /**
99
+ * @type {{expr: import("../view/paramMediator.js").ExprRefFunction, listener: () => void}[]}
100
+ */
101
+ #exprListeners = [];
102
+
98
103
  /**
99
104
  * @param {import("../view/unitView.js").default} unitView
100
105
  */
@@ -597,7 +602,9 @@ export default class Mark {
597
602
 
598
603
  // TODO: High precision scales
599
604
  const { attributeType } = getAttributeAndArrayTypes(
600
- this.unitView.getScaleResolution(channel).scale,
605
+ this.unitView
606
+ .getScaleResolution(channel)
607
+ .getScale(),
601
608
  channel
602
609
  );
603
610
 
@@ -1034,6 +1041,7 @@ export default class Mark {
1034
1041
 
1035
1042
  // Register a listener ...
1036
1043
  fn.addListener(set);
1044
+ this.#exprListeners.push({ expr: fn, listener: set });
1037
1045
  // ... and set the initial value
1038
1046
  set();
1039
1047
  } else {
@@ -1045,7 +1053,14 @@ export default class Mark {
1045
1053
  * Delete WebGL buffers etc.
1046
1054
  */
1047
1055
  deleteGraphicsData() {
1048
- const gl = this.gl;
1056
+ const glHelper = this.glHelper;
1057
+ if (!glHelper) {
1058
+ this.vertexArrayInfo = undefined;
1059
+ this.bufferInfo = undefined;
1060
+ return;
1061
+ }
1062
+
1063
+ const gl = glHelper.gl;
1049
1064
 
1050
1065
  if (this.vertexArrayInfo) {
1051
1066
  this.gl.bindVertexArray(null);
@@ -1070,6 +1085,14 @@ export default class Mark {
1070
1085
  }
1071
1086
  }
1072
1087
 
1088
+ dispose() {
1089
+ for (const { expr, listener } of this.#exprListeners) {
1090
+ expr.removeListener(listener);
1091
+ }
1092
+ this.#exprListeners.length = 0;
1093
+ this.deleteGraphicsData();
1094
+ }
1095
+
1073
1096
  /**
1074
1097
  *
1075
1098
  * @param {any} vertexData TODO: Extract type from VertexBuilder
@@ -1332,7 +1355,7 @@ export default class Mark {
1332
1355
  /** @type {function(import("../gl/dataToVertices.js").RangeEntry):void} rangeEntry */
1333
1356
  let drawWithRangeEntry;
1334
1357
 
1335
- const scale = this.unitView.getScaleResolution("x")?.scale;
1358
+ const scale = this.unitView.getScaleResolution("x")?.getScale();
1336
1359
  const continuous = scale && isContinuous(scale.type);
1337
1360
  const domainStartOffset = ["index", "locus"].includes(scale?.type)
1338
1361
  ? -1
@@ -2,35 +2,33 @@
2
2
  * @template {import("../spec/channel.js").PositionalChannel}[T=PositionalChannel]
3
3
  *
4
4
  * @typedef {object} AxisResolutionMember
5
- * @prop {import("./unitView.js").default} view
5
+ * @prop {import("../view/unitView.js").default} view
6
6
  * @prop {T} channel
7
7
  * @prop {import("../spec/channel.js").ChannelDefWithScale} channelDef
8
8
  */
9
9
  export default class AxisResolution {
10
- /**
11
- * @typedef {import("./unitView.js").default} UnitView
12
- * @typedef {import("../spec/channel.js").PositionalChannel} PositionalChannel
13
- */
14
10
  /**
15
11
  * @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
16
12
  */
17
13
  constructor(channel: import("../spec/channel.js").PrimaryPositionalChannel);
18
14
  channel: import("../spec/channel.js").PrimaryPositionalChannel;
19
- /** @type {AxisResolutionMember[]} The involved views */
20
- members: AxisResolutionMember[];
21
- get scaleResolution(): import("./scaleResolution.js").default;
15
+ get scaleResolution(): any;
16
+ /**
17
+ * @param {AxisResolutionMember} member
18
+ * @returns {() => boolean}
19
+ */
20
+ registerMember(member: AxisResolutionMember): () => boolean;
22
21
  /**
23
- * N.B. This is expected to be called in depth-first order, AFTER the
24
- * scales have been resolved.
25
- *
26
- * @param {AxisResolutionMember} newMember
22
+ * @param {AxisResolutionMember} member
23
+ * @returns {boolean}
27
24
  */
28
- addMember(newMember: AxisResolutionMember): void;
25
+ removeMember(member: AxisResolutionMember): boolean;
29
26
  getAxisProps(): import("../spec/axis.js").GenomeAxis;
30
27
  getTitle(): string;
28
+ #private;
31
29
  }
32
30
  export type AxisResolutionMember<T extends import("../spec/channel.js").PositionalChannel = import("../spec/channel.js").PositionalChannel> = {
33
- view: import("./unitView.js").default;
31
+ view: import("../view/unitView.js").default;
34
32
  channel: T;
35
33
  channelDef: import("../spec/channel.js").ChannelDefWithScale;
36
34
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axisResolution.d.ts","sourceRoot":"","sources":["../../../src/scales/axisResolution.js"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH;IASI;;OAEG;IACH,qBAFW,OAAO,oBAAoB,EAAE,wBAAwB,EAI/D;IADG,+DAAsB;IAG1B,2BAGC;IAiCD;;;OAGG;IACH,uBAHW,oBAAoB,GAClB,MAAM,OAAO,CAQzB;IAED;;;OAGG;IACH,qBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED,qDAuBC;IAED,mBAyDC;;CACJ;iCAtK6D,CAAC,SAAlD,OAAQ,oBAAoB,EAAE,iBAAkB;UAGnD,OAAO,qBAAqB,EAAE,OAAO;aACrC,CAAC;gBACD,OAAO,oBAAoB,EAAE,mBAAmB"}
@@ -7,37 +7,38 @@ import {
7
7
  isSecondaryChannel,
8
8
  isValueDef,
9
9
  } from "../encoder/encoder.js";
10
- import { peek } from "../utils/arrayUtils.js";
11
10
  import coalesce from "../utils/coalesce.js";
12
11
 
13
12
  import mergeObjects from "../utils/mergeObjects.js";
14
- import { getCachedOrCall } from "../utils/propertyCacher.js";
13
+ import { getCachedOrCall, invalidate } from "../utils/propertyCacher.js";
15
14
 
16
15
  /**
17
16
  * @template {import("../spec/channel.js").PositionalChannel}[T=PositionalChannel]
18
17
  *
19
18
  * @typedef {object} AxisResolutionMember
20
- * @prop {import("./unitView.js").default} view
19
+ * @prop {import("../view/unitView.js").default} view
21
20
  * @prop {T} channel
22
21
  * @prop {import("../spec/channel.js").ChannelDefWithScale} channelDef
23
22
  */
24
23
  export default class AxisResolution {
25
24
  /**
26
- * @typedef {import("./unitView.js").default} UnitView
25
+ * @typedef {import("../view/unitView.js").default} UnitView
27
26
  * @typedef {import("../spec/channel.js").PositionalChannel} PositionalChannel
28
27
  */
29
28
 
29
+ /** @type {Set<AxisResolutionMember>} The involved views */
30
+ #members = new Set();
31
+
30
32
  /**
31
33
  * @param {import("../spec/channel.js").PrimaryPositionalChannel} channel
32
34
  */
33
35
  constructor(channel) {
34
36
  this.channel = channel;
35
- /** @type {AxisResolutionMember[]} The involved views */
36
- this.members = [];
37
37
  }
38
38
 
39
39
  get scaleResolution() {
40
- return peek(this.members)?.view.getScaleResolution(this.channel);
40
+ const first = this.#members.values().next().value;
41
+ return first?.view.getScaleResolution(this.channel);
41
42
  }
42
43
 
43
44
  /**
@@ -46,7 +47,7 @@ export default class AxisResolution {
46
47
  *
47
48
  * @param {AxisResolutionMember} newMember
48
49
  */
49
- addMember(newMember) {
50
+ #addMember(newMember) {
50
51
  const { view } = newMember;
51
52
  const newScaleResolution = view.getScaleResolution(this.channel);
52
53
 
@@ -61,18 +62,43 @@ export default class AxisResolution {
61
62
  throw new Error(
62
63
  `Shared axes must have a shared scale! Channel: ${
63
64
  this.channel
64
- }, existing views: [${this.members
65
+ }, existing views: [${Array.from(this.#members)
65
66
  .map((m) => m.view.getPathString())
66
67
  .join(", ")}], new view: ${view.getPathString()}.`
67
68
  );
68
69
  }
69
70
 
70
- this.members.push(newMember);
71
+ this.#members.add(newMember);
72
+ invalidate(this, "axisProps");
73
+ }
74
+
75
+ /**
76
+ * @param {AxisResolutionMember} member
77
+ * @returns {() => boolean}
78
+ */
79
+ registerMember(member) {
80
+ this.#addMember(member);
81
+ return () => {
82
+ const removed = this.removeMember(member);
83
+ return removed && this.#members.size === 0;
84
+ };
85
+ }
86
+
87
+ /**
88
+ * @param {AxisResolutionMember} member
89
+ * @returns {boolean}
90
+ */
91
+ removeMember(member) {
92
+ const removed = this.#members.delete(member);
93
+ if (removed) {
94
+ invalidate(this, "axisProps");
95
+ }
96
+ return removed;
71
97
  }
72
98
 
73
99
  getAxisProps() {
74
100
  return getCachedOrCall(this, "axisProps", () => {
75
- const propArray = this.members.map((member) => {
101
+ const propArray = Array.from(this.#members).map((member) => {
76
102
  const channelDef = member.view.mark.encoding[member.channel];
77
103
  return "axis" in channelDef && channelDef.axis;
78
104
  });
@@ -123,7 +149,7 @@ export default class AxisResolution {
123
149
  };
124
150
  };
125
151
 
126
- const titles = this.members.map(computeTitle);
152
+ const titles = Array.from(this.#members).map(computeTitle);
127
153
 
128
154
  // Skip implicit secondary channel titles if the primary channel has an explicit title
129
155
  const filteredTitles = titles.filter((title) => {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axisResolution.test.d.ts","sourceRoot":"","sources":["../../../src/scales/axisResolution.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
3
+ * @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
4
+ * @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
5
+ * @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
6
+ */
7
+ export default class ScaleDomainAggregator {
8
+ /**
9
+ * @param {object} options
10
+ * @param {() => Set<ScaleResolutionMember>} options.getMembers
11
+ * @param {() => import("../spec/channel.js").Type} options.getType
12
+ * @param {() => number[]} options.getLocusExtent
13
+ * @param {(interval: ScalarDomain | ComplexDomain) => number[]} options.fromComplexInterval
14
+ */
15
+ constructor({ getMembers, getType, getLocusExtent, fromComplexInterval }: {
16
+ getMembers: () => Set<ScaleResolutionMember>;
17
+ getType: () => import("../spec/channel.js").Type;
18
+ getLocusExtent: () => number[];
19
+ fromComplexInterval: (interval: ScalarDomain | ComplexDomain) => number[];
20
+ });
21
+ /**
22
+ * @returns {any[]}
23
+ */
24
+ get initialDomainSnapshot(): any[];
25
+ hasConfiguredDomain(): boolean;
26
+ /**
27
+ * Returns the configured domain or a data-derived/default domain.
28
+ *
29
+ * @param {boolean} [extractDataDomain]
30
+ * @returns {any[]}
31
+ */
32
+ getConfiguredOrDefaultDomain(extractDataDomain?: boolean): any[];
33
+ /**
34
+ * Unions the configured domains of all participating views.
35
+ *
36
+ * @return {DomainArray}
37
+ */
38
+ getConfiguredDomain(): DomainArray;
39
+ /**
40
+ * Extracts and unions the data domains of all participating views.
41
+ *
42
+ * @return {DomainArray}
43
+ */
44
+ getDataDomain(): DomainArray;
45
+ /**
46
+ * @param {import("../types/encoder.js").VegaScale} scale
47
+ * @param {boolean} domainWasInitialized
48
+ * @returns {boolean} true if listeners should be notified immediately
49
+ */
50
+ captureInitialDomain(scale: import("../types/encoder.js").VegaScale, domainWasInitialized: boolean): boolean;
51
+ #private;
52
+ }
53
+ export type DomainArray = import("../utils/domainArray.js").DomainArray;
54
+ export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
55
+ export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
56
+ export type ScaleResolutionMember = import("./scaleResolution.js").ScaleResolutionMember;
57
+ //# sourceMappingURL=scaleDomainAggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleDomainAggregator.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleDomainAggregator.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AAEH;IAgBI;;;;;;OAMG;IACH,0EALG;QAAkD,UAAU,EAApD,MAAM,GAAG,CAAC,qBAAqB,CAAC;QACiB,OAAO,EAAxD,MAAM,OAAO,oBAAoB,EAAE,IAAI;QACf,cAAc,EAAtC,MAAM,MAAM,EAAE;QACgD,mBAAmB,EAAjF,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,KAAK,MAAM,EAAE;KAC9D,EAMA;IAED;;OAEG;IACH,6BAFa,GAAG,EAAE,CAIjB;IAED,+BAEC;IAED;;;;;OAKG;IACH,iDAHW,OAAO,GACL,GAAG,EAAE,CAYjB;IAED;;;;OAIG;IACH,uBAFY,WAAW,CAOtB;IAED;;;;OAIG;IACH,iBAFY,WAAW,CAItB;IAED;;;;OAIG;IACH,4BAJW,OAAO,qBAAqB,EAAE,SAAS,wBACvC,OAAO,GACL,OAAO,CAgBnB;;CACJ;0BA1GY,OAAO,yBAAyB,EAAE,WAAW;4BAC7C,OAAO,kBAAkB,EAAE,aAAa;2BACxC,OAAO,kBAAkB,EAAE,YAAY;oCACvC,OAAO,sBAAsB,EAAE,qBAAqB"}
@@ -0,0 +1,162 @@
1
+ import { span } from "vega-util";
2
+ import { isContinuous } from "vega-scale";
3
+
4
+ import { LOCUS } from "./scaleResolutionConstants.js";
5
+ import createDomain from "../utils/domainArray.js";
6
+
7
+ /**
8
+ * @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
9
+ * @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
10
+ * @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
11
+ * @typedef {import("./scaleResolution.js").ScaleResolutionMember} ScaleResolutionMember
12
+ */
13
+
14
+ export default class ScaleDomainAggregator {
15
+ /** @type {Set<ScaleResolutionMember>} */
16
+ #members;
17
+
18
+ /** @type {() => import("../spec/channel.js").Type} */
19
+ #getType;
20
+
21
+ /** @type {() => number[]} */
22
+ #getLocusExtent;
23
+
24
+ /** @type {(interval: ScalarDomain | ComplexDomain) => number[]} */
25
+ #fromComplexInterval;
26
+
27
+ /** @type {any[]} */
28
+ #initialDomain;
29
+
30
+ /**
31
+ * @param {object} options
32
+ * @param {() => Set<ScaleResolutionMember>} options.getMembers
33
+ * @param {() => import("../spec/channel.js").Type} options.getType
34
+ * @param {() => number[]} options.getLocusExtent
35
+ * @param {(interval: ScalarDomain | ComplexDomain) => number[]} options.fromComplexInterval
36
+ */
37
+ constructor({ getMembers, getType, getLocusExtent, fromComplexInterval }) {
38
+ this.#members = getMembers();
39
+ this.#getType = getType;
40
+ this.#getLocusExtent = getLocusExtent;
41
+ this.#fromComplexInterval = fromComplexInterval;
42
+ }
43
+
44
+ /**
45
+ * @returns {any[]}
46
+ */
47
+ get initialDomainSnapshot() {
48
+ return this.#initialDomain;
49
+ }
50
+
51
+ hasConfiguredDomain() {
52
+ return !!this.getConfiguredDomain();
53
+ }
54
+
55
+ /**
56
+ * Returns the configured domain or a data-derived/default domain.
57
+ *
58
+ * @param {boolean} [extractDataDomain]
59
+ * @returns {any[]}
60
+ */
61
+ getConfiguredOrDefaultDomain(extractDataDomain = false) {
62
+ // TODO: intersect the domain with zoom extent (if it's defined)
63
+ return (
64
+ this.getConfiguredDomain() ??
65
+ resolveDefaultDomain(
66
+ this.#getType(),
67
+ this.#getLocusExtent,
68
+ extractDataDomain ? this.getDataDomain() : undefined
69
+ )
70
+ );
71
+ }
72
+
73
+ /**
74
+ * Unions the configured domains of all participating views.
75
+ *
76
+ * @return {DomainArray}
77
+ */
78
+ getConfiguredDomain() {
79
+ return resolveConfiguredDomain(
80
+ this.#members,
81
+ this.#fromComplexInterval
82
+ );
83
+ }
84
+
85
+ /**
86
+ * Extracts and unions the data domains of all participating views.
87
+ *
88
+ * @return {DomainArray}
89
+ */
90
+ getDataDomain() {
91
+ return resolveDataDomain(this.#members, this.#getType);
92
+ }
93
+
94
+ /**
95
+ * @param {import("../types/encoder.js").VegaScale} scale
96
+ * @param {boolean} domainWasInitialized
97
+ * @returns {boolean} true if listeners should be notified immediately
98
+ */
99
+ captureInitialDomain(scale, domainWasInitialized) {
100
+ if (!this.#initialDomain && isContinuous(scale.type)) {
101
+ const domain = scale.domain();
102
+ if (span(domain) > 0) {
103
+ this.#initialDomain = domain;
104
+ }
105
+ }
106
+
107
+ if (!domainWasInitialized) {
108
+ this.#initialDomain = scale.domain();
109
+ return true;
110
+ }
111
+
112
+ return false;
113
+ }
114
+ }
115
+
116
+ /**
117
+ * @param {Set<ScaleResolutionMember>} members
118
+ * @param {(interval: ScalarDomain | ComplexDomain) => number[]} fromComplexInterval
119
+ * @returns {DomainArray | undefined}
120
+ */
121
+ function resolveConfiguredDomain(members, fromComplexInterval) {
122
+ const domains = Array.from(members)
123
+ .map((member) => member.channelDef)
124
+ .filter((channelDef) => channelDef.scale?.domain)
125
+ .map((channelDef) =>
126
+ // TODO: Handle ExprRefs and Param in domain
127
+ createDomain(
128
+ channelDef.type,
129
+ // Chrom/pos must be linearized first
130
+ fromComplexInterval(channelDef.scale.domain)
131
+ )
132
+ );
133
+
134
+ if (domains.length > 0) {
135
+ return domains.reduce((acc, curr) => acc.extendAll(curr));
136
+ }
137
+ }
138
+
139
+ /**
140
+ * @param {Set<ScaleResolutionMember>} members
141
+ * @param {() => import("../spec/channel.js").Type} getType
142
+ * @returns {DomainArray}
143
+ */
144
+ function resolveDataDomain(members, getType) {
145
+ return Array.from(members)
146
+ .map((member) => member.dataDomainSource?.(member.channel, getType()))
147
+ .filter((domain) => !!domain)
148
+ .reduce((acc, curr) => acc.extendAll(curr));
149
+ }
150
+
151
+ /**
152
+ * @param {import("../spec/channel.js").Type} type
153
+ * @param {() => number[]} getLocusExtent
154
+ * @param {DomainArray | undefined} dataDomain
155
+ * @returns {any[]}
156
+ */
157
+ function resolveDefaultDomain(type, getLocusExtent, dataDomain) {
158
+ if (type == LOCUS) {
159
+ return getLocusExtent();
160
+ }
161
+ return dataDomain ?? [];
162
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scaleDomainAggregator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleDomainAggregator.test.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleDomainAggregator.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ export default class ScaleInstanceManager {
2
+ /**
3
+ * @param {object} options
4
+ * @param {() => import("../view/paramMediator.js").default} options.getParamMediator
5
+ * @param {() => void} options.onRangeChange
6
+ * @param {() => void} [options.onDomainChange]
7
+ * @param {() => import("../genome/genomeStore.js").default | undefined} [options.getGenomeStore]
8
+ */
9
+ constructor({ getParamMediator, onRangeChange, onDomainChange, getGenomeStore, }: {
10
+ getParamMediator: () => import("../view/paramMediator.js").default;
11
+ onRangeChange: () => void;
12
+ onDomainChange?: () => void;
13
+ getGenomeStore?: () => import("../genome/genomeStore.js").default | undefined;
14
+ });
15
+ get scale(): import("../types/encoder.js").VegaScale & {
16
+ props: import("../spec/scale.js").Scale;
17
+ };
18
+ /**
19
+ * @returns {import("../genome/genome.js").default}
20
+ */
21
+ getLocusGenome(): import("../genome/genome.js").default;
22
+ /**
23
+ * @param {import("../spec/scale.js").Scale} props
24
+ * @returns {ScaleWithProps}
25
+ */
26
+ createScale(props: import("../spec/scale.js").Scale): import("../types/encoder.js").VegaScale & {
27
+ props: import("../spec/scale.js").Scale;
28
+ };
29
+ /**
30
+ * @param {import("../spec/scale.js").Scale} props
31
+ */
32
+ reconfigureScale(props: import("../spec/scale.js").Scale): void;
33
+ /**
34
+ * @param {() => void} callback
35
+ * @returns {void}
36
+ */
37
+ withDomainNotificationsSuppressed(callback: () => void): void;
38
+ #private;
39
+ }
40
+ //# sourceMappingURL=scaleInstanceManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleInstanceManager.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleInstanceManager.js"],"names":[],"mappings":"AAMA;IA0BI;;;;;;OAMG;IACH,kFALG;QAAkE,gBAAgB,EAA1E,MAAM,OAAO,0BAA0B,EAAE,OAAO;QAC5B,aAAa,EAAjC,MAAM,IAAI;QACW,cAAc,GAAnC,MAAM,IAAI;QAC6D,cAAc,GAArF,MAAM,OAAO,0BAA0B,EAAE,OAAO,GAAG,SAAS;KAA0B,EAYhG;IAED;eA1CkC,OAAO,kBAAkB,EAAE,KAAK;MA4CjE;IAED;;OAEG;IACH,kBAFa,OAAO,qBAAqB,EAAE,OAAO,CASjD;IAED;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,KAAK;eA3DT,OAAO,kBAAkB,EAAE,KAAK;MAgFjE;IAoBD;;OAEG;IACH,wBAFW,OAAO,kBAAkB,EAAE,KAAK,QAc1C;IAED;;;OAGG;IACH,4CAHW,MAAM,IAAI,GACR,IAAI,CAShB;;CA6EJ"}