@cloudscape-design/components 3.0.93 → 3.0.95
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.
- package/THIRD-PARTY-LICENSES +225 -1
- package/internal/components/cartesian-chart/scales.d.ts +1 -1
- package/internal/components/cartesian-chart/scales.d.ts.map +1 -1
- package/internal/components/cartesian-chart/scales.js +1 -1
- package/internal/components/cartesian-chart/scales.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/generated/styles/tokens.d.ts +3 -0
- package/internal/generated/styles/tokens.js +3 -0
- package/internal/generated/theming/index.cjs +3 -0
- package/internal/generated/theming/index.js +3 -0
- package/internal/vendor/d3-scale.d.ts +2 -0
- package/internal/vendor/d3-scale.d.ts.map +1 -0
- package/internal/vendor/d3-scale.js +2995 -0
- package/internal/vendor/d3-scale.js.map +1 -0
- package/mixed-line-bar-chart/bar-series.js.map +1 -1
- package/package.json +1 -2
- package/test-utils/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,2995 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name: d3-array
|
|
3
|
+
* Version: 3.2.0
|
|
4
|
+
* License: ISC
|
|
5
|
+
* Private: false
|
|
6
|
+
* Description: Array manipulation, ordering, searching, summarizing, etc.
|
|
7
|
+
* Repository: git+https://github.com/d3/d3-array.git
|
|
8
|
+
* Homepage: https://d3js.org/d3-array/
|
|
9
|
+
* Author: Mike Bostock (http://bost.ocks.org/mike)
|
|
10
|
+
* License Copyright:
|
|
11
|
+
* ===
|
|
12
|
+
*
|
|
13
|
+
* Copyright 2010-2022 Mike Bostock
|
|
14
|
+
*
|
|
15
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
16
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
17
|
+
* and this permission notice appear in all copies.
|
|
18
|
+
*
|
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
20
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
21
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
22
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
23
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
24
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
25
|
+
* THIS SOFTWARE.
|
|
26
|
+
*
|
|
27
|
+
*
|
|
28
|
+
* ---
|
|
29
|
+
*
|
|
30
|
+
* Name: internmap
|
|
31
|
+
* Version: 2.0.3
|
|
32
|
+
* License: ISC
|
|
33
|
+
* Private: false
|
|
34
|
+
* Description: Map and Set with automatic key interning
|
|
35
|
+
* Repository: git+https://github.com/mbostock/internmap.git
|
|
36
|
+
* Homepage: https://github.com/mbostock/internmap/
|
|
37
|
+
* Author: Mike Bostock (https://bost.ocks.org/mike)
|
|
38
|
+
* License Copyright:
|
|
39
|
+
* ===
|
|
40
|
+
*
|
|
41
|
+
* Copyright 2021 Mike Bostock
|
|
42
|
+
*
|
|
43
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
44
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
45
|
+
* and this permission notice appear in all copies.
|
|
46
|
+
*
|
|
47
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
48
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
49
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
50
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
51
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
52
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
53
|
+
* THIS SOFTWARE.
|
|
54
|
+
*
|
|
55
|
+
*
|
|
56
|
+
* ---
|
|
57
|
+
*
|
|
58
|
+
* Name: d3-scale
|
|
59
|
+
* Version: 4.0.2
|
|
60
|
+
* License: ISC
|
|
61
|
+
* Private: false
|
|
62
|
+
* Description: Encodings that map abstract data to visual representation.
|
|
63
|
+
* Repository: git+https://github.com/d3/d3-scale.git
|
|
64
|
+
* Homepage: https://d3js.org/d3-scale/
|
|
65
|
+
* Author: Mike Bostock (https://bost.ocks.org/mike)
|
|
66
|
+
* License Copyright:
|
|
67
|
+
* ===
|
|
68
|
+
*
|
|
69
|
+
* Copyright 2010-2021 Mike Bostock
|
|
70
|
+
*
|
|
71
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
72
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
73
|
+
* and this permission notice appear in all copies.
|
|
74
|
+
*
|
|
75
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
76
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
77
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
78
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
79
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
80
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
81
|
+
* THIS SOFTWARE.
|
|
82
|
+
*
|
|
83
|
+
*
|
|
84
|
+
* ---
|
|
85
|
+
*
|
|
86
|
+
* Name: d3-color
|
|
87
|
+
* Version: 3.1.0
|
|
88
|
+
* License: ISC
|
|
89
|
+
* Private: false
|
|
90
|
+
* Description: Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).
|
|
91
|
+
* Repository: git+https://github.com/d3/d3-color.git
|
|
92
|
+
* Homepage: https://d3js.org/d3-color/
|
|
93
|
+
* Author: Mike Bostock (http://bost.ocks.org/mike)
|
|
94
|
+
* License Copyright:
|
|
95
|
+
* ===
|
|
96
|
+
*
|
|
97
|
+
* Copyright 2010-2022 Mike Bostock
|
|
98
|
+
*
|
|
99
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
100
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
101
|
+
* and this permission notice appear in all copies.
|
|
102
|
+
*
|
|
103
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
104
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
105
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
106
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
107
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
108
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
109
|
+
* THIS SOFTWARE.
|
|
110
|
+
*
|
|
111
|
+
*
|
|
112
|
+
* ---
|
|
113
|
+
*
|
|
114
|
+
* Name: d3-interpolate
|
|
115
|
+
* Version: 3.0.1
|
|
116
|
+
* License: ISC
|
|
117
|
+
* Private: false
|
|
118
|
+
* Description: Interpolate numbers, colors, strings, arrays, objects, whatever!
|
|
119
|
+
* Repository: git+https://github.com/d3/d3-interpolate.git
|
|
120
|
+
* Homepage: https://d3js.org/d3-interpolate/
|
|
121
|
+
* Author: Mike Bostock (http://bost.ocks.org/mike)
|
|
122
|
+
* License Copyright:
|
|
123
|
+
* ===
|
|
124
|
+
*
|
|
125
|
+
* Copyright 2010-2021 Mike Bostock
|
|
126
|
+
*
|
|
127
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
128
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
129
|
+
* and this permission notice appear in all copies.
|
|
130
|
+
*
|
|
131
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
132
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
133
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
134
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
135
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
136
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
137
|
+
* THIS SOFTWARE.
|
|
138
|
+
*
|
|
139
|
+
*
|
|
140
|
+
* ---
|
|
141
|
+
*
|
|
142
|
+
* Name: d3-format
|
|
143
|
+
* Version: 3.1.0
|
|
144
|
+
* License: ISC
|
|
145
|
+
* Private: false
|
|
146
|
+
* Description: Format numbers for human consumption.
|
|
147
|
+
* Repository: git+https://github.com/d3/d3-format.git
|
|
148
|
+
* Homepage: https://d3js.org/d3-format/
|
|
149
|
+
* Author: Mike Bostock (http://bost.ocks.org/mike)
|
|
150
|
+
* License Copyright:
|
|
151
|
+
* ===
|
|
152
|
+
*
|
|
153
|
+
* Copyright 2010-2021 Mike Bostock
|
|
154
|
+
*
|
|
155
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
156
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
157
|
+
* and this permission notice appear in all copies.
|
|
158
|
+
*
|
|
159
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
160
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
161
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
162
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
163
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
164
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
165
|
+
* THIS SOFTWARE.
|
|
166
|
+
*
|
|
167
|
+
*
|
|
168
|
+
* ---
|
|
169
|
+
*
|
|
170
|
+
* Name: d3-time
|
|
171
|
+
* Version: 3.0.0
|
|
172
|
+
* License: ISC
|
|
173
|
+
* Private: false
|
|
174
|
+
* Description: A calculator for humanity’s peculiar conventions of time.
|
|
175
|
+
* Repository: git+https://github.com/d3/d3-time.git
|
|
176
|
+
* Homepage: https://d3js.org/d3-time/
|
|
177
|
+
* Author: Mike Bostock (http://bost.ocks.org/mike)
|
|
178
|
+
* License Copyright:
|
|
179
|
+
* ===
|
|
180
|
+
*
|
|
181
|
+
* Copyright 2010-2021 Mike Bostock
|
|
182
|
+
*
|
|
183
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
184
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
185
|
+
* and this permission notice appear in all copies.
|
|
186
|
+
*
|
|
187
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
188
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
189
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
190
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
191
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
192
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
193
|
+
* THIS SOFTWARE.
|
|
194
|
+
*
|
|
195
|
+
*
|
|
196
|
+
* ---
|
|
197
|
+
*
|
|
198
|
+
* Name: d3-time-format
|
|
199
|
+
* Version: 4.1.0
|
|
200
|
+
* License: ISC
|
|
201
|
+
* Private: false
|
|
202
|
+
* Description: A JavaScript time formatter and parser inspired by strftime and strptime.
|
|
203
|
+
* Repository: git+https://github.com/d3/d3-time-format.git
|
|
204
|
+
* Homepage: https://d3js.org/d3-time-format/
|
|
205
|
+
* Author: Mike Bostock (http://bost.ocks.org/mike)
|
|
206
|
+
* License Copyright:
|
|
207
|
+
* ===
|
|
208
|
+
*
|
|
209
|
+
* Copyright 2010-2021 Mike Bostock
|
|
210
|
+
*
|
|
211
|
+
* Permission to use, copy, modify, and/or distribute this software for any purpose
|
|
212
|
+
* with or without fee is hereby granted, provided that the above copyright notice
|
|
213
|
+
* and this permission notice appear in all copies.
|
|
214
|
+
*
|
|
215
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
216
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
217
|
+
* FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
218
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
219
|
+
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
220
|
+
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
|
221
|
+
* THIS SOFTWARE.
|
|
222
|
+
*/
|
|
223
|
+
function ascending(a, b) {
|
|
224
|
+
return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function descending(a, b) {
|
|
228
|
+
return a == null || b == null ? NaN
|
|
229
|
+
: b < a ? -1
|
|
230
|
+
: b > a ? 1
|
|
231
|
+
: b >= a ? 0
|
|
232
|
+
: NaN;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function bisector(f) {
|
|
236
|
+
let compare1, compare2, delta;
|
|
237
|
+
|
|
238
|
+
// If an accessor is specified, promote it to a comparator. In this case we
|
|
239
|
+
// can test whether the search value is (self-) comparable. We can’t do this
|
|
240
|
+
// for a comparator (except for specific, known comparators) because we can’t
|
|
241
|
+
// tell if the comparator is symmetric, and an asymmetric comparator can’t be
|
|
242
|
+
// used to test whether a single value is comparable.
|
|
243
|
+
if (f.length !== 2) {
|
|
244
|
+
compare1 = ascending;
|
|
245
|
+
compare2 = (d, x) => ascending(f(d), x);
|
|
246
|
+
delta = (d, x) => f(d) - x;
|
|
247
|
+
} else {
|
|
248
|
+
compare1 = f === ascending || f === descending ? f : zero$1;
|
|
249
|
+
compare2 = f;
|
|
250
|
+
delta = f;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function left(a, x, lo = 0, hi = a.length) {
|
|
254
|
+
if (lo < hi) {
|
|
255
|
+
if (compare1(x, x) !== 0) return hi;
|
|
256
|
+
do {
|
|
257
|
+
const mid = (lo + hi) >>> 1;
|
|
258
|
+
if (compare2(a[mid], x) < 0) lo = mid + 1;
|
|
259
|
+
else hi = mid;
|
|
260
|
+
} while (lo < hi);
|
|
261
|
+
}
|
|
262
|
+
return lo;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function right(a, x, lo = 0, hi = a.length) {
|
|
266
|
+
if (lo < hi) {
|
|
267
|
+
if (compare1(x, x) !== 0) return hi;
|
|
268
|
+
do {
|
|
269
|
+
const mid = (lo + hi) >>> 1;
|
|
270
|
+
if (compare2(a[mid], x) <= 0) lo = mid + 1;
|
|
271
|
+
else hi = mid;
|
|
272
|
+
} while (lo < hi);
|
|
273
|
+
}
|
|
274
|
+
return lo;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function center(a, x, lo = 0, hi = a.length) {
|
|
278
|
+
const i = left(a, x, lo, hi - 1);
|
|
279
|
+
return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
return {left, center, right};
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function zero$1() {
|
|
286
|
+
return 0;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function number$2(x) {
|
|
290
|
+
return x === null ? NaN : +x;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const ascendingBisect = bisector(ascending);
|
|
294
|
+
const bisectRight = ascendingBisect.right;
|
|
295
|
+
bisector(number$2).center;
|
|
296
|
+
var bisect = bisectRight;
|
|
297
|
+
|
|
298
|
+
class InternMap extends Map {
|
|
299
|
+
constructor(entries, key = keyof) {
|
|
300
|
+
super();
|
|
301
|
+
Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
|
|
302
|
+
if (entries != null) for (const [key, value] of entries) this.set(key, value);
|
|
303
|
+
}
|
|
304
|
+
get(key) {
|
|
305
|
+
return super.get(intern_get(this, key));
|
|
306
|
+
}
|
|
307
|
+
has(key) {
|
|
308
|
+
return super.has(intern_get(this, key));
|
|
309
|
+
}
|
|
310
|
+
set(key, value) {
|
|
311
|
+
return super.set(intern_set(this, key), value);
|
|
312
|
+
}
|
|
313
|
+
delete(key) {
|
|
314
|
+
return super.delete(intern_delete(this, key));
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function intern_get({_intern, _key}, value) {
|
|
319
|
+
const key = _key(value);
|
|
320
|
+
return _intern.has(key) ? _intern.get(key) : value;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
function intern_set({_intern, _key}, value) {
|
|
324
|
+
const key = _key(value);
|
|
325
|
+
if (_intern.has(key)) return _intern.get(key);
|
|
326
|
+
_intern.set(key, value);
|
|
327
|
+
return value;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function intern_delete({_intern, _key}, value) {
|
|
331
|
+
const key = _key(value);
|
|
332
|
+
if (_intern.has(key)) {
|
|
333
|
+
value = _intern.get(key);
|
|
334
|
+
_intern.delete(key);
|
|
335
|
+
}
|
|
336
|
+
return value;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
function keyof(value) {
|
|
340
|
+
return value !== null && typeof value === "object" ? value.valueOf() : value;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
var e10 = Math.sqrt(50),
|
|
344
|
+
e5 = Math.sqrt(10),
|
|
345
|
+
e2 = Math.sqrt(2);
|
|
346
|
+
|
|
347
|
+
function ticks(start, stop, count) {
|
|
348
|
+
var reverse,
|
|
349
|
+
i = -1,
|
|
350
|
+
n,
|
|
351
|
+
ticks,
|
|
352
|
+
step;
|
|
353
|
+
|
|
354
|
+
stop = +stop, start = +start, count = +count;
|
|
355
|
+
if (start === stop && count > 0) return [start];
|
|
356
|
+
if (reverse = stop < start) n = start, start = stop, stop = n;
|
|
357
|
+
if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
|
|
358
|
+
|
|
359
|
+
if (step > 0) {
|
|
360
|
+
let r0 = Math.round(start / step), r1 = Math.round(stop / step);
|
|
361
|
+
if (r0 * step < start) ++r0;
|
|
362
|
+
if (r1 * step > stop) --r1;
|
|
363
|
+
ticks = new Array(n = r1 - r0 + 1);
|
|
364
|
+
while (++i < n) ticks[i] = (r0 + i) * step;
|
|
365
|
+
} else {
|
|
366
|
+
step = -step;
|
|
367
|
+
let r0 = Math.round(start * step), r1 = Math.round(stop * step);
|
|
368
|
+
if (r0 / step < start) ++r0;
|
|
369
|
+
if (r1 / step > stop) --r1;
|
|
370
|
+
ticks = new Array(n = r1 - r0 + 1);
|
|
371
|
+
while (++i < n) ticks[i] = (r0 + i) / step;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
if (reverse) ticks.reverse();
|
|
375
|
+
|
|
376
|
+
return ticks;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
function tickIncrement(start, stop, count) {
|
|
380
|
+
var step = (stop - start) / Math.max(0, count),
|
|
381
|
+
power = Math.floor(Math.log(step) / Math.LN10),
|
|
382
|
+
error = step / Math.pow(10, power);
|
|
383
|
+
return power >= 0
|
|
384
|
+
? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
|
|
385
|
+
: -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
function tickStep(start, stop, count) {
|
|
389
|
+
var step0 = Math.abs(stop - start) / Math.max(0, count),
|
|
390
|
+
step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
|
|
391
|
+
error = step0 / step1;
|
|
392
|
+
if (error >= e10) step1 *= 10;
|
|
393
|
+
else if (error >= e5) step1 *= 5;
|
|
394
|
+
else if (error >= e2) step1 *= 2;
|
|
395
|
+
return stop < start ? -step1 : step1;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function range(start, stop, step) {
|
|
399
|
+
start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
|
|
400
|
+
|
|
401
|
+
var i = -1,
|
|
402
|
+
n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
|
|
403
|
+
range = new Array(n);
|
|
404
|
+
|
|
405
|
+
while (++i < n) {
|
|
406
|
+
range[i] = start + i * step;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return range;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
function initRange(domain, range) {
|
|
413
|
+
switch (arguments.length) {
|
|
414
|
+
case 0: break;
|
|
415
|
+
case 1: this.range(domain); break;
|
|
416
|
+
default: this.range(range).domain(domain); break;
|
|
417
|
+
}
|
|
418
|
+
return this;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
const implicit = Symbol("implicit");
|
|
422
|
+
|
|
423
|
+
function ordinal() {
|
|
424
|
+
var index = new InternMap(),
|
|
425
|
+
domain = [],
|
|
426
|
+
range = [],
|
|
427
|
+
unknown = implicit;
|
|
428
|
+
|
|
429
|
+
function scale(d) {
|
|
430
|
+
let i = index.get(d);
|
|
431
|
+
if (i === undefined) {
|
|
432
|
+
if (unknown !== implicit) return unknown;
|
|
433
|
+
index.set(d, i = domain.push(d) - 1);
|
|
434
|
+
}
|
|
435
|
+
return range[i % range.length];
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
scale.domain = function(_) {
|
|
439
|
+
if (!arguments.length) return domain.slice();
|
|
440
|
+
domain = [], index = new InternMap();
|
|
441
|
+
for (const value of _) {
|
|
442
|
+
if (index.has(value)) continue;
|
|
443
|
+
index.set(value, domain.push(value) - 1);
|
|
444
|
+
}
|
|
445
|
+
return scale;
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
scale.range = function(_) {
|
|
449
|
+
return arguments.length ? (range = Array.from(_), scale) : range.slice();
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
scale.unknown = function(_) {
|
|
453
|
+
return arguments.length ? (unknown = _, scale) : unknown;
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
scale.copy = function() {
|
|
457
|
+
return ordinal(domain, range).unknown(unknown);
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
initRange.apply(scale, arguments);
|
|
461
|
+
|
|
462
|
+
return scale;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
function band() {
|
|
466
|
+
var scale = ordinal().unknown(undefined),
|
|
467
|
+
domain = scale.domain,
|
|
468
|
+
ordinalRange = scale.range,
|
|
469
|
+
r0 = 0,
|
|
470
|
+
r1 = 1,
|
|
471
|
+
step,
|
|
472
|
+
bandwidth,
|
|
473
|
+
round = false,
|
|
474
|
+
paddingInner = 0,
|
|
475
|
+
paddingOuter = 0,
|
|
476
|
+
align = 0.5;
|
|
477
|
+
|
|
478
|
+
delete scale.unknown;
|
|
479
|
+
|
|
480
|
+
function rescale() {
|
|
481
|
+
var n = domain().length,
|
|
482
|
+
reverse = r1 < r0,
|
|
483
|
+
start = reverse ? r1 : r0,
|
|
484
|
+
stop = reverse ? r0 : r1;
|
|
485
|
+
step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
|
|
486
|
+
if (round) step = Math.floor(step);
|
|
487
|
+
start += (stop - start - step * (n - paddingInner)) * align;
|
|
488
|
+
bandwidth = step * (1 - paddingInner);
|
|
489
|
+
if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
|
|
490
|
+
var values = range(n).map(function(i) { return start + step * i; });
|
|
491
|
+
return ordinalRange(reverse ? values.reverse() : values);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
scale.domain = function(_) {
|
|
495
|
+
return arguments.length ? (domain(_), rescale()) : domain();
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
scale.range = function(_) {
|
|
499
|
+
return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
scale.rangeRound = function(_) {
|
|
503
|
+
return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
scale.bandwidth = function() {
|
|
507
|
+
return bandwidth;
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
scale.step = function() {
|
|
511
|
+
return step;
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
scale.round = function(_) {
|
|
515
|
+
return arguments.length ? (round = !!_, rescale()) : round;
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
scale.padding = function(_) {
|
|
519
|
+
return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
scale.paddingInner = function(_) {
|
|
523
|
+
return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
scale.paddingOuter = function(_) {
|
|
527
|
+
return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
scale.align = function(_) {
|
|
531
|
+
return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
scale.copy = function() {
|
|
535
|
+
return band(domain(), [r0, r1])
|
|
536
|
+
.round(round)
|
|
537
|
+
.paddingInner(paddingInner)
|
|
538
|
+
.paddingOuter(paddingOuter)
|
|
539
|
+
.align(align);
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
return initRange.apply(rescale(), arguments);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
function define(constructor, factory, prototype) {
|
|
546
|
+
constructor.prototype = factory.prototype = prototype;
|
|
547
|
+
prototype.constructor = constructor;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
function extend(parent, definition) {
|
|
551
|
+
var prototype = Object.create(parent.prototype);
|
|
552
|
+
for (var key in definition) prototype[key] = definition[key];
|
|
553
|
+
return prototype;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
function Color() {}
|
|
557
|
+
|
|
558
|
+
var darker = 0.7;
|
|
559
|
+
var brighter = 1 / darker;
|
|
560
|
+
|
|
561
|
+
var reI = "\\s*([+-]?\\d+)\\s*",
|
|
562
|
+
reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
|
|
563
|
+
reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
|
|
564
|
+
reHex = /^#([0-9a-f]{3,8})$/,
|
|
565
|
+
reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),
|
|
566
|
+
reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),
|
|
567
|
+
reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),
|
|
568
|
+
reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),
|
|
569
|
+
reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),
|
|
570
|
+
reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
|
|
571
|
+
|
|
572
|
+
var named = {
|
|
573
|
+
aliceblue: 0xf0f8ff,
|
|
574
|
+
antiquewhite: 0xfaebd7,
|
|
575
|
+
aqua: 0x00ffff,
|
|
576
|
+
aquamarine: 0x7fffd4,
|
|
577
|
+
azure: 0xf0ffff,
|
|
578
|
+
beige: 0xf5f5dc,
|
|
579
|
+
bisque: 0xffe4c4,
|
|
580
|
+
black: 0x000000,
|
|
581
|
+
blanchedalmond: 0xffebcd,
|
|
582
|
+
blue: 0x0000ff,
|
|
583
|
+
blueviolet: 0x8a2be2,
|
|
584
|
+
brown: 0xa52a2a,
|
|
585
|
+
burlywood: 0xdeb887,
|
|
586
|
+
cadetblue: 0x5f9ea0,
|
|
587
|
+
chartreuse: 0x7fff00,
|
|
588
|
+
chocolate: 0xd2691e,
|
|
589
|
+
coral: 0xff7f50,
|
|
590
|
+
cornflowerblue: 0x6495ed,
|
|
591
|
+
cornsilk: 0xfff8dc,
|
|
592
|
+
crimson: 0xdc143c,
|
|
593
|
+
cyan: 0x00ffff,
|
|
594
|
+
darkblue: 0x00008b,
|
|
595
|
+
darkcyan: 0x008b8b,
|
|
596
|
+
darkgoldenrod: 0xb8860b,
|
|
597
|
+
darkgray: 0xa9a9a9,
|
|
598
|
+
darkgreen: 0x006400,
|
|
599
|
+
darkgrey: 0xa9a9a9,
|
|
600
|
+
darkkhaki: 0xbdb76b,
|
|
601
|
+
darkmagenta: 0x8b008b,
|
|
602
|
+
darkolivegreen: 0x556b2f,
|
|
603
|
+
darkorange: 0xff8c00,
|
|
604
|
+
darkorchid: 0x9932cc,
|
|
605
|
+
darkred: 0x8b0000,
|
|
606
|
+
darksalmon: 0xe9967a,
|
|
607
|
+
darkseagreen: 0x8fbc8f,
|
|
608
|
+
darkslateblue: 0x483d8b,
|
|
609
|
+
darkslategray: 0x2f4f4f,
|
|
610
|
+
darkslategrey: 0x2f4f4f,
|
|
611
|
+
darkturquoise: 0x00ced1,
|
|
612
|
+
darkviolet: 0x9400d3,
|
|
613
|
+
deeppink: 0xff1493,
|
|
614
|
+
deepskyblue: 0x00bfff,
|
|
615
|
+
dimgray: 0x696969,
|
|
616
|
+
dimgrey: 0x696969,
|
|
617
|
+
dodgerblue: 0x1e90ff,
|
|
618
|
+
firebrick: 0xb22222,
|
|
619
|
+
floralwhite: 0xfffaf0,
|
|
620
|
+
forestgreen: 0x228b22,
|
|
621
|
+
fuchsia: 0xff00ff,
|
|
622
|
+
gainsboro: 0xdcdcdc,
|
|
623
|
+
ghostwhite: 0xf8f8ff,
|
|
624
|
+
gold: 0xffd700,
|
|
625
|
+
goldenrod: 0xdaa520,
|
|
626
|
+
gray: 0x808080,
|
|
627
|
+
green: 0x008000,
|
|
628
|
+
greenyellow: 0xadff2f,
|
|
629
|
+
grey: 0x808080,
|
|
630
|
+
honeydew: 0xf0fff0,
|
|
631
|
+
hotpink: 0xff69b4,
|
|
632
|
+
indianred: 0xcd5c5c,
|
|
633
|
+
indigo: 0x4b0082,
|
|
634
|
+
ivory: 0xfffff0,
|
|
635
|
+
khaki: 0xf0e68c,
|
|
636
|
+
lavender: 0xe6e6fa,
|
|
637
|
+
lavenderblush: 0xfff0f5,
|
|
638
|
+
lawngreen: 0x7cfc00,
|
|
639
|
+
lemonchiffon: 0xfffacd,
|
|
640
|
+
lightblue: 0xadd8e6,
|
|
641
|
+
lightcoral: 0xf08080,
|
|
642
|
+
lightcyan: 0xe0ffff,
|
|
643
|
+
lightgoldenrodyellow: 0xfafad2,
|
|
644
|
+
lightgray: 0xd3d3d3,
|
|
645
|
+
lightgreen: 0x90ee90,
|
|
646
|
+
lightgrey: 0xd3d3d3,
|
|
647
|
+
lightpink: 0xffb6c1,
|
|
648
|
+
lightsalmon: 0xffa07a,
|
|
649
|
+
lightseagreen: 0x20b2aa,
|
|
650
|
+
lightskyblue: 0x87cefa,
|
|
651
|
+
lightslategray: 0x778899,
|
|
652
|
+
lightslategrey: 0x778899,
|
|
653
|
+
lightsteelblue: 0xb0c4de,
|
|
654
|
+
lightyellow: 0xffffe0,
|
|
655
|
+
lime: 0x00ff00,
|
|
656
|
+
limegreen: 0x32cd32,
|
|
657
|
+
linen: 0xfaf0e6,
|
|
658
|
+
magenta: 0xff00ff,
|
|
659
|
+
maroon: 0x800000,
|
|
660
|
+
mediumaquamarine: 0x66cdaa,
|
|
661
|
+
mediumblue: 0x0000cd,
|
|
662
|
+
mediumorchid: 0xba55d3,
|
|
663
|
+
mediumpurple: 0x9370db,
|
|
664
|
+
mediumseagreen: 0x3cb371,
|
|
665
|
+
mediumslateblue: 0x7b68ee,
|
|
666
|
+
mediumspringgreen: 0x00fa9a,
|
|
667
|
+
mediumturquoise: 0x48d1cc,
|
|
668
|
+
mediumvioletred: 0xc71585,
|
|
669
|
+
midnightblue: 0x191970,
|
|
670
|
+
mintcream: 0xf5fffa,
|
|
671
|
+
mistyrose: 0xffe4e1,
|
|
672
|
+
moccasin: 0xffe4b5,
|
|
673
|
+
navajowhite: 0xffdead,
|
|
674
|
+
navy: 0x000080,
|
|
675
|
+
oldlace: 0xfdf5e6,
|
|
676
|
+
olive: 0x808000,
|
|
677
|
+
olivedrab: 0x6b8e23,
|
|
678
|
+
orange: 0xffa500,
|
|
679
|
+
orangered: 0xff4500,
|
|
680
|
+
orchid: 0xda70d6,
|
|
681
|
+
palegoldenrod: 0xeee8aa,
|
|
682
|
+
palegreen: 0x98fb98,
|
|
683
|
+
paleturquoise: 0xafeeee,
|
|
684
|
+
palevioletred: 0xdb7093,
|
|
685
|
+
papayawhip: 0xffefd5,
|
|
686
|
+
peachpuff: 0xffdab9,
|
|
687
|
+
peru: 0xcd853f,
|
|
688
|
+
pink: 0xffc0cb,
|
|
689
|
+
plum: 0xdda0dd,
|
|
690
|
+
powderblue: 0xb0e0e6,
|
|
691
|
+
purple: 0x800080,
|
|
692
|
+
rebeccapurple: 0x663399,
|
|
693
|
+
red: 0xff0000,
|
|
694
|
+
rosybrown: 0xbc8f8f,
|
|
695
|
+
royalblue: 0x4169e1,
|
|
696
|
+
saddlebrown: 0x8b4513,
|
|
697
|
+
salmon: 0xfa8072,
|
|
698
|
+
sandybrown: 0xf4a460,
|
|
699
|
+
seagreen: 0x2e8b57,
|
|
700
|
+
seashell: 0xfff5ee,
|
|
701
|
+
sienna: 0xa0522d,
|
|
702
|
+
silver: 0xc0c0c0,
|
|
703
|
+
skyblue: 0x87ceeb,
|
|
704
|
+
slateblue: 0x6a5acd,
|
|
705
|
+
slategray: 0x708090,
|
|
706
|
+
slategrey: 0x708090,
|
|
707
|
+
snow: 0xfffafa,
|
|
708
|
+
springgreen: 0x00ff7f,
|
|
709
|
+
steelblue: 0x4682b4,
|
|
710
|
+
tan: 0xd2b48c,
|
|
711
|
+
teal: 0x008080,
|
|
712
|
+
thistle: 0xd8bfd8,
|
|
713
|
+
tomato: 0xff6347,
|
|
714
|
+
turquoise: 0x40e0d0,
|
|
715
|
+
violet: 0xee82ee,
|
|
716
|
+
wheat: 0xf5deb3,
|
|
717
|
+
white: 0xffffff,
|
|
718
|
+
whitesmoke: 0xf5f5f5,
|
|
719
|
+
yellow: 0xffff00,
|
|
720
|
+
yellowgreen: 0x9acd32
|
|
721
|
+
};
|
|
722
|
+
|
|
723
|
+
define(Color, color, {
|
|
724
|
+
copy(channels) {
|
|
725
|
+
return Object.assign(new this.constructor, this, channels);
|
|
726
|
+
},
|
|
727
|
+
displayable() {
|
|
728
|
+
return this.rgb().displayable();
|
|
729
|
+
},
|
|
730
|
+
hex: color_formatHex, // Deprecated! Use color.formatHex.
|
|
731
|
+
formatHex: color_formatHex,
|
|
732
|
+
formatHex8: color_formatHex8,
|
|
733
|
+
formatHsl: color_formatHsl,
|
|
734
|
+
formatRgb: color_formatRgb,
|
|
735
|
+
toString: color_formatRgb
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
function color_formatHex() {
|
|
739
|
+
return this.rgb().formatHex();
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
function color_formatHex8() {
|
|
743
|
+
return this.rgb().formatHex8();
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
function color_formatHsl() {
|
|
747
|
+
return hslConvert(this).formatHsl();
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
function color_formatRgb() {
|
|
751
|
+
return this.rgb().formatRgb();
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
function color(format) {
|
|
755
|
+
var m, l;
|
|
756
|
+
format = (format + "").trim().toLowerCase();
|
|
757
|
+
return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
|
|
758
|
+
: l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
|
|
759
|
+
: l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
|
|
760
|
+
: l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
|
|
761
|
+
: null) // invalid hex
|
|
762
|
+
: (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
|
|
763
|
+
: (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
|
|
764
|
+
: (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
|
|
765
|
+
: (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
|
|
766
|
+
: (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
|
|
767
|
+
: (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
|
|
768
|
+
: named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
|
|
769
|
+
: format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
|
|
770
|
+
: null;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
function rgbn(n) {
|
|
774
|
+
return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
function rgba(r, g, b, a) {
|
|
778
|
+
if (a <= 0) r = g = b = NaN;
|
|
779
|
+
return new Rgb(r, g, b, a);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
function rgbConvert(o) {
|
|
783
|
+
if (!(o instanceof Color)) o = color(o);
|
|
784
|
+
if (!o) return new Rgb;
|
|
785
|
+
o = o.rgb();
|
|
786
|
+
return new Rgb(o.r, o.g, o.b, o.opacity);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
function rgb$1(r, g, b, opacity) {
|
|
790
|
+
return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
function Rgb(r, g, b, opacity) {
|
|
794
|
+
this.r = +r;
|
|
795
|
+
this.g = +g;
|
|
796
|
+
this.b = +b;
|
|
797
|
+
this.opacity = +opacity;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
define(Rgb, rgb$1, extend(Color, {
|
|
801
|
+
brighter(k) {
|
|
802
|
+
k = k == null ? brighter : Math.pow(brighter, k);
|
|
803
|
+
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
|
|
804
|
+
},
|
|
805
|
+
darker(k) {
|
|
806
|
+
k = k == null ? darker : Math.pow(darker, k);
|
|
807
|
+
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
|
|
808
|
+
},
|
|
809
|
+
rgb() {
|
|
810
|
+
return this;
|
|
811
|
+
},
|
|
812
|
+
clamp() {
|
|
813
|
+
return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
|
|
814
|
+
},
|
|
815
|
+
displayable() {
|
|
816
|
+
return (-0.5 <= this.r && this.r < 255.5)
|
|
817
|
+
&& (-0.5 <= this.g && this.g < 255.5)
|
|
818
|
+
&& (-0.5 <= this.b && this.b < 255.5)
|
|
819
|
+
&& (0 <= this.opacity && this.opacity <= 1);
|
|
820
|
+
},
|
|
821
|
+
hex: rgb_formatHex, // Deprecated! Use color.formatHex.
|
|
822
|
+
formatHex: rgb_formatHex,
|
|
823
|
+
formatHex8: rgb_formatHex8,
|
|
824
|
+
formatRgb: rgb_formatRgb,
|
|
825
|
+
toString: rgb_formatRgb
|
|
826
|
+
}));
|
|
827
|
+
|
|
828
|
+
function rgb_formatHex() {
|
|
829
|
+
return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
function rgb_formatHex8() {
|
|
833
|
+
return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
function rgb_formatRgb() {
|
|
837
|
+
const a = clampa(this.opacity);
|
|
838
|
+
return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
function clampa(opacity) {
|
|
842
|
+
return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
function clampi(value) {
|
|
846
|
+
return Math.max(0, Math.min(255, Math.round(value) || 0));
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
function hex(value) {
|
|
850
|
+
value = clampi(value);
|
|
851
|
+
return (value < 16 ? "0" : "") + value.toString(16);
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
function hsla(h, s, l, a) {
|
|
855
|
+
if (a <= 0) h = s = l = NaN;
|
|
856
|
+
else if (l <= 0 || l >= 1) h = s = NaN;
|
|
857
|
+
else if (s <= 0) h = NaN;
|
|
858
|
+
return new Hsl(h, s, l, a);
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
function hslConvert(o) {
|
|
862
|
+
if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
|
|
863
|
+
if (!(o instanceof Color)) o = color(o);
|
|
864
|
+
if (!o) return new Hsl;
|
|
865
|
+
if (o instanceof Hsl) return o;
|
|
866
|
+
o = o.rgb();
|
|
867
|
+
var r = o.r / 255,
|
|
868
|
+
g = o.g / 255,
|
|
869
|
+
b = o.b / 255,
|
|
870
|
+
min = Math.min(r, g, b),
|
|
871
|
+
max = Math.max(r, g, b),
|
|
872
|
+
h = NaN,
|
|
873
|
+
s = max - min,
|
|
874
|
+
l = (max + min) / 2;
|
|
875
|
+
if (s) {
|
|
876
|
+
if (r === max) h = (g - b) / s + (g < b) * 6;
|
|
877
|
+
else if (g === max) h = (b - r) / s + 2;
|
|
878
|
+
else h = (r - g) / s + 4;
|
|
879
|
+
s /= l < 0.5 ? max + min : 2 - max - min;
|
|
880
|
+
h *= 60;
|
|
881
|
+
} else {
|
|
882
|
+
s = l > 0 && l < 1 ? 0 : h;
|
|
883
|
+
}
|
|
884
|
+
return new Hsl(h, s, l, o.opacity);
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
function hsl(h, s, l, opacity) {
|
|
888
|
+
return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
function Hsl(h, s, l, opacity) {
|
|
892
|
+
this.h = +h;
|
|
893
|
+
this.s = +s;
|
|
894
|
+
this.l = +l;
|
|
895
|
+
this.opacity = +opacity;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
define(Hsl, hsl, extend(Color, {
|
|
899
|
+
brighter(k) {
|
|
900
|
+
k = k == null ? brighter : Math.pow(brighter, k);
|
|
901
|
+
return new Hsl(this.h, this.s, this.l * k, this.opacity);
|
|
902
|
+
},
|
|
903
|
+
darker(k) {
|
|
904
|
+
k = k == null ? darker : Math.pow(darker, k);
|
|
905
|
+
return new Hsl(this.h, this.s, this.l * k, this.opacity);
|
|
906
|
+
},
|
|
907
|
+
rgb() {
|
|
908
|
+
var h = this.h % 360 + (this.h < 0) * 360,
|
|
909
|
+
s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
|
|
910
|
+
l = this.l,
|
|
911
|
+
m2 = l + (l < 0.5 ? l : 1 - l) * s,
|
|
912
|
+
m1 = 2 * l - m2;
|
|
913
|
+
return new Rgb(
|
|
914
|
+
hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
|
|
915
|
+
hsl2rgb(h, m1, m2),
|
|
916
|
+
hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
|
|
917
|
+
this.opacity
|
|
918
|
+
);
|
|
919
|
+
},
|
|
920
|
+
clamp() {
|
|
921
|
+
return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
|
|
922
|
+
},
|
|
923
|
+
displayable() {
|
|
924
|
+
return (0 <= this.s && this.s <= 1 || isNaN(this.s))
|
|
925
|
+
&& (0 <= this.l && this.l <= 1)
|
|
926
|
+
&& (0 <= this.opacity && this.opacity <= 1);
|
|
927
|
+
},
|
|
928
|
+
formatHsl() {
|
|
929
|
+
const a = clampa(this.opacity);
|
|
930
|
+
return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
|
|
931
|
+
}
|
|
932
|
+
}));
|
|
933
|
+
|
|
934
|
+
function clamph(value) {
|
|
935
|
+
value = (value || 0) % 360;
|
|
936
|
+
return value < 0 ? value + 360 : value;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
function clampt(value) {
|
|
940
|
+
return Math.max(0, Math.min(1, value || 0));
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
/* From FvD 13.37, CSS Color Module Level 3 */
|
|
944
|
+
function hsl2rgb(h, m1, m2) {
|
|
945
|
+
return (h < 60 ? m1 + (m2 - m1) * h / 60
|
|
946
|
+
: h < 180 ? m2
|
|
947
|
+
: h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
|
|
948
|
+
: m1) * 255;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
var constant = x => () => x;
|
|
952
|
+
|
|
953
|
+
function linear$1(a, d) {
|
|
954
|
+
return function(t) {
|
|
955
|
+
return a + t * d;
|
|
956
|
+
};
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
function exponential(a, b, y) {
|
|
960
|
+
return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
|
|
961
|
+
return Math.pow(a + t * b, y);
|
|
962
|
+
};
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
function gamma(y) {
|
|
966
|
+
return (y = +y) === 1 ? nogamma : function(a, b) {
|
|
967
|
+
return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);
|
|
968
|
+
};
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
function nogamma(a, b) {
|
|
972
|
+
var d = b - a;
|
|
973
|
+
return d ? linear$1(a, d) : constant(isNaN(a) ? b : a);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
var rgb = (function rgbGamma(y) {
|
|
977
|
+
var color = gamma(y);
|
|
978
|
+
|
|
979
|
+
function rgb(start, end) {
|
|
980
|
+
var r = color((start = rgb$1(start)).r, (end = rgb$1(end)).r),
|
|
981
|
+
g = color(start.g, end.g),
|
|
982
|
+
b = color(start.b, end.b),
|
|
983
|
+
opacity = nogamma(start.opacity, end.opacity);
|
|
984
|
+
return function(t) {
|
|
985
|
+
start.r = r(t);
|
|
986
|
+
start.g = g(t);
|
|
987
|
+
start.b = b(t);
|
|
988
|
+
start.opacity = opacity(t);
|
|
989
|
+
return start + "";
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
rgb.gamma = rgbGamma;
|
|
994
|
+
|
|
995
|
+
return rgb;
|
|
996
|
+
})(1);
|
|
997
|
+
|
|
998
|
+
function numberArray(a, b) {
|
|
999
|
+
if (!b) b = [];
|
|
1000
|
+
var n = a ? Math.min(b.length, a.length) : 0,
|
|
1001
|
+
c = b.slice(),
|
|
1002
|
+
i;
|
|
1003
|
+
return function(t) {
|
|
1004
|
+
for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
|
|
1005
|
+
return c;
|
|
1006
|
+
};
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
function isNumberArray(x) {
|
|
1010
|
+
return ArrayBuffer.isView(x) && !(x instanceof DataView);
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
function genericArray(a, b) {
|
|
1014
|
+
var nb = b ? b.length : 0,
|
|
1015
|
+
na = a ? Math.min(nb, a.length) : 0,
|
|
1016
|
+
x = new Array(na),
|
|
1017
|
+
c = new Array(nb),
|
|
1018
|
+
i;
|
|
1019
|
+
|
|
1020
|
+
for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
|
|
1021
|
+
for (; i < nb; ++i) c[i] = b[i];
|
|
1022
|
+
|
|
1023
|
+
return function(t) {
|
|
1024
|
+
for (i = 0; i < na; ++i) c[i] = x[i](t);
|
|
1025
|
+
return c;
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
function date$1(a, b) {
|
|
1030
|
+
var d = new Date;
|
|
1031
|
+
return a = +a, b = +b, function(t) {
|
|
1032
|
+
return d.setTime(a * (1 - t) + b * t), d;
|
|
1033
|
+
};
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
function interpolateNumber(a, b) {
|
|
1037
|
+
return a = +a, b = +b, function(t) {
|
|
1038
|
+
return a * (1 - t) + b * t;
|
|
1039
|
+
};
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
function object(a, b) {
|
|
1043
|
+
var i = {},
|
|
1044
|
+
c = {},
|
|
1045
|
+
k;
|
|
1046
|
+
|
|
1047
|
+
if (a === null || typeof a !== "object") a = {};
|
|
1048
|
+
if (b === null || typeof b !== "object") b = {};
|
|
1049
|
+
|
|
1050
|
+
for (k in b) {
|
|
1051
|
+
if (k in a) {
|
|
1052
|
+
i[k] = interpolate(a[k], b[k]);
|
|
1053
|
+
} else {
|
|
1054
|
+
c[k] = b[k];
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
return function(t) {
|
|
1059
|
+
for (k in i) c[k] = i[k](t);
|
|
1060
|
+
return c;
|
|
1061
|
+
};
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
|
|
1065
|
+
reB = new RegExp(reA.source, "g");
|
|
1066
|
+
|
|
1067
|
+
function zero(b) {
|
|
1068
|
+
return function() {
|
|
1069
|
+
return b;
|
|
1070
|
+
};
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
function one(b) {
|
|
1074
|
+
return function(t) {
|
|
1075
|
+
return b(t) + "";
|
|
1076
|
+
};
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
function string(a, b) {
|
|
1080
|
+
var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
|
|
1081
|
+
am, // current match in a
|
|
1082
|
+
bm, // current match in b
|
|
1083
|
+
bs, // string preceding current number in b, if any
|
|
1084
|
+
i = -1, // index in s
|
|
1085
|
+
s = [], // string constants and placeholders
|
|
1086
|
+
q = []; // number interpolators
|
|
1087
|
+
|
|
1088
|
+
// Coerce inputs to strings.
|
|
1089
|
+
a = a + "", b = b + "";
|
|
1090
|
+
|
|
1091
|
+
// Interpolate pairs of numbers in a & b.
|
|
1092
|
+
while ((am = reA.exec(a))
|
|
1093
|
+
&& (bm = reB.exec(b))) {
|
|
1094
|
+
if ((bs = bm.index) > bi) { // a string precedes the next number in b
|
|
1095
|
+
bs = b.slice(bi, bs);
|
|
1096
|
+
if (s[i]) s[i] += bs; // coalesce with previous string
|
|
1097
|
+
else s[++i] = bs;
|
|
1098
|
+
}
|
|
1099
|
+
if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
|
|
1100
|
+
if (s[i]) s[i] += bm; // coalesce with previous string
|
|
1101
|
+
else s[++i] = bm;
|
|
1102
|
+
} else { // interpolate non-matching numbers
|
|
1103
|
+
s[++i] = null;
|
|
1104
|
+
q.push({i: i, x: interpolateNumber(am, bm)});
|
|
1105
|
+
}
|
|
1106
|
+
bi = reB.lastIndex;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
// Add remains of b.
|
|
1110
|
+
if (bi < b.length) {
|
|
1111
|
+
bs = b.slice(bi);
|
|
1112
|
+
if (s[i]) s[i] += bs; // coalesce with previous string
|
|
1113
|
+
else s[++i] = bs;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
// Special optimization for only a single match.
|
|
1117
|
+
// Otherwise, interpolate each of the numbers and rejoin the string.
|
|
1118
|
+
return s.length < 2 ? (q[0]
|
|
1119
|
+
? one(q[0].x)
|
|
1120
|
+
: zero(b))
|
|
1121
|
+
: (b = q.length, function(t) {
|
|
1122
|
+
for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
|
|
1123
|
+
return s.join("");
|
|
1124
|
+
});
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
function interpolate(a, b) {
|
|
1128
|
+
var t = typeof b, c;
|
|
1129
|
+
return b == null || t === "boolean" ? constant(b)
|
|
1130
|
+
: (t === "number" ? interpolateNumber
|
|
1131
|
+
: t === "string" ? ((c = color(b)) ? (b = c, rgb) : string)
|
|
1132
|
+
: b instanceof color ? rgb
|
|
1133
|
+
: b instanceof Date ? date$1
|
|
1134
|
+
: isNumberArray(b) ? numberArray
|
|
1135
|
+
: Array.isArray(b) ? genericArray
|
|
1136
|
+
: typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
|
|
1137
|
+
: interpolateNumber)(a, b);
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
function interpolateRound(a, b) {
|
|
1141
|
+
return a = +a, b = +b, function(t) {
|
|
1142
|
+
return Math.round(a * (1 - t) + b * t);
|
|
1143
|
+
};
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
function constants(x) {
|
|
1147
|
+
return function() {
|
|
1148
|
+
return x;
|
|
1149
|
+
};
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
function number$1(x) {
|
|
1153
|
+
return +x;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
var unit = [0, 1];
|
|
1157
|
+
|
|
1158
|
+
function identity$1(x) {
|
|
1159
|
+
return x;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
function normalize(a, b) {
|
|
1163
|
+
return (b -= (a = +a))
|
|
1164
|
+
? function(x) { return (x - a) / b; }
|
|
1165
|
+
: constants(isNaN(b) ? NaN : 0.5);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
function clamper(a, b) {
|
|
1169
|
+
var t;
|
|
1170
|
+
if (a > b) t = a, a = b, b = t;
|
|
1171
|
+
return function(x) { return Math.max(a, Math.min(b, x)); };
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
|
|
1175
|
+
// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
|
|
1176
|
+
function bimap(domain, range, interpolate) {
|
|
1177
|
+
var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
|
|
1178
|
+
if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
|
|
1179
|
+
else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
|
|
1180
|
+
return function(x) { return r0(d0(x)); };
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
function polymap(domain, range, interpolate) {
|
|
1184
|
+
var j = Math.min(domain.length, range.length) - 1,
|
|
1185
|
+
d = new Array(j),
|
|
1186
|
+
r = new Array(j),
|
|
1187
|
+
i = -1;
|
|
1188
|
+
|
|
1189
|
+
// Reverse descending domains.
|
|
1190
|
+
if (domain[j] < domain[0]) {
|
|
1191
|
+
domain = domain.slice().reverse();
|
|
1192
|
+
range = range.slice().reverse();
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
while (++i < j) {
|
|
1196
|
+
d[i] = normalize(domain[i], domain[i + 1]);
|
|
1197
|
+
r[i] = interpolate(range[i], range[i + 1]);
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
return function(x) {
|
|
1201
|
+
var i = bisect(domain, x, 1, j) - 1;
|
|
1202
|
+
return r[i](d[i](x));
|
|
1203
|
+
};
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
function copy(source, target) {
|
|
1207
|
+
return target
|
|
1208
|
+
.domain(source.domain())
|
|
1209
|
+
.range(source.range())
|
|
1210
|
+
.interpolate(source.interpolate())
|
|
1211
|
+
.clamp(source.clamp())
|
|
1212
|
+
.unknown(source.unknown());
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
function transformer() {
|
|
1216
|
+
var domain = unit,
|
|
1217
|
+
range = unit,
|
|
1218
|
+
interpolate$1 = interpolate,
|
|
1219
|
+
transform,
|
|
1220
|
+
untransform,
|
|
1221
|
+
unknown,
|
|
1222
|
+
clamp = identity$1,
|
|
1223
|
+
piecewise,
|
|
1224
|
+
output,
|
|
1225
|
+
input;
|
|
1226
|
+
|
|
1227
|
+
function rescale() {
|
|
1228
|
+
var n = Math.min(domain.length, range.length);
|
|
1229
|
+
if (clamp !== identity$1) clamp = clamper(domain[0], domain[n - 1]);
|
|
1230
|
+
piecewise = n > 2 ? polymap : bimap;
|
|
1231
|
+
output = input = null;
|
|
1232
|
+
return scale;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
function scale(x) {
|
|
1236
|
+
return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
scale.invert = function(y) {
|
|
1240
|
+
return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));
|
|
1241
|
+
};
|
|
1242
|
+
|
|
1243
|
+
scale.domain = function(_) {
|
|
1244
|
+
return arguments.length ? (domain = Array.from(_, number$1), rescale()) : domain.slice();
|
|
1245
|
+
};
|
|
1246
|
+
|
|
1247
|
+
scale.range = function(_) {
|
|
1248
|
+
return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
|
|
1249
|
+
};
|
|
1250
|
+
|
|
1251
|
+
scale.rangeRound = function(_) {
|
|
1252
|
+
return range = Array.from(_), interpolate$1 = interpolateRound, rescale();
|
|
1253
|
+
};
|
|
1254
|
+
|
|
1255
|
+
scale.clamp = function(_) {
|
|
1256
|
+
return arguments.length ? (clamp = _ ? true : identity$1, rescale()) : clamp !== identity$1;
|
|
1257
|
+
};
|
|
1258
|
+
|
|
1259
|
+
scale.interpolate = function(_) {
|
|
1260
|
+
return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;
|
|
1261
|
+
};
|
|
1262
|
+
|
|
1263
|
+
scale.unknown = function(_) {
|
|
1264
|
+
return arguments.length ? (unknown = _, scale) : unknown;
|
|
1265
|
+
};
|
|
1266
|
+
|
|
1267
|
+
return function(t, u) {
|
|
1268
|
+
transform = t, untransform = u;
|
|
1269
|
+
return rescale();
|
|
1270
|
+
};
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
function continuous() {
|
|
1274
|
+
return transformer()(identity$1, identity$1);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
function formatDecimal(x) {
|
|
1278
|
+
return Math.abs(x = Math.round(x)) >= 1e21
|
|
1279
|
+
? x.toLocaleString("en").replace(/,/g, "")
|
|
1280
|
+
: x.toString(10);
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
// Computes the decimal coefficient and exponent of the specified number x with
|
|
1284
|
+
// significant digits p, where x is positive and p is in [1, 21] or undefined.
|
|
1285
|
+
// For example, formatDecimalParts(1.23) returns ["123", 0].
|
|
1286
|
+
function formatDecimalParts(x, p) {
|
|
1287
|
+
if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
|
|
1288
|
+
var i, coefficient = x.slice(0, i);
|
|
1289
|
+
|
|
1290
|
+
// The string returned by toExponential either has the form \d\.\d+e[-+]\d+
|
|
1291
|
+
// (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
|
|
1292
|
+
return [
|
|
1293
|
+
coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
|
|
1294
|
+
+x.slice(i + 1)
|
|
1295
|
+
];
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
function exponent(x) {
|
|
1299
|
+
return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
function formatGroup(grouping, thousands) {
|
|
1303
|
+
return function(value, width) {
|
|
1304
|
+
var i = value.length,
|
|
1305
|
+
t = [],
|
|
1306
|
+
j = 0,
|
|
1307
|
+
g = grouping[0],
|
|
1308
|
+
length = 0;
|
|
1309
|
+
|
|
1310
|
+
while (i > 0 && g > 0) {
|
|
1311
|
+
if (length + g + 1 > width) g = Math.max(1, width - length);
|
|
1312
|
+
t.push(value.substring(i -= g, i + g));
|
|
1313
|
+
if ((length += g + 1) > width) break;
|
|
1314
|
+
g = grouping[j = (j + 1) % grouping.length];
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
return t.reverse().join(thousands);
|
|
1318
|
+
};
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
function formatNumerals(numerals) {
|
|
1322
|
+
return function(value) {
|
|
1323
|
+
return value.replace(/[0-9]/g, function(i) {
|
|
1324
|
+
return numerals[+i];
|
|
1325
|
+
});
|
|
1326
|
+
};
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
// [[fill]align][sign][symbol][0][width][,][.precision][~][type]
|
|
1330
|
+
var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
|
|
1331
|
+
|
|
1332
|
+
function formatSpecifier(specifier) {
|
|
1333
|
+
if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
|
|
1334
|
+
var match;
|
|
1335
|
+
return new FormatSpecifier({
|
|
1336
|
+
fill: match[1],
|
|
1337
|
+
align: match[2],
|
|
1338
|
+
sign: match[3],
|
|
1339
|
+
symbol: match[4],
|
|
1340
|
+
zero: match[5],
|
|
1341
|
+
width: match[6],
|
|
1342
|
+
comma: match[7],
|
|
1343
|
+
precision: match[8] && match[8].slice(1),
|
|
1344
|
+
trim: match[9],
|
|
1345
|
+
type: match[10]
|
|
1346
|
+
});
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
|
|
1350
|
+
|
|
1351
|
+
function FormatSpecifier(specifier) {
|
|
1352
|
+
this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
|
|
1353
|
+
this.align = specifier.align === undefined ? ">" : specifier.align + "";
|
|
1354
|
+
this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
|
|
1355
|
+
this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
|
|
1356
|
+
this.zero = !!specifier.zero;
|
|
1357
|
+
this.width = specifier.width === undefined ? undefined : +specifier.width;
|
|
1358
|
+
this.comma = !!specifier.comma;
|
|
1359
|
+
this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
|
|
1360
|
+
this.trim = !!specifier.trim;
|
|
1361
|
+
this.type = specifier.type === undefined ? "" : specifier.type + "";
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
FormatSpecifier.prototype.toString = function() {
|
|
1365
|
+
return this.fill
|
|
1366
|
+
+ this.align
|
|
1367
|
+
+ this.sign
|
|
1368
|
+
+ this.symbol
|
|
1369
|
+
+ (this.zero ? "0" : "")
|
|
1370
|
+
+ (this.width === undefined ? "" : Math.max(1, this.width | 0))
|
|
1371
|
+
+ (this.comma ? "," : "")
|
|
1372
|
+
+ (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
|
|
1373
|
+
+ (this.trim ? "~" : "")
|
|
1374
|
+
+ this.type;
|
|
1375
|
+
};
|
|
1376
|
+
|
|
1377
|
+
// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
|
|
1378
|
+
function formatTrim(s) {
|
|
1379
|
+
out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
|
|
1380
|
+
switch (s[i]) {
|
|
1381
|
+
case ".": i0 = i1 = i; break;
|
|
1382
|
+
case "0": if (i0 === 0) i0 = i; i1 = i; break;
|
|
1383
|
+
default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1389
|
+
var prefixExponent;
|
|
1390
|
+
|
|
1391
|
+
function formatPrefixAuto(x, p) {
|
|
1392
|
+
var d = formatDecimalParts(x, p);
|
|
1393
|
+
if (!d) return x + "";
|
|
1394
|
+
var coefficient = d[0],
|
|
1395
|
+
exponent = d[1],
|
|
1396
|
+
i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
|
|
1397
|
+
n = coefficient.length;
|
|
1398
|
+
return i === n ? coefficient
|
|
1399
|
+
: i > n ? coefficient + new Array(i - n + 1).join("0")
|
|
1400
|
+
: i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
|
|
1401
|
+
: "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
function formatRounded(x, p) {
|
|
1405
|
+
var d = formatDecimalParts(x, p);
|
|
1406
|
+
if (!d) return x + "";
|
|
1407
|
+
var coefficient = d[0],
|
|
1408
|
+
exponent = d[1];
|
|
1409
|
+
return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
|
|
1410
|
+
: coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
|
|
1411
|
+
: coefficient + new Array(exponent - coefficient.length + 2).join("0");
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
var formatTypes = {
|
|
1415
|
+
"%": (x, p) => (x * 100).toFixed(p),
|
|
1416
|
+
"b": (x) => Math.round(x).toString(2),
|
|
1417
|
+
"c": (x) => x + "",
|
|
1418
|
+
"d": formatDecimal,
|
|
1419
|
+
"e": (x, p) => x.toExponential(p),
|
|
1420
|
+
"f": (x, p) => x.toFixed(p),
|
|
1421
|
+
"g": (x, p) => x.toPrecision(p),
|
|
1422
|
+
"o": (x) => Math.round(x).toString(8),
|
|
1423
|
+
"p": (x, p) => formatRounded(x * 100, p),
|
|
1424
|
+
"r": formatRounded,
|
|
1425
|
+
"s": formatPrefixAuto,
|
|
1426
|
+
"X": (x) => Math.round(x).toString(16).toUpperCase(),
|
|
1427
|
+
"x": (x) => Math.round(x).toString(16)
|
|
1428
|
+
};
|
|
1429
|
+
|
|
1430
|
+
function identity(x) {
|
|
1431
|
+
return x;
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
var map = Array.prototype.map,
|
|
1435
|
+
prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
|
|
1436
|
+
|
|
1437
|
+
function formatLocale$1(locale) {
|
|
1438
|
+
var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
|
|
1439
|
+
currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
|
|
1440
|
+
currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
|
|
1441
|
+
decimal = locale.decimal === undefined ? "." : locale.decimal + "",
|
|
1442
|
+
numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),
|
|
1443
|
+
percent = locale.percent === undefined ? "%" : locale.percent + "",
|
|
1444
|
+
minus = locale.minus === undefined ? "−" : locale.minus + "",
|
|
1445
|
+
nan = locale.nan === undefined ? "NaN" : locale.nan + "";
|
|
1446
|
+
|
|
1447
|
+
function newFormat(specifier) {
|
|
1448
|
+
specifier = formatSpecifier(specifier);
|
|
1449
|
+
|
|
1450
|
+
var fill = specifier.fill,
|
|
1451
|
+
align = specifier.align,
|
|
1452
|
+
sign = specifier.sign,
|
|
1453
|
+
symbol = specifier.symbol,
|
|
1454
|
+
zero = specifier.zero,
|
|
1455
|
+
width = specifier.width,
|
|
1456
|
+
comma = specifier.comma,
|
|
1457
|
+
precision = specifier.precision,
|
|
1458
|
+
trim = specifier.trim,
|
|
1459
|
+
type = specifier.type;
|
|
1460
|
+
|
|
1461
|
+
// The "n" type is an alias for ",g".
|
|
1462
|
+
if (type === "n") comma = true, type = "g";
|
|
1463
|
+
|
|
1464
|
+
// The "" type, and any invalid type, is an alias for ".12~g".
|
|
1465
|
+
else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";
|
|
1466
|
+
|
|
1467
|
+
// If zero fill is specified, padding goes after sign and before digits.
|
|
1468
|
+
if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
|
|
1469
|
+
|
|
1470
|
+
// Compute the prefix and suffix.
|
|
1471
|
+
// For SI-prefix, the suffix is lazily computed.
|
|
1472
|
+
var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
|
|
1473
|
+
suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
|
|
1474
|
+
|
|
1475
|
+
// What format function should we use?
|
|
1476
|
+
// Is this an integer type?
|
|
1477
|
+
// Can this type generate exponential notation?
|
|
1478
|
+
var formatType = formatTypes[type],
|
|
1479
|
+
maybeSuffix = /[defgprs%]/.test(type);
|
|
1480
|
+
|
|
1481
|
+
// Set the default precision if not specified,
|
|
1482
|
+
// or clamp the specified precision to the supported range.
|
|
1483
|
+
// For significant precision, it must be in [1, 21].
|
|
1484
|
+
// For fixed precision, it must be in [0, 20].
|
|
1485
|
+
precision = precision === undefined ? 6
|
|
1486
|
+
: /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
|
|
1487
|
+
: Math.max(0, Math.min(20, precision));
|
|
1488
|
+
|
|
1489
|
+
function format(value) {
|
|
1490
|
+
var valuePrefix = prefix,
|
|
1491
|
+
valueSuffix = suffix,
|
|
1492
|
+
i, n, c;
|
|
1493
|
+
|
|
1494
|
+
if (type === "c") {
|
|
1495
|
+
valueSuffix = formatType(value) + valueSuffix;
|
|
1496
|
+
value = "";
|
|
1497
|
+
} else {
|
|
1498
|
+
value = +value;
|
|
1499
|
+
|
|
1500
|
+
// Determine the sign. -0 is not less than 0, but 1 / -0 is!
|
|
1501
|
+
var valueNegative = value < 0 || 1 / value < 0;
|
|
1502
|
+
|
|
1503
|
+
// Perform the initial formatting.
|
|
1504
|
+
value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
|
|
1505
|
+
|
|
1506
|
+
// Trim insignificant zeros.
|
|
1507
|
+
if (trim) value = formatTrim(value);
|
|
1508
|
+
|
|
1509
|
+
// If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
|
|
1510
|
+
if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
|
|
1511
|
+
|
|
1512
|
+
// Compute the prefix and suffix.
|
|
1513
|
+
valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
|
|
1514
|
+
valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
|
|
1515
|
+
|
|
1516
|
+
// Break the formatted value into the integer “value” part that can be
|
|
1517
|
+
// grouped, and fractional or exponential “suffix” part that is not.
|
|
1518
|
+
if (maybeSuffix) {
|
|
1519
|
+
i = -1, n = value.length;
|
|
1520
|
+
while (++i < n) {
|
|
1521
|
+
if (c = value.charCodeAt(i), 48 > c || c > 57) {
|
|
1522
|
+
valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
|
|
1523
|
+
value = value.slice(0, i);
|
|
1524
|
+
break;
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
// If the fill character is not "0", grouping is applied before padding.
|
|
1531
|
+
if (comma && !zero) value = group(value, Infinity);
|
|
1532
|
+
|
|
1533
|
+
// Compute the padding.
|
|
1534
|
+
var length = valuePrefix.length + value.length + valueSuffix.length,
|
|
1535
|
+
padding = length < width ? new Array(width - length + 1).join(fill) : "";
|
|
1536
|
+
|
|
1537
|
+
// If the fill character is "0", grouping is applied after padding.
|
|
1538
|
+
if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
|
|
1539
|
+
|
|
1540
|
+
// Reconstruct the final output based on the desired alignment.
|
|
1541
|
+
switch (align) {
|
|
1542
|
+
case "<": value = valuePrefix + value + valueSuffix + padding; break;
|
|
1543
|
+
case "=": value = valuePrefix + padding + value + valueSuffix; break;
|
|
1544
|
+
case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
|
|
1545
|
+
default: value = padding + valuePrefix + value + valueSuffix; break;
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1548
|
+
return numerals(value);
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
format.toString = function() {
|
|
1552
|
+
return specifier + "";
|
|
1553
|
+
};
|
|
1554
|
+
|
|
1555
|
+
return format;
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
function formatPrefix(specifier, value) {
|
|
1559
|
+
var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
|
|
1560
|
+
e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
|
|
1561
|
+
k = Math.pow(10, -e),
|
|
1562
|
+
prefix = prefixes[8 + e / 3];
|
|
1563
|
+
return function(value) {
|
|
1564
|
+
return f(k * value) + prefix;
|
|
1565
|
+
};
|
|
1566
|
+
}
|
|
1567
|
+
|
|
1568
|
+
return {
|
|
1569
|
+
format: newFormat,
|
|
1570
|
+
formatPrefix: formatPrefix
|
|
1571
|
+
};
|
|
1572
|
+
}
|
|
1573
|
+
|
|
1574
|
+
var locale$1;
|
|
1575
|
+
var format;
|
|
1576
|
+
var formatPrefix;
|
|
1577
|
+
|
|
1578
|
+
defaultLocale$1({
|
|
1579
|
+
thousands: ",",
|
|
1580
|
+
grouping: [3],
|
|
1581
|
+
currency: ["$", ""]
|
|
1582
|
+
});
|
|
1583
|
+
|
|
1584
|
+
function defaultLocale$1(definition) {
|
|
1585
|
+
locale$1 = formatLocale$1(definition);
|
|
1586
|
+
format = locale$1.format;
|
|
1587
|
+
formatPrefix = locale$1.formatPrefix;
|
|
1588
|
+
return locale$1;
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
function precisionFixed(step) {
|
|
1592
|
+
return Math.max(0, -exponent(Math.abs(step)));
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
function precisionPrefix(step, value) {
|
|
1596
|
+
return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
function precisionRound(step, max) {
|
|
1600
|
+
step = Math.abs(step), max = Math.abs(max) - step;
|
|
1601
|
+
return Math.max(0, exponent(max) - exponent(step)) + 1;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
function tickFormat(start, stop, count, specifier) {
|
|
1605
|
+
var step = tickStep(start, stop, count),
|
|
1606
|
+
precision;
|
|
1607
|
+
specifier = formatSpecifier(specifier == null ? ",f" : specifier);
|
|
1608
|
+
switch (specifier.type) {
|
|
1609
|
+
case "s": {
|
|
1610
|
+
var value = Math.max(Math.abs(start), Math.abs(stop));
|
|
1611
|
+
if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
|
|
1612
|
+
return formatPrefix(specifier, value);
|
|
1613
|
+
}
|
|
1614
|
+
case "":
|
|
1615
|
+
case "e":
|
|
1616
|
+
case "g":
|
|
1617
|
+
case "p":
|
|
1618
|
+
case "r": {
|
|
1619
|
+
if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
|
|
1620
|
+
break;
|
|
1621
|
+
}
|
|
1622
|
+
case "f":
|
|
1623
|
+
case "%": {
|
|
1624
|
+
if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
|
|
1625
|
+
break;
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
return format(specifier);
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
function linearish(scale) {
|
|
1632
|
+
var domain = scale.domain;
|
|
1633
|
+
|
|
1634
|
+
scale.ticks = function(count) {
|
|
1635
|
+
var d = domain();
|
|
1636
|
+
return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
|
|
1637
|
+
};
|
|
1638
|
+
|
|
1639
|
+
scale.tickFormat = function(count, specifier) {
|
|
1640
|
+
var d = domain();
|
|
1641
|
+
return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
|
|
1642
|
+
};
|
|
1643
|
+
|
|
1644
|
+
scale.nice = function(count) {
|
|
1645
|
+
if (count == null) count = 10;
|
|
1646
|
+
|
|
1647
|
+
var d = domain();
|
|
1648
|
+
var i0 = 0;
|
|
1649
|
+
var i1 = d.length - 1;
|
|
1650
|
+
var start = d[i0];
|
|
1651
|
+
var stop = d[i1];
|
|
1652
|
+
var prestep;
|
|
1653
|
+
var step;
|
|
1654
|
+
var maxIter = 10;
|
|
1655
|
+
|
|
1656
|
+
if (stop < start) {
|
|
1657
|
+
step = start, start = stop, stop = step;
|
|
1658
|
+
step = i0, i0 = i1, i1 = step;
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
while (maxIter-- > 0) {
|
|
1662
|
+
step = tickIncrement(start, stop, count);
|
|
1663
|
+
if (step === prestep) {
|
|
1664
|
+
d[i0] = start;
|
|
1665
|
+
d[i1] = stop;
|
|
1666
|
+
return domain(d);
|
|
1667
|
+
} else if (step > 0) {
|
|
1668
|
+
start = Math.floor(start / step) * step;
|
|
1669
|
+
stop = Math.ceil(stop / step) * step;
|
|
1670
|
+
} else if (step < 0) {
|
|
1671
|
+
start = Math.ceil(start * step) / step;
|
|
1672
|
+
stop = Math.floor(stop * step) / step;
|
|
1673
|
+
} else {
|
|
1674
|
+
break;
|
|
1675
|
+
}
|
|
1676
|
+
prestep = step;
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
return scale;
|
|
1680
|
+
};
|
|
1681
|
+
|
|
1682
|
+
return scale;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
function linear() {
|
|
1686
|
+
var scale = continuous();
|
|
1687
|
+
|
|
1688
|
+
scale.copy = function() {
|
|
1689
|
+
return copy(scale, linear());
|
|
1690
|
+
};
|
|
1691
|
+
|
|
1692
|
+
initRange.apply(scale, arguments);
|
|
1693
|
+
|
|
1694
|
+
return linearish(scale);
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
function nice(domain, interval) {
|
|
1698
|
+
domain = domain.slice();
|
|
1699
|
+
|
|
1700
|
+
var i0 = 0,
|
|
1701
|
+
i1 = domain.length - 1,
|
|
1702
|
+
x0 = domain[i0],
|
|
1703
|
+
x1 = domain[i1],
|
|
1704
|
+
t;
|
|
1705
|
+
|
|
1706
|
+
if (x1 < x0) {
|
|
1707
|
+
t = i0, i0 = i1, i1 = t;
|
|
1708
|
+
t = x0, x0 = x1, x1 = t;
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
domain[i0] = interval.floor(x0);
|
|
1712
|
+
domain[i1] = interval.ceil(x1);
|
|
1713
|
+
return domain;
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
function transformLog(x) {
|
|
1717
|
+
return Math.log(x);
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
function transformExp(x) {
|
|
1721
|
+
return Math.exp(x);
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1724
|
+
function transformLogn(x) {
|
|
1725
|
+
return -Math.log(-x);
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
function transformExpn(x) {
|
|
1729
|
+
return -Math.exp(-x);
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
function pow10(x) {
|
|
1733
|
+
return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
|
|
1734
|
+
}
|
|
1735
|
+
|
|
1736
|
+
function powp(base) {
|
|
1737
|
+
return base === 10 ? pow10
|
|
1738
|
+
: base === Math.E ? Math.exp
|
|
1739
|
+
: x => Math.pow(base, x);
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
function logp(base) {
|
|
1743
|
+
return base === Math.E ? Math.log
|
|
1744
|
+
: base === 10 && Math.log10
|
|
1745
|
+
|| base === 2 && Math.log2
|
|
1746
|
+
|| (base = Math.log(base), x => Math.log(x) / base);
|
|
1747
|
+
}
|
|
1748
|
+
|
|
1749
|
+
function reflect(f) {
|
|
1750
|
+
return (x, k) => -f(-x, k);
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1753
|
+
function loggish(transform) {
|
|
1754
|
+
const scale = transform(transformLog, transformExp);
|
|
1755
|
+
const domain = scale.domain;
|
|
1756
|
+
let base = 10;
|
|
1757
|
+
let logs;
|
|
1758
|
+
let pows;
|
|
1759
|
+
|
|
1760
|
+
function rescale() {
|
|
1761
|
+
logs = logp(base), pows = powp(base);
|
|
1762
|
+
if (domain()[0] < 0) {
|
|
1763
|
+
logs = reflect(logs), pows = reflect(pows);
|
|
1764
|
+
transform(transformLogn, transformExpn);
|
|
1765
|
+
} else {
|
|
1766
|
+
transform(transformLog, transformExp);
|
|
1767
|
+
}
|
|
1768
|
+
return scale;
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
scale.base = function(_) {
|
|
1772
|
+
return arguments.length ? (base = +_, rescale()) : base;
|
|
1773
|
+
};
|
|
1774
|
+
|
|
1775
|
+
scale.domain = function(_) {
|
|
1776
|
+
return arguments.length ? (domain(_), rescale()) : domain();
|
|
1777
|
+
};
|
|
1778
|
+
|
|
1779
|
+
scale.ticks = count => {
|
|
1780
|
+
const d = domain();
|
|
1781
|
+
let u = d[0];
|
|
1782
|
+
let v = d[d.length - 1];
|
|
1783
|
+
const r = v < u;
|
|
1784
|
+
|
|
1785
|
+
if (r) ([u, v] = [v, u]);
|
|
1786
|
+
|
|
1787
|
+
let i = logs(u);
|
|
1788
|
+
let j = logs(v);
|
|
1789
|
+
let k;
|
|
1790
|
+
let t;
|
|
1791
|
+
const n = count == null ? 10 : +count;
|
|
1792
|
+
let z = [];
|
|
1793
|
+
|
|
1794
|
+
if (!(base % 1) && j - i < n) {
|
|
1795
|
+
i = Math.floor(i), j = Math.ceil(j);
|
|
1796
|
+
if (u > 0) for (; i <= j; ++i) {
|
|
1797
|
+
for (k = 1; k < base; ++k) {
|
|
1798
|
+
t = i < 0 ? k / pows(-i) : k * pows(i);
|
|
1799
|
+
if (t < u) continue;
|
|
1800
|
+
if (t > v) break;
|
|
1801
|
+
z.push(t);
|
|
1802
|
+
}
|
|
1803
|
+
} else for (; i <= j; ++i) {
|
|
1804
|
+
for (k = base - 1; k >= 1; --k) {
|
|
1805
|
+
t = i > 0 ? k / pows(-i) : k * pows(i);
|
|
1806
|
+
if (t < u) continue;
|
|
1807
|
+
if (t > v) break;
|
|
1808
|
+
z.push(t);
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
if (z.length * 2 < n) z = ticks(u, v, n);
|
|
1812
|
+
} else {
|
|
1813
|
+
z = ticks(i, j, Math.min(j - i, n)).map(pows);
|
|
1814
|
+
}
|
|
1815
|
+
return r ? z.reverse() : z;
|
|
1816
|
+
};
|
|
1817
|
+
|
|
1818
|
+
scale.tickFormat = (count, specifier) => {
|
|
1819
|
+
if (count == null) count = 10;
|
|
1820
|
+
if (specifier == null) specifier = base === 10 ? "s" : ",";
|
|
1821
|
+
if (typeof specifier !== "function") {
|
|
1822
|
+
if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;
|
|
1823
|
+
specifier = format(specifier);
|
|
1824
|
+
}
|
|
1825
|
+
if (count === Infinity) return specifier;
|
|
1826
|
+
const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
|
|
1827
|
+
return d => {
|
|
1828
|
+
let i = d / pows(Math.round(logs(d)));
|
|
1829
|
+
if (i * base < base - 0.5) i *= base;
|
|
1830
|
+
return i <= k ? specifier(d) : "";
|
|
1831
|
+
};
|
|
1832
|
+
};
|
|
1833
|
+
|
|
1834
|
+
scale.nice = () => {
|
|
1835
|
+
return domain(nice(domain(), {
|
|
1836
|
+
floor: x => pows(Math.floor(logs(x))),
|
|
1837
|
+
ceil: x => pows(Math.ceil(logs(x)))
|
|
1838
|
+
}));
|
|
1839
|
+
};
|
|
1840
|
+
|
|
1841
|
+
return scale;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
function log() {
|
|
1845
|
+
const scale = loggish(transformer()).domain([1, 10]);
|
|
1846
|
+
scale.copy = () => copy(scale, log()).base(scale.base());
|
|
1847
|
+
initRange.apply(scale, arguments);
|
|
1848
|
+
return scale;
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
var t0 = new Date,
|
|
1852
|
+
t1 = new Date;
|
|
1853
|
+
|
|
1854
|
+
function newInterval(floori, offseti, count, field) {
|
|
1855
|
+
|
|
1856
|
+
function interval(date) {
|
|
1857
|
+
return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1860
|
+
interval.floor = function(date) {
|
|
1861
|
+
return floori(date = new Date(+date)), date;
|
|
1862
|
+
};
|
|
1863
|
+
|
|
1864
|
+
interval.ceil = function(date) {
|
|
1865
|
+
return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
|
|
1866
|
+
};
|
|
1867
|
+
|
|
1868
|
+
interval.round = function(date) {
|
|
1869
|
+
var d0 = interval(date),
|
|
1870
|
+
d1 = interval.ceil(date);
|
|
1871
|
+
return date - d0 < d1 - date ? d0 : d1;
|
|
1872
|
+
};
|
|
1873
|
+
|
|
1874
|
+
interval.offset = function(date, step) {
|
|
1875
|
+
return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
|
|
1876
|
+
};
|
|
1877
|
+
|
|
1878
|
+
interval.range = function(start, stop, step) {
|
|
1879
|
+
var range = [], previous;
|
|
1880
|
+
start = interval.ceil(start);
|
|
1881
|
+
step = step == null ? 1 : Math.floor(step);
|
|
1882
|
+
if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
|
|
1883
|
+
do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
|
|
1884
|
+
while (previous < start && start < stop);
|
|
1885
|
+
return range;
|
|
1886
|
+
};
|
|
1887
|
+
|
|
1888
|
+
interval.filter = function(test) {
|
|
1889
|
+
return newInterval(function(date) {
|
|
1890
|
+
if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
|
|
1891
|
+
}, function(date, step) {
|
|
1892
|
+
if (date >= date) {
|
|
1893
|
+
if (step < 0) while (++step <= 0) {
|
|
1894
|
+
while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
|
|
1895
|
+
} else while (--step >= 0) {
|
|
1896
|
+
while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
});
|
|
1900
|
+
};
|
|
1901
|
+
|
|
1902
|
+
if (count) {
|
|
1903
|
+
interval.count = function(start, end) {
|
|
1904
|
+
t0.setTime(+start), t1.setTime(+end);
|
|
1905
|
+
floori(t0), floori(t1);
|
|
1906
|
+
return Math.floor(count(t0, t1));
|
|
1907
|
+
};
|
|
1908
|
+
|
|
1909
|
+
interval.every = function(step) {
|
|
1910
|
+
step = Math.floor(step);
|
|
1911
|
+
return !isFinite(step) || !(step > 0) ? null
|
|
1912
|
+
: !(step > 1) ? interval
|
|
1913
|
+
: interval.filter(field
|
|
1914
|
+
? function(d) { return field(d) % step === 0; }
|
|
1915
|
+
: function(d) { return interval.count(0, d) % step === 0; });
|
|
1916
|
+
};
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
return interval;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
var millisecond = newInterval(function() {
|
|
1923
|
+
// noop
|
|
1924
|
+
}, function(date, step) {
|
|
1925
|
+
date.setTime(+date + step);
|
|
1926
|
+
}, function(start, end) {
|
|
1927
|
+
return end - start;
|
|
1928
|
+
});
|
|
1929
|
+
|
|
1930
|
+
// An optimized implementation for this simple case.
|
|
1931
|
+
millisecond.every = function(k) {
|
|
1932
|
+
k = Math.floor(k);
|
|
1933
|
+
if (!isFinite(k) || !(k > 0)) return null;
|
|
1934
|
+
if (!(k > 1)) return millisecond;
|
|
1935
|
+
return newInterval(function(date) {
|
|
1936
|
+
date.setTime(Math.floor(date / k) * k);
|
|
1937
|
+
}, function(date, step) {
|
|
1938
|
+
date.setTime(+date + step * k);
|
|
1939
|
+
}, function(start, end) {
|
|
1940
|
+
return (end - start) / k;
|
|
1941
|
+
});
|
|
1942
|
+
};
|
|
1943
|
+
|
|
1944
|
+
var millisecond$1 = millisecond;
|
|
1945
|
+
millisecond.range;
|
|
1946
|
+
|
|
1947
|
+
const durationSecond = 1000;
|
|
1948
|
+
const durationMinute = durationSecond * 60;
|
|
1949
|
+
const durationHour = durationMinute * 60;
|
|
1950
|
+
const durationDay = durationHour * 24;
|
|
1951
|
+
const durationWeek = durationDay * 7;
|
|
1952
|
+
const durationMonth = durationDay * 30;
|
|
1953
|
+
const durationYear = durationDay * 365;
|
|
1954
|
+
|
|
1955
|
+
var second = newInterval(function(date) {
|
|
1956
|
+
date.setTime(date - date.getMilliseconds());
|
|
1957
|
+
}, function(date, step) {
|
|
1958
|
+
date.setTime(+date + step * durationSecond);
|
|
1959
|
+
}, function(start, end) {
|
|
1960
|
+
return (end - start) / durationSecond;
|
|
1961
|
+
}, function(date) {
|
|
1962
|
+
return date.getUTCSeconds();
|
|
1963
|
+
});
|
|
1964
|
+
|
|
1965
|
+
var utcSecond = second;
|
|
1966
|
+
second.range;
|
|
1967
|
+
|
|
1968
|
+
var minute = newInterval(function(date) {
|
|
1969
|
+
date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
|
|
1970
|
+
}, function(date, step) {
|
|
1971
|
+
date.setTime(+date + step * durationMinute);
|
|
1972
|
+
}, function(start, end) {
|
|
1973
|
+
return (end - start) / durationMinute;
|
|
1974
|
+
}, function(date) {
|
|
1975
|
+
return date.getMinutes();
|
|
1976
|
+
});
|
|
1977
|
+
|
|
1978
|
+
var timeMinute = minute;
|
|
1979
|
+
minute.range;
|
|
1980
|
+
|
|
1981
|
+
var hour = newInterval(function(date) {
|
|
1982
|
+
date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
|
|
1983
|
+
}, function(date, step) {
|
|
1984
|
+
date.setTime(+date + step * durationHour);
|
|
1985
|
+
}, function(start, end) {
|
|
1986
|
+
return (end - start) / durationHour;
|
|
1987
|
+
}, function(date) {
|
|
1988
|
+
return date.getHours();
|
|
1989
|
+
});
|
|
1990
|
+
|
|
1991
|
+
var timeHour = hour;
|
|
1992
|
+
hour.range;
|
|
1993
|
+
|
|
1994
|
+
var day = newInterval(
|
|
1995
|
+
date => date.setHours(0, 0, 0, 0),
|
|
1996
|
+
(date, step) => date.setDate(date.getDate() + step),
|
|
1997
|
+
(start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,
|
|
1998
|
+
date => date.getDate() - 1
|
|
1999
|
+
);
|
|
2000
|
+
|
|
2001
|
+
var timeDay = day;
|
|
2002
|
+
day.range;
|
|
2003
|
+
|
|
2004
|
+
function weekday(i) {
|
|
2005
|
+
return newInterval(function(date) {
|
|
2006
|
+
date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
|
|
2007
|
+
date.setHours(0, 0, 0, 0);
|
|
2008
|
+
}, function(date, step) {
|
|
2009
|
+
date.setDate(date.getDate() + step * 7);
|
|
2010
|
+
}, function(start, end) {
|
|
2011
|
+
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
|
|
2012
|
+
});
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
var sunday = weekday(0);
|
|
2016
|
+
var monday = weekday(1);
|
|
2017
|
+
var tuesday = weekday(2);
|
|
2018
|
+
var wednesday = weekday(3);
|
|
2019
|
+
var thursday = weekday(4);
|
|
2020
|
+
var friday = weekday(5);
|
|
2021
|
+
var saturday = weekday(6);
|
|
2022
|
+
|
|
2023
|
+
sunday.range;
|
|
2024
|
+
monday.range;
|
|
2025
|
+
tuesday.range;
|
|
2026
|
+
wednesday.range;
|
|
2027
|
+
thursday.range;
|
|
2028
|
+
friday.range;
|
|
2029
|
+
saturday.range;
|
|
2030
|
+
|
|
2031
|
+
var month = newInterval(function(date) {
|
|
2032
|
+
date.setDate(1);
|
|
2033
|
+
date.setHours(0, 0, 0, 0);
|
|
2034
|
+
}, function(date, step) {
|
|
2035
|
+
date.setMonth(date.getMonth() + step);
|
|
2036
|
+
}, function(start, end) {
|
|
2037
|
+
return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
|
|
2038
|
+
}, function(date) {
|
|
2039
|
+
return date.getMonth();
|
|
2040
|
+
});
|
|
2041
|
+
|
|
2042
|
+
var timeMonth = month;
|
|
2043
|
+
month.range;
|
|
2044
|
+
|
|
2045
|
+
var year = newInterval(function(date) {
|
|
2046
|
+
date.setMonth(0, 1);
|
|
2047
|
+
date.setHours(0, 0, 0, 0);
|
|
2048
|
+
}, function(date, step) {
|
|
2049
|
+
date.setFullYear(date.getFullYear() + step);
|
|
2050
|
+
}, function(start, end) {
|
|
2051
|
+
return end.getFullYear() - start.getFullYear();
|
|
2052
|
+
}, function(date) {
|
|
2053
|
+
return date.getFullYear();
|
|
2054
|
+
});
|
|
2055
|
+
|
|
2056
|
+
// An optimized implementation for this simple case.
|
|
2057
|
+
year.every = function(k) {
|
|
2058
|
+
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
|
|
2059
|
+
date.setFullYear(Math.floor(date.getFullYear() / k) * k);
|
|
2060
|
+
date.setMonth(0, 1);
|
|
2061
|
+
date.setHours(0, 0, 0, 0);
|
|
2062
|
+
}, function(date, step) {
|
|
2063
|
+
date.setFullYear(date.getFullYear() + step * k);
|
|
2064
|
+
});
|
|
2065
|
+
};
|
|
2066
|
+
|
|
2067
|
+
var timeYear = year;
|
|
2068
|
+
year.range;
|
|
2069
|
+
|
|
2070
|
+
var utcMinute = newInterval(function(date) {
|
|
2071
|
+
date.setUTCSeconds(0, 0);
|
|
2072
|
+
}, function(date, step) {
|
|
2073
|
+
date.setTime(+date + step * durationMinute);
|
|
2074
|
+
}, function(start, end) {
|
|
2075
|
+
return (end - start) / durationMinute;
|
|
2076
|
+
}, function(date) {
|
|
2077
|
+
return date.getUTCMinutes();
|
|
2078
|
+
});
|
|
2079
|
+
|
|
2080
|
+
var utcMinute$1 = utcMinute;
|
|
2081
|
+
utcMinute.range;
|
|
2082
|
+
|
|
2083
|
+
var utcHour = newInterval(function(date) {
|
|
2084
|
+
date.setUTCMinutes(0, 0, 0);
|
|
2085
|
+
}, function(date, step) {
|
|
2086
|
+
date.setTime(+date + step * durationHour);
|
|
2087
|
+
}, function(start, end) {
|
|
2088
|
+
return (end - start) / durationHour;
|
|
2089
|
+
}, function(date) {
|
|
2090
|
+
return date.getUTCHours();
|
|
2091
|
+
});
|
|
2092
|
+
|
|
2093
|
+
var utcHour$1 = utcHour;
|
|
2094
|
+
utcHour.range;
|
|
2095
|
+
|
|
2096
|
+
var utcDay = newInterval(function(date) {
|
|
2097
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
2098
|
+
}, function(date, step) {
|
|
2099
|
+
date.setUTCDate(date.getUTCDate() + step);
|
|
2100
|
+
}, function(start, end) {
|
|
2101
|
+
return (end - start) / durationDay;
|
|
2102
|
+
}, function(date) {
|
|
2103
|
+
return date.getUTCDate() - 1;
|
|
2104
|
+
});
|
|
2105
|
+
|
|
2106
|
+
var utcDay$1 = utcDay;
|
|
2107
|
+
utcDay.range;
|
|
2108
|
+
|
|
2109
|
+
function utcWeekday(i) {
|
|
2110
|
+
return newInterval(function(date) {
|
|
2111
|
+
date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
|
|
2112
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
2113
|
+
}, function(date, step) {
|
|
2114
|
+
date.setUTCDate(date.getUTCDate() + step * 7);
|
|
2115
|
+
}, function(start, end) {
|
|
2116
|
+
return (end - start) / durationWeek;
|
|
2117
|
+
});
|
|
2118
|
+
}
|
|
2119
|
+
|
|
2120
|
+
var utcSunday = utcWeekday(0);
|
|
2121
|
+
var utcMonday = utcWeekday(1);
|
|
2122
|
+
var utcTuesday = utcWeekday(2);
|
|
2123
|
+
var utcWednesday = utcWeekday(3);
|
|
2124
|
+
var utcThursday = utcWeekday(4);
|
|
2125
|
+
var utcFriday = utcWeekday(5);
|
|
2126
|
+
var utcSaturday = utcWeekday(6);
|
|
2127
|
+
|
|
2128
|
+
utcSunday.range;
|
|
2129
|
+
utcMonday.range;
|
|
2130
|
+
utcTuesday.range;
|
|
2131
|
+
utcWednesday.range;
|
|
2132
|
+
utcThursday.range;
|
|
2133
|
+
utcFriday.range;
|
|
2134
|
+
utcSaturday.range;
|
|
2135
|
+
|
|
2136
|
+
var utcMonth = newInterval(function(date) {
|
|
2137
|
+
date.setUTCDate(1);
|
|
2138
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
2139
|
+
}, function(date, step) {
|
|
2140
|
+
date.setUTCMonth(date.getUTCMonth() + step);
|
|
2141
|
+
}, function(start, end) {
|
|
2142
|
+
return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
|
|
2143
|
+
}, function(date) {
|
|
2144
|
+
return date.getUTCMonth();
|
|
2145
|
+
});
|
|
2146
|
+
|
|
2147
|
+
var utcMonth$1 = utcMonth;
|
|
2148
|
+
utcMonth.range;
|
|
2149
|
+
|
|
2150
|
+
var utcYear = newInterval(function(date) {
|
|
2151
|
+
date.setUTCMonth(0, 1);
|
|
2152
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
2153
|
+
}, function(date, step) {
|
|
2154
|
+
date.setUTCFullYear(date.getUTCFullYear() + step);
|
|
2155
|
+
}, function(start, end) {
|
|
2156
|
+
return end.getUTCFullYear() - start.getUTCFullYear();
|
|
2157
|
+
}, function(date) {
|
|
2158
|
+
return date.getUTCFullYear();
|
|
2159
|
+
});
|
|
2160
|
+
|
|
2161
|
+
// An optimized implementation for this simple case.
|
|
2162
|
+
utcYear.every = function(k) {
|
|
2163
|
+
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
|
|
2164
|
+
date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
|
|
2165
|
+
date.setUTCMonth(0, 1);
|
|
2166
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
2167
|
+
}, function(date, step) {
|
|
2168
|
+
date.setUTCFullYear(date.getUTCFullYear() + step * k);
|
|
2169
|
+
});
|
|
2170
|
+
};
|
|
2171
|
+
|
|
2172
|
+
var utcYear$1 = utcYear;
|
|
2173
|
+
utcYear.range;
|
|
2174
|
+
|
|
2175
|
+
function ticker(year, month, week, day, hour, minute) {
|
|
2176
|
+
|
|
2177
|
+
const tickIntervals = [
|
|
2178
|
+
[utcSecond, 1, durationSecond],
|
|
2179
|
+
[utcSecond, 5, 5 * durationSecond],
|
|
2180
|
+
[utcSecond, 15, 15 * durationSecond],
|
|
2181
|
+
[utcSecond, 30, 30 * durationSecond],
|
|
2182
|
+
[minute, 1, durationMinute],
|
|
2183
|
+
[minute, 5, 5 * durationMinute],
|
|
2184
|
+
[minute, 15, 15 * durationMinute],
|
|
2185
|
+
[minute, 30, 30 * durationMinute],
|
|
2186
|
+
[ hour, 1, durationHour ],
|
|
2187
|
+
[ hour, 3, 3 * durationHour ],
|
|
2188
|
+
[ hour, 6, 6 * durationHour ],
|
|
2189
|
+
[ hour, 12, 12 * durationHour ],
|
|
2190
|
+
[ day, 1, durationDay ],
|
|
2191
|
+
[ day, 2, 2 * durationDay ],
|
|
2192
|
+
[ week, 1, durationWeek ],
|
|
2193
|
+
[ month, 1, durationMonth ],
|
|
2194
|
+
[ month, 3, 3 * durationMonth ],
|
|
2195
|
+
[ year, 1, durationYear ]
|
|
2196
|
+
];
|
|
2197
|
+
|
|
2198
|
+
function ticks(start, stop, count) {
|
|
2199
|
+
const reverse = stop < start;
|
|
2200
|
+
if (reverse) [start, stop] = [stop, start];
|
|
2201
|
+
const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);
|
|
2202
|
+
const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop
|
|
2203
|
+
return reverse ? ticks.reverse() : ticks;
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2206
|
+
function tickInterval(start, stop, count) {
|
|
2207
|
+
const target = Math.abs(stop - start) / count;
|
|
2208
|
+
const i = bisector(([,, step]) => step).right(tickIntervals, target);
|
|
2209
|
+
if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));
|
|
2210
|
+
if (i === 0) return millisecond$1.every(Math.max(tickStep(start, stop, count), 1));
|
|
2211
|
+
const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
|
|
2212
|
+
return t.every(step);
|
|
2213
|
+
}
|
|
2214
|
+
|
|
2215
|
+
return [ticks, tickInterval];
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
ticker(utcYear$1, utcMonth$1, utcSunday, utcDay$1, utcHour$1, utcMinute$1);
|
|
2219
|
+
const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, sunday, timeDay, timeHour, timeMinute);
|
|
2220
|
+
|
|
2221
|
+
function localDate(d) {
|
|
2222
|
+
if (0 <= d.y && d.y < 100) {
|
|
2223
|
+
var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
|
|
2224
|
+
date.setFullYear(d.y);
|
|
2225
|
+
return date;
|
|
2226
|
+
}
|
|
2227
|
+
return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
function utcDate(d) {
|
|
2231
|
+
if (0 <= d.y && d.y < 100) {
|
|
2232
|
+
var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
|
|
2233
|
+
date.setUTCFullYear(d.y);
|
|
2234
|
+
return date;
|
|
2235
|
+
}
|
|
2236
|
+
return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
function newDate(y, m, d) {
|
|
2240
|
+
return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
|
|
2241
|
+
}
|
|
2242
|
+
|
|
2243
|
+
function formatLocale(locale) {
|
|
2244
|
+
var locale_dateTime = locale.dateTime,
|
|
2245
|
+
locale_date = locale.date,
|
|
2246
|
+
locale_time = locale.time,
|
|
2247
|
+
locale_periods = locale.periods,
|
|
2248
|
+
locale_weekdays = locale.days,
|
|
2249
|
+
locale_shortWeekdays = locale.shortDays,
|
|
2250
|
+
locale_months = locale.months,
|
|
2251
|
+
locale_shortMonths = locale.shortMonths;
|
|
2252
|
+
|
|
2253
|
+
var periodRe = formatRe(locale_periods),
|
|
2254
|
+
periodLookup = formatLookup(locale_periods),
|
|
2255
|
+
weekdayRe = formatRe(locale_weekdays),
|
|
2256
|
+
weekdayLookup = formatLookup(locale_weekdays),
|
|
2257
|
+
shortWeekdayRe = formatRe(locale_shortWeekdays),
|
|
2258
|
+
shortWeekdayLookup = formatLookup(locale_shortWeekdays),
|
|
2259
|
+
monthRe = formatRe(locale_months),
|
|
2260
|
+
monthLookup = formatLookup(locale_months),
|
|
2261
|
+
shortMonthRe = formatRe(locale_shortMonths),
|
|
2262
|
+
shortMonthLookup = formatLookup(locale_shortMonths);
|
|
2263
|
+
|
|
2264
|
+
var formats = {
|
|
2265
|
+
"a": formatShortWeekday,
|
|
2266
|
+
"A": formatWeekday,
|
|
2267
|
+
"b": formatShortMonth,
|
|
2268
|
+
"B": formatMonth,
|
|
2269
|
+
"c": null,
|
|
2270
|
+
"d": formatDayOfMonth,
|
|
2271
|
+
"e": formatDayOfMonth,
|
|
2272
|
+
"f": formatMicroseconds,
|
|
2273
|
+
"g": formatYearISO,
|
|
2274
|
+
"G": formatFullYearISO,
|
|
2275
|
+
"H": formatHour24,
|
|
2276
|
+
"I": formatHour12,
|
|
2277
|
+
"j": formatDayOfYear,
|
|
2278
|
+
"L": formatMilliseconds,
|
|
2279
|
+
"m": formatMonthNumber,
|
|
2280
|
+
"M": formatMinutes,
|
|
2281
|
+
"p": formatPeriod,
|
|
2282
|
+
"q": formatQuarter,
|
|
2283
|
+
"Q": formatUnixTimestamp,
|
|
2284
|
+
"s": formatUnixTimestampSeconds,
|
|
2285
|
+
"S": formatSeconds,
|
|
2286
|
+
"u": formatWeekdayNumberMonday,
|
|
2287
|
+
"U": formatWeekNumberSunday,
|
|
2288
|
+
"V": formatWeekNumberISO,
|
|
2289
|
+
"w": formatWeekdayNumberSunday,
|
|
2290
|
+
"W": formatWeekNumberMonday,
|
|
2291
|
+
"x": null,
|
|
2292
|
+
"X": null,
|
|
2293
|
+
"y": formatYear,
|
|
2294
|
+
"Y": formatFullYear,
|
|
2295
|
+
"Z": formatZone,
|
|
2296
|
+
"%": formatLiteralPercent
|
|
2297
|
+
};
|
|
2298
|
+
|
|
2299
|
+
var utcFormats = {
|
|
2300
|
+
"a": formatUTCShortWeekday,
|
|
2301
|
+
"A": formatUTCWeekday,
|
|
2302
|
+
"b": formatUTCShortMonth,
|
|
2303
|
+
"B": formatUTCMonth,
|
|
2304
|
+
"c": null,
|
|
2305
|
+
"d": formatUTCDayOfMonth,
|
|
2306
|
+
"e": formatUTCDayOfMonth,
|
|
2307
|
+
"f": formatUTCMicroseconds,
|
|
2308
|
+
"g": formatUTCYearISO,
|
|
2309
|
+
"G": formatUTCFullYearISO,
|
|
2310
|
+
"H": formatUTCHour24,
|
|
2311
|
+
"I": formatUTCHour12,
|
|
2312
|
+
"j": formatUTCDayOfYear,
|
|
2313
|
+
"L": formatUTCMilliseconds,
|
|
2314
|
+
"m": formatUTCMonthNumber,
|
|
2315
|
+
"M": formatUTCMinutes,
|
|
2316
|
+
"p": formatUTCPeriod,
|
|
2317
|
+
"q": formatUTCQuarter,
|
|
2318
|
+
"Q": formatUnixTimestamp,
|
|
2319
|
+
"s": formatUnixTimestampSeconds,
|
|
2320
|
+
"S": formatUTCSeconds,
|
|
2321
|
+
"u": formatUTCWeekdayNumberMonday,
|
|
2322
|
+
"U": formatUTCWeekNumberSunday,
|
|
2323
|
+
"V": formatUTCWeekNumberISO,
|
|
2324
|
+
"w": formatUTCWeekdayNumberSunday,
|
|
2325
|
+
"W": formatUTCWeekNumberMonday,
|
|
2326
|
+
"x": null,
|
|
2327
|
+
"X": null,
|
|
2328
|
+
"y": formatUTCYear,
|
|
2329
|
+
"Y": formatUTCFullYear,
|
|
2330
|
+
"Z": formatUTCZone,
|
|
2331
|
+
"%": formatLiteralPercent
|
|
2332
|
+
};
|
|
2333
|
+
|
|
2334
|
+
var parses = {
|
|
2335
|
+
"a": parseShortWeekday,
|
|
2336
|
+
"A": parseWeekday,
|
|
2337
|
+
"b": parseShortMonth,
|
|
2338
|
+
"B": parseMonth,
|
|
2339
|
+
"c": parseLocaleDateTime,
|
|
2340
|
+
"d": parseDayOfMonth,
|
|
2341
|
+
"e": parseDayOfMonth,
|
|
2342
|
+
"f": parseMicroseconds,
|
|
2343
|
+
"g": parseYear,
|
|
2344
|
+
"G": parseFullYear,
|
|
2345
|
+
"H": parseHour24,
|
|
2346
|
+
"I": parseHour24,
|
|
2347
|
+
"j": parseDayOfYear,
|
|
2348
|
+
"L": parseMilliseconds,
|
|
2349
|
+
"m": parseMonthNumber,
|
|
2350
|
+
"M": parseMinutes,
|
|
2351
|
+
"p": parsePeriod,
|
|
2352
|
+
"q": parseQuarter,
|
|
2353
|
+
"Q": parseUnixTimestamp,
|
|
2354
|
+
"s": parseUnixTimestampSeconds,
|
|
2355
|
+
"S": parseSeconds,
|
|
2356
|
+
"u": parseWeekdayNumberMonday,
|
|
2357
|
+
"U": parseWeekNumberSunday,
|
|
2358
|
+
"V": parseWeekNumberISO,
|
|
2359
|
+
"w": parseWeekdayNumberSunday,
|
|
2360
|
+
"W": parseWeekNumberMonday,
|
|
2361
|
+
"x": parseLocaleDate,
|
|
2362
|
+
"X": parseLocaleTime,
|
|
2363
|
+
"y": parseYear,
|
|
2364
|
+
"Y": parseFullYear,
|
|
2365
|
+
"Z": parseZone,
|
|
2366
|
+
"%": parseLiteralPercent
|
|
2367
|
+
};
|
|
2368
|
+
|
|
2369
|
+
// These recursive directive definitions must be deferred.
|
|
2370
|
+
formats.x = newFormat(locale_date, formats);
|
|
2371
|
+
formats.X = newFormat(locale_time, formats);
|
|
2372
|
+
formats.c = newFormat(locale_dateTime, formats);
|
|
2373
|
+
utcFormats.x = newFormat(locale_date, utcFormats);
|
|
2374
|
+
utcFormats.X = newFormat(locale_time, utcFormats);
|
|
2375
|
+
utcFormats.c = newFormat(locale_dateTime, utcFormats);
|
|
2376
|
+
|
|
2377
|
+
function newFormat(specifier, formats) {
|
|
2378
|
+
return function(date) {
|
|
2379
|
+
var string = [],
|
|
2380
|
+
i = -1,
|
|
2381
|
+
j = 0,
|
|
2382
|
+
n = specifier.length,
|
|
2383
|
+
c,
|
|
2384
|
+
pad,
|
|
2385
|
+
format;
|
|
2386
|
+
|
|
2387
|
+
if (!(date instanceof Date)) date = new Date(+date);
|
|
2388
|
+
|
|
2389
|
+
while (++i < n) {
|
|
2390
|
+
if (specifier.charCodeAt(i) === 37) {
|
|
2391
|
+
string.push(specifier.slice(j, i));
|
|
2392
|
+
if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
|
|
2393
|
+
else pad = c === "e" ? " " : "0";
|
|
2394
|
+
if (format = formats[c]) c = format(date, pad);
|
|
2395
|
+
string.push(c);
|
|
2396
|
+
j = i + 1;
|
|
2397
|
+
}
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
string.push(specifier.slice(j, i));
|
|
2401
|
+
return string.join("");
|
|
2402
|
+
};
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2405
|
+
function newParse(specifier, Z) {
|
|
2406
|
+
return function(string) {
|
|
2407
|
+
var d = newDate(1900, undefined, 1),
|
|
2408
|
+
i = parseSpecifier(d, specifier, string += "", 0),
|
|
2409
|
+
week, day;
|
|
2410
|
+
if (i != string.length) return null;
|
|
2411
|
+
|
|
2412
|
+
// If a UNIX timestamp is specified, return it.
|
|
2413
|
+
if ("Q" in d) return new Date(d.Q);
|
|
2414
|
+
if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
|
|
2415
|
+
|
|
2416
|
+
// If this is utcParse, never use the local timezone.
|
|
2417
|
+
if (Z && !("Z" in d)) d.Z = 0;
|
|
2418
|
+
|
|
2419
|
+
// The am-pm flag is 0 for AM, and 1 for PM.
|
|
2420
|
+
if ("p" in d) d.H = d.H % 12 + d.p * 12;
|
|
2421
|
+
|
|
2422
|
+
// If the month was not specified, inherit from the quarter.
|
|
2423
|
+
if (d.m === undefined) d.m = "q" in d ? d.q : 0;
|
|
2424
|
+
|
|
2425
|
+
// Convert day-of-week and week-of-year to day-of-year.
|
|
2426
|
+
if ("V" in d) {
|
|
2427
|
+
if (d.V < 1 || d.V > 53) return null;
|
|
2428
|
+
if (!("w" in d)) d.w = 1;
|
|
2429
|
+
if ("Z" in d) {
|
|
2430
|
+
week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();
|
|
2431
|
+
week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);
|
|
2432
|
+
week = utcDay$1.offset(week, (d.V - 1) * 7);
|
|
2433
|
+
d.y = week.getUTCFullYear();
|
|
2434
|
+
d.m = week.getUTCMonth();
|
|
2435
|
+
d.d = week.getUTCDate() + (d.w + 6) % 7;
|
|
2436
|
+
} else {
|
|
2437
|
+
week = localDate(newDate(d.y, 0, 1)), day = week.getDay();
|
|
2438
|
+
week = day > 4 || day === 0 ? monday.ceil(week) : monday(week);
|
|
2439
|
+
week = timeDay.offset(week, (d.V - 1) * 7);
|
|
2440
|
+
d.y = week.getFullYear();
|
|
2441
|
+
d.m = week.getMonth();
|
|
2442
|
+
d.d = week.getDate() + (d.w + 6) % 7;
|
|
2443
|
+
}
|
|
2444
|
+
} else if ("W" in d || "U" in d) {
|
|
2445
|
+
if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
|
|
2446
|
+
day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
|
|
2447
|
+
d.m = 0;
|
|
2448
|
+
d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
|
|
2449
|
+
}
|
|
2450
|
+
|
|
2451
|
+
// If a time zone is specified, all fields are interpreted as UTC and then
|
|
2452
|
+
// offset according to the specified time zone.
|
|
2453
|
+
if ("Z" in d) {
|
|
2454
|
+
d.H += d.Z / 100 | 0;
|
|
2455
|
+
d.M += d.Z % 100;
|
|
2456
|
+
return utcDate(d);
|
|
2457
|
+
}
|
|
2458
|
+
|
|
2459
|
+
// Otherwise, all fields are in local time.
|
|
2460
|
+
return localDate(d);
|
|
2461
|
+
};
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2464
|
+
function parseSpecifier(d, specifier, string, j) {
|
|
2465
|
+
var i = 0,
|
|
2466
|
+
n = specifier.length,
|
|
2467
|
+
m = string.length,
|
|
2468
|
+
c,
|
|
2469
|
+
parse;
|
|
2470
|
+
|
|
2471
|
+
while (i < n) {
|
|
2472
|
+
if (j >= m) return -1;
|
|
2473
|
+
c = specifier.charCodeAt(i++);
|
|
2474
|
+
if (c === 37) {
|
|
2475
|
+
c = specifier.charAt(i++);
|
|
2476
|
+
parse = parses[c in pads ? specifier.charAt(i++) : c];
|
|
2477
|
+
if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
|
|
2478
|
+
} else if (c != string.charCodeAt(j++)) {
|
|
2479
|
+
return -1;
|
|
2480
|
+
}
|
|
2481
|
+
}
|
|
2482
|
+
|
|
2483
|
+
return j;
|
|
2484
|
+
}
|
|
2485
|
+
|
|
2486
|
+
function parsePeriod(d, string, i) {
|
|
2487
|
+
var n = periodRe.exec(string.slice(i));
|
|
2488
|
+
return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
|
|
2489
|
+
}
|
|
2490
|
+
|
|
2491
|
+
function parseShortWeekday(d, string, i) {
|
|
2492
|
+
var n = shortWeekdayRe.exec(string.slice(i));
|
|
2493
|
+
return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
|
|
2494
|
+
}
|
|
2495
|
+
|
|
2496
|
+
function parseWeekday(d, string, i) {
|
|
2497
|
+
var n = weekdayRe.exec(string.slice(i));
|
|
2498
|
+
return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2501
|
+
function parseShortMonth(d, string, i) {
|
|
2502
|
+
var n = shortMonthRe.exec(string.slice(i));
|
|
2503
|
+
return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
|
|
2504
|
+
}
|
|
2505
|
+
|
|
2506
|
+
function parseMonth(d, string, i) {
|
|
2507
|
+
var n = monthRe.exec(string.slice(i));
|
|
2508
|
+
return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
|
|
2509
|
+
}
|
|
2510
|
+
|
|
2511
|
+
function parseLocaleDateTime(d, string, i) {
|
|
2512
|
+
return parseSpecifier(d, locale_dateTime, string, i);
|
|
2513
|
+
}
|
|
2514
|
+
|
|
2515
|
+
function parseLocaleDate(d, string, i) {
|
|
2516
|
+
return parseSpecifier(d, locale_date, string, i);
|
|
2517
|
+
}
|
|
2518
|
+
|
|
2519
|
+
function parseLocaleTime(d, string, i) {
|
|
2520
|
+
return parseSpecifier(d, locale_time, string, i);
|
|
2521
|
+
}
|
|
2522
|
+
|
|
2523
|
+
function formatShortWeekday(d) {
|
|
2524
|
+
return locale_shortWeekdays[d.getDay()];
|
|
2525
|
+
}
|
|
2526
|
+
|
|
2527
|
+
function formatWeekday(d) {
|
|
2528
|
+
return locale_weekdays[d.getDay()];
|
|
2529
|
+
}
|
|
2530
|
+
|
|
2531
|
+
function formatShortMonth(d) {
|
|
2532
|
+
return locale_shortMonths[d.getMonth()];
|
|
2533
|
+
}
|
|
2534
|
+
|
|
2535
|
+
function formatMonth(d) {
|
|
2536
|
+
return locale_months[d.getMonth()];
|
|
2537
|
+
}
|
|
2538
|
+
|
|
2539
|
+
function formatPeriod(d) {
|
|
2540
|
+
return locale_periods[+(d.getHours() >= 12)];
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
function formatQuarter(d) {
|
|
2544
|
+
return 1 + ~~(d.getMonth() / 3);
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2547
|
+
function formatUTCShortWeekday(d) {
|
|
2548
|
+
return locale_shortWeekdays[d.getUTCDay()];
|
|
2549
|
+
}
|
|
2550
|
+
|
|
2551
|
+
function formatUTCWeekday(d) {
|
|
2552
|
+
return locale_weekdays[d.getUTCDay()];
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
function formatUTCShortMonth(d) {
|
|
2556
|
+
return locale_shortMonths[d.getUTCMonth()];
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2559
|
+
function formatUTCMonth(d) {
|
|
2560
|
+
return locale_months[d.getUTCMonth()];
|
|
2561
|
+
}
|
|
2562
|
+
|
|
2563
|
+
function formatUTCPeriod(d) {
|
|
2564
|
+
return locale_periods[+(d.getUTCHours() >= 12)];
|
|
2565
|
+
}
|
|
2566
|
+
|
|
2567
|
+
function formatUTCQuarter(d) {
|
|
2568
|
+
return 1 + ~~(d.getUTCMonth() / 3);
|
|
2569
|
+
}
|
|
2570
|
+
|
|
2571
|
+
return {
|
|
2572
|
+
format: function(specifier) {
|
|
2573
|
+
var f = newFormat(specifier += "", formats);
|
|
2574
|
+
f.toString = function() { return specifier; };
|
|
2575
|
+
return f;
|
|
2576
|
+
},
|
|
2577
|
+
parse: function(specifier) {
|
|
2578
|
+
var p = newParse(specifier += "", false);
|
|
2579
|
+
p.toString = function() { return specifier; };
|
|
2580
|
+
return p;
|
|
2581
|
+
},
|
|
2582
|
+
utcFormat: function(specifier) {
|
|
2583
|
+
var f = newFormat(specifier += "", utcFormats);
|
|
2584
|
+
f.toString = function() { return specifier; };
|
|
2585
|
+
return f;
|
|
2586
|
+
},
|
|
2587
|
+
utcParse: function(specifier) {
|
|
2588
|
+
var p = newParse(specifier += "", true);
|
|
2589
|
+
p.toString = function() { return specifier; };
|
|
2590
|
+
return p;
|
|
2591
|
+
}
|
|
2592
|
+
};
|
|
2593
|
+
}
|
|
2594
|
+
|
|
2595
|
+
var pads = {"-": "", "_": " ", "0": "0"},
|
|
2596
|
+
numberRe = /^\s*\d+/, // note: ignores next directive
|
|
2597
|
+
percentRe = /^%/,
|
|
2598
|
+
requoteRe = /[\\^$*+?|[\]().{}]/g;
|
|
2599
|
+
|
|
2600
|
+
function pad(value, fill, width) {
|
|
2601
|
+
var sign = value < 0 ? "-" : "",
|
|
2602
|
+
string = (sign ? -value : value) + "",
|
|
2603
|
+
length = string.length;
|
|
2604
|
+
return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
|
|
2605
|
+
}
|
|
2606
|
+
|
|
2607
|
+
function requote(s) {
|
|
2608
|
+
return s.replace(requoteRe, "\\$&");
|
|
2609
|
+
}
|
|
2610
|
+
|
|
2611
|
+
function formatRe(names) {
|
|
2612
|
+
return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
|
|
2613
|
+
}
|
|
2614
|
+
|
|
2615
|
+
function formatLookup(names) {
|
|
2616
|
+
return new Map(names.map((name, i) => [name.toLowerCase(), i]));
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2619
|
+
function parseWeekdayNumberSunday(d, string, i) {
|
|
2620
|
+
var n = numberRe.exec(string.slice(i, i + 1));
|
|
2621
|
+
return n ? (d.w = +n[0], i + n[0].length) : -1;
|
|
2622
|
+
}
|
|
2623
|
+
|
|
2624
|
+
function parseWeekdayNumberMonday(d, string, i) {
|
|
2625
|
+
var n = numberRe.exec(string.slice(i, i + 1));
|
|
2626
|
+
return n ? (d.u = +n[0], i + n[0].length) : -1;
|
|
2627
|
+
}
|
|
2628
|
+
|
|
2629
|
+
function parseWeekNumberSunday(d, string, i) {
|
|
2630
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2631
|
+
return n ? (d.U = +n[0], i + n[0].length) : -1;
|
|
2632
|
+
}
|
|
2633
|
+
|
|
2634
|
+
function parseWeekNumberISO(d, string, i) {
|
|
2635
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2636
|
+
return n ? (d.V = +n[0], i + n[0].length) : -1;
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
function parseWeekNumberMonday(d, string, i) {
|
|
2640
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2641
|
+
return n ? (d.W = +n[0], i + n[0].length) : -1;
|
|
2642
|
+
}
|
|
2643
|
+
|
|
2644
|
+
function parseFullYear(d, string, i) {
|
|
2645
|
+
var n = numberRe.exec(string.slice(i, i + 4));
|
|
2646
|
+
return n ? (d.y = +n[0], i + n[0].length) : -1;
|
|
2647
|
+
}
|
|
2648
|
+
|
|
2649
|
+
function parseYear(d, string, i) {
|
|
2650
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2651
|
+
return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2654
|
+
function parseZone(d, string, i) {
|
|
2655
|
+
var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
|
|
2656
|
+
return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
|
|
2657
|
+
}
|
|
2658
|
+
|
|
2659
|
+
function parseQuarter(d, string, i) {
|
|
2660
|
+
var n = numberRe.exec(string.slice(i, i + 1));
|
|
2661
|
+
return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
|
|
2662
|
+
}
|
|
2663
|
+
|
|
2664
|
+
function parseMonthNumber(d, string, i) {
|
|
2665
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2666
|
+
return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
|
|
2667
|
+
}
|
|
2668
|
+
|
|
2669
|
+
function parseDayOfMonth(d, string, i) {
|
|
2670
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2671
|
+
return n ? (d.d = +n[0], i + n[0].length) : -1;
|
|
2672
|
+
}
|
|
2673
|
+
|
|
2674
|
+
function parseDayOfYear(d, string, i) {
|
|
2675
|
+
var n = numberRe.exec(string.slice(i, i + 3));
|
|
2676
|
+
return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
function parseHour24(d, string, i) {
|
|
2680
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2681
|
+
return n ? (d.H = +n[0], i + n[0].length) : -1;
|
|
2682
|
+
}
|
|
2683
|
+
|
|
2684
|
+
function parseMinutes(d, string, i) {
|
|
2685
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2686
|
+
return n ? (d.M = +n[0], i + n[0].length) : -1;
|
|
2687
|
+
}
|
|
2688
|
+
|
|
2689
|
+
function parseSeconds(d, string, i) {
|
|
2690
|
+
var n = numberRe.exec(string.slice(i, i + 2));
|
|
2691
|
+
return n ? (d.S = +n[0], i + n[0].length) : -1;
|
|
2692
|
+
}
|
|
2693
|
+
|
|
2694
|
+
function parseMilliseconds(d, string, i) {
|
|
2695
|
+
var n = numberRe.exec(string.slice(i, i + 3));
|
|
2696
|
+
return n ? (d.L = +n[0], i + n[0].length) : -1;
|
|
2697
|
+
}
|
|
2698
|
+
|
|
2699
|
+
function parseMicroseconds(d, string, i) {
|
|
2700
|
+
var n = numberRe.exec(string.slice(i, i + 6));
|
|
2701
|
+
return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
|
|
2702
|
+
}
|
|
2703
|
+
|
|
2704
|
+
function parseLiteralPercent(d, string, i) {
|
|
2705
|
+
var n = percentRe.exec(string.slice(i, i + 1));
|
|
2706
|
+
return n ? i + n[0].length : -1;
|
|
2707
|
+
}
|
|
2708
|
+
|
|
2709
|
+
function parseUnixTimestamp(d, string, i) {
|
|
2710
|
+
var n = numberRe.exec(string.slice(i));
|
|
2711
|
+
return n ? (d.Q = +n[0], i + n[0].length) : -1;
|
|
2712
|
+
}
|
|
2713
|
+
|
|
2714
|
+
function parseUnixTimestampSeconds(d, string, i) {
|
|
2715
|
+
var n = numberRe.exec(string.slice(i));
|
|
2716
|
+
return n ? (d.s = +n[0], i + n[0].length) : -1;
|
|
2717
|
+
}
|
|
2718
|
+
|
|
2719
|
+
function formatDayOfMonth(d, p) {
|
|
2720
|
+
return pad(d.getDate(), p, 2);
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2723
|
+
function formatHour24(d, p) {
|
|
2724
|
+
return pad(d.getHours(), p, 2);
|
|
2725
|
+
}
|
|
2726
|
+
|
|
2727
|
+
function formatHour12(d, p) {
|
|
2728
|
+
return pad(d.getHours() % 12 || 12, p, 2);
|
|
2729
|
+
}
|
|
2730
|
+
|
|
2731
|
+
function formatDayOfYear(d, p) {
|
|
2732
|
+
return pad(1 + timeDay.count(timeYear(d), d), p, 3);
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2735
|
+
function formatMilliseconds(d, p) {
|
|
2736
|
+
return pad(d.getMilliseconds(), p, 3);
|
|
2737
|
+
}
|
|
2738
|
+
|
|
2739
|
+
function formatMicroseconds(d, p) {
|
|
2740
|
+
return formatMilliseconds(d, p) + "000";
|
|
2741
|
+
}
|
|
2742
|
+
|
|
2743
|
+
function formatMonthNumber(d, p) {
|
|
2744
|
+
return pad(d.getMonth() + 1, p, 2);
|
|
2745
|
+
}
|
|
2746
|
+
|
|
2747
|
+
function formatMinutes(d, p) {
|
|
2748
|
+
return pad(d.getMinutes(), p, 2);
|
|
2749
|
+
}
|
|
2750
|
+
|
|
2751
|
+
function formatSeconds(d, p) {
|
|
2752
|
+
return pad(d.getSeconds(), p, 2);
|
|
2753
|
+
}
|
|
2754
|
+
|
|
2755
|
+
function formatWeekdayNumberMonday(d) {
|
|
2756
|
+
var day = d.getDay();
|
|
2757
|
+
return day === 0 ? 7 : day;
|
|
2758
|
+
}
|
|
2759
|
+
|
|
2760
|
+
function formatWeekNumberSunday(d, p) {
|
|
2761
|
+
return pad(sunday.count(timeYear(d) - 1, d), p, 2);
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2764
|
+
function dISO(d) {
|
|
2765
|
+
var day = d.getDay();
|
|
2766
|
+
return (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
|
|
2767
|
+
}
|
|
2768
|
+
|
|
2769
|
+
function formatWeekNumberISO(d, p) {
|
|
2770
|
+
d = dISO(d);
|
|
2771
|
+
return pad(thursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);
|
|
2772
|
+
}
|
|
2773
|
+
|
|
2774
|
+
function formatWeekdayNumberSunday(d) {
|
|
2775
|
+
return d.getDay();
|
|
2776
|
+
}
|
|
2777
|
+
|
|
2778
|
+
function formatWeekNumberMonday(d, p) {
|
|
2779
|
+
return pad(monday.count(timeYear(d) - 1, d), p, 2);
|
|
2780
|
+
}
|
|
2781
|
+
|
|
2782
|
+
function formatYear(d, p) {
|
|
2783
|
+
return pad(d.getFullYear() % 100, p, 2);
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
function formatYearISO(d, p) {
|
|
2787
|
+
d = dISO(d);
|
|
2788
|
+
return pad(d.getFullYear() % 100, p, 2);
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2791
|
+
function formatFullYear(d, p) {
|
|
2792
|
+
return pad(d.getFullYear() % 10000, p, 4);
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2795
|
+
function formatFullYearISO(d, p) {
|
|
2796
|
+
var day = d.getDay();
|
|
2797
|
+
d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
|
|
2798
|
+
return pad(d.getFullYear() % 10000, p, 4);
|
|
2799
|
+
}
|
|
2800
|
+
|
|
2801
|
+
function formatZone(d) {
|
|
2802
|
+
var z = d.getTimezoneOffset();
|
|
2803
|
+
return (z > 0 ? "-" : (z *= -1, "+"))
|
|
2804
|
+
+ pad(z / 60 | 0, "0", 2)
|
|
2805
|
+
+ pad(z % 60, "0", 2);
|
|
2806
|
+
}
|
|
2807
|
+
|
|
2808
|
+
function formatUTCDayOfMonth(d, p) {
|
|
2809
|
+
return pad(d.getUTCDate(), p, 2);
|
|
2810
|
+
}
|
|
2811
|
+
|
|
2812
|
+
function formatUTCHour24(d, p) {
|
|
2813
|
+
return pad(d.getUTCHours(), p, 2);
|
|
2814
|
+
}
|
|
2815
|
+
|
|
2816
|
+
function formatUTCHour12(d, p) {
|
|
2817
|
+
return pad(d.getUTCHours() % 12 || 12, p, 2);
|
|
2818
|
+
}
|
|
2819
|
+
|
|
2820
|
+
function formatUTCDayOfYear(d, p) {
|
|
2821
|
+
return pad(1 + utcDay$1.count(utcYear$1(d), d), p, 3);
|
|
2822
|
+
}
|
|
2823
|
+
|
|
2824
|
+
function formatUTCMilliseconds(d, p) {
|
|
2825
|
+
return pad(d.getUTCMilliseconds(), p, 3);
|
|
2826
|
+
}
|
|
2827
|
+
|
|
2828
|
+
function formatUTCMicroseconds(d, p) {
|
|
2829
|
+
return formatUTCMilliseconds(d, p) + "000";
|
|
2830
|
+
}
|
|
2831
|
+
|
|
2832
|
+
function formatUTCMonthNumber(d, p) {
|
|
2833
|
+
return pad(d.getUTCMonth() + 1, p, 2);
|
|
2834
|
+
}
|
|
2835
|
+
|
|
2836
|
+
function formatUTCMinutes(d, p) {
|
|
2837
|
+
return pad(d.getUTCMinutes(), p, 2);
|
|
2838
|
+
}
|
|
2839
|
+
|
|
2840
|
+
function formatUTCSeconds(d, p) {
|
|
2841
|
+
return pad(d.getUTCSeconds(), p, 2);
|
|
2842
|
+
}
|
|
2843
|
+
|
|
2844
|
+
function formatUTCWeekdayNumberMonday(d) {
|
|
2845
|
+
var dow = d.getUTCDay();
|
|
2846
|
+
return dow === 0 ? 7 : dow;
|
|
2847
|
+
}
|
|
2848
|
+
|
|
2849
|
+
function formatUTCWeekNumberSunday(d, p) {
|
|
2850
|
+
return pad(utcSunday.count(utcYear$1(d) - 1, d), p, 2);
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2853
|
+
function UTCdISO(d) {
|
|
2854
|
+
var day = d.getUTCDay();
|
|
2855
|
+
return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
|
|
2856
|
+
}
|
|
2857
|
+
|
|
2858
|
+
function formatUTCWeekNumberISO(d, p) {
|
|
2859
|
+
d = UTCdISO(d);
|
|
2860
|
+
return pad(utcThursday.count(utcYear$1(d), d) + (utcYear$1(d).getUTCDay() === 4), p, 2);
|
|
2861
|
+
}
|
|
2862
|
+
|
|
2863
|
+
function formatUTCWeekdayNumberSunday(d) {
|
|
2864
|
+
return d.getUTCDay();
|
|
2865
|
+
}
|
|
2866
|
+
|
|
2867
|
+
function formatUTCWeekNumberMonday(d, p) {
|
|
2868
|
+
return pad(utcMonday.count(utcYear$1(d) - 1, d), p, 2);
|
|
2869
|
+
}
|
|
2870
|
+
|
|
2871
|
+
function formatUTCYear(d, p) {
|
|
2872
|
+
return pad(d.getUTCFullYear() % 100, p, 2);
|
|
2873
|
+
}
|
|
2874
|
+
|
|
2875
|
+
function formatUTCYearISO(d, p) {
|
|
2876
|
+
d = UTCdISO(d);
|
|
2877
|
+
return pad(d.getUTCFullYear() % 100, p, 2);
|
|
2878
|
+
}
|
|
2879
|
+
|
|
2880
|
+
function formatUTCFullYear(d, p) {
|
|
2881
|
+
return pad(d.getUTCFullYear() % 10000, p, 4);
|
|
2882
|
+
}
|
|
2883
|
+
|
|
2884
|
+
function formatUTCFullYearISO(d, p) {
|
|
2885
|
+
var day = d.getUTCDay();
|
|
2886
|
+
d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
|
|
2887
|
+
return pad(d.getUTCFullYear() % 10000, p, 4);
|
|
2888
|
+
}
|
|
2889
|
+
|
|
2890
|
+
function formatUTCZone() {
|
|
2891
|
+
return "+0000";
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2894
|
+
function formatLiteralPercent() {
|
|
2895
|
+
return "%";
|
|
2896
|
+
}
|
|
2897
|
+
|
|
2898
|
+
function formatUnixTimestamp(d) {
|
|
2899
|
+
return +d;
|
|
2900
|
+
}
|
|
2901
|
+
|
|
2902
|
+
function formatUnixTimestampSeconds(d) {
|
|
2903
|
+
return Math.floor(+d / 1000);
|
|
2904
|
+
}
|
|
2905
|
+
|
|
2906
|
+
var locale;
|
|
2907
|
+
var timeFormat;
|
|
2908
|
+
|
|
2909
|
+
defaultLocale({
|
|
2910
|
+
dateTime: "%x, %X",
|
|
2911
|
+
date: "%-m/%-d/%Y",
|
|
2912
|
+
time: "%-I:%M:%S %p",
|
|
2913
|
+
periods: ["AM", "PM"],
|
|
2914
|
+
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
|
2915
|
+
shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
|
|
2916
|
+
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
|
|
2917
|
+
shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
|
|
2918
|
+
});
|
|
2919
|
+
|
|
2920
|
+
function defaultLocale(definition) {
|
|
2921
|
+
locale = formatLocale(definition);
|
|
2922
|
+
timeFormat = locale.format;
|
|
2923
|
+
locale.parse;
|
|
2924
|
+
locale.utcFormat;
|
|
2925
|
+
locale.utcParse;
|
|
2926
|
+
return locale;
|
|
2927
|
+
}
|
|
2928
|
+
|
|
2929
|
+
function date(t) {
|
|
2930
|
+
return new Date(t);
|
|
2931
|
+
}
|
|
2932
|
+
|
|
2933
|
+
function number(t) {
|
|
2934
|
+
return t instanceof Date ? +t : +new Date(+t);
|
|
2935
|
+
}
|
|
2936
|
+
|
|
2937
|
+
function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {
|
|
2938
|
+
var scale = continuous(),
|
|
2939
|
+
invert = scale.invert,
|
|
2940
|
+
domain = scale.domain;
|
|
2941
|
+
|
|
2942
|
+
var formatMillisecond = format(".%L"),
|
|
2943
|
+
formatSecond = format(":%S"),
|
|
2944
|
+
formatMinute = format("%I:%M"),
|
|
2945
|
+
formatHour = format("%I %p"),
|
|
2946
|
+
formatDay = format("%a %d"),
|
|
2947
|
+
formatWeek = format("%b %d"),
|
|
2948
|
+
formatMonth = format("%B"),
|
|
2949
|
+
formatYear = format("%Y");
|
|
2950
|
+
|
|
2951
|
+
function tickFormat(date) {
|
|
2952
|
+
return (second(date) < date ? formatMillisecond
|
|
2953
|
+
: minute(date) < date ? formatSecond
|
|
2954
|
+
: hour(date) < date ? formatMinute
|
|
2955
|
+
: day(date) < date ? formatHour
|
|
2956
|
+
: month(date) < date ? (week(date) < date ? formatDay : formatWeek)
|
|
2957
|
+
: year(date) < date ? formatMonth
|
|
2958
|
+
: formatYear)(date);
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
scale.invert = function(y) {
|
|
2962
|
+
return new Date(invert(y));
|
|
2963
|
+
};
|
|
2964
|
+
|
|
2965
|
+
scale.domain = function(_) {
|
|
2966
|
+
return arguments.length ? domain(Array.from(_, number)) : domain().map(date);
|
|
2967
|
+
};
|
|
2968
|
+
|
|
2969
|
+
scale.ticks = function(interval) {
|
|
2970
|
+
var d = domain();
|
|
2971
|
+
return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);
|
|
2972
|
+
};
|
|
2973
|
+
|
|
2974
|
+
scale.tickFormat = function(count, specifier) {
|
|
2975
|
+
return specifier == null ? tickFormat : format(specifier);
|
|
2976
|
+
};
|
|
2977
|
+
|
|
2978
|
+
scale.nice = function(interval) {
|
|
2979
|
+
var d = domain();
|
|
2980
|
+
if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);
|
|
2981
|
+
return interval ? domain(nice(d, interval)) : scale;
|
|
2982
|
+
};
|
|
2983
|
+
|
|
2984
|
+
scale.copy = function() {
|
|
2985
|
+
return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));
|
|
2986
|
+
};
|
|
2987
|
+
|
|
2988
|
+
return scale;
|
|
2989
|
+
}
|
|
2990
|
+
|
|
2991
|
+
function time() {
|
|
2992
|
+
return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, sunday, timeDay, timeHour, timeMinute, utcSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
|
|
2993
|
+
}
|
|
2994
|
+
|
|
2995
|
+
export { band as scaleBand, linear as scaleLinear, log as scaleLog, time as scaleTime };
|