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 +1 -1
- package/README.md +1 -1
- package/build/vega-time.js +444 -172
- package/build/vega-time.min.js +2 -1
- package/build/vega-time.min.js.map +1 -0
- package/build/vega-time.module.js +318 -0
- package/package.json +11 -14
- package/rollup.config.js +1 -0
package/LICENSE
CHANGED
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
|
|
package/build/vega-time.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vega-util')
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', 'vega-util'
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vega = {}, global.vega
|
|
5
|
-
}(this, (function (exports, vegaUtil
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
443
|
+
return timeDay.count(localYear(d.getFullYear()) - 1, d);
|
|
124
444
|
}
|
|
125
|
-
|
|
126
445
|
function localWeekNum(d) {
|
|
127
|
-
return
|
|
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
|
|
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
|
|
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
|
-
|
|
180
|
-
|
|
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
|
-
|
|
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]:
|
|
224
|
-
[QUARTER]:
|
|
225
|
-
[MONTH]:
|
|
226
|
-
[DATE]:
|
|
227
|
-
[HOURS]:
|
|
228
|
-
[MINUTES]:
|
|
229
|
-
[SECONDS]:
|
|
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]:
|
|
232
|
-
[WEEK]:
|
|
233
|
-
[WEEK + DAY]:
|
|
234
|
-
[DAY]:
|
|
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]:
|
|
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]:
|
|
250
|
-
[QUARTER]:
|
|
251
|
-
[MONTH]:
|
|
252
|
-
[DATE]:
|
|
253
|
-
[HOURS]:
|
|
254
|
-
[MINUTES]:
|
|
255
|
-
[SECONDS]:
|
|
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]:
|
|
258
|
-
[WEEK]:
|
|
259
|
-
[DAY]:
|
|
260
|
-
[WEEK + DAY]:
|
|
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]:
|
|
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]:
|
|
274
|
-
[QUARTER]:
|
|
275
|
-
[MONTH]:
|
|
276
|
-
[WEEK]:
|
|
277
|
-
[DATE]:
|
|
278
|
-
[DAY]:
|
|
279
|
-
[DAYOFYEAR]:
|
|
280
|
-
[HOURS]:
|
|
281
|
-
[MINUTES]:
|
|
282
|
-
[SECONDS]:
|
|
283
|
-
[MILLISECONDS]:
|
|
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]:
|
|
288
|
-
[QUARTER]:
|
|
289
|
-
[MONTH]:
|
|
290
|
-
[WEEK]:
|
|
291
|
-
[DATE]:
|
|
292
|
-
[DAY]:
|
|
293
|
-
[DAYOFYEAR]:
|
|
294
|
-
[HOURS]:
|
|
295
|
-
[MINUTES]:
|
|
296
|
-
[SECONDS]:
|
|
297
|
-
[MILLISECONDS]:
|
|
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
|
|
344
|
-
Day
|
|
345
|
-
Week
|
|
346
|
-
Month
|
|
347
|
-
Year
|
|
348
|
-
|
|
349
|
-
|
|
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
|
-
|
|
375
|
-
|
|
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(
|
|
655
|
+
step = Math.max(tickStep(ext[0], ext[1], max), 1);
|
|
387
656
|
}
|
|
388
657
|
|
|
389
|
-
return {
|
|
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
|
+
}));
|
package/build/vega-time.min.js
CHANGED
|
@@ -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
|
|
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": "
|
|
15
|
-
"
|
|
14
|
+
"module": "build/vega-time.module.js",
|
|
15
|
+
"unpkg": "build/vega-time.min.js",
|
|
16
16
|
"repository": "vega/vega",
|
|
17
17
|
"scripts": {
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
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": "^
|
|
29
|
-
"d3-time": "^
|
|
30
|
-
"vega-util": "^1.15.
|
|
25
|
+
"d3-array": "^3.1.1",
|
|
26
|
+
"d3-time": "^3.0.0",
|
|
27
|
+
"vega-util": "^1.15.2"
|
|
31
28
|
},
|
|
32
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "9a3faca4395cade9ecdfde90af98f1c53e9916b2"
|
|
33
30
|
}
|
package/rollup.config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '../../rollup.config';
|