@cloudscape-design/components 3.0.94 → 3.0.95

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