@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,451 +0,0 @@
1
- /*!
2
- * Adapted from vega-encode:
3
- * https://github.com/vega/vega/blob/master/packages/vega-encode/src/Scale.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 { tickCount } from "./ticks";
18
- import {
19
- error,
20
- inherits,
21
- isArray,
22
- isFunction,
23
- isString,
24
- peek,
25
- stringValue,
26
- toSet,
27
- zoomLinear,
28
- zoomLog,
29
- zoomPow,
30
- zoomSymlog,
31
- } from "vega-util";
32
-
33
- import {
34
- Ordinal,
35
- Band,
36
- Point,
37
- Sequential,
38
- Diverging,
39
- Linear,
40
- Log,
41
- Pow,
42
- Sqrt,
43
- Symlog,
44
- Time,
45
- UTC,
46
- Quantile,
47
- Quantize,
48
- Threshold,
49
- BinOrdinal,
50
- isContinuous,
51
- isInterpolating,
52
- isLogarithmic,
53
- bandSpace,
54
- interpolateColors,
55
- interpolateRange,
56
- interpolate as getInterpolate,
57
- scale as getScale,
58
- scheme as getScheme,
59
- scaleImplicit,
60
- quantizeInterpolator,
61
- } from "vega-scale";
62
-
63
- import { range as sequence } from "d3-array";
64
-
65
- import { interpolate, interpolateRound } from "d3-interpolate";
66
-
67
- const Locus = "locus";
68
- const Index = "index";
69
-
70
- var DEFAULT_COUNT = 5;
71
-
72
- function includeZero(scale) {
73
- const type = scale.type;
74
- return !scale.bins && (type === Linear || type === Pow || type === Sqrt);
75
- }
76
-
77
- function includePad(type) {
78
- return isContinuous(type) && ![Sequential, Index, Locus].includes(type);
79
- }
80
-
81
- function ensureLogger(logger) {
82
- return (
83
- logger || {
84
- warn: (msg, ...rest) => console.warn(msg, ...rest),
85
- }
86
- );
87
- }
88
-
89
- var SKIP = toSet([
90
- "set",
91
- "modified",
92
- "clear",
93
- "type",
94
- "scheme",
95
- "schemeExtent",
96
- "schemeCount",
97
- "domain",
98
- "domainMin",
99
- "domainMid",
100
- "domainMax",
101
- "domainRaw",
102
- "domainImplicit",
103
- "nice",
104
- "zero",
105
- "bins",
106
- "range",
107
- "rangeStep",
108
- "round",
109
- "reverse",
110
- "interpolate",
111
- "interpolateGamma",
112
- "zoom",
113
- "fp64",
114
- "name",
115
- ]);
116
-
117
- export function configureScale(_, scale, logger) {
118
- logger = ensureLogger(logger);
119
-
120
- for (const key in _) {
121
- if (!SKIP[key]) {
122
- // padding is a scale property for band/point but not others
123
- if (key === "padding" && includePad(scale.type)) continue;
124
- // invoke scale property setter, raise warning if not found
125
- isFunction(scale[key])
126
- ? scale[key](_[key])
127
- : logger.warn("Unsupported scale property: " + key);
128
- }
129
- }
130
-
131
- configureRange(
132
- scale,
133
- _,
134
- configureBins(scale, _, configureDomain(scale, _, logger))
135
- );
136
- }
137
-
138
- /**
139
- *
140
- * @param {import("../spec/scale").Scale} _
141
- * @param {*} logger
142
- * @returns {import("../encoder/encoder").VegaScale}
143
- */
144
- export default function createScale(_, logger) {
145
- const key = scaleKey(_);
146
- const scale = getScale(key);
147
-
148
- if (!scale) {
149
- throw new Error("Unknown scale type: " + key);
150
- }
151
-
152
- const scaleInstance = scale();
153
-
154
- configureScale(_, scaleInstance, logger);
155
-
156
- return scaleInstance;
157
- }
158
-
159
- function scaleKey(_) {
160
- var t = _.type,
161
- d = "",
162
- n;
163
-
164
- // backwards compatibility pre Vega 5.
165
- if (t === Sequential) return Sequential + "-" + Linear;
166
-
167
- if (isContinuousColor(_)) {
168
- n = _.rawDomain
169
- ? _.rawDomain.length
170
- : _.domain
171
- ? _.domain.length + +(_.domainMid != null)
172
- : 0;
173
- d = n === 2 ? Sequential + "-" : n === 3 ? Diverging + "-" : "";
174
- }
175
-
176
- return (d + t || Linear).toLowerCase();
177
- }
178
-
179
- function isContinuousColor(_) {
180
- const t = _.type;
181
- return (
182
- isContinuous(t) &&
183
- t !== Time &&
184
- t !== UTC &&
185
- (_.scheme || (_.range && _.range.length && _.range.every(isString)))
186
- );
187
- }
188
-
189
- export function configureDomain(scale, _, logger) {
190
- if (!scale.domain) {
191
- return 0;
192
- }
193
-
194
- logger = ensureLogger(logger);
195
-
196
- // check raw domain, if provided use that and exit early
197
- var raw = rawDomain(scale, _.domainRaw, logger);
198
- if (raw > -1) return raw;
199
-
200
- var domain = _.domain,
201
- type = scale.type,
202
- zero = _.zero || (_.zero === undefined && includeZero(scale)),
203
- n,
204
- mid;
205
-
206
- if (!domain) return 0;
207
-
208
- // adjust continuous domain for minimum pixel padding
209
- if (includePad(type) && _.padding && domain[0] !== peek(domain)) {
210
- domain = padDomain(
211
- type,
212
- domain,
213
- _.range,
214
- _.padding,
215
- _.exponent,
216
- _.constant
217
- );
218
- }
219
-
220
- // adjust domain based on zero, min, max settings
221
- if (
222
- zero ||
223
- _.domainMin != null ||
224
- _.domainMax != null ||
225
- _.domainMid != null
226
- ) {
227
- n = (domain = domain.slice()).length - 1 || 1;
228
- if (zero) {
229
- if (domain[0] > 0) domain[0] = 0;
230
- if (domain[n] < 0) domain[n] = 0;
231
- }
232
- if (_.domainMin != null) domain[0] = _.domainMin;
233
- if (_.domainMax != null) domain[n] = _.domainMax;
234
-
235
- if (_.domainMid != null) {
236
- mid = _.domainMid;
237
- if (mid < domain[0] || mid > domain[n]) {
238
- logger.warn("Scale domainMid exceeds domain min or max.", mid);
239
- }
240
- domain.splice(n, 0, mid);
241
- }
242
- }
243
-
244
- // set the scale domain
245
- scale.domain(domainCheck(type, domain, logger));
246
-
247
- // if ordinal scale domain is defined, prevent implicit
248
- // domain construction as side-effect of scale lookup
249
- if (type === Ordinal) {
250
- scale.unknown(_.domainImplicit ? scaleImplicit : undefined);
251
- }
252
-
253
- // perform 'nice' adjustment as requested
254
- if (_.nice && scale.nice) {
255
- scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null);
256
- }
257
-
258
- // return the cardinality of the domain
259
- return domain.length;
260
- }
261
-
262
- function rawDomain(scale, raw, logger) {
263
- if (raw) {
264
- scale.domain(domainCheck(scale.type, raw, logger));
265
- return raw.length;
266
- } else {
267
- return -1;
268
- }
269
- }
270
-
271
- function padDomain(type, domain, range, pad, exponent, constant) {
272
- var span = Math.abs(peek(range) - range[0]),
273
- frac = span / (span - 2 * pad),
274
- d =
275
- type === Log
276
- ? zoomLog(domain, null, frac)
277
- : type === Sqrt
278
- ? zoomPow(domain, null, frac, 0.5)
279
- : type === Pow
280
- ? zoomPow(domain, null, frac, exponent || 1)
281
- : type === Symlog
282
- ? zoomSymlog(domain, null, frac, constant || 1)
283
- : zoomLinear(domain, null, frac);
284
-
285
- domain = domain.slice();
286
- domain[0] = d[0];
287
- domain[domain.length - 1] = d[1];
288
- return domain;
289
- }
290
-
291
- function domainCheck(type, domain, logger) {
292
- if (isLogarithmic(type)) {
293
- // sum signs of domain values
294
- // if all pos or all neg, abs(sum) === domain.length
295
- var s = Math.abs(
296
- domain.reduce(function (s, v) {
297
- return s + (v < 0 ? -1 : v > 0 ? 1 : 0);
298
- }, 0)
299
- );
300
-
301
- if (s !== domain.length) {
302
- logger.warn(
303
- "Log scale domain includes zero: " + stringValue(domain)
304
- );
305
- }
306
- }
307
- return domain;
308
- }
309
-
310
- function configureBins(scale, _, count) {
311
- let bins = _.bins;
312
-
313
- if (bins && !isArray(bins)) {
314
- // generate bin boundary array
315
- const domain =
316
- (bins.start == null || bins.stop == null) && scale.domain(),
317
- start = bins.start == null ? domain[0] : bins.start,
318
- stop = bins.stop == null ? peek(domain) : bins.stop,
319
- step = bins.step;
320
-
321
- if (!step) error("Scale bins parameter missing step property.");
322
- bins = sequence(start, stop + step, step);
323
- }
324
-
325
- if (bins) {
326
- // assign bin boundaries to scale instance
327
- scale.bins = bins;
328
- } else if (scale.bins) {
329
- // no current bins, remove bins if previously set
330
- delete scale.bins;
331
- }
332
-
333
- // special handling for bin-ordinal scales
334
- if (scale.type === BinOrdinal) {
335
- if (!bins) {
336
- // the domain specifies the bins
337
- scale.bins = scale.domain();
338
- } else if (!_.domain && !_.domainRaw) {
339
- // the bins specify the domain
340
- scale.domain(bins);
341
- count = bins.length;
342
- }
343
- }
344
-
345
- // return domain cardinality
346
- return count;
347
- }
348
-
349
- function configureRange(scale, _, count) {
350
- var type = scale.type,
351
- round = _.round || false,
352
- range = _.range;
353
-
354
- // if range step specified, calculate full range extent
355
- if (_.rangeStep != null) {
356
- range = configureRangeStep(type, _, count);
357
- }
358
-
359
- // else if a range scheme is defined, use that
360
- else if (_.scheme) {
361
- range = configureScheme(type, _, count);
362
- if (isFunction(range)) {
363
- if (scale.interpolator) {
364
- return scale.interpolator(range);
365
- } else {
366
- error(
367
- `Scale type ${type} does not support interpolating color schemes.`
368
- );
369
- }
370
- }
371
- }
372
-
373
- // given a range array for an interpolating scale, convert to interpolator
374
- if (range && isInterpolating(type)) {
375
- return scale.interpolator(
376
- interpolateColors(
377
- flip(range, _.reverse),
378
- _.interpolate,
379
- _.interpolateGamma
380
- )
381
- );
382
- }
383
-
384
- // configure rounding / interpolation
385
- if (range && _.interpolate && scale.interpolate) {
386
- scale.interpolate(getInterpolate(_.interpolate, _.interpolateGamma));
387
- } else if (isFunction(scale.round)) {
388
- scale.round(round);
389
- } else if (isFunction(scale.rangeRound)) {
390
- scale.interpolate(round ? interpolateRound : interpolate);
391
- }
392
-
393
- if (range) scale.range(flip(range, _.reverse));
394
- }
395
-
396
- function configureRangeStep(type, _, count) {
397
- if (type !== Band && type !== Point) {
398
- error("Only band and point scales support rangeStep.");
399
- }
400
-
401
- // calculate full range based on requested step size and padding
402
- var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,
403
- inner =
404
- type === Point
405
- ? 1
406
- : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;
407
- return [0, _.rangeStep * bandSpace(count, inner, outer)];
408
- }
409
-
410
- function configureScheme(type, _, count) {
411
- var extent = _.schemeExtent,
412
- name,
413
- scheme;
414
-
415
- if (isArray(_.scheme)) {
416
- scheme = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);
417
- } else {
418
- name = _.scheme.toLowerCase();
419
- scheme = getScheme(name);
420
- if (!scheme) error(`Unrecognized scheme name: ${_.scheme}`);
421
- }
422
-
423
- // determine size for potential discrete range
424
- count =
425
- type === Threshold
426
- ? count + 1
427
- : type === BinOrdinal
428
- ? count - 1
429
- : type === Quantile || type === Quantize
430
- ? +_.schemeCount || DEFAULT_COUNT
431
- : count;
432
-
433
- // adjust and/or quantize scheme as appropriate
434
- return isInterpolating(type)
435
- ? adjustScheme(scheme, extent, _.reverse)
436
- : isFunction(scheme)
437
- ? quantizeInterpolator(adjustScheme(scheme, extent), count)
438
- : type === Ordinal
439
- ? scheme
440
- : scheme.slice(0, count);
441
- }
442
-
443
- function adjustScheme(scheme, extent, reverse) {
444
- return isFunction(scheme) && (extent || reverse)
445
- ? interpolateRange(scheme, flip(extent || [0, 1], reverse))
446
- : scheme;
447
- }
448
-
449
- function flip(array, reverse) {
450
- return reverse ? array.slice().reverse() : array;
451
- }