update plugin files

This commit is contained in:
REJack 2021-02-17 08:25:25 +01:00
parent 378a39ea12
commit 1c856b0d8c
16 changed files with 542 additions and 11665 deletions

View file

@ -9759,7 +9759,7 @@ var dropzone_Dropzone = /*#__PURE__*/function (_Emitter) {
dropzone_Dropzone.initClass();
dropzone_Dropzone.version = "5.7.4"; // This is a map of options for your different dropzones. Add configurations
dropzone_Dropzone.version = "5.7.6"; // This is a map of options for your different dropzones. Add configurations
// to this object for your different dropzone elemens.
//
// Example:
@ -9867,9 +9867,9 @@ dropzone_Dropzone.discover = function () {
return result;
}();
}; // Since the whole Drag'n'Drop API is pretty new, some browsers implement it,
// but not correctly.
// So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know.
}; // Some browsers support drag and drog functionality, but not correctly.
//
// So I created a blocklist of userAgents. Yes, yes. Browser sniffing, I know.
// But what to do when browsers *theoretically* support an API, but crash
// when using it.
//
@ -9877,10 +9877,9 @@ dropzone_Dropzone.discover = function () {
//
// ** It should only be used on browser that *do* support the API, but
// incorrectly **
//
dropzone_Dropzone.blacklistedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.
dropzone_Dropzone.blockedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.
/opera.*(Macintosh|Windows Phone).*version\/12/i]; // Checks if the browser is supported
dropzone_Dropzone.isBrowserSupported = function () {
@ -9890,8 +9889,14 @@ dropzone_Dropzone.isBrowserSupported = function () {
if (!("classList" in document.createElement("a"))) {
capableBrowser = false;
} else {
// The browser supports the API, but may be blacklisted.
var _iterator25 = dropzone_createForOfIteratorHelper(dropzone_Dropzone.blacklistedBrowsers, true),
if (dropzone_Dropzone.blacklistedBrowsers !== undefined) {
// Since this has been renamed, this makes sure we don't break older
// configuration.
dropzone_Dropzone.blockedBrowsers = dropzone_Dropzone.blacklistedBrowsers;
} // The browser supports the API, but may be blocked.
var _iterator25 = dropzone_createForOfIteratorHelper(dropzone_Dropzone.blockedBrowsers, true),
_step25;
try {

View file

@ -9759,7 +9759,7 @@ var dropzone_Dropzone = /*#__PURE__*/function (_Emitter) {
dropzone_Dropzone.initClass();
dropzone_Dropzone.version = "5.7.4"; // This is a map of options for your different dropzones. Add configurations
dropzone_Dropzone.version = "5.7.6"; // This is a map of options for your different dropzones. Add configurations
// to this object for your different dropzone elemens.
//
// Example:
@ -9867,9 +9867,9 @@ dropzone_Dropzone.discover = function () {
return result;
}();
}; // Since the whole Drag'n'Drop API is pretty new, some browsers implement it,
// but not correctly.
// So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know.
}; // Some browsers support drag and drog functionality, but not correctly.
//
// So I created a blocklist of userAgents. Yes, yes. Browser sniffing, I know.
// But what to do when browsers *theoretically* support an API, but crash
// when using it.
//
@ -9877,10 +9877,9 @@ dropzone_Dropzone.discover = function () {
//
// ** It should only be used on browser that *do* support the API, but
// incorrectly **
//
dropzone_Dropzone.blacklistedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.
dropzone_Dropzone.blockedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.
/opera.*(Macintosh|Windows Phone).*version\/12/i]; // Checks if the browser is supported
dropzone_Dropzone.isBrowserSupported = function () {
@ -9890,8 +9889,14 @@ dropzone_Dropzone.isBrowserSupported = function () {
if (!("classList" in document.createElement("a"))) {
capableBrowser = false;
} else {
// The browser supports the API, but may be blacklisted.
var _iterator25 = dropzone_createForOfIteratorHelper(dropzone_Dropzone.blacklistedBrowsers, true),
if (dropzone_Dropzone.blacklistedBrowsers !== undefined) {
// Since this has been renamed, this makes sure we don't break older
// configuration.
dropzone_Dropzone.blockedBrowsers = dropzone_Dropzone.blacklistedBrowsers;
} // The browser supports the API, but may be blocked.
var _iterator25 = dropzone_createForOfIteratorHelper(dropzone_Dropzone.blockedBrowsers, true),
_step25;
try {

View file

@ -1 +1 @@
.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:0.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}
.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/*!
* sweetalert2 v10.14.0
* sweetalert2 v10.14.1
* Released under the MIT License.
*/
(function (global, factory) {
@ -363,7 +363,7 @@
};
var getIcon = function getIcon() {
var visibleIcon = getIcons().filter(function (icon) {
return isVisible(icon);
return icon.style.display !== 'none';
});
return visibleIcon.length ? visibleIcon[0] : null;
};
@ -3627,7 +3627,7 @@
};
});
SweetAlert.DismissReason = DismissReason;
SweetAlert.version = '10.14.0';
SweetAlert.version = '10.14.1';
var Swal = SweetAlert;
Swal["default"] = Swal;

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
/*!
* sweetalert2 v10.14.0
* sweetalert2 v10.14.1
* Released under the MIT License.
*/
(function (global, factory) {
@ -363,7 +363,7 @@
};
var getIcon = function getIcon() {
var visibleIcon = getIcons().filter(function (icon) {
return isVisible(icon);
return icon.style.display !== 'none';
});
return visibleIcon.length ? visibleIcon[0] : null;
};
@ -3627,7 +3627,7 @@
};
});
SweetAlert.DismissReason = DismissReason;
SweetAlert.version = '10.14.0';
SweetAlert.version = '10.14.1';
var Swal = SweetAlert;
Swal["default"] = Swal;

File diff suppressed because one or more lines are too long

View file

@ -4,7 +4,7 @@
*
* uPlot.js (μPlot)
* A small, fast chart for time series, lines, areas, ohlc & bars
* https://github.com/leeoniya/uPlot (v1.6.4)
* https://github.com/leeoniya/uPlot (v1.6.5)
*/
'use strict';
@ -110,6 +110,7 @@ function fixIncr(minIncr, maxIncr, minExp, maxExp) {
}
function rangeLog(min, max, base, fullMags) {
let logFn = base == 10 ? log10 : log2;
if (min == max) {
@ -129,8 +130,8 @@ function rangeLog(min, max, base, fullMags) {
max = minMaxIncrs[1];
}
else {
minExp = floor(logFn(min));
maxExp = floor(logFn(max));
minExp = floor(logFn(abs(min)));
maxExp = floor(logFn(abs(max)));
minMaxIncrs = fixIncr(pow(base, minExp), pow(base, maxExp), minExp, maxExp);
@ -141,6 +142,18 @@ function rangeLog(min, max, base, fullMags) {
return [min, max];
}
function rangeAsinh(min, max, base, fullMags) {
let minMax = rangeLog(min, max, base, fullMags);
if (min == 0)
minMax[0] = 0;
if (max == 0)
minMax[1] = 0;
return minMax;
}
const _eqRangePart = {
pad: 0,
soft: null,
@ -212,6 +225,7 @@ const fmtNum = new Intl.NumberFormat(navigator.language).format;
const M = Math;
const PI = M.PI;
const abs = M.abs;
const floor = M.floor;
const round = M.round;
@ -222,7 +236,8 @@ const pow = M.pow;
const sqrt = M.sqrt;
const log10 = M.log10;
const log2 = M.log2;
const PI = M.PI;
const sinh = (v, linthresh = 1) => M.sinh(v / linthresh);
const asinh = (v, linthresh = 1) => M.asinh(v / linthresh);
const inf = Infinity;
@ -541,9 +556,9 @@ function slice3(str) {
return str.slice(0, 3);
}
const days3 = days.map(slice3);
const days3 = days.map(slice3);
const months3 = months.map(slice3);
const months3 = months.map(slice3);
const engNames = {
MMMM: months,
@ -868,8 +883,8 @@ function genTimeStuffs(ms) {
];
}
const [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);
const [ timeIncrsS, _timeAxisStampsS, timeAxisSplitsS ] = genTimeStuffs(1e-3);
const [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);
const [ timeIncrsS, _timeAxisStampsS, timeAxisSplitsS ] = genTimeStuffs(1e-3);
// base 2
genIncrs(2, -53, 53, [1]);
@ -1145,6 +1160,7 @@ function numAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace,
return splits;
}
// this doesnt work for sin, which needs to come off from 0 independently in pos and neg dirs
function logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {
const splits = [];
@ -1173,6 +1189,18 @@ function logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace,
return splits;
}
function asinhAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {
let sc = self.scales[self.axes[axisIdx].scale];
let linthresh = sc.asinh;
let posSplits = scaleMax > linthresh ? logAxisSplits(self, axisIdx, max(linthresh, scaleMin), scaleMax, foundIncr) : [linthresh];
let zero = scaleMax >= 0 && scaleMin <= 0 ? [0] : [];
let negSplits = scaleMin < -linthresh ? logAxisSplits(self, axisIdx, max(linthresh, -scaleMax), -scaleMin, foundIncr): [linthresh];
return negSplits.reverse().map(v => -v).concat(zero, posSplits);
}
const RE_ALL = /./;
const RE_12357 = /[12357]/;
const RE_125 = /[125]/;
@ -1181,8 +1209,9 @@ const RE_1 = /1/;
function logAxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {
let axis = self.axes[axisIdx];
let scaleKey = axis.scale;
let sc = self.scales[scaleKey];
if (self.scales[scaleKey].log == 2)
if (sc.distr == 3 && sc.log == 2)
return splits;
let valToPos = self.valToPos;
@ -1198,7 +1227,7 @@ function logAxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {
RE_1
);
return splits.map(v => re.test(v) ? v : null);
return splits.map(v => ((sc.distr == 4 && v == 0) || re.test(v)) ? v : null);
}
function numSeriesVal(self, val) {
@ -1292,6 +1321,7 @@ const xScaleOpts = {
auto: true,
distr: 1,
log: 10,
asinh: 1,
min: null,
max: null,
dir: 1,
@ -1305,24 +1335,31 @@ const yScaleOpts = assign({}, xScaleOpts, {
const syncs = {};
function _sync(opts) {
let clients = [];
function _sync(key, opts) {
let s = syncs[key];
return {
sub(client) {
clients.push(client);
},
unsub(client) {
clients = clients.filter(c => c != client);
},
pub(type, self, x, y, w, h, i) {
if (clients.length > 1) {
clients.forEach(client => {
client != self && client.pub(type, self, x, y, w, h, i);
});
if (!s) {
let clients = [];
s = {
key,
sub(client) {
clients.push(client);
},
unsub(client) {
clients = clients.filter(c => c != client);
},
pub(type, self, x, y, w, h, i) {
for (let i = 0; i < clients.length; i++)
clients[i] != self && clients[i].pub(type, self, x, y, w, h, i);
}
}
};
};
if (key != null)
syncs[key] = s;
}
return s;
}
function orient(u, seriesIdx, cb) {
@ -1981,7 +2018,7 @@ function bars(opts) {
};
}
const linearPath = linear() ;
const linearPath = linear() ;
function setDefaults(d, xo, yo, initY) {
let d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));
@ -2012,6 +2049,12 @@ function snapLogY(self, dataMin, dataMax, scale) {
const snapLogX = snapLogY;
function snapAsinhY(self, dataMin, dataMax, scale) {
return dataMin == null ? nullMinMax : rangeAsinh(dataMin, dataMax, self.scales[scale].log, false);
}
const snapAsinhX = snapAsinhY;
// dim is logical (getClientBoundingRect) pixels, not canvas pixels
function findIncr(min, max, incrs, dim, minSpace) {
let pxPerUnit = dim / (max - min);
@ -2039,12 +2082,15 @@ function pxRatioFont(font) {
function uPlot(opts, data, then) {
const self = {};
// TODO: cache denoms & mins scale.cache = {r, min, }
function getValPct(val, scale) {
return (
scale.distr == 3
? log10((val > 0 ? val : scale.clamp(self, val, scale.min, scale.max, scale.key)) / scale.min) / log10(scale.max / scale.min)
: (val - scale.min) / (scale.max - scale.min)
let _val = (
scale.distr == 3 ? log10(val > 0 ? val : scale.clamp(self, val, scale.min, scale.max, scale.key)) :
scale.distr == 4 ? asinh(val, scale.asinh) :
val
);
return (_val - scale._min) / (scale._max - scale._min);
}
function getHPos(val, scale, dim, off) {
@ -2133,8 +2179,7 @@ function uPlot(opts, data, then) {
sc.key = scaleKey;
let isTime = sc.time;
let isLog = sc.distr == 3;
let isTime = sc.time;
let rn = sc.range;
@ -2144,11 +2189,17 @@ function uPlot(opts, data, then) {
rn = (self, dataMin, dataMax) => dataMin == null ? nullMinMax : rangeNum(dataMin, dataMax, cfg);
}
sc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ? (isLog ? snapLogX : snapNumX) : (isLog ? snapLogY : snapNumY)));
sc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ?
(sc.distr == 3 ? snapLogX : sc.distr == 4 ? snapAsinhX : snapNumX) :
(sc.distr == 3 ? snapLogY : sc.distr == 4 ? snapAsinhY : snapNumY)
));
sc.auto = fnOrSelf(sc.auto);
sc.clamp = fnOrSelf(sc.clamp || clampScale);
// caches for expensive ops like asinh() & log()
sc._min = sc._max = null;
}
}
}
@ -2225,15 +2276,15 @@ function uPlot(opts, data, then) {
}
// self.tz = opts.tz || Intl.DateTimeFormat().resolvedOptions().timeZone;
const _tzDate = (opts.tzDate || (ts => new Date(ts / ms)));
const _fmtDate = (opts.fmtDate || fmtDate);
const _tzDate = (opts.tzDate || (ts => new Date(ts / ms)));
const _fmtDate = (opts.fmtDate || fmtDate);
const _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));
const _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));
const _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));
const _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));
const _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));
const _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));
const legend = assign({show: true, live: true}, opts.legend);
const showLegend = legend.show;
const legend = assign({show: true, live: true}, opts.legend);
const showLegend = legend.show;
{
legend.width = fnOrSelf(ifNull(legend.width, legendWidth));
@ -2299,10 +2350,10 @@ function uPlot(opts, data, then) {
if (i > 0) {
onMouse("click", label, e => {
if ( cursor._lock)
if (cursor._lock)
return;
setSeries(series.indexOf(s), {show: !s.show}, syncOpts.setSeries);
setSeries(series.indexOf(s), {show: !s.show}, syncOpts.setSeries);
});
if (cursorFocus) {
@ -2509,7 +2560,7 @@ function uPlot(opts, data, then) {
});
}
const cursor = (self.cursor = assign({}, cursorOpts, opts.cursor));
const cursor = (self.cursor = assign({}, cursorOpts, opts.cursor));
{
cursor._lock = false;
@ -2523,8 +2574,8 @@ function uPlot(opts, data, then) {
points.fill = fnOrSelf(points.fill);
}
const focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);
const cursorFocus = focus.prox >= 0;
const focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);
const cursorFocus = focus.prox >= 0;
// series-intersection markers
let cursorPts = [null];
@ -2545,7 +2596,7 @@ function uPlot(opts, data, then) {
}
function initSeries(s, i) {
let isTime = scales[s.scale].time;
let isTime = scales[s.scale].time;
let sv = s.value;
s.value = isTime ? (isStr(sv) ? timeSeriesVal(_tzDate, timeSeriesStamp(sv, _fmtDate)) : sv || _timeSeriesVal) : sv || numSeriesVal;
@ -2578,7 +2629,7 @@ function uPlot(opts, data, then) {
if (showLegend)
legendRows.splice(i, 0, initLegendRow(s, i));
if ( cursor.show) {
if (cursor.show) {
let pt = initCursorPt(s, i);
pt && cursorPts.splice(i, 0, pt);
}
@ -2596,8 +2647,8 @@ function uPlot(opts, data, then) {
function delSeries(i) {
series.splice(i, 1);
showLegend && legendRows.splice(i, 1)[0][0].parentNode.remove();
cursorPts.length > 1 && cursorPts.splice(i, 1)[0].remove();
showLegend && legendRows.splice(i, 1)[0][0].parentNode.remove();
cursorPts.length > 1 && cursorPts.splice(i, 1)[0].remove();
// TODO: de-init no-longer-needed scales?
}
@ -2623,13 +2674,13 @@ function uPlot(opts, data, then) {
}
// also set defaults for incrs & values based on axis distr
let isTime = sc.time;
let isTime = sc.time;
axis.size = fnOrSelf(axis.size);
axis.space = fnOrSelf(axis.space);
axis.rotate = fnOrSelf(axis.rotate);
axis.incrs = fnOrSelf(axis.incrs || ( sc.distr == 2 ? wholeIncrs : (isTime ? (ms == 1 ? timeIncrsMs : timeIncrsS) : numIncrs)));
axis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : numAxisSplits));
axis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : sc.distr == 4 ? asinhAxisSplits : numAxisSplits));
axis.stroke = fnOrSelf(axis.stroke);
axis.grid.stroke = fnOrSelf(axis.grid.stroke);
@ -2647,7 +2698,7 @@ function uPlot(opts, data, then) {
) : av || numAxisVals
);
axis.filter = fnOrSelf(axis.filter || ( sc.distr == 3 ? logAxisValsFilt : retArg1));
axis.filter = fnOrSelf(axis.filter || ( sc.distr >= 3 ? logAxisValsFilt : retArg1));
axis.font = pxRatioFont(axis.font);
axis.labelFont = pxRatioFont(axis.labelFont);
@ -2750,6 +2801,8 @@ function uPlot(opts, data, then) {
else if (dataLen == 1) {
if (xScaleDistr == 3)
[_min, _max] = rangeLog(_min, _min, scaleX.log, false);
else if (xScaleDistr == 4)
[_min, _max] = rangeAsinh(_min, _min, scaleX.log, false);
else if (scaleX.time)
_max = _min + 86400 / ms;
else
@ -2881,6 +2934,12 @@ function uPlot(opts, data, then) {
if (sc.min != wsc.min || sc.max != wsc.max) {
sc.min = wsc.min;
sc.max = wsc.max;
let distr = sc.distr;
sc._min = distr == 3 ? log10(sc.min) : distr == 4 ? asinh(sc.min, sc.asinh) : sc.min;
sc._max = distr == 3 ? log10(sc.max) : distr == 4 ? asinh(sc.max, sc.asinh) : sc.max;
changed[k] = anyChanged = true;
}
}
@ -2897,7 +2956,7 @@ function uPlot(opts, data, then) {
fire("setScale", k);
}
if ( cursor.show)
if (cursor.show)
shouldSetCursor = true;
}
@ -3012,10 +3071,10 @@ function uPlot(opts, data, then) {
series.forEach((s, i) => {
if (i > 0 && s.show) {
if (s._paths)
drawPath(i);
drawPath(i);
if (s.points.show(self, i, i0, i1))
drawPoints(i);
drawPoints(i);
fire("drawSeries", i);
}
@ -3453,7 +3512,7 @@ function uPlot(opts, data, then) {
// shouldSetSelect = false;
// }
if ( cursor.show && shouldSetCursor) {
if (cursor.show && shouldSetCursor) {
updateCursor();
shouldSetCursor = false;
}
@ -3553,12 +3612,12 @@ function uPlot(opts, data, then) {
let dragging = false;
const drag = cursor.drag;
const drag = cursor.drag;
let dragX = drag.x;
let dragY = drag.y;
let dragX = drag.x;
let dragY = drag.y;
if ( cursor.show) {
if (cursor.show) {
if (cursor.x)
xCursor = placeDiv(CURSOR_X, over);
if (cursor.y)
@ -3607,7 +3666,7 @@ function uPlot(opts, data, then) {
label && remClass(label, OFF);
else {
label && addClass(label, OFF);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
}
}
@ -3626,7 +3685,7 @@ function uPlot(opts, data, then) {
if (opts.show != null) {
s.show = opts.show;
toggleDOM(i, opts.show);
toggleDOM(i, opts.show);
_setScale(s.scale, null, null);
commit();
@ -3634,7 +3693,7 @@ function uPlot(opts, data, then) {
fire("setSeries", i, opts);
pub && sync.pub("setSeries", self, i, opts);
pub && sync.pub("setSeries", self, i, opts);
}
self.setSeries = setSeries;
@ -3642,10 +3701,10 @@ function uPlot(opts, data, then) {
function _alpha(i, value) {
series[i].alpha = value;
if ( cursor.show && cursorPts[i])
if (cursor.show && cursorPts[i])
cursorPts[i].style.opacity = value;
if ( showLegend && legendRows[i])
if (showLegend && legendRows[i])
legendRows[i][0].parentNode.style.opacity = value;
}
@ -3700,17 +3759,19 @@ function uPlot(opts, data, then) {
if (sc.dir == -1)
pos = dim - pos;
let _min = sc.min,
_max = sc.max,
let _min = sc._min,
_max = sc._max,
pct = pos / dim;
if (sc.distr == 3) {
_min = log10(_min);
_max = log10(_max);
return pow(10, _min + (_max - _min) * pct);
}
else
return _min + (_max - _min) * pct;
let sv = _min + (_max - _min) * pct;
let distr = sc.distr;
return (
distr == 3 ? pow(10, sv) :
distr == 4 ? sinh(sv, sc.asinh) :
sv
);
}
function closestIdxFromXpos(pos) {
@ -3741,7 +3802,7 @@ function uPlot(opts, data, then) {
self.batch = batch;
(self.setCursor = opts => {
(self.setCursor = opts => {
mouseLeft1 = opts.left;
mouseTop1 = opts.top;
// assign(cursor, opts);
@ -3792,7 +3853,7 @@ function uPlot(opts, data, then) {
for (let i = 0; i < series.length; i++) {
if (i > 0) {
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
}
if (showLegend && legend.live) {
@ -3849,7 +3910,7 @@ function uPlot(opts, data, then) {
vPos = xPos2;
}
cursorPts.length > 1 && trans(cursorPts[i], hPos, vPos, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], hPos, vPos, plotWidCss, plotHgtCss);
}
if (showLegend && legend.live) {
@ -3945,7 +4006,7 @@ function uPlot(opts, data, then) {
let uni = drag.uni;
if (uni != null) {
// only calc drag status if they pass the dist thresh
// only calc drag status if they pass the dist asinh
if (dragX && dragY) {
dragX = rawDX >= uni;
dragY = rawDY >= uni;
@ -4279,7 +4340,7 @@ function uPlot(opts, data, then) {
let deb;
if ( cursor.show) {
if (cursor.show) {
onMouse(mousedown, over, mouseDown);
onMouse(mousemove, over, mouseMove);
onMouse(mouseenter, over, syncRect);
@ -4311,28 +4372,28 @@ function uPlot(opts, data, then) {
hooks[evName] = (hooks[evName] || []).concat(p.hooks[evName]);
});
const syncOpts = assign({
const syncOpts = assign({
key: null,
setSeries: false,
scales: [xScaleKey, null]
}, cursor.sync);
const syncKey = syncOpts.key;
const syncKey = syncOpts.key;
const sync = (syncKey != null ? (syncs[syncKey] = syncs[syncKey] || _sync()) : _sync());
const sync = _sync(syncKey);
sync.sub(self);
sync.sub(self);
function pub(type, src, x, y, w, h, i) {
events[type](null, src, x, y, w, h, i);
}
(self.pub = pub);
(self.pub = pub);
function destroy() {
sync.unsub(self);
off(resize, win, deb);
off(scroll, win, deb);
sync.unsub(self);
off(resize, win, deb);
off(scroll, win, deb);
root.remove();
fire("destroy");
}
@ -4372,6 +4433,7 @@ uPlot.assign = assign;
uPlot.fmtNum = fmtNum;
uPlot.rangeNum = rangeNum;
uPlot.rangeLog = rangeLog;
uPlot.rangeAsinh = rangeAsinh;
uPlot.orient = orient;
{
@ -4383,16 +4445,20 @@ uPlot.orient = orient;
uPlot.tzDate = tzDate;
}
{
uPlot.sync = _sync;
}
{
uPlot.addGap = addGap;
uPlot.clipGaps = clipGaps;
let paths = uPlot.paths = {};
(paths.linear = linear);
(paths.spline = spline);
(paths.stepped = stepped);
(paths.bars = bars);
(paths.linear = linear);
(paths.spline = spline);
(paths.stepped = stepped);
(paths.bars = bars);
}
module.exports = uPlot;

View file

@ -4,7 +4,7 @@
*
* uPlot.js (μPlot)
* A small, fast chart for time series, lines, areas, ohlc & bars
* https://github.com/leeoniya/uPlot (v1.6.4)
* https://github.com/leeoniya/uPlot (v1.6.5)
*/
const FEAT_TIME = true;
@ -108,6 +108,7 @@ function fixIncr(minIncr, maxIncr, minExp, maxExp) {
}
function rangeLog(min, max, base, fullMags) {
let logFn = base == 10 ? log10 : log2;
if (min == max) {
@ -127,8 +128,8 @@ function rangeLog(min, max, base, fullMags) {
max = minMaxIncrs[1];
}
else {
minExp = floor(logFn(min));
maxExp = floor(logFn(max));
minExp = floor(logFn(abs(min)));
maxExp = floor(logFn(abs(max)));
minMaxIncrs = fixIncr(pow(base, minExp), pow(base, maxExp), minExp, maxExp);
@ -139,6 +140,18 @@ function rangeLog(min, max, base, fullMags) {
return [min, max];
}
function rangeAsinh(min, max, base, fullMags) {
let minMax = rangeLog(min, max, base, fullMags);
if (min == 0)
minMax[0] = 0;
if (max == 0)
minMax[1] = 0;
return minMax;
}
const _eqRangePart = {
pad: 0,
soft: null,
@ -210,6 +223,7 @@ const fmtNum = new Intl.NumberFormat(navigator.language).format;
const M = Math;
const PI = M.PI;
const abs = M.abs;
const floor = M.floor;
const round = M.round;
@ -220,7 +234,8 @@ const pow = M.pow;
const sqrt = M.sqrt;
const log10 = M.log10;
const log2 = M.log2;
const PI = M.PI;
const sinh = (v, linthresh = 1) => M.sinh(v / linthresh);
const asinh = (v, linthresh = 1) => M.asinh(v / linthresh);
const inf = Infinity;
@ -539,9 +554,9 @@ function slice3(str) {
return str.slice(0, 3);
}
const days3 = days.map(slice3);
const days3 = days.map(slice3);
const months3 = months.map(slice3);
const months3 = months.map(slice3);
const engNames = {
MMMM: months,
@ -866,8 +881,8 @@ function genTimeStuffs(ms) {
];
}
const [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);
const [ timeIncrsS, _timeAxisStampsS, timeAxisSplitsS ] = genTimeStuffs(1e-3);
const [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);
const [ timeIncrsS, _timeAxisStampsS, timeAxisSplitsS ] = genTimeStuffs(1e-3);
// base 2
genIncrs(2, -53, 53, [1]);
@ -1143,6 +1158,7 @@ function numAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace,
return splits;
}
// this doesnt work for sin, which needs to come off from 0 independently in pos and neg dirs
function logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {
const splits = [];
@ -1171,6 +1187,18 @@ function logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace,
return splits;
}
function asinhAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {
let sc = self.scales[self.axes[axisIdx].scale];
let linthresh = sc.asinh;
let posSplits = scaleMax > linthresh ? logAxisSplits(self, axisIdx, max(linthresh, scaleMin), scaleMax, foundIncr) : [linthresh];
let zero = scaleMax >= 0 && scaleMin <= 0 ? [0] : [];
let negSplits = scaleMin < -linthresh ? logAxisSplits(self, axisIdx, max(linthresh, -scaleMax), -scaleMin, foundIncr): [linthresh];
return negSplits.reverse().map(v => -v).concat(zero, posSplits);
}
const RE_ALL = /./;
const RE_12357 = /[12357]/;
const RE_125 = /[125]/;
@ -1179,8 +1207,9 @@ const RE_1 = /1/;
function logAxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {
let axis = self.axes[axisIdx];
let scaleKey = axis.scale;
let sc = self.scales[scaleKey];
if (self.scales[scaleKey].log == 2)
if (sc.distr == 3 && sc.log == 2)
return splits;
let valToPos = self.valToPos;
@ -1196,7 +1225,7 @@ function logAxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {
RE_1
);
return splits.map(v => re.test(v) ? v : null);
return splits.map(v => ((sc.distr == 4 && v == 0) || re.test(v)) ? v : null);
}
function numSeriesVal(self, val) {
@ -1290,6 +1319,7 @@ const xScaleOpts = {
auto: true,
distr: 1,
log: 10,
asinh: 1,
min: null,
max: null,
dir: 1,
@ -1303,24 +1333,31 @@ const yScaleOpts = assign({}, xScaleOpts, {
const syncs = {};
function _sync(opts) {
let clients = [];
function _sync(key, opts) {
let s = syncs[key];
return {
sub(client) {
clients.push(client);
},
unsub(client) {
clients = clients.filter(c => c != client);
},
pub(type, self, x, y, w, h, i) {
if (clients.length > 1) {
clients.forEach(client => {
client != self && client.pub(type, self, x, y, w, h, i);
});
if (!s) {
let clients = [];
s = {
key,
sub(client) {
clients.push(client);
},
unsub(client) {
clients = clients.filter(c => c != client);
},
pub(type, self, x, y, w, h, i) {
for (let i = 0; i < clients.length; i++)
clients[i] != self && clients[i].pub(type, self, x, y, w, h, i);
}
}
};
};
if (key != null)
syncs[key] = s;
}
return s;
}
function orient(u, seriesIdx, cb) {
@ -1979,7 +2016,7 @@ function bars(opts) {
};
}
const linearPath = linear() ;
const linearPath = linear() ;
function setDefaults(d, xo, yo, initY) {
let d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));
@ -2010,6 +2047,12 @@ function snapLogY(self, dataMin, dataMax, scale) {
const snapLogX = snapLogY;
function snapAsinhY(self, dataMin, dataMax, scale) {
return dataMin == null ? nullMinMax : rangeAsinh(dataMin, dataMax, self.scales[scale].log, false);
}
const snapAsinhX = snapAsinhY;
// dim is logical (getClientBoundingRect) pixels, not canvas pixels
function findIncr(min, max, incrs, dim, minSpace) {
let pxPerUnit = dim / (max - min);
@ -2037,12 +2080,15 @@ function pxRatioFont(font) {
function uPlot(opts, data, then) {
const self = {};
// TODO: cache denoms & mins scale.cache = {r, min, }
function getValPct(val, scale) {
return (
scale.distr == 3
? log10((val > 0 ? val : scale.clamp(self, val, scale.min, scale.max, scale.key)) / scale.min) / log10(scale.max / scale.min)
: (val - scale.min) / (scale.max - scale.min)
let _val = (
scale.distr == 3 ? log10(val > 0 ? val : scale.clamp(self, val, scale.min, scale.max, scale.key)) :
scale.distr == 4 ? asinh(val, scale.asinh) :
val
);
return (_val - scale._min) / (scale._max - scale._min);
}
function getHPos(val, scale, dim, off) {
@ -2131,8 +2177,7 @@ function uPlot(opts, data, then) {
sc.key = scaleKey;
let isTime = sc.time;
let isLog = sc.distr == 3;
let isTime = sc.time;
let rn = sc.range;
@ -2142,11 +2187,17 @@ function uPlot(opts, data, then) {
rn = (self, dataMin, dataMax) => dataMin == null ? nullMinMax : rangeNum(dataMin, dataMax, cfg);
}
sc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ? (isLog ? snapLogX : snapNumX) : (isLog ? snapLogY : snapNumY)));
sc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ?
(sc.distr == 3 ? snapLogX : sc.distr == 4 ? snapAsinhX : snapNumX) :
(sc.distr == 3 ? snapLogY : sc.distr == 4 ? snapAsinhY : snapNumY)
));
sc.auto = fnOrSelf(sc.auto);
sc.clamp = fnOrSelf(sc.clamp || clampScale);
// caches for expensive ops like asinh() & log()
sc._min = sc._max = null;
}
}
}
@ -2223,15 +2274,15 @@ function uPlot(opts, data, then) {
}
// self.tz = opts.tz || Intl.DateTimeFormat().resolvedOptions().timeZone;
const _tzDate = (opts.tzDate || (ts => new Date(ts / ms)));
const _fmtDate = (opts.fmtDate || fmtDate);
const _tzDate = (opts.tzDate || (ts => new Date(ts / ms)));
const _fmtDate = (opts.fmtDate || fmtDate);
const _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));
const _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));
const _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));
const _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));
const _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));
const _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));
const legend = assign({show: true, live: true}, opts.legend);
const showLegend = legend.show;
const legend = assign({show: true, live: true}, opts.legend);
const showLegend = legend.show;
{
legend.width = fnOrSelf(ifNull(legend.width, legendWidth));
@ -2297,10 +2348,10 @@ function uPlot(opts, data, then) {
if (i > 0) {
onMouse("click", label, e => {
if ( cursor._lock)
if (cursor._lock)
return;
setSeries(series.indexOf(s), {show: !s.show}, syncOpts.setSeries);
setSeries(series.indexOf(s), {show: !s.show}, syncOpts.setSeries);
});
if (cursorFocus) {
@ -2507,7 +2558,7 @@ function uPlot(opts, data, then) {
});
}
const cursor = (self.cursor = assign({}, cursorOpts, opts.cursor));
const cursor = (self.cursor = assign({}, cursorOpts, opts.cursor));
{
cursor._lock = false;
@ -2521,8 +2572,8 @@ function uPlot(opts, data, then) {
points.fill = fnOrSelf(points.fill);
}
const focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);
const cursorFocus = focus.prox >= 0;
const focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);
const cursorFocus = focus.prox >= 0;
// series-intersection markers
let cursorPts = [null];
@ -2543,7 +2594,7 @@ function uPlot(opts, data, then) {
}
function initSeries(s, i) {
let isTime = scales[s.scale].time;
let isTime = scales[s.scale].time;
let sv = s.value;
s.value = isTime ? (isStr(sv) ? timeSeriesVal(_tzDate, timeSeriesStamp(sv, _fmtDate)) : sv || _timeSeriesVal) : sv || numSeriesVal;
@ -2576,7 +2627,7 @@ function uPlot(opts, data, then) {
if (showLegend)
legendRows.splice(i, 0, initLegendRow(s, i));
if ( cursor.show) {
if (cursor.show) {
let pt = initCursorPt(s, i);
pt && cursorPts.splice(i, 0, pt);
}
@ -2594,8 +2645,8 @@ function uPlot(opts, data, then) {
function delSeries(i) {
series.splice(i, 1);
showLegend && legendRows.splice(i, 1)[0][0].parentNode.remove();
cursorPts.length > 1 && cursorPts.splice(i, 1)[0].remove();
showLegend && legendRows.splice(i, 1)[0][0].parentNode.remove();
cursorPts.length > 1 && cursorPts.splice(i, 1)[0].remove();
// TODO: de-init no-longer-needed scales?
}
@ -2621,13 +2672,13 @@ function uPlot(opts, data, then) {
}
// also set defaults for incrs & values based on axis distr
let isTime = sc.time;
let isTime = sc.time;
axis.size = fnOrSelf(axis.size);
axis.space = fnOrSelf(axis.space);
axis.rotate = fnOrSelf(axis.rotate);
axis.incrs = fnOrSelf(axis.incrs || ( sc.distr == 2 ? wholeIncrs : (isTime ? (ms == 1 ? timeIncrsMs : timeIncrsS) : numIncrs)));
axis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : numAxisSplits));
axis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : sc.distr == 4 ? asinhAxisSplits : numAxisSplits));
axis.stroke = fnOrSelf(axis.stroke);
axis.grid.stroke = fnOrSelf(axis.grid.stroke);
@ -2645,7 +2696,7 @@ function uPlot(opts, data, then) {
) : av || numAxisVals
);
axis.filter = fnOrSelf(axis.filter || ( sc.distr == 3 ? logAxisValsFilt : retArg1));
axis.filter = fnOrSelf(axis.filter || ( sc.distr >= 3 ? logAxisValsFilt : retArg1));
axis.font = pxRatioFont(axis.font);
axis.labelFont = pxRatioFont(axis.labelFont);
@ -2748,6 +2799,8 @@ function uPlot(opts, data, then) {
else if (dataLen == 1) {
if (xScaleDistr == 3)
[_min, _max] = rangeLog(_min, _min, scaleX.log, false);
else if (xScaleDistr == 4)
[_min, _max] = rangeAsinh(_min, _min, scaleX.log, false);
else if (scaleX.time)
_max = _min + 86400 / ms;
else
@ -2879,6 +2932,12 @@ function uPlot(opts, data, then) {
if (sc.min != wsc.min || sc.max != wsc.max) {
sc.min = wsc.min;
sc.max = wsc.max;
let distr = sc.distr;
sc._min = distr == 3 ? log10(sc.min) : distr == 4 ? asinh(sc.min, sc.asinh) : sc.min;
sc._max = distr == 3 ? log10(sc.max) : distr == 4 ? asinh(sc.max, sc.asinh) : sc.max;
changed[k] = anyChanged = true;
}
}
@ -2895,7 +2954,7 @@ function uPlot(opts, data, then) {
fire("setScale", k);
}
if ( cursor.show)
if (cursor.show)
shouldSetCursor = true;
}
@ -3010,10 +3069,10 @@ function uPlot(opts, data, then) {
series.forEach((s, i) => {
if (i > 0 && s.show) {
if (s._paths)
drawPath(i);
drawPath(i);
if (s.points.show(self, i, i0, i1))
drawPoints(i);
drawPoints(i);
fire("drawSeries", i);
}
@ -3451,7 +3510,7 @@ function uPlot(opts, data, then) {
// shouldSetSelect = false;
// }
if ( cursor.show && shouldSetCursor) {
if (cursor.show && shouldSetCursor) {
updateCursor();
shouldSetCursor = false;
}
@ -3551,12 +3610,12 @@ function uPlot(opts, data, then) {
let dragging = false;
const drag = cursor.drag;
const drag = cursor.drag;
let dragX = drag.x;
let dragY = drag.y;
let dragX = drag.x;
let dragY = drag.y;
if ( cursor.show) {
if (cursor.show) {
if (cursor.x)
xCursor = placeDiv(CURSOR_X, over);
if (cursor.y)
@ -3605,7 +3664,7 @@ function uPlot(opts, data, then) {
label && remClass(label, OFF);
else {
label && addClass(label, OFF);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
}
}
@ -3624,7 +3683,7 @@ function uPlot(opts, data, then) {
if (opts.show != null) {
s.show = opts.show;
toggleDOM(i, opts.show);
toggleDOM(i, opts.show);
_setScale(s.scale, null, null);
commit();
@ -3632,7 +3691,7 @@ function uPlot(opts, data, then) {
fire("setSeries", i, opts);
pub && sync.pub("setSeries", self, i, opts);
pub && sync.pub("setSeries", self, i, opts);
}
self.setSeries = setSeries;
@ -3640,10 +3699,10 @@ function uPlot(opts, data, then) {
function _alpha(i, value) {
series[i].alpha = value;
if ( cursor.show && cursorPts[i])
if (cursor.show && cursorPts[i])
cursorPts[i].style.opacity = value;
if ( showLegend && legendRows[i])
if (showLegend && legendRows[i])
legendRows[i][0].parentNode.style.opacity = value;
}
@ -3698,17 +3757,19 @@ function uPlot(opts, data, then) {
if (sc.dir == -1)
pos = dim - pos;
let _min = sc.min,
_max = sc.max,
let _min = sc._min,
_max = sc._max,
pct = pos / dim;
if (sc.distr == 3) {
_min = log10(_min);
_max = log10(_max);
return pow(10, _min + (_max - _min) * pct);
}
else
return _min + (_max - _min) * pct;
let sv = _min + (_max - _min) * pct;
let distr = sc.distr;
return (
distr == 3 ? pow(10, sv) :
distr == 4 ? sinh(sv, sc.asinh) :
sv
);
}
function closestIdxFromXpos(pos) {
@ -3739,7 +3800,7 @@ function uPlot(opts, data, then) {
self.batch = batch;
(self.setCursor = opts => {
(self.setCursor = opts => {
mouseLeft1 = opts.left;
mouseTop1 = opts.top;
// assign(cursor, opts);
@ -3790,7 +3851,7 @@ function uPlot(opts, data, then) {
for (let i = 0; i < series.length; i++) {
if (i > 0) {
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
}
if (showLegend && legend.live) {
@ -3847,7 +3908,7 @@ function uPlot(opts, data, then) {
vPos = xPos2;
}
cursorPts.length > 1 && trans(cursorPts[i], hPos, vPos, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], hPos, vPos, plotWidCss, plotHgtCss);
}
if (showLegend && legend.live) {
@ -3943,7 +4004,7 @@ function uPlot(opts, data, then) {
let uni = drag.uni;
if (uni != null) {
// only calc drag status if they pass the dist thresh
// only calc drag status if they pass the dist asinh
if (dragX && dragY) {
dragX = rawDX >= uni;
dragY = rawDY >= uni;
@ -4277,7 +4338,7 @@ function uPlot(opts, data, then) {
let deb;
if ( cursor.show) {
if (cursor.show) {
onMouse(mousedown, over, mouseDown);
onMouse(mousemove, over, mouseMove);
onMouse(mouseenter, over, syncRect);
@ -4309,28 +4370,28 @@ function uPlot(opts, data, then) {
hooks[evName] = (hooks[evName] || []).concat(p.hooks[evName]);
});
const syncOpts = assign({
const syncOpts = assign({
key: null,
setSeries: false,
scales: [xScaleKey, null]
}, cursor.sync);
const syncKey = syncOpts.key;
const syncKey = syncOpts.key;
const sync = (syncKey != null ? (syncs[syncKey] = syncs[syncKey] || _sync()) : _sync());
const sync = _sync(syncKey);
sync.sub(self);
sync.sub(self);
function pub(type, src, x, y, w, h, i) {
events[type](null, src, x, y, w, h, i);
}
(self.pub = pub);
(self.pub = pub);
function destroy() {
sync.unsub(self);
off(resize, win, deb);
off(scroll, win, deb);
sync.unsub(self);
off(resize, win, deb);
off(scroll, win, deb);
root.remove();
fire("destroy");
}
@ -4370,6 +4431,7 @@ uPlot.assign = assign;
uPlot.fmtNum = fmtNum;
uPlot.rangeNum = rangeNum;
uPlot.rangeLog = rangeLog;
uPlot.rangeAsinh = rangeAsinh;
uPlot.orient = orient;
{
@ -4381,16 +4443,20 @@ uPlot.orient = orient;
uPlot.tzDate = tzDate;
}
{
uPlot.sync = _sync;
}
{
uPlot.addGap = addGap;
uPlot.clipGaps = clipGaps;
let paths = uPlot.paths = {};
(paths.linear = linear);
(paths.spline = spline);
(paths.stepped = stepped);
(paths.bars = bars);
(paths.linear = linear);
(paths.spline = spline);
(paths.stepped = stepped);
(paths.bars = bars);
}
export default uPlot;

View file

@ -4,7 +4,7 @@
*
* uPlot.js (μPlot)
* A small, fast chart for time series, lines, areas, ohlc & bars
* https://github.com/leeoniya/uPlot (v1.6.4)
* https://github.com/leeoniya/uPlot (v1.6.5)
*/
var uPlot = (function () {
@ -110,6 +110,7 @@ var uPlot = (function () {
}
function rangeLog(min, max, base, fullMags) {
var logFn = base == 10 ? log10 : log2;
if (min == max) {
@ -129,8 +130,8 @@ var uPlot = (function () {
max = minMaxIncrs[1];
}
else {
minExp = floor(logFn(min));
maxExp = floor(logFn(max));
minExp = floor(logFn(abs(min)));
maxExp = floor(logFn(abs(max)));
minMaxIncrs = fixIncr(pow(base, minExp), pow(base, maxExp), minExp, maxExp);
@ -141,6 +142,18 @@ var uPlot = (function () {
return [min, max];
}
function rangeAsinh(min, max, base, fullMags) {
var minMax = rangeLog(min, max, base, fullMags);
if (min == 0)
{ minMax[0] = 0; }
if (max == 0)
{ minMax[1] = 0; }
return minMax;
}
var _eqRangePart = {
pad: 0,
soft: null,
@ -212,6 +225,7 @@ var uPlot = (function () {
var M = Math;
var PI = M.PI;
var abs = M.abs;
var floor = M.floor;
var round = M.round;
@ -222,7 +236,16 @@ var uPlot = (function () {
var sqrt = M.sqrt;
var log10 = M.log10;
var log2 = M.log2;
var PI = M.PI;
var sinh = (v, linthresh) => {
if ( linthresh === void 0 ) linthresh = 1;
return M.sinh(v / linthresh);
};
var asinh = (v, linthresh) => {
if ( linthresh === void 0 ) linthresh = 1;
return M.asinh(v / linthresh);
};
var inf = Infinity;
@ -539,9 +562,9 @@ var uPlot = (function () {
return str.slice(0, 3);
}
var days3 = days.map(slice3);
var days3 = days.map(slice3);
var months3 = months.map(slice3);
var months3 = months.map(slice3);
var engNames = {
MMMM: months,
@ -863,11 +886,11 @@ var uPlot = (function () {
timeAxisSplits ];
}
var ref = genTimeStuffs(1);
var ref = genTimeStuffs(1);
var timeIncrsMs = ref[0];
var _timeAxisStampsMs = ref[1];
var timeAxisSplitsMs = ref[2];
var ref$1 = genTimeStuffs(1e-3);
var ref$1 = genTimeStuffs(1e-3);
var timeIncrsS = ref$1[0];
var _timeAxisStampsS = ref$1[1];
var timeAxisSplitsS = ref$1[2];
@ -1146,6 +1169,7 @@ var uPlot = (function () {
return splits;
}
// this doesnt work for sin, which needs to come off from 0 independently in pos and neg dirs
function logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {
var splits = [];
@ -1174,6 +1198,18 @@ var uPlot = (function () {
return splits;
}
function asinhAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {
var sc = self.scales[self.axes[axisIdx].scale];
var linthresh = sc.asinh;
var posSplits = scaleMax > linthresh ? logAxisSplits(self, axisIdx, max(linthresh, scaleMin), scaleMax, foundIncr) : [linthresh];
var zero = scaleMax >= 0 && scaleMin <= 0 ? [0] : [];
var negSplits = scaleMin < -linthresh ? logAxisSplits(self, axisIdx, max(linthresh, -scaleMax), -scaleMin, foundIncr): [linthresh];
return negSplits.reverse().map(v => -v).concat(zero, posSplits);
}
var RE_ALL = /./;
var RE_12357 = /[12357]/;
var RE_125 = /[125]/;
@ -1182,8 +1218,9 @@ var uPlot = (function () {
function logAxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {
var axis = self.axes[axisIdx];
var scaleKey = axis.scale;
var sc = self.scales[scaleKey];
if (self.scales[scaleKey].log == 2)
if (sc.distr == 3 && sc.log == 2)
{ return splits; }
var valToPos = self.valToPos;
@ -1199,7 +1236,7 @@ var uPlot = (function () {
RE_1
);
return splits.map(v => re.test(v) ? v : null);
return splits.map(v => ((sc.distr == 4 && v == 0) || re.test(v)) ? v : null);
}
function numSeriesVal(self, val) {
@ -1293,6 +1330,7 @@ var uPlot = (function () {
auto: true,
distr: 1,
log: 10,
asinh: 1,
min: null,
max: null,
dir: 1,
@ -1306,24 +1344,31 @@ var uPlot = (function () {
var syncs = {};
function _sync(opts) {
var clients = [];
function _sync(key, opts) {
var s = syncs[key];
return {
sub: function sub(client) {
clients.push(client);
},
unsub: function unsub(client) {
clients = clients.filter(c => c != client);
},
pub: function pub(type, self, x, y, w, h, i) {
if (clients.length > 1) {
clients.forEach(client => {
client != self && client.pub(type, self, x, y, w, h, i);
});
if (!s) {
var clients = [];
s = {
key: key,
sub: function sub(client) {
clients.push(client);
},
unsub: function unsub(client) {
clients = clients.filter(c => c != client);
},
pub: function pub(type, self, x, y, w, h, i) {
for (var i$1 = 0; i$1 < clients.length; i$1++)
{ clients[i$1] != self && clients[i$1].pub(type, self, x, y, w, h, i$1); }
}
}
};
};
if (key != null)
{ syncs[key] = s; }
}
return s;
}
function orient(u, seriesIdx, cb) {
@ -1975,7 +2020,7 @@ var uPlot = (function () {
};
}
var linearPath = linear() ;
var linearPath = linear() ;
function setDefaults(d, xo, yo, initY) {
var d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));
@ -2006,6 +2051,12 @@ var uPlot = (function () {
var snapLogX = snapLogY;
function snapAsinhY(self, dataMin, dataMax, scale) {
return dataMin == null ? nullMinMax : rangeAsinh(dataMin, dataMax, self.scales[scale].log, false);
}
var snapAsinhX = snapAsinhY;
// dim is logical (getClientBoundingRect) pixels, not canvas pixels
function findIncr(min, max, incrs, dim, minSpace) {
var pxPerUnit = dim / (max - min);
@ -2033,12 +2084,15 @@ var uPlot = (function () {
function uPlot(opts, data, then) {
var self = {};
// TODO: cache denoms & mins scale.cache = {r, min, }
function getValPct(val, scale) {
return (
scale.distr == 3
? log10((val > 0 ? val : scale.clamp(self, val, scale.min, scale.max, scale.key)) / scale.min) / log10(scale.max / scale.min)
: (val - scale.min) / (scale.max - scale.min)
var _val = (
scale.distr == 3 ? log10(val > 0 ? val : scale.clamp(self, val, scale.min, scale.max, scale.key)) :
scale.distr == 4 ? asinh(val, scale.asinh) :
val
);
return (_val - scale._min) / (scale._max - scale._min);
}
function getHPos(val, scale, dim, off) {
@ -2127,8 +2181,7 @@ var uPlot = (function () {
sc.key = scaleKey;
var isTime = sc.time;
var isLog = sc.distr == 3;
var isTime = sc.time;
var rn = sc.range;
@ -2138,11 +2191,17 @@ var uPlot = (function () {
rn = (self, dataMin, dataMax) => dataMin == null ? nullMinMax : rangeNum(dataMin, dataMax, cfg);
}
sc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ? (isLog ? snapLogX : snapNumX) : (isLog ? snapLogY : snapNumY)));
sc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ?
(sc.distr == 3 ? snapLogX : sc.distr == 4 ? snapAsinhX : snapNumX) :
(sc.distr == 3 ? snapLogY : sc.distr == 4 ? snapAsinhY : snapNumY)
));
sc.auto = fnOrSelf(sc.auto);
sc.clamp = fnOrSelf(sc.clamp || clampScale);
// caches for expensive ops like asinh() & log()
sc._min = sc._max = null;
}
}
}
@ -2219,15 +2278,15 @@ var uPlot = (function () {
}
// self.tz = opts.tz || Intl.DateTimeFormat().resolvedOptions().timeZone;
var _tzDate = (opts.tzDate || (ts => new Date(ts / ms)));
var _fmtDate = (opts.fmtDate || fmtDate);
var _tzDate = (opts.tzDate || (ts => new Date(ts / ms)));
var _fmtDate = (opts.fmtDate || fmtDate);
var _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));
var _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));
var _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));
var _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));
var _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));
var _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));
var legend = assign({show: true, live: true}, opts.legend);
var showLegend = legend.show;
var legend = assign({show: true, live: true}, opts.legend);
var showLegend = legend.show;
{
legend.width = fnOrSelf(ifNull(legend.width, legendWidth));
@ -2293,10 +2352,10 @@ var uPlot = (function () {
if (i > 0) {
onMouse("click", label, e => {
if ( cursor._lock)
if (cursor._lock)
{ return; }
setSeries(series.indexOf(s), {show: !s.show}, syncOpts.setSeries);
setSeries(series.indexOf(s), {show: !s.show}, syncOpts.setSeries);
});
if (cursorFocus) {
@ -2507,7 +2566,7 @@ var uPlot = (function () {
});
}
var cursor = (self.cursor = assign({}, cursorOpts, opts.cursor));
var cursor = (self.cursor = assign({}, cursorOpts, opts.cursor));
{
cursor._lock = false;
@ -2521,8 +2580,8 @@ var uPlot = (function () {
points.fill = fnOrSelf(points.fill);
}
var focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);
var cursorFocus = focus.prox >= 0;
var focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);
var cursorFocus = focus.prox >= 0;
// series-intersection markers
var cursorPts = [null];
@ -2543,7 +2602,7 @@ var uPlot = (function () {
}
function initSeries(s, i) {
var isTime = scales[s.scale].time;
var isTime = scales[s.scale].time;
var sv = s.value;
s.value = isTime ? (isStr(sv) ? timeSeriesVal(_tzDate, timeSeriesStamp(sv, _fmtDate)) : sv || _timeSeriesVal) : sv || numSeriesVal;
@ -2576,7 +2635,7 @@ var uPlot = (function () {
if (showLegend)
{ legendRows.splice(i, 0, initLegendRow(s, i)); }
if ( cursor.show) {
if (cursor.show) {
var pt = initCursorPt(s, i);
pt && cursorPts.splice(i, 0, pt);
}
@ -2594,8 +2653,8 @@ var uPlot = (function () {
function delSeries(i) {
series.splice(i, 1);
showLegend && legendRows.splice(i, 1)[0][0].parentNode.remove();
cursorPts.length > 1 && cursorPts.splice(i, 1)[0].remove();
showLegend && legendRows.splice(i, 1)[0][0].parentNode.remove();
cursorPts.length > 1 && cursorPts.splice(i, 1)[0].remove();
// TODO: de-init no-longer-needed scales?
}
@ -2621,13 +2680,13 @@ var uPlot = (function () {
}
// also set defaults for incrs & values based on axis distr
var isTime = sc.time;
var isTime = sc.time;
axis.size = fnOrSelf(axis.size);
axis.space = fnOrSelf(axis.space);
axis.rotate = fnOrSelf(axis.rotate);
axis.incrs = fnOrSelf(axis.incrs || ( sc.distr == 2 ? wholeIncrs : (isTime ? (ms == 1 ? timeIncrsMs : timeIncrsS) : numIncrs)));
axis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : numAxisSplits));
axis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : sc.distr == 4 ? asinhAxisSplits : numAxisSplits));
axis.stroke = fnOrSelf(axis.stroke);
axis.grid.stroke = fnOrSelf(axis.grid.stroke);
@ -2645,7 +2704,7 @@ var uPlot = (function () {
) : av || numAxisVals
);
axis.filter = fnOrSelf(axis.filter || ( sc.distr == 3 ? logAxisValsFilt : retArg1));
axis.filter = fnOrSelf(axis.filter || ( sc.distr >= 3 ? logAxisValsFilt : retArg1));
axis.font = pxRatioFont(axis.font);
axis.labelFont = pxRatioFont(axis.labelFont);
@ -2733,7 +2792,7 @@ var uPlot = (function () {
self.setData = setData;
function autoScaleX() {
var assign, assign$1;
var assign, assign$1, assign$2;
viaAutoScaleX = true;
@ -2753,10 +2812,12 @@ var uPlot = (function () {
else if (dataLen == 1) {
if (xScaleDistr == 3)
{ (assign = rangeLog(_min, _min, scaleX.log, false), _min = assign[0], _max = assign[1]); }
else if (xScaleDistr == 4)
{ (assign$1 = rangeAsinh(_min, _min, scaleX.log, false), _min = assign$1[0], _max = assign$1[1]); }
else if (scaleX.time)
{ _max = _min + 86400 / ms; }
else
{ (assign$1 = rangeNum(_min, _max, 0.1, true), _min = assign$1[0], _max = assign$1[1]); }
{ (assign$2 = rangeNum(_min, _max, 0.1, true), _min = assign$2[0], _max = assign$2[1]); }
}
}
else {
@ -2884,6 +2945,12 @@ var uPlot = (function () {
if (sc.min != wsc$3.min || sc.max != wsc$3.max) {
sc.min = wsc$3.min;
sc.max = wsc$3.max;
var distr = sc.distr;
sc._min = distr == 3 ? log10(sc.min) : distr == 4 ? asinh(sc.min, sc.asinh) : sc.min;
sc._max = distr == 3 ? log10(sc.max) : distr == 4 ? asinh(sc.max, sc.asinh) : sc.max;
changed[k$3] = anyChanged = true;
}
}
@ -2900,7 +2967,7 @@ var uPlot = (function () {
fire("setScale", k$4);
}
if ( cursor.show)
if (cursor.show)
{ shouldSetCursor = true; }
}
@ -3015,10 +3082,10 @@ var uPlot = (function () {
series.forEach((s, i) => {
if (i > 0 && s.show) {
if (s._paths)
{ drawPath(i); }
{ drawPath(i); }
if (s.points.show(self, i, i0, i1))
{ drawPoints(i); }
{ drawPoints(i); }
fire("drawSeries", i);
}
@ -3464,7 +3531,7 @@ var uPlot = (function () {
// shouldSetSelect = false;
// }
if ( cursor.show && shouldSetCursor) {
if (cursor.show && shouldSetCursor) {
updateCursor();
shouldSetCursor = false;
}
@ -3564,12 +3631,12 @@ var uPlot = (function () {
var dragging = false;
var drag = cursor.drag;
var drag = cursor.drag;
var dragX = drag.x;
var dragY = drag.y;
var dragX = drag.x;
var dragY = drag.y;
if ( cursor.show) {
if (cursor.show) {
if (cursor.x)
{ xCursor = placeDiv(CURSOR_X, over); }
if (cursor.y)
@ -3618,7 +3685,7 @@ var uPlot = (function () {
{ label && remClass(label, OFF); }
else {
label && addClass(label, OFF);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
}
}
@ -3637,7 +3704,7 @@ var uPlot = (function () {
if (opts.show != null) {
s.show = opts.show;
toggleDOM(i, opts.show);
toggleDOM(i, opts.show);
_setScale(s.scale, null, null);
commit();
@ -3645,7 +3712,7 @@ var uPlot = (function () {
fire("setSeries", i, opts);
pub && sync.pub("setSeries", self, i, opts);
pub && sync.pub("setSeries", self, i, opts);
}
self.setSeries = setSeries;
@ -3653,10 +3720,10 @@ var uPlot = (function () {
function _alpha(i, value) {
series[i].alpha = value;
if ( cursor.show && cursorPts[i])
if (cursor.show && cursorPts[i])
{ cursorPts[i].style.opacity = value; }
if ( showLegend && legendRows[i])
if (showLegend && legendRows[i])
{ legendRows[i][0].parentNode.style.opacity = value; }
}
@ -3711,17 +3778,19 @@ var uPlot = (function () {
if (sc.dir == -1)
{ pos = dim - pos; }
var _min = sc.min,
_max = sc.max,
var _min = sc._min,
_max = sc._max,
pct = pos / dim;
if (sc.distr == 3) {
_min = log10(_min);
_max = log10(_max);
return pow(10, _min + (_max - _min) * pct);
}
else
{ return _min + (_max - _min) * pct; }
var sv = _min + (_max - _min) * pct;
var distr = sc.distr;
return (
distr == 3 ? pow(10, sv) :
distr == 4 ? sinh(sv, sc.asinh) :
sv
);
}
function closestIdxFromXpos(pos) {
@ -3752,7 +3821,7 @@ var uPlot = (function () {
self.batch = batch;
(self.setCursor = opts => {
(self.setCursor = opts => {
mouseLeft1 = opts.left;
mouseTop1 = opts.top;
// assign(cursor, opts);
@ -3805,7 +3874,7 @@ var uPlot = (function () {
for (var i = 0; i < series.length; i++) {
if (i > 0) {
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i], -10, -10, plotWidCss, plotHgtCss);
}
if (showLegend && legend.live) {
@ -3862,7 +3931,7 @@ var uPlot = (function () {
vPos = xPos2;
}
cursorPts.length > 1 && trans(cursorPts[i$1], hPos, vPos, plotWidCss, plotHgtCss);
cursorPts.length > 1 && trans(cursorPts[i$1], hPos, vPos, plotWidCss, plotHgtCss);
}
if (showLegend && legend.live) {
@ -3964,7 +4033,7 @@ var uPlot = (function () {
var uni = drag.uni;
if (uni != null) {
// only calc drag status if they pass the dist thresh
// only calc drag status if they pass the dist asinh
if (dragX && dragY) {
dragX = rawDX >= uni;
dragY = rawDY >= uni;
@ -4305,7 +4374,7 @@ var uPlot = (function () {
var deb;
if ( cursor.show) {
if (cursor.show) {
onMouse(mousedown, over, mouseDown);
onMouse(mousemove, over, mouseMove);
onMouse(mouseenter, over, syncRect);
@ -4337,28 +4406,28 @@ var uPlot = (function () {
{ hooks[evName] = (hooks[evName] || []).concat(p.hooks[evName]); }
});
var syncOpts = assign({
var syncOpts = assign({
key: null,
setSeries: false,
scales: [xScaleKey, null]
}, cursor.sync);
var syncKey = syncOpts.key;
var syncKey = syncOpts.key;
var sync = (syncKey != null ? (syncs[syncKey] = syncs[syncKey] || _sync()) : _sync());
var sync = _sync(syncKey);
sync.sub(self);
sync.sub(self);
function pub(type, src, x, y, w, h, i) {
events[type](null, src, x, y, w, h, i);
}
(self.pub = pub);
(self.pub = pub);
function destroy() {
sync.unsub(self);
off(resize, win, deb);
off(scroll, win, deb);
sync.unsub(self);
off(resize, win, deb);
off(scroll, win, deb);
root.remove();
fire("destroy");
}
@ -4398,6 +4467,7 @@ var uPlot = (function () {
uPlot.fmtNum = fmtNum;
uPlot.rangeNum = rangeNum;
uPlot.rangeLog = rangeLog;
uPlot.rangeAsinh = rangeAsinh;
uPlot.orient = orient;
{
@ -4409,16 +4479,20 @@ var uPlot = (function () {
uPlot.tzDate = tzDate;
}
{
uPlot.sync = _sync;
}
{
uPlot.addGap = addGap;
uPlot.clipGaps = clipGaps;
var paths = uPlot.paths = {};
(paths.linear = linear);
(paths.spline = spline);
(paths.stepped = stepped);
(paths.bars = bars);
(paths.linear = linear);
(paths.spline = spline);
(paths.stepped = stepped);
(paths.bars = bars);
}
return uPlot;

File diff suppressed because one or more lines are too long