@genome-spy/core 0.65.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 (232) hide show
  1. package/dist/bundle/browser-BRemItdO.js +138 -0
  2. package/dist/bundle/{index-CD7FLu9x.js → index-BatuyGAI.js} +23 -21
  3. package/dist/bundle/{index-C0llXMqm.js → index-ByuE8dvu.js} +140 -88
  4. package/dist/bundle/index-Cq3QFUxX.js +1781 -0
  5. package/dist/bundle/index-D28m8tSW.js +1607 -0
  6. package/dist/bundle/index-DbJ0oeYM.js +631 -0
  7. package/dist/bundle/index.es.js +17587 -16593
  8. package/dist/bundle/index.js +214 -212
  9. package/dist/bundle/{inflate-DRgHi_KK.js → inflate-GtwLkvSP.js} +222 -224
  10. package/dist/bundle/unzip-NywezaRR.js +1492 -0
  11. package/dist/schema.json +13 -3
  12. package/dist/src/config/scaleDefaults.d.ts +8 -0
  13. package/dist/src/config/scaleDefaults.d.ts.map +1 -0
  14. package/dist/src/config/scaleDefaults.js +45 -0
  15. package/dist/src/data/flowInit.js +2 -2
  16. package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
  17. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +1 -1
  18. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  19. package/dist/src/data/sources/lazy/singleAxisLazySource.js +10 -3
  20. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  21. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +5 -1
  22. package/dist/src/data/transforms/filterScoredLabels.d.ts +1 -1
  23. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  24. package/dist/src/data/transforms/filterScoredLabels.js +1 -1
  25. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -1
  26. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +2 -1
  27. package/dist/src/encoder/encoder.d.ts +1 -1
  28. package/dist/src/encoder/encoder.d.ts.map +1 -1
  29. package/dist/src/encoder/encoder.js +1 -1
  30. package/dist/src/genome/scaleLocus.d.ts +39 -0
  31. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  32. package/dist/src/genome/scaleLocus.js +76 -0
  33. package/dist/src/genomeSpy/canvasExport.d.ts +19 -0
  34. package/dist/src/genomeSpy/canvasExport.d.ts.map +1 -0
  35. package/dist/src/genomeSpy/canvasExport.js +66 -0
  36. package/dist/src/genomeSpy/containerUi.d.ts +17 -0
  37. package/dist/src/genomeSpy/containerUi.d.ts.map +1 -0
  38. package/dist/src/genomeSpy/containerUi.js +78 -0
  39. package/dist/src/genomeSpy/eventListenerRegistry.d.ts +19 -0
  40. package/dist/src/genomeSpy/eventListenerRegistry.d.ts.map +1 -0
  41. package/dist/src/genomeSpy/eventListenerRegistry.js +38 -0
  42. package/dist/src/genomeSpy/inputBindingManager.d.ts +14 -0
  43. package/dist/src/genomeSpy/inputBindingManager.d.ts.map +1 -0
  44. package/dist/src/genomeSpy/inputBindingManager.js +63 -0
  45. package/dist/src/genomeSpy/interactionController.d.ts +40 -0
  46. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -0
  47. package/dist/src/genomeSpy/interactionController.js +371 -0
  48. package/dist/src/genomeSpy/keyboardListenerManager.d.ts +10 -0
  49. package/dist/src/genomeSpy/keyboardListenerManager.d.ts.map +1 -0
  50. package/dist/src/genomeSpy/keyboardListenerManager.js +31 -0
  51. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts +15 -0
  52. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts.map +1 -0
  53. package/dist/src/genomeSpy/loadingIndicatorManager.js +92 -0
  54. package/dist/src/genomeSpy/renderCoordinator.d.ts +22 -0
  55. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -0
  56. package/dist/src/genomeSpy/renderCoordinator.js +118 -0
  57. package/dist/src/genomeSpy/viewContextFactory.d.ts +18 -0
  58. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -0
  59. package/dist/src/genomeSpy/viewContextFactory.js +79 -0
  60. package/dist/src/genomeSpy/viewDataInit.d.ts +12 -0
  61. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -0
  62. package/dist/src/genomeSpy/viewDataInit.js +41 -0
  63. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts +14 -0
  64. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts.map +1 -0
  65. package/dist/src/genomeSpy/viewHierarchyConfig.js +24 -0
  66. package/dist/src/genomeSpy/viewHighlight.d.ts +5 -0
  67. package/dist/src/genomeSpy/viewHighlight.d.ts.map +1 -0
  68. package/dist/src/genomeSpy/viewHighlight.js +30 -0
  69. package/dist/src/genomeSpy.d.ts +16 -71
  70. package/dist/src/genomeSpy.d.ts.map +1 -1
  71. package/dist/src/genomeSpy.js +179 -745
  72. package/dist/src/gl/glslScaleGenerator.d.ts +1 -1
  73. package/dist/src/gl/webGLHelper.d.ts +2 -2
  74. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  75. package/dist/src/gl/webGLHelper.js +4 -4
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +2 -12
  78. package/dist/src/marks/mark.d.ts.map +1 -1
  79. package/dist/src/marks/mark.js +4 -2
  80. package/dist/src/{view → scales}/axisResolution.d.ts +9 -16
  81. package/dist/src/scales/axisResolution.d.ts.map +1 -0
  82. package/dist/src/{view → scales}/axisResolution.js +29 -18
  83. package/dist/src/scales/axisResolution.test.d.ts.map +1 -0
  84. package/dist/src/scales/scaleDomainAggregator.d.ts +57 -0
  85. package/dist/src/scales/scaleDomainAggregator.d.ts.map +1 -0
  86. package/dist/src/scales/scaleDomainAggregator.js +162 -0
  87. package/dist/src/scales/scaleDomainAggregator.test.d.ts +2 -0
  88. package/dist/src/scales/scaleDomainAggregator.test.d.ts.map +1 -0
  89. package/dist/src/scales/scaleInstanceManager.d.ts +40 -0
  90. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -0
  91. package/dist/src/scales/scaleInstanceManager.js +313 -0
  92. package/dist/src/scales/scaleInstanceManager.test.d.ts +2 -0
  93. package/dist/src/scales/scaleInstanceManager.test.d.ts.map +1 -0
  94. package/dist/src/scales/scaleInteractionController.d.ts +73 -0
  95. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -0
  96. package/dist/src/scales/scaleInteractionController.js +336 -0
  97. package/dist/src/scales/scaleInteractionController.test.d.ts +2 -0
  98. package/dist/src/scales/scaleInteractionController.test.d.ts.map +1 -0
  99. package/dist/src/scales/scalePropsResolver.d.ts +23 -0
  100. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -0
  101. package/dist/src/scales/scalePropsResolver.js +74 -0
  102. package/dist/src/{view → scales}/scaleResolution.d.ts +52 -35
  103. package/dist/src/scales/scaleResolution.d.ts.map +1 -0
  104. package/dist/src/scales/scaleResolution.js +658 -0
  105. package/dist/src/scales/scaleResolution.test.d.ts.map +1 -0
  106. package/dist/src/scales/scaleResolutionConstants.d.ts +6 -0
  107. package/dist/src/scales/scaleResolutionConstants.d.ts.map +1 -0
  108. package/dist/src/scales/scaleResolutionConstants.js +5 -0
  109. package/dist/src/scales/scaleRules.d.ts +16 -0
  110. package/dist/src/scales/scaleRules.d.ts.map +1 -0
  111. package/dist/src/scales/scaleRules.js +103 -0
  112. package/dist/src/scales/scaleRules.test.d.ts +2 -0
  113. package/dist/src/scales/scaleRules.test.d.ts.map +1 -0
  114. package/dist/src/spec/channel.d.ts +13 -18
  115. package/dist/src/spec/scale.d.ts +6 -0
  116. package/dist/src/types/embedApi.d.ts +5 -0
  117. package/dist/src/types/scaleResolutionApi.d.ts +1 -1
  118. package/dist/src/view/concatView.d.ts +18 -0
  119. package/dist/src/view/concatView.d.ts.map +1 -1
  120. package/dist/src/view/concatView.js +73 -0
  121. package/dist/src/view/concatView.test.d.ts +2 -0
  122. package/dist/src/view/concatView.test.d.ts.map +1 -0
  123. package/dist/src/view/containerMutationHelper.d.ts +74 -0
  124. package/dist/src/view/containerMutationHelper.d.ts.map +1 -0
  125. package/dist/src/view/containerMutationHelper.js +114 -0
  126. package/dist/src/view/containerView.d.ts +0 -7
  127. package/dist/src/view/containerView.d.ts.map +1 -1
  128. package/dist/src/view/containerView.js +0 -10
  129. package/dist/src/view/facetView.d.ts.map +1 -1
  130. package/dist/src/view/facetView.js +0 -15
  131. package/dist/src/view/gridView/gridChild.d.ts +11 -0
  132. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  133. package/dist/src/view/gridView/gridChild.js +32 -6
  134. package/dist/src/view/gridView/gridView.d.ts +39 -1
  135. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  136. package/dist/src/view/gridView/gridView.js +106 -48
  137. package/dist/src/view/gridView/gridView.test.d.ts +2 -0
  138. package/dist/src/view/gridView/gridView.test.d.ts.map +1 -0
  139. package/dist/src/view/gridView/scrollbar.d.ts +39 -8
  140. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  141. package/dist/src/view/gridView/scrollbar.js +184 -69
  142. package/dist/src/view/layerView.d.ts +14 -0
  143. package/dist/src/view/layerView.d.ts.map +1 -1
  144. package/dist/src/view/layerView.js +66 -0
  145. package/dist/src/view/layerView.test.d.ts +2 -0
  146. package/dist/src/view/layerView.test.d.ts.map +1 -0
  147. package/dist/src/view/testUtils.d.ts.map +1 -1
  148. package/dist/src/view/testUtils.js +2 -1
  149. package/dist/src/view/unitView.d.ts.map +1 -1
  150. package/dist/src/view/unitView.js +24 -34
  151. package/dist/src/view/view.d.ts +6 -6
  152. package/dist/src/view/view.d.ts.map +1 -1
  153. package/dist/src/view/view.js +4 -4
  154. package/package.json +2 -2
  155. package/dist/bundle/browser-txUcLy2H.js +0 -123
  156. package/dist/bundle/index-BQpbYrv4.js +0 -1712
  157. package/dist/bundle/index-BhtHKLUo.js +0 -73
  158. package/dist/bundle/index-CCe8rnZz.js +0 -716
  159. package/dist/bundle/index-DhcU-Gk-.js +0 -1487
  160. package/dist/src/data/collector.test.js +0 -138
  161. package/dist/src/data/dataFlow.test.js +0 -38
  162. package/dist/src/data/flow.test.js +0 -81
  163. package/dist/src/data/flowInit.test.js +0 -413
  164. package/dist/src/data/flowNode.test.js +0 -50
  165. package/dist/src/data/flowOptimizer.test.js +0 -209
  166. package/dist/src/data/formats/fasta.test.js +0 -27
  167. package/dist/src/data/sources/inlineSource.test.js +0 -63
  168. package/dist/src/data/sources/sequenceSource.test.js +0 -81
  169. package/dist/src/data/transforms/aggregate.test.js +0 -134
  170. package/dist/src/data/transforms/clone.test.js +0 -11
  171. package/dist/src/data/transforms/coverage.test.js +0 -238
  172. package/dist/src/data/transforms/filter.test.js +0 -20
  173. package/dist/src/data/transforms/flatten.test.js +0 -96
  174. package/dist/src/data/transforms/flattenDelimited.test.js +0 -90
  175. package/dist/src/data/transforms/flattenSequence.test.js +0 -34
  176. package/dist/src/data/transforms/formula.test.js +0 -25
  177. package/dist/src/data/transforms/identifier.test.js +0 -92
  178. package/dist/src/data/transforms/pileup.test.js +0 -70
  179. package/dist/src/data/transforms/project.test.js +0 -32
  180. package/dist/src/data/transforms/regexExtract.test.js +0 -70
  181. package/dist/src/data/transforms/regexFold.test.js +0 -201
  182. package/dist/src/data/transforms/sample.test.js +0 -38
  183. package/dist/src/data/transforms/stack.test.js +0 -91
  184. package/dist/src/encoder/accessor.test.js +0 -162
  185. package/dist/src/encoder/encoder.test.js +0 -105
  186. package/dist/src/genome/genome.test.js +0 -268
  187. package/dist/src/genome/genomes.test.js +0 -8
  188. package/dist/src/genome/scaleIndex.test.js +0 -78
  189. package/dist/src/genome/scaleLocus.test.js +0 -4
  190. package/dist/src/scale/scale.test.js +0 -326
  191. package/dist/src/scale/ticks.test.js +0 -46
  192. package/dist/src/selection/selection.test.js +0 -14
  193. package/dist/src/utils/addBaseUrl.test.js +0 -30
  194. package/dist/src/utils/binnedIndex.test.js +0 -201
  195. package/dist/src/utils/cloner.test.js +0 -35
  196. package/dist/src/utils/coalesce.test.js +0 -16
  197. package/dist/src/utils/concatIterables.test.js +0 -8
  198. package/dist/src/utils/domainArray.test.js +0 -130
  199. package/dist/src/utils/indexer.test.js +0 -49
  200. package/dist/src/utils/interactionEvent.test.js +0 -35
  201. package/dist/src/utils/iterateNestedMaps.test.js +0 -33
  202. package/dist/src/utils/kWayMerge.test.js +0 -30
  203. package/dist/src/utils/mergeObjects.test.js +0 -42
  204. package/dist/src/utils/numberExtractor.test.js +0 -6
  205. package/dist/src/utils/propertyCacher.test.js +0 -89
  206. package/dist/src/utils/propertyCoalescer.test.js +0 -25
  207. package/dist/src/utils/radixSort.test.js +0 -51
  208. package/dist/src/utils/reservationMap.test.js +0 -20
  209. package/dist/src/utils/ringBuffer.test.js +0 -39
  210. package/dist/src/utils/topK.test.js +0 -54
  211. package/dist/src/utils/trees.test.js +0 -135
  212. package/dist/src/utils/url.test.js +0 -28
  213. package/dist/src/utils/variableTools.test.js +0 -13
  214. package/dist/src/view/axisResolution.d.ts.map +0 -1
  215. package/dist/src/view/axisResolution.test.d.ts.map +0 -1
  216. package/dist/src/view/axisResolution.test.js +0 -206
  217. package/dist/src/view/flowBuilder.test.js +0 -125
  218. package/dist/src/view/gridView/selectionRect.test.js +0 -87
  219. package/dist/src/view/layout/flexLayout.test.js +0 -323
  220. package/dist/src/view/layout/grid.test.js +0 -71
  221. package/dist/src/view/layout/rectangle.test.js +0 -192
  222. package/dist/src/view/paramMediator.test.js +0 -282
  223. package/dist/src/view/scaleResolution.d.ts.map +0 -1
  224. package/dist/src/view/scaleResolution.js +0 -1059
  225. package/dist/src/view/scaleResolution.test.d.ts.map +0 -1
  226. package/dist/src/view/scaleResolution.test.js +0 -645
  227. package/dist/src/view/view.test.js +0 -245
  228. package/dist/src/view/viewDispose.test.js +0 -110
  229. package/dist/src/view/viewFactory.test.js +0 -25
  230. package/dist/src/view/viewUtils.test.js +0 -87
  231. /package/dist/src/{view → scales}/axisResolution.test.d.ts +0 -0
  232. /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) {
@@ -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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"}
@@ -602,7 +602,9 @@ export default class Mark {
602
602
 
603
603
  // TODO: High precision scales
604
604
  const { attributeType } = getAttributeAndArrayTypes(
605
- this.unitView.getScaleResolution(channel).scale,
605
+ this.unitView
606
+ .getScaleResolution(channel)
607
+ .getScale(),
606
608
  channel
607
609
  );
608
610
 
@@ -1353,7 +1355,7 @@ export default class Mark {
1353
1355
  /** @type {function(import("../gl/dataToVertices.js").RangeEntry):void} rangeEntry */
1354
1356
  let drawWithRangeEntry;
1355
1357
 
1356
- const scale = this.unitView.getScaleResolution("x")?.scale;
1358
+ const scale = this.unitView.getScaleResolution("x")?.getScale();
1357
1359
  const continuous = scale && isContinuous(scale.type);
1358
1360
  const domainStartOffset = ["index", "locus"].includes(scale?.type)
1359
1361
  ? -1
@@ -2,40 +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;
22
16
  /**
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
17
+ * @param {AxisResolutionMember} member
18
+ * @returns {() => boolean}
27
19
  */
28
- addMember(newMember: AxisResolutionMember): void;
20
+ registerMember(member: AxisResolutionMember): () => boolean;
29
21
  /**
30
- * @param {UnitView} view
22
+ * @param {AxisResolutionMember} member
31
23
  * @returns {boolean}
32
24
  */
33
- removeMembersByView(view: import("./unitView.js").default): boolean;
25
+ removeMember(member: AxisResolutionMember): boolean;
34
26
  getAxisProps(): import("../spec/axis.js").GenomeAxis;
35
27
  getTitle(): string;
28
+ #private;
36
29
  }
37
30
  export type AxisResolutionMember<T extends import("../spec/channel.js").PositionalChannel = import("../spec/channel.js").PositionalChannel> = {
38
- view: import("./unitView.js").default;
31
+ view: import("../view/unitView.js").default;
39
32
  channel: T;
40
33
  channelDef: import("../spec/channel.js").ChannelDefWithScale;
41
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,7 +7,6 @@ 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";
@@ -17,27 +16,29 @@ import { getCachedOrCall, invalidate } from "../utils/propertyCacher.js";
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,33 +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);
71
72
  invalidate(this, "axisProps");
72
73
  }
73
74
 
74
75
  /**
75
- * @param {UnitView} view
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
76
89
  * @returns {boolean}
77
90
  */
78
- removeMembersByView(view) {
79
- const before = this.members.length;
80
- this.members = this.members.filter((member) => member.view !== view);
81
- if (this.members.length !== before) {
91
+ removeMember(member) {
92
+ const removed = this.#members.delete(member);
93
+ if (removed) {
82
94
  invalidate(this, "axisProps");
83
- return true;
84
95
  }
85
- return false;
96
+ return removed;
86
97
  }
87
98
 
88
99
  getAxisProps() {
89
100
  return getCachedOrCall(this, "axisProps", () => {
90
- const propArray = this.members.map((member) => {
101
+ const propArray = Array.from(this.#members).map((member) => {
91
102
  const channelDef = member.view.mark.encoding[member.channel];
92
103
  return "axis" in channelDef && channelDef.axis;
93
104
  });
@@ -138,7 +149,7 @@ export default class AxisResolution {
138
149
  };
139
150
  };
140
151
 
141
- const titles = this.members.map(computeTitle);
152
+ const titles = Array.from(this.#members).map(computeTitle);
142
153
 
143
154
  // Skip implicit secondary channel titles if the primary channel has an explicit title
144
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"}