@genome-spy/core 0.48.1 → 0.49.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 (241) hide show
  1. package/dist/bundle/index.es.js +7485 -7097
  2. package/dist/bundle/index.js +124 -111
  3. package/dist/schema.json +838 -344
  4. package/dist/src/data/collector.d.ts +10 -8
  5. package/dist/src/data/collector.d.ts.map +1 -1
  6. package/dist/src/data/collector.js +131 -33
  7. package/dist/src/data/collector.test.d.ts +2 -0
  8. package/dist/src/data/collector.test.d.ts.map +1 -0
  9. package/dist/src/data/collector.test.js +55 -1
  10. package/dist/src/data/dataFlow.test.d.ts +2 -0
  11. package/dist/src/data/dataFlow.test.d.ts.map +1 -0
  12. package/dist/src/data/flow.test.d.ts +2 -0
  13. package/dist/src/data/flow.test.d.ts.map +1 -0
  14. package/dist/src/data/flow.test.js +19 -14
  15. package/dist/src/data/flowNode.test.d.ts +2 -0
  16. package/dist/src/data/flowNode.test.d.ts.map +1 -0
  17. package/dist/src/data/flowOptimizer.test.d.ts +2 -0
  18. package/dist/src/data/flowOptimizer.test.d.ts.map +1 -0
  19. package/dist/src/data/flowOptimizer.test.js +9 -10
  20. package/dist/src/data/formats/fasta.test.d.ts +2 -0
  21. package/dist/src/data/formats/fasta.test.d.ts.map +1 -0
  22. package/dist/src/data/sources/inlineSource.test.d.ts +2 -0
  23. package/dist/src/data/sources/inlineSource.test.d.ts.map +1 -0
  24. package/dist/src/data/sources/inlineSource.test.js +23 -16
  25. package/dist/src/data/sources/sequenceSource.test.d.ts +2 -0
  26. package/dist/src/data/sources/sequenceSource.test.d.ts.map +1 -0
  27. package/dist/src/data/sources/sequenceSource.test.js +59 -42
  28. package/dist/src/data/transforms/clone.test.d.ts +2 -0
  29. package/dist/src/data/transforms/clone.test.d.ts.map +1 -0
  30. package/dist/src/data/transforms/coverage.test.d.ts +2 -0
  31. package/dist/src/data/transforms/coverage.test.d.ts.map +1 -0
  32. package/dist/src/data/transforms/coverage.test.js +1 -1
  33. package/dist/src/data/transforms/filter.d.ts +10 -0
  34. package/dist/src/data/transforms/filter.d.ts.map +1 -1
  35. package/dist/src/data/transforms/filter.js +30 -1
  36. package/dist/src/data/transforms/filter.test.d.ts +2 -0
  37. package/dist/src/data/transforms/filter.test.d.ts.map +1 -0
  38. package/dist/src/data/transforms/flatten.test.d.ts +2 -0
  39. package/dist/src/data/transforms/flatten.test.d.ts.map +1 -0
  40. package/dist/src/data/transforms/flatten.test.js +10 -7
  41. package/dist/src/data/transforms/flattenDelimited.test.d.ts +2 -0
  42. package/dist/src/data/transforms/flattenDelimited.test.d.ts.map +1 -0
  43. package/dist/src/data/transforms/flattenDelimited.test.js +16 -13
  44. package/dist/src/data/transforms/flattenSequence.test.d.ts +2 -0
  45. package/dist/src/data/transforms/flattenSequence.test.d.ts.map +1 -0
  46. package/dist/src/data/transforms/flattenSequence.test.js +1 -1
  47. package/dist/src/data/transforms/formula.test.d.ts +2 -0
  48. package/dist/src/data/transforms/formula.test.d.ts.map +1 -0
  49. package/dist/src/data/transforms/formula.test.js +1 -1
  50. package/dist/src/data/transforms/identifier.d.ts +1 -1
  51. package/dist/src/data/transforms/identifier.d.ts.map +1 -1
  52. package/dist/src/data/transforms/identifier.js +2 -2
  53. package/dist/src/data/transforms/identifier.test.d.ts +2 -0
  54. package/dist/src/data/transforms/identifier.test.d.ts.map +1 -0
  55. package/dist/src/data/transforms/identifier.test.js +23 -14
  56. package/dist/src/data/transforms/pileup.test.d.ts +2 -0
  57. package/dist/src/data/transforms/pileup.test.d.ts.map +1 -0
  58. package/dist/src/data/transforms/project.test.d.ts +2 -0
  59. package/dist/src/data/transforms/project.test.d.ts.map +1 -0
  60. package/dist/src/data/transforms/project.test.js +1 -1
  61. package/dist/src/data/transforms/regexExtract.test.d.ts +2 -0
  62. package/dist/src/data/transforms/regexExtract.test.d.ts.map +1 -0
  63. package/dist/src/data/transforms/regexExtract.test.js +6 -3
  64. package/dist/src/data/transforms/regexFold.test.d.ts +2 -0
  65. package/dist/src/data/transforms/regexFold.test.d.ts.map +1 -0
  66. package/dist/src/data/transforms/sample.test.d.ts +2 -0
  67. package/dist/src/data/transforms/sample.test.d.ts.map +1 -0
  68. package/dist/src/data/transforms/stack.test.d.ts +2 -0
  69. package/dist/src/data/transforms/stack.test.d.ts.map +1 -0
  70. package/dist/src/data/transforms/stack.test.js +8 -8
  71. package/dist/src/encoder/accessor.d.ts +17 -14
  72. package/dist/src/encoder/accessor.d.ts.map +1 -1
  73. package/dist/src/encoder/accessor.js +127 -56
  74. package/dist/src/encoder/accessor.test.d.ts +2 -0
  75. package/dist/src/encoder/accessor.test.d.ts.map +1 -0
  76. package/dist/src/encoder/accessor.test.js +145 -31
  77. package/dist/src/encoder/encoder.d.ts +26 -13
  78. package/dist/src/encoder/encoder.d.ts.map +1 -1
  79. package/dist/src/encoder/encoder.js +98 -114
  80. package/dist/src/encoder/encoder.test.d.ts +2 -0
  81. package/dist/src/encoder/encoder.test.d.ts.map +1 -0
  82. package/dist/src/encoder/encoder.test.js +85 -82
  83. package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
  84. package/dist/src/fonts/bmFontManager.js +10 -4
  85. package/dist/src/genome/genome.test.d.ts +2 -0
  86. package/dist/src/genome/genome.test.d.ts.map +1 -0
  87. package/dist/src/genome/scaleIndex.test.d.ts +2 -0
  88. package/dist/src/genome/scaleIndex.test.d.ts.map +1 -0
  89. package/dist/src/genome/scaleLocus.test.d.ts +2 -0
  90. package/dist/src/genome/scaleLocus.test.d.ts.map +1 -0
  91. package/dist/src/genomeSpy.d.ts +3 -2
  92. package/dist/src/genomeSpy.d.ts.map +1 -1
  93. package/dist/src/genomeSpy.js +29 -21
  94. package/dist/src/gl/dataToVertices.d.ts +5 -7
  95. package/dist/src/gl/dataToVertices.d.ts.map +1 -1
  96. package/dist/src/gl/dataToVertices.js +42 -30
  97. package/dist/src/gl/glslScaleGenerator.d.ts +84 -15
  98. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  99. package/dist/src/gl/glslScaleGenerator.js +260 -73
  100. package/dist/src/gl/includes/picking.vertex.glsl.js +1 -1
  101. package/dist/src/marks/link.common.glsl.js +1 -1
  102. package/dist/src/marks/link.d.ts.map +1 -1
  103. package/dist/src/marks/link.js +10 -0
  104. package/dist/src/marks/link.vertex.glsl.js +1 -1
  105. package/dist/src/marks/mark.d.ts +6 -9
  106. package/dist/src/marks/mark.d.ts.map +1 -1
  107. package/dist/src/marks/mark.js +212 -95
  108. package/dist/src/marks/point.d.ts.map +1 -1
  109. package/dist/src/marks/point.js +5 -1
  110. package/dist/src/marks/rect.d.ts.map +1 -1
  111. package/dist/src/marks/rect.js +9 -4
  112. package/dist/src/marks/rule.d.ts.map +1 -1
  113. package/dist/src/marks/rule.js +4 -0
  114. package/dist/src/marks/text.d.ts.map +1 -1
  115. package/dist/src/marks/text.js +5 -1
  116. package/dist/src/scale/scale.test.d.ts +2 -0
  117. package/dist/src/scale/scale.test.d.ts.map +1 -0
  118. package/dist/src/scale/scale.test.js +2 -0
  119. package/dist/src/scale/ticks.test.d.ts +2 -0
  120. package/dist/src/scale/ticks.test.d.ts.map +1 -0
  121. package/dist/src/scale/ticks.test.js +6 -0
  122. package/dist/src/selection/selection.d.ts +39 -0
  123. package/dist/src/selection/selection.d.ts.map +1 -0
  124. package/dist/src/selection/selection.js +78 -0
  125. package/dist/src/spec/channel.d.ts +137 -83
  126. package/dist/src/spec/mark.d.ts +9 -0
  127. package/dist/src/spec/parameter.d.ts +112 -3
  128. package/dist/src/spec/root.d.ts +0 -1
  129. package/dist/src/spec/transform.d.ts +19 -1
  130. package/dist/src/spec/view.d.ts +3 -3
  131. package/dist/src/tooltip/dataTooltipHandler.js +1 -1
  132. package/dist/src/types/encoder.d.ts +80 -26
  133. package/dist/src/types/rendering.d.ts +1 -0
  134. package/dist/src/types/selectionTypes.d.ts +44 -0
  135. package/dist/src/types/viewContext.d.ts +1 -4
  136. package/dist/src/utils/addBaseUrl.test.d.ts +2 -0
  137. package/dist/src/utils/addBaseUrl.test.d.ts.map +1 -0
  138. package/dist/src/utils/animator.d.ts.map +1 -1
  139. package/dist/src/utils/animator.js +3 -1
  140. package/dist/src/utils/binnedIndex.test.d.ts +2 -0
  141. package/dist/src/utils/binnedIndex.test.d.ts.map +1 -0
  142. package/dist/src/utils/cloner.test.d.ts +2 -0
  143. package/dist/src/utils/cloner.test.d.ts.map +1 -0
  144. package/dist/src/utils/coalesce.test.d.ts +2 -0
  145. package/dist/src/utils/coalesce.test.d.ts.map +1 -0
  146. package/dist/src/utils/concatIterables.test.d.ts +2 -0
  147. package/dist/src/utils/concatIterables.test.d.ts.map +1 -0
  148. package/dist/src/utils/domainArray.test.d.ts +2 -0
  149. package/dist/src/utils/domainArray.test.d.ts.map +1 -0
  150. package/dist/src/utils/expression.d.ts +2 -2
  151. package/dist/src/utils/expression.d.ts.map +1 -1
  152. package/dist/src/utils/expression.js +11 -2
  153. package/dist/src/utils/indexer.test.d.ts +2 -0
  154. package/dist/src/utils/indexer.test.d.ts.map +1 -0
  155. package/dist/src/utils/inertia.d.ts.map +1 -1
  156. package/dist/src/utils/inertia.js +4 -0
  157. package/dist/src/utils/inputBinding.d.ts.map +1 -1
  158. package/dist/src/utils/inputBinding.js +4 -0
  159. package/dist/src/utils/iterateNestedMaps.d.ts +4 -3
  160. package/dist/src/utils/iterateNestedMaps.d.ts.map +1 -1
  161. package/dist/src/utils/iterateNestedMaps.js +3 -2
  162. package/dist/src/utils/iterateNestedMaps.test.d.ts +2 -0
  163. package/dist/src/utils/iterateNestedMaps.test.d.ts.map +1 -0
  164. package/dist/src/utils/kWayMerge.test.d.ts +2 -0
  165. package/dist/src/utils/kWayMerge.test.d.ts.map +1 -0
  166. package/dist/src/utils/mergeObjects.test.d.ts +2 -0
  167. package/dist/src/utils/mergeObjects.test.d.ts.map +1 -0
  168. package/dist/src/utils/numberExtractor.test.d.ts +2 -0
  169. package/dist/src/utils/numberExtractor.test.d.ts.map +1 -0
  170. package/dist/src/utils/propertyCacher.test.d.ts +2 -0
  171. package/dist/src/utils/propertyCacher.test.d.ts.map +1 -0
  172. package/dist/src/utils/propertyCoalescer.test.d.ts +2 -0
  173. package/dist/src/utils/propertyCoalescer.test.d.ts.map +1 -0
  174. package/dist/src/utils/propertyCoalescer.test.js +3 -0
  175. package/dist/src/utils/radixSort.d.ts +9 -0
  176. package/dist/src/utils/radixSort.d.ts.map +1 -0
  177. package/dist/src/utils/radixSort.js +130 -0
  178. package/dist/src/utils/radixSort.test.d.ts +2 -0
  179. package/dist/src/utils/radixSort.test.d.ts.map +1 -0
  180. package/dist/src/utils/radixSort.test.js +51 -0
  181. package/dist/src/utils/reservationMap.test.d.ts +2 -0
  182. package/dist/src/utils/reservationMap.test.d.ts.map +1 -0
  183. package/dist/src/utils/ringBuffer.test.d.ts +2 -0
  184. package/dist/src/utils/ringBuffer.test.d.ts.map +1 -0
  185. package/dist/src/utils/topK.test.d.ts +2 -0
  186. package/dist/src/utils/topK.test.d.ts.map +1 -0
  187. package/dist/src/utils/trees.test.d.ts +2 -0
  188. package/dist/src/utils/trees.test.d.ts.map +1 -0
  189. package/dist/src/utils/trees.test.js +8 -3
  190. package/dist/src/utils/variableTools.test.d.ts +2 -0
  191. package/dist/src/utils/variableTools.test.d.ts.map +1 -0
  192. package/dist/src/view/axisResolution.d.ts +19 -6
  193. package/dist/src/view/axisResolution.d.ts.map +1 -1
  194. package/dist/src/view/axisResolution.js +16 -7
  195. package/dist/src/view/axisResolution.test.d.ts +2 -0
  196. package/dist/src/view/axisResolution.test.d.ts.map +1 -0
  197. package/dist/src/view/axisResolution.test.js +16 -11
  198. package/dist/src/view/facetView.d.ts +1 -1
  199. package/dist/src/view/facetView.d.ts.map +1 -1
  200. package/dist/src/view/flowBuilder.d.ts +1 -1
  201. package/dist/src/view/flowBuilder.d.ts.map +1 -1
  202. package/dist/src/view/flowBuilder.js +34 -5
  203. package/dist/src/view/flowBuilder.test.d.ts +2 -0
  204. package/dist/src/view/flowBuilder.test.d.ts.map +1 -0
  205. package/dist/src/view/gridView.d.ts +0 -6
  206. package/dist/src/view/gridView.d.ts.map +1 -1
  207. package/dist/src/view/layerView.d.ts +0 -6
  208. package/dist/src/view/layerView.d.ts.map +1 -1
  209. package/dist/src/view/layout/flexLayout.test.d.ts +2 -0
  210. package/dist/src/view/layout/flexLayout.test.d.ts.map +1 -0
  211. package/dist/src/view/layout/grid.test.d.ts +2 -0
  212. package/dist/src/view/layout/grid.test.d.ts.map +1 -0
  213. package/dist/src/view/layout/rectangle.test.d.ts +2 -0
  214. package/dist/src/view/layout/rectangle.test.d.ts.map +1 -0
  215. package/dist/src/view/paramMediator.d.ts +32 -5
  216. package/dist/src/view/paramMediator.d.ts.map +1 -1
  217. package/dist/src/view/paramMediator.js +97 -9
  218. package/dist/src/view/paramMediator.test.d.ts +2 -0
  219. package/dist/src/view/paramMediator.test.d.ts.map +1 -0
  220. package/dist/src/view/paramMediator.test.js +17 -1
  221. package/dist/src/view/scaleResolution.d.ts +17 -9
  222. package/dist/src/view/scaleResolution.d.ts.map +1 -1
  223. package/dist/src/view/scaleResolution.js +51 -34
  224. package/dist/src/view/scaleResolution.test.d.ts +2 -0
  225. package/dist/src/view/scaleResolution.test.d.ts.map +1 -0
  226. package/dist/src/view/scaleResolution.test.js +2 -0
  227. package/dist/src/view/testUtils.d.ts.map +1 -1
  228. package/dist/src/view/testUtils.js +15 -3
  229. package/dist/src/view/unitView.d.ts +5 -15
  230. package/dist/src/view/unitView.d.ts.map +1 -1
  231. package/dist/src/view/unitView.js +81 -101
  232. package/dist/src/view/view.d.ts +1 -1
  233. package/dist/src/view/view.d.ts.map +1 -1
  234. package/dist/src/view/view.test.d.ts +2 -0
  235. package/dist/src/view/view.test.d.ts.map +1 -0
  236. package/dist/src/view/view.test.js +73 -55
  237. package/dist/src/view/viewFactory.test.d.ts +2 -0
  238. package/dist/src/view/viewFactory.test.d.ts.map +1 -0
  239. package/dist/src/view/viewFactory.test.js +2 -2
  240. package/dist/src/view/zoom.js +2 -2
  241. package/package.json +5 -2
@@ -20,12 +20,6 @@ export default class UnitView extends View {
20
20
  spec: import("../spec/view.js").UnitSpec;
21
21
  /** @type {import("../marks/mark.js").default} */
22
22
  mark: import("../marks/mark.js").default;
23
- /**
24
- * @param {import("./renderingContext/viewRenderingContext.js").default} context
25
- * @param {import("./layout/rectangle.js").default} coords
26
- * @param {import("../types/rendering.js").RenderingOptions} [options]
27
- */
28
- render(context: import("./renderingContext/viewRenderingContext.js").default, coords: import("./layout/rectangle.js").default, options?: import("../types/rendering.js").RenderingOptions): void;
29
23
  getMarkType(): import("../spec/mark.js").MarkType;
30
24
  /**
31
25
  * Pulls scales and axes up in the view hierarcy according to the resolution rules, using dataParents.
@@ -35,21 +29,16 @@ export default class UnitView extends View {
35
29
  */
36
30
  resolve(type?: import("../spec/view.js").ResolutionTarget): void;
37
31
  /**
32
+ * Returns an accessor that accesses a field or an evaluated expression,
33
+ * if there is one.
38
34
  *
39
35
  * @param {Channel} channel
40
36
  */
41
- getAccessor(channel: import("../spec/channel.js").Channel): import("../types/encoder.js").Accessor;
37
+ getDataAccessor(channel: import("../spec/channel.js").Channel): import("../types/encoder.js").Accessor<import("../spec/channel.js").Scalar>;
42
38
  /**
43
39
  * Returns a collector that is associated with this view.
44
40
  */
45
41
  getCollector(): import("../data/collector.js").default;
46
- /**
47
- * Returns the domain of the specified channel of this domain/mark.
48
- *
49
- * @param {import("../spec/channel.js").ChannelWithScale} channel A primary channel
50
- * @returns {DomainArray}
51
- */
52
- getConfiguredDomain(channel: import("../spec/channel.js").ChannelWithScale): import("../utils/domainArray.js").DomainArray;
53
42
  /**
54
43
  * Extracts the domain from the data.
55
44
  *
@@ -61,9 +50,10 @@ export default class UnitView extends View {
61
50
  * (with aggregate and extent).
62
51
  *
63
52
  * @param {Channel} channel
53
+ * @param {import("../spec/channel.js").Type} type
64
54
  * @returns {DomainArray}
65
55
  */
66
- extractDataDomain(channel: import("../spec/channel.js").Channel): import("../utils/domainArray.js").DomainArray;
56
+ extractDataDomain(channel: import("../spec/channel.js").Channel, type: import("../spec/channel.js").Type): import("../utils/domainArray.js").DomainArray;
67
57
  getZoomLevel(): number;
68
58
  /**
69
59
  * @param {string} channel
@@ -1 +1 @@
1
- {"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IAcI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EA+BzC;IA1BG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAuBlC;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAY1D;IAED,kDAIC;IAED;;;;;OAKG;IACH,iEAgFC;IAED;;;OAGG;IACH,mGASC;IAkBD;;OAEG;IACH,uDAEC;IAqBD;;;;;OAKG;IACH,6BAHW,OAAO,oBAAoB,EAAE,gBAAgB,iDAkBvD;IAED;;;;;;;;;;;;OAYG;IACH,gHA2CC;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;;CACJ;iBA/VgB,WAAW"}
1
+ {"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IAeI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAiCzC;IA5BG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAsFlC,kDAIC;IAED;;;;;OAKG;IACH,iEAmFC;IAED;;;;;OAKG;IACH,4IAEC;IAkBD;;OAEG;IACH,uDAEC;IAED;;;;;;;;;;;;;OAaG;IACH,uEAHW,OAAO,oBAAoB,EAAE,IAAI,iDAqB3C;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;;CACJ;iBA7UgB,WAAW"}
@@ -6,8 +6,6 @@ import TextMark from "../marks/text.js";
6
6
 
7
7
  import ScaleResolution from "./scaleResolution.js";
8
8
  import {
9
- isSecondaryChannel,
10
- secondaryChannels,
11
9
  isPositionalChannel,
12
10
  isChannelDefWithScale,
13
11
  primaryPositionalChannels,
@@ -18,6 +16,9 @@ import {
18
16
  import createDomain from "../utils/domainArray.js";
19
17
  import AxisResolution from "./axisResolution.js";
20
18
  import View from "./view.js";
19
+ import { createSinglePointSelection } from "../selection/selection.js";
20
+ import { isString } from "vega-util";
21
+ import { UNIQUE_ID_KEY } from "../data/transforms/identifier.js";
21
22
 
22
23
  /**
23
24
  *
@@ -37,6 +38,7 @@ export default class UnitView extends View {
37
38
  * @typedef {import("../spec/channel.js").Channel} Channel
38
39
  * @typedef {import("../utils/domainArray.js").DomainArray} DomainArray
39
40
  * @typedef {import("../spec/view.js").ResolutionTarget} ResolutionTarget
41
+ * @typedef {((datum: import("../data/flowNode.js").Datum) => import("../spec/channel.js").Scalar) & { fieldDef: import("../spec/channel.js").FieldDef}} FieldAccessor
40
42
  *
41
43
  */
42
44
 
@@ -84,6 +86,52 @@ export default class UnitView extends View {
84
86
  );
85
87
 
86
88
  this.needsAxes = { x: true, y: true };
89
+
90
+ this.#setupPointSelection();
91
+ }
92
+
93
+ #setupPointSelection() {
94
+ for (const [name, param] of this.paramMediator.paramConfigs) {
95
+ if (!("select" in param)) {
96
+ continue;
97
+ }
98
+
99
+ const select = param.select;
100
+ const type = isString(select) ? select : select.type;
101
+ if (type === "point") {
102
+ // Handle projection-free point selections
103
+
104
+ const none = -1;
105
+ let lastId = none;
106
+
107
+ const setter = this.paramMediator.getSetter(name);
108
+
109
+ const getHoveredDatum = () => {
110
+ const h = this.context.getCurrentHover();
111
+ return h?.mark?.unitView === this ? h.datum : null;
112
+ };
113
+
114
+ const on =
115
+ !isString(select) && "on" in select ? select.on : "click";
116
+
117
+ this.addInteractionEventListener(
118
+ ["mouseover", "pointerover"].includes(on)
119
+ ? "mousemove"
120
+ : "click",
121
+ (rect, event) => {
122
+ const datum = getHoveredDatum();
123
+ const id = datum ? datum[UNIQUE_ID_KEY] : none;
124
+ if (id != lastId) {
125
+ lastId = id;
126
+ const selection = createSinglePointSelection(
127
+ getHoveredDatum()
128
+ );
129
+ setter(selection);
130
+ }
131
+ }
132
+ );
133
+ }
134
+ }
87
135
  }
88
136
 
89
137
  /**
@@ -172,10 +220,11 @@ export default class UnitView extends View {
172
220
  targetChannel
173
221
  );
174
222
  }
175
- view.resolutions[type][targetChannel].pushUnitView(
176
- this,
177
- channel
178
- );
223
+ view.resolutions[type][targetChannel].pushUnitView({
224
+ view: this,
225
+ channel,
226
+ channelDef,
227
+ });
179
228
  } else if (type == "scale" && isChannelWithScale(channel)) {
180
229
  if (!view.resolutions[type][targetChannel]) {
181
230
  const resolution = new ScaleResolution(targetChannel);
@@ -189,27 +238,24 @@ export default class UnitView extends View {
189
238
  );
190
239
  });
191
240
  }
192
- view.resolutions[type][targetChannel].pushUnitView(
193
- this,
194
- channel
195
- );
241
+ view.resolutions[type][targetChannel].pushUnitView({
242
+ view: this,
243
+ channel,
244
+ channelDef,
245
+ dataDomainSource: this.extractDataDomain.bind(this),
246
+ });
196
247
  }
197
248
  }
198
249
  }
199
250
 
200
251
  /**
252
+ * Returns an accessor that accesses a field or an evaluated expression,
253
+ * if there is one.
201
254
  *
202
255
  * @param {Channel} channel
203
256
  */
204
- getAccessor(channel) {
205
- return this._cache("accessor/" + channel, () => {
206
- const encoding = this.mark.encoding; // Mark provides encodings with defaults and possible modifications
207
- if (encoding && encoding[channel]) {
208
- return this.context.accessorFactory.createAccessor(
209
- encoding[channel]
210
- );
211
- }
212
- });
257
+ getDataAccessor(channel) {
258
+ return this.mark.encoders[channel]?.dataAccessor;
213
259
  }
214
260
 
215
261
  /**
@@ -220,7 +266,7 @@ export default class UnitView extends View {
220
266
  */
221
267
  getFacetAccessor(whoIsAsking) {
222
268
  // TODO: Rewrite, call getFacetFields
223
- const sampleAccessor = this.getAccessor("sample");
269
+ const sampleAccessor = this.getDataAccessor("sample");
224
270
  if (sampleAccessor) {
225
271
  return sampleAccessor;
226
272
  }
@@ -235,48 +281,6 @@ export default class UnitView extends View {
235
281
  return this.context.dataFlow.findCollectorByKey(this);
236
282
  }
237
283
 
238
- /**
239
- * @param {Channel} channel A primary channel
240
- */
241
- #validateDomainQuery(channel) {
242
- if (isSecondaryChannel(channel)) {
243
- throw new Error(
244
- `getDomain(${channel}), must only be called for primary channels!`
245
- );
246
- }
247
-
248
- const channelDef = this.mark.encoding[channel];
249
- // TODO: Broken. Fix.
250
- if (!isChannelDefWithScale(channelDef)) {
251
- throw new Error("The channel has no scale, cannot get domain!");
252
- }
253
-
254
- return channelDef;
255
- }
256
-
257
- /**
258
- * Returns the domain of the specified channel of this domain/mark.
259
- *
260
- * @param {import("../spec/channel.js").ChannelWithScale} channel A primary channel
261
- * @returns {DomainArray}
262
- */
263
- getConfiguredDomain(channel) {
264
- const channelDef = this.#validateDomainQuery(channel);
265
-
266
- const specDomain =
267
- channelDef && channelDef.scale && channelDef.scale.domain;
268
- if (specDomain) {
269
- const scaleResolution = this.getScaleResolution(
270
- channelDef.resolutionChannel ?? channel
271
- );
272
- return createDomain(
273
- channelDef.type ?? "nominal",
274
- // Chrom/pos must be linearized first
275
- scaleResolution.fromComplexInterval(specDomain)
276
- );
277
- }
278
- }
279
-
280
284
  /**
281
285
  * Extracts the domain from the data.
282
286
  *
@@ -288,49 +292,25 @@ export default class UnitView extends View {
288
292
  * (with aggregate and extent).
289
293
  *
290
294
  * @param {Channel} channel
295
+ * @param {import("../spec/channel.js").Type} type
291
296
  * @returns {DomainArray}
292
297
  */
293
- extractDataDomain(channel) {
294
- const channelDef = this.#validateDomainQuery(channel);
295
- const type = channelDef.type ?? "nominal"; // TODO: Should check that this is a channel without scale
296
-
297
- /** @param {Channel} channel */
298
- const extract = (channel) => {
299
- /** @type {DomainArray} */
300
- let domain;
301
-
302
- const encodingSpec = this.mark.encoding[channel];
303
-
304
- if (encodingSpec) {
305
- const accessor =
306
- this.context.accessorFactory.createAccessor(encodingSpec);
307
- if (accessor) {
308
- domain = createDomain(type);
309
-
310
- if (accessor.constant) {
311
- domain.extend(accessor({}));
312
- } else {
313
- const collector = this.getCollector();
314
- if (collector?.completed) {
315
- collector.visitData((d) =>
316
- domain.extend(accessor(d))
317
- );
318
- }
298
+ extractDataDomain(channel, type) {
299
+ /** @type {DomainArray} */
300
+ let domain = createDomain(type);
301
+
302
+ (this.mark.encoders[channel]?.accessors ?? [])
303
+ .filter((a) => a.scaleChannel)
304
+ .forEach((accessor) => {
305
+ if (accessor.constant) {
306
+ domain.extend(accessor({}));
307
+ } else {
308
+ const collector = this.getCollector();
309
+ if (collector?.completed) {
310
+ collector.visitData((d) => domain.extend(accessor(d)));
319
311
  }
320
312
  }
321
- }
322
- return domain;
323
- };
324
-
325
- let domain = extract(channel);
326
-
327
- const secondaryChannel = secondaryChannels[channel];
328
- if (secondaryChannel) {
329
- const secondaryDomain = extract(secondaryChannel);
330
- if (secondaryDomain) {
331
- domain.extendAll(secondaryDomain);
332
- }
333
- }
313
+ });
334
314
 
335
315
  return domain;
336
316
  }
@@ -205,7 +205,7 @@ export default class View {
205
205
  * pass. The order is depth first, pre order.
206
206
  */
207
207
  onBeforeRender(): void;
208
- render(context: ViewRenderingContext, coords: import("./layout/rectangle.js").default, options?: import("../types/rendering.js").RenderingOptions): void;
208
+ render(context: import("./renderingContext/viewRenderingContext.js").default, coords: import("./layout/rectangle.js").default, options?: import("../types/rendering.js").RenderingOptions): void;
209
209
  /**
210
210
  * Returns the encodings specified in this view combined with the inherited
211
211
  * encodings. However, this does not contain any defaults or inferred/adjusted/fixed
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=view.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.test.d.ts","sourceRoot":"","sources":["../../../src/view/view.test.js"],"names":[],"mappings":""}
@@ -10,6 +10,7 @@ import LayerView from "./layerView.js";
10
10
 
11
11
  describe("Trivial creations and initializations", () => {
12
12
  test("Fails on empty spec", async () => {
13
+ // @ts-expect-error
13
14
  expect(create({}, View)).rejects.toThrow();
14
15
  });
15
16
 
@@ -23,7 +24,7 @@ describe("Trivial creations and initializations", () => {
23
24
  test("Parses a more comples spec", async () => {
24
25
  const view = await create(
25
26
  {
26
- concat: [
27
+ hconcat: [
27
28
  {
28
29
  layer: [{ mark: "point" }, { mark: "rect" }],
29
30
  },
@@ -35,26 +36,28 @@ describe("Trivial creations and initializations", () => {
35
36
 
36
37
  expect(view).toBeInstanceOf(ConcatView);
37
38
  expect(view.children[0]).toBeInstanceOf(LayerView);
39
+ // @ts-ignore
38
40
  expect(view.children[0].children[0]).toBeInstanceOf(UnitView);
41
+ // @ts-ignore
39
42
  expect(view.children[0].children[0].mark).toBeInstanceOf(PointMark);
40
43
  expect(view.children[1]).toBeInstanceOf(UnitView);
41
44
  expect(view.children[2]).toBeUndefined();
42
45
  });
43
46
 
44
- test("Parses and initializes a trivial spec", async () => {
45
- const spec = {
46
- data: { values: [1] },
47
- mark: "point",
48
- encoding: {
49
- x: { field: "data", type: "quantitative" },
50
- y: { field: "data", type: "quantitative" },
51
- },
52
- };
53
-
54
- expect(createAndInitialize(spec, View)).resolves.toBeInstanceOf(
55
- UnitView
56
- );
57
- });
47
+ test("Parses and initializes a trivial spec", () =>
48
+ expect(
49
+ createAndInitialize(
50
+ {
51
+ data: { values: [1] },
52
+ mark: "point",
53
+ encoding: {
54
+ x: { field: "data", type: "quantitative" },
55
+ y: { field: "data", type: "quantitative" },
56
+ },
57
+ },
58
+ View
59
+ )
60
+ ).resolves.toBeInstanceOf(UnitView));
58
61
  });
59
62
 
60
63
  describe("Test domain handling", () => {
@@ -66,6 +69,7 @@ describe("Test domain handling", () => {
66
69
  ],
67
70
  };
68
71
 
72
+ /** -- This should be moved to ScaleResolution's test
69
73
  test("Uses domain from the scale properties", () => {
70
74
  const spec = {
71
75
  data: dataSpec,
@@ -84,52 +88,65 @@ describe("Test domain handling", () => {
84
88
  expect(r(view.getConfiguredDomain("y"))).toEqual([0, 1000])
85
89
  );
86
90
  });
91
+ */
87
92
 
88
- test("Includes a constant in the data domain", () => {
89
- const spec = {
90
- data: dataSpec,
91
- mark: "point",
92
- encoding: {
93
- x: { datum: 123, type: "quantitative" },
94
- y: { field: "a", type: "quantitative" },
93
+ test("Includes a constant in the data domain", () =>
94
+ createAndInitialize(
95
+ {
96
+ data: dataSpec,
97
+ mark: "point",
98
+ encoding: {
99
+ x: { datum: 123, type: "quantitative" },
100
+ y: { field: "a", type: "quantitative" },
101
+ },
95
102
  },
96
- };
97
-
98
- return createAndInitialize(spec, UnitView).then((view) =>
99
- expect(r(view.extractDataDomain("x"))).toEqual([123, 123])
100
- );
101
- });
103
+ UnitView
104
+ ).then((view) =>
105
+ expect(r(view.extractDataDomain("x", "quantitative"))).toEqual([
106
+ 123, 123,
107
+ ])
108
+ ));
102
109
 
103
- test("Extracts domain from the data", () => {
104
- const spec = {
105
- data: dataSpec,
106
- mark: "point",
107
- encoding: {
108
- x: { field: "a", type: "quantitative" },
109
- y: { field: "a", type: "quantitative" },
110
+ test("Extracts domain from the data", () =>
111
+ createAndInitialize(
112
+ {
113
+ data: dataSpec,
114
+ mark: "point",
115
+ encoding: {
116
+ x: { field: "a", type: "quantitative" },
117
+ y: { field: "a", type: "quantitative" },
118
+ },
110
119
  },
111
- };
112
-
113
- return createAndInitialize(spec, UnitView).then((view) =>
114
- expect(r(view.extractDataDomain("y"))).toEqual([1, 3])
115
- );
116
- });
120
+ UnitView
121
+ ).then((view) =>
122
+ expect(r(view.extractDataDomain("y", "quantitative"))).toEqual([
123
+ 1, 3,
124
+ ])
125
+ ));
117
126
 
118
- test("Extracts domain from the data when a secondary channel is being used", () => {
119
- const spec = {
120
- data: dataSpec,
121
- mark: "rect",
122
- encoding: {
123
- x: { field: "a", type: "quantitative" },
124
- y: { field: "a", type: "quantitative" },
125
- y2: { field: "b", type: "quantitative" },
127
+ test("Extracts domain from conditional encoding", () =>
128
+ createAndInitialize(
129
+ {
130
+ params: [{ name: "p" }],
131
+ data: dataSpec,
132
+ mark: "point",
133
+ encoding: {
134
+ size: {
135
+ field: "a",
136
+ type: "quantitative",
137
+ condition: {
138
+ param: "p",
139
+ datum: 123,
140
+ },
141
+ },
142
+ },
126
143
  },
127
- };
128
-
129
- return createAndInitialize(spec, UnitView).then((view) =>
130
- expect(r(view.extractDataDomain("y"))).toEqual([1, 5])
131
- );
132
- });
144
+ UnitView
145
+ ).then((view) =>
146
+ expect(r(view.extractDataDomain("size", "quantitative"))).toEqual([
147
+ 1, 123,
148
+ ])
149
+ ));
133
150
  });
134
151
 
135
152
  describe("Utility methods", () => {
@@ -207,6 +224,7 @@ describe("Utility methods", () => {
207
224
  },
208
225
  LayerView
209
226
  ).then((view) =>
227
+ // @ts-ignore
210
228
  expect(view.children[0].children[0].getBaseUrl()).toEqual(
211
229
  "https://site.com/blaa"
212
230
  )
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=viewFactory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewFactory.test.d.ts","sourceRoot":"","sources":["../../../src/view/viewFactory.test.js"],"names":[],"mappings":""}
@@ -11,7 +11,7 @@ test("isViewSpec", () => {
11
11
  expect(factory.isViewSpec({ layer: [] })).toBeTruthy();
12
12
  expect(factory.isViewSpec({ hconcat: [] })).toBeTruthy();
13
13
  expect(factory.isViewSpec({ vconcat: [] })).toBeTruthy();
14
- expect(factory.isViewSpec({ concat: [] })).toBeTruthy();
14
+ expect(factory.isViewSpec({ concat: [], columns: 1 })).toBeTruthy();
15
15
 
16
16
  expect(() => factory.isViewSpec({ mark: "rect", layer: [] })).toThrow();
17
17
  });
@@ -20,6 +20,6 @@ test("Throws if importing is not allowed", () => {
20
20
  const factory = new ViewFactory({ allowImport: false });
21
21
 
22
22
  expect(() =>
23
- factory.createOrImportView({ import: { url: "" } })
23
+ factory.createOrImportView({ import: { url: "" } }, undefined)
24
24
  ).rejects.toThrow();
25
25
  });
@@ -71,10 +71,10 @@ export function interactionToZoom(event, coords, handleZoom, hover, animator) {
71
71
 
72
72
  if (hover) {
73
73
  const e = hover.mark.encoders;
74
- if (e.x && !e.x2 && !e.x.constantValue) {
74
+ if (e.x && !e.x2 && !e.x.constant) {
75
75
  x = +e.x(hover.datum) * coords.width + coords.x;
76
76
  }
77
- if (e.y && !e.y2 && !e.y.constantValue) {
77
+ if (e.y && !e.y2 && !e.y.constant) {
78
78
  y = (1 - +e.y(hover.datum)) * coords.height + coords.y;
79
79
  }
80
80
  }
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "contributors": [],
9
9
  "license": "MIT",
10
- "version": "0.48.1",
10
+ "version": "0.49.0",
11
11
  "jsdelivr": "dist/bundle/index.js",
12
12
  "unpkg": "dist/bundle/index.js",
13
13
  "browser": "dist/bundle/index.js",
@@ -64,5 +64,8 @@
64
64
  "vega-scale": "^7.3.1",
65
65
  "vega-util": "^1.17.2"
66
66
  },
67
- "gitHead": "f2e023ce43cf18091cb81140f5be1f59887271df"
67
+ "devDependencies": {
68
+ "@types/long": "^4.0.1"
69
+ },
70
+ "gitHead": "33055fe37370459fb09d37cea3cf456b52a9893b"
68
71
  }