@genome-spy/core 0.29.0 → 0.30.2

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 (234) hide show
  1. package/dist/index.es.js +16373 -0
  2. package/dist/index.js +43 -43
  3. package/package.json +10 -7
  4. package/src/data/collector.js +0 -183
  5. package/src/data/collector.test.js +0 -84
  6. package/src/data/dataFlow.js +0 -148
  7. package/src/data/dataFlow.test.js +0 -5
  8. package/src/data/facetNode.js +0 -17
  9. package/src/data/flow.test.js +0 -72
  10. package/src/data/flowBatch.d.ts +0 -40
  11. package/src/data/flowNode.js +0 -283
  12. package/src/data/flowNode.test.js +0 -50
  13. package/src/data/flowOptimizer.js +0 -123
  14. package/src/data/flowOptimizer.test.js +0 -193
  15. package/src/data/flowTestUtils.js +0 -63
  16. package/src/data/formats/fasta.js +0 -32
  17. package/src/data/formats/fasta.test.js +0 -27
  18. package/src/data/sources/dataSource.js +0 -22
  19. package/src/data/sources/dataSourceFactory.js +0 -24
  20. package/src/data/sources/dataUtils.js +0 -78
  21. package/src/data/sources/dynamicCallbackSource.js +0 -57
  22. package/src/data/sources/dynamicSource.js +0 -37
  23. package/src/data/sources/inlineSource.js +0 -67
  24. package/src/data/sources/inlineSource.test.js +0 -56
  25. package/src/data/sources/namedSource.js +0 -79
  26. package/src/data/sources/sequenceSource.js +0 -46
  27. package/src/data/sources/sequenceSource.test.js +0 -46
  28. package/src/data/sources/urlSource.js +0 -74
  29. package/src/data/transforms/aggregate.js +0 -70
  30. package/src/data/transforms/clone.js +0 -40
  31. package/src/data/transforms/clone.test.js +0 -11
  32. package/src/data/transforms/coverage.js +0 -187
  33. package/src/data/transforms/coverage.test.js +0 -123
  34. package/src/data/transforms/filter.js +0 -37
  35. package/src/data/transforms/filter.test.js +0 -18
  36. package/src/data/transforms/filterScoredLabels.js +0 -134
  37. package/src/data/transforms/flattenCompressedExons.js +0 -57
  38. package/src/data/transforms/flattenDelimited.js +0 -74
  39. package/src/data/transforms/flattenDelimited.test.js +0 -87
  40. package/src/data/transforms/flattenSequence.js +0 -39
  41. package/src/data/transforms/flattenSequence.test.js +0 -34
  42. package/src/data/transforms/formula.js +0 -39
  43. package/src/data/transforms/formula.test.js +0 -19
  44. package/src/data/transforms/identifier.js +0 -108
  45. package/src/data/transforms/identifier.test.js +0 -83
  46. package/src/data/transforms/linearizeGenomicCoordinate.js +0 -101
  47. package/src/data/transforms/measureText.js +0 -44
  48. package/src/data/transforms/pileup.js +0 -128
  49. package/src/data/transforms/pileup.test.js +0 -70
  50. package/src/data/transforms/project.js +0 -41
  51. package/src/data/transforms/project.test.js +0 -32
  52. package/src/data/transforms/regexExtract.js +0 -61
  53. package/src/data/transforms/regexExtract.test.js +0 -67
  54. package/src/data/transforms/regexFold.js +0 -141
  55. package/src/data/transforms/regexFold.test.js +0 -160
  56. package/src/data/transforms/sample.js +0 -101
  57. package/src/data/transforms/sample.test.js +0 -38
  58. package/src/data/transforms/stack.js +0 -137
  59. package/src/data/transforms/stack.test.js +0 -91
  60. package/src/data/transforms/transformFactory.js +0 -60
  61. package/src/embedApi.d.ts +0 -67
  62. package/src/encoder/accessor.js +0 -82
  63. package/src/encoder/accessor.test.js +0 -47
  64. package/src/encoder/encoder.js +0 -394
  65. package/src/encoder/encoder.test.js +0 -98
  66. package/src/fonts/Lato-Regular.json +0 -1267
  67. package/src/fonts/Lato-Regular.png +0 -0
  68. package/src/fonts/OFL.txt +0 -93
  69. package/src/fonts/README.md +0 -3
  70. package/src/fonts/bmFont.d.ts +0 -58
  71. package/src/fonts/bmFontManager.js +0 -357
  72. package/src/fonts/bmFontMetrics.js +0 -108
  73. package/src/genome/genome.js +0 -317
  74. package/src/genome/genome.test.js +0 -188
  75. package/src/genome/genomeStore.js +0 -54
  76. package/src/genome/locusFormat.js +0 -31
  77. package/src/genome/scaleIndex.d.ts +0 -38
  78. package/src/genome/scaleIndex.js +0 -166
  79. package/src/genome/scaleIndex.test.js +0 -78
  80. package/src/genome/scaleLocus.d.ts +0 -11
  81. package/src/genome/scaleLocus.js +0 -108
  82. package/src/genome/scaleLocus.test.js +0 -4
  83. package/src/genomeSpy.js +0 -784
  84. package/src/gl/arrayBuilder.js +0 -199
  85. package/src/gl/dataToVertices.js +0 -636
  86. package/src/gl/includes/common.glsl +0 -63
  87. package/src/gl/includes/picking.fragment.glsl +0 -1
  88. package/src/gl/includes/picking.vertex.glsl +0 -27
  89. package/src/gl/includes/sampleFacet.glsl +0 -107
  90. package/src/gl/includes/scales.glsl +0 -112
  91. package/src/gl/link.fragment.glsl +0 -18
  92. package/src/gl/link.vertex.glsl +0 -111
  93. package/src/gl/point.fragment.glsl +0 -123
  94. package/src/gl/point.vertex.glsl +0 -129
  95. package/src/gl/rect.fragment.glsl +0 -51
  96. package/src/gl/rect.vertex.glsl +0 -114
  97. package/src/gl/rule.fragment.glsl +0 -52
  98. package/src/gl/rule.vertex.glsl +0 -89
  99. package/src/gl/text.fragment.glsl +0 -31
  100. package/src/gl/text.vertex.glsl +0 -246
  101. package/src/gl/webGLHelper.js +0 -489
  102. package/src/img/bowtie.svg +0 -1
  103. package/src/img/genomespy-favicon.svg +0 -34
  104. package/src/index.html +0 -11
  105. package/src/index.js +0 -128
  106. package/src/marks/link.js +0 -175
  107. package/src/marks/mark.js +0 -975
  108. package/src/marks/markUtils.js +0 -125
  109. package/src/marks/pointMark.js +0 -251
  110. package/src/marks/rectMark.js +0 -241
  111. package/src/marks/rule.js +0 -250
  112. package/src/marks/text.js +0 -278
  113. package/src/node_modules/.vitest/results.json +0 -1
  114. package/src/scale/colorUtils.js +0 -184
  115. package/src/scale/glslScaleGenerator.js +0 -488
  116. package/src/scale/scale.js +0 -451
  117. package/src/scale/scale.test.js +0 -324
  118. package/src/scale/ticks.js +0 -203
  119. package/src/scale/ticks.test.js +0 -40
  120. package/src/singlePageApp.js +0 -13
  121. package/src/spec/axis.d.ts +0 -296
  122. package/src/spec/channel.d.ts +0 -430
  123. package/src/spec/data.d.ts +0 -196
  124. package/src/spec/font.d.ts +0 -15
  125. package/src/spec/genome.d.ts +0 -35
  126. package/src/spec/mark.d.ts +0 -429
  127. package/src/spec/root.d.ts +0 -17
  128. package/src/spec/sampleView.d.ts +0 -180
  129. package/src/spec/scale.d.ts +0 -273
  130. package/src/spec/title.d.ts +0 -102
  131. package/src/spec/tooltip.d.ts +0 -9
  132. package/src/spec/transform.d.ts +0 -479
  133. package/src/spec/view.d.ts +0 -201
  134. package/src/styles/genome-spy.scss +0 -153
  135. package/src/tooltip/dataTooltipHandler.js +0 -64
  136. package/src/tooltip/refseqGeneTooltipHandler.js +0 -78
  137. package/src/tooltip/tooltipHandler.ts +0 -12
  138. package/src/types/filetypes.d.ts +0 -14
  139. package/src/types/flatqueue.d.ts +0 -53
  140. package/src/types/glsl.d.ts +0 -4
  141. package/src/types/internmap.d.ts +0 -22
  142. package/src/types/object.d.ts +0 -21
  143. package/src/types/vega-loader.d.ts +0 -1
  144. package/src/types/vega-scale.d.ts +0 -60
  145. package/src/utils/addBaseUrl.js +0 -19
  146. package/src/utils/addBaseUrl.test.js +0 -22
  147. package/src/utils/animator.js +0 -83
  148. package/src/utils/arrayUtils.js +0 -61
  149. package/src/utils/binnedIndex.js +0 -167
  150. package/src/utils/binnedIndex.test.js +0 -155
  151. package/src/utils/clamp.js +0 -8
  152. package/src/utils/cloner.js +0 -34
  153. package/src/utils/cloner.test.js +0 -24
  154. package/src/utils/coalesce.js +0 -11
  155. package/src/utils/coalesce.test.js +0 -16
  156. package/src/utils/concatIterables.js +0 -26
  157. package/src/utils/concatIterables.test.js +0 -8
  158. package/src/utils/debounce.js +0 -37
  159. package/src/utils/domainArray.js +0 -216
  160. package/src/utils/domainArray.test.js +0 -130
  161. package/src/utils/eerp.js +0 -13
  162. package/src/utils/expression.js +0 -32
  163. package/src/utils/field.js +0 -28
  164. package/src/utils/formatObject.js +0 -31
  165. package/src/utils/indexer.js +0 -43
  166. package/src/utils/indexer.test.js +0 -47
  167. package/src/utils/inertia.js +0 -124
  168. package/src/utils/interactionEvent.js +0 -33
  169. package/src/utils/iterateNestedMaps.js +0 -21
  170. package/src/utils/iterateNestedMaps.test.js +0 -33
  171. package/src/utils/kWayMerge.js +0 -42
  172. package/src/utils/kWayMerge.test.js +0 -26
  173. package/src/utils/layout/flexLayout.js +0 -368
  174. package/src/utils/layout/flexLayout.test.js +0 -311
  175. package/src/utils/layout/grid.js +0 -95
  176. package/src/utils/layout/grid.test.js +0 -71
  177. package/src/utils/layout/padding.js +0 -120
  178. package/src/utils/layout/point.js +0 -23
  179. package/src/utils/layout/rectangle.js +0 -288
  180. package/src/utils/layout/rectangle.test.js +0 -172
  181. package/src/utils/mergeObjects.js +0 -99
  182. package/src/utils/mergeObjects.test.js +0 -42
  183. package/src/utils/numberExtractor.js +0 -24
  184. package/src/utils/numberExtractor.test.js +0 -6
  185. package/src/utils/point.js +0 -14
  186. package/src/utils/propertyCacher.js +0 -70
  187. package/src/utils/propertyCacher.test.js +0 -85
  188. package/src/utils/propertyCoalescer.js +0 -42
  189. package/src/utils/propertyCoalescer.test.js +0 -22
  190. package/src/utils/reservationMap.js +0 -103
  191. package/src/utils/reservationMap.test.js +0 -20
  192. package/src/utils/scaleNull.js +0 -19
  193. package/src/utils/setOperations.js +0 -75
  194. package/src/utils/smoothstep.js +0 -10
  195. package/src/utils/throttle.js +0 -34
  196. package/src/utils/topK.js +0 -76
  197. package/src/utils/topK.test.js +0 -64
  198. package/src/utils/transition.js +0 -74
  199. package/src/utils/ui/tooltip.js +0 -189
  200. package/src/utils/url.js +0 -22
  201. package/src/utils/variableTools.js +0 -24
  202. package/src/utils/variableTools.test.js +0 -13
  203. package/src/view/axisResolution.js +0 -140
  204. package/src/view/axisResolution.test.js +0 -201
  205. package/src/view/axisView.js +0 -747
  206. package/src/view/concatView.js +0 -45
  207. package/src/view/containerView.js +0 -159
  208. package/src/view/facetView.js +0 -491
  209. package/src/view/flowBuilder.js +0 -367
  210. package/src/view/flowBuilder.test.js +0 -125
  211. package/src/view/gridView.js +0 -786
  212. package/src/view/implicitRootView.js +0 -14
  213. package/src/view/importView.js +0 -19
  214. package/src/view/layerView.js +0 -74
  215. package/src/view/rendering.d.ts +0 -44
  216. package/src/view/renderingContext/compositeViewRenderingContext.js +0 -51
  217. package/src/view/renderingContext/deferredViewRenderingContext.js +0 -176
  218. package/src/view/renderingContext/layoutRecorderViewRenderingContext.js +0 -128
  219. package/src/view/renderingContext/simpleViewRenderingContext.js +0 -64
  220. package/src/view/renderingContext/svgViewRenderingContext.js +0 -125
  221. package/src/view/renderingContext/viewRenderingContext.js +0 -41
  222. package/src/view/scaleResolution.js +0 -791
  223. package/src/view/scaleResolution.test.js +0 -572
  224. package/src/view/scaleResolutionApi.d.ts +0 -40
  225. package/src/view/testUtils.js +0 -51
  226. package/src/view/title.js +0 -165
  227. package/src/view/unitView.js +0 -382
  228. package/src/view/view.js +0 -612
  229. package/src/view/view.test.js +0 -214
  230. package/src/view/viewContext.d.ts +0 -62
  231. package/src/view/viewFactory.js +0 -181
  232. package/src/view/viewFactory.test.js +0 -17
  233. package/src/view/viewUtils.js +0 -327
  234. package/src/view/zoom.js +0 -89
@@ -1,324 +0,0 @@
1
- import { expect, test } from "vitest";
2
- /*!
3
- * Adapted from vega-encode:
4
- * https://github.com/vega/vega/blob/master/packages/vega-encode/test/scale-test.js
5
- *
6
- * Copyright (c) 2015-2018, University of Washington Interactive Data Lab
7
- * All rights reserved.
8
- *
9
- * BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
10
- */
11
-
12
- /* eslint-disable */
13
-
14
- import * as util from "vega-util";
15
- import * as vs from "vega-scale";
16
- import createScale from "./scale";
17
-
18
- // Suppress warnings by default
19
- const scale = (params, logger) =>
20
- createScale(params, logger || { warn: () => {} });
21
-
22
- test("Scale respects domain configuration", function () {
23
- var s,
24
- params = {
25
- type: "linear",
26
- domain: [1, 9.5],
27
- };
28
-
29
- // test zero inclusion
30
- s = scale(params);
31
- expect(s.domain()).toEqual([0, 9.5]);
32
- s = scale(util.extend({ zero: true }, params));
33
- expect(s.domain()).toEqual([0, 9.5]);
34
- s = scale(util.extend({ zero: false }, params));
35
- expect(s.domain()).toEqual([1, 9.5]);
36
-
37
- // test nice domain
38
- s = scale(util.extend({ nice: true }, params));
39
- expect(s.domain()).toEqual([0, 10]);
40
-
41
- // test domain min/max
42
- s = scale(util.extend({ domainMin: -1, domainMax: 10 }, params));
43
- expect(s.domain()).toEqual([-1, 10]);
44
-
45
- // domain min overrides zero
46
- s = scale(
47
- util.extend({ zero: true, domainMin: 0.5, domainMax: 10 }, params)
48
- );
49
- expect(s.domain()).toEqual([0.5, 10]);
50
-
51
- // test domain mid
52
- s = scale(util.extend({ domainMid: 5 }, params));
53
- expect(s.domain()).toEqual([0, 5, 9.5]);
54
-
55
- // test domain raw
56
- s = scale(util.extend({ domainRaw: [2, 11] }, params));
57
- expect(s.domain()).toEqual([2, 11]);
58
- });
59
-
60
- test("Scale respects domain padding", function () {
61
- var d;
62
-
63
- // test linear scale padding
64
- d = scale({
65
- type: "linear",
66
- domain: [5, 95],
67
- range: [0, 100],
68
- padding: 5,
69
- zero: false,
70
- }).domain();
71
- expect(d).toEqual([0, 100]);
72
-
73
- // test log scale padding
74
- d = scale({
75
- type: "log",
76
- domain: [1, 10],
77
- range: [0, 60],
78
- padding: 20,
79
- zero: false,
80
- }).domain();
81
- expect(Math.abs(d[0] - 0.1) < 1e-8).toBeTruthy();
82
- expect(Math.abs(d[1] - 100) < 1e-8).toBeTruthy();
83
-
84
- // test sqrt scale padding
85
- d = scale({
86
- type: "sqrt",
87
- domain: [2 * 2, 3 * 3],
88
- range: [0, 60],
89
- padding: 20,
90
- zero: false,
91
- }).domain();
92
- expect(Math.abs(d[0] - 1 * 1) < 1e-8).toBeTruthy();
93
- expect(Math.abs(d[1] - 4 * 4) < 1e-8).toBeTruthy();
94
-
95
- // test power scale padding
96
- d = scale({
97
- type: "pow",
98
- exponent: 1 / 3,
99
- domain: [2 * 2 * 2, 3 * 3 * 3],
100
- range: [0, 60],
101
- padding: 20,
102
- zero: false,
103
- }).domain();
104
- expect(Math.abs(d[0] - 1 * 1 * 1) < 1e-8).toBeTruthy();
105
- expect(Math.abs(d[1] - 4 * 4 * 4) < 1e-8).toBeTruthy();
106
- });
107
-
108
- test("Ordinal scale respects domainImplicit", function () {
109
- var s,
110
- params = {
111
- type: "ordinal",
112
- domain: [],
113
- range: ["a", "b", "c"],
114
- };
115
-
116
- s = scale(params);
117
- expect(s("foo")).toBe(undefined);
118
- expect(s("bar")).toBe(undefined);
119
- expect(s("foo")).toBe(undefined);
120
-
121
- s = scale(util.extend({ domainImplicit: false }, params));
122
- expect(s("foo")).toBe(undefined);
123
- expect(s("bar")).toBe(undefined);
124
- expect(s("foo")).toBe(undefined);
125
-
126
- s = scale(util.extend({ domainImplicit: true }, params));
127
- expect(s("foo")).toBe("a");
128
- expect(s("bar")).toBe("b");
129
- expect(s("foo")).toBe("a");
130
- });
131
-
132
- test("Scale respects range configuration", function () {
133
- var s,
134
- params = {
135
- type: "linear",
136
- domain: [0, 10],
137
- range: [0, 10],
138
- };
139
-
140
- // round
141
- s = scale(params);
142
- expect(s(0.5)).toBe(0.5);
143
- s = scale(util.extend({ round: true }, params));
144
- expect(s(0.5)).toBe(1);
145
-
146
- // reverse
147
- s = scale(util.extend({ reverse: true }, params));
148
- expect(s.range()).toEqual([10, 0]);
149
-
150
- // rangeStep
151
- params = {
152
- type: "band",
153
- domain: ["a", "b", "c"],
154
- rangeStep: 20,
155
- padding: 0,
156
- };
157
- s = scale(params);
158
- expect(s.range()).toEqual([0, 60]);
159
- expect(s.bandwidth()).toBe(20);
160
-
161
- s = expect(function () {
162
- scale(util.extend({}, params, { type: "linear" }));
163
- }).toThrow();
164
- });
165
-
166
- test("Scale respects range color schemes", function () {
167
- var s, u, v;
168
-
169
- // performs scheme lookup
170
- s = scale({ type: "ordinal", scheme: "category10" });
171
- expect(s.range().length).toBe(10);
172
-
173
- // throws on invalid scheme
174
- expect(function () {
175
- scale({ type: "ordinal", scheme: "foobarbaz" });
176
- }).toThrow();
177
- expect(function () {
178
- scale({ type: "sequential", scheme: "foobarbaz" });
179
- }).toThrow();
180
-
181
- // handles interpolating schemes and extents
182
- s = scale({ type: "sequential", scheme: "viridis" });
183
- u = s.interpolator();
184
- expect(typeof u).toBe("function");
185
-
186
- s = scale({
187
- type: "sequential",
188
- scheme: "viridis",
189
- schemeExtent: [0.2, 0.9],
190
- });
191
- v = s.interpolator();
192
- expect(typeof v).toBe("function");
193
- expect(v(0)).toBe(u(0.2));
194
- expect(v(1)).toBe(u(0.9));
195
-
196
- s = scale({
197
- type: "sequential",
198
- scheme: "viridis",
199
- schemeExtent: [0.2, 0.9],
200
- reverse: true,
201
- });
202
- v = s.interpolator();
203
- expect(typeof v).toBe("function");
204
- expect(v(0)).toBe(u(0.9));
205
- expect(v(1)).toBe(u(0.2));
206
-
207
- // generate interpolator as needed
208
- s = scale({ type: "sequential", range: ["#000", "#f00"] });
209
- v = s.interpolator();
210
- expect(typeof v).toBe("function");
211
- expect(v(0)).toBe("rgb(0, 0, 0)");
212
- expect(v(1)).toBe("rgb(255, 0, 0)");
213
-
214
- // quantize to provided scheme count
215
- s = scale({ type: "quantize", scheme: "viridis", schemeCount: 3 });
216
- v = s.range();
217
- expect(v.length).toBe(3);
218
- expect(v[0]).toBe(u(1 / 4));
219
- expect(v[1]).toBe(u(2 / 4));
220
- expect(v[2]).toBe(u(3 / 4));
221
- });
222
-
223
- test("Scale warns for zero in log domain", function () {
224
- function logScale(domain) {
225
- const logger = {
226
- count: 0,
227
- warn: function (msg) {
228
- this.count++;
229
- },
230
- };
231
-
232
- return function () {
233
- scale({ type: "log", domain: domain }, logger);
234
- if (logger.count) {
235
- throw new Error();
236
- }
237
- };
238
- }
239
-
240
- expect(logScale([0, 1])).toThrow();
241
- expect(logScale([-1, 0])).toThrow();
242
- expect(logScale([-1, 1])).toThrow();
243
- expect(logScale([1, 0, 2])).toThrow();
244
- expect(logScale([1, 2])).not.toThrow();
245
- expect(logScale([-2, -1])).not.toThrow();
246
- });
247
-
248
- test("Scale infers scale key from type, domain, and range", function () {
249
- function key(params) {
250
- return scale(params).type;
251
- }
252
-
253
- // numeric domain scales should adapt
254
- [vs.Linear, vs.Log, vs.Pow, vs.Sqrt, vs.Symlog].forEach(function (st) {
255
- expect(key({ type: st, domain: [0, 1], range: [0, 1] })).toBe(st);
256
- expect(key({ type: st, domain: [0, 1], range: [true, false] })).toBe(
257
- st
258
- );
259
-
260
- // direct color range specification
261
- expect(key({ type: st, domain: [0, 1], range: ["blue", "red"] })).toBe(
262
- `${vs.Sequential}-${st}`
263
- );
264
- expect(
265
- key({ type: st, domain: [0, 1, 2], range: ["blue", "red"] })
266
- ).toBe(`${vs.Diverging}-${st}`);
267
- expect(
268
- key({ type: st, domain: [0, 1, 2, 3], range: ["blue", "red"] })
269
- ).toBe(st);
270
-
271
- // color scheme range specification
272
- expect(key({ type: st, domain: [0, 1], scheme: "blues" })).toBe(
273
- `${vs.Sequential}-${st}`
274
- );
275
- expect(key({ type: st, domain: [0, 1, 2], scheme: "blues" })).toBe(
276
- `${vs.Diverging}-${st}`
277
- );
278
- expect(key({ type: st, domain: [0, 1, 2, 3], scheme: "blues" })).toBe(
279
- st
280
- );
281
- });
282
-
283
- // temporal domain scales should not adapt
284
- [vs.Time, vs.UTC].forEach(function (st) {
285
- const t0 = new Date(2010, 0, 1),
286
- t1 = new Date(2011, 0, 1),
287
- t2 = new Date(2012, 0, 1),
288
- t3 = new Date(2013, 0, 1);
289
-
290
- expect(key({ type: st, domain: [t0, t1], range: [0, 1] })).toBe(st);
291
- expect(key({ type: st, domain: [t0, t1], range: [true, false] })).toBe(
292
- st
293
- );
294
-
295
- // direct color range specification
296
- expect(
297
- key({ type: st, domain: [t0, t1], range: ["blue", "red"] })
298
- ).toBe(st);
299
- expect(
300
- key({ type: st, domain: [t0, t1, t2], range: ["blue", "red"] })
301
- ).toBe(st);
302
- expect(
303
- key({ type: st, domain: [t0, t1, t2, t3], range: ["blue", "red"] })
304
- ).toBe(st);
305
-
306
- // color scheme range specification
307
- expect(key({ type: st, domain: [t0, t1], scheme: "blues" })).toBe(st);
308
- expect(key({ type: st, domain: [t0, t1, t2], scheme: "blues" })).toBe(
309
- st
310
- );
311
- expect(
312
- key({ type: st, domain: [t0, t1, t2, t3], scheme: "blues" })
313
- ).toBe(st);
314
- });
315
-
316
- // sequential should work for backwards compatibility
317
- const st = vs.Sequential;
318
- expect(key({ type: st, domain: [0, 1], range: ["blue", "red"] })).toBe(
319
- `${st}-${vs.Linear}`
320
- );
321
- expect(key({ type: st, domain: [0, 1], scheme: "blues" })).toBe(
322
- `${st}-${vs.Linear}`
323
- );
324
- });
@@ -1,203 +0,0 @@
1
- /*!
2
- * Adapted from vega-encode:
3
- * https://github.com/vega/vega/blob/master/packages/vega-encode/src/ticks.js
4
- *
5
- * Copyright (c) 2015-2018, University of Washington Interactive Data Lab
6
- * All rights reserved.
7
- *
8
- * BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
9
- */
10
-
11
- /* eslint-disable */
12
- // @ts-nocheck
13
-
14
- // This file is a mess
15
- // TODO: Fix types, etc.
16
-
17
- import { isLogarithmic } from "vega-scale";
18
- import { error, isNumber, isObject, isString, peek, span } from "vega-util";
19
- import { format as numberFormat, formatSpecifier } from "d3-format";
20
-
21
- /**
22
- * Determine the tick count or interval function.
23
- *
24
- * @param {import("../encoder/encoder").VegaScale} scale - The scale for which to generate tick values.
25
- * @param {number | {step: number, interval: number}} count - The desired tick count or interval specifier.
26
- * @param {number} minStep - The desired minimum step between tick values.
27
- * @return {*} - The tick count or interval function.
28
- */
29
- export function tickCount(scale, count, minStep) {
30
- var step;
31
-
32
- if (isNumber(count) && minStep != null) {
33
- count = Math.min(count, ~~(span(scale.domain()) / minStep) || 1);
34
- }
35
-
36
- if (isObject(count)) {
37
- step = count.step;
38
- count = count.interval;
39
- }
40
-
41
- return count;
42
- }
43
-
44
- /**
45
- * Filter a set of candidate tick values, ensuring that only tick values
46
- * that lie within the scale range are included.
47
- * @param {import("../encoder/encoder").VegaScale} scale - The scale for which to generate tick values.
48
- * @param {Array<*>} ticks - The candidate tick values.
49
- * @param {*} count - The tick count or interval function.
50
- * @return {Array<*>} - The filtered tick values.
51
- */
52
- export function validTicks(scale, ticks, count) {
53
- var range = scale.range(),
54
- lo = Math.floor(range[0]),
55
- hi = Math.ceil(peek(range));
56
-
57
- if (lo > hi) {
58
- range = hi;
59
- hi = lo;
60
- lo = range;
61
- }
62
-
63
- ticks = ticks.filter(function (v) {
64
- v = scale(v);
65
- return lo <= v && v <= hi;
66
- });
67
-
68
- if (count > 0 && ticks.length > 1) {
69
- var endpoints = [ticks[0], peek(ticks)];
70
- while (ticks.length > count && ticks.length >= 3) {
71
- ticks = ticks.filter(function (_, i) {
72
- return !(i % 2);
73
- });
74
- }
75
- if (ticks.length < 3) {
76
- ticks = endpoints;
77
- }
78
- }
79
-
80
- return ticks;
81
- }
82
-
83
- /**
84
- * Generate tick values for the given scale and approximate tick count or
85
- * interval value. If the scale has a 'ticks' method, it will be used to
86
- * generate the ticks, with the count argument passed as a parameter. If the
87
- * scale lacks a 'ticks' method, the full scale domain will be returned.
88
- * @param {import("../encoder/encoder").VegaScale} scale - The scale for which to generate tick values.
89
- * @param {*} [count] - The approximate number of desired ticks.
90
- * @return {any[]} - The generated tick values.
91
- */
92
- export function tickValues(scale, count) {
93
- return scale.bins
94
- ? validTicks(scale, binValues(scale.bins, count))
95
- : scale.ticks
96
- ? scale.ticks(count)
97
- : scale.domain();
98
- }
99
-
100
- /**
101
- * Generate tick values for an array of bin values.
102
- * @param {Array<*>} bins - An array of bin boundaries.
103
- * @param {Number} [count] - The approximate number of desired ticks.
104
- * @return {Array<*>} - The generated tick values.
105
- */
106
- function binValues(bins, count) {
107
- var n = bins.length,
108
- stride = ~~(n / (count || n));
109
-
110
- return stride < 2
111
- ? bins.slice()
112
- : bins.filter(function (x, i) {
113
- return !(i % stride);
114
- });
115
- }
116
-
117
- /**
118
- * Generate a label format function for a scale. If the scale has a
119
- * 'tickFormat' method, it will be used to generate the formatter, with the
120
- * count and specifier arguments passed as parameters. If the scale lacks a
121
- * 'tickFormat' method, the returned formatter performs simple string coercion.
122
- * If the input scale is a logarithmic scale and the format specifier does not
123
- * indicate a desired decimal precision, a special variable precision formatter
124
- * that automatically trims trailing zeroes will be generated.
125
- * @param {import("../encoder/encoder").VegaScale} scale - The scale for which to generate the label formatter.
126
- * @param {*} [count] - The approximate number of desired ticks.
127
- * @param {string} [specifier] - The format specifier. Must be a legal d3
128
- * specifier string (see https://github.com/d3/d3-format#formatSpecifier).
129
- * @return {function(*):string} - The generated label formatter.
130
- */
131
- export function tickFormat(scale, count, specifier) {
132
- var format = scale.tickFormat
133
- ? scale.tickFormat(count, specifier)
134
- : specifier
135
- ? numberFormat(specifier)
136
- : String;
137
-
138
- if (isLogarithmic(scale.type)) {
139
- var logfmt = variablePrecision(specifier);
140
- format = scale.bins ? logfmt : filter(format, logfmt);
141
- }
142
-
143
- return format;
144
- }
145
-
146
- function filter(sourceFormat, targetFormat) {
147
- return function (_) {
148
- return sourceFormat(_) ? targetFormat(_) : "";
149
- };
150
- }
151
-
152
- function variablePrecision(specifier) {
153
- var s = formatSpecifier(specifier || ",");
154
-
155
- if (s.precision == null) {
156
- s.precision = 12;
157
- switch (s.type) {
158
- case "%":
159
- s.precision -= 2;
160
- break;
161
- case "e":
162
- s.precision -= 1;
163
- break;
164
- }
165
- return trimZeroes(
166
- numberFormat(s), // number format
167
- numberFormat(".1f")(1)[1] // decimal point character
168
- );
169
- } else {
170
- return numberFormat(s);
171
- }
172
- }
173
-
174
- function trimZeroes(format, decimalChar) {
175
- return function (x) {
176
- var str = format(x),
177
- dec = str.indexOf(decimalChar),
178
- idx,
179
- end;
180
-
181
- if (dec < 0) return str;
182
-
183
- idx = rightmostDigit(str, dec);
184
- end = idx < str.length ? str.slice(idx) : "";
185
- while (--idx > dec)
186
- if (str[idx] !== "0") {
187
- ++idx;
188
- break;
189
- }
190
-
191
- return str.slice(0, idx) + end;
192
- };
193
- }
194
-
195
- function rightmostDigit(str, dec) {
196
- var i = str.lastIndexOf("e"),
197
- c;
198
- if (i > 0) return i;
199
- for (i = str.length; --i > dec; ) {
200
- c = str.charCodeAt(i);
201
- if (c >= 48 && c <= 57) return i + 1; // is digit
202
- }
203
- }
@@ -1,40 +0,0 @@
1
- import { expect, test } from "vitest";
2
- /*!
3
- * Adapted from vega-encode:
4
- * https://github.com/vega/vega/blob/master/packages/vega-encode/test/scale-test.js
5
- *
6
- * Copyright (c) 2015-2018, University of Washington Interactive Data Lab
7
- * All rights reserved.
8
- *
9
- * BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
10
- */
11
-
12
- /* eslint-disable */
13
-
14
- import { validTicks } from "./ticks";
15
-
16
- test("validTicks uses count correctly", function () {
17
- var data = [0, 1, 2, 3, 4, 5, 6, 7];
18
-
19
- var identity = function (x) {
20
- return x;
21
- };
22
- identity.range = function () {
23
- return [0, 10];
24
- };
25
-
26
- var t1 = validTicks(identity, data, 5);
27
- expect(t1).toEqual([0, 2, 4, 6]);
28
-
29
- // don't change ticks if count is large
30
- var t2 = validTicks(identity, data, 100);
31
- expect(t2).toEqual(data);
32
-
33
- // special case for low number of ticks
34
- var t3 = validTicks(identity, data, 3);
35
- expect(t3).toEqual([0, 7]);
36
-
37
- // single tick should pass through
38
- var t5 = validTicks(identity, [1], 5);
39
- expect(t5).toEqual([1]);
40
- });
@@ -1,13 +0,0 @@
1
- import { embed } from "./index";
2
-
3
- // This is for development purposes. Use "npm start" to launch.
4
-
5
- const specUrl = new URLSearchParams(window.location.search).get("spec");
6
- if (specUrl) {
7
- embed(document.body, specUrl);
8
- } else {
9
- document.body.innerHTML = `
10
- <p style="color: firebrick">No 'spec' url parameter defined!</p>
11
- <p>Try this one from the "static" folder, for example:
12
- <a href="?spec=examples/first.json">examples/first.json</a></p>`;
13
- }