Socket
Socket
Sign inDemoInstall

uplot

Package Overview
Dependencies
Maintainers
1
Versions
62
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

uplot - npm Package Compare versions

Comparing version 1.0.8 to 1.0.9

dist/uPlot.d.ts

377

dist/uPlot.cjs.js

@@ -7,3 +7,3 @@ /**

* A small, fast chart for time series, lines, areas, ohlc & bars
* https://github.com/leeoniya/uPlot (v1.0.8)
* https://github.com/leeoniya/uPlot (v1.0.9)
*/

@@ -522,5 +522,4 @@

function timeAxisVals(tzDate, stamps) {
return function (self, splits, space) {
var incr = round3(splits[1] - splits[0]);
var s = stamps.find(function (e) { return incr >= e[0]; });
return function (self, splits, space, incr) {
var s = stamps.find(function (e) { return incr >= e[0]; }) || stamps[stamps.length - 1];

@@ -676,2 +675,6 @@ // these track boundaries when a full label is needed again

y: false,
dist: 0,
uni: null,
_x: false,
_y: false,
},

@@ -739,3 +742,3 @@

function numAxisVals(self, splits, space) {
function numAxisVals(self, splits, space, incr) {
return splits.map(fmtNum.format);

@@ -780,3 +783,4 @@ }

function ptDia(width, mult) {
return max(round3(5 * mult), round3(width * mult) * 2 - 1);
var dia = 3 + (width || 1) * 2;
return round3(dia * mult);
}

@@ -852,4 +856,5 @@

function setDefaults(d, xo, yo) {
return [d[0], d[1]].concat(d.slice(2)).map(function (o, i) { return setDefault(o, i, xo, yo); });
function setDefaults(d, xo, yo, initY) {
var d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));
return d2.map(function (o, i) { return setDefault(o, i, xo, yo); });
}

@@ -947,5 +952,5 @@

var series = setDefaults(opts.series, xSeriesOpts, ySeriesOpts);
var axes = setDefaults(opts.axes || [], xAxisOpts, yAxisOpts);
var scales = (opts.scales = opts.scales || {});
var series = self.series = setDefaults(opts.series || [], xSeriesOpts, ySeriesOpts, false);
var axes = self.axes = setDefaults(opts.axes || [], xAxisOpts, yAxisOpts, true);
var scales = self.scales = (opts.scales = opts.scales || {});

@@ -965,6 +970,2 @@ var gutters = assign({

self.series = series;
self.axes = axes;
self.scales = scales;
var pendScales = {};

@@ -991,3 +992,3 @@

var getMultiVals = series[1].values;
var getMultiVals = series[1] ? series[1].values : null;
multiValLegend = getMultiVals != null;

@@ -1193,2 +1194,5 @@

function setData(_data, _resetScales) {
_data = _data || [];
_data[0] = _data[0] || [];
self.data = _data;

@@ -1512,3 +1516,3 @@ data = _data.slice();

var width = round3(s[WIDTH] * pxRatio);
var width = round3(p.width * pxRatio);
var offset = (width % 2) / 2;

@@ -1898,3 +1902,9 @@ var isStroked = p.width > 0;

// tick labels
var values = axis.values(self, scale.distr == 2 ? splits.map(function (i) { return data0[i]; }) : splits, space); // BOO this assumes a specific data/series
// BOO this assumes a specific data/series
var values = axis.values(
self,
scale.distr == 2 ? splits.map(function (i) { return data0[i]; }) : splits,
space,
scale.distr == 2 ? data0[splits[1]] - data0[splits[0]] : incr
);

@@ -2048,9 +2058,16 @@ // rotating of labels only supported on bottom x axis

if (sc.from == null) {
// prevent setting a temporal x scale too small since Date objects cannot advance ticks smaller than 1ms
if ( key == xScaleKey && sc.time && axes[0].show && opts.max > opts.min) {
// since scales and axes are loosly coupled, we have to make some assumptions here :(
var incr = getIncrSpace(axes[0], opts.min, opts.max, plotWidCss)[0];
if (key == xScaleKey) {
if (sc.distr == 2) {
opts.min = closestIdx(opts.min, data[0]);
opts.max = closestIdx(opts.max, data[0]);
}
if (incr < 1e-3)
{ return; }
// prevent setting a temporal x scale too small since Date objects cannot advance ticks smaller than 1ms
if ( sc.time && axes[0].show && opts.max > opts.min) {
// since scales and axes are loosly coupled, we have to make some assumptions here :(
var incr = getIncrSpace(axes[0], opts.min, opts.max, plotWidCss)[0];
if (incr < 1e-3)
{ return; }
}
}

@@ -2088,2 +2105,5 @@

var dragX = drag.x;
var dragY = drag.y;
if ( cursor.show) {

@@ -2221,5 +2241,11 @@ var c = "cursor-";

function scaleValueAtPos(pos, scale) {
var dim = scale == xScaleKey ? plotWidCss : plotHgtCss;
var pct = clamp(pos / dim, 0, 1);
var dim = plotWidCss;
if (scale != xScaleKey) {
dim = plotHgtCss;
pos = dim - pos;
}
var pct = pos / dim;
var sc = scales[scale];

@@ -2235,4 +2261,5 @@ var d = sc.max - sc.min;

self.valToIdx = function (val) { return closestIdx(val, data[0]); };
self.posToIdx = closestIdxFromXpos;
self.posToVal = function (pos, scale) { return scaleValueAtPos(scale == xScaleKey ? pos : plotHgtCss - pos, scale); };
self.posToVal = scaleValueAtPos;
self.valToPos = function (val, scale, can) { return (

@@ -2277,3 +2304,3 @@ scale == xScaleKey ?

function updateCursor(ts) {
function updateCursor(ts, src) {
if (inBatch) {

@@ -2295,4 +2322,8 @@ shouldUpdateCursor = true;

// when zooming to an x scale range between datapoints the binary search
// for nearest min/max indices results in this condition. cheap hack :D
var noDataInRange = i0 > i1;
// if cursor hidden, hide points & clear legend vals
if (mouseLeft1 < 0 || dataLen == 0) {
if (mouseLeft1 < 0 || dataLen == 0 || noDataInRange) {
idx = null;

@@ -2346,5 +2377,5 @@

var src = i$1 == 0 && xScaleDistr == 2 ? data0 : data[i$1];
var src$1 = i$1 == 0 && xScaleDistr == 2 ? data0 : data[i$1];
var vals = multiValLegend ? s.values(self, i$1, idx) : {_: s.value(self, src[idx], i$1, idx)};
var vals = multiValLegend ? s.values(self, i$1, idx) : {_: s.value(self, src$1[idx], i$1, idx)};

@@ -2360,19 +2391,113 @@ var j$1 = 0;

// nit: cursor.drag.setSelect is assumed always true
if (mouseLeft1 >= 0 && select.show && dragging) {
// setSelect should not be triggered on move events
if (drag.x) {
var minX = min(mouseLeft0, mouseLeft1);
var maxX = max(mouseLeft0, mouseLeft1);
setStylePx(selectDiv, LEFT, select[LEFT] = minX);
setStylePx(selectDiv, WIDTH, select[WIDTH] = maxX - minX);
if (select.show && dragging) {
var dx = abs(mouseLeft1 - mouseLeft0);
var dy = abs(mouseTop1 - mouseTop0);
if (src != null) {
var ref = syncOpts.scales;
var xKey = ref[0];
var yKey = ref[1];
// match the dragX/dragY implicitness/explicitness of src
var sdrag = src.cursor.drag;
dragX = sdrag._x;
dragY = sdrag._y;
if (xKey) {
var sc = scales[xKey];
var srcLeft = src.posToVal(src.select[LEFT], xKey);
var srcRight = src.posToVal(src.select[LEFT] + src.select[WIDTH], xKey);
select[LEFT] = getXPos(srcLeft, sc, plotWidCss, 0);
select[WIDTH] = abs(select[LEFT] - getXPos(srcRight, sc, plotWidCss, 0));
setStylePx(selectDiv, LEFT, select[LEFT]);
setStylePx(selectDiv, WIDTH, select[WIDTH]);
if (!yKey) {
setStylePx(selectDiv, TOP, select[TOP] = 0);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = plotHgtCss);
}
}
if (yKey) {
var sc$1 = scales[yKey];
var srcTop = src.posToVal(src.select[TOP], yKey);
var srcBottom = src.posToVal(src.select[TOP] + src.select[HEIGHT], yKey);
select[TOP] = getYPos(srcTop, sc$1, plotHgtCss, 0);
select[HEIGHT] = abs(select[TOP] - getYPos(srcBottom, sc$1, plotHgtCss, 0));
setStylePx(selectDiv, TOP, select[TOP]);
setStylePx(selectDiv, HEIGHT, select[HEIGHT]);
if (!xKey) {
setStylePx(selectDiv, LEFT, select[LEFT] = 0);
setStylePx(selectDiv, WIDTH, select[WIDTH] = plotWidCss);
}
}
}
else {
dragX = drag.x && dx >= drag.dist;
dragY = drag.y && dy >= drag.dist;
if (drag.y) {
var minY = min(mouseTop0, mouseTop1);
var maxY = max(mouseTop0, mouseTop1);
setStylePx(selectDiv, TOP, select[TOP] = minY);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = maxY - minY);
var uni = drag.uni;
if (uni != null) {
// only calc drag status if they pass the dist thresh
if (dragX && dragY) {
dragX = dx >= uni;
dragY = dy >= uni;
// force unidirectionality when both are under uni limit
if (!dragX && !dragY) {
if (dy > dx)
{ dragY = true; }
else
{ dragX = true; }
}
}
}
else if (drag.x && drag.y && (dragX || dragY))
// if omni with no uni then both dragX / dragY should be true if either is true
{ dragX = dragY = true; }
if (dragX) {
var minX = min(mouseLeft0, mouseLeft1);
setStylePx(selectDiv, LEFT, select[LEFT] = minX);
setStylePx(selectDiv, WIDTH, select[WIDTH] = dx);
if (!dragY) {
setStylePx(selectDiv, TOP, select[TOP] = 0);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = plotHgtCss);
}
}
if (dragY) {
var minY = min(mouseTop0, mouseTop1);
setStylePx(selectDiv, TOP, select[TOP] = minY);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = dy);
if (!dragX) {
setStylePx(selectDiv, LEFT, select[LEFT] = 0);
setStylePx(selectDiv, WIDTH, select[WIDTH] = plotWidCss);
}
}
if (!dragX && !dragY) {
// the drag didn't pass the dist requirement
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = 0);
setStylePx(selectDiv, WIDTH, select[WIDTH] = 0);
}
}
}
cursor.idx = idx;
cursor.left = mouseLeft1;
cursor.top = mouseTop1;
drag._x = dragX;
drag._y = dragY;
// if ts is present, means we're implicitly syncing own cursor as a result of debounced rAF

@@ -2400,6 +2525,2 @@ if (ts != null) {

cursor.idx = idx;
cursor.left = mouseLeft1;
cursor.top = mouseTop1;
ready && fire("setCursor");

@@ -2425,3 +2546,3 @@ }

else
{ updateCursor(); }
{ updateCursor(null, src); }
}

@@ -2435,4 +2556,21 @@

else {
_x = plotWidCss * (_x/_w);
_y = plotHgtCss * (_y/_h);
if (_x < 0 || _y < 0) {
mouseLeft1 = -10;
mouseTop1 = -10;
return;
}
var ref = syncOpts.scales;
var xKey = ref[0];
var yKey = ref[1];
if (xKey != null)
{ _x = getXPos(src.posToVal(_x, xKey), scales[xKey], plotWidCss, 0); }
else
{ _x = plotWidCss * (_x/_w); }
if (yKey != null)
{ _y = getYPos(src.posToVal(_y, yKey), scales[yKey], plotHgtCss, 0); }
else
{ _y = plotHgtCss * (_y/_h); }
}

@@ -2460,4 +2598,4 @@

setSelect({
width: !drag.x ? plotWidCss : 0,
height: !drag.y ? plotHgtCss : 0,
width: 0,
height: 0,
}, false);

@@ -2467,10 +2605,8 @@ }

function mouseDown(e, src, _x, _y, _w, _h, _i) {
if (e == null || filtMouse(e)) {
if (src != null || filtMouse(e)) {
dragging = true;
dragX = dragY = drag._x = drag._y = false;
cacheMouse(e, src, _x, _y, _w, _h, _i, true, true);
cacheMouse(e, src, _x, _y, _w, _h, _i, true, false);
if (select.show && (drag.x || drag.y))
{ hideSelect(); }
if (e != null) {

@@ -2484,37 +2620,40 @@ on(mouseup, doc, mouseUp);

function mouseUp(e, src, _x, _y, _w, _h, _i) {
if ((e == null || filtMouse(e))) {
dragging = false;
if (src != null || filtMouse(e)) {
dragging = drag._x = drag._y = false;
cacheMouse(e, src, _x, _y, _w, _h, _i, false, true);
if (mouseLeft1 != mouseLeft0 || mouseTop1 != mouseTop0) {
setSelect(select);
var hasSelect = select[WIDTH] > 0 || select[HEIGHT] > 0;
if (drag.setScale) {
batch(function () {
if (drag.x) {
var fn = xScaleDistr == 2 ? closestIdxFromXpos : scaleValueAtPos;
hasSelect && setSelect(select);
_setScale(xScaleKey,
fn(select[LEFT], xScaleKey),
fn(select[LEFT] + select[WIDTH], xScaleKey)
);
}
if (drag.setScale && hasSelect) {
// if (syncKey != null) {
// dragX = drag.x;
// dragY = drag.y;
// }
if (drag.y) {
for (var k in scales) {
var sc = scales[k];
batch(function () {
if (dragX) {
_setScale(xScaleKey,
scaleValueAtPos(select[LEFT], xScaleKey),
scaleValueAtPos(select[LEFT] + select[WIDTH], xScaleKey)
);
}
if (k != xScaleKey && sc.from == null) {
_setScale(k,
scaleValueAtPos(plotHgtCss - select[TOP] - select[HEIGHT], k),
scaleValueAtPos(plotHgtCss - select[TOP], k)
);
}
if (dragY) {
for (var k in scales) {
var sc = scales[k];
if (k != xScaleKey && sc.from == null) {
_setScale(k,
scaleValueAtPos(select[TOP] + select[HEIGHT], k),
scaleValueAtPos(select[TOP], k)
);
}
}
});
}
});
hideSelect();
}
hideSelect();
}

@@ -2527,7 +2666,7 @@ else if (cursor.lock) {

}
}
if (e != null) {
off(mouseup, doc, mouseUp);
sync.pub(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);
}
if (e != null) {
off(mouseup, doc, mouseUp);
sync.pub(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);
}

@@ -2537,7 +2676,54 @@ }

function mouseLeave(e, src, _x, _y, _w, _h, _i) {
if (!cursor.locked && !dragging) {
if (!cursor.locked) {
var _dragging = dragging;
if (dragging) {
// handle case when mousemove aren't fired all the way to edges by browser
var snapX = true;
var snapY = true;
var snapProx = 10;
if (dragX && dragY) {
// maybe omni corner snap
snapX = mouseLeft1 <= snapProx || mouseLeft1 >= plotWidCss - snapProx;
snapY = mouseTop1 <= snapProx || mouseTop1 >= plotHgtCss - snapProx;
}
if (dragX && snapX) {
var dLft = mouseLeft1;
var dRgt = plotWidCss - mouseLeft1;
var xMin = min(dLft, dRgt);
if (xMin == dLft)
{ mouseLeft1 = 0; }
if (xMin == dRgt)
{ mouseLeft1 = plotWidCss; }
}
if (dragY && snapY) {
var dTop = mouseTop1;
var dBtm = plotHgtCss - mouseTop1;
var yMin = min(dTop, dBtm);
if (yMin == dTop)
{ mouseTop1 = 0; }
if (yMin == dBtm)
{ mouseTop1 = plotHgtCss; }
}
updateCursor(1);
dragging = false;
}
mouseLeft1 = -10;
mouseTop1 = -10;
// passing a non-null timestamp to force sync/mousemove event
updateCursor(1);
if (_dragging)
{ dragging = _dragging; }
}

@@ -2549,2 +2735,4 @@ }

hideSelect();
if (e != null)

@@ -2571,5 +2759,7 @@ { sync.pub(dblclick, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null); }

on(mouseenter, over, syncRect);
on(mouseleave, over, mouseLeave);
drag.setScale && on(dblclick, over, dblClick);
// this has to be rAF'd so it always fires after the last queued/rAF'd updateCursor
on(mouseleave, over, function (e) { rAF(mouseLeave); });
on(dblclick, over, dblClick);
deb = debounce(syncRect, 100);

@@ -2586,10 +2776,6 @@

var evArg0 = [self];
function fire(evName) {
function fire(evName, a1, a2) {
if (evName in hooks) {
var args2 = evArg0.concat(Array.prototype.slice.call(arguments, 1));
hooks[evName].forEach(function (fn) {
fn.apply(null, args2);
fn.call(null, self, a1, a2);
});

@@ -2607,2 +2793,3 @@ }

setSeries: false,
scales: [xScaleKey, null]
}, cursor.sync);

@@ -2609,0 +2796,0 @@

@@ -7,3 +7,3 @@ /**

* A small, fast chart for time series, lines, areas, ohlc & bars
* https://github.com/leeoniya/uPlot (v1.0.8)
* https://github.com/leeoniya/uPlot (v1.0.9)
*/

@@ -525,5 +525,4 @@

function timeAxisVals(tzDate, stamps) {
return (self, splits, space) => {
let incr = round3(splits[1] - splits[0]);
let s = stamps.find(e => incr >= e[0]);
return (self, splits, space, incr) => {
let s = stamps.find(e => incr >= e[0]) || stamps[stamps.length - 1];

@@ -679,2 +678,6 @@ // these track boundaries when a full label is needed again

y: false,
dist: 0,
uni: null,
_x: false,
_y: false,
},

@@ -742,3 +745,3 @@

function numAxisVals(self, splits, space) {
function numAxisVals(self, splits, space, incr) {
return splits.map(fmtNum.format);

@@ -783,3 +786,4 @@ }

function ptDia(width, mult) {
return max(round3(5 * mult), round3(width * mult) * 2 - 1);
let dia = 3 + (width || 1) * 2;
return round3(dia * mult);
}

@@ -855,4 +859,5 @@

function setDefaults(d, xo, yo) {
return [d[0], d[1]].concat(d.slice(2)).map((o, i) => setDefault(o, i, xo, yo));
function setDefaults(d, xo, yo, initY) {
let d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));
return d2.map((o, i) => setDefault(o, i, xo, yo));
}

@@ -950,5 +955,5 @@

const series = setDefaults(opts.series, xSeriesOpts, ySeriesOpts);
const axes = setDefaults(opts.axes || [], xAxisOpts, yAxisOpts);
const scales = (opts.scales = opts.scales || {});
const series = self.series = setDefaults(opts.series || [], xSeriesOpts, ySeriesOpts, false);
const axes = self.axes = setDefaults(opts.axes || [], xAxisOpts, yAxisOpts, true);
const scales = self.scales = (opts.scales = opts.scales || {});

@@ -968,6 +973,2 @@ const gutters = assign({

self.series = series;
self.axes = axes;
self.scales = scales;
const pendScales = {};

@@ -994,3 +995,3 @@

const getMultiVals = series[1].values;
const getMultiVals = series[1] ? series[1].values : null;
multiValLegend = getMultiVals != null;

@@ -1196,2 +1197,5 @@

function setData(_data, _resetScales) {
_data = _data || [];
_data[0] = _data[0] || [];
self.data = _data;

@@ -1511,3 +1515,3 @@ data = _data.slice();

const width = round3(s[WIDTH] * pxRatio);
const width = round3(p.width * pxRatio);
const offset = (width % 2) / 2;

@@ -1890,3 +1894,9 @@ const isStroked = p.width > 0;

// tick labels
let values = axis.values(self, scale.distr == 2 ? splits.map(i => data0[i]) : splits, space); // BOO this assumes a specific data/series
// BOO this assumes a specific data/series
let values = axis.values(
self,
scale.distr == 2 ? splits.map(i => data0[i]) : splits,
space,
scale.distr == 2 ? data0[splits[1]] - data0[splits[0]] : incr,
);

@@ -2040,9 +2050,16 @@ // rotating of labels only supported on bottom x axis

if (sc.from == null) {
// prevent setting a temporal x scale too small since Date objects cannot advance ticks smaller than 1ms
if ( key == xScaleKey && sc.time && axes[0].show && opts.max > opts.min) {
// since scales and axes are loosly coupled, we have to make some assumptions here :(
let incr = getIncrSpace(axes[0], opts.min, opts.max, plotWidCss)[0];
if (key == xScaleKey) {
if (sc.distr == 2) {
opts.min = closestIdx(opts.min, data[0]);
opts.max = closestIdx(opts.max, data[0]);
}
if (incr < 1e-3)
return;
// prevent setting a temporal x scale too small since Date objects cannot advance ticks smaller than 1ms
if ( sc.time && axes[0].show && opts.max > opts.min) {
// since scales and axes are loosly coupled, we have to make some assumptions here :(
let incr = getIncrSpace(axes[0], opts.min, opts.max, plotWidCss)[0];
if (incr < 1e-3)
return;
}
}

@@ -2080,2 +2097,5 @@

let dragX = drag.x;
let dragY = drag.y;
if ( cursor.show) {

@@ -2213,5 +2233,11 @@ let c = "cursor-";

function scaleValueAtPos(pos, scale) {
let dim = scale == xScaleKey ? plotWidCss : plotHgtCss;
let pct = clamp(pos / dim, 0, 1);
let dim = plotWidCss;
if (scale != xScaleKey) {
dim = plotHgtCss;
pos = dim - pos;
}
let pct = pos / dim;
let sc = scales[scale];

@@ -2227,4 +2253,5 @@ let d = sc.max - sc.min;

self.valToIdx = val => closestIdx(val, data[0]);
self.posToIdx = closestIdxFromXpos;
self.posToVal = (pos, scale) => scaleValueAtPos(scale == xScaleKey ? pos : plotHgtCss - pos, scale);
self.posToVal = scaleValueAtPos;
self.valToPos = (val, scale, can) => (

@@ -2269,3 +2296,3 @@ scale == xScaleKey ?

function updateCursor(ts) {
function updateCursor(ts, src) {
if (inBatch) {

@@ -2287,4 +2314,8 @@ shouldUpdateCursor = true;

// when zooming to an x scale range between datapoints the binary search
// for nearest min/max indices results in this condition. cheap hack :D
let noDataInRange = i0 > i1;
// if cursor hidden, hide points & clear legend vals
if (mouseLeft1 < 0 || dataLen == 0) {
if (mouseLeft1 < 0 || dataLen == 0 || noDataInRange) {
idx = null;

@@ -2351,19 +2382,111 @@

// nit: cursor.drag.setSelect is assumed always true
if (mouseLeft1 >= 0 && select.show && dragging) {
// setSelect should not be triggered on move events
if (drag.x) {
let minX = min(mouseLeft0, mouseLeft1);
let maxX = max(mouseLeft0, mouseLeft1);
setStylePx(selectDiv, LEFT, select[LEFT] = minX);
setStylePx(selectDiv, WIDTH, select[WIDTH] = maxX - minX);
if (select.show && dragging) {
let dx = abs(mouseLeft1 - mouseLeft0);
let dy = abs(mouseTop1 - mouseTop0);
if (src != null) {
let [xKey, yKey] = syncOpts.scales;
// match the dragX/dragY implicitness/explicitness of src
let sdrag = src.cursor.drag;
dragX = sdrag._x;
dragY = sdrag._y;
if (xKey) {
let sc = scales[xKey];
let srcLeft = src.posToVal(src.select[LEFT], xKey);
let srcRight = src.posToVal(src.select[LEFT] + src.select[WIDTH], xKey);
select[LEFT] = getXPos(srcLeft, sc, plotWidCss, 0);
select[WIDTH] = abs(select[LEFT] - getXPos(srcRight, sc, plotWidCss, 0));
setStylePx(selectDiv, LEFT, select[LEFT]);
setStylePx(selectDiv, WIDTH, select[WIDTH]);
if (!yKey) {
setStylePx(selectDiv, TOP, select[TOP] = 0);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = plotHgtCss);
}
}
if (yKey) {
let sc = scales[yKey];
let srcTop = src.posToVal(src.select[TOP], yKey);
let srcBottom = src.posToVal(src.select[TOP] + src.select[HEIGHT], yKey);
select[TOP] = getYPos(srcTop, sc, plotHgtCss, 0);
select[HEIGHT] = abs(select[TOP] - getYPos(srcBottom, sc, plotHgtCss, 0));
setStylePx(selectDiv, TOP, select[TOP]);
setStylePx(selectDiv, HEIGHT, select[HEIGHT]);
if (!xKey) {
setStylePx(selectDiv, LEFT, select[LEFT] = 0);
setStylePx(selectDiv, WIDTH, select[WIDTH] = plotWidCss);
}
}
}
else {
dragX = drag.x && dx >= drag.dist;
dragY = drag.y && dy >= drag.dist;
if (drag.y) {
let minY = min(mouseTop0, mouseTop1);
let maxY = max(mouseTop0, mouseTop1);
setStylePx(selectDiv, TOP, select[TOP] = minY);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = maxY - minY);
let uni = drag.uni;
if (uni != null) {
// only calc drag status if they pass the dist thresh
if (dragX && dragY) {
dragX = dx >= uni;
dragY = dy >= uni;
// force unidirectionality when both are under uni limit
if (!dragX && !dragY) {
if (dy > dx)
dragY = true;
else
dragX = true;
}
}
}
else if (drag.x && drag.y && (dragX || dragY))
// if omni with no uni then both dragX / dragY should be true if either is true
dragX = dragY = true;
if (dragX) {
let minX = min(mouseLeft0, mouseLeft1);
setStylePx(selectDiv, LEFT, select[LEFT] = minX);
setStylePx(selectDiv, WIDTH, select[WIDTH] = dx);
if (!dragY) {
setStylePx(selectDiv, TOP, select[TOP] = 0);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = plotHgtCss);
}
}
if (dragY) {
let minY = min(mouseTop0, mouseTop1);
setStylePx(selectDiv, TOP, select[TOP] = minY);
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = dy);
if (!dragX) {
setStylePx(selectDiv, LEFT, select[LEFT] = 0);
setStylePx(selectDiv, WIDTH, select[WIDTH] = plotWidCss);
}
}
if (!dragX && !dragY) {
// the drag didn't pass the dist requirement
setStylePx(selectDiv, HEIGHT, select[HEIGHT] = 0);
setStylePx(selectDiv, WIDTH, select[WIDTH] = 0);
}
}
}
cursor.idx = idx;
cursor.left = mouseLeft1;
cursor.top = mouseTop1;
drag._x = dragX;
drag._y = dragY;
// if ts is present, means we're implicitly syncing own cursor as a result of debounced rAF

@@ -2391,6 +2514,2 @@ if (ts != null) {

cursor.idx = idx;
cursor.left = mouseLeft1;
cursor.top = mouseTop1;
ready && fire("setCursor");

@@ -2416,3 +2535,3 @@ }

else
updateCursor();
updateCursor(null, src);
}

@@ -2426,4 +2545,19 @@

else {
_x = plotWidCss * (_x/_w);
_y = plotHgtCss * (_y/_h);
if (_x < 0 || _y < 0) {
mouseLeft1 = -10;
mouseTop1 = -10;
return;
}
let [xKey, yKey] = syncOpts.scales;
if (xKey != null)
_x = getXPos(src.posToVal(_x, xKey), scales[xKey], plotWidCss, 0);
else
_x = plotWidCss * (_x/_w);
if (yKey != null)
_y = getYPos(src.posToVal(_y, yKey), scales[yKey], plotHgtCss, 0);
else
_y = plotHgtCss * (_y/_h);
}

@@ -2451,4 +2585,4 @@

setSelect({
width: !drag.x ? plotWidCss : 0,
height: !drag.y ? plotHgtCss : 0,
width: 0,
height: 0,
}, false);

@@ -2458,10 +2592,8 @@ }

function mouseDown(e, src, _x, _y, _w, _h, _i) {
if (e == null || filtMouse(e)) {
if (src != null || filtMouse(e)) {
dragging = true;
dragX = dragY = drag._x = drag._y = false;
cacheMouse(e, src, _x, _y, _w, _h, _i, true, true);
cacheMouse(e, src, _x, _y, _w, _h, _i, true, false);
if (select.show && (drag.x || drag.y))
hideSelect();
if (e != null) {

@@ -2475,37 +2607,40 @@ on(mouseup, doc, mouseUp);

function mouseUp(e, src, _x, _y, _w, _h, _i) {
if ((e == null || filtMouse(e))) {
dragging = false;
if (src != null || filtMouse(e)) {
dragging = drag._x = drag._y = false;
cacheMouse(e, src, _x, _y, _w, _h, _i, false, true);
if (mouseLeft1 != mouseLeft0 || mouseTop1 != mouseTop0) {
setSelect(select);
let hasSelect = select[WIDTH] > 0 || select[HEIGHT] > 0;
if (drag.setScale) {
batch(() => {
if (drag.x) {
let fn = xScaleDistr == 2 ? closestIdxFromXpos : scaleValueAtPos;
hasSelect && setSelect(select);
_setScale(xScaleKey,
fn(select[LEFT], xScaleKey),
fn(select[LEFT] + select[WIDTH], xScaleKey),
);
}
if (drag.setScale && hasSelect) {
// if (syncKey != null) {
// dragX = drag.x;
// dragY = drag.y;
// }
if (drag.y) {
for (let k in scales) {
let sc = scales[k];
batch(() => {
if (dragX) {
_setScale(xScaleKey,
scaleValueAtPos(select[LEFT], xScaleKey),
scaleValueAtPos(select[LEFT] + select[WIDTH], xScaleKey)
);
}
if (k != xScaleKey && sc.from == null) {
_setScale(k,
scaleValueAtPos(plotHgtCss - select[TOP] - select[HEIGHT], k),
scaleValueAtPos(plotHgtCss - select[TOP], k),
);
}
if (dragY) {
for (let k in scales) {
let sc = scales[k];
if (k != xScaleKey && sc.from == null) {
_setScale(k,
scaleValueAtPos(select[TOP] + select[HEIGHT], k),
scaleValueAtPos(select[TOP], k)
);
}
}
});
}
});
hideSelect();
}
hideSelect();
}

@@ -2518,7 +2653,7 @@ else if (cursor.lock) {

}
}
if (e != null) {
off(mouseup, doc, mouseUp);
sync.pub(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);
}
if (e != null) {
off(mouseup, doc, mouseUp);
sync.pub(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);
}

@@ -2528,7 +2663,54 @@ }

function mouseLeave(e, src, _x, _y, _w, _h, _i) {
if (!cursor.locked && !dragging) {
if (!cursor.locked) {
let _dragging = dragging;
if (dragging) {
// handle case when mousemove aren't fired all the way to edges by browser
let snapX = true;
let snapY = true;
let snapProx = 10;
if (dragX && dragY) {
// maybe omni corner snap
snapX = mouseLeft1 <= snapProx || mouseLeft1 >= plotWidCss - snapProx;
snapY = mouseTop1 <= snapProx || mouseTop1 >= plotHgtCss - snapProx;
}
if (dragX && snapX) {
let dLft = mouseLeft1;
let dRgt = plotWidCss - mouseLeft1;
let xMin = min(dLft, dRgt);
if (xMin == dLft)
mouseLeft1 = 0;
if (xMin == dRgt)
mouseLeft1 = plotWidCss;
}
if (dragY && snapY) {
let dTop = mouseTop1;
let dBtm = plotHgtCss - mouseTop1;
let yMin = min(dTop, dBtm);
if (yMin == dTop)
mouseTop1 = 0;
if (yMin == dBtm)
mouseTop1 = plotHgtCss;
}
updateCursor(1);
dragging = false;
}
mouseLeft1 = -10;
mouseTop1 = -10;
// passing a non-null timestamp to force sync/mousemove event
updateCursor(1);
if (_dragging)
dragging = _dragging;
}

@@ -2540,2 +2722,4 @@ }

hideSelect();
if (e != null)

@@ -2562,5 +2746,7 @@ sync.pub(dblclick, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);

on(mouseenter, over, syncRect);
on(mouseleave, over, mouseLeave);
drag.setScale && on(dblclick, over, dblClick);
// this has to be rAF'd so it always fires after the last queued/rAF'd updateCursor
on(mouseleave, over, e => { rAF(mouseLeave); });
on(dblclick, over, dblClick);
deb = debounce(syncRect, 100);

@@ -2577,10 +2763,6 @@

const evArg0 = [self];
function fire(evName) {
function fire(evName, a1, a2) {
if (evName in hooks) {
let args2 = evArg0.concat(Array.prototype.slice.call(arguments, 1));
hooks[evName].forEach(fn => {
fn.apply(null, args2);
fn.call(null, self, a1, a2);
});

@@ -2598,2 +2780,3 @@ }

setSeries: false,
scales: [xScaleKey, null]
}, cursor.sync);

@@ -2600,0 +2783,0 @@

@@ -1,2 +0,2 @@

/*! https://github.com/leeoniya/uPlot (v1.0.8) */
var uPlot=function(){"use strict";function n(n,t,e,r){var i;e=e||0;for(var a=2147483647>=(r=r||t.length-1);r-e>1;)n>t[i=a?e+r>>1:o((e+r)/2)]?e=i:r=i;return n-t[e]>t[r]-n?r:e}function t(n,t,e,i){var a=t-n,l=f(a||r(t)||1),u=o(l),c=s(10,u)*e,v=0==a?c:0,h=x(function(n,t){return o(n/t)*t}(n-v,c)),m=x(d(t+v,c));return i&&(0==a?t>0?(h=0,m=2*t):0>t&&(m=0,h=2*n):(c>m-t&&(m+=c),c>n-h&&(h-=c),n>=0&&0>h&&(h=0),0>=t&&m>0&&(m=0))),[h,m]}var e=Math,r=e.abs,o=e.floor,i=e.round,a=e.ceil,l=e.min,u=e.max,s=e.pow,f=e.log10,c=e.PI;function v(n,t){return i(n/t)*t}function h(n,t,e){return l(u(n,t),e)}function m(n){return"function"==typeof n?n:function(){return n}}function p(n,t){return t}function d(n,t){return a(n/t)*t}function g(n){return i(1e3*n)/1e3}function x(n){return i(1e6*n)/1e6}var w=Array.isArray;function b(n){return"object"==typeof n&&null!==n}function y(n){var t;if(w(n))t=n.map(y);else if(b(n))for(var e in t={},n)t[e]=y(n[e]);else t=n;return t}function M(n){for(var t=arguments,e=1;t.length>e;e++){var r=t[e];for(var o in r)b(n[o])?M(n[o],y(r[o])):n[o]=y(r[o])}return n}var k="width",S="height",Y="left",D=requestAnimationFrame,E=document,T=window,W=devicePixelRatio;function z(n,t){null!=t&&n.classList.add(t)}function A(n,t,e){n.style[t]=e+"px"}function F(n,t,e,r){var o=E.createElement(n);return null!=t&&z(o,t),null!=e&&e.insertBefore(o,r),o}function C(n,t){return F("div",n,t)}function _(n,t,e){n.style.transform="translate("+t+"px,"+e+"px)"}var H={passive:!0};function P(n,t,e){t.addEventListener(n,e,H)}function N(n,t,e){t.removeEventListener(n,e,H)}var L=["January","February","March","April","May","June","July","August","September","October","November","December"],B=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function I(n){return n.slice(0,3)}var R=B.map(I),j=L.map(I),G={MMMM:L,MMM:j,WWWW:B,WWW:R};function J(n){return(10>n?"0":"")+n}var U={YYYY:function(n){return n.getFullYear()},YY:function(n){return(n.getFullYear()+"").slice(2)},MMMM:function(n,t){return t.MMMM[n.getMonth()]},MMM:function(n,t){return t.MMM[n.getMonth()]},MM:function(n){return J(n.getMonth()+1)},M:function(n){return n.getMonth()+1},DD:function(n){return J(n.getDate())},D:function(n){return n.getDate()},WWWW:function(n,t){return t.WWWW[n.getDay()]},WWW:function(n,t){return t.WWW[n.getDay()]},HH:function(n){return J(n.getHours())},H:function(n){return n.getHours()},h:function(n){var t=n.getHours();return 0==t?12:t>12?t-12:t},AA:function(n){return 12>n.getHours()?"AM":"PM"},aa:function(n){return 12>n.getHours()?"am":"pm"},a:function(n){return 12>n.getHours()?"a":"p"},mm:function(n){return J(n.getMinutes())},m:function(n){return n.getMinutes()},ss:function(n){return J(n.getSeconds())},s:function(n){return n.getSeconds()},fff:function(n){return function(n){return(10>n?"00":100>n?"0":"")+n}(n.getMilliseconds())}};function V(n,t){t=t||G;for(var e,r=[],o=/\{([a-z]+)\}|[^{]+/gi;e=o.exec(n);)r.push("{"==e[0][0]?U[e[1]]:e[0]);return function(n){for(var e="",o=0;r.length>o;o++)e+="string"==typeof r[o]?r[o]:r[o](n,t);return e}}function O(n,t,e){for(var o=[],i=n;t>i;i++)for(var a=0;e.length>a;a++){var l=e[a]*s(10,i);o.push(+l.toFixed(r(i)))}return o}var q=[1,2,5],X=O(-12,0,q),Z=O(0,12,q),K=X.concat(Z),Q=3600,$=86400,nn=30*$,tn=365*$,en=[5e-4].concat(O(-3,0,q),[1,5,10,15,30,60,300,600,900,1800,Q,7200,3*Q,4*Q,6*Q,8*Q,43200,$,2*$,3*$,4*$,5*$,6*$,7*$,8*$,9*$,10*$,15*$,nn,2*nn,3*nn,4*nn,6*nn,tn,2*tn,5*tn,10*tn,25*tn,50*tn,100*tn]);function rn(n,t){return n.map((function(n){return[n[0],t(n[1]),n[2],t(n[4]?n[1]+n[3]:n[3])]}))}var on="{M}/{D}",an="\n"+on,ln="{h}:{mm}{aa}",un=[[tn,"{YYYY}",7,"",1],[28*$,"{MMM}",7,"\n{YYYY}",1],[$,on,7,"\n{YYYY}",1],[Q,"{h}{aa}",4,an,1],[60,ln,4,an,1],[1,":{ss}",2,an+" "+ln,1],[.001,":{ss}.{fff}",2,an+" "+ln,1]];function sn(n,t){return function(e,r){var o=g(r[1]-r[0]),i=t.find((function(n){return o>=n[0]})),a=null,l=null,u=null;return r.map((function(t){var e=n(t),r=e.getFullYear(),o=e.getDate(),s=e.getMinutes(),f=r!=a,c=o!=l,v=s!=u;return a=r,l=o,u=s,(7==i[2]&&f||4==i[2]&&c||2==i[2]&&v?i[3]:i[1])(e)}))}}function fn(n,t,e){return new Date(n,t,e)}function cn(n,t){return t(n)}function vn(n,t){return function(e,r){return t(n(r))}}var hn={show:!0,x:!0,y:!0,lock:!1,points:{show:function(n,t){var e=n.series[t],r=C();r.style.background=e.stroke||"#000";var o=Yn(e.width,1),i=(o-1)/-2;return A(r,k,o),A(r,S,o),A(r,"marginLeft",i),A(r,"marginTop",i),r}},drag:{setScale:!0,x:!0,y:!1},focus:{prox:-1},locked:!1,left:-10,top:-10,idx:null},mn={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},pn=M({},mn,{size:10}),dn='12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',gn="bold "+dn,xn={type:"x",show:!0,scale:"x",space:50,gap:5,size:50,labelSize:30,labelFont:gn,side:2,grid:mn,ticks:pn,font:dn,rotate:0},wn={show:!0,scale:"x",min:1/0,max:-1/0,idxs:[]},bn=new Intl.NumberFormat(navigator.language);function yn(n,t){return t.map(bn.format)}function Mn(n,t,e,r,o,i){for(var a=[],l=t=i?t:+d(t,r).toFixed(12);e>=l;l=+(l+r).toFixed(12))a.push(l);return a}function kn(n,t){return t}var Sn={type:"y",show:!0,scale:"y",space:40,gap:5,size:50,labelSize:30,labelFont:gn,side:3,grid:mn,ticks:pn,font:dn,rotate:0};function Yn(n,t){return u(g(5*t),2*g(n*t)-1)}var Dn={scale:"y",show:!0,band:!1,alpha:1,points:{show:function(n,t){var e=Yn(n.series[t].width,W),r=n.series[0].idxs;return n.bbox.width/e/2>=r[1]-r[0]}},values:null,min:1/0,max:-1/0,idxs:[],path:null,clip:null},En={time:!0,auto:!1,distr:1,min:1/0,max:-1/0},Tn=M({},En,{time:!1,auto:!0}),Wn={};function zn(){var n=[];return{sub:function(t){n.push(t)},unsub:function(t){n=n.filter((function(n){return n!=t}))},pub:function(t,e,r,o,i,a,l){n.length>1&&n.forEach((function(n){n!=e&&n.pub(t,e,r,o,i,a,l)}))}}}function An(n,t,e){return[n[0],n[1]].concat(n.slice(2)).map((function(n,r){return Fn(n,r,t,e)}))}function Fn(n,t,e,r){return M({},0==t||n&&n.side%2==0?e:r,n)}function Cn(n,t,e,r){return r+(1-(n-t.min)/(t.max-t.min))*e}function _n(n,t,e,r){return r+(n-t.min)/(t.max-t.min)*e}function Hn(n,t,e){return[t,e>t?e:e+86400]}function Pn(n,t,e){var i=e-t;if(0==i){var a=f(i||r(e)||1),l=o(a)+1;return[t,d(e,s(10,l))]}return[t,e]}function Nn(n,e,r){return t(e,r,.2,!0)}function Ln(n){return 0==n.button}function Bn(n){var t;return[n=n.replace(/\d+/,(function(n){return t=i(n*W)})),t]}function In(t,e,a){var s={},f=s.root=C("uplot");null!=t.id&&(f.id=t.id),z(f,t.class),t.title&&(C("title",f).textContent=t.title);var b=F("canvas"),H=s.ctx=b.getContext("2d"),L=C("wrap",f),B=C("under",L);L.appendChild(b);var I=C("over",L);((t=y(t)).plugins||[]).forEach((function(n){n.opts&&(t=n.opts(s,t)||t)}));var R=!1,j=An(t.series,wn,Dn),G=An(t.axes||[],xn,Sn),J=t.scales=t.scales||{},U=M({x:i(Sn.size/2),y:i(xn.size/3)},t.gutters),O=t.tzDate||function(n){return new Date(1e3*n)},q=t.fmtDate||V,X=function(n){return function(t,e,r,i,a){var l=[],u=i>=nn&&tn>i,s=n(e),f=s/1e3,c=fn(s.getFullYear(),s.getMonth(),u?1:s.getDate()),v=c/1e3;if(u)for(var h=i/nn,m=f==v?f:fn(c.getFullYear(),c.getMonth()+h,1)/1e3,p=new Date(1e3*m),w=p.getFullYear(),b=p.getMonth(),y=0;r>=m;y++){var M=fn(w,b+h*y,1);(m=(+M+(M-n(M/1e3)))/1e3)>r||l.push(m)}else{var k=$>i?i:$,S=v+(o(e)-o(f))+d(f-v,k);l.push(S);for(var Y=n(S),D=Y.getHours()+Y.getMinutes()/60+Y.getSeconds()/Q,E=i/Q;;){S=g(S+i);var T=o(x(D+E))%24,W=n(S).getHours()-T;if(W>1&&(W=-1),(S-=W*Q)>r)break;D=(D+E)%24,.7>g((S-l[l.length-1])/i)*a||l.push(S)}}return l}}(O),on=sn(O,rn(un,q)),an=vn(O,cn("{YYYY}-{MM}-{DD} {h}:{mm}{aa}",q));s.series=j,s.axes=G,s.scales=J;var ln={};for(var mn in J){var pn=J[mn];null==pn.min&&null==pn.max||(ln[mn]={min:pn.min,max:pn.max})}var dn,gn,bn=M({show:!0},t.legend).show,In=[],Rn=!1;if(bn){dn=F("table","legend",f);var jn=j[1].values;if(Rn=null!=jn){var Gn=F("tr","labels",dn);for(var Jn in F("th",null,Gn),gn=jn(s,1,0))F("th",null,Gn).textContent=Jn}else gn={_:0},z(dn,"inline")}var Un=s.cursor=M({},hn,t.cursor);Un.points.show=m(Un.points.show);var Vn=s.focus=M({},t.focus||{alpha:.3},Un.focus),On=Vn.prox>=0,qn=[null];function Xn(n,t){var e=n.scale,r=J[e]=M({},0==t?En:Tn,J[e]),o=r.time;r.range=m(r.range||(o?Hn:0==t?Pn:Nn)),n.spanGaps=!0===n.spanGaps?p:m(n.spanGaps||[]);var i=n.value;if(n.value=o?function(n){return"string"==typeof n}(i)?vn(O,cn(i,q)):i||an:i||kn,n.label=n.label||(o?"Time":"Value"),t>0){n.width=null==n.width?1:n.width,n.paths=n.paths||Wt;var a=Yn(n.width,1);n.points=M({},{size:a,width:u(1,.2*a)},n.points),n.points.show=m(n.points.show),n._paths=null}if(bn&&In.splice(t,0,function(n,t){if(0==t&&Rn)return null;var e=[],r=F("tr","series",dn,dn.childNodes[t]);z(r,n.class),n.show||z(r,"off");var o=F("th",null,r),i=C("ident",o);n.width&&(i.style.borderColor=n.stroke),i.style.backgroundColor=n.fill;var a=C("text",o);for(var l in a.textContent=n.label,t>0&&(P("click",o,(function(t){Un.locked||Ln(t)&&Gt(j.indexOf(n),{show:!n.show},pe.setSeries)})),On&&P("mouseenter",o,(function(){Un.locked||Gt(j.indexOf(n),{focus:!0},pe.setSeries)}))),gn){var u=F("td",null,r);u.textContent="--",e.push(u)}return e}(n,t)),Un.show){var l=function(n,t){if(t>0){var e=Un.points.show(s,t);if(e)return z(e,"cursor-pt"),z(e,n.class),_(e,-10,-10),I.insertBefore(e,qn[t]),e}}(n,t);l&&qn.splice(t,0,l)}}for(var Zn in s.addSeries=function(n,t){n=Fn(n,t=null==t?j.length:t,wn,Dn),j.splice(t,0,n),Xn(j[t],t)},s.delSeries=function(n){j.splice(n,1),In.splice(n,1)[0][0].parentNode.remove(),qn.splice(n,1)[0].remove()},j.forEach(Xn),J){var Kn=J[Zn];null!=Kn.from&&(J[Zn]=M({},J[Kn.from],Kn))}var Qn,$n=j[0].scale,nt=J[$n].distr;G.forEach((function(n){if(n.show){var t=J[n.scale];null==t&&(n.scale=n.side%2?j[1].scale:$n,t=J[n.scale]);var e=t.time;n.space=m(n.space),n.rotate=m(n.rotate),n.incrs=m(n.incrs||(2==t.distr?Z:e?en:K)),n.split=m(n.split||(e&&1==t.distr?X:Mn));var r=n.values;n.values=e?w(r)?sn(O,rn(r,q)):r||on:r||yn,n.font=Bn(n.font),n.labelFont=Bn(n.labelFont)}}));var tt,et,rt,ot,it,at,lt,ut,st,ft,ct=null,vt=null,ht=j[0].idxs,mt=null;function pt(n,t){s.data=n,e=n.slice(),Qn=(mt=e[0]).length,2==nt&&(e[0]=mt.map((function(n,t){return t}))),Ft(),me("setData"),!1!==t&&dt()}function dt(){ct=ht[0]=0,vt=ht[1]=Qn-1,jt($n,2==nt?ct:e[0][ct],2==nt?vt:e[0][vt])}function gt(n,t,e,r){H.strokeStyle=n||"#000",H.lineWidth=t,H.lineJoin="round",H.setLineDash(e||[]),H.fillStyle=r||"#000"}function xt(n,t){s.width=tt=rt=n,s.height=et=ot=t,it=at=0,function(){var n=!1,t=!1,e=!1,r=!1;G.forEach((function(o){if(o.show){var i=o.side,a=i%2,l=o.size+(o.labelSize=null!=o.label?o.labelSize||30:0);l>0&&(a?(rt-=l,3==i?(it+=l,r=!0):e=!0):(ot-=l,0==i?(at+=l,n=!0):t=!0))}})),(n||t)&&(e||(rt-=U.x),r||(rt-=U.x,it+=U.x)),(r||e)&&(t||(ot-=U.y),n||(ot-=U.y,at+=U.y))}(),function(){var n=it+rt,t=at+ot,e=it,r=at;function o(o,i){switch(o){case 1:return(n+=i)-i;case 2:return(t+=i)-i;case 3:return(e-=i)+i;case 0:return(r-=i)+i}}G.forEach((function(n){var t=n.side;n._pos=o(t,n.size),null!=n.label&&(n._lpos=o(t,n.labelSize))}))}();var e=s.bbox;lt=e[Y]=v(it*W,.5),ut=e.top=v(at*W,.5),st=e[k]=v(rt*W,.5),ft=e[S]=v(ot*W,.5),A(B,Y,it),A(B,"top",at),A(B,k,rt),A(B,S,ot),A(I,Y,it),A(I,"top",at),A(I,k,rt),A(I,S,ot),A(L,k,tt),A(L,S,et),b[k]=i(tt*W),b[S]=i(et*W),re(),R&&jt($n,J[$n].min,J[$n].max),R&&me("setSize")}function wt(){if(Xt)Kt=!0;else{if(Qn>0){var t=y(J);for(var r in t){var o=t[r],i=ln[r];null!=i?(M(o,i),r==$n&&Ft()):r!=$n&&(o.min=1/0,o.max=-1/0)}for(var a in j.forEach((function(r,o){var i=r.scale,a=t[i];if(0==o){var f=a.range(s,a.min,a.max);a.min=f[0],a.max=f[1],ct=n(a.min,e[0]),vt=n(a.max,e[0]),a.min>e[0][ct]&&ct++,e[0][vt]>a.max&&vt--,r.min=mt[ct],r.max=mt[vt]}else if(r.show&&null==ln[i]){var c=r.min==1/0?a.auto?function(n,t,e){for(var r=1/0,o=-1/0,i=t;e>=i;i++)null!=n[i]&&(r=l(r,n[i]),o=u(o,n[i]));return[r,o]}(e[o],ct,vt):[0,100]:[r.min,r.max];a.min=l(a.min,r.min=c[0]),a.max=u(a.max,r.max=c[1])}r.idxs[0]=ct,r.idxs[1]=vt})),t){var f=t[a];if(null==f.from&&f.min!=1/0&&null==ln[a]){var c=f.range(s,f.min,f.max);f.min=c[0],f.max=c[1]}}for(var v in t){var h=t[v];if(null!=h.from){var m=t[h.from];if(m.min!=1/0){var p=h.range(s,m.min,m.max);h.min=p[0],h.max=p[1]}}}var d={};for(var g in t){var x=t[g],w=J[g];w.min==x.min&&w.max==x.max||(w.min=x.min,w.max=x.max,d[g]=!0),ln[g]=null}for(var b in j.forEach((function(n){d[n.scale]&&(n._paths=null)})),d)me("setScale",b)}Un.show&&te()}}s.setData=pt,s.bbox={},s.setSize=function(n){xt(n.width,n.height)};var bt,yt,Mt,kt,St,Yt,Dt,Et=1;function Tt(n,t){var e=new Set(j[n].spanGaps(s,t,n)),r=null;if((t=t.filter((function(n){return!e.has(n)}))).length>0){r=new Path2D;for(var o=lt,i=0;t.length>i;i++){var a=t[i];r.rect(o,ut,a[0]-o,ut+ft),o=a[1]}r.rect(o,ut,lt+st-o,ut+ft)}return r}function Wt(n,t,r,o){var a,s,f=j[t],c=e[0],v=e[t],h=J[$n],m=J[f.scale],p=1==Et?{stroke:new Path2D,fill:null,clip:null}:j[t-1]._paths,d=p.stroke,x=g(f[k]*W),w=1/0,b=-1/0,y=[],M=i(_n(c[1==Et?r:o],h,st,lt));f.band&&1==Et&&r==ct&&(x&&d.lineTo(-x,i(Cn(v[r],m,ft,ut))),c[0]>h.min&&y.push([lt,M-1]));for(var S=1==Et?r:o;S>=r&&o>=S;S+=Et){var Y=i(_n(c[S],h,st,lt));if(Y==M)null!=v[S]&&(a=i(Cn(v[S],m,ft,ut)),w=l(a,w),b=u(a,b));else{var D=!1;if(w!=1/0?(d.lineTo(M,w),d.lineTo(M,b),d.lineTo(M,a),s=M):D=!0,null!=v[S]?(a=i(Cn(v[S],m,ft,ut)),d.lineTo(Y,a),w=b=a,Y-M>1&&null==v[S-1]&&(D=!0)):(w=1/0,b=-1/0),D){var E=y[y.length-1];E&&E[0]==s?E[1]=Y:y.push([s,Y])}M=Y}}if(f.band){var T,z,A=100*x;-1==Et&&r==ct&&(z=lt-A,T=r),1==Et&&o==vt&&(z=lt+st+A,T=o,h.max>c[Qn-1]&&y.push([M,lt+st])),d.lineTo(z,i(Cn(v[T],m,ft,ut)))}if(1==Et&&(p.clip=Tt(t,y),null!=f.fill)){var F=p.fill=new Path2D(d),C=i(Cn(0,m,ft,ut));F.lineTo(lt+st,C),F.lineTo(lt,C)}return f.band&&(Et*=-1),p}function zt(n,t,e,r){var o;if(r>0){var i=n.space(s,t,e,r);(o=function(n,t,e,r){for(var o=e/n,i=0;t.length>i;i++){var a=t[i]*o;if(a>=r)return[t[i],a]}}(e-t,n.incrs(s,t,e,r,i),r,i)).push(o[1]/i)}else o=[0,0];return o}function At(n,t,e,r,o,i,a,l){var u=i%2/2;H.translate(u,u),gt(a,i,l),H.beginPath();var s,f,c,v,h=r+(0==e||3==e?-o:o);0==t?(f=r,v=h):(s=r,c=h),n.forEach((function(n){0==t?s=c=n:f=v=n,H.moveTo(s,f),H.lineTo(c,v)})),H.stroke(),H.translate(-u,-u)}function Ft(){j.forEach((function(n,t){t>0&&(n.min=1/0,n.max=-1/0,n._paths=null)}))}function Ct(){Xt?Zt=!0:(H.clearRect(0,0,b[k],b[S]),me("drawClear"),function(){G.forEach((function(n){if(n.show){var t=J[n.scale];if(t.min!=1/0){var e=n.side,r=e%2,o=t.min,a=t.max,l=zt(n,o,a,0==r?rt:ot),u=l[1],f=n.split(s,o,a,l[0],l[2],2==t.distr),v=0==r?_n:Cn,h=0==r?st:ft,m=0==r?lt:ut,p=f.map((function(n){return i(v(n,t,h,m))})),d=i(n.gap*W),x=n.ticks,w=x.show?i(x.size*W):0,b=n.values(s,2==t.distr?f.map((function(n){return mt[n]})):f,u),y=2==e?n.rotate(s,b,u)*-c/180:0,M=i(n._pos*W),S=M+(w+d)*(0==r&&0==e||1==r&&3==e?-1:1),D=0==r?S:0,E=1==r?S:0;H.font=n.font[0],H.fillStyle=n.stroke||"#000",H.textAlign=y>0?Y:0>y?"right":0==r?"center":3==e?"right":Y,H.textBaseline=y||1==r?"middle":2==e?"top":"bottom";var T=1.5*n.font[1];if(b.forEach((function(n,t){0==r?E=p[t]:D=p[t],(""+n).split(/\n/gm).forEach((function(n,t){y?(H.save(),H.translate(E,D+t*T),H.rotate(y),H.fillText(n,0,0),H.restore()):H.fillText(n,E,D+t*T)}))})),n.label){H.save();var z=i(n._lpos*W);1==r?(E=D=0,H.translate(z,i(ut+ft/2)),H.rotate((3==e?-c:c)/2)):(E=i(lt+st/2),D=z),H.font=n.labelFont[0],H.textAlign="center",H.textBaseline=2==e?"top":"bottom",H.fillText(n.label,E,D),H.restore()}x.show&&At(p,r,e,M,w,g(x[k]*W),x.stroke);var A=n.grid;A.show&&At(p,r,0==r?2:1,0==r?ut:lt,0==r?ft:st,g(A[k]*W),A.stroke,A.dash)}}})),me("drawAxes")}(),function(){j.forEach((function(n,t){if(t>0&&n.show&&null==n._paths){var r=function(n){for(var t=h(ct-1,0,Qn-1),e=h(vt+1,0,Qn-1);null==n[t]&&t>0;)t--;for(;null==n[e]&&Qn-1>e;)e++;return[t,e]}(e[t]);n._paths=n.paths(s,t,r[0],r[1])}})),j.forEach((function(n,t){t>0&&n.show&&(n._paths&&function(n){var t=j[n];if(1==Et){var e=t._paths,r=e.stroke,o=e.fill,i=e.clip,a=g(t[k]*W),l=a%2/2;gt(t.stroke,a,t.dash,t.fill),H.globalAlpha=t.alpha,H.translate(l,l),H.save();var u=lt,s=ut,f=st,c=ft,v=a*W/2;0==t.min&&(c+=v),0==t.max&&(s-=v,c+=v),H.beginPath(),H.rect(u,s,f,c),H.clip(),null!=i&&H.clip(i),t.band?(H.fill(r),a&&H.stroke(r)):(a&&H.stroke(r),null!=t.fill&&H.fill(o)),H.restore(),H.translate(-l,-l),H.globalAlpha=1}t.band&&(Et*=-1)}(t),n.points.show(s,t,ct,vt)&&function(n){var t=j[n],r=t.points,o=g(t[k]*W),a=o%2/2,l=r.width>0,u=(r.size-r.width)/2*W,s=g(2*u);H.translate(a,a),H.save(),H.beginPath(),H.rect(lt-s,ut-s,st+2*s,ft+2*s),H.clip(),H.globalAlpha=t.alpha;for(var f=new Path2D,v=ct;vt>=v;v++)if(null!=e[n][v]){var h=i(_n(e[0][v],J[$n],st,lt)),m=i(Cn(e[n][v],J[t.scale],ft,ut));f.moveTo(h+u,m),f.arc(h,m,u,0,2*c)}gt(r.stroke||t.stroke||"#000",o,null,r.fill||(l?"#fff":t.stroke||"#000")),H.fill(f),l&&H.stroke(f),H.globalAlpha=1,H.restore(),H.translate(-a,-a)}(t),me("drawSeries",t))}))}(),bt=!0,me("draw"))}function _t(n,t){var e=J[n];if(null==e.from){if(n==$n&&e.time&&G[0].show&&t.max>t.min&&.001>zt(G[0],t.min,t.max,rt)[0])return;ln[n]=t,bt=!1,wt(),!bt&&Ct(),bt=!1}}s.redraw=function(n){!1!==n?jt($n,J[$n].min,J[$n].max):Ct()},s.setScale=_t;var Ht=!1,Pt=Un.drag;if(Un.show){var Nt="cursor-";Un.x&&(Yt=Un.left,yt=C(Nt+"x",I)),Un.y&&(Dt=Un.top,Mt=C(Nt+"y",I))}var Lt=s.select=M({show:!0,left:0,width:0,top:0,height:0},t.select),Bt=Lt.show?C("select",I):null;function It(n,t){if(Lt.show){for(var e in n)A(Bt,e,Lt[e]=n[e]);!1!==t&&me("setSelect")}}function Rt(n){var t=bn?In[n][0].parentNode:null;j[n].show?t&&function(n){n.classList.remove("off")}(t):(t&&z(t,"off"),qn.length>1&&_(qn[n],0,-10))}function jt(n,t,e){_t(n,{min:t,max:e})}function Gt(n,t,e){var r=j[n];if(null!=t.focus&&function(n){n!=Vt&&(j.forEach((function(t,e){!function(n,t){var e=j[n];Jt(n,t),e.band&&Jt(j[n+1].band?n+1:n-1,t)}(e,null==n||0==e||e==n?1:Vn.alpha)})),Vt=n,Ct())}(n),null!=t.show){if(r.show=t.show,Rt(n),r.band){var o=j[n+1]&&j[n+1].band?n+1:n-1;j[o].show=r.show,Rt(o)}jt($n,J[$n].min,J[$n].max)}me("setSeries",n,t),e&&ge.pub("setSeries",s,n,t)}function Jt(n,t){j[n].alpha=t,In&&(In[n][0].parentNode.style.opacity=t)}s.setSelect=It,s.setSeries=Gt;var Ut=Array(j.length),Vt=null;function Ot(n,t){var e=h(n/(t==$n?rt:ot),0,1),r=J[t];return r.min+e*(r.max-r.min)}function qt(t){return n(Ot(t,$n),e[0],ct,vt)}bn&&On&&P("mouseleave",dn,(function(){Un.locked||(Gt(null,{focus:!1},pe.setSeries),te())})),s.posToIdx=qt,s.posToVal=function(n,t){return Ot(t==$n?n:ot-n,t)},s.valToPos=function(n,t,e){return t==$n?_n(n,J[t],e?st:rt,e?lt:0):Cn(n,J[t],e?ft:ot,e?ut:0)};var Xt=!1,Zt=!1,Kt=!1,Qt=!1;function $t(n){Xt=!0,n(s),Xt=!1,Kt&&wt(),Qt&&te(),Zt&&!bt&&Ct(),Kt=Qt=Zt=bt=Xt}s.batch=$t,s.setCursor=function(n){Yt=n.left,Dt=n.top,te()};var ne=0;function te(n){if(Xt)Qt=!0;else{var t;if(ne=0,Un.show&&(Un.x&&_(yt,i(Yt),0),Un.y&&_(Mt,0,i(Dt))),0>Yt||0==Qn){t=null;for(var o=0;j.length>o;o++)if(o>0&&(Ut[o]=1/0,qn.length>1&&_(qn[o],-10,-10)),bn){if(0==o&&Rn)continue;for(var a=0;In[o].length>a;a++)In[o][a].firstChild.nodeValue="--"}On&&Gt(null,{focus:!0},pe.setSeries)}else{t=qt(Yt);for(var f=g(_n(e[0][t],J[$n],rt,0)),c=0;j.length>c;c++){var v=j[c];if(c>0&&v.show){var h=e[c][t],m=null==h?-10:g(Cn(h,J[v.scale],ot,0));Ut[c]=m>0?r(m-Dt):1/0,qn.length>1&&_(qn[c],f,m)}else Ut[c]=1/0;if(bn){if(0==c&&Rn)continue;var p=0==c&&2==nt?mt:e[c],d=Rn?v.values(s,c,t):{_:v.value(s,p[t],c,t)},x=0;for(var w in d)In[c][x++].firstChild.nodeValue=d[w]}}}if(Yt>=0&&Lt.show&&Ht){if(Pt.x){var b=l(kt,Yt),y=u(kt,Yt);A(Bt,Y,Lt[Y]=b),A(Bt,k,Lt[k]=y-b)}if(Pt.y){var M=l(St,Dt),D=u(St,Dt);A(Bt,"top",Lt.top=M),A(Bt,S,Lt[S]=D-M)}}if(null!=n&&(ge.pub("mousemove",s,Yt,Dt,rt,ot,t),On)){var E=l.apply(null,Ut),T=null;E>Vn.prox||Ut.some((function(n,t){if(n==E)return T=t})),Gt(T,{focus:!0},pe.setSeries)}Un.idx=t,Un.left=Yt,Un.top=Dt,R&&me("setCursor")}}var ee=null;function re(){ee=I.getBoundingClientRect()}function oe(n,t,e,r,o,i){Un.locked||(ie(n,0,e,r,o,i,0,!1,null!=n),null!=n?0==ne&&(ne=D(te)):te())}function ie(n,t,e,r,o,i,a,l,u){null!=n?(e=n.clientX-ee.left,r=n.clientY-ee.top):(e=rt*(e/o),r=ot*(r/i)),u&&(e>1&&rt-1>e||(e=v(e,rt)),r>1&&ot-1>r||(r=v(r,ot))),l?(kt=e,St=r):(Yt=e,Dt=r)}function ae(){It({width:Pt.x?0:rt,height:Pt.y?0:ot},!1)}function le(n,t,e,r,o,i){(null==n||Ln(n))&&(Ht=!0,ie(n,0,e,r,o,i,0,!0,!0),Lt.show&&(Pt.x||Pt.y)&&ae(),null!=n&&(P("mouseup",E,ue),ge.pub("mousedown",s,kt,St,rt,ot,null)))}function ue(n,t,e,r,o,i){(null==n||Ln(n))&&(Ht=!1,ie(n,0,e,r,o,i,0,!1,!0),Yt!=kt||Dt!=St?(It(Lt),Pt.setScale&&($t((function(){if(Pt.x){var n=2==nt?qt:Ot;jt($n,n(Lt[Y],$n),n(Lt[Y]+Lt[k],$n))}if(Pt.y)for(var t in J)t!=$n&&null==J[t].from&&jt(t,Ot(ot-Lt.top-Lt[S],t),Ot(ot-Lt.top,t))})),ae())):Un.lock&&(Un.locked=!Un.locked,Un.locked||te()),null!=n&&(N("mouseup",E,ue),ge.pub("mouseup",s,Yt,Dt,rt,ot,null)))}function se(n){dt(),null!=n&&ge.pub("dblclick",s,Yt,Dt,rt,ot,null)}var fe,ce={};ce.mousedown=le,ce.mousemove=oe,ce.mouseup=ue,ce.dblclick=se,ce.setSeries=function(n,t,e,r){Gt(e,r)},Un.show&&(P("mousedown",I,le),P("mousemove",I,oe),P("mouseenter",I,re),P("mouseleave",I,(function(){Un.locked||Ht||(Yt=-10,Dt=-10,te(1))})),Pt.setScale&&P("dblclick",I,se),fe=function(n){var t=null;function e(){t=null,n()}return function(){clearTimeout(t),t=setTimeout(e,100)}}(re),P("resize",T,fe),P("scroll",T,fe),s.syncRect=re);var ve=s.hooks=t.hooks||{},he=[s];function me(n){if(n in ve){var t=he.concat(Array.prototype.slice.call(arguments,1));ve[n].forEach((function(n){n.apply(null,t)}))}}(t.plugins||[]).forEach((function(n){for(var t in n.hooks)ve[t]=(ve[t]||[]).concat(n.hooks[t])}));var pe=M({key:null,setSeries:!1},Un.sync),de=pe.key,ge=null!=de?Wn[de]=Wn[de]||zn():zn();function xe(){xt(t[k],t[S]),me("init",t,e),pt(e||t.data,!1),ln[$n]?_t($n,ln[$n]):dt(),It(Lt,!1),R=!0,me("ready")}return ge.sub(s),s.pub=function(n,t,e,r,o,i,a){ce[n](null,t,e,r,o,i,a)},s.destroy=function(){ge.unsub(s),N("resize",T,fe),N("scroll",T,fe),f.remove(),me("destroy")},a?a instanceof HTMLElement?(a.appendChild(f),xe()):a(s,xe):xe(),s}return In.assign=M,In.rangeNum=t,In.fmtDate=V,In.tzDate=function(n,t){var e=new Date(n.toLocaleString("en-US",{timeZone:t}));return e.setMilliseconds(n.getMilliseconds()),e},In}();
/*! https://github.com/leeoniya/uPlot (v1.0.9) */
var uPlot=function(){"use strict";function n(n,t,e,r){var i;e=e||0;for(var a=2147483647>=(r=r||t.length-1);r-e>1;)n>t[i=a?e+r>>1:o((e+r)/2)]?e=i:r=i;return n-t[e]>t[r]-n?r:e}function t(n,t,e,i){var a=t-n,l=f(a||r(t)||1),u=o(l),c=s(10,u)*e,v=0==a?c:0,h=x(function(n,t){return o(n/t)*t}(n-v,c)),m=x(d(t+v,c));return i&&(0==a?t>0?(h=0,m=2*t):0>t&&(m=0,h=2*n):(c>m-t&&(m+=c),c>n-h&&(h-=c),n>=0&&0>h&&(h=0),0>=t&&m>0&&(m=0))),[h,m]}var e=Math,r=e.abs,o=e.floor,i=e.round,a=e.ceil,l=e.min,u=e.max,s=e.pow,f=e.log10,c=e.PI;function v(n,t){return i(n/t)*t}function h(n,t,e){return l(u(n,t),e)}function m(n){return"function"==typeof n?n:function(){return n}}function p(n,t){return t}function d(n,t){return a(n/t)*t}function g(n){return i(1e3*n)/1e3}function x(n){return i(1e6*n)/1e6}var w=Array.isArray;function b(n){return"object"==typeof n&&null!==n}function y(n){var t;if(w(n))t=n.map(y);else if(b(n))for(var e in t={},n)t[e]=y(n[e]);else t=n;return t}function M(n){for(var t=arguments,e=1;t.length>e;e++){var r=t[e];for(var o in r)b(n[o])?M(n[o],y(r[o])):n[o]=y(r[o])}return n}var k="width",S="height",T="top",Y="left",D=requestAnimationFrame,E=document,_=window,W=devicePixelRatio;function z(n,t){null!=t&&n.classList.add(t)}function F(n,t,e){n.style[t]=e+"px"}function A(n,t,e,r){var o=E.createElement(n);return null!=t&&z(o,t),null!=e&&e.insertBefore(o,r),o}function C(n,t){return A("div",n,t)}function H(n,t,e){n.style.transform="translate("+t+"px,"+e+"px)"}var P={passive:!0};function N(n,t,e){t.addEventListener(n,e,P)}function V(n,t,e){t.removeEventListener(n,e,P)}var L=["January","February","March","April","May","June","July","August","September","October","November","December"],I=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function B(n){return n.slice(0,3)}var R=I.map(B),j=L.map(B),G={MMMM:L,MMM:j,WWWW:I,WWW:R};function J(n){return(10>n?"0":"")+n}var U={YYYY:function(n){return n.getFullYear()},YY:function(n){return(n.getFullYear()+"").slice(2)},MMMM:function(n,t){return t.MMMM[n.getMonth()]},MMM:function(n,t){return t.MMM[n.getMonth()]},MM:function(n){return J(n.getMonth()+1)},M:function(n){return n.getMonth()+1},DD:function(n){return J(n.getDate())},D:function(n){return n.getDate()},WWWW:function(n,t){return t.WWWW[n.getDay()]},WWW:function(n,t){return t.WWW[n.getDay()]},HH:function(n){return J(n.getHours())},H:function(n){return n.getHours()},h:function(n){var t=n.getHours();return 0==t?12:t>12?t-12:t},AA:function(n){return 12>n.getHours()?"AM":"PM"},aa:function(n){return 12>n.getHours()?"am":"pm"},a:function(n){return 12>n.getHours()?"a":"p"},mm:function(n){return J(n.getMinutes())},m:function(n){return n.getMinutes()},ss:function(n){return J(n.getSeconds())},s:function(n){return n.getSeconds()},fff:function(n){return function(n){return(10>n?"00":100>n?"0":"")+n}(n.getMilliseconds())}};function O(n,t){t=t||G;for(var e,r=[],o=/\{([a-z]+)\}|[^{]+/gi;e=o.exec(n);)r.push("{"==e[0][0]?U[e[1]]:e[0]);return function(n){for(var e="",o=0;r.length>o;o++)e+="string"==typeof r[o]?r[o]:r[o](n,t);return e}}function q(n,t,e){for(var o=[],i=n;t>i;i++)for(var a=0;e.length>a;a++){var l=e[a]*s(10,i);o.push(+l.toFixed(r(i)))}return o}var X=[1,2,5],Z=q(-12,0,X),K=q(0,12,X),Q=Z.concat(K),$=3600,nn=86400,tn=30*nn,en=365*nn,rn=[5e-4].concat(q(-3,0,X),[1,5,10,15,30,60,300,600,900,1800,$,7200,3*$,4*$,6*$,8*$,43200,nn,2*nn,3*nn,4*nn,5*nn,6*nn,7*nn,8*nn,9*nn,10*nn,15*nn,tn,2*tn,3*tn,4*tn,6*tn,en,2*en,5*en,10*en,25*en,50*en,100*en]);function on(n,t){return n.map((function(n){return[n[0],t(n[1]),n[2],t(n[4]?n[1]+n[3]:n[3])]}))}var an="{M}/{D}",ln="\n"+an,un="{h}:{mm}{aa}",sn=[[en,"{YYYY}",7,"",1],[28*nn,"{MMM}",7,"\n{YYYY}",1],[nn,an,7,"\n{YYYY}",1],[$,"{h}{aa}",4,ln,1],[60,un,4,ln,1],[1,":{ss}",2,ln+" "+un,1],[.001,":{ss}.{fff}",2,ln+" "+un,1]];function fn(n,t){return function(e,r,o,i){var a=t.find((function(n){return i>=n[0]}))||t[t.length-1],l=null,u=null,s=null;return r.map((function(t){var e=n(t),r=e.getFullYear(),o=e.getDate(),i=e.getMinutes(),f=r!=l,c=o!=u,v=i!=s;return l=r,u=o,s=i,(7==a[2]&&f||4==a[2]&&c||2==a[2]&&v?a[3]:a[1])(e)}))}}function cn(n,t,e){return new Date(n,t,e)}function vn(n,t){return t(n)}function hn(n,t){return function(e,r){return t(n(r))}}var mn={show:!0,x:!0,y:!0,lock:!1,points:{show:function(n,t){var e=n.series[t],r=C();r.style.background=e.stroke||"#000";var o=Yn(e.width,1),i=(o-1)/-2;return F(r,k,o),F(r,S,o),F(r,"marginLeft",i),F(r,"marginTop",i),r}},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,_x:!1,_y:!1},focus:{prox:-1},locked:!1,left:-10,top:-10,idx:null},pn={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},dn=M({},pn,{size:10}),gn='12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',xn="bold "+gn,wn={type:"x",show:!0,scale:"x",space:50,gap:5,size:50,labelSize:30,labelFont:xn,side:2,grid:pn,ticks:dn,font:gn,rotate:0},bn={show:!0,scale:"x",min:1/0,max:-1/0,idxs:[]},yn=new Intl.NumberFormat(navigator.language);function Mn(n,t){return t.map(yn.format)}function kn(n,t,e,r,o,i){for(var a=[],l=t=i?t:+d(t,r).toFixed(12);e>=l;l=+(l+r).toFixed(12))a.push(l);return a}function Sn(n,t){return t}var Tn={type:"y",show:!0,scale:"y",space:40,gap:5,size:50,labelSize:30,labelFont:xn,side:3,grid:pn,ticks:dn,font:gn,rotate:0};function Yn(n,t){return g((3+2*(n||1))*t)}var Dn={scale:"y",show:!0,band:!1,alpha:1,points:{show:function(n,t){var e=Yn(n.series[t].width,W),r=n.series[0].idxs;return n.bbox.width/e/2>=r[1]-r[0]}},values:null,min:1/0,max:-1/0,idxs:[],path:null,clip:null},En={time:!0,auto:!1,distr:1,min:1/0,max:-1/0},_n=M({},En,{time:!1,auto:!0}),Wn={};function zn(){var n=[];return{sub:function(t){n.push(t)},unsub:function(t){n=n.filter((function(n){return n!=t}))},pub:function(t,e,r,o,i,a,l){n.length>1&&n.forEach((function(n){n!=e&&n.pub(t,e,r,o,i,a,l)}))}}}function Fn(n,t,e,r){return(r?[n[0],n[1]].concat(n.slice(2)):[n[0]].concat(n.slice(1))).map((function(n,r){return An(n,r,t,e)}))}function An(n,t,e,r){return M({},0==t||n&&n.side%2==0?e:r,n)}function Cn(n,t,e,r){return r+(1-(n-t.min)/(t.max-t.min))*e}function Hn(n,t,e,r){return r+(n-t.min)/(t.max-t.min)*e}function Pn(n,t,e){return[t,e>t?e:e+86400]}function Nn(n,t,e){var i=e-t;if(0==i){var a=f(i||r(e)||1),l=o(a)+1;return[t,d(e,s(10,l))]}return[t,e]}function Vn(n,e,r){return t(e,r,.2,!0)}function Ln(n){return 0==n.button}function In(n){var t;return[n=n.replace(/\d+/,(function(n){return t=i(n*W)})),t]}function Bn(t,e,a){var s={},f=s.root=C("uplot");null!=t.id&&(f.id=t.id),z(f,t.class),t.title&&(C("title",f).textContent=t.title);var b=A("canvas"),P=s.ctx=b.getContext("2d"),L=C("wrap",f),I=C("under",L);L.appendChild(b);var B=C("over",L);((t=y(t)).plugins||[]).forEach((function(n){n.opts&&(t=n.opts(s,t)||t)}));var R=!1,j=s.series=Fn(t.series||[],bn,Dn,!1),G=s.axes=Fn(t.axes||[],wn,Tn,!0),J=s.scales=t.scales=t.scales||{},U=M({x:i(Tn.size/2),y:i(wn.size/3)},t.gutters),q=t.tzDate||function(n){return new Date(1e3*n)},X=t.fmtDate||O,Z=function(n){return function(t,e,r,i,a){var l=[],u=i>=tn&&en>i,s=n(e),f=s/1e3,c=cn(s.getFullYear(),s.getMonth(),u?1:s.getDate()),v=c/1e3;if(u)for(var h=i/tn,m=f==v?f:cn(c.getFullYear(),c.getMonth()+h,1)/1e3,p=new Date(1e3*m),w=p.getFullYear(),b=p.getMonth(),y=0;r>=m;y++){var M=cn(w,b+h*y,1);(m=(+M+(M-n(M/1e3)))/1e3)>r||l.push(m)}else{var k=nn>i?i:nn,S=v+(o(e)-o(f))+d(f-v,k);l.push(S);for(var T=n(S),Y=T.getHours()+T.getMinutes()/60+T.getSeconds()/$,D=i/$;;){S=g(S+i);var E=o(x(Y+D))%24,_=n(S).getHours()-E;if(_>1&&(_=-1),(S-=_*$)>r)break;Y=(Y+D)%24,.7>g((S-l[l.length-1])/i)*a||l.push(S)}}return l}}(q),an=fn(q,on(sn,X)),ln=hn(q,vn("{YYYY}-{MM}-{DD} {h}:{mm}{aa}",X)),un={};for(var pn in J){var dn=J[pn];null==dn.min&&null==dn.max||(un[pn]={min:dn.min,max:dn.max})}var gn,xn,yn=M({show:!0},t.legend).show,Bn=[],Rn=!1;if(yn){gn=A("table","legend",f);var jn=j[1]?j[1].values:null;if(Rn=null!=jn){var Gn=A("tr","labels",gn);for(var Jn in A("th",null,Gn),xn=jn(s,1,0))A("th",null,Gn).textContent=Jn}else xn={_:0},z(gn,"inline")}var Un=s.cursor=M({},mn,t.cursor);Un.points.show=m(Un.points.show);var On=s.focus=M({},t.focus||{alpha:.3},Un.focus),qn=On.prox>=0,Xn=[null];function Zn(n,t){var e=n.scale,r=J[e]=M({},0==t?En:_n,J[e]),o=r.time;r.range=m(r.range||(o?Pn:0==t?Nn:Vn)),n.spanGaps=!0===n.spanGaps?p:m(n.spanGaps||[]);var i=n.value;if(n.value=o?function(n){return"string"==typeof n}(i)?hn(q,vn(i,X)):i||ln:i||Sn,n.label=n.label||(o?"Time":"Value"),t>0){n.width=null==n.width?1:n.width,n.paths=n.paths||Wt;var a=Yn(n.width,1);n.points=M({},{size:a,width:u(1,.2*a)},n.points),n.points.show=m(n.points.show),n._paths=null}if(yn&&Bn.splice(t,0,function(n,t){if(0==t&&Rn)return null;var e=[],r=A("tr","series",gn,gn.childNodes[t]);z(r,n.class),n.show||z(r,"off");var o=A("th",null,r),i=C("ident",o);n.width&&(i.style.borderColor=n.stroke),i.style.backgroundColor=n.fill;var a=C("text",o);for(var l in a.textContent=n.label,t>0&&(N("click",o,(function(t){Un.locked||Ln(t)&&Ut(j.indexOf(n),{show:!n.show},xe.setSeries)})),qn&&N("mouseenter",o,(function(){Un.locked||Ut(j.indexOf(n),{focus:!0},xe.setSeries)}))),xn){var u=A("td",null,r);u.textContent="--",e.push(u)}return e}(n,t)),Un.show){var l=function(n,t){if(t>0){var e=Un.points.show(s,t);if(e)return z(e,"cursor-pt"),z(e,n.class),H(e,-10,-10),B.insertBefore(e,Xn[t]),e}}(n,t);l&&Xn.splice(t,0,l)}}for(var Kn in s.addSeries=function(n,t){n=An(n,t=null==t?j.length:t,bn,Dn),j.splice(t,0,n),Zn(j[t],t)},s.delSeries=function(n){j.splice(n,1),Bn.splice(n,1)[0][0].parentNode.remove(),Xn.splice(n,1)[0].remove()},j.forEach(Zn),J){var Qn=J[Kn];null!=Qn.from&&(J[Kn]=M({},J[Qn.from],Qn))}var $n,nt=j[0].scale,tt=J[nt].distr;G.forEach((function(n){if(n.show){var t=J[n.scale];null==t&&(n.scale=n.side%2?j[1].scale:nt,t=J[n.scale]);var e=t.time;n.space=m(n.space),n.rotate=m(n.rotate),n.incrs=m(n.incrs||(2==t.distr?K:e?rn:Q)),n.split=m(n.split||(e&&1==t.distr?Z:kn));var r=n.values;n.values=e?w(r)?fn(q,on(r,X)):r||an:r||Mn,n.font=In(n.font),n.labelFont=In(n.labelFont)}}));var et,rt,ot,it,at,lt,ut,st,ft,ct,vt=null,ht=null,mt=j[0].idxs,pt=null;function dt(n,t){(n=n||[])[0]=n[0]||[],s.data=n,e=n.slice(),$n=(pt=e[0]).length,2==tt&&(e[0]=pt.map((function(n,t){return t}))),At(),ge("setData"),!1!==t&&gt()}function gt(){vt=mt[0]=0,ht=mt[1]=$n-1,Jt(nt,2==tt?vt:e[0][vt],2==tt?ht:e[0][ht])}function xt(n,t,e,r){P.strokeStyle=n||"#000",P.lineWidth=t,P.lineJoin="round",P.setLineDash(e||[]),P.fillStyle=r||"#000"}function wt(n,t){s.width=et=ot=n,s.height=rt=it=t,at=lt=0,function(){var n=!1,t=!1,e=!1,r=!1;G.forEach((function(o){if(o.show){var i=o.side,a=i%2,l=o.size+(o.labelSize=null!=o.label?o.labelSize||30:0);l>0&&(a?(ot-=l,3==i?(at+=l,r=!0):e=!0):(it-=l,0==i?(lt+=l,n=!0):t=!0))}})),(n||t)&&(e||(ot-=U.x),r||(ot-=U.x,at+=U.x)),(r||e)&&(t||(it-=U.y),n||(it-=U.y,lt+=U.y))}(),function(){var n=at+ot,t=lt+it,e=at,r=lt;function o(o,i){switch(o){case 1:return(n+=i)-i;case 2:return(t+=i)-i;case 3:return(e-=i)+i;case 0:return(r-=i)+i}}G.forEach((function(n){var t=n.side;n._pos=o(t,n.size),null!=n.label&&(n._lpos=o(t,n.labelSize))}))}();var e=s.bbox;ut=e[Y]=v(at*W,.5),st=e.top=v(lt*W,.5),ft=e[k]=v(ot*W,.5),ct=e[S]=v(it*W,.5),F(I,Y,at),F(I,T,lt),F(I,k,ot),F(I,S,it),F(B,Y,at),F(B,T,lt),F(B,k,ot),F(B,S,it),F(L,k,et),F(L,S,rt),b[k]=i(et*W),b[S]=i(rt*W),ae(),R&&Jt(nt,J[nt].min,J[nt].max),R&&ge("setSize")}function bt(){if(Qt)ne=!0;else{if($n>0){var t=y(J);for(var r in t){var o=t[r],i=un[r];null!=i?(M(o,i),r==nt&&At()):r!=nt&&(o.min=1/0,o.max=-1/0)}for(var a in j.forEach((function(r,o){var i=r.scale,a=t[i];if(0==o){var f=a.range(s,a.min,a.max);a.min=f[0],a.max=f[1],vt=n(a.min,e[0]),ht=n(a.max,e[0]),a.min>e[0][vt]&&vt++,e[0][ht]>a.max&&ht--,r.min=pt[vt],r.max=pt[ht]}else if(r.show&&null==un[i]){var c=r.min==1/0?a.auto?function(n,t,e){for(var r=1/0,o=-1/0,i=t;e>=i;i++)null!=n[i]&&(r=l(r,n[i]),o=u(o,n[i]));return[r,o]}(e[o],vt,ht):[0,100]:[r.min,r.max];a.min=l(a.min,r.min=c[0]),a.max=u(a.max,r.max=c[1])}r.idxs[0]=vt,r.idxs[1]=ht})),t){var f=t[a];if(null==f.from&&f.min!=1/0&&null==un[a]){var c=f.range(s,f.min,f.max);f.min=c[0],f.max=c[1]}}for(var v in t){var h=t[v];if(null!=h.from){var m=t[h.from];if(m.min!=1/0){var p=h.range(s,m.min,m.max);h.min=p[0],h.max=p[1]}}}var d={};for(var g in t){var x=t[g],w=J[g];w.min==x.min&&w.max==x.max||(w.min=x.min,w.max=x.max,d[g]=!0),un[g]=null}for(var b in j.forEach((function(n){d[n.scale]&&(n._paths=null)})),d)ge("setScale",b)}Un.show&&oe()}}s.setData=dt,s.bbox={},s.setSize=function(n){wt(n.width,n.height)};var yt,Mt,kt,St,Tt,Yt,Dt,Et=1;function _t(n,t){var e=new Set(j[n].spanGaps(s,t,n)),r=null;if((t=t.filter((function(n){return!e.has(n)}))).length>0){r=new Path2D;for(var o=ut,i=0;t.length>i;i++){var a=t[i];r.rect(o,st,a[0]-o,st+ct),o=a[1]}r.rect(o,st,ut+ft-o,st+ct)}return r}function Wt(n,t,r,o){var a,s,f=j[t],c=e[0],v=e[t],h=J[nt],m=J[f.scale],p=1==Et?{stroke:new Path2D,fill:null,clip:null}:j[t-1]._paths,d=p.stroke,x=g(f[k]*W),w=1/0,b=-1/0,y=[],M=i(Hn(c[1==Et?r:o],h,ft,ut));f.band&&1==Et&&r==vt&&(x&&d.lineTo(-x,i(Cn(v[r],m,ct,st))),c[0]>h.min&&y.push([ut,M-1]));for(var S=1==Et?r:o;S>=r&&o>=S;S+=Et){var T=i(Hn(c[S],h,ft,ut));if(T==M)null!=v[S]&&(a=i(Cn(v[S],m,ct,st)),w=l(a,w),b=u(a,b));else{var Y=!1;if(w!=1/0?(d.lineTo(M,w),d.lineTo(M,b),d.lineTo(M,a),s=M):Y=!0,null!=v[S]?(a=i(Cn(v[S],m,ct,st)),d.lineTo(T,a),w=b=a,T-M>1&&null==v[S-1]&&(Y=!0)):(w=1/0,b=-1/0),Y){var D=y[y.length-1];D&&D[0]==s?D[1]=T:y.push([s,T])}M=T}}if(f.band){var E,_,z=100*x;-1==Et&&r==vt&&(_=ut-z,E=r),1==Et&&o==ht&&(_=ut+ft+z,E=o,h.max>c[$n-1]&&y.push([M,ut+ft])),d.lineTo(_,i(Cn(v[E],m,ct,st)))}if(1==Et&&(p.clip=_t(t,y),null!=f.fill)){var F=p.fill=new Path2D(d),A=i(Cn(0,m,ct,st));F.lineTo(ut+ft,A),F.lineTo(ut,A)}return f.band&&(Et*=-1),p}function zt(n,t,e,r){var o;if(r>0){var i=n.space(s,t,e,r);(o=function(n,t,e,r){for(var o=e/n,i=0;t.length>i;i++){var a=t[i]*o;if(a>=r)return[t[i],a]}}(e-t,n.incrs(s,t,e,r,i),r,i)).push(o[1]/i)}else o=[0,0];return o}function Ft(n,t,e,r,o,i,a,l){var u=i%2/2;P.translate(u,u),xt(a,i,l),P.beginPath();var s,f,c,v,h=r+(0==e||3==e?-o:o);0==t?(f=r,v=h):(s=r,c=h),n.forEach((function(n){0==t?s=c=n:f=v=n,P.moveTo(s,f),P.lineTo(c,v)})),P.stroke(),P.translate(-u,-u)}function At(){j.forEach((function(n,t){t>0&&(n.min=1/0,n.max=-1/0,n._paths=null)}))}function Ct(){Qt?$t=!0:(P.clearRect(0,0,b[k],b[S]),ge("drawClear"),function(){G.forEach((function(n){if(n.show){var t=J[n.scale];if(t.min!=1/0){var e=n.side,r=e%2,o=t.min,a=t.max,l=zt(n,o,a,0==r?ot:it),u=l[0],f=l[1],v=n.split(s,o,a,u,l[2],2==t.distr),h=0==r?Hn:Cn,m=0==r?ft:ct,p=0==r?ut:st,d=v.map((function(n){return i(h(n,t,m,p))})),x=i(n.gap*W),w=n.ticks,b=w.show?i(w.size*W):0,y=n.values(s,2==t.distr?v.map((function(n){return pt[n]})):v,f,2==t.distr?pt[v[1]]-pt[v[0]]:u),M=2==e?n.rotate(s,y,f)*-c/180:0,S=i(n._pos*W),D=S+(b+x)*(0==r&&0==e||1==r&&3==e?-1:1),E=0==r?D:0,_=1==r?D:0;P.font=n.font[0],P.fillStyle=n.stroke||"#000",P.textAlign=M>0?Y:0>M?"right":0==r?"center":3==e?"right":Y,P.textBaseline=M||1==r?"middle":2==e?T:"bottom";var z=1.5*n.font[1];if(y.forEach((function(n,t){0==r?_=d[t]:E=d[t],(""+n).split(/\n/gm).forEach((function(n,t){M?(P.save(),P.translate(_,E+t*z),P.rotate(M),P.fillText(n,0,0),P.restore()):P.fillText(n,_,E+t*z)}))})),n.label){P.save();var F=i(n._lpos*W);1==r?(_=E=0,P.translate(F,i(st+ct/2)),P.rotate((3==e?-c:c)/2)):(_=i(ut+ft/2),E=F),P.font=n.labelFont[0],P.textAlign="center",P.textBaseline=2==e?T:"bottom",P.fillText(n.label,_,E),P.restore()}w.show&&Ft(d,r,e,S,b,g(w[k]*W),w.stroke);var A=n.grid;A.show&&Ft(d,r,0==r?2:1,0==r?st:ut,0==r?ct:ft,g(A[k]*W),A.stroke,A.dash)}}})),ge("drawAxes")}(),function(){j.forEach((function(n,t){if(t>0&&n.show&&null==n._paths){var r=function(n){for(var t=h(vt-1,0,$n-1),e=h(ht+1,0,$n-1);null==n[t]&&t>0;)t--;for(;null==n[e]&&$n-1>e;)e++;return[t,e]}(e[t]);n._paths=n.paths(s,t,r[0],r[1])}})),j.forEach((function(n,t){t>0&&n.show&&(n._paths&&function(n){var t=j[n];if(1==Et){var e=t._paths,r=e.stroke,o=e.fill,i=e.clip,a=g(t[k]*W),l=a%2/2;xt(t.stroke,a,t.dash,t.fill),P.globalAlpha=t.alpha,P.translate(l,l),P.save();var u=ut,s=st,f=ft,c=ct,v=a*W/2;0==t.min&&(c+=v),0==t.max&&(s-=v,c+=v),P.beginPath(),P.rect(u,s,f,c),P.clip(),null!=i&&P.clip(i),t.band?(P.fill(r),a&&P.stroke(r)):(a&&P.stroke(r),null!=t.fill&&P.fill(o)),P.restore(),P.translate(-l,-l),P.globalAlpha=1}t.band&&(Et*=-1)}(t),n.points.show(s,t,vt,ht)&&function(n){var t=j[n],r=t.points,o=g(r.width*W),a=o%2/2,l=r.width>0,u=(r.size-r.width)/2*W,s=g(2*u);P.translate(a,a),P.save(),P.beginPath(),P.rect(ut-s,st-s,ft+2*s,ct+2*s),P.clip(),P.globalAlpha=t.alpha;for(var f=new Path2D,v=vt;ht>=v;v++)if(null!=e[n][v]){var h=i(Hn(e[0][v],J[nt],ft,ut)),m=i(Cn(e[n][v],J[t.scale],ct,st));f.moveTo(h+u,m),f.arc(h,m,u,0,2*c)}xt(r.stroke||t.stroke||"#000",o,null,r.fill||(l?"#fff":t.stroke||"#000")),P.fill(f),l&&P.stroke(f),P.globalAlpha=1,P.restore(),P.translate(-a,-a)}(t),ge("drawSeries",t))}))}(),yt=!0,ge("draw"))}function Ht(t,r){var o=J[t];if(null==o.from){if(t==nt&&(2==o.distr&&(r.min=n(r.min,e[0]),r.max=n(r.max,e[0])),o.time&&G[0].show&&r.max>r.min&&.001>zt(G[0],r.min,r.max,ot)[0]))return;un[t]=r,yt=!1,bt(),!yt&&Ct(),yt=!1}}s.redraw=function(n){!1!==n?Jt(nt,J[nt].min,J[nt].max):Ct()},s.setScale=Ht;var Pt=!1,Nt=Un.drag,Vt=Nt.x,Lt=Nt.y;if(Un.show){var It="cursor-";Un.x&&(Yt=Un.left,Mt=C(It+"x",B)),Un.y&&(Dt=Un.top,kt=C(It+"y",B))}var Bt=s.select=M({show:!0,left:0,width:0,top:0,height:0},t.select),Rt=Bt.show?C("select",B):null;function jt(n,t){if(Bt.show){for(var e in n)F(Rt,e,Bt[e]=n[e]);!1!==t&&ge("setSelect")}}function Gt(n){var t=yn?Bn[n][0].parentNode:null;j[n].show?t&&function(n){n.classList.remove("off")}(t):(t&&z(t,"off"),Xn.length>1&&H(Xn[n],0,-10))}function Jt(n,t,e){Ht(n,{min:t,max:e})}function Ut(n,t,e){var r=j[n];if(null!=t.focus&&function(n){n!=Xt&&(j.forEach((function(t,e){!function(n,t){var e=j[n];Ot(n,t),e.band&&Ot(j[n+1].band?n+1:n-1,t)}(e,null==n||0==e||e==n?1:On.alpha)})),Xt=n,Ct())}(n),null!=t.show){if(r.show=t.show,Gt(n),r.band){var o=j[n+1]&&j[n+1].band?n+1:n-1;j[o].show=r.show,Gt(o)}Jt(nt,J[nt].min,J[nt].max)}ge("setSeries",n,t),e&&be.pub("setSeries",s,n,t)}function Ot(n,t){j[n].alpha=t,Bn&&(Bn[n][0].parentNode.style.opacity=t)}s.setSelect=jt,s.setSeries=Ut;var qt=Array(j.length),Xt=null;function Zt(n,t){var e=ot;t!=nt&&(n=(e=it)-n);var r=J[t];return r.min+n/e*(r.max-r.min)}function Kt(t){return n(Zt(t,nt),e[0],vt,ht)}yn&&qn&&N("mouseleave",gn,(function(){Un.locked||(Ut(null,{focus:!1},xe.setSeries),oe())})),s.valToIdx=function(t){return n(t,e[0])},s.posToIdx=Kt,s.posToVal=Zt,s.valToPos=function(n,t,e){return t==nt?Hn(n,J[t],e?ft:ot,e?ut:0):Cn(n,J[t],e?ct:it,e?st:0)};var Qt=!1,$t=!1,ne=!1,te=!1;function ee(n){Qt=!0,n(s),Qt=!1,ne&&bt(),te&&oe(),$t&&!yt&&Ct(),ne=te=$t=yt=Qt}s.batch=ee,s.setCursor=function(n){Yt=n.left,Dt=n.top,oe()};var re=0;function oe(n,t){if(Qt)te=!0;else{var o;if(re=0,Un.show&&(Un.x&&H(Mt,i(Yt),0),Un.y&&H(kt,0,i(Dt))),0>Yt||0==$n||vt>ht){o=null;for(var a=0;j.length>a;a++)if(a>0&&(qt[a]=1/0,Xn.length>1&&H(Xn[a],-10,-10)),yn){if(0==a&&Rn)continue;for(var u=0;Bn[a].length>u;u++)Bn[a][u].firstChild.nodeValue="--"}qn&&Ut(null,{focus:!0},xe.setSeries)}else{o=Kt(Yt);for(var f=g(Hn(e[0][o],J[nt],ot,0)),c=0;j.length>c;c++){var v=j[c];if(c>0&&v.show){var h=e[c][o],m=null==h?-10:g(Cn(h,J[v.scale],it,0));qt[c]=m>0?r(m-Dt):1/0,Xn.length>1&&H(Xn[c],f,m)}else qt[c]=1/0;if(yn){if(0==c&&Rn)continue;var p=0==c&&2==tt?pt:e[c],d=Rn?v.values(s,c,o):{_:v.value(s,p[o],c,o)},x=0;for(var w in d)Bn[c][x++].firstChild.nodeValue=d[w]}}}if(Bt.show&&Pt){var b=r(Yt-St),y=r(Dt-Tt);if(null!=t){var M=xe.scales,D=M[0],E=M[1],_=t.cursor.drag;if(Vt=_._x,Lt=_._y,D){var W=J[D],z=t.posToVal(t.select[Y],D),A=t.posToVal(t.select[Y]+t.select[k],D);Bt[Y]=Hn(z,W,ot,0),Bt[k]=r(Bt[Y]-Hn(A,W,ot,0)),F(Rt,Y,Bt[Y]),F(Rt,k,Bt[k]),E||(F(Rt,T,Bt.top=0),F(Rt,S,Bt[S]=it))}if(E){var C=J[E],P=t.posToVal(t.select.top,E),N=t.posToVal(t.select.top+t.select[S],E);Bt.top=Cn(P,C,it,0),Bt[S]=r(Bt.top-Cn(N,C,it,0)),F(Rt,T,Bt.top),F(Rt,S,Bt[S]),D||(F(Rt,Y,Bt[Y]=0),F(Rt,k,Bt[k]=ot))}}else{Vt=Nt.x&&b>=Nt.dist,Lt=Nt.y&&y>=Nt.dist;var V=Nt.uni;if(null!=V?Vt&&Lt&&(Lt=y>=V,(Vt=b>=V)||Lt||(y>b?Lt=!0:Vt=!0)):Nt.x&&Nt.y&&(Vt||Lt)&&(Vt=Lt=!0),Vt){var L=l(St,Yt);F(Rt,Y,Bt[Y]=L),F(Rt,k,Bt[k]=b),Lt||(F(Rt,T,Bt.top=0),F(Rt,S,Bt[S]=it))}if(Lt){var I=l(Tt,Dt);F(Rt,T,Bt.top=I),F(Rt,S,Bt[S]=y),Vt||(F(Rt,Y,Bt[Y]=0),F(Rt,k,Bt[k]=ot))}Vt||Lt||(F(Rt,S,Bt[S]=0),F(Rt,k,Bt[k]=0))}}if(Un.idx=o,Un.left=Yt,Un.top=Dt,Nt._x=Vt,Nt._y=Lt,null!=n&&(be.pub("mousemove",s,Yt,Dt,ot,it,o),qn)){var B=l.apply(null,qt),G=null;B>On.prox||qt.some((function(n,t){if(n==B)return G=t})),Ut(G,{focus:!0},xe.setSeries)}R&&ge("setCursor")}}var ie=null;function ae(){ie=B.getBoundingClientRect()}function le(n,t,e,r,o,i){Un.locked||(ue(n,t,e,r,o,i,0,!1,null!=n),null!=n?0==re&&(re=D(oe)):oe(null,t))}function ue(n,t,e,r,o,i,a,l,u){if(null!=n)e=n.clientX-ie.left,r=n.clientY-ie.top;else{if(0>e||0>r)return Yt=-10,void(Dt=-10);var s=xe.scales,f=s[0],c=s[1];e=null!=f?Hn(t.posToVal(e,f),J[f],ot,0):ot*(e/o),r=null!=c?Cn(t.posToVal(r,c),J[c],it,0):it*(r/i)}u&&(e>1&&ot-1>e||(e=v(e,ot)),r>1&&it-1>r||(r=v(r,it))),l?(St=e,Tt=r):(Yt=e,Dt=r)}function se(){jt({width:0,height:0},!1)}function fe(n,t,e,r,o,i){(null!=t||Ln(n))&&(Pt=!0,Vt=Lt=Nt._x=Nt._y=!1,ue(n,t,e,r,o,i,0,!0,!1),null!=n&&(N("mouseup",E,ce),be.pub("mousedown",s,St,Tt,ot,it,null)))}function ce(n,t,e,r,o,i){if(null!=t||Ln(n)){Pt=Nt._x=Nt._y=!1,ue(n,t,e,r,o,i,0,!1,!0);var a=Bt[k]>0||Bt[S]>0;a&&jt(Bt),Nt.setScale&&a?(ee((function(){if(Vt&&Jt(nt,Zt(Bt[Y],nt),Zt(Bt[Y]+Bt[k],nt)),Lt)for(var n in J)n!=nt&&null==J[n].from&&Jt(n,Zt(Bt.top+Bt[S],n),Zt(Bt.top,n))})),se()):Un.lock&&(Un.locked=!Un.locked,Un.locked||oe())}null!=n&&(V("mouseup",E,ce),be.pub("mouseup",s,Yt,Dt,ot,it,null))}function ve(){if(!Un.locked){var n=Pt;if(Pt){var t=!0,e=!0;if(Vt&&Lt&&(t=10>=Yt||Yt>=ot-10,e=10>=Dt||Dt>=it-10),Vt&&t){var r=Yt,o=ot-Yt,i=l(r,o);i==r&&(Yt=0),i==o&&(Yt=ot)}if(Lt&&e){var a=Dt,u=it-Dt,s=l(a,u);s==a&&(Dt=0),s==u&&(Dt=it)}oe(1),Pt=!1}Yt=-10,Dt=-10,oe(1),n&&(Pt=n)}}function he(n){gt(),se(),null!=n&&be.pub("dblclick",s,Yt,Dt,ot,it,null)}var me,pe={};pe.mousedown=fe,pe.mousemove=le,pe.mouseup=ce,pe.dblclick=he,pe.setSeries=function(n,t,e,r){Ut(e,r)},Un.show&&(N("mousedown",B,fe),N("mousemove",B,le),N("mouseenter",B,ae),N("mouseleave",B,(function(){D(ve)})),N("dblclick",B,he),me=function(n){var t=null;function e(){t=null,n()}return function(){clearTimeout(t),t=setTimeout(e,100)}}(ae),N("resize",_,me),N("scroll",_,me),s.syncRect=ae);var de=s.hooks=t.hooks||{};function ge(n,t,e){n in de&&de[n].forEach((function(n){n.call(null,s,t,e)}))}(t.plugins||[]).forEach((function(n){for(var t in n.hooks)de[t]=(de[t]||[]).concat(n.hooks[t])}));var xe=M({key:null,setSeries:!1,scales:[nt,null]},Un.sync),we=xe.key,be=null!=we?Wn[we]=Wn[we]||zn():zn();function ye(){wt(t[k],t[S]),ge("init",t,e),dt(e||t.data,!1),un[nt]?Ht(nt,un[nt]):gt(),jt(Bt,!1),R=!0,ge("ready")}return be.sub(s),s.pub=function(n,t,e,r,o,i,a){pe[n](null,t,e,r,o,i,a)},s.destroy=function(){be.unsub(s),V("resize",_,me),V("scroll",_,me),f.remove(),ge("destroy")},a?a instanceof HTMLElement?(a.appendChild(f),ye()):a(s,ye):ye(),s}return Bn.assign=M,Bn.rangeNum=t,Bn.fmtDate=O,Bn.tzDate=function(n,t){var e=new Date(n.toLocaleString("en-US",{timeZone:t}));return e.setMilliseconds(n.getMilliseconds()),e},Bn}();
{
"name": "uplot",
"version": "1.0.8",
"version": "1.0.9",
"description": "A small, fast chart for time series, lines, areas, ohlc & bars",
"main": "./dist/uPlot.cjs.js",
"module": "./dist/uPlot.esm.js",
"typings": "./dist/uPlot.esm.d.ts",
"typings": "./dist/uPlot.d.ts",
"scripts": {

@@ -42,7 +42,7 @@ "build": "rollup -c",

"devDependencies": {
"rollup": "^2.7.6",
"rollup": "^2.11.2",
"rollup-plugin-buble": "^0.19.8",
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-terser": "^5.3.0"
"rollup-plugin-terser": "^6.1.0"
}
}

@@ -8,3 +8,3 @@ ## 📈 μPlot

μPlot is a [fast, memory-efficient](#performance) [Canvas 2D](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D)-based chart for plotting [time series](https://en.wikipedia.org/wiki/Time_series), lines, areas, ohlc & bars; from a cold start it can create an interactive chart containing 150,000 data points in 135ms, scaling linearly at ~3,300 pts/ms. In addition to fast initial render, the zooming and cursor performance is by far the best of any similar charting lib; at < 25 KB, it's likely the smallest and fastest time series plotter that doesn't make use of [context-limited](https://bugs.chromium.org/p/chromium/issues/detail?id=771792) WebGL shaders or WASM, both of which have much higher startup cost and code size.
μPlot is a [fast, memory-efficient](#performance) [Canvas 2D](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D)-based chart for plotting [time series](https://en.wikipedia.org/wiki/Time_series), lines, areas, ohlc & bars; from a cold start it can create an interactive chart containing 150,000 data points in 135ms, scaling linearly at [~25,000 pts/ms](https://leeoniya.github.io/uPlot/bench/uPlot-10M.html). In addition to fast initial render, the zooming and cursor performance is by far the best of any similar charting lib; at < 25 KB, it's likely the smallest and fastest time series plotter that doesn't make use of [context-limited](https://bugs.chromium.org/p/chromium/issues/detail?id=771792) WebGL shaders or WASM, both of which have much higher startup cost and code size.

@@ -82,2 +82,3 @@ <h3 align="center">166,650 point bench: <a href="https://leeoniya.github.io/uPlot/bench/uPlot.html">https://leeoniya.github.io/uPlot/bench/uPlot.html</a></h3>

| <a href="https://leeoniya.github.io/uPlot/bench/Chart.js.html">Chart.js</a> | 245 KB | 695 ms | 755 7 6 185 | 78 MB 78 MB | 6230 4 10 3009 |
| <a href="https://leeoniya.github.io/uPlot/bench/Plotly.js.html">Plotly.js</a> | 3400 KB | 492 ms | 884 11 2 90 | 51 MB 48 MB | 1676 242 61 234 |
| <a href="https://leeoniya.github.io/uPlot/bench/ECharts.html">ECharts</a> | 752 KB | --- ms | 777 5 11 1132 | 120 MB 81 MB | 2425 60 54 7650 |

@@ -98,3 +99,2 @@ | <a href="https://leeoniya.github.io/uPlot/bench/ApexCharts.html">ApexCharts</a> | 458 KB | --- ms | 2357 31 69 64 | 162 MB 96 MB | 2179 219 7806 59 |

- dc.js
- Plotly
- MetricsGraphics

@@ -101,0 +101,0 @@ - rickshaw

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc