d3-rails 7.0.0 → 7.8.5
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +1 -1
- data/app/assets/javascripts/d3.js +1496 -930
- data/app/assets/javascripts/d3.min.js +2 -2
- data/app/assets/javascripts/d3.v7.js +1496 -930
- data/app/assets/javascripts/d3.v7.min.js +2 -2
- data/lib/d3/rails/version.rb +1 -1
- metadata +6 -6
@@ -1,54 +1,67 @@
|
|
1
|
-
// https://d3js.org v7.
|
1
|
+
// https://d3js.org v7.8.5 Copyright 2010-2023 Mike Bostock
|
2
2
|
(function (global, factory) {
|
3
3
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
4
4
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
5
5
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
|
6
|
-
}(this, (function (exports) { 'use strict';
|
6
|
+
})(this, (function (exports) { 'use strict';
|
7
7
|
|
8
|
-
var version = "7.
|
8
|
+
var version = "7.8.5";
|
9
9
|
|
10
10
|
function ascending$3(a, b) {
|
11
|
+
return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
|
12
|
+
}
|
13
|
+
|
14
|
+
function descending$2(a, b) {
|
11
15
|
return a == null || b == null ? NaN
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
16
|
+
: b < a ? -1
|
17
|
+
: b > a ? 1
|
18
|
+
: b >= a ? 0
|
15
19
|
: NaN;
|
16
20
|
}
|
17
21
|
|
18
22
|
function bisector(f) {
|
19
|
-
let
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
let compare1, compare2, delta;
|
24
|
+
|
25
|
+
// If an accessor is specified, promote it to a comparator. In this case we
|
26
|
+
// can test whether the search value is (self-) comparable. We can’t do this
|
27
|
+
// for a comparator (except for specific, known comparators) because we can’t
|
28
|
+
// tell if the comparator is symmetric, and an asymmetric comparator can’t be
|
29
|
+
// used to test whether a single value is comparable.
|
30
|
+
if (f.length !== 2) {
|
31
|
+
compare1 = ascending$3;
|
32
|
+
compare2 = (d, x) => ascending$3(f(d), x);
|
23
33
|
delta = (d, x) => f(d) - x;
|
24
|
-
|
34
|
+
} else {
|
35
|
+
compare1 = f === ascending$3 || f === descending$2 ? f : zero$1;
|
36
|
+
compare2 = f;
|
37
|
+
delta = f;
|
25
38
|
}
|
26
39
|
|
27
|
-
function left(a, x, lo, hi) {
|
28
|
-
if (lo
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
40
|
+
function left(a, x, lo = 0, hi = a.length) {
|
41
|
+
if (lo < hi) {
|
42
|
+
if (compare1(x, x) !== 0) return hi;
|
43
|
+
do {
|
44
|
+
const mid = (lo + hi) >>> 1;
|
45
|
+
if (compare2(a[mid], x) < 0) lo = mid + 1;
|
46
|
+
else hi = mid;
|
47
|
+
} while (lo < hi);
|
34
48
|
}
|
35
49
|
return lo;
|
36
50
|
}
|
37
51
|
|
38
|
-
function right(a, x, lo, hi) {
|
39
|
-
if (lo
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
52
|
+
function right(a, x, lo = 0, hi = a.length) {
|
53
|
+
if (lo < hi) {
|
54
|
+
if (compare1(x, x) !== 0) return hi;
|
55
|
+
do {
|
56
|
+
const mid = (lo + hi) >>> 1;
|
57
|
+
if (compare2(a[mid], x) <= 0) lo = mid + 1;
|
58
|
+
else hi = mid;
|
59
|
+
} while (lo < hi);
|
45
60
|
}
|
46
61
|
return lo;
|
47
62
|
}
|
48
63
|
|
49
|
-
function center(a, x, lo, hi) {
|
50
|
-
if (lo == null) lo = 0;
|
51
|
-
if (hi == null) hi = a.length;
|
64
|
+
function center(a, x, lo = 0, hi = a.length) {
|
52
65
|
const i = left(a, x, lo, hi - 1);
|
53
66
|
return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
|
54
67
|
}
|
@@ -56,8 +69,8 @@ function bisector(f) {
|
|
56
69
|
return {left, center, right};
|
57
70
|
}
|
58
71
|
|
59
|
-
function
|
60
|
-
return
|
72
|
+
function zero$1() {
|
73
|
+
return 0;
|
61
74
|
}
|
62
75
|
|
63
76
|
function number$3(x) {
|
@@ -85,6 +98,123 @@ const ascendingBisect = bisector(ascending$3);
|
|
85
98
|
const bisectRight = ascendingBisect.right;
|
86
99
|
const bisectLeft = ascendingBisect.left;
|
87
100
|
const bisectCenter = bisector(number$3).center;
|
101
|
+
var bisect = bisectRight;
|
102
|
+
|
103
|
+
function blur(values, r) {
|
104
|
+
if (!((r = +r) >= 0)) throw new RangeError("invalid r");
|
105
|
+
let length = values.length;
|
106
|
+
if (!((length = Math.floor(length)) >= 0)) throw new RangeError("invalid length");
|
107
|
+
if (!length || !r) return values;
|
108
|
+
const blur = blurf(r);
|
109
|
+
const temp = values.slice();
|
110
|
+
blur(values, temp, 0, length, 1);
|
111
|
+
blur(temp, values, 0, length, 1);
|
112
|
+
blur(values, temp, 0, length, 1);
|
113
|
+
return values;
|
114
|
+
}
|
115
|
+
|
116
|
+
const blur2 = Blur2(blurf);
|
117
|
+
|
118
|
+
const blurImage = Blur2(blurfImage);
|
119
|
+
|
120
|
+
function Blur2(blur) {
|
121
|
+
return function(data, rx, ry = rx) {
|
122
|
+
if (!((rx = +rx) >= 0)) throw new RangeError("invalid rx");
|
123
|
+
if (!((ry = +ry) >= 0)) throw new RangeError("invalid ry");
|
124
|
+
let {data: values, width, height} = data;
|
125
|
+
if (!((width = Math.floor(width)) >= 0)) throw new RangeError("invalid width");
|
126
|
+
if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError("invalid height");
|
127
|
+
if (!width || !height || (!rx && !ry)) return data;
|
128
|
+
const blurx = rx && blur(rx);
|
129
|
+
const blury = ry && blur(ry);
|
130
|
+
const temp = values.slice();
|
131
|
+
if (blurx && blury) {
|
132
|
+
blurh(blurx, temp, values, width, height);
|
133
|
+
blurh(blurx, values, temp, width, height);
|
134
|
+
blurh(blurx, temp, values, width, height);
|
135
|
+
blurv(blury, values, temp, width, height);
|
136
|
+
blurv(blury, temp, values, width, height);
|
137
|
+
blurv(blury, values, temp, width, height);
|
138
|
+
} else if (blurx) {
|
139
|
+
blurh(blurx, values, temp, width, height);
|
140
|
+
blurh(blurx, temp, values, width, height);
|
141
|
+
blurh(blurx, values, temp, width, height);
|
142
|
+
} else if (blury) {
|
143
|
+
blurv(blury, values, temp, width, height);
|
144
|
+
blurv(blury, temp, values, width, height);
|
145
|
+
blurv(blury, values, temp, width, height);
|
146
|
+
}
|
147
|
+
return data;
|
148
|
+
};
|
149
|
+
}
|
150
|
+
|
151
|
+
function blurh(blur, T, S, w, h) {
|
152
|
+
for (let y = 0, n = w * h; y < n;) {
|
153
|
+
blur(T, S, y, y += w, 1);
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
function blurv(blur, T, S, w, h) {
|
158
|
+
for (let x = 0, n = w * h; x < w; ++x) {
|
159
|
+
blur(T, S, x, x + n, w);
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
function blurfImage(radius) {
|
164
|
+
const blur = blurf(radius);
|
165
|
+
return (T, S, start, stop, step) => {
|
166
|
+
start <<= 2, stop <<= 2, step <<= 2;
|
167
|
+
blur(T, S, start + 0, stop + 0, step);
|
168
|
+
blur(T, S, start + 1, stop + 1, step);
|
169
|
+
blur(T, S, start + 2, stop + 2, step);
|
170
|
+
blur(T, S, start + 3, stop + 3, step);
|
171
|
+
};
|
172
|
+
}
|
173
|
+
|
174
|
+
// Given a target array T, a source array S, sets each value T[i] to the average
|
175
|
+
// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,
|
176
|
+
// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between
|
177
|
+
// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an
|
178
|
+
// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted
|
179
|
+
// according to r - ⌊radius⌋.
|
180
|
+
function blurf(radius) {
|
181
|
+
const radius0 = Math.floor(radius);
|
182
|
+
if (radius0 === radius) return bluri(radius);
|
183
|
+
const t = radius - radius0;
|
184
|
+
const w = 2 * radius + 1;
|
185
|
+
return (T, S, start, stop, step) => { // stop must be aligned!
|
186
|
+
if (!((stop -= step) >= start)) return; // inclusive stop
|
187
|
+
let sum = radius0 * S[start];
|
188
|
+
const s0 = step * radius0;
|
189
|
+
const s1 = s0 + step;
|
190
|
+
for (let i = start, j = start + s0; i < j; i += step) {
|
191
|
+
sum += S[Math.min(stop, i)];
|
192
|
+
}
|
193
|
+
for (let i = start, j = stop; i <= j; i += step) {
|
194
|
+
sum += S[Math.min(stop, i + s0)];
|
195
|
+
T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;
|
196
|
+
sum -= S[Math.max(start, i - s0)];
|
197
|
+
}
|
198
|
+
};
|
199
|
+
}
|
200
|
+
|
201
|
+
// Like blurf, but optimized for integer radius.
|
202
|
+
function bluri(radius) {
|
203
|
+
const w = 2 * radius + 1;
|
204
|
+
return (T, S, start, stop, step) => { // stop must be aligned!
|
205
|
+
if (!((stop -= step) >= start)) return; // inclusive stop
|
206
|
+
let sum = radius * S[start];
|
207
|
+
const s = step * radius;
|
208
|
+
for (let i = start, j = start + s; i < j; i += step) {
|
209
|
+
sum += S[Math.min(stop, i)];
|
210
|
+
}
|
211
|
+
for (let i = start, j = stop; i <= j; i += step) {
|
212
|
+
sum += S[Math.min(stop, i + s)];
|
213
|
+
T[i] = sum / w;
|
214
|
+
sum -= S[Math.max(start, i - s)];
|
215
|
+
}
|
216
|
+
};
|
217
|
+
}
|
88
218
|
|
89
219
|
function count$1(values, valueof) {
|
90
220
|
let count = 0;
|
@@ -146,14 +276,6 @@ function cumsum(values, valueof) {
|
|
146
276
|
: v => (sum += +valueof(v, index++, values) || 0));
|
147
277
|
}
|
148
278
|
|
149
|
-
function descending$2(a, b) {
|
150
|
-
return a == null || b == null ? NaN
|
151
|
-
: b < a ? -1
|
152
|
-
: b > a ? 1
|
153
|
-
: b >= a ? 0
|
154
|
-
: NaN;
|
155
|
-
}
|
156
|
-
|
157
279
|
function variance(values, valueof) {
|
158
280
|
let count = 0;
|
159
281
|
let delta;
|
@@ -337,7 +459,7 @@ function intern_set({_intern, _key}, value) {
|
|
337
459
|
function intern_delete({_intern, _key}, value) {
|
338
460
|
const key = _key(value);
|
339
461
|
if (_intern.has(key)) {
|
340
|
-
value = _intern.get(
|
462
|
+
value = _intern.get(key);
|
341
463
|
_intern.delete(key);
|
342
464
|
}
|
343
465
|
return value;
|
@@ -421,28 +543,42 @@ function permute(source, keys) {
|
|
421
543
|
function sort(values, ...F) {
|
422
544
|
if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
|
423
545
|
values = Array.from(values);
|
424
|
-
let [f
|
425
|
-
if (f.length
|
546
|
+
let [f] = F;
|
547
|
+
if ((f && f.length !== 2) || F.length > 1) {
|
426
548
|
const index = Uint32Array.from(values, (d, i) => i);
|
427
549
|
if (F.length > 1) {
|
428
550
|
F = F.map(f => values.map(f));
|
429
551
|
index.sort((i, j) => {
|
430
552
|
for (const f of F) {
|
431
|
-
const c =
|
553
|
+
const c = ascendingDefined(f[i], f[j]);
|
432
554
|
if (c) return c;
|
433
555
|
}
|
434
556
|
});
|
435
557
|
} else {
|
436
558
|
f = values.map(f);
|
437
|
-
index.sort((i, j) =>
|
559
|
+
index.sort((i, j) => ascendingDefined(f[i], f[j]));
|
438
560
|
}
|
439
561
|
return permute(values, index);
|
440
562
|
}
|
441
|
-
return values.sort(f);
|
563
|
+
return values.sort(compareDefined(f));
|
564
|
+
}
|
565
|
+
|
566
|
+
function compareDefined(compare = ascending$3) {
|
567
|
+
if (compare === ascending$3) return ascendingDefined;
|
568
|
+
if (typeof compare !== "function") throw new TypeError("compare is not a function");
|
569
|
+
return (a, b) => {
|
570
|
+
const x = compare(a, b);
|
571
|
+
if (x || x === 0) return x;
|
572
|
+
return (compare(b, b) === 0) - (compare(a, a) === 0);
|
573
|
+
};
|
574
|
+
}
|
575
|
+
|
576
|
+
function ascendingDefined(a, b) {
|
577
|
+
return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);
|
442
578
|
}
|
443
579
|
|
444
580
|
function groupSort(values, reduce, key) {
|
445
|
-
return (reduce.length
|
581
|
+
return (reduce.length !== 2
|
446
582
|
? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending$3(av, bv) || ascending$3(ak, bk)))
|
447
583
|
: sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending$3(ak, bk))))
|
448
584
|
.map(([key]) => key);
|
@@ -453,64 +589,63 @@ var array$5 = Array.prototype;
|
|
453
589
|
var slice$3 = array$5.slice;
|
454
590
|
|
455
591
|
function constant$b(x) {
|
456
|
-
return
|
457
|
-
return x;
|
458
|
-
};
|
592
|
+
return () => x;
|
459
593
|
}
|
460
594
|
|
461
|
-
|
595
|
+
const e10 = Math.sqrt(50),
|
462
596
|
e5 = Math.sqrt(10),
|
463
597
|
e2 = Math.sqrt(2);
|
464
598
|
|
465
|
-
function
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
599
|
+
function tickSpec(start, stop, count) {
|
600
|
+
const step = (stop - start) / Math.max(0, count),
|
601
|
+
power = Math.floor(Math.log10(step)),
|
602
|
+
error = step / Math.pow(10, power),
|
603
|
+
factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;
|
604
|
+
let i1, i2, inc;
|
605
|
+
if (power < 0) {
|
606
|
+
inc = Math.pow(10, -power) / factor;
|
607
|
+
i1 = Math.round(start * inc);
|
608
|
+
i2 = Math.round(stop * inc);
|
609
|
+
if (i1 / inc < start) ++i1;
|
610
|
+
if (i2 / inc > stop) --i2;
|
611
|
+
inc = -inc;
|
612
|
+
} else {
|
613
|
+
inc = Math.pow(10, power) * factor;
|
614
|
+
i1 = Math.round(start / inc);
|
615
|
+
i2 = Math.round(stop / inc);
|
616
|
+
if (i1 * inc < start) ++i1;
|
617
|
+
if (i2 * inc > stop) --i2;
|
618
|
+
}
|
619
|
+
if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);
|
620
|
+
return [i1, i2, inc];
|
621
|
+
}
|
471
622
|
|
623
|
+
function ticks(start, stop, count) {
|
472
624
|
stop = +stop, start = +start, count = +count;
|
473
|
-
if (
|
474
|
-
if (
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
if (
|
480
|
-
|
481
|
-
ticks = new Array(n = r1 - r0 + 1);
|
482
|
-
while (++i < n) ticks[i] = (r0 + i) * step;
|
625
|
+
if (!(count > 0)) return [];
|
626
|
+
if (start === stop) return [start];
|
627
|
+
const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);
|
628
|
+
if (!(i2 >= i1)) return [];
|
629
|
+
const n = i2 - i1 + 1, ticks = new Array(n);
|
630
|
+
if (reverse) {
|
631
|
+
if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;
|
632
|
+
else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;
|
483
633
|
} else {
|
484
|
-
|
485
|
-
let
|
486
|
-
if (r0 / step < start) ++r0;
|
487
|
-
if (r1 / step > stop) --r1;
|
488
|
-
ticks = new Array(n = r1 - r0 + 1);
|
489
|
-
while (++i < n) ticks[i] = (r0 + i) / step;
|
634
|
+
if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;
|
635
|
+
else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;
|
490
636
|
}
|
491
|
-
|
492
|
-
if (reverse) ticks.reverse();
|
493
|
-
|
494
637
|
return ticks;
|
495
638
|
}
|
496
639
|
|
497
640
|
function tickIncrement(start, stop, count) {
|
498
|
-
|
499
|
-
|
500
|
-
error = step / Math.pow(10, power);
|
501
|
-
return power >= 0
|
502
|
-
? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
|
503
|
-
: -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
|
641
|
+
stop = +stop, start = +start, count = +count;
|
642
|
+
return tickSpec(start, stop, count)[2];
|
504
643
|
}
|
505
644
|
|
506
645
|
function tickStep(start, stop, count) {
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
if (error >= e10) step1 *= 10;
|
511
|
-
else if (error >= e5) step1 *= 5;
|
512
|
-
else if (error >= e2) step1 *= 2;
|
513
|
-
return stop < start ? -step1 : step1;
|
646
|
+
stop = +stop, start = +start, count = +count;
|
647
|
+
const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);
|
648
|
+
return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
|
514
649
|
}
|
515
650
|
|
516
651
|
function nice$1(start, stop, count) {
|
@@ -531,7 +666,7 @@ function nice$1(start, stop, count) {
|
|
531
666
|
}
|
532
667
|
|
533
668
|
function thresholdSturges(values) {
|
534
|
-
return Math.ceil(Math.log(count$1(values)) / Math.LN2) + 1;
|
669
|
+
return Math.max(1, Math.ceil(Math.log(count$1(values)) / Math.LN2) + 1);
|
535
670
|
}
|
536
671
|
|
537
672
|
function bin() {
|
@@ -545,6 +680,7 @@ function bin() {
|
|
545
680
|
var i,
|
546
681
|
n = data.length,
|
547
682
|
x,
|
683
|
+
step,
|
548
684
|
values = new Array(n);
|
549
685
|
|
550
686
|
for (i = 0; i < n; ++i) {
|
@@ -563,6 +699,11 @@ function bin() {
|
|
563
699
|
if (domain === extent$1) [x0, x1] = nice$1(x0, x1, tn);
|
564
700
|
tz = ticks(x0, x1, tn);
|
565
701
|
|
702
|
+
// If the domain is aligned with the first tick (which it will by
|
703
|
+
// default), then we can use quantization rather than bisection to bin
|
704
|
+
// values, which is substantially faster.
|
705
|
+
if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);
|
706
|
+
|
566
707
|
// If the last threshold is coincident with the domain’s upper bound, the
|
567
708
|
// last bin will be zero-width. If the default domain is used, and this
|
568
709
|
// last threshold is coincident with the maximum input value, we can
|
@@ -587,9 +728,11 @@ function bin() {
|
|
587
728
|
}
|
588
729
|
|
589
730
|
// Remove any thresholds outside the domain.
|
590
|
-
|
591
|
-
|
592
|
-
while (tz[
|
731
|
+
// Be careful not to mutate an array owned by the user!
|
732
|
+
var m = tz.length, a = 0, b = m;
|
733
|
+
while (tz[a] <= x0) ++a;
|
734
|
+
while (tz[b - 1] > x1) --b;
|
735
|
+
if (a || b < m) tz = tz.slice(a, b), m = b - a;
|
593
736
|
|
594
737
|
var bins = new Array(m + 1),
|
595
738
|
bin;
|
@@ -602,10 +745,26 @@ function bin() {
|
|
602
745
|
}
|
603
746
|
|
604
747
|
// Assign data to bins by value, ignoring any outside the domain.
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
748
|
+
if (isFinite(step)) {
|
749
|
+
if (step > 0) {
|
750
|
+
for (i = 0; i < n; ++i) {
|
751
|
+
if ((x = values[i]) != null && x0 <= x && x <= x1) {
|
752
|
+
bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);
|
753
|
+
}
|
754
|
+
}
|
755
|
+
} else if (step < 0) {
|
756
|
+
for (i = 0; i < n; ++i) {
|
757
|
+
if ((x = values[i]) != null && x0 <= x && x <= x1) {
|
758
|
+
const j = Math.floor((x0 - x) * step);
|
759
|
+
bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding
|
760
|
+
}
|
761
|
+
}
|
762
|
+
}
|
763
|
+
} else {
|
764
|
+
for (i = 0; i < n; ++i) {
|
765
|
+
if ((x = values[i]) != null && x0 <= x && x <= x1) {
|
766
|
+
bins[bisect(tz, x, 0, m)].push(data[i]);
|
767
|
+
}
|
609
768
|
}
|
610
769
|
}
|
611
770
|
|
@@ -621,7 +780,7 @@ function bin() {
|
|
621
780
|
};
|
622
781
|
|
623
782
|
histogram.thresholds = function(_) {
|
624
|
-
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ?
|
783
|
+
return arguments.length ? (threshold = typeof _ === "function" ? _ : constant$b(Array.isArray(_) ? slice$3.call(_) : _), histogram) : threshold;
|
625
784
|
};
|
626
785
|
|
627
786
|
return histogram;
|
@@ -648,6 +807,29 @@ function max$3(values, valueof) {
|
|
648
807
|
return max;
|
649
808
|
}
|
650
809
|
|
810
|
+
function maxIndex(values, valueof) {
|
811
|
+
let max;
|
812
|
+
let maxIndex = -1;
|
813
|
+
let index = -1;
|
814
|
+
if (valueof === undefined) {
|
815
|
+
for (const value of values) {
|
816
|
+
++index;
|
817
|
+
if (value != null
|
818
|
+
&& (max < value || (max === undefined && value >= value))) {
|
819
|
+
max = value, maxIndex = index;
|
820
|
+
}
|
821
|
+
}
|
822
|
+
} else {
|
823
|
+
for (let value of values) {
|
824
|
+
if ((value = valueof(value, ++index, values)) != null
|
825
|
+
&& (max < value || (max === undefined && value >= value))) {
|
826
|
+
max = value, maxIndex = index;
|
827
|
+
}
|
828
|
+
}
|
829
|
+
}
|
830
|
+
return maxIndex;
|
831
|
+
}
|
832
|
+
|
651
833
|
function min$2(values, valueof) {
|
652
834
|
let min;
|
653
835
|
if (valueof === undefined) {
|
@@ -669,9 +851,40 @@ function min$2(values, valueof) {
|
|
669
851
|
return min;
|
670
852
|
}
|
671
853
|
|
854
|
+
function minIndex(values, valueof) {
|
855
|
+
let min;
|
856
|
+
let minIndex = -1;
|
857
|
+
let index = -1;
|
858
|
+
if (valueof === undefined) {
|
859
|
+
for (const value of values) {
|
860
|
+
++index;
|
861
|
+
if (value != null
|
862
|
+
&& (min > value || (min === undefined && value >= value))) {
|
863
|
+
min = value, minIndex = index;
|
864
|
+
}
|
865
|
+
}
|
866
|
+
} else {
|
867
|
+
for (let value of values) {
|
868
|
+
if ((value = valueof(value, ++index, values)) != null
|
869
|
+
&& (min > value || (min === undefined && value >= value))) {
|
870
|
+
min = value, minIndex = index;
|
871
|
+
}
|
872
|
+
}
|
873
|
+
}
|
874
|
+
return minIndex;
|
875
|
+
}
|
876
|
+
|
672
877
|
// Based on https://github.com/mourner/quickselect
|
673
878
|
// ISC license, Copyright 2018 Vladimir Agafonkin.
|
674
|
-
function quickselect(array, k, left = 0, right =
|
879
|
+
function quickselect(array, k, left = 0, right = Infinity, compare) {
|
880
|
+
k = Math.floor(k);
|
881
|
+
left = Math.floor(Math.max(0, left));
|
882
|
+
right = Math.floor(Math.min(array.length - 1, right));
|
883
|
+
|
884
|
+
if (!(left <= k && k <= right)) return array;
|
885
|
+
|
886
|
+
compare = compare === undefined ? ascendingDefined : compareDefined(compare);
|
887
|
+
|
675
888
|
while (right > left) {
|
676
889
|
if (right - left > 600) {
|
677
890
|
const n = right - left + 1;
|
@@ -703,6 +916,7 @@ function quickselect(array, k, left = 0, right = array.length - 1, compare = asc
|
|
703
916
|
if (j <= k) left = j + 1;
|
704
917
|
if (k <= j) right = j - 1;
|
705
918
|
}
|
919
|
+
|
706
920
|
return array;
|
707
921
|
}
|
708
922
|
|
@@ -712,10 +926,38 @@ function swap$1(array, i, j) {
|
|
712
926
|
array[j] = t;
|
713
927
|
}
|
714
928
|
|
929
|
+
function greatest(values, compare = ascending$3) {
|
930
|
+
let max;
|
931
|
+
let defined = false;
|
932
|
+
if (compare.length === 1) {
|
933
|
+
let maxValue;
|
934
|
+
for (const element of values) {
|
935
|
+
const value = compare(element);
|
936
|
+
if (defined
|
937
|
+
? ascending$3(value, maxValue) > 0
|
938
|
+
: ascending$3(value, value) === 0) {
|
939
|
+
max = element;
|
940
|
+
maxValue = value;
|
941
|
+
defined = true;
|
942
|
+
}
|
943
|
+
}
|
944
|
+
} else {
|
945
|
+
for (const value of values) {
|
946
|
+
if (defined
|
947
|
+
? compare(value, max) > 0
|
948
|
+
: compare(value, value) === 0) {
|
949
|
+
max = value;
|
950
|
+
defined = true;
|
951
|
+
}
|
952
|
+
}
|
953
|
+
}
|
954
|
+
return max;
|
955
|
+
}
|
956
|
+
|
715
957
|
function quantile$1(values, p, valueof) {
|
716
958
|
values = Float64Array.from(numbers(values, valueof));
|
717
|
-
if (!(n = values.length)) return;
|
718
|
-
if (
|
959
|
+
if (!(n = values.length) || isNaN(p = +p)) return;
|
960
|
+
if (p <= 0 || n < 2) return min$2(values);
|
719
961
|
if (p >= 1) return max$3(values);
|
720
962
|
var n,
|
721
963
|
i = (n - 1) * p,
|
@@ -726,8 +968,8 @@ function quantile$1(values, p, valueof) {
|
|
726
968
|
}
|
727
969
|
|
728
970
|
function quantileSorted(values, p, valueof = number$3) {
|
729
|
-
if (!(n = values.length)) return;
|
730
|
-
if (
|
971
|
+
if (!(n = values.length) || isNaN(p = +p)) return;
|
972
|
+
if (p <= 0 || n < 2) return +valueof(values[0], 0, values);
|
731
973
|
if (p >= 1) return +valueof(values[n - 1], n - 1, values);
|
732
974
|
var n,
|
733
975
|
i = (n - 1) * p,
|
@@ -737,35 +979,28 @@ function quantileSorted(values, p, valueof = number$3) {
|
|
737
979
|
return value0 + (value1 - value0) * (i - i0);
|
738
980
|
}
|
739
981
|
|
740
|
-
function
|
741
|
-
|
982
|
+
function quantileIndex(values, p, valueof = number$3) {
|
983
|
+
if (isNaN(p = +p)) return;
|
984
|
+
numbers = Float64Array.from(values, (_, i) => number$3(valueof(values[i], i, values)));
|
985
|
+
if (p <= 0) return minIndex(numbers);
|
986
|
+
if (p >= 1) return maxIndex(numbers);
|
987
|
+
var numbers,
|
988
|
+
index = Uint32Array.from(values, (_, i) => i),
|
989
|
+
j = numbers.length - 1,
|
990
|
+
i = Math.floor(j * p);
|
991
|
+
quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));
|
992
|
+
i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);
|
993
|
+
return i >= 0 ? i : -1;
|
742
994
|
}
|
743
995
|
|
744
|
-
function
|
745
|
-
|
996
|
+
function thresholdFreedmanDiaconis(values, min, max) {
|
997
|
+
const c = count$1(values), d = quantile$1(values, 0.75) - quantile$1(values, 0.25);
|
998
|
+
return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;
|
746
999
|
}
|
747
1000
|
|
748
|
-
function
|
749
|
-
|
750
|
-
|
751
|
-
let index = -1;
|
752
|
-
if (valueof === undefined) {
|
753
|
-
for (const value of values) {
|
754
|
-
++index;
|
755
|
-
if (value != null
|
756
|
-
&& (max < value || (max === undefined && value >= value))) {
|
757
|
-
max = value, maxIndex = index;
|
758
|
-
}
|
759
|
-
}
|
760
|
-
} else {
|
761
|
-
for (let value of values) {
|
762
|
-
if ((value = valueof(value, ++index, values)) != null
|
763
|
-
&& (max < value || (max === undefined && value >= value))) {
|
764
|
-
max = value, maxIndex = index;
|
765
|
-
}
|
766
|
-
}
|
767
|
-
}
|
768
|
-
return maxIndex;
|
1001
|
+
function thresholdScott(values, min, max) {
|
1002
|
+
const c = count$1(values), d = deviation(values);
|
1003
|
+
return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;
|
769
1004
|
}
|
770
1005
|
|
771
1006
|
function mean(values, valueof) {
|
@@ -792,6 +1027,10 @@ function median(values, valueof) {
|
|
792
1027
|
return quantile$1(values, 0.5, valueof);
|
793
1028
|
}
|
794
1029
|
|
1030
|
+
function medianIndex(values, valueof) {
|
1031
|
+
return quantileIndex(values, 0.5, valueof);
|
1032
|
+
}
|
1033
|
+
|
795
1034
|
function* flatten(arrays) {
|
796
1035
|
for (const array of arrays) {
|
797
1036
|
yield* array;
|
@@ -802,29 +1041,6 @@ function merge(arrays) {
|
|
802
1041
|
return Array.from(flatten(arrays));
|
803
1042
|
}
|
804
1043
|
|
805
|
-
function minIndex(values, valueof) {
|
806
|
-
let min;
|
807
|
-
let minIndex = -1;
|
808
|
-
let index = -1;
|
809
|
-
if (valueof === undefined) {
|
810
|
-
for (const value of values) {
|
811
|
-
++index;
|
812
|
-
if (value != null
|
813
|
-
&& (min > value || (min === undefined && value >= value))) {
|
814
|
-
min = value, minIndex = index;
|
815
|
-
}
|
816
|
-
}
|
817
|
-
} else {
|
818
|
-
for (let value of values) {
|
819
|
-
if ((value = valueof(value, ++index, values)) != null
|
820
|
-
&& (min > value || (min === undefined && value >= value))) {
|
821
|
-
min = value, minIndex = index;
|
822
|
-
}
|
823
|
-
}
|
824
|
-
}
|
825
|
-
return minIndex;
|
826
|
-
}
|
827
|
-
|
828
1044
|
function mode(values, valueof) {
|
829
1045
|
const counts = new InternMap();
|
830
1046
|
if (valueof === undefined) {
|
@@ -868,7 +1084,7 @@ function pair(a, b) {
|
|
868
1084
|
return [a, b];
|
869
1085
|
}
|
870
1086
|
|
871
|
-
function
|
1087
|
+
function range$2(start, stop, step) {
|
872
1088
|
start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
|
873
1089
|
|
874
1090
|
var i = -1,
|
@@ -882,6 +1098,28 @@ function sequence(start, stop, step) {
|
|
882
1098
|
return range;
|
883
1099
|
}
|
884
1100
|
|
1101
|
+
function rank(values, valueof = ascending$3) {
|
1102
|
+
if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
|
1103
|
+
let V = Array.from(values);
|
1104
|
+
const R = new Float64Array(V.length);
|
1105
|
+
if (valueof.length !== 2) V = V.map(valueof), valueof = ascending$3;
|
1106
|
+
const compareIndex = (i, j) => valueof(V[i], V[j]);
|
1107
|
+
let k, r;
|
1108
|
+
values = Uint32Array.from(V, (_, i) => i);
|
1109
|
+
// Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123
|
1110
|
+
values.sort(valueof === ascending$3 ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));
|
1111
|
+
values.forEach((j, i) => {
|
1112
|
+
const c = compareIndex(j, k === undefined ? j : k);
|
1113
|
+
if (c >= 0) {
|
1114
|
+
if (k === undefined || c > 0) k = j, r = i;
|
1115
|
+
R[j] = r;
|
1116
|
+
} else {
|
1117
|
+
R[j] = NaN;
|
1118
|
+
}
|
1119
|
+
});
|
1120
|
+
return R;
|
1121
|
+
}
|
1122
|
+
|
885
1123
|
function least(values, compare = ascending$3) {
|
886
1124
|
let min;
|
887
1125
|
let defined = false;
|
@@ -927,34 +1165,6 @@ function leastIndex(values, compare = ascending$3) {
|
|
927
1165
|
return min;
|
928
1166
|
}
|
929
1167
|
|
930
|
-
function greatest(values, compare = ascending$3) {
|
931
|
-
let max;
|
932
|
-
let defined = false;
|
933
|
-
if (compare.length === 1) {
|
934
|
-
let maxValue;
|
935
|
-
for (const element of values) {
|
936
|
-
const value = compare(element);
|
937
|
-
if (defined
|
938
|
-
? ascending$3(value, maxValue) > 0
|
939
|
-
: ascending$3(value, value) === 0) {
|
940
|
-
max = element;
|
941
|
-
maxValue = value;
|
942
|
-
defined = true;
|
943
|
-
}
|
944
|
-
}
|
945
|
-
} else {
|
946
|
-
for (const value of values) {
|
947
|
-
if (defined
|
948
|
-
? compare(value, max) > 0
|
949
|
-
: compare(value, value) === 0) {
|
950
|
-
max = value;
|
951
|
-
defined = true;
|
952
|
-
}
|
953
|
-
}
|
954
|
-
}
|
955
|
-
return max;
|
956
|
-
}
|
957
|
-
|
958
1168
|
function greatestIndex(values, compare = ascending$3) {
|
959
1169
|
if (compare.length === 1) return maxIndex(values, compare);
|
960
1170
|
let maxValue;
|
@@ -1089,7 +1299,7 @@ function reverse$1(values) {
|
|
1089
1299
|
}
|
1090
1300
|
|
1091
1301
|
function difference(values, ...others) {
|
1092
|
-
values = new
|
1302
|
+
values = new InternSet(values);
|
1093
1303
|
for (const other of others) {
|
1094
1304
|
for (const value of other) {
|
1095
1305
|
values.delete(value);
|
@@ -1099,7 +1309,7 @@ function difference(values, ...others) {
|
|
1099
1309
|
}
|
1100
1310
|
|
1101
1311
|
function disjoint(values, other) {
|
1102
|
-
const iterator = other[Symbol.iterator](), set = new
|
1312
|
+
const iterator = other[Symbol.iterator](), set = new InternSet();
|
1103
1313
|
for (const v of values) {
|
1104
1314
|
if (set.has(v)) return false;
|
1105
1315
|
let value, done;
|
@@ -1112,12 +1322,8 @@ function disjoint(values, other) {
|
|
1112
1322
|
return true;
|
1113
1323
|
}
|
1114
1324
|
|
1115
|
-
function set$2(values) {
|
1116
|
-
return values instanceof Set ? values : new Set(values);
|
1117
|
-
}
|
1118
|
-
|
1119
1325
|
function intersection(values, ...others) {
|
1120
|
-
values = new
|
1326
|
+
values = new InternSet(values);
|
1121
1327
|
others = others.map(set$2);
|
1122
1328
|
out: for (const value of values) {
|
1123
1329
|
for (const other of others) {
|
@@ -1130,26 +1336,36 @@ function intersection(values, ...others) {
|
|
1130
1336
|
return values;
|
1131
1337
|
}
|
1132
1338
|
|
1339
|
+
function set$2(values) {
|
1340
|
+
return values instanceof InternSet ? values : new InternSet(values);
|
1341
|
+
}
|
1342
|
+
|
1133
1343
|
function superset(values, other) {
|
1134
1344
|
const iterator = values[Symbol.iterator](), set = new Set();
|
1135
1345
|
for (const o of other) {
|
1136
|
-
|
1346
|
+
const io = intern(o);
|
1347
|
+
if (set.has(io)) continue;
|
1137
1348
|
let value, done;
|
1138
1349
|
while (({value, done} = iterator.next())) {
|
1139
1350
|
if (done) return false;
|
1140
|
-
|
1141
|
-
|
1351
|
+
const ivalue = intern(value);
|
1352
|
+
set.add(ivalue);
|
1353
|
+
if (Object.is(io, ivalue)) break;
|
1142
1354
|
}
|
1143
1355
|
}
|
1144
1356
|
return true;
|
1145
1357
|
}
|
1146
1358
|
|
1359
|
+
function intern(value) {
|
1360
|
+
return value !== null && typeof value === "object" ? value.valueOf() : value;
|
1361
|
+
}
|
1362
|
+
|
1147
1363
|
function subset(values, other) {
|
1148
1364
|
return superset(other, values);
|
1149
1365
|
}
|
1150
1366
|
|
1151
1367
|
function union(...others) {
|
1152
|
-
const set = new
|
1368
|
+
const set = new InternSet();
|
1153
1369
|
for (const other of others) {
|
1154
1370
|
for (const o of other) {
|
1155
1371
|
set.add(o);
|
@@ -2690,15 +2906,15 @@ var darker = 0.7;
|
|
2690
2906
|
var brighter = 1 / darker;
|
2691
2907
|
|
2692
2908
|
var reI = "\\s*([+-]?\\d+)\\s*",
|
2693
|
-
reN = "\\s*([+-]?\\d
|
2694
|
-
reP = "\\s*([+-]?\\d
|
2909
|
+
reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
|
2910
|
+
reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
|
2695
2911
|
reHex = /^#([0-9a-f]{3,8})$/,
|
2696
|
-
reRgbInteger = new RegExp(
|
2697
|
-
reRgbPercent = new RegExp(
|
2698
|
-
reRgbaInteger = new RegExp(
|
2699
|
-
reRgbaPercent = new RegExp(
|
2700
|
-
reHslPercent = new RegExp(
|
2701
|
-
reHslaPercent = new RegExp(
|
2912
|
+
reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),
|
2913
|
+
reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),
|
2914
|
+
reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),
|
2915
|
+
reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),
|
2916
|
+
reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),
|
2917
|
+
reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
|
2702
2918
|
|
2703
2919
|
var named = {
|
2704
2920
|
aliceblue: 0xf0f8ff,
|
@@ -2852,14 +3068,15 @@ var named = {
|
|
2852
3068
|
};
|
2853
3069
|
|
2854
3070
|
define(Color, color, {
|
2855
|
-
copy
|
3071
|
+
copy(channels) {
|
2856
3072
|
return Object.assign(new this.constructor, this, channels);
|
2857
3073
|
},
|
2858
|
-
displayable
|
3074
|
+
displayable() {
|
2859
3075
|
return this.rgb().displayable();
|
2860
3076
|
},
|
2861
3077
|
hex: color_formatHex, // Deprecated! Use color.formatHex.
|
2862
3078
|
formatHex: color_formatHex,
|
3079
|
+
formatHex8: color_formatHex8,
|
2863
3080
|
formatHsl: color_formatHsl,
|
2864
3081
|
formatRgb: color_formatRgb,
|
2865
3082
|
toString: color_formatRgb
|
@@ -2869,6 +3086,10 @@ function color_formatHex() {
|
|
2869
3086
|
return this.rgb().formatHex();
|
2870
3087
|
}
|
2871
3088
|
|
3089
|
+
function color_formatHex8() {
|
3090
|
+
return this.rgb().formatHex8();
|
3091
|
+
}
|
3092
|
+
|
2872
3093
|
function color_formatHsl() {
|
2873
3094
|
return hslConvert(this).formatHsl();
|
2874
3095
|
}
|
@@ -2924,18 +3145,21 @@ function Rgb(r, g, b, opacity) {
|
|
2924
3145
|
}
|
2925
3146
|
|
2926
3147
|
define(Rgb, rgb, extend(Color, {
|
2927
|
-
brighter
|
3148
|
+
brighter(k) {
|
2928
3149
|
k = k == null ? brighter : Math.pow(brighter, k);
|
2929
3150
|
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
|
2930
3151
|
},
|
2931
|
-
darker
|
3152
|
+
darker(k) {
|
2932
3153
|
k = k == null ? darker : Math.pow(darker, k);
|
2933
3154
|
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
|
2934
3155
|
},
|
2935
|
-
rgb
|
3156
|
+
rgb() {
|
2936
3157
|
return this;
|
2937
3158
|
},
|
2938
|
-
|
3159
|
+
clamp() {
|
3160
|
+
return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
|
3161
|
+
},
|
3162
|
+
displayable() {
|
2939
3163
|
return (-0.5 <= this.r && this.r < 255.5)
|
2940
3164
|
&& (-0.5 <= this.g && this.g < 255.5)
|
2941
3165
|
&& (-0.5 <= this.b && this.b < 255.5)
|
@@ -2943,25 +3167,34 @@ define(Rgb, rgb, extend(Color, {
|
|
2943
3167
|
},
|
2944
3168
|
hex: rgb_formatHex, // Deprecated! Use color.formatHex.
|
2945
3169
|
formatHex: rgb_formatHex,
|
3170
|
+
formatHex8: rgb_formatHex8,
|
2946
3171
|
formatRgb: rgb_formatRgb,
|
2947
3172
|
toString: rgb_formatRgb
|
2948
3173
|
}));
|
2949
3174
|
|
2950
3175
|
function rgb_formatHex() {
|
2951
|
-
return
|
3176
|
+
return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
|
3177
|
+
}
|
3178
|
+
|
3179
|
+
function rgb_formatHex8() {
|
3180
|
+
return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
|
2952
3181
|
}
|
2953
3182
|
|
2954
3183
|
function rgb_formatRgb() {
|
2955
|
-
|
2956
|
-
return
|
2957
|
-
|
2958
|
-
|
2959
|
-
|
2960
|
-
|
3184
|
+
const a = clampa(this.opacity);
|
3185
|
+
return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
|
3186
|
+
}
|
3187
|
+
|
3188
|
+
function clampa(opacity) {
|
3189
|
+
return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
|
3190
|
+
}
|
3191
|
+
|
3192
|
+
function clampi(value) {
|
3193
|
+
return Math.max(0, Math.min(255, Math.round(value) || 0));
|
2961
3194
|
}
|
2962
3195
|
|
2963
3196
|
function hex(value) {
|
2964
|
-
value =
|
3197
|
+
value = clampi(value);
|
2965
3198
|
return (value < 16 ? "0" : "") + value.toString(16);
|
2966
3199
|
}
|
2967
3200
|
|
@@ -3010,15 +3243,15 @@ function Hsl(h, s, l, opacity) {
|
|
3010
3243
|
}
|
3011
3244
|
|
3012
3245
|
define(Hsl, hsl$2, extend(Color, {
|
3013
|
-
brighter
|
3246
|
+
brighter(k) {
|
3014
3247
|
k = k == null ? brighter : Math.pow(brighter, k);
|
3015
3248
|
return new Hsl(this.h, this.s, this.l * k, this.opacity);
|
3016
3249
|
},
|
3017
|
-
darker
|
3250
|
+
darker(k) {
|
3018
3251
|
k = k == null ? darker : Math.pow(darker, k);
|
3019
3252
|
return new Hsl(this.h, this.s, this.l * k, this.opacity);
|
3020
3253
|
},
|
3021
|
-
rgb
|
3254
|
+
rgb() {
|
3022
3255
|
var h = this.h % 360 + (this.h < 0) * 360,
|
3023
3256
|
s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
|
3024
3257
|
l = this.l,
|
@@ -3031,21 +3264,29 @@ define(Hsl, hsl$2, extend(Color, {
|
|
3031
3264
|
this.opacity
|
3032
3265
|
);
|
3033
3266
|
},
|
3034
|
-
|
3267
|
+
clamp() {
|
3268
|
+
return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
|
3269
|
+
},
|
3270
|
+
displayable() {
|
3035
3271
|
return (0 <= this.s && this.s <= 1 || isNaN(this.s))
|
3036
3272
|
&& (0 <= this.l && this.l <= 1)
|
3037
3273
|
&& (0 <= this.opacity && this.opacity <= 1);
|
3038
3274
|
},
|
3039
|
-
formatHsl
|
3040
|
-
|
3041
|
-
return
|
3042
|
-
+ (this.h || 0) + ", "
|
3043
|
-
+ (this.s || 0) * 100 + "%, "
|
3044
|
-
+ (this.l || 0) * 100 + "%"
|
3045
|
-
+ (a === 1 ? ")" : ", " + a + ")");
|
3275
|
+
formatHsl() {
|
3276
|
+
const a = clampa(this.opacity);
|
3277
|
+
return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
|
3046
3278
|
}
|
3047
3279
|
}));
|
3048
3280
|
|
3281
|
+
function clamph(value) {
|
3282
|
+
value = (value || 0) % 360;
|
3283
|
+
return value < 0 ? value + 360 : value;
|
3284
|
+
}
|
3285
|
+
|
3286
|
+
function clampt(value) {
|
3287
|
+
return Math.max(0, Math.min(1, value || 0));
|
3288
|
+
}
|
3289
|
+
|
3049
3290
|
/* From FvD 13.37, CSS Color Module Level 3 */
|
3050
3291
|
function hsl2rgb(h, m1, m2) {
|
3051
3292
|
return (h < 60 ? m1 + (m2 - m1) * h / 60
|
@@ -3098,13 +3339,13 @@ function Lab(l, a, b, opacity) {
|
|
3098
3339
|
}
|
3099
3340
|
|
3100
3341
|
define(Lab, lab$1, extend(Color, {
|
3101
|
-
brighter
|
3342
|
+
brighter(k) {
|
3102
3343
|
return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
|
3103
3344
|
},
|
3104
|
-
darker
|
3345
|
+
darker(k) {
|
3105
3346
|
return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
|
3106
3347
|
},
|
3107
|
-
rgb
|
3348
|
+
rgb() {
|
3108
3349
|
var y = (this.l + 16) / 116,
|
3109
3350
|
x = isNaN(this.a) ? y : y + this.a / 500,
|
3110
3351
|
z = isNaN(this.b) ? y : y - this.b / 200;
|
@@ -3166,13 +3407,13 @@ function hcl2lab(o) {
|
|
3166
3407
|
}
|
3167
3408
|
|
3168
3409
|
define(Hcl, hcl$2, extend(Color, {
|
3169
|
-
brighter
|
3410
|
+
brighter(k) {
|
3170
3411
|
return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
|
3171
3412
|
},
|
3172
|
-
darker
|
3413
|
+
darker(k) {
|
3173
3414
|
return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
|
3174
3415
|
},
|
3175
|
-
rgb
|
3416
|
+
rgb() {
|
3176
3417
|
return hcl2lab(this).rgb();
|
3177
3418
|
}
|
3178
3419
|
}));
|
@@ -3212,15 +3453,15 @@ function Cubehelix(h, s, l, opacity) {
|
|
3212
3453
|
}
|
3213
3454
|
|
3214
3455
|
define(Cubehelix, cubehelix$3, extend(Color, {
|
3215
|
-
brighter
|
3456
|
+
brighter(k) {
|
3216
3457
|
k = k == null ? brighter : Math.pow(brighter, k);
|
3217
3458
|
return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
|
3218
3459
|
},
|
3219
|
-
darker
|
3460
|
+
darker(k) {
|
3220
3461
|
k = k == null ? darker : Math.pow(darker, k);
|
3221
3462
|
return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
|
3222
3463
|
},
|
3223
|
-
rgb
|
3464
|
+
rgb() {
|
3224
3465
|
var h = isNaN(this.h) ? 0 : (this.h + 120) * radians$1,
|
3225
3466
|
l = +this.l,
|
3226
3467
|
a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
|
@@ -5800,39 +6041,58 @@ const pi$2 = Math.PI,
|
|
5800
6041
|
epsilon$4 = 1e-6,
|
5801
6042
|
tauEpsilon = tau$3 - epsilon$4;
|
5802
6043
|
|
5803
|
-
function
|
5804
|
-
this.
|
5805
|
-
|
5806
|
-
|
6044
|
+
function append$1(strings) {
|
6045
|
+
this._ += strings[0];
|
6046
|
+
for (let i = 1, n = strings.length; i < n; ++i) {
|
6047
|
+
this._ += arguments[i] + strings[i];
|
6048
|
+
}
|
5807
6049
|
}
|
5808
6050
|
|
5809
|
-
function
|
5810
|
-
|
6051
|
+
function appendRound$1(digits) {
|
6052
|
+
let d = Math.floor(digits);
|
6053
|
+
if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);
|
6054
|
+
if (d > 15) return append$1;
|
6055
|
+
const k = 10 ** d;
|
6056
|
+
return function(strings) {
|
6057
|
+
this._ += strings[0];
|
6058
|
+
for (let i = 1, n = strings.length; i < n; ++i) {
|
6059
|
+
this._ += Math.round(arguments[i] * k) / k + strings[i];
|
6060
|
+
}
|
6061
|
+
};
|
5811
6062
|
}
|
5812
6063
|
|
5813
|
-
Path$1
|
5814
|
-
constructor
|
5815
|
-
|
5816
|
-
this.
|
5817
|
-
|
5818
|
-
|
6064
|
+
let Path$1 = class Path {
|
6065
|
+
constructor(digits) {
|
6066
|
+
this._x0 = this._y0 = // start of current subpath
|
6067
|
+
this._x1 = this._y1 = null; // end of current subpath
|
6068
|
+
this._ = "";
|
6069
|
+
this._append = digits == null ? append$1 : appendRound$1(digits);
|
6070
|
+
}
|
6071
|
+
moveTo(x, y) {
|
6072
|
+
this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;
|
6073
|
+
}
|
6074
|
+
closePath() {
|
5819
6075
|
if (this._x1 !== null) {
|
5820
6076
|
this._x1 = this._x0, this._y1 = this._y0;
|
5821
|
-
this.
|
6077
|
+
this._append`Z`;
|
5822
6078
|
}
|
5823
|
-
}
|
5824
|
-
lineTo
|
5825
|
-
this.
|
5826
|
-
}
|
5827
|
-
quadraticCurveTo
|
5828
|
-
this.
|
5829
|
-
}
|
5830
|
-
bezierCurveTo
|
5831
|
-
this.
|
5832
|
-
}
|
5833
|
-
arcTo
|
6079
|
+
}
|
6080
|
+
lineTo(x, y) {
|
6081
|
+
this._append`L${this._x1 = +x},${this._y1 = +y}`;
|
6082
|
+
}
|
6083
|
+
quadraticCurveTo(x1, y1, x, y) {
|
6084
|
+
this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;
|
6085
|
+
}
|
6086
|
+
bezierCurveTo(x1, y1, x2, y2, x, y) {
|
6087
|
+
this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;
|
6088
|
+
}
|
6089
|
+
arcTo(x1, y1, x2, y2, r) {
|
5834
6090
|
x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
|
5835
|
-
|
6091
|
+
|
6092
|
+
// Is the radius negative? Error.
|
6093
|
+
if (r < 0) throw new Error(`negative radius: ${r}`);
|
6094
|
+
|
6095
|
+
let x0 = this._x1,
|
5836
6096
|
y0 = this._y1,
|
5837
6097
|
x21 = x2 - x1,
|
5838
6098
|
y21 = y2 - y1,
|
@@ -5840,12 +6100,9 @@ Path$1.prototype = path.prototype = {
|
|
5840
6100
|
y01 = y0 - y1,
|
5841
6101
|
l01_2 = x01 * x01 + y01 * y01;
|
5842
6102
|
|
5843
|
-
// Is the radius negative? Error.
|
5844
|
-
if (r < 0) throw new Error("negative radius: " + r);
|
5845
|
-
|
5846
6103
|
// Is this path empty? Move to (x1,y1).
|
5847
6104
|
if (this._x1 === null) {
|
5848
|
-
this.
|
6105
|
+
this._append`M${this._x1 = x1},${this._y1 = y1}`;
|
5849
6106
|
}
|
5850
6107
|
|
5851
6108
|
// Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
|
@@ -5855,12 +6112,12 @@ Path$1.prototype = path.prototype = {
|
|
5855
6112
|
// Equivalently, is (x1,y1) coincident with (x2,y2)?
|
5856
6113
|
// Or, is the radius zero? Line to (x1,y1).
|
5857
6114
|
else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$4) || !r) {
|
5858
|
-
this.
|
6115
|
+
this._append`L${this._x1 = x1},${this._y1 = y1}`;
|
5859
6116
|
}
|
5860
6117
|
|
5861
6118
|
// Otherwise, draw an arc!
|
5862
6119
|
else {
|
5863
|
-
|
6120
|
+
let x20 = x2 - x0,
|
5864
6121
|
y20 = y2 - y0,
|
5865
6122
|
l21_2 = x21 * x21 + y21 * y21,
|
5866
6123
|
l20_2 = x20 * x20 + y20 * y20,
|
@@ -5872,32 +6129,33 @@ Path$1.prototype = path.prototype = {
|
|
5872
6129
|
|
5873
6130
|
// If the start tangent is not coincident with (x0,y0), line to.
|
5874
6131
|
if (Math.abs(t01 - 1) > epsilon$4) {
|
5875
|
-
this.
|
6132
|
+
this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;
|
5876
6133
|
}
|
5877
6134
|
|
5878
|
-
this.
|
6135
|
+
this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;
|
5879
6136
|
}
|
5880
|
-
}
|
5881
|
-
arc
|
6137
|
+
}
|
6138
|
+
arc(x, y, r, a0, a1, ccw) {
|
5882
6139
|
x = +x, y = +y, r = +r, ccw = !!ccw;
|
5883
|
-
|
6140
|
+
|
6141
|
+
// Is the radius negative? Error.
|
6142
|
+
if (r < 0) throw new Error(`negative radius: ${r}`);
|
6143
|
+
|
6144
|
+
let dx = r * Math.cos(a0),
|
5884
6145
|
dy = r * Math.sin(a0),
|
5885
6146
|
x0 = x + dx,
|
5886
6147
|
y0 = y + dy,
|
5887
6148
|
cw = 1 ^ ccw,
|
5888
6149
|
da = ccw ? a0 - a1 : a1 - a0;
|
5889
6150
|
|
5890
|
-
// Is the radius negative? Error.
|
5891
|
-
if (r < 0) throw new Error("negative radius: " + r);
|
5892
|
-
|
5893
6151
|
// Is this path empty? Move to (x0,y0).
|
5894
6152
|
if (this._x1 === null) {
|
5895
|
-
this.
|
6153
|
+
this._append`M${x0},${y0}`;
|
5896
6154
|
}
|
5897
6155
|
|
5898
6156
|
// Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
|
5899
6157
|
else if (Math.abs(this._x1 - x0) > epsilon$4 || Math.abs(this._y1 - y0) > epsilon$4) {
|
5900
|
-
this.
|
6158
|
+
this._append`L${x0},${y0}`;
|
5901
6159
|
}
|
5902
6160
|
|
5903
6161
|
// Is this arc empty? We’re done.
|
@@ -5908,22 +6166,33 @@ Path$1.prototype = path.prototype = {
|
|
5908
6166
|
|
5909
6167
|
// Is this a complete circle? Draw two arcs to complete the circle.
|
5910
6168
|
if (da > tauEpsilon) {
|
5911
|
-
this.
|
6169
|
+
this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;
|
5912
6170
|
}
|
5913
6171
|
|
5914
6172
|
// Is this arc non-empty? Draw an arc!
|
5915
6173
|
else if (da > epsilon$4) {
|
5916
|
-
this.
|
6174
|
+
this._append`A${r},${r},0,${+(da >= pi$2)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;
|
5917
6175
|
}
|
5918
|
-
}
|
5919
|
-
rect
|
5920
|
-
this.
|
5921
|
-
}
|
5922
|
-
toString
|
6176
|
+
}
|
6177
|
+
rect(x, y, w, h) {
|
6178
|
+
this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;
|
6179
|
+
}
|
6180
|
+
toString() {
|
5923
6181
|
return this._;
|
5924
6182
|
}
|
5925
6183
|
};
|
5926
6184
|
|
6185
|
+
function path() {
|
6186
|
+
return new Path$1;
|
6187
|
+
}
|
6188
|
+
|
6189
|
+
// Allow instanceof d3.path
|
6190
|
+
path.prototype = Path$1.prototype;
|
6191
|
+
|
6192
|
+
function pathRound(digits = 3) {
|
6193
|
+
return new Path$1(+digits);
|
6194
|
+
}
|
6195
|
+
|
5927
6196
|
var slice$2 = Array.prototype.slice;
|
5928
6197
|
|
5929
6198
|
function constant$6(x) {
|
@@ -6127,7 +6396,7 @@ var cases = [
|
|
6127
6396
|
[]
|
6128
6397
|
];
|
6129
6398
|
|
6130
|
-
function
|
6399
|
+
function Contours() {
|
6131
6400
|
var dx = 1,
|
6132
6401
|
dy = 1,
|
6133
6402
|
threshold = thresholdSturges,
|
@@ -6138,8 +6407,10 @@ function contours() {
|
|
6138
6407
|
|
6139
6408
|
// Convert number of thresholds into uniform thresholds.
|
6140
6409
|
if (!Array.isArray(tz)) {
|
6141
|
-
const e = extent$1(values
|
6142
|
-
tz = ticks(
|
6410
|
+
const e = extent$1(values, finite);
|
6411
|
+
tz = ticks(...nice$1(e[0], e[1], tz), tz);
|
6412
|
+
while (tz[tz.length - 1] >= e[1]) tz.pop();
|
6413
|
+
while (tz[1] < e[0]) tz.shift();
|
6143
6414
|
} else {
|
6144
6415
|
tz = tz.slice().sort(ascending$1);
|
6145
6416
|
}
|
@@ -6150,11 +6421,14 @@ function contours() {
|
|
6150
6421
|
// Accumulate, smooth contour rings, assign holes to exterior rings.
|
6151
6422
|
// Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
|
6152
6423
|
function contour(values, value) {
|
6424
|
+
const v = value == null ? NaN : +value;
|
6425
|
+
if (isNaN(v)) throw new Error(`invalid value: ${value}`);
|
6426
|
+
|
6153
6427
|
var polygons = [],
|
6154
6428
|
holes = [];
|
6155
6429
|
|
6156
|
-
isorings(values,
|
6157
|
-
smooth(ring, values,
|
6430
|
+
isorings(values, v, function(ring) {
|
6431
|
+
smooth(ring, values, v);
|
6158
6432
|
if (area$3(ring) > 0) polygons.push([ring]);
|
6159
6433
|
else holes.push(ring);
|
6160
6434
|
});
|
@@ -6184,10 +6458,10 @@ function contours() {
|
|
6184
6458
|
|
6185
6459
|
// Special case for the first row (y = -1, t2 = t3 = 0).
|
6186
6460
|
x = y = -1;
|
6187
|
-
t1 = values[0]
|
6461
|
+
t1 = above(values[0], value);
|
6188
6462
|
cases[t1 << 1].forEach(stitch);
|
6189
6463
|
while (++x < dx - 1) {
|
6190
|
-
t0 = t1, t1 = values[x + 1]
|
6464
|
+
t0 = t1, t1 = above(values[x + 1], value);
|
6191
6465
|
cases[t0 | t1 << 1].forEach(stitch);
|
6192
6466
|
}
|
6193
6467
|
cases[t1 << 0].forEach(stitch);
|
@@ -6195,12 +6469,12 @@ function contours() {
|
|
6195
6469
|
// General case for the intermediate rows.
|
6196
6470
|
while (++y < dy - 1) {
|
6197
6471
|
x = -1;
|
6198
|
-
t1 = values[y * dx + dx]
|
6199
|
-
t2 = values[y * dx]
|
6472
|
+
t1 = above(values[y * dx + dx], value);
|
6473
|
+
t2 = above(values[y * dx], value);
|
6200
6474
|
cases[t1 << 1 | t2 << 2].forEach(stitch);
|
6201
6475
|
while (++x < dx - 1) {
|
6202
|
-
t0 = t1, t1 = values[y * dx + dx + x + 1]
|
6203
|
-
t3 = t2, t2 = values[y * dx + x + 1]
|
6476
|
+
t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);
|
6477
|
+
t3 = t2, t2 = above(values[y * dx + x + 1], value);
|
6204
6478
|
cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
|
6205
6479
|
}
|
6206
6480
|
cases[t1 | t2 << 3].forEach(stitch);
|
@@ -6211,7 +6485,7 @@ function contours() {
|
|
6211
6485
|
t2 = values[y * dx] >= value;
|
6212
6486
|
cases[t2 << 2].forEach(stitch);
|
6213
6487
|
while (++x < dx - 1) {
|
6214
|
-
t3 = t2, t2 = values[y * dx + x + 1]
|
6488
|
+
t3 = t2, t2 = above(values[y * dx + x + 1], value);
|
6215
6489
|
cases[t2 << 2 | t3 << 3].forEach(stitch);
|
6216
6490
|
}
|
6217
6491
|
cases[t2 << 3].forEach(stitch);
|
@@ -6268,15 +6542,12 @@ function contours() {
|
|
6268
6542
|
y = point[1],
|
6269
6543
|
xt = x | 0,
|
6270
6544
|
yt = y | 0,
|
6271
|
-
|
6272
|
-
v1 = values[yt * dx + xt];
|
6545
|
+
v1 = valid(values[yt * dx + xt]);
|
6273
6546
|
if (x > 0 && x < dx && xt === x) {
|
6274
|
-
|
6275
|
-
point[0] = x + (value - v0) / (v1 - v0) - 0.5;
|
6547
|
+
point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);
|
6276
6548
|
}
|
6277
6549
|
if (y > 0 && y < dy && yt === y) {
|
6278
|
-
|
6279
|
-
point[1] = y + (value - v0) / (v1 - v0) - 0.5;
|
6550
|
+
point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);
|
6280
6551
|
}
|
6281
6552
|
});
|
6282
6553
|
}
|
@@ -6301,48 +6572,27 @@ function contours() {
|
|
6301
6572
|
return contours;
|
6302
6573
|
}
|
6303
6574
|
|
6304
|
-
//
|
6305
|
-
|
6306
|
-
|
6307
|
-
function blurX(source, target, r) {
|
6308
|
-
var n = source.width,
|
6309
|
-
m = source.height,
|
6310
|
-
w = (r << 1) + 1;
|
6311
|
-
for (var j = 0; j < m; ++j) {
|
6312
|
-
for (var i = 0, sr = 0; i < n + r; ++i) {
|
6313
|
-
if (i < n) {
|
6314
|
-
sr += source.data[i + j * n];
|
6315
|
-
}
|
6316
|
-
if (i >= r) {
|
6317
|
-
if (i >= w) {
|
6318
|
-
sr -= source.data[i - w + j * n];
|
6319
|
-
}
|
6320
|
-
target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
|
6321
|
-
}
|
6322
|
-
}
|
6323
|
-
}
|
6575
|
+
// When computing the extent, ignore infinite values (as well as invalid ones).
|
6576
|
+
function finite(x) {
|
6577
|
+
return isFinite(x) ? x : NaN;
|
6324
6578
|
}
|
6325
6579
|
|
6326
|
-
//
|
6327
|
-
//
|
6328
|
-
|
6329
|
-
|
6330
|
-
|
6331
|
-
|
6332
|
-
|
6333
|
-
|
6334
|
-
|
6335
|
-
|
6336
|
-
|
6337
|
-
|
6338
|
-
|
6339
|
-
|
6340
|
-
|
6341
|
-
|
6342
|
-
target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
|
6343
|
-
}
|
6344
|
-
}
|
6345
|
-
}
|
6580
|
+
// Is the (possibly invalid) x greater than or equal to the (known valid) value?
|
6581
|
+
// Treat any invalid value as below negative infinity.
|
6582
|
+
function above(x, value) {
|
6583
|
+
return x == null ? false : +x >= value;
|
6584
|
+
}
|
6585
|
+
|
6586
|
+
// During smoothing, treat any invalid value as negative infinity.
|
6587
|
+
function valid(v) {
|
6588
|
+
return v == null || isNaN(v = +v) ? -Infinity : v;
|
6589
|
+
}
|
6590
|
+
|
6591
|
+
function smooth1(x, v0, v1, value) {
|
6592
|
+
const a = value - v0;
|
6593
|
+
const b = v1 - v0;
|
6594
|
+
const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);
|
6595
|
+
return isNaN(d) ? x : x + d - 0.5;
|
6346
6596
|
}
|
6347
6597
|
|
6348
6598
|
function defaultX$1(d) {
|
@@ -6370,54 +6620,63 @@ function density() {
|
|
6370
6620
|
m = (dy + o * 2) >> k, // grid height
|
6371
6621
|
threshold = constant$5(20);
|
6372
6622
|
|
6373
|
-
function
|
6374
|
-
var
|
6375
|
-
|
6376
|
-
|
6623
|
+
function grid(data) {
|
6624
|
+
var values = new Float32Array(n * m),
|
6625
|
+
pow2k = Math.pow(2, -k),
|
6626
|
+
i = -1;
|
6377
6627
|
|
6378
|
-
|
6379
|
-
var xi = (x(d, i, data) + o) * pow2k,
|
6628
|
+
for (const d of data) {
|
6629
|
+
var xi = (x(d, ++i, data) + o) * pow2k,
|
6380
6630
|
yi = (y(d, i, data) + o) * pow2k,
|
6381
6631
|
wi = +weight(d, i, data);
|
6382
|
-
if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
|
6632
|
+
if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {
|
6383
6633
|
var x0 = Math.floor(xi),
|
6384
6634
|
y0 = Math.floor(yi),
|
6385
6635
|
xt = xi - x0 - 0.5,
|
6386
6636
|
yt = yi - y0 - 0.5;
|
6387
|
-
|
6388
|
-
|
6389
|
-
|
6390
|
-
|
6637
|
+
values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;
|
6638
|
+
values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;
|
6639
|
+
values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;
|
6640
|
+
values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;
|
6391
6641
|
}
|
6392
|
-
}
|
6642
|
+
}
|
6393
6643
|
|
6394
|
-
|
6395
|
-
|
6396
|
-
|
6397
|
-
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
|
6398
|
-
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
|
6399
|
-
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
|
6400
|
-
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
|
6644
|
+
blur2({data: values, width: n, height: m}, r * pow2k);
|
6645
|
+
return values;
|
6646
|
+
}
|
6401
6647
|
|
6402
|
-
|
6648
|
+
function density(data) {
|
6649
|
+
var values = grid(data),
|
6650
|
+
tz = threshold(values),
|
6651
|
+
pow4k = Math.pow(2, 2 * k);
|
6403
6652
|
|
6404
6653
|
// Convert number of thresholds into uniform thresholds.
|
6405
6654
|
if (!Array.isArray(tz)) {
|
6406
|
-
|
6407
|
-
tz = tickStep(0, stop, tz);
|
6408
|
-
tz = sequence(0, Math.floor(stop / tz) * tz, tz);
|
6409
|
-
tz.shift();
|
6655
|
+
tz = ticks(Number.MIN_VALUE, max$3(values) / pow4k, tz);
|
6410
6656
|
}
|
6411
6657
|
|
6412
|
-
return
|
6413
|
-
.thresholds(tz)
|
6658
|
+
return Contours()
|
6414
6659
|
.size([n, m])
|
6415
|
-
|
6416
|
-
|
6660
|
+
.thresholds(tz.map(d => d * pow4k))
|
6661
|
+
(values)
|
6662
|
+
.map((c, i) => (c.value = +tz[i], transform(c)));
|
6417
6663
|
}
|
6418
6664
|
|
6665
|
+
density.contours = function(data) {
|
6666
|
+
var values = grid(data),
|
6667
|
+
contours = Contours().size([n, m]),
|
6668
|
+
pow4k = Math.pow(2, 2 * k),
|
6669
|
+
contour = value => {
|
6670
|
+
value = +value;
|
6671
|
+
var c = transform(contours.contour(values, value * pow4k));
|
6672
|
+
c.value = value; // preserve exact threshold value
|
6673
|
+
return c;
|
6674
|
+
};
|
6675
|
+
Object.defineProperty(contour, "max", {get: () => max$3(values) / pow4k});
|
6676
|
+
return contour;
|
6677
|
+
};
|
6678
|
+
|
6419
6679
|
function transform(geometry) {
|
6420
|
-
geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
|
6421
6680
|
geometry.coordinates.forEach(transformPolygon);
|
6422
6681
|
return geometry;
|
6423
6682
|
}
|
@@ -6475,7 +6734,7 @@ function density() {
|
|
6475
6734
|
density.bandwidth = function(_) {
|
6476
6735
|
if (!arguments.length) return Math.sqrt(r * (r + 1));
|
6477
6736
|
if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth");
|
6478
|
-
return r =
|
6737
|
+
return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize();
|
6479
6738
|
};
|
6480
6739
|
|
6481
6740
|
return density;
|
@@ -6741,8 +7000,6 @@ function orient2d(ax, ay, bx, by, cx, cy) {
|
|
6741
7000
|
const detright = (ax - cx) * (by - cy);
|
6742
7001
|
const det = detleft - detright;
|
6743
7002
|
|
6744
|
-
if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) return det;
|
6745
|
-
|
6746
7003
|
const detsum = Math.abs(detleft + detright);
|
6747
7004
|
if (Math.abs(det) >= ccwerrboundA * detsum) return det;
|
6748
7005
|
|
@@ -7302,6 +7559,7 @@ class Voronoi {
|
|
7302
7559
|
}
|
7303
7560
|
_init() {
|
7304
7561
|
const {delaunay: {points, hull, triangles}, vectors} = this;
|
7562
|
+
let bx, by; // lazily computed barycenter of the hull
|
7305
7563
|
|
7306
7564
|
// Compute circumcenters.
|
7307
7565
|
const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);
|
@@ -7323,17 +7581,15 @@ class Voronoi {
|
|
7323
7581
|
const ab = (dx * ey - dy * ex) * 2;
|
7324
7582
|
|
7325
7583
|
if (Math.abs(ab) < 1e-9) {
|
7326
|
-
// degenerate
|
7327
|
-
//
|
7328
|
-
// the
|
7329
|
-
|
7330
|
-
|
7331
|
-
|
7332
|
-
|
7333
|
-
|
7334
|
-
|
7335
|
-
const r = triangles[0] * 2;
|
7336
|
-
a *= Math.sign((points[r] - x1) * ey - (points[r + 1] - y1) * ex);
|
7584
|
+
// For a degenerate triangle, the circumcenter is at the infinity, in a
|
7585
|
+
// direction orthogonal to the halfedge and away from the “center” of
|
7586
|
+
// the diagram <bx, by>, defined as the hull’s barycenter.
|
7587
|
+
if (bx === undefined) {
|
7588
|
+
bx = by = 0;
|
7589
|
+
for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];
|
7590
|
+
bx /= hull.length, by /= hull.length;
|
7591
|
+
}
|
7592
|
+
const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);
|
7337
7593
|
x = (x1 + x3) / 2 - a * ey;
|
7338
7594
|
y = (y1 + y3) / 2 + a * ex;
|
7339
7595
|
} else {
|
@@ -7442,11 +7698,10 @@ class Voronoi {
|
|
7442
7698
|
// find the common edge
|
7443
7699
|
if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {
|
7444
7700
|
for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {
|
7445
|
-
if (ci[ai]
|
7446
|
-
|
7447
|
-
|
7448
|
-
|
7449
|
-
) {
|
7701
|
+
if (ci[ai] === cj[aj]
|
7702
|
+
&& ci[ai + 1] === cj[aj + 1]
|
7703
|
+
&& ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]
|
7704
|
+
&& ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {
|
7450
7705
|
yield j;
|
7451
7706
|
break loop;
|
7452
7707
|
}
|
@@ -7478,9 +7733,9 @@ class Voronoi {
|
|
7478
7733
|
if (points === null) return null;
|
7479
7734
|
const {vectors: V} = this;
|
7480
7735
|
const v = i * 4;
|
7481
|
-
return V[v] || V[v + 1]
|
7736
|
+
return this._simplify(V[v] || V[v + 1]
|
7482
7737
|
? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])
|
7483
|
-
: this._clipFinite(i, points);
|
7738
|
+
: this._clipFinite(i, points));
|
7484
7739
|
}
|
7485
7740
|
_clipFinite(i, points) {
|
7486
7741
|
const n = points.length;
|
@@ -7523,8 +7778,11 @@ class Voronoi {
|
|
7523
7778
|
return P;
|
7524
7779
|
}
|
7525
7780
|
_clipSegment(x0, y0, x1, y1, c0, c1) {
|
7781
|
+
// for more robustness, always consider the segment in the same order
|
7782
|
+
const flip = c0 < c1;
|
7783
|
+
if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];
|
7526
7784
|
while (true) {
|
7527
|
-
if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];
|
7785
|
+
if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];
|
7528
7786
|
if (c0 & c1) return null;
|
7529
7787
|
let x, y, c = c0 || c1;
|
7530
7788
|
if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;
|
@@ -7568,14 +7826,6 @@ class Voronoi {
|
|
7568
7826
|
P.splice(j, 0, x, y), j += 2;
|
7569
7827
|
}
|
7570
7828
|
}
|
7571
|
-
if (P.length > 4) {
|
7572
|
-
for (let i = 0; i < P.length; i+= 2) {
|
7573
|
-
const j = (i + 2) % P.length, k = (i + 4) % P.length;
|
7574
|
-
if (P[i] === P[j] && P[j] === P[k]
|
7575
|
-
|| P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])
|
7576
|
-
P.splice(j, 2), i -= 2;
|
7577
|
-
}
|
7578
|
-
}
|
7579
7829
|
return j;
|
7580
7830
|
}
|
7581
7831
|
_project(x0, y0, vx, vy) {
|
@@ -7608,6 +7858,18 @@ class Voronoi {
|
|
7608
7858
|
| (y < this.ymin ? 0b0100
|
7609
7859
|
: y > this.ymax ? 0b1000 : 0b0000);
|
7610
7860
|
}
|
7861
|
+
_simplify(P) {
|
7862
|
+
if (P && P.length > 4) {
|
7863
|
+
for (let i = 0; i < P.length; i+= 2) {
|
7864
|
+
const j = (i + 2) % P.length, k = (i + 4) % P.length;
|
7865
|
+
if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {
|
7866
|
+
P.splice(j, 2), i -= 2;
|
7867
|
+
}
|
7868
|
+
}
|
7869
|
+
if (!P.length) P = null;
|
7870
|
+
}
|
7871
|
+
return P;
|
7872
|
+
}
|
7611
7873
|
}
|
7612
7874
|
|
7613
7875
|
const tau$2 = 2 * Math.PI, pow$2 = Math.pow;
|
@@ -8809,13 +9071,13 @@ function link$2(links) {
|
|
8809
9071
|
}
|
8810
9072
|
|
8811
9073
|
// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use
|
8812
|
-
const a$
|
8813
|
-
const c$
|
8814
|
-
const m = 4294967296; // 2^32
|
9074
|
+
const a$2 = 1664525;
|
9075
|
+
const c$4 = 1013904223;
|
9076
|
+
const m$1 = 4294967296; // 2^32
|
8815
9077
|
|
8816
|
-
function lcg$
|
9078
|
+
function lcg$2() {
|
8817
9079
|
let s = 1;
|
8818
|
-
return () => (s = (a$
|
9080
|
+
return () => (s = (a$2 * s + c$4) % m$1) / m$1;
|
8819
9081
|
}
|
8820
9082
|
|
8821
9083
|
function x$2(d) {
|
@@ -8839,7 +9101,7 @@ function simulation(nodes) {
|
|
8839
9101
|
forces = new Map(),
|
8840
9102
|
stepper = timer(step),
|
8841
9103
|
event = dispatch("tick", "end"),
|
8842
|
-
random = lcg$
|
9104
|
+
random = lcg$2();
|
8843
9105
|
|
8844
9106
|
if (nodes == null) nodes = [];
|
8845
9107
|
|
@@ -9377,7 +9639,7 @@ function identity$6(x) {
|
|
9377
9639
|
}
|
9378
9640
|
|
9379
9641
|
var map = Array.prototype.map,
|
9380
|
-
prefixes = ["y","z","a","f","p","n","
|
9642
|
+
prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
|
9381
9643
|
|
9382
9644
|
function formatLocale$1(locale) {
|
9383
9645
|
var group = locale.grouping === undefined || locale.thousands === undefined ? identity$6 : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
|
@@ -9386,7 +9648,7 @@ function formatLocale$1(locale) {
|
|
9386
9648
|
decimal = locale.decimal === undefined ? "." : locale.decimal + "",
|
9387
9649
|
numerals = locale.numerals === undefined ? identity$6 : formatNumerals(map.call(locale.numerals, String)),
|
9388
9650
|
percent = locale.percent === undefined ? "%" : locale.percent + "",
|
9389
|
-
minus = locale.minus === undefined ? "
|
9651
|
+
minus = locale.minus === undefined ? "−" : locale.minus + "",
|
9390
9652
|
nan = locale.nan === undefined ? "NaN" : locale.nan + "";
|
9391
9653
|
|
9392
9654
|
function newFormat(specifier) {
|
@@ -9766,22 +10028,22 @@ var lambda0$1, phi0, lambda1, phi1, // bounds
|
|
9766
10028
|
ranges,
|
9767
10029
|
range;
|
9768
10030
|
|
9769
|
-
var boundsStream$
|
10031
|
+
var boundsStream$2 = {
|
9770
10032
|
point: boundsPoint$1,
|
9771
10033
|
lineStart: boundsLineStart,
|
9772
10034
|
lineEnd: boundsLineEnd,
|
9773
10035
|
polygonStart: function() {
|
9774
|
-
boundsStream$
|
9775
|
-
boundsStream$
|
9776
|
-
boundsStream$
|
10036
|
+
boundsStream$2.point = boundsRingPoint;
|
10037
|
+
boundsStream$2.lineStart = boundsRingStart;
|
10038
|
+
boundsStream$2.lineEnd = boundsRingEnd;
|
9777
10039
|
deltaSum = new Adder();
|
9778
10040
|
areaStream$1.polygonStart();
|
9779
10041
|
},
|
9780
10042
|
polygonEnd: function() {
|
9781
10043
|
areaStream$1.polygonEnd();
|
9782
|
-
boundsStream$
|
9783
|
-
boundsStream$
|
9784
|
-
boundsStream$
|
10044
|
+
boundsStream$2.point = boundsPoint$1;
|
10045
|
+
boundsStream$2.lineStart = boundsLineStart;
|
10046
|
+
boundsStream$2.lineEnd = boundsLineEnd;
|
9785
10047
|
if (areaRingSum$1 < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
|
9786
10048
|
else if (deltaSum > epsilon$1) phi1 = 90;
|
9787
10049
|
else if (deltaSum < -epsilon$1) phi0 = -90;
|
@@ -9848,12 +10110,12 @@ function linePoint(lambda, phi) {
|
|
9848
10110
|
}
|
9849
10111
|
|
9850
10112
|
function boundsLineStart() {
|
9851
|
-
boundsStream$
|
10113
|
+
boundsStream$2.point = linePoint;
|
9852
10114
|
}
|
9853
10115
|
|
9854
10116
|
function boundsLineEnd() {
|
9855
10117
|
range[0] = lambda0$1, range[1] = lambda1;
|
9856
|
-
boundsStream$
|
10118
|
+
boundsStream$2.point = boundsPoint$1;
|
9857
10119
|
p0 = null;
|
9858
10120
|
}
|
9859
10121
|
|
@@ -9900,7 +10162,7 @@ function bounds(feature) {
|
|
9900
10162
|
|
9901
10163
|
phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
|
9902
10164
|
ranges = [];
|
9903
|
-
geoStream(feature, boundsStream$
|
10165
|
+
geoStream(feature, boundsStream$2);
|
9904
10166
|
|
9905
10167
|
// First, sort ranges by their minimum longitudes.
|
9906
10168
|
if (n = ranges.length) {
|
@@ -10091,7 +10353,8 @@ function compose(a, b) {
|
|
10091
10353
|
}
|
10092
10354
|
|
10093
10355
|
function rotationIdentity(lambda, phi) {
|
10094
|
-
|
10356
|
+
if (abs$1(lambda) > pi$1) lambda -= Math.round(lambda / tau$1) * tau$1;
|
10357
|
+
return [lambda, phi];
|
10095
10358
|
}
|
10096
10359
|
|
10097
10360
|
rotationIdentity.invert = rotationIdentity;
|
@@ -10105,7 +10368,9 @@ function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
|
|
10105
10368
|
|
10106
10369
|
function forwardRotationLambda(deltaLambda) {
|
10107
10370
|
return function(lambda, phi) {
|
10108
|
-
|
10371
|
+
lambda += deltaLambda;
|
10372
|
+
if (abs$1(lambda) > pi$1) lambda -= Math.round(lambda / tau$1) * tau$1;
|
10373
|
+
return [lambda, phi];
|
10109
10374
|
};
|
10110
10375
|
}
|
10111
10376
|
|
@@ -10192,7 +10457,7 @@ function circleRadius(cosRadius, point) {
|
|
10192
10457
|
return ((-point[2] < 0 ? -radius : radius) + tau$1 - epsilon$1) % tau$1;
|
10193
10458
|
}
|
10194
10459
|
|
10195
|
-
function circle$
|
10460
|
+
function circle$1() {
|
10196
10461
|
var center = constant$3([0, 0]),
|
10197
10462
|
radius = constant$3(90),
|
10198
10463
|
precision = constant$3(6),
|
@@ -11214,12 +11479,12 @@ function contains$1(object, point) {
|
|
11214
11479
|
}
|
11215
11480
|
|
11216
11481
|
function graticuleX(y0, y1, dy) {
|
11217
|
-
var y =
|
11482
|
+
var y = range$2(y0, y1 - epsilon$1, dy).concat(y1);
|
11218
11483
|
return function(x) { return y.map(function(y) { return [x, y]; }); };
|
11219
11484
|
}
|
11220
11485
|
|
11221
11486
|
function graticuleY(x0, x1, dx) {
|
11222
|
-
var x =
|
11487
|
+
var x = range$2(x0, x1 - epsilon$1, dx).concat(x1);
|
11223
11488
|
return function(y) { return x.map(function(x) { return [x, y]; }); };
|
11224
11489
|
}
|
11225
11490
|
|
@@ -11235,10 +11500,10 @@ function graticule() {
|
|
11235
11500
|
}
|
11236
11501
|
|
11237
11502
|
function lines() {
|
11238
|
-
return
|
11239
|
-
.concat(
|
11240
|
-
.concat(
|
11241
|
-
.concat(
|
11503
|
+
return range$2(ceil(X0 / DX) * DX, X1, DX).map(X)
|
11504
|
+
.concat(range$2(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
|
11505
|
+
.concat(range$2(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$1(x % DX) > epsilon$1; }).map(x))
|
11506
|
+
.concat(range$2(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$1(y % DY) > epsilon$1; }).map(y));
|
11242
11507
|
}
|
11243
11508
|
|
11244
11509
|
graticule.lines = function() {
|
@@ -11398,6 +11663,8 @@ function areaRingEnd() {
|
|
11398
11663
|
areaPoint(x00$2, y00$2);
|
11399
11664
|
}
|
11400
11665
|
|
11666
|
+
var pathArea = areaStream;
|
11667
|
+
|
11401
11668
|
var x0$2 = Infinity,
|
11402
11669
|
y0$2 = x0$2,
|
11403
11670
|
x1 = -x0$2,
|
@@ -11423,6 +11690,8 @@ function boundsPoint(x, y) {
|
|
11423
11690
|
if (y > y1) y1 = y;
|
11424
11691
|
}
|
11425
11692
|
|
11693
|
+
var boundsStream$1 = boundsStream;
|
11694
|
+
|
11426
11695
|
// TODO Enforce positive area for exterior, negative area for interior?
|
11427
11696
|
|
11428
11697
|
var X0 = 0,
|
@@ -11520,6 +11789,8 @@ function centroidPointRing(x, y) {
|
|
11520
11789
|
centroidPoint(x0$1 = x, y0$1 = y);
|
11521
11790
|
}
|
11522
11791
|
|
11792
|
+
var pathCentroid = centroidStream;
|
11793
|
+
|
11523
11794
|
function PathContext(context) {
|
11524
11795
|
this._context = context;
|
11525
11796
|
}
|
@@ -11603,68 +11874,98 @@ function lengthPoint(x, y) {
|
|
11603
11874
|
x0 = x, y0 = y;
|
11604
11875
|
}
|
11605
11876
|
|
11606
|
-
|
11607
|
-
this._string = [];
|
11608
|
-
}
|
11877
|
+
var pathMeasure = lengthStream;
|
11609
11878
|
|
11610
|
-
|
11611
|
-
|
11612
|
-
|
11613
|
-
|
11614
|
-
|
11879
|
+
// Simple caching for constant-radius points.
|
11880
|
+
let cacheDigits, cacheAppend, cacheRadius, cacheCircle;
|
11881
|
+
|
11882
|
+
class PathString {
|
11883
|
+
constructor(digits) {
|
11884
|
+
this._append = digits == null ? append : appendRound(digits);
|
11885
|
+
this._radius = 4.5;
|
11886
|
+
this._ = "";
|
11887
|
+
}
|
11888
|
+
pointRadius(_) {
|
11889
|
+
this._radius = +_;
|
11615
11890
|
return this;
|
11616
|
-
}
|
11617
|
-
polygonStart
|
11891
|
+
}
|
11892
|
+
polygonStart() {
|
11618
11893
|
this._line = 0;
|
11619
|
-
}
|
11620
|
-
polygonEnd
|
11894
|
+
}
|
11895
|
+
polygonEnd() {
|
11621
11896
|
this._line = NaN;
|
11622
|
-
}
|
11623
|
-
lineStart
|
11897
|
+
}
|
11898
|
+
lineStart() {
|
11624
11899
|
this._point = 0;
|
11625
|
-
}
|
11626
|
-
lineEnd
|
11627
|
-
if (this._line === 0) this.
|
11900
|
+
}
|
11901
|
+
lineEnd() {
|
11902
|
+
if (this._line === 0) this._ += "Z";
|
11628
11903
|
this._point = NaN;
|
11629
|
-
}
|
11630
|
-
point
|
11904
|
+
}
|
11905
|
+
point(x, y) {
|
11631
11906
|
switch (this._point) {
|
11632
11907
|
case 0: {
|
11633
|
-
this.
|
11908
|
+
this._append`M${x},${y}`;
|
11634
11909
|
this._point = 1;
|
11635
11910
|
break;
|
11636
11911
|
}
|
11637
11912
|
case 1: {
|
11638
|
-
this.
|
11913
|
+
this._append`L${x},${y}`;
|
11639
11914
|
break;
|
11640
11915
|
}
|
11641
11916
|
default: {
|
11642
|
-
|
11643
|
-
this.
|
11917
|
+
this._append`M${x},${y}`;
|
11918
|
+
if (this._radius !== cacheRadius || this._append !== cacheAppend) {
|
11919
|
+
const r = this._radius;
|
11920
|
+
const s = this._;
|
11921
|
+
this._ = ""; // stash the old string so we can cache the circle path fragment
|
11922
|
+
this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;
|
11923
|
+
cacheRadius = r;
|
11924
|
+
cacheAppend = this._append;
|
11925
|
+
cacheCircle = this._;
|
11926
|
+
this._ = s;
|
11927
|
+
}
|
11928
|
+
this._ += cacheCircle;
|
11644
11929
|
break;
|
11645
11930
|
}
|
11646
11931
|
}
|
11647
|
-
},
|
11648
|
-
result: function() {
|
11649
|
-
if (this._string.length) {
|
11650
|
-
var result = this._string.join("");
|
11651
|
-
this._string = [];
|
11652
|
-
return result;
|
11653
|
-
} else {
|
11654
|
-
return null;
|
11655
|
-
}
|
11656
11932
|
}
|
11657
|
-
|
11933
|
+
result() {
|
11934
|
+
const result = this._;
|
11935
|
+
this._ = "";
|
11936
|
+
return result.length ? result : null;
|
11937
|
+
}
|
11938
|
+
}
|
11658
11939
|
|
11659
|
-
function
|
11660
|
-
|
11661
|
-
|
11662
|
-
|
11663
|
-
|
11940
|
+
function append(strings) {
|
11941
|
+
let i = 1;
|
11942
|
+
this._ += strings[0];
|
11943
|
+
for (const j = strings.length; i < j; ++i) {
|
11944
|
+
this._ += arguments[i] + strings[i];
|
11945
|
+
}
|
11946
|
+
}
|
11947
|
+
|
11948
|
+
function appendRound(digits) {
|
11949
|
+
const d = Math.floor(digits);
|
11950
|
+
if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);
|
11951
|
+
if (d > 15) return append;
|
11952
|
+
if (d !== cacheDigits) {
|
11953
|
+
const k = 10 ** d;
|
11954
|
+
cacheDigits = d;
|
11955
|
+
cacheAppend = function append(strings) {
|
11956
|
+
let i = 1;
|
11957
|
+
this._ += strings[0];
|
11958
|
+
for (const j = strings.length; i < j; ++i) {
|
11959
|
+
this._ += Math.round(arguments[i] * k) / k + strings[i];
|
11960
|
+
}
|
11961
|
+
};
|
11962
|
+
}
|
11963
|
+
return cacheAppend;
|
11664
11964
|
}
|
11665
11965
|
|
11666
11966
|
function index$2(projection, context) {
|
11667
|
-
|
11967
|
+
let digits = 3,
|
11968
|
+
pointRadius = 4.5,
|
11668
11969
|
projectionStream,
|
11669
11970
|
contextStream;
|
11670
11971
|
|
@@ -11677,32 +11978,34 @@ function index$2(projection, context) {
|
|
11677
11978
|
}
|
11678
11979
|
|
11679
11980
|
path.area = function(object) {
|
11680
|
-
geoStream(object, projectionStream(
|
11681
|
-
return
|
11981
|
+
geoStream(object, projectionStream(pathArea));
|
11982
|
+
return pathArea.result();
|
11682
11983
|
};
|
11683
11984
|
|
11684
11985
|
path.measure = function(object) {
|
11685
|
-
geoStream(object, projectionStream(
|
11686
|
-
return
|
11986
|
+
geoStream(object, projectionStream(pathMeasure));
|
11987
|
+
return pathMeasure.result();
|
11687
11988
|
};
|
11688
11989
|
|
11689
11990
|
path.bounds = function(object) {
|
11690
|
-
geoStream(object, projectionStream(boundsStream));
|
11691
|
-
return boundsStream.result();
|
11991
|
+
geoStream(object, projectionStream(boundsStream$1));
|
11992
|
+
return boundsStream$1.result();
|
11692
11993
|
};
|
11693
11994
|
|
11694
11995
|
path.centroid = function(object) {
|
11695
|
-
geoStream(object, projectionStream(
|
11696
|
-
return
|
11996
|
+
geoStream(object, projectionStream(pathCentroid));
|
11997
|
+
return pathCentroid.result();
|
11697
11998
|
};
|
11698
11999
|
|
11699
12000
|
path.projection = function(_) {
|
11700
|
-
|
12001
|
+
if (!arguments.length) return projection;
|
12002
|
+
projectionStream = _ == null ? (projection = null, identity$5) : (projection = _).stream;
|
12003
|
+
return path;
|
11701
12004
|
};
|
11702
12005
|
|
11703
12006
|
path.context = function(_) {
|
11704
12007
|
if (!arguments.length) return context;
|
11705
|
-
contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
|
12008
|
+
contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);
|
11706
12009
|
if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
|
11707
12010
|
return path;
|
11708
12011
|
};
|
@@ -11713,7 +12016,19 @@ function index$2(projection, context) {
|
|
11713
12016
|
return path;
|
11714
12017
|
};
|
11715
12018
|
|
11716
|
-
|
12019
|
+
path.digits = function(_) {
|
12020
|
+
if (!arguments.length) return digits;
|
12021
|
+
if (_ == null) digits = null;
|
12022
|
+
else {
|
12023
|
+
const d = Math.floor(_);
|
12024
|
+
if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);
|
12025
|
+
digits = d;
|
12026
|
+
}
|
12027
|
+
if (context === null) contextStream = new PathString(digits);
|
12028
|
+
return path;
|
12029
|
+
};
|
12030
|
+
|
12031
|
+
return path.projection(projection).digits(digits).context(context);
|
11717
12032
|
}
|
11718
12033
|
|
11719
12034
|
function transform$1(methods) {
|
@@ -11747,8 +12062,8 @@ function fit(projection, fitBounds, object) {
|
|
11747
12062
|
var clip = projection.clipExtent && projection.clipExtent();
|
11748
12063
|
projection.scale(150).translate([0, 0]);
|
11749
12064
|
if (clip != null) projection.clipExtent(null);
|
11750
|
-
geoStream(object, projection.stream(boundsStream));
|
11751
|
-
fitBounds(boundsStream.result());
|
12065
|
+
geoStream(object, projection.stream(boundsStream$1));
|
12066
|
+
fitBounds(boundsStream$1.result());
|
11752
12067
|
if (clip != null) projection.clipExtent(clip);
|
11753
12068
|
return projection;
|
11754
12069
|
}
|
@@ -12928,19 +13243,48 @@ Node$1.prototype = hierarchy.prototype = {
|
|
12928
13243
|
[Symbol.iterator]: node_iterator
|
12929
13244
|
};
|
12930
13245
|
|
13246
|
+
function optional(f) {
|
13247
|
+
return f == null ? null : required(f);
|
13248
|
+
}
|
13249
|
+
|
13250
|
+
function required(f) {
|
13251
|
+
if (typeof f !== "function") throw new Error;
|
13252
|
+
return f;
|
13253
|
+
}
|
13254
|
+
|
13255
|
+
function constantZero() {
|
13256
|
+
return 0;
|
13257
|
+
}
|
13258
|
+
|
13259
|
+
function constant$2(x) {
|
13260
|
+
return function() {
|
13261
|
+
return x;
|
13262
|
+
};
|
13263
|
+
}
|
13264
|
+
|
13265
|
+
// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use
|
13266
|
+
const a$1 = 1664525;
|
13267
|
+
const c$3 = 1013904223;
|
13268
|
+
const m = 4294967296; // 2^32
|
13269
|
+
|
13270
|
+
function lcg$1() {
|
13271
|
+
let s = 1;
|
13272
|
+
return () => (s = (a$1 * s + c$3) % m) / m;
|
13273
|
+
}
|
13274
|
+
|
12931
13275
|
function array$1(x) {
|
12932
13276
|
return typeof x === "object" && "length" in x
|
12933
13277
|
? x // Array, TypedArray, NodeList, array-like
|
12934
13278
|
: Array.from(x); // Map, Set, iterable, string, or anything else
|
12935
13279
|
}
|
12936
13280
|
|
12937
|
-
function shuffle(array) {
|
12938
|
-
|
13281
|
+
function shuffle(array, random) {
|
13282
|
+
let m = array.length,
|
12939
13283
|
t,
|
12940
13284
|
i;
|
12941
13285
|
|
12942
13286
|
while (m) {
|
12943
|
-
i =
|
13287
|
+
i = random() * m-- | 0;
|
12944
13288
|
t = array[m];
|
12945
13289
|
array[m] = array[i];
|
12946
13290
|
array[i] = t;
|
@@ -12950,7 +13294,11 @@ function shuffle(array) {
|
|
12950
13294
|
}
|
12951
13295
|
|
12952
13296
|
function enclose(circles) {
|
12953
|
-
|
13297
|
+
return packEncloseRandom(circles, lcg$1());
|
13298
|
+
}
|
13299
|
+
|
13300
|
+
function packEncloseRandom(circles, random) {
|
13301
|
+
var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;
|
12954
13302
|
|
12955
13303
|
while (i < n) {
|
12956
13304
|
p = circles[i];
|
@@ -13058,7 +13406,7 @@ function encloseBasis3(a, b, c) {
|
|
13058
13406
|
A = xb * xb + yb * yb - 1,
|
13059
13407
|
B = 2 * (r1 + xa * xb + ya * yb),
|
13060
13408
|
C = xa * xa + ya * ya - r1 * r1,
|
13061
|
-
r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
|
13409
|
+
r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
|
13062
13410
|
return {
|
13063
13411
|
x: x1 + xa + xb * r,
|
13064
13412
|
y: y1 + ya + yb * r,
|
@@ -13110,7 +13458,7 @@ function Node(circle) {
|
|
13110
13458
|
this.previous = null;
|
13111
13459
|
}
|
13112
13460
|
|
13113
|
-
function
|
13461
|
+
function packSiblingsRandom(circles, random) {
|
13114
13462
|
if (!(n = (circles = array$1(circles)).length)) return 0;
|
13115
13463
|
|
13116
13464
|
var a, b, c, n, aa, ca, i, j, k, sj, sk;
|
@@ -13170,7 +13518,7 @@ function packEnclose(circles) {
|
|
13170
13518
|
}
|
13171
13519
|
|
13172
13520
|
// Compute the enclosing circle of the front chain.
|
13173
|
-
a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c =
|
13521
|
+
a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);
|
13174
13522
|
|
13175
13523
|
// Translate the circles to put the enclosing circle around the origin.
|
13176
13524
|
for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
|
@@ -13179,29 +13527,10 @@ function packEnclose(circles) {
|
|
13179
13527
|
}
|
13180
13528
|
|
13181
13529
|
function siblings(circles) {
|
13182
|
-
|
13530
|
+
packSiblingsRandom(circles, lcg$1());
|
13183
13531
|
return circles;
|
13184
13532
|
}
|
13185
13533
|
|
13186
|
-
function optional(f) {
|
13187
|
-
return f == null ? null : required(f);
|
13188
|
-
}
|
13189
|
-
|
13190
|
-
function required(f) {
|
13191
|
-
if (typeof f !== "function") throw new Error;
|
13192
|
-
return f;
|
13193
|
-
}
|
13194
|
-
|
13195
|
-
function constantZero() {
|
13196
|
-
return 0;
|
13197
|
-
}
|
13198
|
-
|
13199
|
-
function constant$2(x) {
|
13200
|
-
return function() {
|
13201
|
-
return x;
|
13202
|
-
};
|
13203
|
-
}
|
13204
|
-
|
13205
13534
|
function defaultRadius(d) {
|
13206
13535
|
return Math.sqrt(d.value);
|
13207
13536
|
}
|
@@ -13213,15 +13542,16 @@ function index$1() {
|
|
13213
13542
|
padding = constantZero;
|
13214
13543
|
|
13215
13544
|
function pack(root) {
|
13545
|
+
const random = lcg$1();
|
13216
13546
|
root.x = dx / 2, root.y = dy / 2;
|
13217
13547
|
if (radius) {
|
13218
13548
|
root.eachBefore(radiusLeaf(radius))
|
13219
|
-
.eachAfter(
|
13549
|
+
.eachAfter(packChildrenRandom(padding, 0.5, random))
|
13220
13550
|
.eachBefore(translateChild(1));
|
13221
13551
|
} else {
|
13222
13552
|
root.eachBefore(radiusLeaf(defaultRadius))
|
13223
|
-
.eachAfter(
|
13224
|
-
.eachAfter(
|
13553
|
+
.eachAfter(packChildrenRandom(constantZero, 1, random))
|
13554
|
+
.eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))
|
13225
13555
|
.eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
|
13226
13556
|
}
|
13227
13557
|
return root;
|
@@ -13250,7 +13580,7 @@ function radiusLeaf(radius) {
|
|
13250
13580
|
};
|
13251
13581
|
}
|
13252
13582
|
|
13253
|
-
function
|
13583
|
+
function packChildrenRandom(padding, k, random) {
|
13254
13584
|
return function(node) {
|
13255
13585
|
if (children = node.children) {
|
13256
13586
|
var children,
|
@@ -13260,7 +13590,7 @@ function packChildren(padding, k) {
|
|
13260
13590
|
e;
|
13261
13591
|
|
13262
13592
|
if (r) for (i = 0; i < n; ++i) children[i].r += r;
|
13263
|
-
e =
|
13593
|
+
e = packSiblingsRandom(children, random);
|
13264
13594
|
if (r) for (i = 0; i < n; ++i) children[i].r -= r;
|
13265
13595
|
node.r = e + r;
|
13266
13596
|
}
|
@@ -13349,7 +13679,8 @@ function partition() {
|
|
13349
13679
|
}
|
13350
13680
|
|
13351
13681
|
var preroot = {depth: -1},
|
13352
|
-
ambiguous = {}
|
13682
|
+
ambiguous = {},
|
13683
|
+
imputed = {};
|
13353
13684
|
|
13354
13685
|
function defaultId(d) {
|
13355
13686
|
return d.id;
|
@@ -13361,11 +13692,14 @@ function defaultParentId(d) {
|
|
13361
13692
|
|
13362
13693
|
function stratify() {
|
13363
13694
|
var id = defaultId,
|
13364
|
-
parentId = defaultParentId
|
13695
|
+
parentId = defaultParentId,
|
13696
|
+
path;
|
13365
13697
|
|
13366
13698
|
function stratify(data) {
|
13367
13699
|
var nodes = Array.from(data),
|
13368
|
-
|
13700
|
+
currentId = id,
|
13701
|
+
currentParentId = parentId,
|
13702
|
+
n,
|
13369
13703
|
d,
|
13370
13704
|
i,
|
13371
13705
|
root,
|
@@ -13375,13 +13709,29 @@ function stratify() {
|
|
13375
13709
|
nodeKey,
|
13376
13710
|
nodeByKey = new Map;
|
13377
13711
|
|
13378
|
-
|
13712
|
+
if (path != null) {
|
13713
|
+
const I = nodes.map((d, i) => normalize$1(path(d, i, data)));
|
13714
|
+
const P = I.map(parentof);
|
13715
|
+
const S = new Set(I).add("");
|
13716
|
+
for (const i of P) {
|
13717
|
+
if (!S.has(i)) {
|
13718
|
+
S.add(i);
|
13719
|
+
I.push(i);
|
13720
|
+
P.push(parentof(i));
|
13721
|
+
nodes.push(imputed);
|
13722
|
+
}
|
13723
|
+
}
|
13724
|
+
currentId = (_, i) => I[i];
|
13725
|
+
currentParentId = (_, i) => P[i];
|
13726
|
+
}
|
13727
|
+
|
13728
|
+
for (i = 0, n = nodes.length; i < n; ++i) {
|
13379
13729
|
d = nodes[i], node = nodes[i] = new Node$1(d);
|
13380
|
-
if ((nodeId =
|
13730
|
+
if ((nodeId = currentId(d, i, data)) != null && (nodeId += "")) {
|
13381
13731
|
nodeKey = node.id = nodeId;
|
13382
13732
|
nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);
|
13383
13733
|
}
|
13384
|
-
if ((nodeId =
|
13734
|
+
if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += "")) {
|
13385
13735
|
node.parent = nodeId;
|
13386
13736
|
}
|
13387
13737
|
}
|
@@ -13402,6 +13752,20 @@ function stratify() {
|
|
13402
13752
|
}
|
13403
13753
|
|
13404
13754
|
if (!root) throw new Error("no root");
|
13755
|
+
|
13756
|
+
// When imputing internal nodes, only introduce roots if needed.
|
13757
|
+
// Then replace the imputed marker data with null.
|
13758
|
+
if (path != null) {
|
13759
|
+
while (root.data === imputed && root.children.length === 1) {
|
13760
|
+
root = root.children[0], --n;
|
13761
|
+
}
|
13762
|
+
for (let i = nodes.length - 1; i >= 0; --i) {
|
13763
|
+
node = nodes[i];
|
13764
|
+
if (node.data !== imputed) break;
|
13765
|
+
node.data = null;
|
13766
|
+
}
|
13767
|
+
}
|
13768
|
+
|
13405
13769
|
root.parent = preroot;
|
13406
13770
|
root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
|
13407
13771
|
root.parent = null;
|
@@ -13411,16 +13775,52 @@ function stratify() {
|
|
13411
13775
|
}
|
13412
13776
|
|
13413
13777
|
stratify.id = function(x) {
|
13414
|
-
return arguments.length ? (id =
|
13778
|
+
return arguments.length ? (id = optional(x), stratify) : id;
|
13415
13779
|
};
|
13416
13780
|
|
13417
13781
|
stratify.parentId = function(x) {
|
13418
|
-
return arguments.length ? (parentId =
|
13782
|
+
return arguments.length ? (parentId = optional(x), stratify) : parentId;
|
13783
|
+
};
|
13784
|
+
|
13785
|
+
stratify.path = function(x) {
|
13786
|
+
return arguments.length ? (path = optional(x), stratify) : path;
|
13419
13787
|
};
|
13420
13788
|
|
13421
13789
|
return stratify;
|
13422
13790
|
}
|
13423
13791
|
|
13792
|
+
// To normalize a path, we coerce to a string, strip the trailing slash if any
|
13793
|
+
// (as long as the trailing slash is not immediately preceded by another slash),
|
13794
|
+
// and add leading slash if missing.
|
13795
|
+
function normalize$1(path) {
|
13796
|
+
path = `${path}`;
|
13797
|
+
let i = path.length;
|
13798
|
+
if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);
|
13799
|
+
return path[0] === "/" ? path : `/${path}`;
|
13800
|
+
}
|
13801
|
+
|
13802
|
+
// Walk backwards to find the first slash that is not the leading slash, e.g.:
|
13803
|
+
// "/foo/bar" ⇥ "/foo", "/foo" ⇥ "/", "/" ↦ "". (The root is special-cased
|
13804
|
+
// because the id of the root must be a truthy value.)
|
13805
|
+
function parentof(path) {
|
13806
|
+
let i = path.length;
|
13807
|
+
if (i < 2) return "";
|
13808
|
+
while (--i > 1) if (slash(path, i)) break;
|
13809
|
+
return path.slice(0, i);
|
13810
|
+
}
|
13811
|
+
|
13812
|
+
// Slashes can be escaped; to determine whether a slash is a path delimiter, we
|
13813
|
+
// count the number of preceding backslashes escaping the forward slash: an odd
|
13814
|
+
// number indicates an escaped forward slash.
|
13815
|
+
function slash(path, i) {
|
13816
|
+
if (path[i] === "/") {
|
13817
|
+
let k = 0;
|
13818
|
+
while (i > 0 && path[--i] === "\\") ++k;
|
13819
|
+
if ((k & 1) === 0) return true;
|
13820
|
+
}
|
13821
|
+
return false;
|
13822
|
+
}
|
13823
|
+
|
13424
13824
|
function defaultSeparation(a, b) {
|
13425
13825
|
return a.parent === b.parent ? 1 : 2;
|
13426
13826
|
}
|
@@ -14467,7 +14867,7 @@ function band() {
|
|
14467
14867
|
start += (stop - start - step * (n - paddingInner)) * align;
|
14468
14868
|
bandwidth = step * (1 - paddingInner);
|
14469
14869
|
if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
|
14470
|
-
var values =
|
14870
|
+
var values = range$2(n).map(function(i) { return start + step * i; });
|
14471
14871
|
return ordinalRange(reverse ? values.reverse() : values);
|
14472
14872
|
}
|
14473
14873
|
|
@@ -14595,7 +14995,7 @@ function polymap(domain, range, interpolate) {
|
|
14595
14995
|
}
|
14596
14996
|
|
14597
14997
|
return function(x) {
|
14598
|
-
var i =
|
14998
|
+
var i = bisect(domain, x, 1, j) - 1;
|
14599
14999
|
return r[i](d[i](x));
|
14600
15000
|
};
|
14601
15001
|
}
|
@@ -14832,28 +15232,26 @@ function pow10(x) {
|
|
14832
15232
|
function powp(base) {
|
14833
15233
|
return base === 10 ? pow10
|
14834
15234
|
: base === Math.E ? Math.exp
|
14835
|
-
:
|
15235
|
+
: x => Math.pow(base, x);
|
14836
15236
|
}
|
14837
15237
|
|
14838
15238
|
function logp(base) {
|
14839
15239
|
return base === Math.E ? Math.log
|
14840
15240
|
: base === 10 && Math.log10
|
14841
15241
|
|| base === 2 && Math.log2
|
14842
|
-
|| (base = Math.log(base),
|
15242
|
+
|| (base = Math.log(base), x => Math.log(x) / base);
|
14843
15243
|
}
|
14844
15244
|
|
14845
15245
|
function reflect(f) {
|
14846
|
-
return
|
14847
|
-
return -f(-x);
|
14848
|
-
};
|
15246
|
+
return (x, k) => -f(-x, k);
|
14849
15247
|
}
|
14850
15248
|
|
14851
15249
|
function loggish(transform) {
|
14852
|
-
|
14853
|
-
|
14854
|
-
|
14855
|
-
|
14856
|
-
|
15250
|
+
const scale = transform(transformLog, transformExp);
|
15251
|
+
const domain = scale.domain;
|
15252
|
+
let base = 10;
|
15253
|
+
let logs;
|
15254
|
+
let pows;
|
14857
15255
|
|
14858
15256
|
function rescale() {
|
14859
15257
|
logs = logp(base), pows = powp(base);
|
@@ -14874,34 +15272,33 @@ function loggish(transform) {
|
|
14874
15272
|
return arguments.length ? (domain(_), rescale()) : domain();
|
14875
15273
|
};
|
14876
15274
|
|
14877
|
-
scale.ticks =
|
14878
|
-
|
14879
|
-
|
14880
|
-
|
14881
|
-
|
15275
|
+
scale.ticks = count => {
|
15276
|
+
const d = domain();
|
15277
|
+
let u = d[0];
|
15278
|
+
let v = d[d.length - 1];
|
15279
|
+
const r = v < u;
|
14882
15280
|
|
14883
|
-
if (r
|
15281
|
+
if (r) ([u, v] = [v, u]);
|
14884
15282
|
|
14885
|
-
|
14886
|
-
|
14887
|
-
|
14888
|
-
|
14889
|
-
|
14890
|
-
|
14891
|
-
z = [];
|
15283
|
+
let i = logs(u);
|
15284
|
+
let j = logs(v);
|
15285
|
+
let k;
|
15286
|
+
let t;
|
15287
|
+
const n = count == null ? 10 : +count;
|
15288
|
+
let z = [];
|
14892
15289
|
|
14893
15290
|
if (!(base % 1) && j - i < n) {
|
14894
15291
|
i = Math.floor(i), j = Math.ceil(j);
|
14895
15292
|
if (u > 0) for (; i <= j; ++i) {
|
14896
|
-
for (k = 1
|
14897
|
-
t =
|
15293
|
+
for (k = 1; k < base; ++k) {
|
15294
|
+
t = i < 0 ? k / pows(-i) : k * pows(i);
|
14898
15295
|
if (t < u) continue;
|
14899
15296
|
if (t > v) break;
|
14900
15297
|
z.push(t);
|
14901
15298
|
}
|
14902
15299
|
} else for (; i <= j; ++i) {
|
14903
|
-
for (k = base - 1
|
14904
|
-
t =
|
15300
|
+
for (k = base - 1; k >= 1; --k) {
|
15301
|
+
t = i > 0 ? k / pows(-i) : k * pows(i);
|
14905
15302
|
if (t < u) continue;
|
14906
15303
|
if (t > v) break;
|
14907
15304
|
z.push(t);
|
@@ -14911,27 +15308,29 @@ function loggish(transform) {
|
|
14911
15308
|
} else {
|
14912
15309
|
z = ticks(i, j, Math.min(j - i, n)).map(pows);
|
14913
15310
|
}
|
14914
|
-
|
14915
15311
|
return r ? z.reverse() : z;
|
14916
15312
|
};
|
14917
15313
|
|
14918
|
-
scale.tickFormat =
|
14919
|
-
if (specifier == null) specifier = base === 10 ? ".0e" : ",";
|
14920
|
-
if (typeof specifier !== "function") specifier = exports.format(specifier);
|
14921
|
-
if (count === Infinity) return specifier;
|
15314
|
+
scale.tickFormat = (count, specifier) => {
|
14922
15315
|
if (count == null) count = 10;
|
14923
|
-
|
14924
|
-
|
14925
|
-
|
15316
|
+
if (specifier == null) specifier = base === 10 ? "s" : ",";
|
15317
|
+
if (typeof specifier !== "function") {
|
15318
|
+
if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;
|
15319
|
+
specifier = exports.format(specifier);
|
15320
|
+
}
|
15321
|
+
if (count === Infinity) return specifier;
|
15322
|
+
const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
|
15323
|
+
return d => {
|
15324
|
+
let i = d / pows(Math.round(logs(d)));
|
14926
15325
|
if (i * base < base - 0.5) i *= base;
|
14927
15326
|
return i <= k ? specifier(d) : "";
|
14928
15327
|
};
|
14929
15328
|
};
|
14930
15329
|
|
14931
|
-
scale.nice =
|
15330
|
+
scale.nice = () => {
|
14932
15331
|
return domain(nice(domain(), {
|
14933
|
-
floor:
|
14934
|
-
ceil:
|
15332
|
+
floor: x => pows(Math.floor(logs(x))),
|
15333
|
+
ceil: x => pows(Math.ceil(logs(x)))
|
14935
15334
|
}));
|
14936
15335
|
};
|
14937
15336
|
|
@@ -14939,14 +15338,9 @@ function loggish(transform) {
|
|
14939
15338
|
}
|
14940
15339
|
|
14941
15340
|
function log() {
|
14942
|
-
|
14943
|
-
|
14944
|
-
scale.copy = function() {
|
14945
|
-
return copy$1(scale, log()).base(scale.base());
|
14946
|
-
};
|
14947
|
-
|
15341
|
+
const scale = loggish(transformer$2()).domain([1, 10]);
|
15342
|
+
scale.copy = () => copy$1(scale, log()).base(scale.base());
|
14948
15343
|
initRange.apply(scale, arguments);
|
14949
|
-
|
14950
15344
|
return scale;
|
14951
15345
|
}
|
14952
15346
|
|
@@ -15102,7 +15496,7 @@ function quantile() {
|
|
15102
15496
|
}
|
15103
15497
|
|
15104
15498
|
function scale(x) {
|
15105
|
-
return x == null || isNaN(x = +x) ? unknown : range[
|
15499
|
+
return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];
|
15106
15500
|
}
|
15107
15501
|
|
15108
15502
|
scale.invertExtent = function(y) {
|
@@ -15152,7 +15546,7 @@ function quantize() {
|
|
15152
15546
|
unknown;
|
15153
15547
|
|
15154
15548
|
function scale(x) {
|
15155
|
-
return x != null && x <= x ? range[
|
15549
|
+
return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;
|
15156
15550
|
}
|
15157
15551
|
|
15158
15552
|
function rescale() {
|
@@ -15203,7 +15597,7 @@ function threshold() {
|
|
15203
15597
|
n = 1;
|
15204
15598
|
|
15205
15599
|
function scale(x) {
|
15206
|
-
return x != null && x <= x ? range[
|
15600
|
+
return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;
|
15207
15601
|
}
|
15208
15602
|
|
15209
15603
|
scale.domain = function(_) {
|
@@ -15233,47 +15627,46 @@ function threshold() {
|
|
15233
15627
|
return initRange.apply(scale, arguments);
|
15234
15628
|
}
|
15235
15629
|
|
15236
|
-
|
15237
|
-
t1 = new Date;
|
15630
|
+
const t0 = new Date, t1 = new Date;
|
15238
15631
|
|
15239
|
-
function
|
15632
|
+
function timeInterval(floori, offseti, count, field) {
|
15240
15633
|
|
15241
15634
|
function interval(date) {
|
15242
15635
|
return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
|
15243
15636
|
}
|
15244
15637
|
|
15245
|
-
interval.floor =
|
15638
|
+
interval.floor = (date) => {
|
15246
15639
|
return floori(date = new Date(+date)), date;
|
15247
15640
|
};
|
15248
15641
|
|
15249
|
-
interval.ceil =
|
15642
|
+
interval.ceil = (date) => {
|
15250
15643
|
return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
|
15251
15644
|
};
|
15252
15645
|
|
15253
|
-
interval.round =
|
15254
|
-
|
15255
|
-
d1 = interval.ceil(date);
|
15646
|
+
interval.round = (date) => {
|
15647
|
+
const d0 = interval(date), d1 = interval.ceil(date);
|
15256
15648
|
return date - d0 < d1 - date ? d0 : d1;
|
15257
15649
|
};
|
15258
15650
|
|
15259
|
-
interval.offset =
|
15651
|
+
interval.offset = (date, step) => {
|
15260
15652
|
return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
|
15261
15653
|
};
|
15262
15654
|
|
15263
|
-
interval.range =
|
15264
|
-
|
15655
|
+
interval.range = (start, stop, step) => {
|
15656
|
+
const range = [];
|
15265
15657
|
start = interval.ceil(start);
|
15266
15658
|
step = step == null ? 1 : Math.floor(step);
|
15267
15659
|
if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
|
15660
|
+
let previous;
|
15268
15661
|
do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
|
15269
15662
|
while (previous < start && start < stop);
|
15270
15663
|
return range;
|
15271
15664
|
};
|
15272
15665
|
|
15273
|
-
interval.filter =
|
15274
|
-
return
|
15666
|
+
interval.filter = (test) => {
|
15667
|
+
return timeInterval((date) => {
|
15275
15668
|
if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
|
15276
|
-
},
|
15669
|
+
}, (date, step) => {
|
15277
15670
|
if (date >= date) {
|
15278
15671
|
if (step < 0) while (++step <= 0) {
|
15279
15672
|
while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
|
@@ -15285,47 +15678,48 @@ function newInterval(floori, offseti, count, field) {
|
|
15285
15678
|
};
|
15286
15679
|
|
15287
15680
|
if (count) {
|
15288
|
-
interval.count =
|
15681
|
+
interval.count = (start, end) => {
|
15289
15682
|
t0.setTime(+start), t1.setTime(+end);
|
15290
15683
|
floori(t0), floori(t1);
|
15291
15684
|
return Math.floor(count(t0, t1));
|
15292
15685
|
};
|
15293
15686
|
|
15294
|
-
interval.every =
|
15687
|
+
interval.every = (step) => {
|
15295
15688
|
step = Math.floor(step);
|
15296
15689
|
return !isFinite(step) || !(step > 0) ? null
|
15297
15690
|
: !(step > 1) ? interval
|
15298
15691
|
: interval.filter(field
|
15299
|
-
?
|
15300
|
-
:
|
15692
|
+
? (d) => field(d) % step === 0
|
15693
|
+
: (d) => interval.count(0, d) % step === 0);
|
15301
15694
|
};
|
15302
15695
|
}
|
15303
15696
|
|
15304
15697
|
return interval;
|
15305
15698
|
}
|
15306
15699
|
|
15307
|
-
|
15700
|
+
const millisecond = timeInterval(() => {
|
15308
15701
|
// noop
|
15309
|
-
},
|
15702
|
+
}, (date, step) => {
|
15310
15703
|
date.setTime(+date + step);
|
15311
|
-
},
|
15704
|
+
}, (start, end) => {
|
15312
15705
|
return end - start;
|
15313
15706
|
});
|
15314
15707
|
|
15315
15708
|
// An optimized implementation for this simple case.
|
15316
|
-
millisecond.every =
|
15709
|
+
millisecond.every = (k) => {
|
15317
15710
|
k = Math.floor(k);
|
15318
15711
|
if (!isFinite(k) || !(k > 0)) return null;
|
15319
15712
|
if (!(k > 1)) return millisecond;
|
15320
|
-
return
|
15713
|
+
return timeInterval((date) => {
|
15321
15714
|
date.setTime(Math.floor(date / k) * k);
|
15322
|
-
},
|
15715
|
+
}, (date, step) => {
|
15323
15716
|
date.setTime(+date + step * k);
|
15324
|
-
},
|
15717
|
+
}, (start, end) => {
|
15325
15718
|
return (end - start) / k;
|
15326
15719
|
});
|
15327
15720
|
};
|
15328
|
-
|
15721
|
+
|
15722
|
+
const milliseconds = millisecond.range;
|
15329
15723
|
|
15330
15724
|
const durationSecond = 1000;
|
15331
15725
|
const durationMinute = durationSecond * 60;
|
@@ -15335,203 +15729,226 @@ const durationWeek = durationDay * 7;
|
|
15335
15729
|
const durationMonth = durationDay * 30;
|
15336
15730
|
const durationYear = durationDay * 365;
|
15337
15731
|
|
15338
|
-
|
15732
|
+
const second = timeInterval((date) => {
|
15339
15733
|
date.setTime(date - date.getMilliseconds());
|
15340
|
-
},
|
15734
|
+
}, (date, step) => {
|
15341
15735
|
date.setTime(+date + step * durationSecond);
|
15342
|
-
},
|
15736
|
+
}, (start, end) => {
|
15343
15737
|
return (end - start) / durationSecond;
|
15344
|
-
},
|
15738
|
+
}, (date) => {
|
15345
15739
|
return date.getUTCSeconds();
|
15346
15740
|
});
|
15347
|
-
var seconds = second.range;
|
15348
15741
|
|
15349
|
-
|
15350
|
-
|
15351
|
-
|
15742
|
+
const seconds = second.range;
|
15743
|
+
|
15744
|
+
const timeMinute = timeInterval((date) => {
|
15745
|
+
date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
|
15746
|
+
}, (date, step) => {
|
15747
|
+
date.setTime(+date + step * durationMinute);
|
15748
|
+
}, (start, end) => {
|
15749
|
+
return (end - start) / durationMinute;
|
15750
|
+
}, (date) => {
|
15751
|
+
return date.getMinutes();
|
15752
|
+
});
|
15753
|
+
|
15754
|
+
const timeMinutes = timeMinute.range;
|
15755
|
+
|
15756
|
+
const utcMinute = timeInterval((date) => {
|
15757
|
+
date.setUTCSeconds(0, 0);
|
15758
|
+
}, (date, step) => {
|
15352
15759
|
date.setTime(+date + step * durationMinute);
|
15353
|
-
},
|
15760
|
+
}, (start, end) => {
|
15354
15761
|
return (end - start) / durationMinute;
|
15355
|
-
},
|
15356
|
-
return date.
|
15762
|
+
}, (date) => {
|
15763
|
+
return date.getUTCMinutes();
|
15357
15764
|
});
|
15358
|
-
var minutes = minute.range;
|
15359
15765
|
|
15360
|
-
|
15766
|
+
const utcMinutes = utcMinute.range;
|
15767
|
+
|
15768
|
+
const timeHour = timeInterval((date) => {
|
15361
15769
|
date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
|
15362
|
-
},
|
15770
|
+
}, (date, step) => {
|
15363
15771
|
date.setTime(+date + step * durationHour);
|
15364
|
-
},
|
15772
|
+
}, (start, end) => {
|
15365
15773
|
return (end - start) / durationHour;
|
15366
|
-
},
|
15774
|
+
}, (date) => {
|
15367
15775
|
return date.getHours();
|
15368
15776
|
});
|
15369
|
-
var hours = hour.range;
|
15370
15777
|
|
15371
|
-
|
15778
|
+
const timeHours = timeHour.range;
|
15779
|
+
|
15780
|
+
const utcHour = timeInterval((date) => {
|
15781
|
+
date.setUTCMinutes(0, 0, 0);
|
15782
|
+
}, (date, step) => {
|
15783
|
+
date.setTime(+date + step * durationHour);
|
15784
|
+
}, (start, end) => {
|
15785
|
+
return (end - start) / durationHour;
|
15786
|
+
}, (date) => {
|
15787
|
+
return date.getUTCHours();
|
15788
|
+
});
|
15789
|
+
|
15790
|
+
const utcHours = utcHour.range;
|
15791
|
+
|
15792
|
+
const timeDay = timeInterval(
|
15372
15793
|
date => date.setHours(0, 0, 0, 0),
|
15373
15794
|
(date, step) => date.setDate(date.getDate() + step),
|
15374
15795
|
(start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,
|
15375
15796
|
date => date.getDate() - 1
|
15376
15797
|
);
|
15377
|
-
var days = day.range;
|
15378
15798
|
|
15379
|
-
|
15380
|
-
|
15799
|
+
const timeDays = timeDay.range;
|
15800
|
+
|
15801
|
+
const utcDay = timeInterval((date) => {
|
15802
|
+
date.setUTCHours(0, 0, 0, 0);
|
15803
|
+
}, (date, step) => {
|
15804
|
+
date.setUTCDate(date.getUTCDate() + step);
|
15805
|
+
}, (start, end) => {
|
15806
|
+
return (end - start) / durationDay;
|
15807
|
+
}, (date) => {
|
15808
|
+
return date.getUTCDate() - 1;
|
15809
|
+
});
|
15810
|
+
|
15811
|
+
const utcDays = utcDay.range;
|
15812
|
+
|
15813
|
+
const unixDay = timeInterval((date) => {
|
15814
|
+
date.setUTCHours(0, 0, 0, 0);
|
15815
|
+
}, (date, step) => {
|
15816
|
+
date.setUTCDate(date.getUTCDate() + step);
|
15817
|
+
}, (start, end) => {
|
15818
|
+
return (end - start) / durationDay;
|
15819
|
+
}, (date) => {
|
15820
|
+
return Math.floor(date / durationDay);
|
15821
|
+
});
|
15822
|
+
|
15823
|
+
const unixDays = unixDay.range;
|
15824
|
+
|
15825
|
+
function timeWeekday(i) {
|
15826
|
+
return timeInterval((date) => {
|
15381
15827
|
date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
|
15382
15828
|
date.setHours(0, 0, 0, 0);
|
15383
|
-
},
|
15829
|
+
}, (date, step) => {
|
15384
15830
|
date.setDate(date.getDate() + step * 7);
|
15385
|
-
},
|
15831
|
+
}, (start, end) => {
|
15386
15832
|
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
|
15387
15833
|
});
|
15388
15834
|
}
|
15389
15835
|
|
15390
|
-
|
15391
|
-
|
15392
|
-
|
15393
|
-
|
15394
|
-
|
15395
|
-
|
15396
|
-
|
15836
|
+
const timeSunday = timeWeekday(0);
|
15837
|
+
const timeMonday = timeWeekday(1);
|
15838
|
+
const timeTuesday = timeWeekday(2);
|
15839
|
+
const timeWednesday = timeWeekday(3);
|
15840
|
+
const timeThursday = timeWeekday(4);
|
15841
|
+
const timeFriday = timeWeekday(5);
|
15842
|
+
const timeSaturday = timeWeekday(6);
|
15843
|
+
|
15844
|
+
const timeSundays = timeSunday.range;
|
15845
|
+
const timeMondays = timeMonday.range;
|
15846
|
+
const timeTuesdays = timeTuesday.range;
|
15847
|
+
const timeWednesdays = timeWednesday.range;
|
15848
|
+
const timeThursdays = timeThursday.range;
|
15849
|
+
const timeFridays = timeFriday.range;
|
15850
|
+
const timeSaturdays = timeSaturday.range;
|
15851
|
+
|
15852
|
+
function utcWeekday(i) {
|
15853
|
+
return timeInterval((date) => {
|
15854
|
+
date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
|
15855
|
+
date.setUTCHours(0, 0, 0, 0);
|
15856
|
+
}, (date, step) => {
|
15857
|
+
date.setUTCDate(date.getUTCDate() + step * 7);
|
15858
|
+
}, (start, end) => {
|
15859
|
+
return (end - start) / durationWeek;
|
15860
|
+
});
|
15861
|
+
}
|
15862
|
+
|
15863
|
+
const utcSunday = utcWeekday(0);
|
15864
|
+
const utcMonday = utcWeekday(1);
|
15865
|
+
const utcTuesday = utcWeekday(2);
|
15866
|
+
const utcWednesday = utcWeekday(3);
|
15867
|
+
const utcThursday = utcWeekday(4);
|
15868
|
+
const utcFriday = utcWeekday(5);
|
15869
|
+
const utcSaturday = utcWeekday(6);
|
15397
15870
|
|
15398
|
-
|
15399
|
-
|
15400
|
-
|
15401
|
-
|
15402
|
-
|
15403
|
-
|
15404
|
-
|
15871
|
+
const utcSundays = utcSunday.range;
|
15872
|
+
const utcMondays = utcMonday.range;
|
15873
|
+
const utcTuesdays = utcTuesday.range;
|
15874
|
+
const utcWednesdays = utcWednesday.range;
|
15875
|
+
const utcThursdays = utcThursday.range;
|
15876
|
+
const utcFridays = utcFriday.range;
|
15877
|
+
const utcSaturdays = utcSaturday.range;
|
15405
15878
|
|
15406
|
-
|
15879
|
+
const timeMonth = timeInterval((date) => {
|
15407
15880
|
date.setDate(1);
|
15408
15881
|
date.setHours(0, 0, 0, 0);
|
15409
|
-
},
|
15882
|
+
}, (date, step) => {
|
15410
15883
|
date.setMonth(date.getMonth() + step);
|
15411
|
-
},
|
15884
|
+
}, (start, end) => {
|
15412
15885
|
return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
|
15413
|
-
},
|
15886
|
+
}, (date) => {
|
15414
15887
|
return date.getMonth();
|
15415
15888
|
});
|
15416
|
-
var months = month.range;
|
15417
15889
|
|
15418
|
-
|
15890
|
+
const timeMonths = timeMonth.range;
|
15891
|
+
|
15892
|
+
const utcMonth = timeInterval((date) => {
|
15893
|
+
date.setUTCDate(1);
|
15894
|
+
date.setUTCHours(0, 0, 0, 0);
|
15895
|
+
}, (date, step) => {
|
15896
|
+
date.setUTCMonth(date.getUTCMonth() + step);
|
15897
|
+
}, (start, end) => {
|
15898
|
+
return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
|
15899
|
+
}, (date) => {
|
15900
|
+
return date.getUTCMonth();
|
15901
|
+
});
|
15902
|
+
|
15903
|
+
const utcMonths = utcMonth.range;
|
15904
|
+
|
15905
|
+
const timeYear = timeInterval((date) => {
|
15419
15906
|
date.setMonth(0, 1);
|
15420
15907
|
date.setHours(0, 0, 0, 0);
|
15421
|
-
},
|
15908
|
+
}, (date, step) => {
|
15422
15909
|
date.setFullYear(date.getFullYear() + step);
|
15423
|
-
},
|
15910
|
+
}, (start, end) => {
|
15424
15911
|
return end.getFullYear() - start.getFullYear();
|
15425
|
-
},
|
15912
|
+
}, (date) => {
|
15426
15913
|
return date.getFullYear();
|
15427
15914
|
});
|
15428
15915
|
|
15429
15916
|
// An optimized implementation for this simple case.
|
15430
|
-
|
15431
|
-
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null :
|
15917
|
+
timeYear.every = (k) => {
|
15918
|
+
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
|
15432
15919
|
date.setFullYear(Math.floor(date.getFullYear() / k) * k);
|
15433
15920
|
date.setMonth(0, 1);
|
15434
15921
|
date.setHours(0, 0, 0, 0);
|
15435
|
-
},
|
15922
|
+
}, (date, step) => {
|
15436
15923
|
date.setFullYear(date.getFullYear() + step * k);
|
15437
15924
|
});
|
15438
15925
|
};
|
15439
|
-
var years = year.range;
|
15440
|
-
|
15441
|
-
var utcMinute = newInterval(function(date) {
|
15442
|
-
date.setUTCSeconds(0, 0);
|
15443
|
-
}, function(date, step) {
|
15444
|
-
date.setTime(+date + step * durationMinute);
|
15445
|
-
}, function(start, end) {
|
15446
|
-
return (end - start) / durationMinute;
|
15447
|
-
}, function(date) {
|
15448
|
-
return date.getUTCMinutes();
|
15449
|
-
});
|
15450
|
-
var utcMinutes = utcMinute.range;
|
15451
|
-
|
15452
|
-
var utcHour = newInterval(function(date) {
|
15453
|
-
date.setUTCMinutes(0, 0, 0);
|
15454
|
-
}, function(date, step) {
|
15455
|
-
date.setTime(+date + step * durationHour);
|
15456
|
-
}, function(start, end) {
|
15457
|
-
return (end - start) / durationHour;
|
15458
|
-
}, function(date) {
|
15459
|
-
return date.getUTCHours();
|
15460
|
-
});
|
15461
|
-
var utcHours = utcHour.range;
|
15462
|
-
|
15463
|
-
var utcDay = newInterval(function(date) {
|
15464
|
-
date.setUTCHours(0, 0, 0, 0);
|
15465
|
-
}, function(date, step) {
|
15466
|
-
date.setUTCDate(date.getUTCDate() + step);
|
15467
|
-
}, function(start, end) {
|
15468
|
-
return (end - start) / durationDay;
|
15469
|
-
}, function(date) {
|
15470
|
-
return date.getUTCDate() - 1;
|
15471
|
-
});
|
15472
|
-
var utcDays = utcDay.range;
|
15473
15926
|
|
15474
|
-
|
15475
|
-
return newInterval(function(date) {
|
15476
|
-
date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
|
15477
|
-
date.setUTCHours(0, 0, 0, 0);
|
15478
|
-
}, function(date, step) {
|
15479
|
-
date.setUTCDate(date.getUTCDate() + step * 7);
|
15480
|
-
}, function(start, end) {
|
15481
|
-
return (end - start) / durationWeek;
|
15482
|
-
});
|
15483
|
-
}
|
15484
|
-
|
15485
|
-
var utcSunday = utcWeekday(0);
|
15486
|
-
var utcMonday = utcWeekday(1);
|
15487
|
-
var utcTuesday = utcWeekday(2);
|
15488
|
-
var utcWednesday = utcWeekday(3);
|
15489
|
-
var utcThursday = utcWeekday(4);
|
15490
|
-
var utcFriday = utcWeekday(5);
|
15491
|
-
var utcSaturday = utcWeekday(6);
|
15492
|
-
|
15493
|
-
var utcSundays = utcSunday.range;
|
15494
|
-
var utcMondays = utcMonday.range;
|
15495
|
-
var utcTuesdays = utcTuesday.range;
|
15496
|
-
var utcWednesdays = utcWednesday.range;
|
15497
|
-
var utcThursdays = utcThursday.range;
|
15498
|
-
var utcFridays = utcFriday.range;
|
15499
|
-
var utcSaturdays = utcSaturday.range;
|
15500
|
-
|
15501
|
-
var utcMonth = newInterval(function(date) {
|
15502
|
-
date.setUTCDate(1);
|
15503
|
-
date.setUTCHours(0, 0, 0, 0);
|
15504
|
-
}, function(date, step) {
|
15505
|
-
date.setUTCMonth(date.getUTCMonth() + step);
|
15506
|
-
}, function(start, end) {
|
15507
|
-
return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
|
15508
|
-
}, function(date) {
|
15509
|
-
return date.getUTCMonth();
|
15510
|
-
});
|
15511
|
-
var utcMonths = utcMonth.range;
|
15927
|
+
const timeYears = timeYear.range;
|
15512
15928
|
|
15513
|
-
|
15929
|
+
const utcYear = timeInterval((date) => {
|
15514
15930
|
date.setUTCMonth(0, 1);
|
15515
15931
|
date.setUTCHours(0, 0, 0, 0);
|
15516
|
-
},
|
15932
|
+
}, (date, step) => {
|
15517
15933
|
date.setUTCFullYear(date.getUTCFullYear() + step);
|
15518
|
-
},
|
15934
|
+
}, (start, end) => {
|
15519
15935
|
return end.getUTCFullYear() - start.getUTCFullYear();
|
15520
|
-
},
|
15936
|
+
}, (date) => {
|
15521
15937
|
return date.getUTCFullYear();
|
15522
15938
|
});
|
15523
15939
|
|
15524
15940
|
// An optimized implementation for this simple case.
|
15525
|
-
utcYear.every =
|
15526
|
-
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null :
|
15941
|
+
utcYear.every = (k) => {
|
15942
|
+
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
|
15527
15943
|
date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
|
15528
15944
|
date.setUTCMonth(0, 1);
|
15529
15945
|
date.setUTCHours(0, 0, 0, 0);
|
15530
|
-
},
|
15946
|
+
}, (date, step) => {
|
15531
15947
|
date.setUTCFullYear(date.getUTCFullYear() + step * k);
|
15532
15948
|
});
|
15533
15949
|
};
|
15534
|
-
|
15950
|
+
|
15951
|
+
const utcYears = utcYear.range;
|
15535
15952
|
|
15536
15953
|
function ticker(year, month, week, day, hour, minute) {
|
15537
15954
|
|
@@ -15576,8 +15993,8 @@ function ticker(year, month, week, day, hour, minute) {
|
|
15576
15993
|
return [ticks, tickInterval];
|
15577
15994
|
}
|
15578
15995
|
|
15579
|
-
const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday,
|
15580
|
-
const [timeTicks, timeTickInterval] = ticker(
|
15996
|
+
const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);
|
15997
|
+
const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);
|
15581
15998
|
|
15582
15999
|
function localDate(d) {
|
15583
16000
|
if (0 <= d.y && d.y < 100) {
|
@@ -15767,7 +16184,7 @@ function formatLocale(locale) {
|
|
15767
16184
|
return function(string) {
|
15768
16185
|
var d = newDate(1900, undefined, 1),
|
15769
16186
|
i = parseSpecifier(d, specifier, string += "", 0),
|
15770
|
-
week, day
|
16187
|
+
week, day;
|
15771
16188
|
if (i != string.length) return null;
|
15772
16189
|
|
15773
16190
|
// If a UNIX timestamp is specified, return it.
|
@@ -15788,25 +16205,25 @@ function formatLocale(locale) {
|
|
15788
16205
|
if (d.V < 1 || d.V > 53) return null;
|
15789
16206
|
if (!("w" in d)) d.w = 1;
|
15790
16207
|
if ("Z" in d) {
|
15791
|
-
week = utcDate(newDate(d.y, 0, 1)), day
|
15792
|
-
week = day
|
16208
|
+
week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();
|
16209
|
+
week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);
|
15793
16210
|
week = utcDay.offset(week, (d.V - 1) * 7);
|
15794
16211
|
d.y = week.getUTCFullYear();
|
15795
16212
|
d.m = week.getUTCMonth();
|
15796
16213
|
d.d = week.getUTCDate() + (d.w + 6) % 7;
|
15797
16214
|
} else {
|
15798
|
-
week = localDate(newDate(d.y, 0, 1)), day
|
15799
|
-
week = day
|
15800
|
-
week =
|
16215
|
+
week = localDate(newDate(d.y, 0, 1)), day = week.getDay();
|
16216
|
+
week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);
|
16217
|
+
week = timeDay.offset(week, (d.V - 1) * 7);
|
15801
16218
|
d.y = week.getFullYear();
|
15802
16219
|
d.m = week.getMonth();
|
15803
16220
|
d.d = week.getDate() + (d.w + 6) % 7;
|
15804
16221
|
}
|
15805
16222
|
} else if ("W" in d || "U" in d) {
|
15806
16223
|
if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
|
15807
|
-
day
|
16224
|
+
day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
|
15808
16225
|
d.m = 0;
|
15809
|
-
d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day
|
16226
|
+
d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
|
15810
16227
|
}
|
15811
16228
|
|
15812
16229
|
// If a time zone is specified, all fields are interpreted as UTC and then
|
@@ -16090,7 +16507,7 @@ function formatHour12(d, p) {
|
|
16090
16507
|
}
|
16091
16508
|
|
16092
16509
|
function formatDayOfYear(d, p) {
|
16093
|
-
return pad(1 +
|
16510
|
+
return pad(1 + timeDay.count(timeYear(d), d), p, 3);
|
16094
16511
|
}
|
16095
16512
|
|
16096
16513
|
function formatMilliseconds(d, p) {
|
@@ -16119,17 +16536,17 @@ function formatWeekdayNumberMonday(d) {
|
|
16119
16536
|
}
|
16120
16537
|
|
16121
16538
|
function formatWeekNumberSunday(d, p) {
|
16122
|
-
return pad(
|
16539
|
+
return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);
|
16123
16540
|
}
|
16124
16541
|
|
16125
16542
|
function dISO(d) {
|
16126
16543
|
var day = d.getDay();
|
16127
|
-
return (day >= 4 || day === 0) ?
|
16544
|
+
return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);
|
16128
16545
|
}
|
16129
16546
|
|
16130
16547
|
function formatWeekNumberISO(d, p) {
|
16131
16548
|
d = dISO(d);
|
16132
|
-
return pad(
|
16549
|
+
return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);
|
16133
16550
|
}
|
16134
16551
|
|
16135
16552
|
function formatWeekdayNumberSunday(d) {
|
@@ -16137,7 +16554,7 @@ function formatWeekdayNumberSunday(d) {
|
|
16137
16554
|
}
|
16138
16555
|
|
16139
16556
|
function formatWeekNumberMonday(d, p) {
|
16140
|
-
return pad(
|
16557
|
+
return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);
|
16141
16558
|
}
|
16142
16559
|
|
16143
16560
|
function formatYear(d, p) {
|
@@ -16155,7 +16572,7 @@ function formatFullYear(d, p) {
|
|
16155
16572
|
|
16156
16573
|
function formatFullYearISO(d, p) {
|
16157
16574
|
var day = d.getDay();
|
16158
|
-
d = (day >= 4 || day === 0) ?
|
16575
|
+
d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);
|
16159
16576
|
return pad(d.getFullYear() % 10000, p, 4);
|
16160
16577
|
}
|
16161
16578
|
|
@@ -16300,6 +16717,8 @@ var formatIso = Date.prototype.toISOString
|
|
16300
16717
|
? formatIsoNative
|
16301
16718
|
: exports.utcFormat(isoSpecifier);
|
16302
16719
|
|
16720
|
+
var formatIso$1 = formatIso;
|
16721
|
+
|
16303
16722
|
function parseIsoNative(string) {
|
16304
16723
|
var date = new Date(string);
|
16305
16724
|
return isNaN(date) ? null : date;
|
@@ -16309,6 +16728,8 @@ var parseIso = +new Date("2000-01-01T00:00:00.000Z")
|
|
16309
16728
|
? parseIsoNative
|
16310
16729
|
: exports.utcParse(isoSpecifier);
|
16311
16730
|
|
16731
|
+
var parseIso$1 = parseIso;
|
16732
|
+
|
16312
16733
|
function date(t) {
|
16313
16734
|
return new Date(t);
|
16314
16735
|
}
|
@@ -16372,7 +16793,7 @@ function calendar(ticks, tickInterval, year, month, week, day, hour, minute, sec
|
|
16372
16793
|
}
|
16373
16794
|
|
16374
16795
|
function time() {
|
16375
|
-
return initRange.apply(calendar(timeTicks, timeTickInterval,
|
16796
|
+
return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute, second, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
|
16376
16797
|
}
|
16377
16798
|
|
16378
16799
|
function utcTime() {
|
@@ -16484,7 +16905,7 @@ function sequentialQuantile() {
|
|
16484
16905
|
interpolator = identity$3;
|
16485
16906
|
|
16486
16907
|
function scale(x) {
|
16487
|
-
if (x != null && !isNaN(x = +x)) return interpolator((
|
16908
|
+
if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));
|
16488
16909
|
}
|
16489
16910
|
|
16490
16911
|
scale.domain = function(_) {
|
@@ -17049,18 +17470,18 @@ function constant$1(x) {
|
|
17049
17470
|
};
|
17050
17471
|
}
|
17051
17472
|
|
17052
|
-
|
17053
|
-
|
17054
|
-
|
17055
|
-
|
17056
|
-
|
17057
|
-
|
17058
|
-
|
17473
|
+
const abs = Math.abs;
|
17474
|
+
const atan2 = Math.atan2;
|
17475
|
+
const cos = Math.cos;
|
17476
|
+
const max = Math.max;
|
17477
|
+
const min = Math.min;
|
17478
|
+
const sin = Math.sin;
|
17479
|
+
const sqrt = Math.sqrt;
|
17059
17480
|
|
17060
|
-
|
17061
|
-
|
17062
|
-
|
17063
|
-
|
17481
|
+
const epsilon = 1e-12;
|
17482
|
+
const pi = Math.PI;
|
17483
|
+
const halfPi = pi / 2;
|
17484
|
+
const tau = 2 * pi;
|
17064
17485
|
|
17065
17486
|
function acos(x) {
|
17066
17487
|
return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);
|
@@ -17070,6 +17491,24 @@ function asin(x) {
|
|
17070
17491
|
return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
|
17071
17492
|
}
|
17072
17493
|
|
17494
|
+
function withPath(shape) {
|
17495
|
+
let digits = 3;
|
17496
|
+
|
17497
|
+
shape.digits = function(_) {
|
17498
|
+
if (!arguments.length) return digits;
|
17499
|
+
if (_ == null) {
|
17500
|
+
digits = null;
|
17501
|
+
} else {
|
17502
|
+
const d = Math.floor(_);
|
17503
|
+
if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);
|
17504
|
+
digits = d;
|
17505
|
+
}
|
17506
|
+
return shape;
|
17507
|
+
};
|
17508
|
+
|
17509
|
+
return () => new Path$1(digits);
|
17510
|
+
}
|
17511
|
+
|
17073
17512
|
function arcInnerRadius(d) {
|
17074
17513
|
return d.innerRadius;
|
17075
17514
|
}
|
@@ -17150,7 +17589,8 @@ function arc() {
|
|
17150
17589
|
startAngle = arcStartAngle,
|
17151
17590
|
endAngle = arcEndAngle,
|
17152
17591
|
padAngle = arcPadAngle,
|
17153
|
-
context = null
|
17592
|
+
context = null,
|
17593
|
+
path = withPath(arc);
|
17154
17594
|
|
17155
17595
|
function arc() {
|
17156
17596
|
var buffer,
|
@@ -17219,16 +17659,22 @@ function arc() {
|
|
17219
17659
|
y00 = r0 * sin(a00),
|
17220
17660
|
oc;
|
17221
17661
|
|
17222
|
-
// Restrict the corner radius according to the sector angle.
|
17223
|
-
|
17224
|
-
|
17225
|
-
|
17226
|
-
|
17227
|
-
|
17228
|
-
|
17229
|
-
|
17230
|
-
|
17231
|
-
|
17662
|
+
// Restrict the corner radius according to the sector angle. If this
|
17663
|
+
// intersection fails, it’s probably because the arc is too small, so
|
17664
|
+
// disable the corner radius entirely.
|
17665
|
+
if (da < pi) {
|
17666
|
+
if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {
|
17667
|
+
var ax = x01 - oc[0],
|
17668
|
+
ay = y01 - oc[1],
|
17669
|
+
bx = x11 - oc[0],
|
17670
|
+
by = y11 - oc[1],
|
17671
|
+
kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),
|
17672
|
+
lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
|
17673
|
+
rc0 = min(rc, (r0 - lc) / (kc - 1));
|
17674
|
+
rc1 = min(rc, (r1 - lc) / (kc + 1));
|
17675
|
+
} else {
|
17676
|
+
rc0 = rc1 = 0;
|
17677
|
+
}
|
17232
17678
|
}
|
17233
17679
|
}
|
17234
17680
|
|
@@ -17380,7 +17826,8 @@ function line(x$1, y$1) {
|
|
17380
17826
|
var defined = constant$1(true),
|
17381
17827
|
context = null,
|
17382
17828
|
curve = curveLinear,
|
17383
|
-
output = null
|
17829
|
+
output = null,
|
17830
|
+
path = withPath(line);
|
17384
17831
|
|
17385
17832
|
x$1 = typeof x$1 === "function" ? x$1 : (x$1 === undefined) ? x : constant$1(x$1);
|
17386
17833
|
y$1 = typeof y$1 === "function" ? y$1 : (y$1 === undefined) ? y : constant$1(y$1);
|
@@ -17433,7 +17880,8 @@ function area(x0, y0, y1) {
|
|
17433
17880
|
defined = constant$1(true),
|
17434
17881
|
context = null,
|
17435
17882
|
curve = curveLinear,
|
17436
|
-
output = null
|
17883
|
+
output = null,
|
17884
|
+
path = withPath(area);
|
17437
17885
|
|
17438
17886
|
x0 = typeof x0 === "function" ? x0 : (x0 === undefined) ? x : constant$1(+x0);
|
17439
17887
|
y0 = typeof y0 === "function" ? y0 : (y0 === undefined) ? constant$1(0) : constant$1(+y0);
|
@@ -17616,7 +18064,7 @@ function pie() {
|
|
17616
18064
|
return pie;
|
17617
18065
|
}
|
17618
18066
|
|
17619
|
-
var curveRadialLinear = curveRadial
|
18067
|
+
var curveRadialLinear = curveRadial(curveLinear);
|
17620
18068
|
|
17621
18069
|
function Radial(curve) {
|
17622
18070
|
this._curve = curve;
|
@@ -17640,7 +18088,7 @@ Radial.prototype = {
|
|
17640
18088
|
}
|
17641
18089
|
};
|
17642
18090
|
|
17643
|
-
function curveRadial
|
18091
|
+
function curveRadial(curve) {
|
17644
18092
|
|
17645
18093
|
function radial(context) {
|
17646
18094
|
return new Radial(curve(context));
|
@@ -17658,7 +18106,7 @@ function lineRadial(l) {
|
|
17658
18106
|
l.radius = l.y, delete l.y;
|
17659
18107
|
|
17660
18108
|
l.curve = function(_) {
|
17661
|
-
return arguments.length ? c(curveRadial
|
18109
|
+
return arguments.length ? c(curveRadial(_)) : c()._curve;
|
17662
18110
|
};
|
17663
18111
|
|
17664
18112
|
return l;
|
@@ -17688,7 +18136,7 @@ function areaRadial() {
|
|
17688
18136
|
a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
|
17689
18137
|
|
17690
18138
|
a.curve = function(_) {
|
17691
|
-
return arguments.length ? c(curveRadial
|
18139
|
+
return arguments.length ? c(curveRadial(_)) : c()._curve;
|
17692
18140
|
};
|
17693
18141
|
|
17694
18142
|
return a;
|
@@ -17698,6 +18146,80 @@ function pointRadial(x, y) {
|
|
17698
18146
|
return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
|
17699
18147
|
}
|
17700
18148
|
|
18149
|
+
class Bump {
|
18150
|
+
constructor(context, x) {
|
18151
|
+
this._context = context;
|
18152
|
+
this._x = x;
|
18153
|
+
}
|
18154
|
+
areaStart() {
|
18155
|
+
this._line = 0;
|
18156
|
+
}
|
18157
|
+
areaEnd() {
|
18158
|
+
this._line = NaN;
|
18159
|
+
}
|
18160
|
+
lineStart() {
|
18161
|
+
this._point = 0;
|
18162
|
+
}
|
18163
|
+
lineEnd() {
|
18164
|
+
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
|
18165
|
+
this._line = 1 - this._line;
|
18166
|
+
}
|
18167
|
+
point(x, y) {
|
18168
|
+
x = +x, y = +y;
|
18169
|
+
switch (this._point) {
|
18170
|
+
case 0: {
|
18171
|
+
this._point = 1;
|
18172
|
+
if (this._line) this._context.lineTo(x, y);
|
18173
|
+
else this._context.moveTo(x, y);
|
18174
|
+
break;
|
18175
|
+
}
|
18176
|
+
case 1: this._point = 2; // falls through
|
18177
|
+
default: {
|
18178
|
+
if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);
|
18179
|
+
else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);
|
18180
|
+
break;
|
18181
|
+
}
|
18182
|
+
}
|
18183
|
+
this._x0 = x, this._y0 = y;
|
18184
|
+
}
|
18185
|
+
}
|
18186
|
+
|
18187
|
+
class BumpRadial {
|
18188
|
+
constructor(context) {
|
18189
|
+
this._context = context;
|
18190
|
+
}
|
18191
|
+
lineStart() {
|
18192
|
+
this._point = 0;
|
18193
|
+
}
|
18194
|
+
lineEnd() {}
|
18195
|
+
point(x, y) {
|
18196
|
+
x = +x, y = +y;
|
18197
|
+
if (this._point === 0) {
|
18198
|
+
this._point = 1;
|
18199
|
+
} else {
|
18200
|
+
const p0 = pointRadial(this._x0, this._y0);
|
18201
|
+
const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);
|
18202
|
+
const p2 = pointRadial(x, this._y0);
|
18203
|
+
const p3 = pointRadial(x, y);
|
18204
|
+
this._context.moveTo(...p0);
|
18205
|
+
this._context.bezierCurveTo(...p1, ...p2, ...p3);
|
18206
|
+
}
|
18207
|
+
this._x0 = x, this._y0 = y;
|
18208
|
+
}
|
18209
|
+
}
|
18210
|
+
|
18211
|
+
function bumpX(context) {
|
18212
|
+
return new Bump(context, true);
|
18213
|
+
}
|
18214
|
+
|
18215
|
+
function bumpY(context) {
|
18216
|
+
return new Bump(context, false);
|
18217
|
+
}
|
18218
|
+
|
18219
|
+
function bumpRadial(context) {
|
18220
|
+
return new BumpRadial(context);
|
18221
|
+
}
|
18222
|
+
|
17701
18223
|
function linkSource(d) {
|
17702
18224
|
return d.source;
|
17703
18225
|
}
|
@@ -17707,17 +18229,25 @@ function linkTarget(d) {
|
|
17707
18229
|
}
|
17708
18230
|
|
17709
18231
|
function link(curve) {
|
17710
|
-
|
18232
|
+
let source = linkSource,
|
17711
18233
|
target = linkTarget,
|
17712
18234
|
x$1 = x,
|
17713
18235
|
y$1 = y,
|
17714
|
-
context = null
|
18236
|
+
context = null,
|
18237
|
+
output = null,
|
18238
|
+
path = withPath(link);
|
17715
18239
|
|
17716
18240
|
function link() {
|
17717
|
-
|
17718
|
-
|
17719
|
-
|
17720
|
-
|
18241
|
+
let buffer;
|
18242
|
+
const argv = slice.call(arguments);
|
18243
|
+
const s = source.apply(this, argv);
|
18244
|
+
const t = target.apply(this, argv);
|
18245
|
+
if (context == null) output = curve(buffer = path());
|
18246
|
+
output.lineStart();
|
18247
|
+
argv[0] = s, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv));
|
18248
|
+
argv[0] = t, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv));
|
18249
|
+
output.lineEnd();
|
18250
|
+
if (buffer) return output = null, buffer + "" || null;
|
17721
18251
|
}
|
17722
18252
|
|
17723
18253
|
link.source = function(_) {
|
@@ -17737,57 +18267,54 @@ function link(curve) {
|
|
17737
18267
|
};
|
17738
18268
|
|
17739
18269
|
link.context = function(_) {
|
17740
|
-
return arguments.length ? (
|
18270
|
+
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;
|
17741
18271
|
};
|
17742
18272
|
|
17743
18273
|
return link;
|
17744
18274
|
}
|
17745
18275
|
|
17746
|
-
function curveHorizontal(context, x0, y0, x1, y1) {
|
17747
|
-
context.moveTo(x0, y0);
|
17748
|
-
context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
|
17749
|
-
}
|
17750
|
-
|
17751
|
-
function curveVertical(context, x0, y0, x1, y1) {
|
17752
|
-
context.moveTo(x0, y0);
|
17753
|
-
context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
|
17754
|
-
}
|
17755
|
-
|
17756
|
-
function curveRadial(context, x0, y0, x1, y1) {
|
17757
|
-
var p0 = pointRadial(x0, y0),
|
17758
|
-
p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
|
17759
|
-
p2 = pointRadial(x1, y0),
|
17760
|
-
p3 = pointRadial(x1, y1);
|
17761
|
-
context.moveTo(p0[0], p0[1]);
|
17762
|
-
context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
|
17763
|
-
}
|
17764
|
-
|
17765
18276
|
function linkHorizontal() {
|
17766
|
-
return link(
|
18277
|
+
return link(bumpX);
|
17767
18278
|
}
|
17768
18279
|
|
17769
18280
|
function linkVertical() {
|
17770
|
-
return link(
|
18281
|
+
return link(bumpY);
|
17771
18282
|
}
|
17772
18283
|
|
17773
18284
|
function linkRadial() {
|
17774
|
-
|
18285
|
+
const l = link(bumpRadial);
|
17775
18286
|
l.angle = l.x, delete l.x;
|
17776
18287
|
l.radius = l.y, delete l.y;
|
17777
18288
|
return l;
|
17778
18289
|
}
|
17779
18290
|
|
18291
|
+
const sqrt3$2 = sqrt(3);
|
18292
|
+
|
18293
|
+
var asterisk = {
|
18294
|
+
draw(context, size) {
|
18295
|
+
const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;
|
18296
|
+
const t = r / 2;
|
18297
|
+
const u = t * sqrt3$2;
|
18298
|
+
context.moveTo(0, r);
|
18299
|
+
context.lineTo(0, -r);
|
18300
|
+
context.moveTo(-u, -t);
|
18301
|
+
context.lineTo(u, t);
|
18302
|
+
context.moveTo(-u, t);
|
18303
|
+
context.lineTo(u, -t);
|
18304
|
+
}
|
18305
|
+
};
|
18306
|
+
|
17780
18307
|
var circle = {
|
17781
|
-
draw
|
17782
|
-
|
18308
|
+
draw(context, size) {
|
18309
|
+
const r = sqrt(size / pi);
|
17783
18310
|
context.moveTo(r, 0);
|
17784
18311
|
context.arc(0, 0, r, 0, tau);
|
17785
18312
|
}
|
17786
18313
|
};
|
17787
18314
|
|
17788
18315
|
var cross = {
|
17789
|
-
draw
|
17790
|
-
|
18316
|
+
draw(context, size) {
|
18317
|
+
const r = sqrt(size / 5) / 2;
|
17791
18318
|
context.moveTo(-3 * r, -r);
|
17792
18319
|
context.lineTo(-r, -r);
|
17793
18320
|
context.lineTo(-r, -3 * r);
|
@@ -17804,13 +18331,13 @@ var cross = {
|
|
17804
18331
|
}
|
17805
18332
|
};
|
17806
18333
|
|
17807
|
-
|
17808
|
-
|
18334
|
+
const tan30 = sqrt(1 / 3);
|
18335
|
+
const tan30_2 = tan30 * 2;
|
17809
18336
|
|
17810
18337
|
var diamond = {
|
17811
|
-
draw
|
17812
|
-
|
17813
|
-
|
18338
|
+
draw(context, size) {
|
18339
|
+
const y = sqrt(size / tan30_2);
|
18340
|
+
const x = y * tan30;
|
17814
18341
|
context.moveTo(0, -y);
|
17815
18342
|
context.lineTo(x, 0);
|
17816
18343
|
context.lineTo(0, y);
|
@@ -17819,22 +18346,62 @@ var diamond = {
|
|
17819
18346
|
}
|
17820
18347
|
};
|
17821
18348
|
|
17822
|
-
var
|
17823
|
-
|
17824
|
-
|
17825
|
-
|
18349
|
+
var diamond2 = {
|
18350
|
+
draw(context, size) {
|
18351
|
+
const r = sqrt(size) * 0.62625;
|
18352
|
+
context.moveTo(0, -r);
|
18353
|
+
context.lineTo(r, 0);
|
18354
|
+
context.lineTo(0, r);
|
18355
|
+
context.lineTo(-r, 0);
|
18356
|
+
context.closePath();
|
18357
|
+
}
|
18358
|
+
};
|
18359
|
+
|
18360
|
+
var plus = {
|
18361
|
+
draw(context, size) {
|
18362
|
+
const r = sqrt(size - min(size / 7, 2)) * 0.87559;
|
18363
|
+
context.moveTo(-r, 0);
|
18364
|
+
context.lineTo(r, 0);
|
18365
|
+
context.moveTo(0, r);
|
18366
|
+
context.lineTo(0, -r);
|
18367
|
+
}
|
18368
|
+
};
|
18369
|
+
|
18370
|
+
var square = {
|
18371
|
+
draw(context, size) {
|
18372
|
+
const w = sqrt(size);
|
18373
|
+
const x = -w / 2;
|
18374
|
+
context.rect(x, x, w, w);
|
18375
|
+
}
|
18376
|
+
};
|
18377
|
+
|
18378
|
+
var square2 = {
|
18379
|
+
draw(context, size) {
|
18380
|
+
const r = sqrt(size) * 0.4431;
|
18381
|
+
context.moveTo(r, r);
|
18382
|
+
context.lineTo(r, -r);
|
18383
|
+
context.lineTo(-r, -r);
|
18384
|
+
context.lineTo(-r, r);
|
18385
|
+
context.closePath();
|
18386
|
+
}
|
18387
|
+
};
|
18388
|
+
|
18389
|
+
const ka = 0.89081309152928522810;
|
18390
|
+
const kr = sin(pi / 10) / sin(7 * pi / 10);
|
18391
|
+
const kx = sin(tau / 10) * kr;
|
18392
|
+
const ky = -cos(tau / 10) * kr;
|
17826
18393
|
|
17827
18394
|
var star = {
|
17828
|
-
draw
|
17829
|
-
|
17830
|
-
|
17831
|
-
|
18395
|
+
draw(context, size) {
|
18396
|
+
const r = sqrt(size * ka);
|
18397
|
+
const x = kx * r;
|
18398
|
+
const y = ky * r;
|
17832
18399
|
context.moveTo(0, -r);
|
17833
18400
|
context.lineTo(x, y);
|
17834
|
-
for (
|
17835
|
-
|
17836
|
-
|
17837
|
-
|
18401
|
+
for (let i = 1; i < 5; ++i) {
|
18402
|
+
const a = tau * i / 5;
|
18403
|
+
const c = cos(a);
|
18404
|
+
const s = sin(a);
|
17838
18405
|
context.lineTo(s * r, -c * r);
|
17839
18406
|
context.lineTo(c * x - s * y, s * x + c * y);
|
17840
18407
|
}
|
@@ -17842,40 +18409,43 @@ var star = {
|
|
17842
18409
|
}
|
17843
18410
|
};
|
17844
18411
|
|
17845
|
-
|
17846
|
-
|
17847
|
-
|
17848
|
-
|
17849
|
-
|
18412
|
+
const sqrt3$1 = sqrt(3);
|
18413
|
+
|
18414
|
+
var triangle = {
|
18415
|
+
draw(context, size) {
|
18416
|
+
const y = -sqrt(size / (sqrt3$1 * 3));
|
18417
|
+
context.moveTo(0, y * 2);
|
18418
|
+
context.lineTo(-sqrt3$1 * y, -y);
|
18419
|
+
context.lineTo(sqrt3$1 * y, -y);
|
18420
|
+
context.closePath();
|
17850
18421
|
}
|
17851
18422
|
};
|
17852
18423
|
|
17853
|
-
|
18424
|
+
const sqrt3 = sqrt(3);
|
17854
18425
|
|
17855
|
-
var
|
17856
|
-
draw
|
17857
|
-
|
17858
|
-
|
17859
|
-
|
17860
|
-
context.
|
18426
|
+
var triangle2 = {
|
18427
|
+
draw(context, size) {
|
18428
|
+
const s = sqrt(size) * 0.6824;
|
18429
|
+
const t = s / 2;
|
18430
|
+
const u = (s * sqrt3) / 2; // cos(Math.PI / 6)
|
18431
|
+
context.moveTo(0, -s);
|
18432
|
+
context.lineTo(u, t);
|
18433
|
+
context.lineTo(-u, t);
|
17861
18434
|
context.closePath();
|
17862
18435
|
}
|
17863
18436
|
};
|
17864
18437
|
|
17865
|
-
|
17866
|
-
|
17867
|
-
|
17868
|
-
|
18438
|
+
const c = -0.5;
|
18439
|
+
const s = sqrt(3) / 2;
|
18440
|
+
const k = 1 / sqrt(12);
|
18441
|
+
const a = (k / 2 + 1) * 3;
|
17869
18442
|
|
17870
18443
|
var wye = {
|
17871
|
-
draw
|
17872
|
-
|
17873
|
-
|
17874
|
-
|
17875
|
-
|
17876
|
-
y1 = r * k + r,
|
17877
|
-
x2 = -x1,
|
17878
|
-
y2 = y1;
|
18444
|
+
draw(context, size) {
|
18445
|
+
const r = sqrt(size / a);
|
18446
|
+
const x0 = r / 2, y0 = r * k;
|
18447
|
+
const x1 = x0, y1 = r * k + r;
|
18448
|
+
const x2 = -x1, y2 = y1;
|
17879
18449
|
context.moveTo(x0, y0);
|
17880
18450
|
context.lineTo(x1, y1);
|
17881
18451
|
context.lineTo(x2, y2);
|
@@ -17889,7 +18459,18 @@ var wye = {
|
|
17889
18459
|
}
|
17890
18460
|
};
|
17891
18461
|
|
17892
|
-
var
|
18462
|
+
var times = {
|
18463
|
+
draw(context, size) {
|
18464
|
+
const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;
|
18465
|
+
context.moveTo(-r, -r);
|
18466
|
+
context.lineTo(r, r);
|
18467
|
+
context.moveTo(-r, r);
|
18468
|
+
context.lineTo(r, -r);
|
18469
|
+
}
|
18470
|
+
};
|
18471
|
+
|
18472
|
+
// These symbols are designed to be filled.
|
18473
|
+
const symbolsFill = [
|
17893
18474
|
circle,
|
17894
18475
|
cross,
|
17895
18476
|
diamond,
|
@@ -17899,13 +18480,26 @@ var symbols = [
|
|
17899
18480
|
wye
|
17900
18481
|
];
|
17901
18482
|
|
17902
|
-
|
17903
|
-
|
18483
|
+
// These symbols are designed to be stroked (with a width of 1.5px and round caps).
|
18484
|
+
const symbolsStroke = [
|
18485
|
+
circle,
|
18486
|
+
plus,
|
18487
|
+
times,
|
18488
|
+
triangle2,
|
18489
|
+
asterisk,
|
18490
|
+
square2,
|
18491
|
+
diamond2
|
18492
|
+
];
|
18493
|
+
|
18494
|
+
function Symbol$1(type, size) {
|
18495
|
+
let context = null,
|
18496
|
+
path = withPath(symbol);
|
18497
|
+
|
17904
18498
|
type = typeof type === "function" ? type : constant$1(type || circle);
|
17905
18499
|
size = typeof size === "function" ? size : constant$1(size === undefined ? 64 : +size);
|
17906
18500
|
|
17907
18501
|
function symbol() {
|
17908
|
-
|
18502
|
+
let buffer;
|
17909
18503
|
if (!context) context = buffer = path();
|
17910
18504
|
type.apply(this, arguments).draw(context, +size.apply(this, arguments));
|
17911
18505
|
if (buffer) return context = null, buffer + "" || null;
|
@@ -18068,52 +18662,6 @@ function basisOpen(context) {
|
|
18068
18662
|
return new BasisOpen(context);
|
18069
18663
|
}
|
18070
18664
|
|
18071
|
-
class Bump {
|
18072
|
-
constructor(context, x) {
|
18073
|
-
this._context = context;
|
18074
|
-
this._x = x;
|
18075
|
-
}
|
18076
|
-
areaStart() {
|
18077
|
-
this._line = 0;
|
18078
|
-
}
|
18079
|
-
areaEnd() {
|
18080
|
-
this._line = NaN;
|
18081
|
-
}
|
18082
|
-
lineStart() {
|
18083
|
-
this._point = 0;
|
18084
|
-
}
|
18085
|
-
lineEnd() {
|
18086
|
-
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
|
18087
|
-
this._line = 1 - this._line;
|
18088
|
-
}
|
18089
|
-
point(x, y) {
|
18090
|
-
x = +x, y = +y;
|
18091
|
-
switch (this._point) {
|
18092
|
-
case 0: {
|
18093
|
-
this._point = 1;
|
18094
|
-
if (this._line) this._context.lineTo(x, y);
|
18095
|
-
else this._context.moveTo(x, y);
|
18096
|
-
break;
|
18097
|
-
}
|
18098
|
-
case 1: this._point = 2; // falls through
|
18099
|
-
default: {
|
18100
|
-
if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);
|
18101
|
-
else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);
|
18102
|
-
break;
|
18103
|
-
}
|
18104
|
-
}
|
18105
|
-
this._x0 = x, this._y0 = y;
|
18106
|
-
}
|
18107
|
-
}
|
18108
|
-
|
18109
|
-
function bumpX(context) {
|
18110
|
-
return new Bump(context, true);
|
18111
|
-
}
|
18112
|
-
|
18113
|
-
function bumpY(context) {
|
18114
|
-
return new Bump(context, false);
|
18115
|
-
}
|
18116
|
-
|
18117
18665
|
function Bundle(context, beta) {
|
18118
18666
|
this._basis = new Basis(context);
|
18119
18667
|
this._beta = beta;
|
@@ -19507,6 +20055,7 @@ exports.FormatSpecifier = FormatSpecifier;
|
|
19507
20055
|
exports.InternMap = InternMap;
|
19508
20056
|
exports.InternSet = InternSet;
|
19509
20057
|
exports.Node = Node$1;
|
20058
|
+
exports.Path = Path$1;
|
19510
20059
|
exports.Voronoi = Voronoi;
|
19511
20060
|
exports.ZoomTransform = Transform;
|
19512
20061
|
exports.active = active;
|
@@ -19520,12 +20069,15 @@ exports.axisLeft = axisLeft;
|
|
19520
20069
|
exports.axisRight = axisRight;
|
19521
20070
|
exports.axisTop = axisTop;
|
19522
20071
|
exports.bin = bin;
|
19523
|
-
exports.bisect =
|
20072
|
+
exports.bisect = bisect;
|
19524
20073
|
exports.bisectCenter = bisectCenter;
|
19525
20074
|
exports.bisectLeft = bisectLeft;
|
19526
20075
|
exports.bisectRight = bisectRight;
|
19527
20076
|
exports.bisector = bisector;
|
19528
20077
|
exports.blob = blob;
|
20078
|
+
exports.blur = blur;
|
20079
|
+
exports.blur2 = blur2;
|
20080
|
+
exports.blurImage = blurImage;
|
19529
20081
|
exports.brush = brush;
|
19530
20082
|
exports.brushSelection = brushSelection;
|
19531
20083
|
exports.brushX = brushX;
|
@@ -19537,7 +20089,7 @@ exports.chordTranspose = chordTranspose;
|
|
19537
20089
|
exports.cluster = cluster;
|
19538
20090
|
exports.color = color;
|
19539
20091
|
exports.contourDensity = density;
|
19540
|
-
exports.contours =
|
20092
|
+
exports.contours = Contours;
|
19541
20093
|
exports.count = count$1;
|
19542
20094
|
exports.create = create$1;
|
19543
20095
|
exports.creator = creator;
|
@@ -19646,7 +20198,7 @@ exports.geoAzimuthalEquidistant = azimuthalEquidistant;
|
|
19646
20198
|
exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
|
19647
20199
|
exports.geoBounds = bounds;
|
19648
20200
|
exports.geoCentroid = centroid$1;
|
19649
|
-
exports.geoCircle = circle$
|
20201
|
+
exports.geoCircle = circle$1;
|
19650
20202
|
exports.geoClipAntimeridian = clipAntimeridian;
|
19651
20203
|
exports.geoClipCircle = clipCircle;
|
19652
20204
|
exports.geoClipExtent = extent;
|
@@ -19766,8 +20318,8 @@ exports.interpolateZoom = interpolateZoom;
|
|
19766
20318
|
exports.interrupt = interrupt;
|
19767
20319
|
exports.intersection = intersection;
|
19768
20320
|
exports.interval = interval;
|
19769
|
-
exports.isoFormat = formatIso;
|
19770
|
-
exports.isoParse = parseIso;
|
20321
|
+
exports.isoFormat = formatIso$1;
|
20322
|
+
exports.isoParse = parseIso$1;
|
19771
20323
|
exports.json = json;
|
19772
20324
|
exports.lab = lab$1;
|
19773
20325
|
exports.lch = lch;
|
@@ -19775,6 +20327,7 @@ exports.least = least;
|
|
19775
20327
|
exports.leastIndex = leastIndex;
|
19776
20328
|
exports.line = line;
|
19777
20329
|
exports.lineRadial = lineRadial$1;
|
20330
|
+
exports.link = link;
|
19778
20331
|
exports.linkHorizontal = linkHorizontal;
|
19779
20332
|
exports.linkRadial = linkRadial;
|
19780
20333
|
exports.linkVertical = linkVertical;
|
@@ -19785,6 +20338,7 @@ exports.max = max$3;
|
|
19785
20338
|
exports.maxIndex = maxIndex;
|
19786
20339
|
exports.mean = mean;
|
19787
20340
|
exports.median = median;
|
20341
|
+
exports.medianIndex = medianIndex;
|
19788
20342
|
exports.merge = merge;
|
19789
20343
|
exports.min = min$2;
|
19790
20344
|
exports.minIndex = minIndex;
|
@@ -19799,6 +20353,7 @@ exports.packSiblings = siblings;
|
|
19799
20353
|
exports.pairs = pairs;
|
19800
20354
|
exports.partition = partition;
|
19801
20355
|
exports.path = path;
|
20356
|
+
exports.pathRound = pathRound;
|
19802
20357
|
exports.permute = permute;
|
19803
20358
|
exports.pie = pie;
|
19804
20359
|
exports.piecewise = piecewise;
|
@@ -19815,6 +20370,7 @@ exports.precisionPrefix = precisionPrefix;
|
|
19815
20370
|
exports.precisionRound = precisionRound;
|
19816
20371
|
exports.quadtree = quadtree;
|
19817
20372
|
exports.quantile = quantile$1;
|
20373
|
+
exports.quantileIndex = quantileIndex;
|
19818
20374
|
exports.quantileSorted = quantileSorted;
|
19819
20375
|
exports.quantize = quantize$1;
|
19820
20376
|
exports.quickselect = quickselect;
|
@@ -19838,7 +20394,8 @@ exports.randomPareto = pareto;
|
|
19838
20394
|
exports.randomPoisson = poisson;
|
19839
20395
|
exports.randomUniform = uniform;
|
19840
20396
|
exports.randomWeibull = weibull;
|
19841
|
-
exports.range =
|
20397
|
+
exports.range = range$2;
|
20398
|
+
exports.rank = rank;
|
19842
20399
|
exports.reduce = reduce;
|
19843
20400
|
exports.reverse = reverse$1;
|
19844
20401
|
exports.rgb = rgb;
|
@@ -19938,58 +20495,67 @@ exports.subset = subset;
|
|
19938
20495
|
exports.sum = sum$2;
|
19939
20496
|
exports.superset = superset;
|
19940
20497
|
exports.svg = svg;
|
19941
|
-
exports.symbol =
|
20498
|
+
exports.symbol = Symbol$1;
|
20499
|
+
exports.symbolAsterisk = asterisk;
|
19942
20500
|
exports.symbolCircle = circle;
|
19943
20501
|
exports.symbolCross = cross;
|
19944
20502
|
exports.symbolDiamond = diamond;
|
20503
|
+
exports.symbolDiamond2 = diamond2;
|
20504
|
+
exports.symbolPlus = plus;
|
19945
20505
|
exports.symbolSquare = square;
|
20506
|
+
exports.symbolSquare2 = square2;
|
19946
20507
|
exports.symbolStar = star;
|
20508
|
+
exports.symbolTimes = times;
|
19947
20509
|
exports.symbolTriangle = triangle;
|
20510
|
+
exports.symbolTriangle2 = triangle2;
|
19948
20511
|
exports.symbolWye = wye;
|
19949
|
-
exports.
|
20512
|
+
exports.symbolX = times;
|
20513
|
+
exports.symbols = symbolsFill;
|
20514
|
+
exports.symbolsFill = symbolsFill;
|
20515
|
+
exports.symbolsStroke = symbolsStroke;
|
19950
20516
|
exports.text = text;
|
19951
|
-
exports.thresholdFreedmanDiaconis =
|
19952
|
-
exports.thresholdScott =
|
20517
|
+
exports.thresholdFreedmanDiaconis = thresholdFreedmanDiaconis;
|
20518
|
+
exports.thresholdScott = thresholdScott;
|
19953
20519
|
exports.thresholdSturges = thresholdSturges;
|
19954
20520
|
exports.tickFormat = tickFormat;
|
19955
20521
|
exports.tickIncrement = tickIncrement;
|
19956
20522
|
exports.tickStep = tickStep;
|
19957
20523
|
exports.ticks = ticks;
|
19958
|
-
exports.timeDay =
|
19959
|
-
exports.timeDays =
|
20524
|
+
exports.timeDay = timeDay;
|
20525
|
+
exports.timeDays = timeDays;
|
19960
20526
|
exports.timeFormatDefaultLocale = defaultLocale;
|
19961
20527
|
exports.timeFormatLocale = formatLocale;
|
19962
|
-
exports.timeFriday =
|
19963
|
-
exports.timeFridays =
|
19964
|
-
exports.timeHour =
|
19965
|
-
exports.timeHours =
|
19966
|
-
exports.timeInterval =
|
20528
|
+
exports.timeFriday = timeFriday;
|
20529
|
+
exports.timeFridays = timeFridays;
|
20530
|
+
exports.timeHour = timeHour;
|
20531
|
+
exports.timeHours = timeHours;
|
20532
|
+
exports.timeInterval = timeInterval;
|
19967
20533
|
exports.timeMillisecond = millisecond;
|
19968
20534
|
exports.timeMilliseconds = milliseconds;
|
19969
|
-
exports.timeMinute =
|
19970
|
-
exports.timeMinutes =
|
19971
|
-
exports.timeMonday =
|
19972
|
-
exports.timeMondays =
|
19973
|
-
exports.timeMonth =
|
19974
|
-
exports.timeMonths =
|
19975
|
-
exports.timeSaturday =
|
19976
|
-
exports.timeSaturdays =
|
20535
|
+
exports.timeMinute = timeMinute;
|
20536
|
+
exports.timeMinutes = timeMinutes;
|
20537
|
+
exports.timeMonday = timeMonday;
|
20538
|
+
exports.timeMondays = timeMondays;
|
20539
|
+
exports.timeMonth = timeMonth;
|
20540
|
+
exports.timeMonths = timeMonths;
|
20541
|
+
exports.timeSaturday = timeSaturday;
|
20542
|
+
exports.timeSaturdays = timeSaturdays;
|
19977
20543
|
exports.timeSecond = second;
|
19978
20544
|
exports.timeSeconds = seconds;
|
19979
|
-
exports.timeSunday =
|
19980
|
-
exports.timeSundays =
|
19981
|
-
exports.timeThursday =
|
19982
|
-
exports.timeThursdays =
|
20545
|
+
exports.timeSunday = timeSunday;
|
20546
|
+
exports.timeSundays = timeSundays;
|
20547
|
+
exports.timeThursday = timeThursday;
|
20548
|
+
exports.timeThursdays = timeThursdays;
|
19983
20549
|
exports.timeTickInterval = timeTickInterval;
|
19984
20550
|
exports.timeTicks = timeTicks;
|
19985
|
-
exports.timeTuesday =
|
19986
|
-
exports.timeTuesdays =
|
19987
|
-
exports.timeWednesday =
|
19988
|
-
exports.timeWednesdays =
|
19989
|
-
exports.timeWeek =
|
19990
|
-
exports.timeWeeks =
|
19991
|
-
exports.timeYear =
|
19992
|
-
exports.timeYears =
|
20551
|
+
exports.timeTuesday = timeTuesday;
|
20552
|
+
exports.timeTuesdays = timeTuesdays;
|
20553
|
+
exports.timeWednesday = timeWednesday;
|
20554
|
+
exports.timeWednesdays = timeWednesdays;
|
20555
|
+
exports.timeWeek = timeSunday;
|
20556
|
+
exports.timeWeeks = timeSundays;
|
20557
|
+
exports.timeYear = timeYear;
|
20558
|
+
exports.timeYears = timeYears;
|
19993
20559
|
exports.timeout = timeout;
|
19994
20560
|
exports.timer = timer;
|
19995
20561
|
exports.timerFlush = timerFlush;
|
@@ -20012,6 +20578,8 @@ exports.tsvFormatValue = tsvFormatValue;
|
|
20012
20578
|
exports.tsvParse = tsvParse;
|
20013
20579
|
exports.tsvParseRows = tsvParseRows;
|
20014
20580
|
exports.union = union;
|
20581
|
+
exports.unixDay = unixDay;
|
20582
|
+
exports.unixDays = unixDays;
|
20015
20583
|
exports.utcDay = utcDay;
|
20016
20584
|
exports.utcDays = utcDays;
|
20017
20585
|
exports.utcFriday = utcFriday;
|
@@ -20053,6 +20621,4 @@ exports.zoom = zoom;
|
|
20053
20621
|
exports.zoomIdentity = identity;
|
20054
20622
|
exports.zoomTransform = transform;
|
20055
20623
|
|
20056
|
-
|
20057
|
-
|
20058
|
-
})));
|
20624
|
+
}));
|