vega-time 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015-2018, University of Washington Interactive Data Lab
1
+ Copyright (c) 2015-2021, University of Washington Interactive Data Lab
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
package/README.md CHANGED
@@ -69,7 +69,7 @@ Determine a temporal binning scheme, for example to create a histogram. Based on
69
69
  The supported options properties are:
70
70
 
71
71
  - _extent_: (required) A two-element (`[min, max]`) array indicating the date range over which the bin values are defined.
72
- - _maxbins_: The maximum number of allowable bins (default `40`).
72
+ - _maxbins_: The maximum number of allowable bins (default `40`). There will often be fewer bins as the domain gets sliced at "nicely" rounded values.
73
73
 
74
74
  ### Local Time Utilities
75
75
 
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vega-util'), require('d3-time'), require('d3-array')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'vega-util', 'd3-time', 'd3-array'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vega = {}, global.vega, global.d3, global.d3));
5
- }(this, (function (exports, vegaUtil, d3Time, d3Array) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vega-util')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'vega-util'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vega = {}, global.vega));
5
+ })(this, (function (exports, vegaUtil) { 'use strict';
6
6
 
7
7
  const YEAR = 'year';
8
8
  const QUARTER = 'quarter';
@@ -15,30 +15,13 @@
15
15
  const MINUTES = 'minutes';
16
16
  const SECONDS = 'seconds';
17
17
  const MILLISECONDS = 'milliseconds';
18
-
19
- const TIME_UNITS = [
20
- YEAR,
21
- QUARTER,
22
- MONTH,
23
- WEEK,
24
- DATE,
25
- DAY,
26
- DAYOFYEAR,
27
- HOURS,
28
- MINUTES,
29
- SECONDS,
30
- MILLISECONDS
31
- ];
32
-
18
+ const TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];
33
19
  const UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});
34
-
35
20
  function timeUnits(units) {
36
21
  const u = vegaUtil.array(units).slice(),
37
- m = {};
22
+ m = {}; // check validity
38
23
 
39
- // check validity
40
24
  if (!u.length) vegaUtil.error('Missing time unit.');
41
-
42
25
  u.forEach(unit => {
43
26
  if (vegaUtil.hasOwnProperty(UNITS, unit)) {
44
27
  m[unit] = 1;
@@ -46,23 +29,16 @@
46
29
  vegaUtil.error(`Invalid time unit: ${unit}.`);
47
30
  }
48
31
  });
49
-
50
- const numTypes = (
51
- (m[WEEK] || m[DAY] ? 1 : 0) +
52
- (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) +
53
- (m[DAYOFYEAR] ? 1 : 0)
54
- );
32
+ const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);
55
33
 
56
34
  if (numTypes > 1) {
57
35
  vegaUtil.error(`Incompatible time units: ${units}`);
58
- }
36
+ } // ensure proper sort order
59
37
 
60
- // ensure proper sort order
61
- u.sort((a, b) => UNITS[a] - UNITS[b]);
62
38
 
39
+ u.sort((a, b) => UNITS[a] - UNITS[b]);
63
40
  return u;
64
41
  }
65
-
66
42
  const defaultSpecifiers = {
67
43
  [YEAR]: '%Y ',
68
44
  [QUARTER]: 'Q%q ',
@@ -79,17 +55,19 @@
79
55
  [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',
80
56
  [`${HOURS}-${MINUTES}`]: '%H:%M'
81
57
  };
82
-
83
58
  function timeUnitSpecifier(units, specifiers) {
84
59
  const s = vegaUtil.extend({}, defaultSpecifiers, specifiers),
85
60
  u = timeUnits(units),
86
61
  n = u.length;
62
+ let fmt = '',
63
+ start = 0,
64
+ end,
65
+ key;
87
66
 
88
- let fmt = '', start = 0, end, key;
89
-
90
- for (start=0; start<n; ) {
91
- for (end=u.length; end > start; --end) {
67
+ for (start = 0; start < n;) {
68
+ for (end = u.length; end > start; --end) {
92
69
  key = u.slice(start, end).join('-');
70
+
93
71
  if (s[key] != null) {
94
72
  fmt += s[key];
95
73
  start = end;
@@ -101,7 +79,351 @@
101
79
  return fmt.trim();
102
80
  }
103
81
 
104
- const t0 = new Date;
82
+ var t0$1 = new Date(),
83
+ t1 = new Date();
84
+ function newInterval(floori, offseti, count, field) {
85
+ function interval(date) {
86
+ return floori(date = arguments.length === 0 ? new Date() : new Date(+date)), date;
87
+ }
88
+
89
+ interval.floor = function (date) {
90
+ return floori(date = new Date(+date)), date;
91
+ };
92
+
93
+ interval.ceil = function (date) {
94
+ return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
95
+ };
96
+
97
+ interval.round = function (date) {
98
+ var d0 = interval(date),
99
+ d1 = interval.ceil(date);
100
+ return date - d0 < d1 - date ? d0 : d1;
101
+ };
102
+
103
+ interval.offset = function (date, step) {
104
+ return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
105
+ };
106
+
107
+ interval.range = function (start, stop, step) {
108
+ var range = [],
109
+ previous;
110
+ start = interval.ceil(start);
111
+ step = step == null ? 1 : Math.floor(step);
112
+ if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
113
+
114
+ do range.push(previous = new Date(+start)), offseti(start, step), floori(start); while (previous < start && start < stop);
115
+
116
+ return range;
117
+ };
118
+
119
+ interval.filter = function (test) {
120
+ return newInterval(function (date) {
121
+ if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
122
+ }, function (date, step) {
123
+ if (date >= date) {
124
+ if (step < 0) while (++step <= 0) {
125
+ while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
126
+
127
+ } else while (--step >= 0) {
128
+ while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
129
+
130
+ }
131
+ }
132
+ });
133
+ };
134
+
135
+ if (count) {
136
+ interval.count = function (start, end) {
137
+ t0$1.setTime(+start), t1.setTime(+end);
138
+ floori(t0$1), floori(t1);
139
+ return Math.floor(count(t0$1, t1));
140
+ };
141
+
142
+ interval.every = function (step) {
143
+ step = Math.floor(step);
144
+ return !isFinite(step) || !(step > 0) ? null : !(step > 1) ? interval : interval.filter(field ? function (d) {
145
+ return field(d) % step === 0;
146
+ } : function (d) {
147
+ return interval.count(0, d) % step === 0;
148
+ });
149
+ };
150
+ }
151
+
152
+ return interval;
153
+ }
154
+
155
+ var millisecond = newInterval(function () {// noop
156
+ }, function (date, step) {
157
+ date.setTime(+date + step);
158
+ }, function (start, end) {
159
+ return end - start;
160
+ }); // An optimized implementation for this simple case.
161
+
162
+ millisecond.every = function (k) {
163
+ k = Math.floor(k);
164
+ if (!isFinite(k) || !(k > 0)) return null;
165
+ if (!(k > 1)) return millisecond;
166
+ return newInterval(function (date) {
167
+ date.setTime(Math.floor(date / k) * k);
168
+ }, function (date, step) {
169
+ date.setTime(+date + step * k);
170
+ }, function (start, end) {
171
+ return (end - start) / k;
172
+ });
173
+ };
174
+
175
+ var utcMillisecond = millisecond;
176
+
177
+ const durationSecond$1 = 1000;
178
+ const durationMinute$1 = durationSecond$1 * 60;
179
+ const durationHour$1 = durationMinute$1 * 60;
180
+ const durationDay$1 = durationHour$1 * 24;
181
+ const durationWeek$1 = durationDay$1 * 7;
182
+
183
+ var second = newInterval(function (date) {
184
+ date.setTime(date - date.getMilliseconds());
185
+ }, function (date, step) {
186
+ date.setTime(+date + step * durationSecond$1);
187
+ }, function (start, end) {
188
+ return (end - start) / durationSecond$1;
189
+ }, function (date) {
190
+ return date.getUTCSeconds();
191
+ });
192
+ var utcSecond = second;
193
+
194
+ var minute = newInterval(function (date) {
195
+ date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond$1);
196
+ }, function (date, step) {
197
+ date.setTime(+date + step * durationMinute$1);
198
+ }, function (start, end) {
199
+ return (end - start) / durationMinute$1;
200
+ }, function (date) {
201
+ return date.getMinutes();
202
+ });
203
+ var timeMinute = minute;
204
+
205
+ var hour = newInterval(function (date) {
206
+ date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond$1 - date.getMinutes() * durationMinute$1);
207
+ }, function (date, step) {
208
+ date.setTime(+date + step * durationHour$1);
209
+ }, function (start, end) {
210
+ return (end - start) / durationHour$1;
211
+ }, function (date) {
212
+ return date.getHours();
213
+ });
214
+ var timeHour = hour;
215
+
216
+ var day = newInterval(date => date.setHours(0, 0, 0, 0), (date, step) => date.setDate(date.getDate() + step), (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute$1) / durationDay$1, date => date.getDate() - 1);
217
+ var timeDay = day;
218
+
219
+ function weekday$1(i) {
220
+ return newInterval(function (date) {
221
+ date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
222
+ date.setHours(0, 0, 0, 0);
223
+ }, function (date, step) {
224
+ date.setDate(date.getDate() + step * 7);
225
+ }, function (start, end) {
226
+ return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute$1) / durationWeek$1;
227
+ });
228
+ }
229
+
230
+ var sunday = weekday$1(0);
231
+ weekday$1(1);
232
+ weekday$1(2);
233
+ weekday$1(3);
234
+ weekday$1(4);
235
+ weekday$1(5);
236
+ weekday$1(6);
237
+
238
+ var month = newInterval(function (date) {
239
+ date.setDate(1);
240
+ date.setHours(0, 0, 0, 0);
241
+ }, function (date, step) {
242
+ date.setMonth(date.getMonth() + step);
243
+ }, function (start, end) {
244
+ return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
245
+ }, function (date) {
246
+ return date.getMonth();
247
+ });
248
+ var timeMonth = month;
249
+
250
+ var year = newInterval(function (date) {
251
+ date.setMonth(0, 1);
252
+ date.setHours(0, 0, 0, 0);
253
+ }, function (date, step) {
254
+ date.setFullYear(date.getFullYear() + step);
255
+ }, function (start, end) {
256
+ return end.getFullYear() - start.getFullYear();
257
+ }, function (date) {
258
+ return date.getFullYear();
259
+ }); // An optimized implementation for this simple case.
260
+
261
+ year.every = function (k) {
262
+ return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function (date) {
263
+ date.setFullYear(Math.floor(date.getFullYear() / k) * k);
264
+ date.setMonth(0, 1);
265
+ date.setHours(0, 0, 0, 0);
266
+ }, function (date, step) {
267
+ date.setFullYear(date.getFullYear() + step * k);
268
+ });
269
+ };
270
+
271
+ var timeYear = year;
272
+
273
+ var utcMinute = newInterval(function (date) {
274
+ date.setUTCSeconds(0, 0);
275
+ }, function (date, step) {
276
+ date.setTime(+date + step * durationMinute$1);
277
+ }, function (start, end) {
278
+ return (end - start) / durationMinute$1;
279
+ }, function (date) {
280
+ return date.getUTCMinutes();
281
+ });
282
+ var utcMinute$1 = utcMinute;
283
+
284
+ var utcHour = newInterval(function (date) {
285
+ date.setUTCMinutes(0, 0, 0);
286
+ }, function (date, step) {
287
+ date.setTime(+date + step * durationHour$1);
288
+ }, function (start, end) {
289
+ return (end - start) / durationHour$1;
290
+ }, function (date) {
291
+ return date.getUTCHours();
292
+ });
293
+ var utcHour$1 = utcHour;
294
+
295
+ var utcDay = newInterval(function (date) {
296
+ date.setUTCHours(0, 0, 0, 0);
297
+ }, function (date, step) {
298
+ date.setUTCDate(date.getUTCDate() + step);
299
+ }, function (start, end) {
300
+ return (end - start) / durationDay$1;
301
+ }, function (date) {
302
+ return date.getUTCDate() - 1;
303
+ });
304
+ var utcDay$1 = utcDay;
305
+
306
+ function utcWeekday(i) {
307
+ return newInterval(function (date) {
308
+ date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
309
+ date.setUTCHours(0, 0, 0, 0);
310
+ }, function (date, step) {
311
+ date.setUTCDate(date.getUTCDate() + step * 7);
312
+ }, function (start, end) {
313
+ return (end - start) / durationWeek$1;
314
+ });
315
+ }
316
+
317
+ var utcSunday = utcWeekday(0);
318
+ utcWeekday(1);
319
+ utcWeekday(2);
320
+ utcWeekday(3);
321
+ utcWeekday(4);
322
+ utcWeekday(5);
323
+ utcWeekday(6);
324
+
325
+ var utcMonth = newInterval(function (date) {
326
+ date.setUTCDate(1);
327
+ date.setUTCHours(0, 0, 0, 0);
328
+ }, function (date, step) {
329
+ date.setUTCMonth(date.getUTCMonth() + step);
330
+ }, function (start, end) {
331
+ return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
332
+ }, function (date) {
333
+ return date.getUTCMonth();
334
+ });
335
+ var utcMonth$1 = utcMonth;
336
+
337
+ var utcYear = newInterval(function (date) {
338
+ date.setUTCMonth(0, 1);
339
+ date.setUTCHours(0, 0, 0, 0);
340
+ }, function (date, step) {
341
+ date.setUTCFullYear(date.getUTCFullYear() + step);
342
+ }, function (start, end) {
343
+ return end.getUTCFullYear() - start.getUTCFullYear();
344
+ }, function (date) {
345
+ return date.getUTCFullYear();
346
+ }); // An optimized implementation for this simple case.
347
+
348
+ utcYear.every = function (k) {
349
+ return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function (date) {
350
+ date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
351
+ date.setUTCMonth(0, 1);
352
+ date.setUTCHours(0, 0, 0, 0);
353
+ }, function (date, step) {
354
+ date.setUTCFullYear(date.getUTCFullYear() + step * k);
355
+ });
356
+ };
357
+
358
+ var utcYear$1 = utcYear;
359
+
360
+ function ascending(a, b) {
361
+ return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
362
+ }
363
+
364
+ function bisector(f) {
365
+ let delta = f;
366
+ let compare1 = f;
367
+ let compare2 = f;
368
+
369
+ if (f.length !== 2) {
370
+ delta = (d, x) => f(d) - x;
371
+
372
+ compare1 = ascending;
373
+
374
+ compare2 = (d, x) => ascending(f(d), x);
375
+ }
376
+
377
+ function left(a, x, lo = 0, hi = a.length) {
378
+ if (lo < hi) {
379
+ if (compare1(x, x) !== 0) return hi;
380
+
381
+ do {
382
+ const mid = lo + hi >>> 1;
383
+ if (compare2(a[mid], x) < 0) lo = mid + 1;else hi = mid;
384
+ } while (lo < hi);
385
+ }
386
+
387
+ return lo;
388
+ }
389
+
390
+ function right(a, x, lo = 0, hi = a.length) {
391
+ if (lo < hi) {
392
+ if (compare1(x, x) !== 0) return hi;
393
+
394
+ do {
395
+ const mid = lo + hi >>> 1;
396
+ if (compare2(a[mid], x) <= 0) lo = mid + 1;else hi = mid;
397
+ } while (lo < hi);
398
+ }
399
+
400
+ return lo;
401
+ }
402
+
403
+ function center(a, x, lo = 0, hi = a.length) {
404
+ const i = left(a, x, lo, hi - 1);
405
+ return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
406
+ }
407
+
408
+ return {
409
+ left,
410
+ center,
411
+ right
412
+ };
413
+ }
414
+
415
+ var e10 = Math.sqrt(50),
416
+ e5 = Math.sqrt(10),
417
+ e2 = Math.sqrt(2);
418
+ function tickStep(start, stop, count) {
419
+ var step0 = Math.abs(stop - start) / Math.max(0, count),
420
+ step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
421
+ error = step0 / step1;
422
+ if (error >= e10) step1 *= 10;else if (error >= e5) step1 *= 5;else if (error >= e2) step1 *= 2;
423
+ return stop < start ? -step1 : step1;
424
+ }
425
+
426
+ const t0 = new Date();
105
427
 
106
428
  function localYear(y) {
107
429
  t0.setFullYear(y);
@@ -114,61 +436,52 @@
114
436
  function dayofyear(d) {
115
437
  return localDayOfYear(new Date(d));
116
438
  }
117
-
118
439
  function week(d) {
119
440
  return localWeekNum(new Date(d));
120
441
  }
121
-
122
442
  function localDayOfYear(d) {
123
- return d3Time.timeDay.count(localYear(d.getFullYear()) - 1, d);
443
+ return timeDay.count(localYear(d.getFullYear()) - 1, d);
124
444
  }
125
-
126
445
  function localWeekNum(d) {
127
- return d3Time.timeWeek.count(localYear(d.getFullYear()) - 1, d);
446
+ return sunday.count(localYear(d.getFullYear()) - 1, d);
128
447
  }
129
-
130
448
  function localFirst(y) {
131
449
  return localYear(y).getDay();
132
450
  }
133
-
134
451
  function localDate(y, m, d, H, M, S, L) {
135
452
  if (0 <= y && y < 100) {
136
453
  const date = new Date(-1, m, d, H, M, S, L);
137
454
  date.setFullYear(y);
138
455
  return date;
139
456
  }
457
+
140
458
  return new Date(y, m, d, H, M, S, L);
141
459
  }
142
-
143
460
  function utcdayofyear(d) {
144
461
  return utcDayOfYear(new Date(d));
145
462
  }
146
-
147
463
  function utcweek(d) {
148
464
  return utcWeekNum(new Date(d));
149
465
  }
150
-
151
466
  function utcDayOfYear(d) {
152
467
  const y = Date.UTC(d.getUTCFullYear(), 0, 1);
153
- return d3Time.utcDay.count(y - 1, d);
468
+ return utcDay$1.count(y - 1, d);
154
469
  }
155
-
156
470
  function utcWeekNum(d) {
157
471
  const y = Date.UTC(d.getUTCFullYear(), 0, 1);
158
- return d3Time.utcWeek.count(y - 1, d);
472
+ return utcSunday.count(y - 1, d);
159
473
  }
160
-
161
474
  function utcFirst(y) {
162
475
  t0.setTime(Date.UTC(y, 0, 1));
163
476
  return t0.getUTCDay();
164
477
  }
165
-
166
478
  function utcDate(y, m, d, H, M, S, L) {
167
479
  if (0 <= y && y < 100) {
168
480
  const date = new Date(Date.UTC(-1, m, d, H, M, S, L));
169
481
  date.setUTCFullYear(d.y);
170
482
  return date;
171
483
  }
484
+
172
485
  return new Date(Date.UTC(y, m, d, H, M, S, L));
173
486
  }
174
487
 
@@ -176,28 +489,20 @@
176
489
  const s = step || 1,
177
490
  b = vegaUtil.peek(units),
178
491
  _ = (unit, p, key) => {
179
- key = key || unit;
180
- return getUnit(get[key], inv[key], unit === b && s, p);
181
- };
492
+ key = key || unit;
493
+ return getUnit(get[key], inv[key], unit === b && s, p);
494
+ };
182
495
 
183
- const t = new Date,
496
+ const t = new Date(),
184
497
  u = vegaUtil.toSet(units),
185
498
  y = u[YEAR] ? _(YEAR) : vegaUtil.constant(2012),
186
- m = u[MONTH] ? _(MONTH)
187
- : u[QUARTER] ? _(QUARTER)
188
- : vegaUtil.zero,
189
- d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY)
190
- : u[WEEK] ? _(WEEK, 1)
191
- : u[DAY] ? _(DAY, 1)
192
- : u[DATE] ? _(DATE, 1)
193
- : u[DAYOFYEAR] ? _(DAYOFYEAR, 1)
194
- : vegaUtil.one,
499
+ m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : vegaUtil.zero,
500
+ d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : vegaUtil.one,
195
501
  H = u[HOURS] ? _(HOURS) : vegaUtil.zero,
196
502
  M = u[MINUTES] ? _(MINUTES) : vegaUtil.zero,
197
503
  S = u[SECONDS] ? _(SECONDS) : vegaUtil.zero,
198
504
  L = u[MILLISECONDS] ? _(MILLISECONDS) : vegaUtil.zero;
199
-
200
- return function(v) {
505
+ return function (v) {
201
506
  t.setTime(+v);
202
507
  const year = y(t);
203
508
  return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));
@@ -205,102 +510,90 @@
205
510
  }
206
511
 
207
512
  function getUnit(f, inv, step, phase) {
208
- const u = step <= 1 ? f
209
- : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step)
210
- : (d, y) => step * Math.floor(f(d, y) / step);
513
+ const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);
211
514
  return inv ? (d, y) => inv(u(d, y), y) : u;
212
- }
213
-
214
- // returns the day of the year based on week number, day of week,
515
+ } // returns the day of the year based on week number, day of week,
215
516
  // and the day of the week for the first day of the year
517
+
518
+
216
519
  function weekday(week, day, firstDay) {
217
520
  return day + week * 7 - (firstDay + 6) % 7;
218
- }
521
+ } // -- LOCAL TIME --
219
522
 
220
- // -- LOCAL TIME --
221
523
 
222
524
  const localGet = {
223
- [YEAR]: d => d.getFullYear(),
224
- [QUARTER]: d => Math.floor(d.getMonth() / 3),
225
- [MONTH]: d => d.getMonth(),
226
- [DATE]: d => d.getDate(),
227
- [HOURS]: d => d.getHours(),
228
- [MINUTES]: d => d.getMinutes(),
229
- [SECONDS]: d => d.getSeconds(),
525
+ [YEAR]: d => d.getFullYear(),
526
+ [QUARTER]: d => Math.floor(d.getMonth() / 3),
527
+ [MONTH]: d => d.getMonth(),
528
+ [DATE]: d => d.getDate(),
529
+ [HOURS]: d => d.getHours(),
530
+ [MINUTES]: d => d.getMinutes(),
531
+ [SECONDS]: d => d.getSeconds(),
230
532
  [MILLISECONDS]: d => d.getMilliseconds(),
231
- [DAYOFYEAR]: d => localDayOfYear(d),
232
- [WEEK]: d => localWeekNum(d),
233
- [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),
234
- [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))
533
+ [DAYOFYEAR]: d => localDayOfYear(d),
534
+ [WEEK]: d => localWeekNum(d),
535
+ [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),
536
+ [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))
235
537
  };
236
-
237
538
  const localInv = {
238
539
  [QUARTER]: q => 3 * q,
239
- [WEEK]: (w, y) => weekday(w, 0, localFirst(y))
540
+ [WEEK]: (w, y) => weekday(w, 0, localFirst(y))
240
541
  };
241
-
242
542
  function timeFloor(units, step) {
243
543
  return floor(units, step || 1, localGet, localInv, localDate);
244
- }
245
-
246
- // -- UTC TIME --
544
+ } // -- UTC TIME --
247
545
 
248
546
  const utcGet = {
249
- [YEAR]: d => d.getUTCFullYear(),
250
- [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),
251
- [MONTH]: d => d.getUTCMonth(),
252
- [DATE]: d => d.getUTCDate(),
253
- [HOURS]: d => d.getUTCHours(),
254
- [MINUTES]: d => d.getUTCMinutes(),
255
- [SECONDS]: d => d.getUTCSeconds(),
547
+ [YEAR]: d => d.getUTCFullYear(),
548
+ [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),
549
+ [MONTH]: d => d.getUTCMonth(),
550
+ [DATE]: d => d.getUTCDate(),
551
+ [HOURS]: d => d.getUTCHours(),
552
+ [MINUTES]: d => d.getUTCMinutes(),
553
+ [SECONDS]: d => d.getUTCSeconds(),
256
554
  [MILLISECONDS]: d => d.getUTCMilliseconds(),
257
- [DAYOFYEAR]: d => utcDayOfYear(d),
258
- [WEEK]: d => utcWeekNum(d),
259
- [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),
260
- [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))
555
+ [DAYOFYEAR]: d => utcDayOfYear(d),
556
+ [WEEK]: d => utcWeekNum(d),
557
+ [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),
558
+ [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))
261
559
  };
262
-
263
560
  const utcInv = {
264
561
  [QUARTER]: q => 3 * q,
265
- [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))
562
+ [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))
266
563
  };
267
-
268
564
  function utcFloor(units, step) {
269
565
  return floor(units, step || 1, utcGet, utcInv, utcDate);
270
566
  }
271
567
 
272
568
  const timeIntervals = {
273
- [YEAR]: d3Time.timeYear,
274
- [QUARTER]: d3Time.timeMonth.every(3),
275
- [MONTH]: d3Time.timeMonth,
276
- [WEEK]: d3Time.timeWeek,
277
- [DATE]: d3Time.timeDay,
278
- [DAY]: d3Time.timeDay,
279
- [DAYOFYEAR]: d3Time.timeDay,
280
- [HOURS]: d3Time.timeHour,
281
- [MINUTES]: d3Time.timeMinute,
282
- [SECONDS]: d3Time.timeSecond,
283
- [MILLISECONDS]: d3Time.timeMillisecond
569
+ [YEAR]: timeYear,
570
+ [QUARTER]: timeMonth.every(3),
571
+ [MONTH]: timeMonth,
572
+ [WEEK]: sunday,
573
+ [DATE]: timeDay,
574
+ [DAY]: timeDay,
575
+ [DAYOFYEAR]: timeDay,
576
+ [HOURS]: timeHour,
577
+ [MINUTES]: timeMinute,
578
+ [SECONDS]: utcSecond,
579
+ [MILLISECONDS]: utcMillisecond
284
580
  };
285
-
286
581
  const utcIntervals = {
287
- [YEAR]: d3Time.utcYear,
288
- [QUARTER]: d3Time.utcMonth.every(3),
289
- [MONTH]: d3Time.utcMonth,
290
- [WEEK]: d3Time.utcWeek,
291
- [DATE]: d3Time.utcDay,
292
- [DAY]: d3Time.utcDay,
293
- [DAYOFYEAR]: d3Time.utcDay,
294
- [HOURS]: d3Time.utcHour,
295
- [MINUTES]: d3Time.utcMinute,
296
- [SECONDS]: d3Time.utcSecond,
297
- [MILLISECONDS]: d3Time.utcMillisecond
582
+ [YEAR]: utcYear$1,
583
+ [QUARTER]: utcMonth$1.every(3),
584
+ [MONTH]: utcMonth$1,
585
+ [WEEK]: utcSunday,
586
+ [DATE]: utcDay$1,
587
+ [DAY]: utcDay$1,
588
+ [DAYOFYEAR]: utcDay$1,
589
+ [HOURS]: utcHour$1,
590
+ [MINUTES]: utcMinute$1,
591
+ [SECONDS]: utcSecond,
592
+ [MILLISECONDS]: utcMillisecond
298
593
  };
299
-
300
594
  function timeInterval(unit) {
301
595
  return timeIntervals[unit];
302
596
  }
303
-
304
597
  function utcInterval(unit) {
305
598
  return utcIntervals[unit];
306
599
  }
@@ -312,7 +605,6 @@
312
605
  function timeOffset(unit, date, step) {
313
606
  return offset(timeInterval(unit), date, step);
314
607
  }
315
-
316
608
  function utcOffset(unit, date, step) {
317
609
  return offset(utcInterval(unit), date, step);
318
610
  }
@@ -324,7 +616,6 @@
324
616
  function timeSequence(unit, start, stop, step) {
325
617
  return sequence(timeInterval(unit), start, stop, step);
326
618
  }
327
-
328
619
  function utcSequence(unit, start, stop, step) {
329
620
  return sequence(utcInterval(unit), start, stop, step);
330
621
  }
@@ -336,57 +627,38 @@
336
627
  durationWeek = durationDay * 7,
337
628
  durationMonth = durationDay * 30,
338
629
  durationYear = durationDay * 365;
339
-
340
- const Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],
630
+ const Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],
341
631
  Seconds = Milli.slice(0, -1),
342
632
  Minutes = Seconds.slice(0, -1),
343
- Hours = Minutes.slice(0, -1),
344
- Day = Hours.slice(0, -1),
345
- Week = [YEAR, WEEK],
346
- Month = [YEAR, MONTH],
347
- Year = [YEAR];
348
-
349
- const intervals = [
350
- [Seconds, 1, durationSecond],
351
- [Seconds, 5, 5 * durationSecond],
352
- [Seconds, 15, 15 * durationSecond],
353
- [Seconds, 30, 30 * durationSecond],
354
- [Minutes, 1, durationMinute],
355
- [Minutes, 5, 5 * durationMinute],
356
- [Minutes, 15, 15 * durationMinute],
357
- [Minutes, 30, 30 * durationMinute],
358
- [ Hours, 1, durationHour ],
359
- [ Hours, 3, 3 * durationHour ],
360
- [ Hours, 6, 6 * durationHour ],
361
- [ Hours, 12, 12 * durationHour ],
362
- [ Day, 1, durationDay ],
363
- [ Week, 1, durationWeek ],
364
- [ Month, 1, durationMonth ],
365
- [ Month, 3, 3 * durationMonth ],
366
- [ Year, 1, durationYear ]
367
- ];
368
-
369
- function bin(opt) {
633
+ Hours = Minutes.slice(0, -1),
634
+ Day = Hours.slice(0, -1),
635
+ Week = [YEAR, WEEK],
636
+ Month = [YEAR, MONTH],
637
+ Year = [YEAR];
638
+ const intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];
639
+ function bin (opt) {
370
640
  const ext = opt.extent,
371
641
  max = opt.maxbins || 40,
372
642
  target = Math.abs(vegaUtil.span(ext)) / max;
373
-
374
- let i = d3Array.bisector(i => i[2]).right(intervals, target),
375
- units, step;
643
+ let i = bisector(i => i[2]).right(intervals, target),
644
+ units,
645
+ step;
376
646
 
377
647
  if (i === intervals.length) {
378
- units = Year,
379
- step = d3Array.tickStep(ext[0] / durationYear, ext[1] / durationYear, max);
648
+ units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);
380
649
  } else if (i) {
381
650
  i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];
382
651
  units = i[0];
383
652
  step = i[1];
384
653
  } else {
385
654
  units = Milli;
386
- step = Math.max(d3Array.tickStep(ext[0], ext[1], max), 1);
655
+ step = Math.max(tickStep(ext[0], ext[1], max), 1);
387
656
  }
388
657
 
389
- return {units, step};
658
+ return {
659
+ units,
660
+ step
661
+ };
390
662
  }
391
663
 
392
664
  exports.DATE = DATE;
@@ -419,4 +691,4 @@
419
691
 
420
692
  Object.defineProperty(exports, '__esModule', { value: true });
421
693
 
422
- })));
694
+ }));
@@ -1 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vega-util"),require("d3-time"),require("d3-array")):"function"==typeof define&&define.amd?define(["exports","vega-util","d3-time","d3-array"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vega={},e.vega,e.d3,e.d3)}(this,(function(e,t,n,r){"use strict";const o="year",i="quarter",u="month",a="week",c="date",s="day",l="hours",f="minutes",d="seconds",y=[o,i,u,a,c,s,"dayofyear",l,f,d,"milliseconds"],m=y.reduce((e,t,n)=>(e[t]=1+n,e),{});function g(e){const n=t.array(e).slice(),r={};n.length||t.error("Missing time unit."),n.forEach(e=>{t.hasOwnProperty(m,e)?r[e]=1:t.error(`Invalid time unit: ${e}.`)});return(r[a]||r.day?1:0)+(r[i]||r[u]||r[c]?1:0)+(r.dayofyear?1:0)>1&&t.error("Incompatible time units: "+e),n.sort((e,t)=>m[e]-m[t]),n}const D={[o]:"%Y ",[i]:"Q%q ",[u]:"%b ",[c]:"%d ",[a]:"W%U ",[s]:"%a ",dayofyear:"%j ",[l]:"%H:00",[f]:"00:%M",[d]:":%S",milliseconds:".%L","year-month":"%Y-%m ","year-month-date":"%Y-%m-%d ",["hours-"+f]:"%H:%M"};const M=new Date;function h(e){return M.setFullYear(e),M.setMonth(0),M.setDate(1),M.setHours(0,0,0,0),M}function T(e){return n.timeDay.count(h(e.getFullYear())-1,e)}function U(e){return n.timeWeek.count(h(e.getFullYear())-1,e)}function C(e){return h(e).getDay()}function S(e,t,n,r,o,i,u){if(0<=e&&e<100){const a=new Date(-1,t,n,r,o,i,u);return a.setFullYear(e),a}return new Date(e,t,n,r,o,i,u)}function Y(e){const t=Date.UTC(e.getUTCFullYear(),0,1);return n.utcDay.count(t-1,e)}function p(e){const t=Date.UTC(e.getUTCFullYear(),0,1);return n.utcWeek.count(t-1,e)}function w(e){return M.setTime(Date.UTC(e,0,1)),M.getUTCDay()}function v(e,t,n,r,o,i,u){if(0<=e&&e<100){const e=new Date(Date.UTC(-1,t,n,r,o,i,u));return e.setUTCFullYear(n.y),e}return new Date(Date.UTC(e,t,n,r,o,i,u))}function F(e,n,r,y,m){const g=n||1,D=t.peek(e),M=(e,t,n)=>function(e,t,n,r){const o=n<=1?e:r?(t,o)=>r+n*Math.floor((e(t,o)-r)/n):(t,r)=>n*Math.floor(e(t,r)/n);return t?(e,n)=>t(o(e,n),n):o}(r[n=n||e],y[n],e===D&&g,t),h=new Date,T=t.toSet(e),U=T[o]?M(o):t.constant(2012),C=T[u]?M(u):T[i]?M(i):t.zero,S=T[a]&&T.day?M(s,1,a+s):T[a]?M(a,1):T.day?M(s,1):T[c]?M(c,1):T.dayofyear?M("dayofyear",1):t.one,Y=T[l]?M(l):t.zero,p=T[f]?M(f):t.zero,w=T[d]?M(d):t.zero,v=T.milliseconds?M("milliseconds"):t.zero;return function(e){h.setTime(+e);const t=U(h);return m(t,C(h),S(h,t),Y(h),p(h),w(h),v(h))}}function k(e,t,n){return t+7*e-(n+6)%7}const E={[o]:e=>e.getFullYear(),[i]:e=>Math.floor(e.getMonth()/3),[u]:e=>e.getMonth(),[c]:e=>e.getDate(),[l]:e=>e.getHours(),[f]:e=>e.getMinutes(),[d]:e=>e.getSeconds(),milliseconds:e=>e.getMilliseconds(),dayofyear:e=>T(e),[a]:e=>U(e),[a+s]:(e,t)=>k(U(e),e.getDay(),C(t)),[s]:(e,t)=>k(1,e.getDay(),C(t))},b={[i]:e=>3*e,[a]:(e,t)=>k(e,0,C(t))};const H={[o]:e=>e.getUTCFullYear(),[i]:e=>Math.floor(e.getUTCMonth()/3),[u]:e=>e.getUTCMonth(),[c]:e=>e.getUTCDate(),[l]:e=>e.getUTCHours(),[f]:e=>e.getUTCMinutes(),[d]:e=>e.getUTCSeconds(),milliseconds:e=>e.getUTCMilliseconds(),dayofyear:e=>Y(e),[a]:e=>p(e),[s]:(e,t)=>k(1,e.getUTCDay(),w(t)),[a+s]:(e,t)=>k(p(e),e.getUTCDay(),w(t))},I={[i]:e=>3*e,[a]:(e,t)=>k(e,0,w(t))};const O={[o]:n.timeYear,[i]:n.timeMonth.every(3),[u]:n.timeMonth,[a]:n.timeWeek,[c]:n.timeDay,[s]:n.timeDay,dayofyear:n.timeDay,[l]:n.timeHour,[f]:n.timeMinute,[d]:n.timeSecond,milliseconds:n.timeMillisecond},q={[o]:n.utcYear,[i]:n.utcMonth.every(3),[u]:n.utcMonth,[a]:n.utcWeek,[c]:n.utcDay,[s]:n.utcDay,dayofyear:n.utcDay,[l]:n.utcHour,[f]:n.utcMinute,[d]:n.utcSecond,milliseconds:n.utcMillisecond};function x(e){return O[e]}function A(e){return q[e]}function W(e,t,n){return e?e.offset(t,n):void 0}function z(e,t,n,r){return e?e.range(t,n,r):void 0}const N=[o,u,c,l,f,d,"milliseconds"],R=N.slice(0,-1),j=R.slice(0,-1),L=j.slice(0,-1),_=L.slice(0,-1),P=[o,u],Q=[o],B=[[R,1,1e3],[R,5,5e3],[R,15,15e3],[R,30,3e4],[j,1,6e4],[j,5,3e5],[j,15,9e5],[j,30,18e5],[L,1,36e5],[L,3,108e5],[L,6,216e5],[L,12,432e5],[_,1,864e5],[[o,a],1,6048e5],[P,1,2592e6],[P,3,7776e6],[Q,1,31536e6]];e.DATE=c,e.DAY=s,e.DAYOFYEAR="dayofyear",e.HOURS=l,e.MILLISECONDS="milliseconds",e.MINUTES=f,e.MONTH=u,e.QUARTER=i,e.SECONDS=d,e.TIME_UNITS=y,e.WEEK=a,e.YEAR=o,e.dayofyear=function(e){return T(new Date(e))},e.timeBin=function(e){const n=e.extent,o=e.maxbins||40,i=Math.abs(t.span(n))/o;let u,a,c=r.bisector(e=>e[2]).right(B,i);return c===B.length?(u=Q,a=r.tickStep(n[0]/31536e6,n[1]/31536e6,o)):c?(c=B[i/B[c-1][2]<B[c][2]/i?c-1:c],u=c[0],a=c[1]):(u=N,a=Math.max(r.tickStep(n[0],n[1],o),1)),{units:u,step:a}},e.timeFloor=function(e,t){return F(e,t||1,E,b,S)},e.timeInterval=x,e.timeOffset=function(e,t,n){return W(x(e),t,n)},e.timeSequence=function(e,t,n,r){return z(x(e),t,n,r)},e.timeUnitSpecifier=function(e,n){const r=t.extend({},D,n),o=g(e),i=o.length;let u,a,c="",s=0;for(s=0;s<i;)for(u=o.length;u>s;--u)if(a=o.slice(s,u).join("-"),null!=r[a]){c+=r[a],s=u;break}return c.trim()},e.timeUnits=g,e.utcFloor=function(e,t){return F(e,t||1,H,I,v)},e.utcInterval=A,e.utcOffset=function(e,t,n){return W(A(e),t,n)},e.utcSequence=function(e,t,n,r){return z(A(e),t,n,r)},e.utcdayofyear=function(e){return Y(new Date(e))},e.utcweek=function(e){return p(new Date(e))},e.week=function(e){return U(new Date(e))},Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("vega-util")):"function"==typeof define&&define.amd?define(["exports","vega-util"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vega={},t.vega)}(this,(function(t,e){"use strict";const n="year",r="quarter",o="month",u="week",i="date",c="day",f="dayofyear",a="hours",s="minutes",l="seconds",g="milliseconds",T=[n,r,o,u,i,c,f,a,s,l,g],h=T.reduce(((t,e,n)=>(t[e]=1+n,t)),{});function M(t){const n=e.array(t).slice(),r={};n.length||e.error("Missing time unit."),n.forEach((t=>{e.hasOwnProperty(h,t)?r[t]=1:e.error("Invalid time unit: ".concat(t,"."))}));return(r.week||r.day?1:0)+(r.quarter||r.month||r.date?1:0)+(r.dayofyear?1:0)>1&&e.error("Incompatible time units: ".concat(t)),n.sort(((t,e)=>h[t]-h[e])),n}const U={[n]:"%Y ",[r]:"Q%q ",[o]:"%b ",[i]:"%d ",[u]:"W%U ",[c]:"%a ",[f]:"%j ",[a]:"%H:00",[s]:"00:%M",[l]:":%S",[g]:".%L",["".concat(n,"-").concat(o)]:"%Y-%m ",["".concat(n,"-").concat(o,"-").concat(i)]:"%Y-%m-%d ",["".concat(a,"-").concat(s)]:"%H:%M"};var C=new Date,d=new Date;function D(t,e,n,r){function o(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return o.floor=function(e){return t(e=new Date(+e)),e},o.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},o.round=function(t){var e=o(t),n=o.ceil(t);return t-e<n-t?e:n},o.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},o.range=function(n,r,u){var i,c=[];if(n=o.ceil(n),u=null==u?1:Math.floor(u),!(n<r&&u>0))return c;do{c.push(i=new Date(+n)),e(n,u),t(n)}while(i<n&&n<r);return c},o.filter=function(n){return D((function(e){if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(o.count=function(e,r){return C.setTime(+e),d.setTime(+r),t(C),t(d),Math.floor(n(C,d))},o.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?o.filter(r?function(e){return r(e)%t==0}:function(e){return o.count(0,e)%t==0}):o:null}),o}var m=D((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));m.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?D((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):m:null};var y=m;const F=1e3,Y=6e4,v=36e5,w=864e5,H=6048e5;var S=D((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*F)}),(function(t,e){return(e-t)/F}),(function(t){return t.getUTCSeconds()})),p=D((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*F)}),(function(t,e){t.setTime(+t+e*Y)}),(function(t,e){return(e-t)/Y}),(function(t){return t.getMinutes()})),O=D((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*F-t.getMinutes()*Y)}),(function(t,e){t.setTime(+t+e*v)}),(function(t,e){return(e-t)/v}),(function(t){return t.getHours()})),E=D((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Y)/w),(t=>t.getDate()-1));function b(t){return D((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Y)/H}))}var q=b(0);b(1),b(2),b(3),b(4),b(5),b(6);var N=D((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),z=D((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));z.every=function(t){return isFinite(t=Math.floor(t))&&t>0?D((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var I=z,k=D((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*Y)}),(function(t,e){return(e-t)/Y}),(function(t){return t.getUTCMinutes()})),x=D((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*v)}),(function(t,e){return(e-t)/v}),(function(t){return t.getUTCHours()})),A=D((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/w}),(function(t){return t.getUTCDate()-1}));function R(t){return D((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/H}))}var j=R(0);R(1),R(2),R(3),R(4),R(5),R(6);var L=D((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),_=D((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));_.every=function(t){return isFinite(t=Math.floor(t))&&t>0?D((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var P=_;function Q(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}var W=Math.sqrt(50),B=Math.sqrt(10),K=Math.sqrt(2);function G(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),o=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),u=r/o;return u>=W?o*=10:u>=B?o*=5:u>=K&&(o*=2),e<t?-o:o}const J=new Date;function V(t){return J.setFullYear(t),J.setMonth(0),J.setDate(1),J.setHours(0,0,0,0),J}function X(t){return E.count(V(t.getFullYear())-1,t)}function Z(t){return q.count(V(t.getFullYear())-1,t)}function $(t){return V(t).getDay()}function tt(t,e,n,r,o,u,i){if(0<=t&&t<100){const c=new Date(-1,e,n,r,o,u,i);return c.setFullYear(t),c}return new Date(t,e,n,r,o,u,i)}function et(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return A.count(e-1,t)}function nt(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return j.count(e-1,t)}function rt(t){return J.setTime(Date.UTC(t,0,1)),J.getUTCDay()}function ot(t,e,n,r,o,u,i){if(0<=t&&t<100){const t=new Date(Date.UTC(-1,e,n,r,o,u,i));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(t,e,n,r,o,u,i))}function ut(t,T,h,M,U){const C=T||1,d=e.peek(t),D=(t,e,n)=>function(t,e,n,r){const o=n<=1?t:r?(e,o)=>r+n*Math.floor((t(e,o)-r)/n):(e,r)=>n*Math.floor(t(e,r)/n);return e?(t,n)=>e(o(t,n),n):o}(h[n=n||t],M[n],t===d&&C,e),m=new Date,y=e.toSet(t),F=y.year?D(n):e.constant(2012),Y=y.month?D(o):y.quarter?D(r):e.zero,v=y.week&&y.day?D(c,1,u+c):y.week?D(u,1):y.day?D(c,1):y.date?D(i,1):y.dayofyear?D(f,1):e.one,w=y.hours?D(a):e.zero,H=y.minutes?D(s):e.zero,S=y.seconds?D(l):e.zero,p=y.milliseconds?D(g):e.zero;return function(t){m.setTime(+t);const e=F(m);return U(e,Y(m),v(m,e),w(m),H(m),S(m),p(m))}}function it(t,e,n){return e+7*t-(n+6)%7}const ct={[n]:t=>t.getFullYear(),[r]:t=>Math.floor(t.getMonth()/3),[o]:t=>t.getMonth(),[i]:t=>t.getDate(),[a]:t=>t.getHours(),[s]:t=>t.getMinutes(),[l]:t=>t.getSeconds(),[g]:t=>t.getMilliseconds(),[f]:t=>X(t),[u]:t=>Z(t),[u+c]:(t,e)=>it(Z(t),t.getDay(),$(e)),[c]:(t,e)=>it(1,t.getDay(),$(e))},ft={[r]:t=>3*t,[u]:(t,e)=>it(t,0,$(e))};const at={[n]:t=>t.getUTCFullYear(),[r]:t=>Math.floor(t.getUTCMonth()/3),[o]:t=>t.getUTCMonth(),[i]:t=>t.getUTCDate(),[a]:t=>t.getUTCHours(),[s]:t=>t.getUTCMinutes(),[l]:t=>t.getUTCSeconds(),[g]:t=>t.getUTCMilliseconds(),[f]:t=>et(t),[u]:t=>nt(t),[c]:(t,e)=>it(1,t.getUTCDay(),rt(e)),[u+c]:(t,e)=>it(nt(t),t.getUTCDay(),rt(e))},st={[r]:t=>3*t,[u]:(t,e)=>it(t,0,rt(e))};const lt={[n]:I,[r]:N.every(3),[o]:N,[u]:q,[i]:E,[c]:E,[f]:E,[a]:O,[s]:p,[l]:S,[g]:y},gt={[n]:P,[r]:L.every(3),[o]:L,[u]:j,[i]:A,[c]:A,[f]:A,[a]:x,[s]:k,[l]:S,[g]:y};function Tt(t){return lt[t]}function ht(t){return gt[t]}function Mt(t,e,n){return t?t.offset(e,n):void 0}function Ut(t,e,n,r){return t?t.range(e,n,r):void 0}const Ct=1e3,dt=6e4,Dt=36e5,mt=864e5,yt=2592e6,Ft=31536e6,Yt=[n,o,i,a,s,l,g],vt=Yt.slice(0,-1),wt=vt.slice(0,-1),Ht=wt.slice(0,-1),St=Ht.slice(0,-1),pt=[n,o],Ot=[n],Et=[[vt,1,Ct],[vt,5,5e3],[vt,15,15e3],[vt,30,3e4],[wt,1,dt],[wt,5,3e5],[wt,15,9e5],[wt,30,18e5],[Ht,1,Dt],[Ht,3,108e5],[Ht,6,216e5],[Ht,12,432e5],[St,1,mt],[[n,u],1,6048e5],[pt,1,yt],[pt,3,7776e6],[Ot,1,Ft]];t.DATE=i,t.DAY=c,t.DAYOFYEAR=f,t.HOURS=a,t.MILLISECONDS=g,t.MINUTES=s,t.MONTH=o,t.QUARTER=r,t.SECONDS=l,t.TIME_UNITS=T,t.WEEK=u,t.YEAR=n,t.dayofyear=function(t){return X(new Date(t))},t.timeBin=function(t){const n=t.extent,r=t.maxbins||40,o=Math.abs(e.span(n))/r;let u,i,c=function(t){let e=t,n=t,r=t;function o(t,e){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(o<u){if(0!==n(e,e))return u;do{const n=o+u>>>1;r(t[n],e)<0?o=n+1:u=n}while(o<u)}return o}return 2!==t.length&&(e=(e,n)=>t(e)-n,n=Q,r=(e,n)=>Q(t(e),n)),{left:o,center:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const u=o(t,n,r,(arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length)-1);return u>r&&e(t[u-1],n)>-e(t[u],n)?u-1:u},right:function(t,e){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(o<u){if(0!==n(e,e))return u;do{const n=o+u>>>1;r(t[n],e)<=0?o=n+1:u=n}while(o<u)}return o}}}((t=>t[2])).right(Et,o);return c===Et.length?(u=Ot,i=G(n[0]/Ft,n[1]/Ft,r)):c?(c=Et[o/Et[c-1][2]<Et[c][2]/o?c-1:c],u=c[0],i=c[1]):(u=Yt,i=Math.max(G(n[0],n[1],r),1)),{units:u,step:i}},t.timeFloor=function(t,e){return ut(t,e||1,ct,ft,tt)},t.timeInterval=Tt,t.timeOffset=function(t,e,n){return Mt(Tt(t),e,n)},t.timeSequence=function(t,e,n,r){return Ut(Tt(t),e,n,r)},t.timeUnitSpecifier=function(t,n){const r=e.extend({},U,n),o=M(t),u=o.length;let i,c,f="",a=0;for(a=0;a<u;)for(i=o.length;i>a;--i)if(c=o.slice(a,i).join("-"),null!=r[c]){f+=r[c],a=i;break}return f.trim()},t.timeUnits=M,t.utcFloor=function(t,e){return ut(t,e||1,at,st,ot)},t.utcInterval=ht,t.utcOffset=function(t,e,n){return Mt(ht(t),e,n)},t.utcSequence=function(t,e,n,r){return Ut(ht(t),e,n,r)},t.utcdayofyear=function(t){return et(new Date(t))},t.utcweek=function(t){return nt(new Date(t))},t.week=function(t){return Z(new Date(t))},Object.defineProperty(t,"__esModule",{value:!0})}));
2
+ //# sourceMappingURL=vega-time.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vega-time.min.js","sources":["../src/units.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/utcMinute.js","../../../node_modules/d3-time/src/utcHour.js","../../../node_modules/d3-time/src/utcDay.js","../../../node_modules/d3-time/src/utcWeek.js","../../../node_modules/d3-time/src/utcMonth.js","../../../node_modules/d3-time/src/utcYear.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/ticks.js","../src/util.js","../src/floor.js","../src/interval.js","../src/bin.js","../../../node_modules/d3-array/src/bisector.js"],"sourcesContent":["import {array, error, extend, hasOwnProperty} from 'vega-util';\n\nexport const YEAR = 'year';\nexport const QUARTER = 'quarter';\nexport const MONTH = 'month';\nexport const WEEK = 'week';\nexport const DATE = 'date';\nexport const DAY = 'day';\nexport const DAYOFYEAR = 'dayofyear';\nexport const HOURS = 'hours';\nexport const MINUTES = 'minutes';\nexport const SECONDS = 'seconds';\nexport const MILLISECONDS = 'milliseconds';\n\nexport const TIME_UNITS = [\n YEAR,\n QUARTER,\n MONTH,\n WEEK,\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MINUTES,\n SECONDS,\n MILLISECONDS\n];\n\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\n\nexport function timeUnits(units) {\n const u = array(units).slice(),\n m = {};\n\n // check validity\n if (!u.length) error('Missing time unit.');\n\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n\n const numTypes = (\n (m[WEEK] || m[DAY] ? 1 : 0) +\n (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) +\n (m[DAYOFYEAR] ? 1 : 0)\n );\n\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n }\n\n // ensure proper sort order\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n\n return u;\n}\n\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\n\nexport function timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n\n let fmt = '', start = 0, end, key;\n\n for (start=0; start<n; ) {\n for (end=u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n\n return fmt.trim();\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import {timeDay, timeWeek, utcDay, utcWeek} from 'd3-time';\n\nconst t0 = new Date;\n\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\n\nexport function dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\n\nexport function week(d) {\n return localWeekNum(new Date(d));\n}\n\nexport function localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\n\nexport function localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\n\nexport function localFirst(y) {\n return localYear(y).getDay();\n}\n\nexport function localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n return new Date(y, m, d, H, M, S, L);\n}\n\nexport function utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\n\nexport function utcweek(d) {\n return utcWeekNum(new Date(d));\n}\n\nexport function utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\n\nexport function utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\n\nexport function utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\n\nexport function utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n","import {\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n QUARTER,\n SECONDS,\n WEEK,\n YEAR\n} from './units';\nimport {\n localDate, localDayOfYear, localFirst, localWeekNum,\n utcDate, utcDayOfYear, utcFirst, utcWeekNum\n} from './util';\nimport {constant, one, peek, toSet, zero} from 'vega-util';\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n\n const t = new Date,\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH)\n : u[QUARTER] ? _(QUARTER)\n : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY)\n : u[WEEK] ? _(WEEK, 1)\n : u[DAY] ? _(DAY, 1)\n : u[DATE] ? _(DATE, 1)\n : u[DAYOFYEAR] ? _(DAYOFYEAR, 1)\n : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n\n return function(v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\n\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f\n : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step)\n : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n}\n\n// returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n}\n\n// -- LOCAL TIME --\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\n\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\n\nexport function timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n}\n\n// -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\n\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\n\nexport function utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n","import {\n DATE,\n DAY,\n DAYOFYEAR,\n HOURS,\n MILLISECONDS,\n MINUTES,\n MONTH,\n QUARTER,\n SECONDS,\n WEEK,\n YEAR\n} from './units';\n\nimport {\n timeDay,\n timeHour,\n timeMillisecond,\n timeMinute,\n timeMonth,\n timeSecond,\n timeWeek,\n timeYear,\n utcDay,\n utcHour,\n utcMillisecond,\n utcMinute,\n utcMonth,\n utcSecond,\n utcWeek,\n utcYear\n} from 'd3-time';\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\n\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\n\nexport function timeInterval(unit) {\n return timeIntervals[unit];\n}\n\nexport function utcInterval(unit) {\n return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\n\nexport function timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\n\nexport function utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\n\nexport function timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\n\nexport function utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n","import {DATE, HOURS, MILLISECONDS, MINUTES, MONTH, SECONDS, WEEK, YEAR} from './units';\nimport {span} from 'vega-util';\nimport {bisector, tickStep} from 'd3-array';\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\n\nconst intervals = [\n [Seconds, 1, durationSecond],\n [Seconds, 5, 5 * durationSecond],\n [Seconds, 15, 15 * durationSecond],\n [Seconds, 30, 30 * durationSecond],\n [Minutes, 1, durationMinute],\n [Minutes, 5, 5 * durationMinute],\n [Minutes, 15, 15 * durationMinute],\n [Minutes, 30, 30 * durationMinute],\n [ Hours, 1, durationHour ],\n [ Hours, 3, 3 * durationHour ],\n [ Hours, 6, 6 * durationHour ],\n [ Hours, 12, 12 * durationHour ],\n [ Day, 1, durationDay ],\n [ Week, 1, durationWeek ],\n [ Month, 1, durationMonth ],\n [ Month, 3, 3 * durationMonth ],\n [ Year, 1, durationYear ]\n];\n\nexport default function(opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n\n let i = bisector(i => i[2]).right(intervals, target),\n units, step;\n\n if (i === intervals.length) {\n units = Year,\n step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n\n return {units, step};\n}\n","import ascending from \"./ascending.js\";\n\nexport default function bisector(f) {\n let delta = f;\n let compare1 = f;\n let compare2 = f;\n\n if (f.length !== 2) {\n delta = (d, x) => f(d) - x;\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n"],"names":["YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","reduce","o","u","i","timeUnits","units","array","slice","m","length","error","forEach","unit","hasOwnProperty","sort","a","b","defaultSpecifiers","concat","t0","Date","t1","newInterval","floori","offseti","count","field","interval","date","arguments","floor","ceil","round","d0","d1","offset","step","Math","range","start","stop","previous","push","filter","test","setTime","end","every","isFinite","d","millisecond","k","utcMillisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","utcSecond","getMilliseconds","getUTCSeconds","timeMinute","getSeconds","getMinutes","timeHour","getHours","timeDay","setHours","setDate","getDate","getTimezoneOffset","weekday","getDay","sunday","weekday$1","timeMonth","setMonth","getMonth","getFullYear","year","setFullYear","timeYear","utcMinute$1","setUTCSeconds","getUTCMinutes","utcHour$1","setUTCMinutes","getUTCHours","utcDay$1","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonth$1","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","utcYear$1","ascending","NaN","e10","sqrt","e5","e2","tickStep","step0","abs","max","step1","pow","log","LN10","localYear","y","localDayOfYear","localWeekNum","timeWeek","localFirst","localDate","H","M","S","L","utcDayOfYear","UTC","utcDay","utcWeekNum","utcWeek","utcFirst","utcDate","get","inv","newDate","s","peek","_","p","key","f","phase","getUnit","t","toSet","constant","zero","one","v","week","day","firstDay","localGet","localInv","q","w","utcGet","getUTCMilliseconds","utcInv","timeIntervals","timeSecond","timeMillisecond","utcIntervals","utcMonth","utcHour","utcMinute","timeInterval","utcInterval","ival","undefined","sequence","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","opt","ext","extent","maxbins","target","span","delta","compare1","compare2","left","x","lo","hi","mid","center","right","bisector","specifiers","extend","n","fmt","join","trim"],"mappings":"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"}
@@ -0,0 +1,318 @@
1
+ import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';
2
+ import { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';
3
+ import { bisector, tickStep } from 'd3-array';
4
+
5
+ const YEAR = 'year';
6
+ const QUARTER = 'quarter';
7
+ const MONTH = 'month';
8
+ const WEEK = 'week';
9
+ const DATE = 'date';
10
+ const DAY = 'day';
11
+ const DAYOFYEAR = 'dayofyear';
12
+ const HOURS = 'hours';
13
+ const MINUTES = 'minutes';
14
+ const SECONDS = 'seconds';
15
+ const MILLISECONDS = 'milliseconds';
16
+ const TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];
17
+ const UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});
18
+ function timeUnits(units) {
19
+ const u = array(units).slice(),
20
+ m = {}; // check validity
21
+
22
+ if (!u.length) error('Missing time unit.');
23
+ u.forEach(unit => {
24
+ if (hasOwnProperty(UNITS, unit)) {
25
+ m[unit] = 1;
26
+ } else {
27
+ error("Invalid time unit: ".concat(unit, "."));
28
+ }
29
+ });
30
+ const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);
31
+
32
+ if (numTypes > 1) {
33
+ error("Incompatible time units: ".concat(units));
34
+ } // ensure proper sort order
35
+
36
+
37
+ u.sort((a, b) => UNITS[a] - UNITS[b]);
38
+ return u;
39
+ }
40
+ const defaultSpecifiers = {
41
+ [YEAR]: '%Y ',
42
+ [QUARTER]: 'Q%q ',
43
+ [MONTH]: '%b ',
44
+ [DATE]: '%d ',
45
+ [WEEK]: 'W%U ',
46
+ [DAY]: '%a ',
47
+ [DAYOFYEAR]: '%j ',
48
+ [HOURS]: '%H:00',
49
+ [MINUTES]: '00:%M',
50
+ [SECONDS]: ':%S',
51
+ [MILLISECONDS]: '.%L',
52
+ ["".concat(YEAR, "-").concat(MONTH)]: '%Y-%m ',
53
+ ["".concat(YEAR, "-").concat(MONTH, "-").concat(DATE)]: '%Y-%m-%d ',
54
+ ["".concat(HOURS, "-").concat(MINUTES)]: '%H:%M'
55
+ };
56
+ function timeUnitSpecifier(units, specifiers) {
57
+ const s = extend({}, defaultSpecifiers, specifiers),
58
+ u = timeUnits(units),
59
+ n = u.length;
60
+ let fmt = '',
61
+ start = 0,
62
+ end,
63
+ key;
64
+
65
+ for (start = 0; start < n;) {
66
+ for (end = u.length; end > start; --end) {
67
+ key = u.slice(start, end).join('-');
68
+
69
+ if (s[key] != null) {
70
+ fmt += s[key];
71
+ start = end;
72
+ break;
73
+ }
74
+ }
75
+ }
76
+
77
+ return fmt.trim();
78
+ }
79
+
80
+ const t0 = new Date();
81
+
82
+ function localYear(y) {
83
+ t0.setFullYear(y);
84
+ t0.setMonth(0);
85
+ t0.setDate(1);
86
+ t0.setHours(0, 0, 0, 0);
87
+ return t0;
88
+ }
89
+
90
+ function dayofyear(d) {
91
+ return localDayOfYear(new Date(d));
92
+ }
93
+ function week(d) {
94
+ return localWeekNum(new Date(d));
95
+ }
96
+ function localDayOfYear(d) {
97
+ return timeDay.count(localYear(d.getFullYear()) - 1, d);
98
+ }
99
+ function localWeekNum(d) {
100
+ return timeWeek.count(localYear(d.getFullYear()) - 1, d);
101
+ }
102
+ function localFirst(y) {
103
+ return localYear(y).getDay();
104
+ }
105
+ function localDate(y, m, d, H, M, S, L) {
106
+ if (0 <= y && y < 100) {
107
+ const date = new Date(-1, m, d, H, M, S, L);
108
+ date.setFullYear(y);
109
+ return date;
110
+ }
111
+
112
+ return new Date(y, m, d, H, M, S, L);
113
+ }
114
+ function utcdayofyear(d) {
115
+ return utcDayOfYear(new Date(d));
116
+ }
117
+ function utcweek(d) {
118
+ return utcWeekNum(new Date(d));
119
+ }
120
+ function utcDayOfYear(d) {
121
+ const y = Date.UTC(d.getUTCFullYear(), 0, 1);
122
+ return utcDay.count(y - 1, d);
123
+ }
124
+ function utcWeekNum(d) {
125
+ const y = Date.UTC(d.getUTCFullYear(), 0, 1);
126
+ return utcWeek.count(y - 1, d);
127
+ }
128
+ function utcFirst(y) {
129
+ t0.setTime(Date.UTC(y, 0, 1));
130
+ return t0.getUTCDay();
131
+ }
132
+ function utcDate(y, m, d, H, M, S, L) {
133
+ if (0 <= y && y < 100) {
134
+ const date = new Date(Date.UTC(-1, m, d, H, M, S, L));
135
+ date.setUTCFullYear(d.y);
136
+ return date;
137
+ }
138
+
139
+ return new Date(Date.UTC(y, m, d, H, M, S, L));
140
+ }
141
+
142
+ function floor(units, step, get, inv, newDate) {
143
+ const s = step || 1,
144
+ b = peek(units),
145
+ _ = (unit, p, key) => {
146
+ key = key || unit;
147
+ return getUnit(get[key], inv[key], unit === b && s, p);
148
+ };
149
+
150
+ const t = new Date(),
151
+ u = toSet(units),
152
+ y = u[YEAR] ? _(YEAR) : constant(2012),
153
+ m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,
154
+ d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,
155
+ H = u[HOURS] ? _(HOURS) : zero,
156
+ M = u[MINUTES] ? _(MINUTES) : zero,
157
+ S = u[SECONDS] ? _(SECONDS) : zero,
158
+ L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;
159
+ return function (v) {
160
+ t.setTime(+v);
161
+ const year = y(t);
162
+ return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));
163
+ };
164
+ }
165
+
166
+ function getUnit(f, inv, step, phase) {
167
+ const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);
168
+ return inv ? (d, y) => inv(u(d, y), y) : u;
169
+ } // returns the day of the year based on week number, day of week,
170
+ // and the day of the week for the first day of the year
171
+
172
+
173
+ function weekday(week, day, firstDay) {
174
+ return day + week * 7 - (firstDay + 6) % 7;
175
+ } // -- LOCAL TIME --
176
+
177
+
178
+ const localGet = {
179
+ [YEAR]: d => d.getFullYear(),
180
+ [QUARTER]: d => Math.floor(d.getMonth() / 3),
181
+ [MONTH]: d => d.getMonth(),
182
+ [DATE]: d => d.getDate(),
183
+ [HOURS]: d => d.getHours(),
184
+ [MINUTES]: d => d.getMinutes(),
185
+ [SECONDS]: d => d.getSeconds(),
186
+ [MILLISECONDS]: d => d.getMilliseconds(),
187
+ [DAYOFYEAR]: d => localDayOfYear(d),
188
+ [WEEK]: d => localWeekNum(d),
189
+ [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),
190
+ [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))
191
+ };
192
+ const localInv = {
193
+ [QUARTER]: q => 3 * q,
194
+ [WEEK]: (w, y) => weekday(w, 0, localFirst(y))
195
+ };
196
+ function timeFloor(units, step) {
197
+ return floor(units, step || 1, localGet, localInv, localDate);
198
+ } // -- UTC TIME --
199
+
200
+ const utcGet = {
201
+ [YEAR]: d => d.getUTCFullYear(),
202
+ [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),
203
+ [MONTH]: d => d.getUTCMonth(),
204
+ [DATE]: d => d.getUTCDate(),
205
+ [HOURS]: d => d.getUTCHours(),
206
+ [MINUTES]: d => d.getUTCMinutes(),
207
+ [SECONDS]: d => d.getUTCSeconds(),
208
+ [MILLISECONDS]: d => d.getUTCMilliseconds(),
209
+ [DAYOFYEAR]: d => utcDayOfYear(d),
210
+ [WEEK]: d => utcWeekNum(d),
211
+ [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),
212
+ [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))
213
+ };
214
+ const utcInv = {
215
+ [QUARTER]: q => 3 * q,
216
+ [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))
217
+ };
218
+ function utcFloor(units, step) {
219
+ return floor(units, step || 1, utcGet, utcInv, utcDate);
220
+ }
221
+
222
+ const timeIntervals = {
223
+ [YEAR]: timeYear,
224
+ [QUARTER]: timeMonth.every(3),
225
+ [MONTH]: timeMonth,
226
+ [WEEK]: timeWeek,
227
+ [DATE]: timeDay,
228
+ [DAY]: timeDay,
229
+ [DAYOFYEAR]: timeDay,
230
+ [HOURS]: timeHour,
231
+ [MINUTES]: timeMinute,
232
+ [SECONDS]: timeSecond,
233
+ [MILLISECONDS]: timeMillisecond
234
+ };
235
+ const utcIntervals = {
236
+ [YEAR]: utcYear,
237
+ [QUARTER]: utcMonth.every(3),
238
+ [MONTH]: utcMonth,
239
+ [WEEK]: utcWeek,
240
+ [DATE]: utcDay,
241
+ [DAY]: utcDay,
242
+ [DAYOFYEAR]: utcDay,
243
+ [HOURS]: utcHour,
244
+ [MINUTES]: utcMinute,
245
+ [SECONDS]: utcSecond,
246
+ [MILLISECONDS]: utcMillisecond
247
+ };
248
+ function timeInterval(unit) {
249
+ return timeIntervals[unit];
250
+ }
251
+ function utcInterval(unit) {
252
+ return utcIntervals[unit];
253
+ }
254
+
255
+ function offset(ival, date, step) {
256
+ return ival ? ival.offset(date, step) : undefined;
257
+ }
258
+
259
+ function timeOffset(unit, date, step) {
260
+ return offset(timeInterval(unit), date, step);
261
+ }
262
+ function utcOffset(unit, date, step) {
263
+ return offset(utcInterval(unit), date, step);
264
+ }
265
+
266
+ function sequence(ival, start, stop, step) {
267
+ return ival ? ival.range(start, stop, step) : undefined;
268
+ }
269
+
270
+ function timeSequence(unit, start, stop, step) {
271
+ return sequence(timeInterval(unit), start, stop, step);
272
+ }
273
+ function utcSequence(unit, start, stop, step) {
274
+ return sequence(utcInterval(unit), start, stop, step);
275
+ }
276
+
277
+ const durationSecond = 1000,
278
+ durationMinute = durationSecond * 60,
279
+ durationHour = durationMinute * 60,
280
+ durationDay = durationHour * 24,
281
+ durationWeek = durationDay * 7,
282
+ durationMonth = durationDay * 30,
283
+ durationYear = durationDay * 365;
284
+ const Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],
285
+ Seconds = Milli.slice(0, -1),
286
+ Minutes = Seconds.slice(0, -1),
287
+ Hours = Minutes.slice(0, -1),
288
+ Day = Hours.slice(0, -1),
289
+ Week = [YEAR, WEEK],
290
+ Month = [YEAR, MONTH],
291
+ Year = [YEAR];
292
+ const intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];
293
+ function bin (opt) {
294
+ const ext = opt.extent,
295
+ max = opt.maxbins || 40,
296
+ target = Math.abs(span(ext)) / max;
297
+ let i = bisector(i => i[2]).right(intervals, target),
298
+ units,
299
+ step;
300
+
301
+ if (i === intervals.length) {
302
+ units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);
303
+ } else if (i) {
304
+ i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];
305
+ units = i[0];
306
+ step = i[1];
307
+ } else {
308
+ units = Milli;
309
+ step = Math.max(tickStep(ext[0], ext[1], max), 1);
310
+ }
311
+
312
+ return {
313
+ units,
314
+ step
315
+ };
316
+ }
317
+
318
+ export { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vega-time",
3
- "version": "2.0.2",
3
+ "version": "2.1.0",
4
4
  "description": "JavaScript date/time utilities for Vega.",
5
5
  "keywords": [
6
6
  "vega",
@@ -11,23 +11,20 @@
11
11
  "license": "BSD-3-Clause",
12
12
  "author": "Jeffrey Heer (http://idl.cs.washington.edu)",
13
13
  "main": "build/vega-time.js",
14
- "module": "index",
15
- "types": "index.d.ts",
14
+ "module": "build/vega-time.module.js",
15
+ "unpkg": "build/vega-time.min.js",
16
16
  "repository": "vega/vega",
17
17
  "scripts": {
18
- "rollup": "rollup -g d3-array:d3,d3-time:d3,vega-util:vega -f umd -n vega -o build/vega-time.js -- index.js",
19
- "prebuild": "rimraf build && mkdir build",
20
- "build": "yarn rollup",
21
- "postbuild": "terser build/vega-time.js -c -m -o build/vega-time.min.js",
22
- "pretest": "yarn prebuild && yarn rollup",
18
+ "prebuild": "rimraf build",
19
+ "build": "rollup -c",
20
+ "pretest": "yarn build --config-test",
23
21
  "test": "tape 'test/**/*-test.js'",
24
- "prepublishOnly": "yarn test && yarn build",
25
- "postpublish": "git push && git push --tags"
22
+ "prepublishOnly": "yarn test && yarn build"
26
23
  },
27
24
  "dependencies": {
28
- "d3-array": "^2.5.1",
29
- "d3-time": "^1.1.0",
30
- "vega-util": "^1.15.0"
25
+ "d3-array": "^3.1.1",
26
+ "d3-time": "^3.0.0",
27
+ "vega-util": "^1.15.2"
31
28
  },
32
- "gitHead": "28db83352e43e321dfe55fc5cb6489b211e45662"
29
+ "gitHead": "9a3faca4395cade9ecdfde90af98f1c53e9916b2"
33
30
  }
@@ -0,0 +1 @@
1
+ export { default } from '../../rollup.config';