@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaleResolution.test.d.ts","sourceRoot":"","sources":["../../../src/view/scaleResolution.test.js"],"names":[],"mappings":"sBAWa,OAAO,oBAAoB,EAAE,OAAO"}
@@ -1,645 +0,0 @@
1
- // @ts-nocheck
2
-
3
- import { describe, expect, test } from "vitest";
4
- import { createAndInitialize } from "./testUtils.js";
5
- import createDomain, { toRegularArray as r } from "../utils/domainArray.js";
6
- import LayerView from "./layerView.js";
7
- import ConcatView from "./concatView.js";
8
- import UnitView from "./unitView.js";
9
- import { primaryPositionalChannels } from "../encoder/encoder.js";
10
-
11
- /**
12
- * @typedef {import("../spec/channel.js").Channel} Channel
13
- */
14
-
15
- // NOTE: The most of these tests don't actually test scaleResolution but the resolution algorithm.
16
-
17
- describe("Scale resolution", () => {
18
- test("Channels with just values (no fields or scales) do not resolve", async () => {
19
- /** @type {import("../spec/view.js").LayerSpec} */
20
- const spec = {
21
- data: { values: [] },
22
-
23
- resolve: {
24
- scale: { x: "shared" },
25
- },
26
-
27
- layer: [
28
- {
29
- mark: "point",
30
- encoding: {
31
- color: { value: "red" },
32
- },
33
- },
34
- {
35
- mark: "point",
36
- encoding: {
37
- color: { value: "green" },
38
- },
39
- },
40
- ],
41
- };
42
- const view = await createAndInitialize(spec, LayerView);
43
- expect(view.children[0].getScaleResolution("color")).toBeUndefined();
44
- expect(view.children[1].getScaleResolution("color")).toBeUndefined();
45
- });
46
-
47
- test("Deeply shared scales are shared", async () => {
48
- /** @type {import("../spec/view.js").LayerSpec} */
49
- const spec = {
50
- data: { values: [] },
51
- encoding: {
52
- x: { field: "data", type: "quantitative" },
53
- },
54
-
55
- resolve: { scale: { x: "shared" } },
56
-
57
- layer: [
58
- {
59
- resolve: { scale: { x: "shared" } },
60
- layer: [{ mark: "point" }, { mark: "point" }],
61
- },
62
- {
63
- resolve: { scale: { x: "shared" } },
64
- layer: [{ mark: "point" }, { mark: "point" }],
65
- },
66
- ],
67
- };
68
-
69
- const view = await createAndInitialize(spec, LayerView);
70
-
71
- expect(view.children[0].children[0].getScaleResolution("x")).toBe(
72
- view.children[1].children[1].getScaleResolution("x")
73
- );
74
- });
75
-
76
- test("Shared branches under an independent branch works as expected", async () => {
77
- /** @type {import("../spec/view.js").LayerSpec} */
78
- const spec = {
79
- data: { values: [] },
80
- encoding: {
81
- x: { field: "data", type: "quantitative" },
82
- },
83
-
84
- resolve: {
85
- scale: { x: "independent" },
86
- // TODO: Axis should be set independent implicitly
87
- axis: { x: "independent" },
88
- },
89
-
90
- layer: [
91
- {
92
- resolve: { scale: { x: "shared" } },
93
- layer: [{ mark: "point" }, { mark: "point" }],
94
- },
95
- {
96
- resolve: { scale: { x: "shared" } },
97
- layer: [{ mark: "point" }, { mark: "point" }],
98
- },
99
- ],
100
- };
101
-
102
- const view = await createAndInitialize(spec, LayerView);
103
-
104
- expect(view.children[0].children[0].getScaleResolution("x")).not.toBe(
105
- view.children[1].children[1].getScaleResolution("x")
106
- );
107
- expect(view.children[0].children[0].getScaleResolution("x")).toBe(
108
- view.children[0].children[1].getScaleResolution("x")
109
- );
110
- expect(view.children[1].children[0].getScaleResolution("x")).toBe(
111
- view.children[1].children[1].getScaleResolution("x")
112
- );
113
- });
114
-
115
- test("Independent branches under a shared branch works as expected", async () => {
116
- /** @type {import("../spec/view.js").LayerSpec} */
117
- const spec = {
118
- data: { values: [] },
119
- encoding: {
120
- x: { field: "data", type: "quantitative" },
121
- },
122
-
123
- resolve: {
124
- scale: { x: "shared" },
125
- },
126
-
127
- layer: [
128
- {
129
- resolve: {
130
- scale: { x: "independent" },
131
- // TODO: Axis should be set independent implicitly
132
- axis: { x: "independent" },
133
- },
134
- layer: [{ mark: "point" }, { mark: "point" }],
135
- },
136
- {
137
- resolve: {
138
- scale: { x: "independent" },
139
- // TODO: Axis should be set independent implicitly
140
- axis: { x: "independent" },
141
- },
142
- layer: [{ mark: "point" }, { mark: "point" }],
143
- },
144
- ],
145
- };
146
-
147
- const view = await createAndInitialize(spec, LayerView);
148
-
149
- expect(view.children[0].children[0].getScaleResolution("x")).not.toBe(
150
- view.children[1].children[0].getScaleResolution("x")
151
- );
152
- expect(view.children[0].children[1].getScaleResolution("x")).not.toBe(
153
- view.children[1].children[1].getScaleResolution("x")
154
- );
155
- expect(view.children[0].children[0].getScaleResolution("x")).not.toBe(
156
- view.children[0].children[1].getScaleResolution("x")
157
- );
158
- expect(view.children[1].children[0].getScaleResolution("x")).not.toBe(
159
- view.children[1].children[1].getScaleResolution("x")
160
- );
161
- });
162
-
163
- test("Excluded resolution is not pushed towards the root but collects from children.", async () => {
164
- /** @type {import("../spec/view.js").LayerSpec} */
165
- const spec = {
166
- data: { values: [] },
167
- encoding: {
168
- x: { field: "data", type: "quantitative" },
169
- },
170
-
171
- resolve: {
172
- scale: { x: "shared" },
173
- },
174
-
175
- layer: [
176
- { mark: "point" },
177
- { mark: "point" },
178
- {
179
- resolve: {
180
- scale: { x: "excluded" },
181
- // TODO: Implicit
182
- axis: { x: "excluded" },
183
- },
184
- layer: [{ mark: "point" }, { mark: "point" }],
185
- },
186
- ],
187
- };
188
-
189
- const view = await createAndInitialize(spec, LayerView);
190
-
191
- expect(view.children[0].getScaleResolution("x")).toBe(
192
- view.children[1].getScaleResolution("x")
193
- );
194
-
195
- expect(view.children[2].children[0].getScaleResolution("x")).toBe(
196
- view.children[2].children[1].getScaleResolution("x")
197
- );
198
-
199
- expect(view.children[0].getScaleResolution("x")).not.toBe(
200
- view.children[2].children[0].getScaleResolution("x")
201
- );
202
- });
203
-
204
- // TODO: Add test for "forced" resolution
205
-
206
- test("Default resolution is configurable", async () => {
207
- /** @type {import("../spec/view.js").LayerSpec} */
208
- const spec = {
209
- data: { values: [] },
210
- encoding: {
211
- x: { field: "data", type: "quantitative" },
212
- y: { field: "data", type: "quantitative" },
213
- },
214
-
215
- resolve: {
216
- scale: {
217
- // The hard default in LayerView is "shared".
218
- default: "independent",
219
- x: "shared",
220
- },
221
- axis: {
222
- // TODO: Implicit
223
- default: "independent",
224
- },
225
- },
226
-
227
- layer: [{ mark: "point" }, { mark: "point" }],
228
- };
229
-
230
- const view = await createAndInitialize(spec, LayerView);
231
-
232
- expect(view.children[0].getScaleResolution("x")).toBe(
233
- view.children[1].getScaleResolution("x")
234
- );
235
-
236
- expect(view.children[0].getScaleResolution("y")).not.toBe(
237
- view.children[1].getScaleResolution("y")
238
- );
239
- });
240
-
241
- describe("Vertical and horizontal concatenations defaults resolutions for positional channels", async () => {
242
- const create = async (
243
- /** @type {"vconcat" | "hconcat" | "concat"} */ viewType
244
- ) => {
245
- return await createAndInitialize(
246
- {
247
- data: { values: [] },
248
- [viewType]: [
249
- {
250
- mark: "point",
251
- encoding: {
252
- x: {
253
- field: "foo",
254
- type: "quantitative",
255
- axis: null,
256
- },
257
- y: {
258
- field: "foo",
259
- type: "quantitative",
260
- axis: null,
261
- },
262
- },
263
- },
264
- ],
265
- },
266
- ConcatView
267
- );
268
- };
269
-
270
- const vconcat = await create("vconcat");
271
-
272
- test('"x" of "vconcat" defaults to "shared"', () => {
273
- expect(vconcat.getDefaultResolution("x", "scale")).toBe("shared");
274
- });
275
-
276
- test('"y" of "vconcat" defaults to "independent"', () => {
277
- expect(vconcat.getDefaultResolution("y", "scale")).toBe(
278
- "independent"
279
- );
280
- });
281
-
282
- const hconcat = await create("hconcat");
283
-
284
- test('"x" of "hconcat" defaults to "independent"', () => {
285
- expect(hconcat.getDefaultResolution("x", "scale")).toBe(
286
- "independent"
287
- );
288
- });
289
-
290
- test('"y" of "hconcat" defaults to "shared"', () => {
291
- expect(hconcat.getDefaultResolution("y", "scale")).toBe("shared");
292
- });
293
-
294
- const concat = await create("concat");
295
-
296
- test('"x" and "y" of "concat" defaults to "independent"', () => {
297
- expect(concat.getDefaultResolution("x", "scale")).toBe(
298
- "independent"
299
- );
300
- expect(concat.getDefaultResolution("y", "scale")).toBe(
301
- "independent"
302
- );
303
- });
304
- });
305
- });
306
-
307
- describe("Domain handling", () => {
308
- test("Scales are shared and explicit domains merged properly", async () => {
309
- const view = await createAndInitialize(
310
- {
311
- data: { values: [] },
312
- resolve: { scale: { default: "independent", y: "shared" } },
313
- layer: [
314
- {
315
- mark: "point",
316
- encoding: {
317
- y: {
318
- field: "a",
319
- type: "quantitative",
320
- scale: { domain: [1, 2] },
321
- },
322
- },
323
- },
324
- {
325
- mark: "point",
326
- encoding: {
327
- y: {
328
- field: "b",
329
- type: "quantitative",
330
- scale: { domain: [4, 5] },
331
- },
332
- },
333
- },
334
- ],
335
- },
336
- LayerView
337
- );
338
-
339
- /** @param {import("./view.js").default} view */
340
- const d = (view) => view.getScaleResolution("y").scale.domain();
341
-
342
- expect(r(d(view))).toEqual([1, 5]);
343
- expect(r(d(view.children[0]))).toEqual([1, 5]);
344
- expect(r(d(view.children[1]))).toEqual([1, 5]);
345
- });
346
-
347
- test("Scales are shared and extracted domains merged properly", async () => {
348
- const view = await createAndInitialize(
349
- {
350
- resolve: { scale: { default: "independent", y: "shared" } },
351
- layer: [
352
- {
353
- data: { values: [1, 2] },
354
- mark: "point",
355
- encoding: {
356
- y: {
357
- field: "data",
358
- type: "quantitative",
359
- scale: { zero: false },
360
- },
361
- },
362
- },
363
- {
364
- data: { values: [4, 5] },
365
- mark: "point",
366
- encoding: {
367
- y: { field: "data", type: "quantitative" },
368
- },
369
- },
370
- ],
371
- },
372
- LayerView
373
- );
374
-
375
- /** @param {import("./view.js").default} view */
376
- const d = (view) => view.getScaleResolution("y").scale.domain();
377
-
378
- expect(r(d(view))).toEqual([1, 5]);
379
- expect(r(d(view.children[0]))).toEqual([1, 5]);
380
- expect(r(d(view.children[1]))).toEqual([1, 5]);
381
- });
382
-
383
- test("Scales of primary and secondary channels are shared and extracted domains merged properly", async () => {
384
- const view = await createAndInitialize(
385
- {
386
- data: {
387
- values: [
388
- { a: 1, b: 4 },
389
- { a: 2, b: 5 },
390
- ],
391
- },
392
- mark: "point",
393
- encoding: {
394
- y: {
395
- field: "a",
396
- type: "quantitative",
397
- scale: { zero: false },
398
- },
399
- y2: {
400
- field: "b",
401
- },
402
- },
403
- },
404
- UnitView
405
- );
406
-
407
- /** @param {import("./view.js").default} view */
408
- const d = (view) => view.getScaleResolution("y").scale.domain();
409
-
410
- // FAILS!!!!!!! TODO: FIX!!
411
- // expect(r(d(view))).toEqual([1, 5]);
412
- });
413
-
414
- test("resolutionChannel property is respected", async () => {
415
- const view = await createAndInitialize(
416
- {
417
- data: { values: [] },
418
- resolve: { scale: { default: "independent", y: "shared" } },
419
- layer: [
420
- {
421
- mark: "point",
422
- encoding: {
423
- y: {
424
- field: "a",
425
- type: "quantitative",
426
- scale: { domain: [1, 2] },
427
- },
428
- },
429
- },
430
- {
431
- mark: "point",
432
- encoding: {
433
- x: {
434
- field: "b",
435
- type: "quantitative",
436
- scale: { domain: [4, 5] },
437
- resolutionChannel: "y",
438
- },
439
- },
440
- },
441
- ],
442
- },
443
- LayerView
444
- );
445
-
446
- /** @param {import("./view.js").default} view */
447
- const d = (view) => view.getScaleResolution("y").scale.domain();
448
-
449
- expect(r(d(view))).toEqual([1, 5]);
450
- expect(r(d(view.children[0]))).toEqual([1, 5]);
451
- expect(r(d(view.children[1]))).toEqual([1, 5]);
452
- });
453
-
454
- test("Channels with quantitative fields include zero in their scale domain by default", async () => {
455
- const view = await createAndInitialize(
456
- {
457
- data: { values: [2, 3] },
458
- mark: "point",
459
- encoding: {
460
- x: { field: "data", type: "quantitative" },
461
- y: { field: "data", type: "quantitative" },
462
- },
463
- },
464
- UnitView
465
- );
466
-
467
- for (const channel of primaryPositionalChannels) {
468
- // Extract domain from data
469
- view.getScaleResolution(channel).reconfigure();
470
- }
471
-
472
- const d = /** @param {import("../spec/channel.js").Channel} channel*/ (
473
- channel
474
- ) => view.getScaleResolution(channel).scale.domain();
475
-
476
- expect(d("x")).toEqual([0, 3]);
477
- expect(d("y")).toEqual([0, 3]);
478
- });
479
-
480
- test("Channels with quantitative fields do not include zero in their scale domain if the domain has been defined explicitly", async () => {
481
- const view = await createAndInitialize(
482
- {
483
- data: { values: [2, 3] },
484
- mark: "point",
485
- encoding: {
486
- x: {
487
- field: "data",
488
- type: "quantitative",
489
- scale: { domain: [1, 4] },
490
- },
491
- y: {
492
- field: "data",
493
- type: "quantitative",
494
- scale: { domain: [1, 4] },
495
- },
496
- },
497
- },
498
- UnitView
499
- );
500
-
501
- const d = /** @param {Channel} channel*/ (channel) =>
502
- view.getScaleResolution(channel).scale.domain();
503
-
504
- expect(d("x")).toEqual([1, 4]);
505
- expect(d("x")).toEqual([1, 4]);
506
- });
507
-
508
- test("Channels with quantitative fields do not include zero in their scale domain if zero is explicitly false", async () => {
509
- const view = await createAndInitialize(
510
- {
511
- data: { values: [2, 3] },
512
- mark: "point",
513
- encoding: {
514
- x: {
515
- field: "data",
516
- type: "quantitative",
517
- scale: { zero: false },
518
- },
519
- y: {
520
- field: "data",
521
- type: "quantitative",
522
- scale: { zero: false },
523
- },
524
- },
525
- },
526
- UnitView
527
- );
528
-
529
- for (const channel of primaryPositionalChannels) {
530
- // Extract domain from data
531
- view.getScaleResolution(channel).reconfigure();
532
- }
533
-
534
- const d = /** @param {Channel} channel*/ (channel) =>
535
- view.getScaleResolution(channel).scale.domain();
536
-
537
- expect(d("x")).toEqual([2, 3]);
538
- expect(d("y")).toEqual([2, 3]);
539
- });
540
- });
541
-
542
- describe("Named scales", () => {
543
- test("Resolution of shared scales with conflicting names fails with an exception", async () => {
544
- return expect(
545
- createAndInitialize(
546
- {
547
- data: { values: [1, 2] },
548
- layer: [
549
- {
550
- mark: "point",
551
- encoding: {
552
- x: {
553
- field: "data",
554
- type: "quantitative",
555
- scale: { name: "scale_1" },
556
- },
557
- },
558
- },
559
- {
560
- mark: "point",
561
- encoding: {
562
- x: {
563
- field: "data",
564
- type: "quantitative",
565
- scale: { name: "scale_2" },
566
- },
567
- },
568
- },
569
- ],
570
- },
571
- LayerView
572
- )
573
- ).rejects.toThrow(/conflicting/);
574
- });
575
-
576
- test("A name is properly registered to the ScaleResolution object", async () => {
577
- expect(
578
- await createAndInitialize(
579
- {
580
- data: { values: [1, 2] },
581
- layer: [
582
- {
583
- mark: "point",
584
- encoding: {
585
- x: {
586
- field: "data",
587
- type: "quantitative",
588
- scale: { name: "scale_1" },
589
- },
590
- },
591
- },
592
- {
593
- mark: "point",
594
- encoding: {
595
- x: {
596
- field: "data",
597
- type: "quantitative",
598
- scale: { name: "scale_1" },
599
- },
600
- },
601
- },
602
- ],
603
- },
604
- LayerView
605
- ).then((view) => view.getScaleResolution("x"))
606
- ).toHaveProperty("name", "scale_1");
607
- });
608
-
609
- test("The scale name must be unique among the scale resolutions", async () => {
610
- return expect(
611
- createAndInitialize(
612
- {
613
- resolve: {
614
- scale: { x: "independent" },
615
- axis: { x: "independent" },
616
- },
617
- data: { values: [1, 2] },
618
- layer: [
619
- {
620
- mark: "point",
621
- encoding: {
622
- x: {
623
- field: "data",
624
- type: "quantitative",
625
- scale: { name: "scale_1" },
626
- },
627
- },
628
- },
629
- {
630
- mark: "point",
631
- encoding: {
632
- x: {
633
- field: "data",
634
- type: "quantitative",
635
- scale: { name: "scale_1" },
636
- },
637
- },
638
- },
639
- ],
640
- },
641
- LayerView
642
- )
643
- ).rejects.toThrow(/multiple/);
644
- });
645
- });