app/assets/javascripts/pghero/Chart.bundle.js in pghero-3.1.0 vs app/assets/javascripts/pghero/Chart.bundle.js in pghero-3.2.0
- old
+ new
@@ -1,267 +1,258 @@
/*!
- * Chart.js v3.0.2
+ * Chart.js v4.2.0
* https://www.chartjs.org
- * (c) 2021 Chart.js Contributors
+ * (c) 2023 Chart.js Contributors
* Released under the MIT License
*
- * chartjs-adapter-date-fns v2.0.0
+ * @kurkle/color v0.3.2
+ * https://github.com/kurkle/color#readme
+ * (c) 2023 Jukka Kurkela
+ * Released under the MIT License
+ *
+ * chartjs-adapter-date-fns v3.0.0
* https://www.chartjs.org
- * (c) 2021 chartjs-adapter-date-fns Contributors
+ * (c) 2022 chartjs-adapter-date-fns Contributors
* Released under the MIT license
*
- * date-fns v2.0.19
+ * date-fns v2.29.3
* https://date-fns.org
- * (c) 2020 Sasha Koss and Lesha Koss
+ * (c) 2021 Sasha Koss and Lesha Koss
* Released under the MIT License
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Chart = factory());
-}(this, (function () { 'use strict';
+})(this, (function () { 'use strict';
- function _typeof(obj) {
- "@babel/helpers - typeof";
-
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
- _typeof = function (obj) {
- return typeof obj;
- };
- } else {
- _typeof = function (obj) {
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
- };
+ function _iterableToArrayLimit(arr, i) {
+ var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
+ if (null != _i) {
+ var _s,
+ _e,
+ _x,
+ _r,
+ _arr = [],
+ _n = !0,
+ _d = !1;
+ try {
+ if (_x = (_i = _i.call(arr)).next, 0 === i) {
+ if (Object(_i) !== _i) return;
+ _n = !1;
+ } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
+ } catch (err) {
+ _d = !0, _e = err;
+ } finally {
+ try {
+ if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
+ } finally {
+ if (_d) throw _e;
+ }
+ }
+ return _arr;
}
-
- return _typeof(obj);
}
+ function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ })), keys.push.apply(keys, symbols);
+ }
+ return keys;
+ }
+ function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = null != arguments[i] ? arguments[i] : {};
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
+ _defineProperty$w(target, key, source[key]);
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ return target;
+ }
+ function _typeof$z(obj) {
+ "@babel/helpers - typeof";
- function _classCallCheck(instance, Constructor) {
+ return _typeof$z = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
+ return typeof obj;
+ } : function (obj) {
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ }, _typeof$z(obj);
+ }
+ function _classCallCheck$x(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
-
- function _defineProperties(target, props) {
+ function _defineProperties$x(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
+ Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
-
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
+ function _createClass$x(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$x(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$x(Constructor, staticProps);
+ Object.defineProperty(Constructor, "prototype", {
+ writable: false
+ });
return Constructor;
}
-
- function _defineProperty(obj, key, value) {
+ function _defineProperty$w(obj, key, value) {
+ key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
-
return obj;
}
-
- function ownKeys(object, enumerableOnly) {
- var keys = Object.keys(object);
-
- if (Object.getOwnPropertySymbols) {
- var symbols = Object.getOwnPropertySymbols(object);
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
- });
- keys.push.apply(keys, symbols);
- }
-
- return keys;
- }
-
- function _objectSpread2(target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i] != null ? arguments[i] : {};
-
- if (i % 2) {
- ownKeys(Object(source), true).forEach(function (key) {
- _defineProperty(target, key, source[key]);
- });
- } else if (Object.getOwnPropertyDescriptors) {
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
- } else {
- ownKeys(Object(source)).forEach(function (key) {
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
- });
- }
- }
-
- return target;
- }
-
- function _inherits(subClass, superClass) {
+ function _inherits$w(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
-
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
- if (superClass) _setPrototypeOf(subClass, superClass);
+ Object.defineProperty(subClass, "prototype", {
+ writable: false
+ });
+ if (superClass) _setPrototypeOf$w(subClass, superClass);
}
-
- function _getPrototypeOf(o) {
- _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ function _getPrototypeOf$w(o) {
+ _getPrototypeOf$w = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
- return _getPrototypeOf(o);
+ return _getPrototypeOf$w(o);
}
-
- function _setPrototypeOf(o, p) {
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ function _setPrototypeOf$w(o, p) {
+ _setPrototypeOf$w = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
-
- return _setPrototypeOf(o, p);
+ return _setPrototypeOf$w(o, p);
}
-
- function _isNativeReflectConstruct() {
+ function _isNativeReflectConstruct$w() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
-
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
-
- function _assertThisInitialized(self) {
+ function _assertThisInitialized$w(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
-
return self;
}
-
- function _possibleConstructorReturn(self, call) {
+ function _possibleConstructorReturn$w(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
+ } else if (call !== void 0) {
+ throw new TypeError("Derived constructors may only return object or undefined");
}
-
- return _assertThisInitialized(self);
+ return _assertThisInitialized$w(self);
}
-
- function _createSuper(Derived) {
- var hasNativeReflectConstruct = _isNativeReflectConstruct();
-
+ function _createSuper$w(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$w();
return function _createSuperInternal() {
- var Super = _getPrototypeOf(Derived),
- result;
-
+ var Super = _getPrototypeOf$w(Derived),
+ result;
if (hasNativeReflectConstruct) {
- var NewTarget = _getPrototypeOf(this).constructor;
-
+ var NewTarget = _getPrototypeOf$w(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
-
- return _possibleConstructorReturn(this, result);
+ return _possibleConstructorReturn$w(this, result);
};
}
-
function _superPropBase(object, property) {
while (!Object.prototype.hasOwnProperty.call(object, property)) {
- object = _getPrototypeOf(object);
+ object = _getPrototypeOf$w(object);
if (object === null) break;
}
-
return object;
}
-
- function _get(target, property, receiver) {
+ function _get() {
if (typeof Reflect !== "undefined" && Reflect.get) {
- _get = Reflect.get;
+ _get = Reflect.get.bind();
} else {
_get = function _get(target, property, receiver) {
var base = _superPropBase(target, property);
-
if (!base) return;
var desc = Object.getOwnPropertyDescriptor(base, property);
-
if (desc.get) {
- return desc.get.call(receiver);
+ return desc.get.call(arguments.length < 3 ? target : receiver);
}
-
return desc.value;
};
}
-
- return _get(target, property, receiver || target);
+ return _get.apply(this, arguments);
}
-
+ function _slicedToArray(arr, i) {
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest();
+ }
function _toConsumableArray(arr) {
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread();
}
-
function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
+ if (Array.isArray(arr)) return _arrayLikeToArray$1(arr);
}
-
+ function _arrayWithHoles(arr) {
+ if (Array.isArray(arr)) return arr;
+ }
function _iterableToArray(iter) {
- if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
-
- function _unsupportedIterableToArray(o, minLen) {
+ function _unsupportedIterableToArray$1(o, minLen) {
if (!o) return;
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+ if (typeof o === "string") return _arrayLikeToArray$1(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen);
}
-
- function _arrayLikeToArray(arr, len) {
+ function _arrayLikeToArray$1(arr, len) {
if (len == null || len > arr.length) len = arr.length;
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
-
return arr2;
}
-
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
-
- function _createForOfIteratorHelper(o, allowArrayLike) {
- var it;
-
- if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+ function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ function _createForOfIteratorHelper$1(o, allowArrayLike) {
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+ if (!it) {
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it) o = it;
var i = 0;
-
var F = function () {};
-
return {
s: F,
n: function () {
if (i >= o.length) return {
done: true
@@ -275,20 +266,18 @@
throw e;
},
f: F
};
}
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
-
var normalCompletion = true,
- didErr = false,
- err;
+ didErr = false,
+ err;
return {
s: function () {
- it = o[Symbol.iterator]();
+ it = it.call(o);
},
n: function () {
var step = it.next();
normalCompletion = step.done;
return step;
@@ -304,582 +293,50 @@
if (didErr) throw err;
}
}
};
}
-
- var requestAnimFrame = function () {
- if (typeof window === 'undefined') {
- return function (callback) {
- return callback();
- };
+ function _toPrimitive(input, hint) {
+ if (typeof input !== "object" || input === null) return input;
+ var prim = input[Symbol.toPrimitive];
+ if (prim !== undefined) {
+ var res = prim.call(input, hint || "default");
+ if (typeof res !== "object") return res;
+ throw new TypeError("@@toPrimitive must return a primitive value.");
}
-
- return window.requestAnimationFrame;
- }();
-
- function throttled(fn, thisArg, updateFn) {
- var updateArgs = updateFn || function (args) {
- return Array.prototype.slice.call(args);
- };
-
- var ticking = false;
- var args = [];
- return function () {
- for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
- rest[_key] = arguments[_key];
- }
-
- args = updateArgs(rest);
-
- if (!ticking) {
- ticking = true;
- requestAnimFrame.call(window, function () {
- ticking = false;
- fn.apply(thisArg, args);
- });
- }
- };
+ return (hint === "string" ? String : Number)(input);
}
-
- function debounce(fn, delay) {
- var timeout;
- return function () {
- if (delay) {
- clearTimeout(timeout);
- timeout = setTimeout(fn, delay);
- } else {
- fn();
- }
-
- return delay;
- };
+ function _toPropertyKey(arg) {
+ var key = _toPrimitive(arg, "string");
+ return typeof key === "symbol" ? key : String(key);
}
- var _toLeftRightCenter = function _toLeftRightCenter(align) {
- return align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
- };
-
- var _alignStartEnd = function _alignStartEnd(align, start, end) {
- return align === 'start' ? start : align === 'end' ? end : (start + end) / 2;
- };
-
- var _textX = function _textX(align, left, right) {
- return align === 'right' ? right : align === 'center' ? (left + right) / 2 : left;
- };
-
- function noop() {}
-
- var uid = function () {
- var id = 0;
- return function () {
- return id++;
- };
- }();
-
- function isNullOrUndef(value) {
- return value === null || typeof value === 'undefined';
+ /*!
+ * @kurkle/color v0.3.2
+ * https://github.com/kurkle/color#readme
+ * (c) 2023 Jukka Kurkela
+ * Released under the MIT License
+ */
+ function round(v) {
+ return v + 0.5 | 0;
}
-
- function isArray(value) {
- if (Array.isArray && Array.isArray(value)) {
- return true;
- }
-
- var type = Object.prototype.toString.call(value);
-
- if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {
- return true;
- }
-
- return false;
- }
-
- function isObject(value) {
- return value !== null && Object.prototype.toString.call(value) === '[object Object]';
- }
-
- var isNumberFinite = function isNumberFinite(value) {
- return (typeof value === 'number' || value instanceof Number) && isFinite(+value);
+ var lim = function lim(v, l, h) {
+ return Math.max(Math.min(v, h), l);
};
-
- function finiteOrDefault(value, defaultValue) {
- return isNumberFinite(value) ? value : defaultValue;
+ function p2b(v) {
+ return lim(round(v * 2.55), 0, 255);
}
-
- function valueOrDefault(value, defaultValue) {
- return typeof value === 'undefined' ? defaultValue : value;
+ function n2b(v) {
+ return lim(round(v * 255), 0, 255);
}
-
- var toPercentage = function toPercentage(value, dimension) {
- return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : value / dimension;
- };
-
- var toDimension = function toDimension(value, dimension) {
- return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;
- };
-
- function callback(fn, args, thisArg) {
- if (fn && typeof fn.call === 'function') {
- return fn.apply(thisArg, args);
- }
+ function b2n(v) {
+ return lim(round(v / 2.55) / 100, 0, 1);
}
-
- function each(loopable, fn, thisArg, reverse) {
- var i, len, keys;
-
- if (isArray(loopable)) {
- len = loopable.length;
-
- if (reverse) {
- for (i = len - 1; i >= 0; i--) {
- fn.call(thisArg, loopable[i], i);
- }
- } else {
- for (i = 0; i < len; i++) {
- fn.call(thisArg, loopable[i], i);
- }
- }
- } else if (isObject(loopable)) {
- keys = Object.keys(loopable);
- len = keys.length;
-
- for (i = 0; i < len; i++) {
- fn.call(thisArg, loopable[keys[i]], keys[i]);
- }
- }
+ function n2p(v) {
+ return lim(round(v * 100), 0, 100);
}
-
- function _elementsEqual(a0, a1) {
- var i, ilen, v0, v1;
-
- if (!a0 || !a1 || a0.length !== a1.length) {
- return false;
- }
-
- for (i = 0, ilen = a0.length; i < ilen; ++i) {
- v0 = a0[i];
- v1 = a1[i];
-
- if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
- return false;
- }
- }
-
- return true;
- }
-
- function clone$1(source) {
- if (isArray(source)) {
- return source.map(clone$1);
- }
-
- if (isObject(source)) {
- var target = Object.create(null);
- var keys = Object.keys(source);
- var klen = keys.length;
- var k = 0;
-
- for (; k < klen; ++k) {
- target[keys[k]] = clone$1(source[keys[k]]);
- }
-
- return target;
- }
-
- return source;
- }
-
- function isValidKey(key) {
- return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;
- }
-
- function _merger(key, target, source, options) {
- if (!isValidKey(key)) {
- return;
- }
-
- var tval = target[key];
- var sval = source[key];
-
- if (isObject(tval) && isObject(sval)) {
- merge(tval, sval, options);
- } else {
- target[key] = clone$1(sval);
- }
- }
-
- function merge(target, source, options) {
- var sources = isArray(source) ? source : [source];
- var ilen = sources.length;
-
- if (!isObject(target)) {
- return target;
- }
-
- options = options || {};
- var merger = options.merger || _merger;
-
- for (var i = 0; i < ilen; ++i) {
- source = sources[i];
-
- if (!isObject(source)) {
- continue;
- }
-
- var keys = Object.keys(source);
-
- for (var k = 0, klen = keys.length; k < klen; ++k) {
- merger(keys[k], target, source, options);
- }
- }
-
- return target;
- }
-
- function mergeIf(target, source) {
- return merge(target, source, {
- merger: _mergerIf
- });
- }
-
- function _mergerIf(key, target, source) {
- if (!isValidKey(key)) {
- return;
- }
-
- var tval = target[key];
- var sval = source[key];
-
- if (isObject(tval) && isObject(sval)) {
- mergeIf(tval, sval);
- } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
- target[key] = clone$1(sval);
- }
- }
-
- var emptyString = '';
- var dot = '.';
-
- function indexOfDotOrLength(key, start) {
- var idx = key.indexOf(dot, start);
- return idx === -1 ? key.length : idx;
- }
-
- function resolveObjectKey(obj, key) {
- if (key === emptyString) {
- return obj;
- }
-
- var pos = 0;
- var idx = indexOfDotOrLength(key, pos);
-
- while (obj && idx > pos) {
- obj = obj[key.substr(pos, idx - pos)];
- pos = idx + 1;
- idx = indexOfDotOrLength(key, pos);
- }
-
- return obj;
- }
-
- function _capitalize(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
- }
-
- var defined = function defined(value) {
- return typeof value !== 'undefined';
- };
-
- var isFunction = function isFunction(value) {
- return typeof value === 'function';
- };
-
- var PI = Math.PI;
- var TAU = 2 * PI;
- var PITAU = TAU + PI;
- var INFINITY = Number.POSITIVE_INFINITY;
- var RAD_PER_DEG = PI / 180;
- var HALF_PI = PI / 2;
- var QUARTER_PI = PI / 4;
- var TWO_THIRDS_PI = PI * 2 / 3;
- var log10 = Math.log10;
- var sign = Math.sign;
-
- function niceNum(range) {
- var niceRange = Math.pow(10, Math.floor(log10(range)));
- var fraction = range / niceRange;
- var niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
- return niceFraction * niceRange;
- }
-
- function _factorize(value) {
- var result = [];
- var sqrt = Math.sqrt(value);
- var i;
-
- for (i = 1; i < sqrt; i++) {
- if (value % i === 0) {
- result.push(i);
- result.push(value / i);
- }
- }
-
- if (sqrt === (sqrt | 0)) {
- result.push(sqrt);
- }
-
- result.sort(function (a, b) {
- return a - b;
- }).pop();
- return result;
- }
-
- function isNumber(n) {
- return !isNaN(parseFloat(n)) && isFinite(n);
- }
-
- function almostEquals(x, y, epsilon) {
- return Math.abs(x - y) < epsilon;
- }
-
- function almostWhole(x, epsilon) {
- var rounded = Math.round(x);
- return rounded - epsilon <= x && rounded + epsilon >= x;
- }
-
- function _setMinAndMaxByKey(array, target, property) {
- var i, ilen, value;
-
- for (i = 0, ilen = array.length; i < ilen; i++) {
- value = array[i][property];
-
- if (!isNaN(value)) {
- target.min = Math.min(target.min, value);
- target.max = Math.max(target.max, value);
- }
- }
- }
-
- function toRadians(degrees) {
- return degrees * (PI / 180);
- }
-
- function toDegrees(radians) {
- return radians * (180 / PI);
- }
-
- function _decimalPlaces(x) {
- if (!isNumberFinite(x)) {
- return;
- }
-
- var e = 1;
- var p = 0;
-
- while (Math.round(x * e) / e !== x) {
- e *= 10;
- p++;
- }
-
- return p;
- }
-
- function getAngleFromPoint(centrePoint, anglePoint) {
- var distanceFromXCenter = anglePoint.x - centrePoint.x;
- var distanceFromYCenter = anglePoint.y - centrePoint.y;
- var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
- var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
-
- if (angle < -0.5 * PI) {
- angle += TAU;
- }
-
- return {
- angle: angle,
- distance: radialDistanceFromCenter
- };
- }
-
- function distanceBetweenPoints(pt1, pt2) {
- return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
- }
-
- function _angleDiff(a, b) {
- return (a - b + PITAU) % TAU - PI;
- }
-
- function _normalizeAngle(a) {
- return (a % TAU + TAU) % TAU;
- }
-
- function _angleBetween(angle, start, end) {
- var a = _normalizeAngle(angle);
-
- var s = _normalizeAngle(start);
-
- var e = _normalizeAngle(end);
-
- var angleToStart = _normalizeAngle(s - a);
-
- var angleToEnd = _normalizeAngle(e - a);
-
- var startToAngle = _normalizeAngle(a - s);
-
- var endToAngle = _normalizeAngle(a - e);
-
- return a === s || a === e || angleToStart > angleToEnd && startToAngle < endToAngle;
- }
-
- function _limitValue(value, min, max) {
- return Math.max(min, Math.min(max, value));
- }
-
- function _int16Range(value) {
- return _limitValue(value, -32768, 32767);
- }
-
- var atEdge = function atEdge(t) {
- return t === 0 || t === 1;
- };
-
- var elasticIn = function elasticIn(t, s, p) {
- return -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
- };
-
- var elasticOut = function elasticOut(t, s, p) {
- return Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
- };
-
- var effects = {
- linear: function linear(t) {
- return t;
- },
- easeInQuad: function easeInQuad(t) {
- return t * t;
- },
- easeOutQuad: function easeOutQuad(t) {
- return -t * (t - 2);
- },
- easeInOutQuad: function easeInOutQuad(t) {
- return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1);
- },
- easeInCubic: function easeInCubic(t) {
- return t * t * t;
- },
- easeOutCubic: function easeOutCubic(t) {
- return (t -= 1) * t * t + 1;
- },
- easeInOutCubic: function easeInOutCubic(t) {
- return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2);
- },
- easeInQuart: function easeInQuart(t) {
- return t * t * t * t;
- },
- easeOutQuart: function easeOutQuart(t) {
- return -((t -= 1) * t * t * t - 1);
- },
- easeInOutQuart: function easeInOutQuart(t) {
- return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2);
- },
- easeInQuint: function easeInQuint(t) {
- return t * t * t * t * t;
- },
- easeOutQuint: function easeOutQuint(t) {
- return (t -= 1) * t * t * t * t + 1;
- },
- easeInOutQuint: function easeInOutQuint(t) {
- return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2);
- },
- easeInSine: function easeInSine(t) {
- return -Math.cos(t * HALF_PI) + 1;
- },
- easeOutSine: function easeOutSine(t) {
- return Math.sin(t * HALF_PI);
- },
- easeInOutSine: function easeInOutSine(t) {
- return -0.5 * (Math.cos(PI * t) - 1);
- },
- easeInExpo: function easeInExpo(t) {
- return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));
- },
- easeOutExpo: function easeOutExpo(t) {
- return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;
- },
- easeInOutExpo: function easeInOutExpo(t) {
- return atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2);
- },
- easeInCirc: function easeInCirc(t) {
- return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1);
- },
- easeOutCirc: function easeOutCirc(t) {
- return Math.sqrt(1 - (t -= 1) * t);
- },
- easeInOutCirc: function easeInOutCirc(t) {
- return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
- },
- easeInElastic: function easeInElastic(t) {
- return atEdge(t) ? t : elasticIn(t, 0.075, 0.3);
- },
- easeOutElastic: function easeOutElastic(t) {
- return atEdge(t) ? t : elasticOut(t, 0.075, 0.3);
- },
- easeInOutElastic: function easeInOutElastic(t) {
- var s = 0.1125;
- var p = 0.45;
- return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);
- },
- easeInBack: function easeInBack(t) {
- var s = 1.70158;
- return t * t * ((s + 1) * t - s);
- },
- easeOutBack: function easeOutBack(t) {
- var s = 1.70158;
- return (t -= 1) * t * ((s + 1) * t + s) + 1;
- },
- easeInOutBack: function easeInOutBack(t) {
- var s = 1.70158;
-
- if ((t /= 0.5) < 1) {
- return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));
- }
-
- return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);
- },
- easeInBounce: function easeInBounce(t) {
- return 1 - effects.easeOutBounce(1 - t);
- },
- easeOutBounce: function easeOutBounce(t) {
- var m = 7.5625;
- var d = 2.75;
-
- if (t < 1 / d) {
- return m * t * t;
- }
-
- if (t < 2 / d) {
- return m * (t -= 1.5 / d) * t + 0.75;
- }
-
- if (t < 2.5 / d) {
- return m * (t -= 2.25 / d) * t + 0.9375;
- }
-
- return m * (t -= 2.625 / d) * t + 0.984375;
- },
- easeInOutBounce: function easeInOutBounce(t) {
- return t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
- }
- };
- /*!
- * @kurkle/color v0.1.9
- * https://github.com/kurkle/color#readme
- * (c) 2020 Jukka Kurkela
- * Released under the MIT License
- */
-
- var map = {
+ var map$1 = {
0: 0,
1: 1,
2: 2,
3: 3,
4: 4,
@@ -899,251 +356,169 @@
c: 12,
d: 13,
e: 14,
f: 15
};
- var hex = '0123456789ABCDEF';
-
+ var hex = _toConsumableArray('0123456789ABCDEF');
var h1 = function h1(b) {
return hex[b & 0xF];
};
-
var h2 = function h2(b) {
return hex[(b & 0xF0) >> 4] + hex[b & 0xF];
};
-
var eq = function eq(b) {
return (b & 0xF0) >> 4 === (b & 0xF);
};
-
- function isShort(v) {
+ var isShort = function isShort(v) {
return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
- }
-
+ };
function hexParse(str) {
var len = str.length;
var ret;
-
if (str[0] === '#') {
if (len === 4 || len === 5) {
ret = {
- r: 255 & map[str[1]] * 17,
- g: 255 & map[str[2]] * 17,
- b: 255 & map[str[3]] * 17,
- a: len === 5 ? map[str[4]] * 17 : 255
+ r: 255 & map$1[str[1]] * 17,
+ g: 255 & map$1[str[2]] * 17,
+ b: 255 & map$1[str[3]] * 17,
+ a: len === 5 ? map$1[str[4]] * 17 : 255
};
} else if (len === 7 || len === 9) {
ret = {
- r: map[str[1]] << 4 | map[str[2]],
- g: map[str[3]] << 4 | map[str[4]],
- b: map[str[5]] << 4 | map[str[6]],
- a: len === 9 ? map[str[7]] << 4 | map[str[8]] : 255
+ r: map$1[str[1]] << 4 | map$1[str[2]],
+ g: map$1[str[3]] << 4 | map$1[str[4]],
+ b: map$1[str[5]] << 4 | map$1[str[6]],
+ a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255
};
}
}
-
return ret;
}
-
+ var alpha = function alpha(a, f) {
+ return a < 255 ? f(a) : '';
+ };
function _hexString(v) {
var f = isShort(v) ? h1 : h2;
- return v ? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '') : v;
+ return v ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : undefined;
}
-
- function round(v) {
- return v + 0.5 | 0;
- }
-
- var lim = function lim(v, l, h) {
- return Math.max(Math.min(v, h), l);
- };
-
- function p2b(v) {
- return lim(round(v * 2.55), 0, 255);
- }
-
- function n2b(v) {
- return lim(round(v * 255), 0, 255);
- }
-
- function b2n(v) {
- return lim(round(v / 2.55) / 100, 0, 1);
- }
-
- function n2p(v) {
- return lim(round(v * 100), 0, 100);
- }
-
- var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
-
- function rgbParse(str) {
- var m = RGB_RE.exec(str);
- var a = 255;
- var r, g, b;
-
- if (!m) {
- return;
- }
-
- if (m[7] !== r) {
- var v = +m[7];
- a = 255 & (m[8] ? p2b(v) : v * 255);
- }
-
- r = +m[1];
- g = +m[3];
- b = +m[5];
- r = 255 & (m[2] ? p2b(r) : r);
- g = 255 & (m[4] ? p2b(g) : g);
- b = 255 & (m[6] ? p2b(b) : b);
- return {
- r: r,
- g: g,
- b: b,
- a: a
- };
- }
-
- function _rgbString(v) {
- return v && (v.a < 255 ? "rgba(".concat(v.r, ", ").concat(v.g, ", ").concat(v.b, ", ").concat(b2n(v.a), ")") : "rgb(".concat(v.r, ", ").concat(v.g, ", ").concat(v.b, ")"));
- }
-
var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
-
function hsl2rgbn(h, s, l) {
var a = s * Math.min(l, 1 - l);
-
var f = function f(n) {
var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;
return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
};
-
return [f(0), f(8), f(4)];
}
-
function hsv2rgbn(h, s, v) {
var f = function f(n) {
var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6;
return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
};
-
return [f(5), f(3), f(1)];
}
-
function hwb2rgbn(h, w, b) {
var rgb = hsl2rgbn(h, 1, 0.5);
var i;
-
if (w + b > 1) {
i = 1 / (w + b);
w *= i;
b *= i;
}
-
for (i = 0; i < 3; i++) {
rgb[i] *= 1 - w - b;
rgb[i] += w;
}
-
return rgb;
}
-
+ function hueValue(r, g, b, d, max) {
+ if (r === max) {
+ return (g - b) / d + (g < b ? 6 : 0);
+ }
+ if (g === max) {
+ return (b - r) / d + 2;
+ }
+ return (r - g) / d + 4;
+ }
function rgb2hsl(v) {
var range = 255;
var r = v.r / range;
var g = v.g / range;
var b = v.b / range;
var max = Math.max(r, g, b);
var min = Math.min(r, g, b);
var l = (max + min) / 2;
var h, s, d;
-
if (max !== min) {
d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
- h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
+ h = hueValue(r, g, b, d, max);
h = h * 60 + 0.5;
}
-
return [h | 0, s || 0, l];
}
-
function calln(f, a, b, c) {
return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);
}
-
function hsl2rgb(h, s, l) {
return calln(hsl2rgbn, h, s, l);
}
-
function hwb2rgb(h, w, b) {
return calln(hwb2rgbn, h, w, b);
}
-
function hsv2rgb(h, s, v) {
return calln(hsv2rgbn, h, s, v);
}
-
function hue(h) {
return (h % 360 + 360) % 360;
}
-
function hueParse(str) {
var m = HUE_RE.exec(str);
var a = 255;
var v;
-
if (!m) {
return;
}
-
if (m[5] !== v) {
a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
}
-
var h = hue(+m[2]);
var p1 = +m[3] / 100;
var p2 = +m[4] / 100;
-
if (m[1] === 'hwb') {
v = hwb2rgb(h, p1, p2);
} else if (m[1] === 'hsv') {
v = hsv2rgb(h, p1, p2);
} else {
v = hsl2rgb(h, p1, p2);
}
-
return {
r: v[0],
g: v[1],
b: v[2],
a: a
};
}
-
function _rotate(v, deg) {
var h = rgb2hsl(v);
h[0] = hue(h[0] + deg);
h = hsl2rgb(h);
v.r = h[0];
v.g = h[1];
v.b = h[2];
}
-
function _hslString(v) {
if (!v) {
return;
}
-
var a = rgb2hsl(v);
var h = a[0];
var s = n2p(a[1]);
var l = n2p(a[2]);
return v.a < 255 ? "hsla(".concat(h, ", ").concat(s, "%, ").concat(l, "%, ").concat(b2n(v.a), ")") : "hsl(".concat(h, ", ").concat(s, "%, ").concat(l, "%)");
}
-
- var map$1 = {
+ var map$2 = {
x: 'dark',
Z: 'light',
Y: 're',
X: 'blu',
W: 'gr',
@@ -1168,11 +543,11 @@
G: 'arks',
H: 'ea',
I: 'ightg',
J: 'wh'
};
- var names = {
+ var names$1 = {
OiceXe: 'f0f8ff',
antiquewEte: 'faebd7',
aqua: 'ffff',
aquamarRe: '7fffd4',
azuY: 'f0ffff',
@@ -1318,169 +693,187 @@
wEte: 'ffffff',
wEtesmoke: 'f5f5f5',
Lw: 'ffff00',
LwgYF: '9acd32'
};
-
function unpack() {
var unpacked = {};
- var keys = Object.keys(names);
- var tkeys = Object.keys(map$1);
+ var keys = Object.keys(names$1);
+ var tkeys = Object.keys(map$2);
var i, j, k, ok, nk;
-
for (i = 0; i < keys.length; i++) {
ok = nk = keys[i];
-
for (j = 0; j < tkeys.length; j++) {
k = tkeys[j];
- nk = nk.replace(k, map$1[k]);
+ nk = nk.replace(k, map$2[k]);
}
-
- k = parseInt(names[ok], 16);
+ k = parseInt(names$1[ok], 16);
unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];
}
-
return unpacked;
}
-
- var names$1;
-
+ var names;
function nameParse(str) {
- if (!names$1) {
- names$1 = unpack();
- names$1.transparent = [0, 0, 0, 0];
+ if (!names) {
+ names = unpack();
+ names.transparent = [0, 0, 0, 0];
}
-
- var a = names$1[str.toLowerCase()];
+ var a = names[str.toLowerCase()];
return a && {
r: a[0],
g: a[1],
b: a[2],
a: a.length === 4 ? a[3] : 255
};
}
-
+ var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
+ function rgbParse(str) {
+ var m = RGB_RE.exec(str);
+ var a = 255;
+ var r, g, b;
+ if (!m) {
+ return;
+ }
+ if (m[7] !== r) {
+ var v = +m[7];
+ a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
+ }
+ r = +m[1];
+ g = +m[3];
+ b = +m[5];
+ r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
+ g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
+ b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
+ return {
+ r: r,
+ g: g,
+ b: b,
+ a: a
+ };
+ }
+ function _rgbString(v) {
+ return v && (v.a < 255 ? "rgba(".concat(v.r, ", ").concat(v.g, ", ").concat(v.b, ", ").concat(b2n(v.a), ")") : "rgb(".concat(v.r, ", ").concat(v.g, ", ").concat(v.b, ")"));
+ }
+ var to = function to(v) {
+ return v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;
+ };
+ var from = function from(v) {
+ return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
+ };
+ function _interpolate(rgb1, rgb2, t) {
+ var r = from(b2n(rgb1.r));
+ var g = from(b2n(rgb1.g));
+ var b = from(b2n(rgb1.b));
+ return {
+ r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),
+ g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),
+ b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),
+ a: rgb1.a + t * (rgb2.a - rgb1.a)
+ };
+ }
function modHSL(v, i, ratio) {
if (v) {
var tmp = rgb2hsl(v);
tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
tmp = hsl2rgb(tmp);
v.r = tmp[0];
v.g = tmp[1];
v.b = tmp[2];
}
}
-
- function clone(v, proto) {
+ function clone$1(v, proto) {
return v ? Object.assign(proto || {}, v) : v;
}
-
function fromObject(input) {
var v = {
r: 0,
g: 0,
b: 0,
a: 255
};
-
if (Array.isArray(input)) {
if (input.length >= 3) {
v = {
r: input[0],
g: input[1],
b: input[2],
a: 255
};
-
if (input.length > 3) {
v.a = n2b(input[3]);
}
}
} else {
- v = clone(input, {
+ v = clone$1(input, {
r: 0,
g: 0,
b: 0,
a: 1
});
v.a = n2b(v.a);
}
-
return v;
}
-
function functionParse(str) {
if (str.charAt(0) === 'r') {
return rgbParse(str);
}
-
return hueParse(str);
}
-
var Color = /*#__PURE__*/function () {
function Color(input) {
- _classCallCheck(this, Color);
-
+ _classCallCheck$x(this, Color);
if (input instanceof Color) {
return input;
}
-
- var type = _typeof(input);
-
+ var type = _typeof$z(input);
var v;
-
if (type === 'object') {
v = fromObject(input);
} else if (type === 'string') {
v = hexParse(input) || nameParse(input) || functionParse(input);
}
-
this._rgb = v;
this._valid = !!v;
}
-
- _createClass(Color, [{
+ _createClass$x(Color, [{
key: "valid",
get: function get() {
return this._valid;
}
}, {
key: "rgb",
get: function get() {
- var v = clone(this._rgb);
-
+ var v = clone$1(this._rgb);
if (v) {
v.a = b2n(v.a);
}
-
return v;
},
set: function set(obj) {
this._rgb = fromObject(obj);
}
}, {
key: "rgbString",
value: function rgbString() {
- return this._valid ? _rgbString(this._rgb) : this._rgb;
+ return this._valid ? _rgbString(this._rgb) : undefined;
}
}, {
key: "hexString",
value: function hexString() {
- return this._valid ? _hexString(this._rgb) : this._rgb;
+ return this._valid ? _hexString(this._rgb) : undefined;
}
}, {
key: "hslString",
value: function hslString() {
- return this._valid ? _hslString(this._rgb) : this._rgb;
+ return this._valid ? _hslString(this._rgb) : undefined;
}
}, {
key: "mix",
value: function mix(color, weight) {
- var me = this;
-
if (color) {
- var c1 = me.rgb;
+ var c1 = this.rgb;
var c2 = color.rgb;
var w2;
var p = weight === w2 ? 0.5 : weight;
var w = 2 * p - 1;
var a = c1.a - c2.a;
@@ -1488,16 +881,23 @@
w2 = 1 - w1;
c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;
c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;
c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;
c1.a = p * c1.a + (1 - p) * c2.a;
- me.rgb = c1;
+ this.rgb = c1;
}
-
- return me;
+ return this;
}
}, {
+ key: "interpolate",
+ value: function interpolate(color, t) {
+ if (color) {
+ this._rgb = _interpolate(this._rgb, color._rgb, t);
+ }
+ return this;
+ }
+ }, {
key: "clone",
value: function clone() {
return new Color(this.rgb);
}
}, {
@@ -1563,115 +963,1220 @@
}
}, {
key: "rotate",
value: function rotate(deg) {
_rotate(this._rgb, deg);
-
return this;
}
}]);
-
return Color;
}();
- function index_esm(input) {
- return new Color(input);
+ /**
+ * @namespace Chart.helpers
+ */ /**
+ * An empty function that can be used, for example, for optional callback.
+ */
+ function noop() {
+ /* noop */}
+ /**
+ * Returns a unique id, sequentially generated from a global variable.
+ */
+ var uid = function () {
+ var id = 0;
+ return function () {
+ return id++;
+ };
+ }();
+ /**
+ * Returns true if `value` is neither null nor undefined, else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */
+ function isNullOrUndef(value) {
+ return value === null || typeof value === 'undefined';
}
-
- var isPatternOrGradient = function isPatternOrGradient(value) {
- return value instanceof CanvasGradient || value instanceof CanvasPattern;
+ /**
+ * Returns true if `value` is an array (including typed arrays), else returns false.
+ * @param value - The value to test.
+ * @function
+ */
+ function isArray(value) {
+ if (Array.isArray && Array.isArray(value)) {
+ return true;
+ }
+ var type = Object.prototype.toString.call(value);
+ if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {
+ return true;
+ }
+ return false;
+ }
+ /**
+ * Returns true if `value` is an object (excluding null), else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */
+ function isObject(value) {
+ return value !== null && Object.prototype.toString.call(value) === '[object Object]';
+ }
+ /**
+ * Returns true if `value` is a finite number, else returns false
+ * @param value - The value to test.
+ */
+ function isNumberFinite(value) {
+ return (typeof value === 'number' || value instanceof Number) && isFinite(+value);
+ }
+ /**
+ * Returns `value` if finite, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is not finite.
+ */
+ function finiteOrDefault(value, defaultValue) {
+ return isNumberFinite(value) ? value : defaultValue;
+ }
+ /**
+ * Returns `value` if defined, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is undefined.
+ */
+ function valueOrDefault(value, defaultValue) {
+ return typeof value === 'undefined' ? defaultValue : value;
+ }
+ var toPercentage = function toPercentage(value, dimension) {
+ return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;
};
+ var toDimension = function toDimension(value, dimension) {
+ return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;
+ };
+ /**
+ * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
+ * value returned by `fn`. If `fn` is not a function, this method returns undefined.
+ * @param fn - The function to call.
+ * @param args - The arguments with which `fn` should be called.
+ * @param [thisArg] - The value of `this` provided for the call to `fn`.
+ */
+ function callback(fn, args, thisArg) {
+ if (fn && typeof fn.call === 'function') {
+ return fn.apply(thisArg, args);
+ }
+ }
+ function each(loopable, fn, thisArg, reverse) {
+ var i, len, keys;
+ if (isArray(loopable)) {
+ len = loopable.length;
+ if (reverse) {
+ for (i = len - 1; i >= 0; i--) {
+ fn.call(thisArg, loopable[i], i);
+ }
+ } else {
+ for (i = 0; i < len; i++) {
+ fn.call(thisArg, loopable[i], i);
+ }
+ }
+ } else if (isObject(loopable)) {
+ keys = Object.keys(loopable);
+ len = keys.length;
+ for (i = 0; i < len; i++) {
+ fn.call(thisArg, loopable[keys[i]], keys[i]);
+ }
+ }
+ }
+ /**
+ * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
+ * @param a0 - The array to compare
+ * @param a1 - The array to compare
+ * @private
+ */
+ function _elementsEqual(a0, a1) {
+ var i, ilen, v0, v1;
+ if (!a0 || !a1 || a0.length !== a1.length) {
+ return false;
+ }
+ for (i = 0, ilen = a0.length; i < ilen; ++i) {
+ v0 = a0[i];
+ v1 = a1[i];
+ if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
+ return false;
+ }
+ }
+ return true;
+ }
+ /**
+ * Returns a deep copy of `source` without keeping references on objects and arrays.
+ * @param source - The value to clone.
+ */
+ function clone(source) {
+ if (isArray(source)) {
+ return source.map(clone);
+ }
+ if (isObject(source)) {
+ var target = Object.create(null);
+ var keys = Object.keys(source);
+ var klen = keys.length;
+ var k = 0;
+ for (; k < klen; ++k) {
+ target[keys[k]] = clone(source[keys[k]]);
+ }
+ return target;
+ }
+ return source;
+ }
+ function isValidKey(key) {
+ return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;
+ }
+ /**
+ * The default merger when Chart.helpers.merge is called without merger option.
+ * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
+ * @private
+ */
+ function _merger(key, target, source, options) {
+ if (!isValidKey(key)) {
+ return;
+ }
+ var tval = target[key];
+ var sval = source[key];
+ if (isObject(tval) && isObject(sval)) {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ merge(tval, sval, options);
+ } else {
+ target[key] = clone(sval);
+ }
+ }
+ function merge(target, source, options) {
+ var sources = isArray(source) ? source : [source];
+ var ilen = sources.length;
+ if (!isObject(target)) {
+ return target;
+ }
+ options = options || {};
+ var merger = options.merger || _merger;
+ var current;
+ for (var i = 0; i < ilen; ++i) {
+ current = sources[i];
+ if (!isObject(current)) {
+ continue;
+ }
+ var keys = Object.keys(current);
+ for (var k = 0, klen = keys.length; k < klen; ++k) {
+ merger(keys[k], target, current, options);
+ }
+ }
+ return target;
+ }
+ function mergeIf(target, source) {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ return merge(target, source, {
+ merger: _mergerIf
+ });
+ }
+ /**
+ * Merges source[key] in target[key] only if target[key] is undefined.
+ * @private
+ */
+ function _mergerIf(key, target, source) {
+ if (!isValidKey(key)) {
+ return;
+ }
+ var tval = target[key];
+ var sval = source[key];
+ if (isObject(tval) && isObject(sval)) {
+ mergeIf(tval, sval);
+ } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
+ target[key] = clone(sval);
+ }
+ }
+ /**
+ * @private
+ */
+ function _deprecated(scope, value, previous, current) {
+ if (value !== undefined) {
+ console.warn(scope + ': "' + previous + '" is deprecated. Please use "' + current + '" instead');
+ }
+ }
+ // resolveObjectKey resolver cache
+ var keyResolvers = {
+ // Chart.helpers.core resolveObjectKey should resolve empty key to root object
+ '': function _(v) {
+ return v;
+ },
+ // default resolvers
+ x: function x(o) {
+ return o.x;
+ },
+ y: function y(o) {
+ return o.y;
+ }
+ };
+ /**
+ * @private
+ */
+ function _splitKey(key) {
+ var parts = key.split('.');
+ var keys = [];
+ var tmp = '';
+ var _iterator = _createForOfIteratorHelper$1(parts),
+ _step;
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var part = _step.value;
+ tmp += part;
+ if (tmp.endsWith('\\')) {
+ tmp = tmp.slice(0, -1) + '.';
+ } else {
+ keys.push(tmp);
+ tmp = '';
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ return keys;
+ }
+ function _getKeyResolver(key) {
+ var keys = _splitKey(key);
+ return function (obj) {
+ var _iterator2 = _createForOfIteratorHelper$1(keys),
+ _step2;
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var k = _step2.value;
+ if (k === '') {
+ break;
+ }
+ obj = obj && obj[k];
+ }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
+ }
+ return obj;
+ };
+ }
+ function resolveObjectKey(obj, key) {
+ var resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
+ return resolver(obj);
+ }
+ /**
+ * @private
+ */
+ function _capitalize(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1);
+ }
+ var defined = function defined(value) {
+ return typeof value !== 'undefined';
+ };
+ var isFunction = function isFunction(value) {
+ return typeof value === 'function';
+ };
+ // Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384
+ var setsEqual = function setsEqual(a, b) {
+ if (a.size !== b.size) {
+ return false;
+ }
+ var _iterator3 = _createForOfIteratorHelper$1(a),
+ _step3;
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var item = _step3.value;
+ if (!b.has(item)) {
+ return false;
+ }
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
+ }
+ return true;
+ };
+ /**
+ * @param e - The event
+ * @private
+ */
+ function _isClickEvent(e) {
+ return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';
+ }
- function color(value) {
- return isPatternOrGradient(value) ? value : index_esm(value);
+ /**
+ * @alias Chart.helpers.math
+ * @namespace
+ */
+ var PI = Math.PI;
+ var TAU = 2 * PI;
+ var PITAU = TAU + PI;
+ var INFINITY = Number.POSITIVE_INFINITY;
+ var RAD_PER_DEG = PI / 180;
+ var HALF_PI = PI / 2;
+ var QUARTER_PI = PI / 4;
+ var TWO_THIRDS_PI = PI * 2 / 3;
+ var log10 = Math.log10;
+ var sign = Math.sign;
+ function almostEquals(x, y, epsilon) {
+ return Math.abs(x - y) < epsilon;
}
+ /**
+ * Implementation of the nice number algorithm used in determining where axis labels will go
+ */
+ function niceNum(range) {
+ var roundedRange = Math.round(range);
+ range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;
+ var niceRange = Math.pow(10, Math.floor(log10(range)));
+ var fraction = range / niceRange;
+ var niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
+ return niceFraction * niceRange;
+ }
+ /**
+ * Returns an array of factors sorted from 1 to sqrt(value)
+ * @private
+ */
+ function _factorize(value) {
+ var result = [];
+ var sqrt = Math.sqrt(value);
+ var i;
+ for (i = 1; i < sqrt; i++) {
+ if (value % i === 0) {
+ result.push(i);
+ result.push(value / i);
+ }
+ }
+ if (sqrt === (sqrt | 0)) {
+ result.push(sqrt);
+ }
+ result.sort(function (a, b) {
+ return a - b;
+ }).pop();
+ return result;
+ }
+ function isNumber(n) {
+ return !isNaN(parseFloat(n)) && isFinite(n);
+ }
+ function almostWhole(x, epsilon) {
+ var rounded = Math.round(x);
+ return rounded - epsilon <= x && rounded + epsilon >= x;
+ }
+ /**
+ * @private
+ */
+ function _setMinAndMaxByKey(array, target, property) {
+ var i, ilen, value;
+ for (i = 0, ilen = array.length; i < ilen; i++) {
+ value = array[i][property];
+ if (!isNaN(value)) {
+ target.min = Math.min(target.min, value);
+ target.max = Math.max(target.max, value);
+ }
+ }
+ }
+ function toRadians(degrees) {
+ return degrees * (PI / 180);
+ }
+ function toDegrees(radians) {
+ return radians * (180 / PI);
+ }
+ /**
+ * Returns the number of decimal places
+ * i.e. the number of digits after the decimal point, of the value of this Number.
+ * @param x - A number.
+ * @returns The number of decimal places.
+ * @private
+ */
+ function _decimalPlaces(x) {
+ if (!isNumberFinite(x)) {
+ return;
+ }
+ var e = 1;
+ var p = 0;
+ while (Math.round(x * e) / e !== x) {
+ e *= 10;
+ p++;
+ }
+ return p;
+ }
+ // Gets the angle from vertical upright to the point about a centre.
+ function getAngleFromPoint(centrePoint, anglePoint) {
+ var distanceFromXCenter = anglePoint.x - centrePoint.x;
+ var distanceFromYCenter = anglePoint.y - centrePoint.y;
+ var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
+ var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
+ if (angle < -0.5 * PI) {
+ angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
+ }
+ return {
+ angle: angle,
+ distance: radialDistanceFromCenter
+ };
+ }
+ function distanceBetweenPoints(pt1, pt2) {
+ return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
+ }
+ /**
+ * Shortest distance between angles, in either direction.
+ * @private
+ */
+ function _angleDiff(a, b) {
+ return (a - b + PITAU) % TAU - PI;
+ }
+ /**
+ * Normalize angle to be between 0 and 2*PI
+ * @private
+ */
+ function _normalizeAngle(a) {
+ return (a % TAU + TAU) % TAU;
+ }
+ /**
+ * @private
+ */
+ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
+ var a = _normalizeAngle(angle);
+ var s = _normalizeAngle(start);
+ var e = _normalizeAngle(end);
+ var angleToStart = _normalizeAngle(s - a);
+ var angleToEnd = _normalizeAngle(e - a);
+ var startToAngle = _normalizeAngle(a - s);
+ var endToAngle = _normalizeAngle(a - e);
+ return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;
+ }
+ /**
+ * Limit `value` between `min` and `max`
+ * @param value
+ * @param min
+ * @param max
+ * @private
+ */
+ function _limitValue(value, min, max) {
+ return Math.max(min, Math.min(max, value));
+ }
+ /**
+ * @param {number} value
+ * @private
+ */
+ function _int16Range(value) {
+ return _limitValue(value, -32768, 32767);
+ }
+ /**
+ * @param value
+ * @param start
+ * @param end
+ * @param [epsilon]
+ * @private
+ */
+ function _isBetween(value, start, end) {
+ var epsilon = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-6;
+ return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
+ }
+ function _lookup(table, value, cmp) {
+ cmp = cmp || function (index) {
+ return table[index] < value;
+ };
+ var hi = table.length - 1;
+ var lo = 0;
+ var mid;
+ while (hi - lo > 1) {
+ mid = lo + hi >> 1;
+ if (cmp(mid)) {
+ lo = mid;
+ } else {
+ hi = mid;
+ }
+ }
+ return {
+ lo: lo,
+ hi: hi
+ };
+ }
+ /**
+ * Binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @param last - lookup last index
+ * @private
+ */
+ var _lookupByKey = function _lookupByKey(table, key, value, last) {
+ return _lookup(table, value, last ? function (index) {
+ var ti = table[index][key];
+ return ti < value || ti === value && table[index + 1][key] === value;
+ } : function (index) {
+ return table[index][key] < value;
+ });
+ };
+ /**
+ * Reverse binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @private
+ */
+ var _rlookupByKey = function _rlookupByKey(table, key, value) {
+ return _lookup(table, value, function (index) {
+ return table[index][key] >= value;
+ });
+ };
+ /**
+ * Return subset of `values` between `min` and `max` inclusive.
+ * Values are assumed to be in sorted order.
+ * @param values - sorted array of values
+ * @param min - min value
+ * @param max - max value
+ */
+ function _filterBetween(values, min, max) {
+ var start = 0;
+ var end = values.length;
+ while (start < end && values[start] < min) {
+ start++;
+ }
+ while (end > start && values[end - 1] > max) {
+ end--;
+ }
+ return start > 0 || end < values.length ? values.slice(start, end) : values;
+ }
+ var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
+ function listenArrayEvents(array, listener) {
+ if (array._chartjs) {
+ array._chartjs.listeners.push(listener);
+ return;
+ }
+ Object.defineProperty(array, '_chartjs', {
+ configurable: true,
+ enumerable: false,
+ value: {
+ listeners: [listener]
+ }
+ });
+ arrayEvents.forEach(function (key) {
+ var method = '_onData' + _capitalize(key);
+ var base = array[key];
+ Object.defineProperty(array, key, {
+ configurable: true,
+ enumerable: false,
+ value: function value() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ var res = base.apply(this, args);
+ array._chartjs.listeners.forEach(function (object) {
+ if (typeof object[method] === 'function') {
+ object[method].apply(object, args);
+ }
+ });
+ return res;
+ }
+ });
+ });
+ }
+ function unlistenArrayEvents(array, listener) {
+ var stub = array._chartjs;
+ if (!stub) {
+ return;
+ }
+ var listeners = stub.listeners;
+ var index = listeners.indexOf(listener);
+ if (index !== -1) {
+ listeners.splice(index, 1);
+ }
+ if (listeners.length > 0) {
+ return;
+ }
+ arrayEvents.forEach(function (key) {
+ delete array[key];
+ });
+ delete array._chartjs;
+ }
+ /**
+ * @param items
+ */
+ function _arrayUnique(items) {
+ var set = new Set();
+ var i, ilen;
+ for (i = 0, ilen = items.length; i < ilen; ++i) {
+ set.add(items[i]);
+ }
+ if (set.size === ilen) {
+ return items;
+ }
+ return Array.from(set);
+ }
+ function fontString(pixelSize, fontStyle, fontFamily) {
+ return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
+ }
+ /**
+ * Request animation polyfill
+ */
+ var requestAnimFrame = function () {
+ if (typeof window === 'undefined') {
+ return function (callback) {
+ return callback();
+ };
+ }
+ return window.requestAnimationFrame;
+ }();
+ /**
+ * Throttles calling `fn` once per animation frame
+ * Latest arguments are used on the actual call
+ */
+ function throttled(fn, thisArg) {
+ var argsToUse = [];
+ var ticking = false;
+ return function () {
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+ // Save the args for use later
+ argsToUse = args;
+ if (!ticking) {
+ ticking = true;
+ requestAnimFrame.call(window, function () {
+ ticking = false;
+ fn.apply(thisArg, argsToUse);
+ });
+ }
+ };
+ }
+ /**
+ * Debounces calling `fn` for `delay` ms
+ */
+ function debounce(fn, delay) {
+ var timeout;
+ return function () {
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+ if (delay) {
+ clearTimeout(timeout);
+ timeout = setTimeout(fn, delay, args);
+ } else {
+ fn.apply(this, args);
+ }
+ return delay;
+ };
+ }
+ /**
+ * Converts 'start' to 'left', 'end' to 'right' and others to 'center'
+ * @private
+ */
+ var _toLeftRightCenter = function _toLeftRightCenter(align) {
+ return align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
+ };
+ /**
+ * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`
+ * @private
+ */
+ var _alignStartEnd = function _alignStartEnd(align, start, end) {
+ return align === 'start' ? start : align === 'end' ? end : (start + end) / 2;
+ };
+ /**
+ * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`
+ * @private
+ */
+ var _textX = function _textX(align, left, right, rtl) {
+ var check = rtl ? 'left' : 'right';
+ return align === check ? right : align === 'center' ? (left + right) / 2 : left;
+ };
+ /**
+ * Return start and count of visible points.
+ * @private
+ */
+ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {
+ var pointCount = points.length;
+ var start = 0;
+ var count = pointCount;
+ if (meta._sorted) {
+ var iScale = meta.iScale,
+ _parsed = meta._parsed;
+ var axis = iScale.axis;
+ var _iScale$getUserBounds = iScale.getUserBounds(),
+ min = _iScale$getUserBounds.min,
+ max = _iScale$getUserBounds.max,
+ minDefined = _iScale$getUserBounds.minDefined,
+ maxDefined = _iScale$getUserBounds.maxDefined;
+ if (minDefined) {
+ start = _limitValue(Math.min(
+ // @ts-expect-error Need to type _parsed
+ _lookupByKey(_parsed, iScale.axis, min).lo,
+ // @ts-expect-error Need to fix types on _lookupByKey
+ animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);
+ }
+ if (maxDefined) {
+ count = _limitValue(Math.max(
+ // @ts-expect-error Need to type _parsed
+ _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,
+ // @ts-expect-error Need to fix types on _lookupByKey
+ animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;
+ } else {
+ count = pointCount - start;
+ }
+ }
+ return {
+ start: start,
+ count: count
+ };
+ }
+ /**
+ * Checks if the scale ranges have changed.
+ * @param {object} meta - dataset meta.
+ * @returns {boolean}
+ * @private
+ */
+ function _scaleRangesChanged(meta) {
+ var xScale = meta.xScale,
+ yScale = meta.yScale,
+ _scaleRanges = meta._scaleRanges;
+ var newRanges = {
+ xmin: xScale.min,
+ xmax: xScale.max,
+ ymin: yScale.min,
+ ymax: yScale.max
+ };
+ if (!_scaleRanges) {
+ meta._scaleRanges = newRanges;
+ return true;
+ }
+ var changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;
+ Object.assign(_scaleRanges, newRanges);
+ return changed;
+ }
+ var atEdge = function atEdge(t) {
+ return t === 0 || t === 1;
+ };
+ var elasticIn = function elasticIn(t, s, p) {
+ return -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
+ };
+ var elasticOut = function elasticOut(t, s, p) {
+ return Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
+ };
+ /**
+ * Easing functions adapted from Robert Penner's easing equations.
+ * @namespace Chart.helpers.easing.effects
+ * @see http://www.robertpenner.com/easing/
+ */
+ var effects = {
+ linear: function linear(t) {
+ return t;
+ },
+ easeInQuad: function easeInQuad(t) {
+ return t * t;
+ },
+ easeOutQuad: function easeOutQuad(t) {
+ return -t * (t - 2);
+ },
+ easeInOutQuad: function easeInOutQuad(t) {
+ return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1);
+ },
+ easeInCubic: function easeInCubic(t) {
+ return t * t * t;
+ },
+ easeOutCubic: function easeOutCubic(t) {
+ return (t -= 1) * t * t + 1;
+ },
+ easeInOutCubic: function easeInOutCubic(t) {
+ return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2);
+ },
+ easeInQuart: function easeInQuart(t) {
+ return t * t * t * t;
+ },
+ easeOutQuart: function easeOutQuart(t) {
+ return -((t -= 1) * t * t * t - 1);
+ },
+ easeInOutQuart: function easeInOutQuart(t) {
+ return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2);
+ },
+ easeInQuint: function easeInQuint(t) {
+ return t * t * t * t * t;
+ },
+ easeOutQuint: function easeOutQuint(t) {
+ return (t -= 1) * t * t * t * t + 1;
+ },
+ easeInOutQuint: function easeInOutQuint(t) {
+ return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2);
+ },
+ easeInSine: function easeInSine(t) {
+ return -Math.cos(t * HALF_PI) + 1;
+ },
+ easeOutSine: function easeOutSine(t) {
+ return Math.sin(t * HALF_PI);
+ },
+ easeInOutSine: function easeInOutSine(t) {
+ return -0.5 * (Math.cos(PI * t) - 1);
+ },
+ easeInExpo: function easeInExpo(t) {
+ return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));
+ },
+ easeOutExpo: function easeOutExpo(t) {
+ return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;
+ },
+ easeInOutExpo: function easeInOutExpo(t) {
+ return atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2);
+ },
+ easeInCirc: function easeInCirc(t) {
+ return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1);
+ },
+ easeOutCirc: function easeOutCirc(t) {
+ return Math.sqrt(1 - (t -= 1) * t);
+ },
+ easeInOutCirc: function easeInOutCirc(t) {
+ return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
+ },
+ easeInElastic: function easeInElastic(t) {
+ return atEdge(t) ? t : elasticIn(t, 0.075, 0.3);
+ },
+ easeOutElastic: function easeOutElastic(t) {
+ return atEdge(t) ? t : elasticOut(t, 0.075, 0.3);
+ },
+ easeInOutElastic: function easeInOutElastic(t) {
+ var s = 0.1125;
+ var p = 0.45;
+ return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);
+ },
+ easeInBack: function easeInBack(t) {
+ var s = 1.70158;
+ return t * t * ((s + 1) * t - s);
+ },
+ easeOutBack: function easeOutBack(t) {
+ var s = 1.70158;
+ return (t -= 1) * t * ((s + 1) * t + s) + 1;
+ },
+ easeInOutBack: function easeInOutBack(t) {
+ var s = 1.70158;
+ if ((t /= 0.5) < 1) {
+ return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));
+ }
+ return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);
+ },
+ easeInBounce: function easeInBounce(t) {
+ return 1 - effects.easeOutBounce(1 - t);
+ },
+ easeOutBounce: function easeOutBounce(t) {
+ var m = 7.5625;
+ var d = 2.75;
+ if (t < 1 / d) {
+ return m * t * t;
+ }
+ if (t < 2 / d) {
+ return m * (t -= 1.5 / d) * t + 0.75;
+ }
+ if (t < 2.5 / d) {
+ return m * (t -= 2.25 / d) * t + 0.9375;
+ }
+ return m * (t -= 2.625 / d) * t + 0.984375;
+ },
+ easeInOutBounce: function easeInOutBounce(t) {
+ return t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
+ }
+ };
+ function isPatternOrGradient(value) {
+ if (value && _typeof$z(value) === 'object') {
+ var type = value.toString();
+ return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';
+ }
+ return false;
+ }
+ function color(value) {
+ return isPatternOrGradient(value) ? value : new Color(value);
+ }
function getHoverColor(value) {
- return isPatternOrGradient(value) ? value : index_esm(value).saturate(0.5).darken(0.1).hexString();
+ return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();
}
-
+ var numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];
+ var colors = ['color', 'borderColor', 'backgroundColor'];
+ function applyAnimationsDefaults(defaults) {
+ defaults.set('animation', {
+ delay: undefined,
+ duration: 1000,
+ easing: 'easeOutQuart',
+ fn: undefined,
+ from: undefined,
+ loop: undefined,
+ to: undefined,
+ type: undefined
+ });
+ defaults.describe('animation', {
+ _fallback: false,
+ _indexable: false,
+ _scriptable: function _scriptable(name) {
+ return name !== 'onProgress' && name !== 'onComplete' && name !== 'fn';
+ }
+ });
+ defaults.set('animations', {
+ colors: {
+ type: 'color',
+ properties: colors
+ },
+ numbers: {
+ type: 'number',
+ properties: numbers
+ }
+ });
+ defaults.describe('animations', {
+ _fallback: 'animation'
+ });
+ defaults.set('transitions', {
+ active: {
+ animation: {
+ duration: 400
+ }
+ },
+ resize: {
+ animation: {
+ duration: 0
+ }
+ },
+ show: {
+ animations: {
+ colors: {
+ from: 'transparent'
+ },
+ visible: {
+ type: 'boolean',
+ duration: 0
+ }
+ }
+ },
+ hide: {
+ animations: {
+ colors: {
+ to: 'transparent'
+ },
+ visible: {
+ type: 'boolean',
+ easing: 'linear',
+ fn: function fn(v) {
+ return v | 0;
+ }
+ }
+ }
+ }
+ });
+ }
+ function applyLayoutsDefaults(defaults) {
+ defaults.set('layout', {
+ autoPadding: true,
+ padding: {
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0
+ }
+ });
+ }
+ var intlCache = new Map();
+ function getNumberFormat(locale, options) {
+ options = options || {};
+ var cacheKey = locale + JSON.stringify(options);
+ var formatter = intlCache.get(cacheKey);
+ if (!formatter) {
+ formatter = new Intl.NumberFormat(locale, options);
+ intlCache.set(cacheKey, formatter);
+ }
+ return formatter;
+ }
+ function formatNumber(num, locale, options) {
+ return getNumberFormat(locale, options).format(num);
+ }
+ var formatters$4 = {
+ values: function values(value) {
+ return isArray(value) ? value : '' + value;
+ },
+ numeric: function numeric(tickValue, index, ticks) {
+ if (tickValue === 0) {
+ return '0';
+ }
+ var locale = this.chart.options.locale;
+ var notation;
+ var delta = tickValue;
+ if (ticks.length > 1) {
+ var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
+ if (maxTick < 1e-4 || maxTick > 1e+15) {
+ notation = 'scientific';
+ }
+ delta = calculateDelta(tickValue, ticks);
+ }
+ var logDelta = log10(Math.abs(delta));
+ var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
+ var options = {
+ notation: notation,
+ minimumFractionDigits: numDecimal,
+ maximumFractionDigits: numDecimal
+ };
+ Object.assign(options, this.options.ticks.format);
+ return formatNumber(tickValue, locale, options);
+ },
+ logarithmic: function logarithmic(tickValue, index, ticks) {
+ if (tickValue === 0) {
+ return '0';
+ }
+ var remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));
+ if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {
+ return formatters$4.numeric.call(this, tickValue, index, ticks);
+ }
+ return '';
+ }
+ };
+ function calculateDelta(tickValue, ticks) {
+ var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
+ if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
+ delta = tickValue - Math.floor(tickValue);
+ }
+ return delta;
+ }
+ var Ticks = {
+ formatters: formatters$4
+ };
+ function applyScaleDefaults(defaults) {
+ defaults.set('scale', {
+ display: true,
+ offset: false,
+ reverse: false,
+ beginAtZero: false,
+ bounds: 'ticks',
+ grace: 0,
+ grid: {
+ display: true,
+ lineWidth: 1,
+ drawOnChartArea: true,
+ drawTicks: true,
+ tickLength: 8,
+ tickWidth: function tickWidth(_ctx, options) {
+ return options.lineWidth;
+ },
+ tickColor: function tickColor(_ctx, options) {
+ return options.color;
+ },
+ offset: false
+ },
+ border: {
+ display: true,
+ dash: [],
+ dashOffset: 0.0,
+ width: 1
+ },
+ title: {
+ display: false,
+ text: '',
+ padding: {
+ top: 4,
+ bottom: 4
+ }
+ },
+ ticks: {
+ minRotation: 0,
+ maxRotation: 50,
+ mirror: false,
+ textStrokeWidth: 0,
+ textStrokeColor: '',
+ padding: 3,
+ display: true,
+ autoSkip: true,
+ autoSkipPadding: 3,
+ labelOffset: 0,
+ callback: Ticks.formatters.values,
+ minor: {},
+ major: {},
+ align: 'center',
+ crossAlign: 'near',
+ showLabelBackdrop: false,
+ backdropColor: 'rgba(255, 255, 255, 0.75)',
+ backdropPadding: 2
+ }
+ });
+ defaults.route('scale.ticks', 'color', '', 'color');
+ defaults.route('scale.grid', 'color', '', 'borderColor');
+ defaults.route('scale.border', 'color', '', 'borderColor');
+ defaults.route('scale.title', 'color', '', 'color');
+ defaults.describe('scale', {
+ _fallback: false,
+ _scriptable: function _scriptable(name) {
+ return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';
+ },
+ _indexable: function _indexable(name) {
+ return name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash';
+ }
+ });
+ defaults.describe('scales', {
+ _fallback: 'scale'
+ });
+ defaults.describe('scale.ticks', {
+ _scriptable: function _scriptable(name) {
+ return name !== 'backdropPadding' && name !== 'callback';
+ },
+ _indexable: function _indexable(name) {
+ return name !== 'backdropPadding';
+ }
+ });
+ }
var overrides = Object.create(null);
var descriptors = Object.create(null);
-
function getScope$1(node, key) {
if (!key) {
return node;
}
-
var keys = key.split('.');
-
for (var i = 0, n = keys.length; i < n; ++i) {
var k = keys[i];
node = node[k] || (node[k] = Object.create(null));
}
-
return node;
}
-
function _set(root, scope, values) {
if (typeof scope === 'string') {
return merge(getScope$1(root, scope), values);
}
-
return merge(getScope$1(root, ''), scope);
}
-
var Defaults = /*#__PURE__*/function () {
- function Defaults(_descriptors) {
- _classCallCheck(this, Defaults);
-
+ function Defaults(_descriptors, _appliers) {
+ _classCallCheck$x(this, Defaults);
this.animation = undefined;
this.backgroundColor = 'rgba(0,0,0,0.1)';
this.borderColor = 'rgba(0,0,0,0.1)';
this.color = '#666';
this.datasets = {};
-
this.devicePixelRatio = function (context) {
return context.chart.platform.getDevicePixelRatio();
};
-
this.elements = {};
this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];
this.font = {
family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
size: 12,
style: 'normal',
lineHeight: 1.2,
weight: null
};
this.hover = {};
-
this.hoverBackgroundColor = function (ctx, options) {
return getHoverColor(options.backgroundColor);
};
-
this.hoverBorderColor = function (ctx, options) {
return getHoverColor(options.borderColor);
};
-
this.hoverColor = function (ctx, options) {
return getHoverColor(options.color);
};
-
this.indexAxis = 'x';
this.interaction = {
mode: 'nearest',
- intersect: true
+ intersect: true,
+ includeInvisible: false
};
this.maintainAspectRatio = true;
this.onHover = null;
this.onClick = null;
this.parsing = true;
this.plugins = {};
this.responsive = true;
this.scale = undefined;
this.scales = {};
this.showLine = true;
+ this.drawActiveElementsOnTop = true;
this.describe(_descriptors);
+ this.apply(_appliers);
}
-
- _createClass(Defaults, [{
+ _createClass$x(Defaults, [{
key: "set",
value: function set(scope, values) {
return _set(this, scope, values);
}
}, {
@@ -1691,40 +2196,43 @@
}
}, {
key: "route",
value: function route(scope, name, targetScope, targetName) {
var _Object$definePropert;
-
var scopeObject = getScope$1(this, scope);
var targetScopeObject = getScope$1(this, targetScope);
var privateName = '_' + name;
- Object.defineProperties(scopeObject, (_Object$definePropert = {}, _defineProperty(_Object$definePropert, privateName, {
+ Object.defineProperties(scopeObject, (_Object$definePropert = {}, _defineProperty$w(_Object$definePropert, privateName, {
value: scopeObject[name],
writable: true
- }), _defineProperty(_Object$definePropert, name, {
+ }), _defineProperty$w(_Object$definePropert, name, {
enumerable: true,
get: function get() {
var local = this[privateName];
var target = targetScopeObject[targetName];
-
if (isObject(local)) {
return Object.assign({}, target, local);
}
-
return valueOrDefault(local, target);
},
set: function set(value) {
this[privateName] = value;
}
}), _Object$definePropert));
}
+ }, {
+ key: "apply",
+ value: function apply(appliers) {
+ var _this = this;
+ appliers.forEach(function (apply) {
+ return apply(_this);
+ });
+ }
}]);
-
return Defaults;
}();
-
- var defaults = new Defaults({
+ var defaults = /* #__PURE__ */new Defaults({
_scriptable: function _scriptable(name) {
return !name.startsWith('on');
},
_indexable: function _indexable(name) {
return name !== 'events';
@@ -1734,611 +2242,511 @@
},
interaction: {
_scriptable: false,
_indexable: false
}
- });
-
+ }, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);
function toFontString(font) {
if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
return null;
}
-
return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;
}
-
function _measureText(ctx, data, gc, longest, string) {
var textWidth = data[string];
-
if (!textWidth) {
textWidth = data[string] = ctx.measureText(string).width;
gc.push(string);
}
-
if (textWidth > longest) {
longest = textWidth;
}
-
return longest;
}
-
function _longestText(ctx, font, arrayOfThings, cache) {
cache = cache || {};
var data = cache.data = cache.data || {};
var gc = cache.garbageCollect = cache.garbageCollect || [];
-
if (cache.font !== font) {
data = cache.data = {};
gc = cache.garbageCollect = [];
cache.font = font;
}
-
ctx.save();
ctx.font = font;
var longest = 0;
var ilen = arrayOfThings.length;
var i, j, jlen, thing, nestedThing;
-
for (i = 0; i < ilen; i++) {
thing = arrayOfThings[i];
-
if (thing !== undefined && thing !== null && isArray(thing) !== true) {
longest = _measureText(ctx, data, gc, longest, thing);
} else if (isArray(thing)) {
for (j = 0, jlen = thing.length; j < jlen; j++) {
nestedThing = thing[j];
-
if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {
longest = _measureText(ctx, data, gc, longest, nestedThing);
}
}
}
}
-
ctx.restore();
var gcLen = gc.length / 2;
-
if (gcLen > arrayOfThings.length) {
for (i = 0; i < gcLen; i++) {
delete data[gc[i]];
}
-
gc.splice(0, gcLen);
}
-
return longest;
}
-
function _alignPixel(chart, pixel, width) {
var devicePixelRatio = chart.currentDevicePixelRatio;
var halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
}
-
function clearCanvas(canvas, ctx) {
ctx = ctx || canvas.getContext('2d');
ctx.save();
ctx.resetTransform();
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.restore();
}
-
function drawPoint(ctx, options, x, y) {
- var type, xOffset, yOffset, size, cornerRadius;
+ drawPointLegend(ctx, options, x, y, null);
+ }
+ function drawPointLegend(ctx, options, x, y, w) {
+ var type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
var style = options.pointStyle;
var rotation = options.rotation;
var radius = options.radius;
var rad = (rotation || 0) * RAD_PER_DEG;
-
- if (style && _typeof(style) === 'object') {
+ if (style && _typeof$z(style) === 'object') {
type = style.toString();
-
if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
ctx.save();
ctx.translate(x, y);
ctx.rotate(rad);
ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
ctx.restore();
return;
}
}
-
if (isNaN(radius) || radius <= 0) {
return;
}
-
ctx.beginPath();
-
switch (style) {
default:
- ctx.arc(x, y, radius, 0, TAU);
+ if (w) {
+ ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
+ } else {
+ ctx.arc(x, y, radius, 0, TAU);
+ }
ctx.closePath();
break;
-
case 'triangle':
- ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
+ width = w ? w / 2 : radius;
+ ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
rad += TWO_THIRDS_PI;
- ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
+ ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
rad += TWO_THIRDS_PI;
- ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
+ ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
ctx.closePath();
break;
-
case 'rectRounded':
cornerRadius = radius * 0.516;
size = radius - cornerRadius;
xOffset = Math.cos(rad + QUARTER_PI) * size;
+ xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
yOffset = Math.sin(rad + QUARTER_PI) * size;
- ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
- ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);
- ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);
- ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
+ yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
+ ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
+ ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);
+ ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);
+ ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
ctx.closePath();
break;
-
case 'rect':
if (!rotation) {
size = Math.SQRT1_2 * radius;
- ctx.rect(x - size, y - size, 2 * size, 2 * size);
+ width = w ? w / 2 : size;
+ ctx.rect(x - width, y - size, 2 * width, 2 * size);
break;
}
-
rad += QUARTER_PI;
-
case 'rectRot':
+ xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
xOffset = Math.cos(rad) * radius;
yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + yOffset, y - xOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
+ yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+ ctx.moveTo(x - xOffsetW, y - yOffset);
+ ctx.lineTo(x + yOffsetW, y - xOffset);
+ ctx.lineTo(x + xOffsetW, y + yOffset);
+ ctx.lineTo(x - yOffsetW, y + xOffset);
ctx.closePath();
break;
-
case 'crossRot':
rad += QUARTER_PI;
-
case 'cross':
+ xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
xOffset = Math.cos(rad) * radius;
yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.moveTo(x + yOffset, y - xOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
+ yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+ ctx.moveTo(x - xOffsetW, y - yOffset);
+ ctx.lineTo(x + xOffsetW, y + yOffset);
+ ctx.moveTo(x + yOffsetW, y - xOffset);
+ ctx.lineTo(x - yOffsetW, y + xOffset);
break;
-
case 'star':
+ xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
xOffset = Math.cos(rad) * radius;
yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.moveTo(x + yOffset, y - xOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
+ yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+ ctx.moveTo(x - xOffsetW, y - yOffset);
+ ctx.lineTo(x + xOffsetW, y + yOffset);
+ ctx.moveTo(x + yOffsetW, y - xOffset);
+ ctx.lineTo(x - yOffsetW, y + xOffset);
rad += QUARTER_PI;
+ xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
xOffset = Math.cos(rad) * radius;
yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.moveTo(x + yOffset, y - xOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
+ yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+ ctx.moveTo(x - xOffsetW, y - yOffset);
+ ctx.lineTo(x + xOffsetW, y + yOffset);
+ ctx.moveTo(x + yOffsetW, y - xOffset);
+ ctx.lineTo(x - yOffsetW, y + xOffset);
break;
-
case 'line':
- xOffset = Math.cos(rad) * radius;
+ xOffset = w ? w / 2 : Math.cos(rad) * radius;
yOffset = Math.sin(rad) * radius;
ctx.moveTo(x - xOffset, y - yOffset);
ctx.lineTo(x + xOffset, y + yOffset);
break;
-
case 'dash':
ctx.moveTo(x, y);
- ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);
+ ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);
break;
+ case false:
+ ctx.closePath();
+ break;
}
-
ctx.fill();
-
if (options.borderWidth > 0) {
ctx.stroke();
}
}
-
function _isPointInArea(point, area, margin) {
margin = margin || 0.5;
- return point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
+ return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
}
-
function clipArea(ctx, area) {
ctx.save();
ctx.beginPath();
ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
ctx.clip();
}
-
function unclipArea(ctx) {
ctx.restore();
}
-
function _steppedLineTo(ctx, previous, target, flip, mode) {
if (!previous) {
return ctx.lineTo(target.x, target.y);
}
-
if (mode === 'middle') {
var midpoint = (previous.x + target.x) / 2.0;
ctx.lineTo(midpoint, previous.y);
ctx.lineTo(midpoint, target.y);
} else if (mode === 'after' !== !!flip) {
ctx.lineTo(previous.x, target.y);
} else {
ctx.lineTo(target.x, previous.y);
}
-
ctx.lineTo(target.x, target.y);
}
-
function _bezierCurveTo(ctx, previous, target, flip) {
if (!previous) {
return ctx.lineTo(target.x, target.y);
}
-
ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);
}
-
function renderText(ctx, text, x, y, font) {
var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
var lines = isArray(text) ? text : [text];
var stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';
var i, line;
ctx.save();
-
- if (opts.translation) {
- ctx.translate(opts.translation[0], opts.translation[1]);
- }
-
- if (!isNullOrUndef(opts.rotation)) {
- ctx.rotate(opts.rotation);
- }
-
ctx.font = font.string;
-
- if (opts.color) {
- ctx.fillStyle = opts.color;
- }
-
- if (opts.textAlign) {
- ctx.textAlign = opts.textAlign;
- }
-
- if (opts.textBaseline) {
- ctx.textBaseline = opts.textBaseline;
- }
-
+ setRenderOpts(ctx, opts);
for (i = 0; i < lines.length; ++i) {
line = lines[i];
-
+ if (opts.backdrop) {
+ drawBackdrop(ctx, opts.backdrop);
+ }
if (stroke) {
if (opts.strokeColor) {
ctx.strokeStyle = opts.strokeColor;
}
-
if (!isNullOrUndef(opts.strokeWidth)) {
ctx.lineWidth = opts.strokeWidth;
}
-
ctx.strokeText(line, x, y, opts.maxWidth);
}
-
ctx.fillText(line, x, y, opts.maxWidth);
-
- if (opts.strikethrough || opts.underline) {
- var metrics = ctx.measureText(line);
- var left = x - metrics.actualBoundingBoxLeft;
- var right = x + metrics.actualBoundingBoxRight;
- var top = y - metrics.actualBoundingBoxAscent;
- var bottom = y + metrics.actualBoundingBoxDescent;
- var yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
- ctx.strokeStyle = ctx.fillStyle;
- ctx.beginPath();
- ctx.lineWidth = opts.decorationWidth || 2;
- ctx.moveTo(left, yDecoration);
- ctx.lineTo(right, yDecoration);
- ctx.stroke();
- }
-
+ decorateText(ctx, x, y, line, opts);
y += font.lineHeight;
}
-
ctx.restore();
}
-
- var LINE_HEIGHT = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);
-
+ function setRenderOpts(ctx, opts) {
+ if (opts.translation) {
+ ctx.translate(opts.translation[0], opts.translation[1]);
+ }
+ if (!isNullOrUndef(opts.rotation)) {
+ ctx.rotate(opts.rotation);
+ }
+ if (opts.color) {
+ ctx.fillStyle = opts.color;
+ }
+ if (opts.textAlign) {
+ ctx.textAlign = opts.textAlign;
+ }
+ if (opts.textBaseline) {
+ ctx.textBaseline = opts.textBaseline;
+ }
+ }
+ function decorateText(ctx, x, y, line, opts) {
+ if (opts.strikethrough || opts.underline) {
+ var metrics = ctx.measureText(line);
+ var left = x - metrics.actualBoundingBoxLeft;
+ var right = x + metrics.actualBoundingBoxRight;
+ var top = y - metrics.actualBoundingBoxAscent;
+ var bottom = y + metrics.actualBoundingBoxDescent;
+ var yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
+ ctx.strokeStyle = ctx.fillStyle;
+ ctx.beginPath();
+ ctx.lineWidth = opts.decorationWidth || 2;
+ ctx.moveTo(left, yDecoration);
+ ctx.lineTo(right, yDecoration);
+ ctx.stroke();
+ }
+ }
+ function drawBackdrop(ctx, opts) {
+ var oldColor = ctx.fillStyle;
+ ctx.fillStyle = opts.color;
+ ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
+ ctx.fillStyle = oldColor;
+ }
+ function addRoundedRectPath(ctx, rect) {
+ var x = rect.x,
+ y = rect.y,
+ w = rect.w,
+ h = rect.h,
+ radius = rect.radius;
+ ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
+ ctx.lineTo(x, y + h - radius.bottomLeft);
+ ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
+ ctx.lineTo(x + w - radius.bottomRight, y + h);
+ ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
+ ctx.lineTo(x + w, y + radius.topRight);
+ ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
+ ctx.lineTo(x + radius.topLeft, y);
+ }
+ var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
+ var FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
+ /**
+ * @alias Chart.helpers.options
+ * @namespace
+ */ /**
+ * Converts the given line height `value` in pixels for a specific font `size`.
+ * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
+ * @param size - The font size (in pixels) used to resolve relative `value`.
+ * @returns The effective line height in pixels (size * 1.2 if value is invalid).
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
+ * @since 2.7.0
+ */
function toLineHeight(value, size) {
var matches = ('' + value).match(LINE_HEIGHT);
-
if (!matches || matches[1] === 'normal') {
return size * 1.2;
}
-
value = +matches[2];
-
switch (matches[3]) {
case 'px':
return value;
-
case '%':
value /= 100;
break;
}
-
return size * value;
}
-
- var numberOrZero$1 = function numberOrZero(v) {
+ var numberOrZero = function numberOrZero(v) {
return +v || 0;
};
-
- function readValueToProps(value, props) {
+ function _readValueToProps(value, props) {
var ret = {};
var objProps = isObject(props);
var keys = objProps ? Object.keys(props) : props;
var read = isObject(value) ? objProps ? function (prop) {
return valueOrDefault(value[prop], value[props[prop]]);
} : function (prop) {
return value[prop];
} : function () {
return value;
};
-
- var _iterator = _createForOfIteratorHelper(keys),
- _step;
-
+ var _iterator4 = _createForOfIteratorHelper$1(keys),
+ _step4;
try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var prop = _step.value;
- ret[prop] = numberOrZero$1(read(prop));
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var prop = _step4.value;
+ ret[prop] = numberOrZero(read(prop));
}
} catch (err) {
- _iterator.e(err);
+ _iterator4.e(err);
} finally {
- _iterator.f();
+ _iterator4.f();
}
-
return ret;
}
-
+ /**
+ * Converts the given value into a TRBL object.
+ * @param value - If a number, set the value to all TRBL component,
+ * else, if an object, use defined properties and sets undefined ones to 0.
+ * x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left)
+ * @since 3.0.0
+ */
function toTRBL(value) {
- return readValueToProps(value, {
+ return _readValueToProps(value, {
top: 'y',
right: 'x',
bottom: 'y',
left: 'x'
});
}
-
+ /**
+ * Converts the given value into a TRBL corners object (similar with css border-radius).
+ * @param value - If a number, set the value to all TRBL corner components,
+ * else, if an object, use defined properties and sets undefined ones to 0.
+ * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)
+ * @since 3.0.0
+ */
function toTRBLCorners(value) {
- return readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
+ return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
}
-
+ /**
+ * Converts the given value into a padding object with pre-computed width/height.
+ * @param value - If a number, set the value to all TRBL component,
+ * else, if an object, use defined properties and sets undefined ones to 0.
+ * x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left, width, height)
+ * @since 2.7.0
+ */
function toPadding(value) {
var obj = toTRBL(value);
obj.width = obj.left + obj.right;
obj.height = obj.top + obj.bottom;
return obj;
}
-
+ /**
+ * Parses font options and returns the font object.
+ * @param options - A object that contains font options to be parsed.
+ * @param fallback - A object that contains fallback font options.
+ * @return The font object.
+ * @private
+ */
function toFont(options, fallback) {
options = options || {};
fallback = fallback || defaults.font;
var size = valueOrDefault(options.size, fallback.size);
-
if (typeof size === 'string') {
size = parseInt(size, 10);
}
-
+ var style = valueOrDefault(options.style, fallback.style);
+ if (style && !('' + style).match(FONT_STYLE)) {
+ console.warn('Invalid font style specified: "' + style + '"');
+ style = undefined;
+ }
var font = {
family: valueOrDefault(options.family, fallback.family),
lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
size: size,
- style: valueOrDefault(options.style, fallback.style),
+ style: style,
weight: valueOrDefault(options.weight, fallback.weight),
string: ''
};
font.string = toFontString(font);
return font;
}
-
+ /**
+ * Evaluates the given `inputs` sequentially and returns the first defined value.
+ * @param inputs - An array of values, falling back to the last value.
+ * @param context - If defined and the current value is a function, the value
+ * is called with `context` as first argument and the result becomes the new input.
+ * @param index - If defined and the current value is an array, the value
+ * at `index` become the new input.
+ * @param info - object to return information about resolution in
+ * @param info.cacheable - Will be set to `false` if option is not cacheable.
+ * @since 2.7.0
+ */
function resolve(inputs, context, index, info) {
var cacheable = true;
var i, ilen, value;
-
for (i = 0, ilen = inputs.length; i < ilen; ++i) {
value = inputs[i];
-
if (value === undefined) {
continue;
}
-
if (context !== undefined && typeof value === 'function') {
value = value(context);
cacheable = false;
}
-
if (index !== undefined && isArray(value)) {
value = value[index % value.length];
cacheable = false;
}
-
if (value !== undefined) {
if (info && !cacheable) {
info.cacheable = false;
}
-
return value;
}
}
}
-
- function _addGrace(minmax, grace) {
+ /**
+ * @param minmax
+ * @param grace
+ * @param beginAtZero
+ * @private
+ */
+ function _addGrace(minmax, grace, beginAtZero) {
var min = minmax.min,
- max = minmax.max;
- return {
- min: min - Math.abs(toDimension(grace, min)),
- max: max + toDimension(grace, max)
+ max = minmax.max;
+ var change = toDimension(grace, (max - min) / 2);
+ var keepZero = function keepZero(value, add) {
+ return beginAtZero && value === 0 ? 0 : value + add;
};
- }
-
- function _lookup(table, value, cmp) {
- cmp = cmp || function (index) {
- return table[index] < value;
- };
-
- var hi = table.length - 1;
- var lo = 0;
- var mid;
-
- while (hi - lo > 1) {
- mid = lo + hi >> 1;
-
- if (cmp(mid)) {
- lo = mid;
- } else {
- hi = mid;
- }
- }
-
return {
- lo: lo,
- hi: hi
+ min: keepZero(min, -Math.abs(change)),
+ max: keepZero(max, change)
};
}
-
- var _lookupByKey = function _lookupByKey(table, key, value) {
- return _lookup(table, value, function (index) {
- return table[index][key] < value;
- });
- };
-
- var _rlookupByKey = function _rlookupByKey(table, key, value) {
- return _lookup(table, value, function (index) {
- return table[index][key] >= value;
- });
- };
-
- function _filterBetween(values, min, max) {
- var start = 0;
- var end = values.length;
-
- while (start < end && values[start] < min) {
- start++;
- }
-
- while (end > start && values[end - 1] > max) {
- end--;
- }
-
- return start > 0 || end < values.length ? values.slice(start, end) : values;
+ function createContext(parentContext, context) {
+ return Object.assign(Object.create(parentContext), context);
}
-
- var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
-
- function listenArrayEvents(array, listener) {
- if (array._chartjs) {
- array._chartjs.listeners.push(listener);
-
- return;
- }
-
- Object.defineProperty(array, '_chartjs', {
- configurable: true,
- enumerable: false,
- value: {
- listeners: [listener]
- }
- });
- arrayEvents.forEach(function (key) {
- var method = '_onData' + _capitalize(key);
-
- var base = array[key];
- Object.defineProperty(array, key, {
- configurable: true,
- enumerable: false,
- value: function value() {
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
- args[_key2] = arguments[_key2];
- }
-
- var res = base.apply(this, args);
-
- array._chartjs.listeners.forEach(function (object) {
- if (typeof object[method] === 'function') {
- object[method].apply(object, args);
- }
- });
-
- return res;
- }
- });
- });
- }
-
- function unlistenArrayEvents(array, listener) {
- var stub = array._chartjs;
-
- if (!stub) {
- return;
- }
-
- var listeners = stub.listeners;
- var index = listeners.indexOf(listener);
-
- if (index !== -1) {
- listeners.splice(index, 1);
- }
-
- if (listeners.length > 0) {
- return;
- }
-
- arrayEvents.forEach(function (key) {
- delete array[key];
- });
- delete array._chartjs;
- }
-
- function _arrayUnique(items) {
- var set = new Set();
- var i, ilen;
-
- for (i = 0, ilen = items.length; i < ilen; ++i) {
- set.add(items[i]);
- }
-
- if (set.size === ilen) {
- return items;
- }
-
- var result = [];
- set.forEach(function (item) {
- result.push(item);
- });
- return result;
- }
-
function _createResolver(scopes) {
var _cache;
-
var prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];
var rootScopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : scopes;
var fallback = arguments.length > 3 ? arguments[3] : undefined;
-
+ var getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {
+ return scopes[0];
+ };
if (!defined(fallback)) {
fallback = _resolve('_fallback', scopes);
}
-
- var cache = (_cache = {}, _defineProperty(_cache, Symbol.toStringTag, 'Object'), _defineProperty(_cache, "_cacheable", true), _defineProperty(_cache, "_scopes", scopes), _defineProperty(_cache, "_rootScopes", rootScopes), _defineProperty(_cache, "_fallback", fallback), _defineProperty(_cache, "override", function override(scope) {
+ var cache = (_cache = {}, _defineProperty$w(_cache, Symbol.toStringTag, 'Object'), _defineProperty$w(_cache, "_cacheable", true), _defineProperty$w(_cache, "_scopes", scopes), _defineProperty$w(_cache, "_rootScopes", rootScopes), _defineProperty$w(_cache, "_fallback", fallback), _defineProperty$w(_cache, "_getTarget", getTarget), _defineProperty$w(_cache, "override", function override(scope) {
return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes, rootScopes, fallback);
}), _cache);
return new Proxy(cache, {
deleteProperty: function deleteProperty(target, prop) {
delete target[prop];
@@ -2362,18 +2770,17 @@
},
ownKeys: function ownKeys(target) {
return getKeysFromAllScopes(target);
},
set: function set(target, prop, value) {
- scopes[0][prop] = value;
- delete target[prop];
+ var storage = target._storage || (target._storage = getTarget());
+ target[prop] = storage[prop] = value;
delete target._keys;
return true;
}
});
}
-
function _attachContext(proxy, context, subProxy, descriptorDefaults) {
var cache = {
_cacheable: false,
_proxy: proxy,
_context: context,
@@ -2418,24 +2825,21 @@
delete target[prop];
return true;
}
});
}
-
function _descriptors(proxy) {
var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
scriptable: true,
indexable: true
};
-
var _proxy$_scriptable = proxy._scriptable,
- _scriptable = _proxy$_scriptable === void 0 ? defaults.scriptable : _proxy$_scriptable,
- _proxy$_indexable = proxy._indexable,
- _indexable = _proxy$_indexable === void 0 ? defaults.indexable : _proxy$_indexable,
- _proxy$_allKeys = proxy._allKeys,
- _allKeys = _proxy$_allKeys === void 0 ? defaults.allKeys : _proxy$_allKeys;
-
+ _scriptable = _proxy$_scriptable === void 0 ? defaults.scriptable : _proxy$_scriptable,
+ _proxy$_indexable = proxy._indexable,
+ _indexable = _proxy$_indexable === void 0 ? defaults.indexable : _proxy$_indexable,
+ _proxy$_allKeys = proxy._allKeys,
+ _allKeys = _proxy$_allKeys === void 0 ? defaults.allKeys : _proxy$_allKeys;
return {
allKeys: _allKeys,
scriptable: _scriptable,
indexable: _indexable,
isScriptable: isFunction(_scriptable) ? _scriptable : function () {
@@ -2444,299 +2848,264 @@
isIndexable: isFunction(_indexable) ? _indexable : function () {
return _indexable;
}
};
}
-
var readKey = function readKey(prefix, name) {
return prefix ? prefix + _capitalize(name) : name;
};
-
var needsSubResolver = function needsSubResolver(prop, value) {
- return isObject(value) && prop !== 'adapters';
+ return isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);
};
-
function _cached(target, prop, resolve) {
- var value = target[prop];
-
- if (defined(value)) {
- return value;
+ if (Object.prototype.hasOwnProperty.call(target, prop)) {
+ return target[prop];
}
-
- value = resolve();
-
- if (defined(value)) {
- target[prop] = value;
- }
-
+ var value = resolve();
+ target[prop] = value;
return value;
}
-
function _resolveWithContext(target, prop, receiver) {
var _proxy = target._proxy,
- _context = target._context,
- _subProxy = target._subProxy,
- descriptors = target._descriptors;
+ _context = target._context,
+ _subProxy = target._subProxy,
+ descriptors = target._descriptors;
var value = _proxy[prop];
-
if (isFunction(value) && descriptors.isScriptable(prop)) {
value = _resolveScriptable(prop, value, target, receiver);
}
-
if (isArray(value) && value.length) {
value = _resolveArray(prop, value, target, descriptors.isIndexable);
}
-
if (needsSubResolver(prop, value)) {
value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);
}
-
return value;
}
-
function _resolveScriptable(prop, value, target, receiver) {
var _proxy = target._proxy,
- _context = target._context,
- _subProxy = target._subProxy,
- _stack = target._stack;
-
+ _context = target._context,
+ _subProxy = target._subProxy,
+ _stack = target._stack;
if (_stack.has(prop)) {
- throw new Error('Recursion detected: ' + _toConsumableArray(_stack).join('->') + '->' + prop);
+ throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);
}
-
_stack.add(prop);
-
value = value(_context, _subProxy || receiver);
-
- _stack.delete(prop);
-
- if (isObject(value)) {
+ _stack["delete"](prop);
+ if (needsSubResolver(prop, value)) {
value = createSubResolver(_proxy._scopes, _proxy, prop, value);
}
-
return value;
}
-
function _resolveArray(prop, value, target, isIndexable) {
var _proxy = target._proxy,
- _context = target._context,
- _subProxy = target._subProxy,
- descriptors = target._descriptors;
-
+ _context = target._context,
+ _subProxy = target._subProxy,
+ descriptors = target._descriptors;
if (defined(_context.index) && isIndexable(prop)) {
value = value[_context.index % value.length];
} else if (isObject(value[0])) {
var arr = value;
-
var scopes = _proxy._scopes.filter(function (s) {
return s !== arr;
});
-
value = [];
-
- var _iterator2 = _createForOfIteratorHelper(arr),
- _step2;
-
+ var _iterator5 = _createForOfIteratorHelper$1(arr),
+ _step5;
try {
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
- var item = _step2.value;
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var item = _step5.value;
var resolver = createSubResolver(scopes, _proxy, prop, item);
value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));
}
} catch (err) {
- _iterator2.e(err);
+ _iterator5.e(err);
} finally {
- _iterator2.f();
+ _iterator5.f();
}
}
-
return value;
}
-
function resolveFallback(fallback, prop, value) {
return isFunction(fallback) ? fallback(prop, value) : fallback;
}
-
var getScope = function getScope(key, parent) {
return key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;
};
-
- function addScopes(set, parentScopes, key, parentFallback) {
- var _iterator3 = _createForOfIteratorHelper(parentScopes),
- _step3;
-
+ function addScopes(set, parentScopes, key, parentFallback, value) {
+ var _iterator6 = _createForOfIteratorHelper$1(parentScopes),
+ _step6;
try {
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
- var parent = _step3.value;
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var parent = _step6.value;
var scope = getScope(key, parent);
-
if (scope) {
set.add(scope);
- var fallback = resolveFallback(scope._fallback, key, scope);
-
+ var fallback = resolveFallback(scope._fallback, key, value);
if (defined(fallback) && fallback !== key && fallback !== parentFallback) {
return fallback;
}
} else if (scope === false && defined(parentFallback) && key !== parentFallback) {
return null;
}
}
} catch (err) {
- _iterator3.e(err);
+ _iterator6.e(err);
} finally {
- _iterator3.f();
+ _iterator6.f();
}
-
return false;
}
-
function createSubResolver(parentScopes, resolver, prop, value) {
var rootScopes = resolver._rootScopes;
var fallback = resolveFallback(resolver._fallback, prop, value);
var allScopes = [].concat(_toConsumableArray(parentScopes), _toConsumableArray(rootScopes));
var set = new Set();
- var firstParent = parentScopes[0];
-
- if (isObject(firstParent) && !(prop in firstParent)) {
- set.add(firstParent[prop] = {});
- }
-
set.add(value);
- var key = addScopesFromKey(set, allScopes, prop, fallback || prop);
-
+ var key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);
if (key === null) {
return false;
}
-
if (defined(fallback) && fallback !== prop) {
- key = addScopesFromKey(set, allScopes, fallback, key);
-
+ key = addScopesFromKey(set, allScopes, fallback, key, value);
if (key === null) {
return false;
}
}
-
- return _createResolver(_toConsumableArray(set), [''], rootScopes, fallback);
+ return _createResolver(Array.from(set), [''], rootScopes, fallback, function () {
+ return subGetTarget(resolver, prop, value);
+ });
}
-
- function addScopesFromKey(set, allScopes, key, fallback) {
+ function addScopesFromKey(set, allScopes, key, fallback, item) {
while (key) {
- key = addScopes(set, allScopes, key, fallback);
+ key = addScopes(set, allScopes, key, fallback, item);
}
-
return key;
}
-
+ function subGetTarget(resolver, prop, value) {
+ var parent = resolver._getTarget();
+ if (!(prop in parent)) {
+ parent[prop] = {};
+ }
+ var target = parent[prop];
+ if (isArray(target) && isObject(value)) {
+ return value;
+ }
+ return target || {};
+ }
function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
var value;
-
- var _iterator4 = _createForOfIteratorHelper(prefixes),
- _step4;
-
+ var _iterator7 = _createForOfIteratorHelper$1(prefixes),
+ _step7;
try {
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
- var prefix = _step4.value;
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var prefix = _step7.value;
value = _resolve(readKey(prefix, prop), scopes);
-
if (defined(value)) {
return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
}
}
} catch (err) {
- _iterator4.e(err);
+ _iterator7.e(err);
} finally {
- _iterator4.f();
+ _iterator7.f();
}
}
-
function _resolve(key, scopes) {
- var _iterator5 = _createForOfIteratorHelper(scopes),
- _step5;
-
+ var _iterator8 = _createForOfIteratorHelper$1(scopes),
+ _step8;
try {
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
- var scope = _step5.value;
-
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
+ var scope = _step8.value;
if (!scope) {
continue;
}
-
var value = scope[key];
-
if (defined(value)) {
return value;
}
}
} catch (err) {
- _iterator5.e(err);
+ _iterator8.e(err);
} finally {
- _iterator5.f();
+ _iterator8.f();
}
}
-
function getKeysFromAllScopes(target) {
var keys = target._keys;
-
if (!keys) {
keys = target._keys = resolveKeysFromAllScopes(target._scopes);
}
-
return keys;
}
-
function resolveKeysFromAllScopes(scopes) {
var set = new Set();
-
- var _iterator6 = _createForOfIteratorHelper(scopes),
- _step6;
-
+ var _iterator9 = _createForOfIteratorHelper$1(scopes),
+ _step9;
try {
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
- var scope = _step6.value;
-
- var _iterator7 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {
- return !k.startsWith('_');
- })),
- _step7;
-
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
+ var scope = _step9.value;
+ var _iterator10 = _createForOfIteratorHelper$1(Object.keys(scope).filter(function (k) {
+ return !k.startsWith('_');
+ })),
+ _step10;
try {
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
- var key = _step7.value;
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
+ var key = _step10.value;
set.add(key);
}
} catch (err) {
- _iterator7.e(err);
+ _iterator10.e(err);
} finally {
- _iterator7.f();
+ _iterator10.f();
}
}
} catch (err) {
- _iterator6.e(err);
+ _iterator9.e(err);
} finally {
- _iterator6.f();
+ _iterator9.f();
}
-
- return _toConsumableArray(set);
+ return Array.from(set);
}
-
+ function _parseObjectDataRadialScale(meta, data, start, count) {
+ var iScale = meta.iScale;
+ var _this$_parsing$key = this._parsing.key,
+ key = _this$_parsing$key === void 0 ? 'r' : _this$_parsing$key;
+ var parsed = new Array(count);
+ var i, ilen, index, item;
+ for (i = 0, ilen = count; i < ilen; ++i) {
+ index = i + start;
+ item = data[index];
+ parsed[i] = {
+ r: iScale.parse(resolveObjectKey(item, key), index)
+ };
+ }
+ return parsed;
+ }
var EPSILON = Number.EPSILON || 1e-14;
-
var getPoint = function getPoint(points, i) {
return i < points.length && !points[i].skip && points[i];
};
-
+ var getValueAxis = function getValueAxis(indexAxis) {
+ return indexAxis === 'x' ? 'y' : 'x';
+ };
function splineCurve(firstPoint, middlePoint, afterPoint, t) {
+ // Props to Rob Spencer at scaled innovation for his post on splining between points
+ // http://scaledinnovation.com/analytics/splines/aboutSplines.html
+ // This function must also respect "skipped" points
var previous = firstPoint.skip ? middlePoint : firstPoint;
var current = middlePoint;
var next = afterPoint.skip ? middlePoint : afterPoint;
var d01 = distanceBetweenPoints(current, previous);
var d12 = distanceBetweenPoints(next, current);
var s01 = d01 / (d01 + d12);
var s12 = d12 / (d01 + d12);
+ // If all points are the same, s01 & s02 will be inf
s01 = isNaN(s01) ? 0 : s01;
s12 = isNaN(s12) ? 0 : s12;
- var fa = t * s01;
+ var fa = t * s01; // scaling factor for triangle Ta
var fb = t * s12;
return {
previous: {
x: current.x - fa * (next.x - previous.x),
y: current.y - fa * (next.y - previous.y)
@@ -2745,433 +3114,435 @@
x: current.x + fb * (next.x - previous.x),
y: current.y + fb * (next.y - previous.y)
}
};
}
-
+ /**
+ * Adjust tangents to ensure monotonic properties
+ */
function monotoneAdjust(points, deltaK, mK) {
var pointsLen = points.length;
var alphaK, betaK, tauK, squaredMagnitude, pointCurrent;
var pointAfter = getPoint(points, 0);
-
for (var i = 0; i < pointsLen - 1; ++i) {
pointCurrent = pointAfter;
pointAfter = getPoint(points, i + 1);
-
if (!pointCurrent || !pointAfter) {
continue;
}
-
if (almostEquals(deltaK[i], 0, EPSILON)) {
mK[i] = mK[i + 1] = 0;
continue;
}
-
alphaK = mK[i] / deltaK[i];
betaK = mK[i + 1] / deltaK[i];
squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
-
if (squaredMagnitude <= 9) {
continue;
}
-
tauK = 3 / Math.sqrt(squaredMagnitude);
mK[i] = alphaK * tauK * deltaK[i];
mK[i + 1] = betaK * tauK * deltaK[i];
}
}
-
function monotoneCompute(points, mK) {
+ var indexAxis = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'x';
+ var valueAxis = getValueAxis(indexAxis);
var pointsLen = points.length;
- var deltaX, pointBefore, pointCurrent;
+ var delta, pointBefore, pointCurrent;
var pointAfter = getPoint(points, 0);
-
for (var i = 0; i < pointsLen; ++i) {
pointBefore = pointCurrent;
pointCurrent = pointAfter;
pointAfter = getPoint(points, i + 1);
-
if (!pointCurrent) {
continue;
}
-
- var _pointCurrent = pointCurrent,
- x = _pointCurrent.x,
- y = _pointCurrent.y;
-
+ var iPixel = pointCurrent[indexAxis];
+ var vPixel = pointCurrent[valueAxis];
if (pointBefore) {
- deltaX = (x - pointBefore.x) / 3;
- pointCurrent.cp1x = x - deltaX;
- pointCurrent.cp1y = y - deltaX * mK[i];
+ delta = (iPixel - pointBefore[indexAxis]) / 3;
+ pointCurrent["cp1".concat(indexAxis)] = iPixel - delta;
+ pointCurrent["cp1".concat(valueAxis)] = vPixel - delta * mK[i];
}
-
if (pointAfter) {
- deltaX = (pointAfter.x - x) / 3;
- pointCurrent.cp2x = x + deltaX;
- pointCurrent.cp2y = y + deltaX * mK[i];
+ delta = (pointAfter[indexAxis] - iPixel) / 3;
+ pointCurrent["cp2".concat(indexAxis)] = iPixel + delta;
+ pointCurrent["cp2".concat(valueAxis)] = vPixel + delta * mK[i];
}
}
}
-
+ /**
+ * This function calculates Bézier control points in a similar way than |splineCurve|,
+ * but preserves monotonicity of the provided data and ensures no local extremums are added
+ * between the dataset discrete points due to the interpolation.
+ * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+ */
function splineCurveMonotone(points) {
+ var indexAxis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';
+ var valueAxis = getValueAxis(indexAxis);
var pointsLen = points.length;
var deltaK = Array(pointsLen).fill(0);
var mK = Array(pointsLen);
+ // Calculate slopes (deltaK) and initialize tangents (mK)
var i, pointBefore, pointCurrent;
var pointAfter = getPoint(points, 0);
-
for (i = 0; i < pointsLen; ++i) {
pointBefore = pointCurrent;
pointCurrent = pointAfter;
pointAfter = getPoint(points, i + 1);
-
if (!pointCurrent) {
continue;
}
-
if (pointAfter) {
- var slopeDeltaX = pointAfter.x - pointCurrent.x;
- deltaK[i] = slopeDeltaX !== 0 ? (pointAfter.y - pointCurrent.y) / slopeDeltaX : 0;
+ var slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];
+ // In the case of two points that appear at the same x pixel, slopeDeltaX is 0
+ deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;
}
-
mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;
}
-
monotoneAdjust(points, deltaK, mK);
- monotoneCompute(points, mK);
+ monotoneCompute(points, mK, indexAxis);
}
-
function capControlPoint(pt, min, max) {
return Math.max(Math.min(pt, max), min);
}
-
function capBezierPoints(points, area) {
var i, ilen, point, inArea, inAreaPrev;
-
var inAreaNext = _isPointInArea(points[0], area);
-
for (i = 0, ilen = points.length; i < ilen; ++i) {
inAreaPrev = inArea;
inArea = inAreaNext;
inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);
-
if (!inArea) {
continue;
}
-
point = points[i];
-
if (inAreaPrev) {
point.cp1x = capControlPoint(point.cp1x, area.left, area.right);
point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);
}
-
if (inAreaNext) {
point.cp2x = capControlPoint(point.cp2x, area.left, area.right);
point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);
}
}
}
-
- function _updateBezierControlPoints(points, options, area, loop) {
+ /**
+ * @private
+ */
+ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {
var i, ilen, point, controlPoints;
-
+ // Only consider points that are drawn in case the spanGaps option is used
if (options.spanGaps) {
points = points.filter(function (pt) {
return !pt.skip;
});
}
-
if (options.cubicInterpolationMode === 'monotone') {
- splineCurveMonotone(points);
+ splineCurveMonotone(points, indexAxis);
} else {
var prev = loop ? points[points.length - 1] : points[0];
-
for (i = 0, ilen = points.length; i < ilen; ++i) {
point = points[i];
controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);
point.cp1x = controlPoints.previous.x;
point.cp1y = controlPoints.previous.y;
point.cp2x = controlPoints.next.x;
point.cp2y = controlPoints.next.y;
prev = point;
}
}
-
if (options.capBezierPoints) {
capBezierPoints(points, area);
}
}
+ /**
+ * Note: typedefs are auto-exported, so use a made-up `dom` namespace where
+ * necessary to avoid duplicates with `export * from './helpers`; see
+ * https://github.com/microsoft/TypeScript/issues/46011
+ * @typedef { import('../core/core.controller.js').default } dom.Chart
+ * @typedef { import('../../types').ChartEvent } ChartEvent
+ */ /**
+ * @private
+ */
+ function _isDomSupported() {
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
+ }
+ /**
+ * @private
+ */
function _getParentNode(domNode) {
var parent = domNode.parentNode;
-
if (parent && parent.toString() === '[object ShadowRoot]') {
parent = parent.host;
}
-
return parent;
}
-
+ /**
+ * convert max-width/max-height values that may be percentages into a number
+ * @private
+ */
function parseMaxStyle(styleValue, node, parentProperty) {
var valueInPixels;
-
if (typeof styleValue === 'string') {
valueInPixels = parseInt(styleValue, 10);
-
if (styleValue.indexOf('%') !== -1) {
+ // percentage * size in dimension
valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
}
} else {
valueInPixels = styleValue;
}
-
return valueInPixels;
}
-
var getComputedStyle = function getComputedStyle(element) {
- return window.getComputedStyle(element, null);
+ return element.ownerDocument.defaultView.getComputedStyle(element, null);
};
-
function getStyle(el, property) {
return getComputedStyle(el).getPropertyValue(property);
}
-
var positions = ['top', 'right', 'bottom', 'left'];
-
function getPositionedStyle(styles, style, suffix) {
var result = {};
suffix = suffix ? '-' + suffix : '';
-
for (var i = 0; i < 4; i++) {
var pos = positions[i];
result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;
}
-
result.width = result.left + result.right;
result.height = result.top + result.bottom;
return result;
}
-
var useOffsetPos = function useOffsetPos(x, y, target) {
return (x > 0 || y > 0) && (!target || !target.shadowRoot);
};
-
- function getCanvasPosition(evt, canvas) {
- var e = evt.native || evt;
+ /**
+ * @param e
+ * @param canvas
+ * @returns Canvas position
+ */
+ function getCanvasPosition(e, canvas) {
var touches = e.touches;
var source = touches && touches.length ? touches[0] : e;
var offsetX = source.offsetX,
- offsetY = source.offsetY;
+ offsetY = source.offsetY;
var box = false;
var x, y;
-
if (useOffsetPos(offsetX, offsetY, e.target)) {
x = offsetX;
y = offsetY;
} else {
var rect = canvas.getBoundingClientRect();
x = source.clientX - rect.left;
y = source.clientY - rect.top;
box = true;
}
-
return {
x: x,
y: y,
box: box
};
}
-
- function getRelativePosition$1(evt, chart) {
+ /**
+ * Gets an event's x, y coordinates, relative to the chart area
+ * @param event
+ * @param chart
+ * @returns x and y coordinates of the event
+ */
+ function getRelativePosition(event, chart) {
+ if ('native' in event) {
+ return event;
+ }
var canvas = chart.canvas,
- currentDevicePixelRatio = chart.currentDevicePixelRatio;
+ currentDevicePixelRatio = chart.currentDevicePixelRatio;
var style = getComputedStyle(canvas);
var borderBox = style.boxSizing === 'border-box';
var paddings = getPositionedStyle(style, 'padding');
var borders = getPositionedStyle(style, 'border', 'width');
-
- var _getCanvasPosition = getCanvasPosition(evt, canvas),
- x = _getCanvasPosition.x,
- y = _getCanvasPosition.y,
- box = _getCanvasPosition.box;
-
+ var _getCanvasPosition = getCanvasPosition(event, canvas),
+ x = _getCanvasPosition.x,
+ y = _getCanvasPosition.y,
+ box = _getCanvasPosition.box;
var xOffset = paddings.left + (box && borders.left);
var yOffset = paddings.top + (box && borders.top);
var width = chart.width,
- height = chart.height;
-
+ height = chart.height;
if (borderBox) {
width -= paddings.width + borders.width;
height -= paddings.height + borders.height;
}
-
return {
x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
};
}
-
function getContainerSize(canvas, width, height) {
var maxWidth, maxHeight;
-
if (width === undefined || height === undefined) {
var container = _getParentNode(canvas);
-
if (!container) {
width = canvas.clientWidth;
height = canvas.clientHeight;
} else {
- var rect = container.getBoundingClientRect();
+ var rect = container.getBoundingClientRect(); // this is the border box of the container
var containerStyle = getComputedStyle(container);
var containerBorder = getPositionedStyle(containerStyle, 'border', 'width');
var containerPadding = getPositionedStyle(containerStyle, 'padding');
width = rect.width - containerPadding.width - containerBorder.width;
height = rect.height - containerPadding.height - containerBorder.height;
maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');
maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');
}
}
-
return {
width: width,
height: height,
maxWidth: maxWidth || INFINITY,
maxHeight: maxHeight || INFINITY
};
}
-
var round1 = function round1(v) {
return Math.round(v * 10) / 10;
};
-
+ // eslint-disable-next-line complexity
function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
var style = getComputedStyle(canvas);
var margins = getPositionedStyle(style, 'margin');
var maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;
var maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;
var containerSize = getContainerSize(canvas, bbWidth, bbHeight);
var width = containerSize.width,
- height = containerSize.height;
-
+ height = containerSize.height;
if (style.boxSizing === 'content-box') {
var borders = getPositionedStyle(style, 'border', 'width');
var paddings = getPositionedStyle(style, 'padding');
width -= paddings.width + borders.width;
height -= paddings.height + borders.height;
}
-
width = Math.max(0, width - margins.width);
- height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);
+ height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);
width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
-
if (width && !height) {
+ // https://github.com/chartjs/Chart.js/issues/4659
+ // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)
height = round1(width / 2);
}
-
+ var maintainHeight = bbWidth !== undefined || bbHeight !== undefined;
+ if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {
+ height = containerSize.height;
+ width = round1(Math.floor(height * aspectRatio));
+ }
return {
width: width,
height: height
};
}
-
+ /**
+ * @param chart
+ * @param forceRatio
+ * @param forceStyle
+ * @returns True if the canvas context size or transformation has changed.
+ */
function retinaScale(chart, forceRatio, forceStyle) {
- var pixelRatio = chart.currentDevicePixelRatio = forceRatio || 1;
- var canvas = chart.canvas,
- width = chart.width,
- height = chart.height;
- canvas.height = height * pixelRatio;
- canvas.width = width * pixelRatio;
- chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
-
+ var pixelRatio = forceRatio || 1;
+ var deviceHeight = Math.floor(chart.height * pixelRatio);
+ var deviceWidth = Math.floor(chart.width * pixelRatio);
+ chart.height = Math.floor(chart.height);
+ chart.width = Math.floor(chart.width);
+ var canvas = chart.canvas;
+ // If no style has been set on the canvas, the render size is used as display size,
+ // making the chart visually bigger, so let's enforce it to the "correct" values.
+ // See https://github.com/chartjs/Chart.js/issues/3575
if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {
- canvas.style.height = height + 'px';
- canvas.style.width = width + 'px';
+ canvas.style.height = "".concat(chart.height, "px");
+ canvas.style.width = "".concat(chart.width, "px");
}
+ if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {
+ chart.currentDevicePixelRatio = pixelRatio;
+ canvas.height = deviceHeight;
+ canvas.width = deviceWidth;
+ chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
+ return true;
+ }
+ return false;
}
-
+ /**
+ * Detects support for options object argument in addEventListener.
+ * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
+ * @private
+ */
var supportsEventListenerOptions = function () {
var passiveSupported = false;
-
try {
var options = {
get passive() {
passiveSupported = true;
return false;
}
-
};
window.addEventListener('test', null, options);
window.removeEventListener('test', null, options);
- } catch (e) {}
-
+ } catch (e) {
+ // continue regardless of error
+ }
return passiveSupported;
}();
-
+ /**
+ * The "used" size is the final value of a dimension property after all calculations have
+ * been performed. This method uses the computed style of `element` but returns undefined
+ * if the computed style is not expressed in pixels. That can happen in some cases where
+ * `element` has a size relative to its parent and this last one is not yet displayed,
+ * for example because of `display: none` on a parent node.
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
+ * @returns Size in pixels or undefined if unknown.
+ */
function readUsedSize(element, property) {
var value = getStyle(element, property);
var matches = value && value.match(/^(\d+)(\.\d+)?px$/);
return matches ? +matches[1] : undefined;
}
+ /**
+ * @private
+ */
function _pointInLine(p1, p2, t, mode) {
return {
x: p1.x + t * (p2.x - p1.x),
y: p1.y + t * (p2.y - p1.y)
};
}
-
+ /**
+ * @private
+ */
function _steppedInterpolation(p1, p2, t, mode) {
return {
x: p1.x + t * (p2.x - p1.x),
y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y
};
}
-
+ /**
+ * @private
+ */
function _bezierInterpolation(p1, p2, t, mode) {
var cp1 = {
x: p1.cp2x,
y: p1.cp2y
};
var cp2 = {
x: p2.cp1x,
y: p2.cp1y
};
-
var a = _pointInLine(p1, cp1, t);
-
var b = _pointInLine(cp1, cp2, t);
-
var c = _pointInLine(cp2, p2, t);
-
var d = _pointInLine(a, b, t);
-
var e = _pointInLine(b, c, t);
-
return _pointInLine(d, e, t);
}
-
- var intlCache = new Map();
-
- function getNumberFormat(locale, options) {
- options = options || {};
- var cacheKey = locale + JSON.stringify(options);
- var formatter = intlCache.get(cacheKey);
-
- if (!formatter) {
- formatter = new Intl.NumberFormat(locale, options);
- intlCache.set(cacheKey, formatter);
- }
-
- return formatter;
- }
-
- function formatNumber(num, locale, options) {
- return getNumberFormat(locale, options).format(num);
- }
-
var getRightToLeftAdapter = function getRightToLeftAdapter(rectX, width) {
return {
x: function x(_x) {
return rectX + rectX + width - _x;
},
@@ -3180,22 +3551,20 @@
},
textAlign: function textAlign(align) {
if (align === 'center') {
return align;
}
-
return align === 'right' ? 'left' : 'right';
},
xPlus: function xPlus(x, value) {
return x - value;
},
leftForLtr: function leftForLtr(x, itemWidth) {
return x - itemWidth;
}
};
};
-
var getLeftToRightAdapter = function getLeftToRightAdapter() {
return {
x: function x(_x2) {
return _x2;
},
@@ -3209,233 +3578,207 @@
leftForLtr: function leftForLtr(x, _itemWidth) {
return x;
}
};
};
-
function getRtlAdapter(rtl, rectX, width) {
return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
}
-
function overrideTextDirection(ctx, direction) {
var style, original;
-
if (direction === 'ltr' || direction === 'rtl') {
style = ctx.canvas.style;
original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];
style.setProperty('direction', direction, 'important');
ctx.prevTextDirection = original;
}
}
-
function restoreTextDirection(ctx, original) {
if (original !== undefined) {
delete ctx.prevTextDirection;
ctx.canvas.style.setProperty('direction', original[0], original[1]);
}
}
-
function propertyFn(property) {
if (property === 'angle') {
return {
between: _angleBetween,
compare: _angleDiff,
normalize: _normalizeAngle
};
}
-
return {
- between: function between(n, s, e) {
- return n >= s && n <= e;
- },
+ between: _isBetween,
compare: function compare(a, b) {
return a - b;
},
normalize: function normalize(x) {
return x;
}
};
}
-
- function makeSubSegment(start, end, loop, count) {
+ function normalizeSegment(_ref) {
+ var start = _ref.start,
+ end = _ref.end,
+ count = _ref.count,
+ loop = _ref.loop,
+ style = _ref.style;
return {
start: start % count,
end: end % count,
- loop: loop && (end - start + 1) % count === 0
+ loop: loop && (end - start + 1) % count === 0,
+ style: style
};
}
-
function getSegment(segment, points, bounds) {
var property = bounds.property,
- startBound = bounds.start,
- endBound = bounds.end;
-
+ startBound = bounds.start,
+ endBound = bounds.end;
var _propertyFn = propertyFn(property),
- between = _propertyFn.between,
- normalize = _propertyFn.normalize;
-
+ between = _propertyFn.between,
+ normalize = _propertyFn.normalize;
var count = points.length;
var start = segment.start,
- end = segment.end,
- loop = segment.loop;
+ end = segment.end,
+ loop = segment.loop;
var i, ilen;
-
if (loop) {
start += count;
end += count;
-
for (i = 0, ilen = count; i < ilen; ++i) {
if (!between(normalize(points[start % count][property]), startBound, endBound)) {
break;
}
-
start--;
end--;
}
-
start %= count;
end %= count;
}
-
if (end < start) {
end += count;
}
-
return {
start: start,
end: end,
- loop: loop
+ loop: loop,
+ style: segment.style
};
}
-
function _boundSegment(segment, points, bounds) {
if (!bounds) {
return [segment];
}
-
var property = bounds.property,
- startBound = bounds.start,
- endBound = bounds.end;
+ startBound = bounds.start,
+ endBound = bounds.end;
var count = points.length;
-
var _propertyFn2 = propertyFn(property),
- compare = _propertyFn2.compare,
- between = _propertyFn2.between,
- normalize = _propertyFn2.normalize;
-
+ compare = _propertyFn2.compare,
+ between = _propertyFn2.between,
+ normalize = _propertyFn2.normalize;
var _getSegment = getSegment(segment, points, bounds),
- start = _getSegment.start,
- end = _getSegment.end,
- loop = _getSegment.loop;
-
+ start = _getSegment.start,
+ end = _getSegment.end,
+ loop = _getSegment.loop,
+ style = _getSegment.style;
var result = [];
var inside = false;
var subStart = null;
var value, point, prevValue;
-
var startIsBefore = function startIsBefore() {
return between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;
};
-
var endIsBefore = function endIsBefore() {
return compare(endBound, value) === 0 || between(endBound, prevValue, value);
};
-
var shouldStart = function shouldStart() {
return inside || startIsBefore();
};
-
var shouldStop = function shouldStop() {
return !inside || endIsBefore();
};
-
for (var i = start, prev = start; i <= end; ++i) {
point = points[i % count];
-
if (point.skip) {
continue;
}
-
value = normalize(point[property]);
+ if (value === prevValue) {
+ continue;
+ }
inside = between(value, startBound, endBound);
-
if (subStart === null && shouldStart()) {
subStart = compare(value, startBound) === 0 ? i : prev;
}
-
if (subStart !== null && shouldStop()) {
- result.push(makeSubSegment(subStart, i, loop, count));
+ result.push(normalizeSegment({
+ start: subStart,
+ end: i,
+ loop: loop,
+ count: count,
+ style: style
+ }));
subStart = null;
}
-
prev = i;
prevValue = value;
}
-
if (subStart !== null) {
- result.push(makeSubSegment(subStart, end, loop, count));
+ result.push(normalizeSegment({
+ start: subStart,
+ end: end,
+ loop: loop,
+ count: count,
+ style: style
+ }));
}
-
return result;
}
-
function _boundSegments(line, bounds) {
var result = [];
var segments = line.segments;
-
for (var i = 0; i < segments.length; i++) {
var sub = _boundSegment(segments[i], line.points, bounds);
-
if (sub.length) {
result.push.apply(result, _toConsumableArray(sub));
}
}
-
return result;
}
-
function findStartAndEnd(points, count, loop, spanGaps) {
var start = 0;
var end = count - 1;
-
if (loop && !spanGaps) {
while (start < count && !points[start].skip) {
start++;
}
}
-
while (start < count && points[start].skip) {
start++;
}
-
start %= count;
-
if (loop) {
end += start;
}
-
while (end > start && points[end % count].skip) {
end--;
}
-
end %= count;
return {
start: start,
end: end
};
}
-
function solidSegments(points, start, max, loop) {
var count = points.length;
var result = [];
var last = start;
var prev = points[start];
var end;
-
for (end = start + 1; end <= max; ++end) {
var cur = points[end % count];
-
if (cur.skip || cur.stop) {
if (!prev.skip) {
loop = false;
result.push({
start: start % count,
@@ -3444,173 +3787,234 @@
});
start = last = cur.stop ? end : null;
}
} else {
last = end;
-
if (prev.skip) {
start = end;
}
}
-
prev = cur;
}
-
if (last !== null) {
result.push({
start: start % count,
end: last % count,
loop: loop
});
}
-
return result;
}
-
- function _computeSegments(line) {
+ function _computeSegments(line, segmentOptions) {
var points = line.points;
var spanGaps = line.options.spanGaps;
var count = points.length;
-
if (!count) {
return [];
}
-
var loop = !!line._loop;
-
var _findStartAndEnd = findStartAndEnd(points, count, loop, spanGaps),
- start = _findStartAndEnd.start,
- end = _findStartAndEnd.end;
-
+ start = _findStartAndEnd.start,
+ end = _findStartAndEnd.end;
if (spanGaps === true) {
- return [{
+ return splitByStyles(line, [{
start: start,
end: end,
loop: loop
- }];
+ }], points, segmentOptions);
}
-
var max = end < start ? end + count : end;
var completeLoop = !!line._fullLoop && start === 0 && end === count - 1;
- return solidSegments(points, start, max, completeLoop);
+ return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);
}
+ function splitByStyles(line, segments, points, segmentOptions) {
+ if (!segmentOptions || !segmentOptions.setContext || !points) {
+ return segments;
+ }
+ return doSplitByStyles(line, segments, points, segmentOptions);
+ }
+ function doSplitByStyles(line, segments, points, segmentOptions) {
+ var chartContext = line._chart.getContext();
+ var baseStyle = readStyle(line.options);
+ var datasetIndex = line._datasetIndex,
+ spanGaps = line.options.spanGaps;
+ var count = points.length;
+ var result = [];
+ var prevStyle = baseStyle;
+ var start = segments[0].start;
+ var i = start;
+ function addStyle(s, e, l, st) {
+ var dir = spanGaps ? -1 : 1;
+ if (s === e) {
+ return;
+ }
+ s += count;
+ while (points[s % count].skip) {
+ s -= dir;
+ }
+ while (points[e % count].skip) {
+ e += dir;
+ }
+ if (s % count !== e % count) {
+ result.push({
+ start: s % count,
+ end: e % count,
+ loop: l,
+ style: st
+ });
+ prevStyle = st;
+ start = e % count;
+ }
+ }
+ var _iterator11 = _createForOfIteratorHelper$1(segments),
+ _step11;
+ try {
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
+ var segment = _step11.value;
+ start = spanGaps ? start : segment.start;
+ var prev = points[start % count];
+ var style = void 0;
+ for (i = start + 1; i <= segment.end; i++) {
+ var pt = points[i % count];
+ style = readStyle(segmentOptions.setContext(createContext(chartContext, {
+ type: 'segment',
+ p0: prev,
+ p1: pt,
+ p0DataIndex: (i - 1) % count,
+ p1DataIndex: i % count,
+ datasetIndex: datasetIndex
+ })));
+ if (styleChanged(style, prevStyle)) {
+ addStyle(start, i - 1, segment.loop, prevStyle);
+ }
+ prev = pt;
+ prevStyle = style;
+ }
+ if (start < i - 1) {
+ addStyle(start, i - 1, segment.loop, prevStyle);
+ }
+ }
+ } catch (err) {
+ _iterator11.e(err);
+ } finally {
+ _iterator11.f();
+ }
+ return result;
+ }
+ function readStyle(options) {
+ return {
+ backgroundColor: options.backgroundColor,
+ borderCapStyle: options.borderCapStyle,
+ borderDash: options.borderDash,
+ borderDashOffset: options.borderDashOffset,
+ borderJoinStyle: options.borderJoinStyle,
+ borderWidth: options.borderWidth,
+ borderColor: options.borderColor
+ };
+ }
+ function styleChanged(style, prevStyle) {
+ return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);
+ }
var Animator = /*#__PURE__*/function () {
function Animator() {
- _classCallCheck(this, Animator);
-
+ _classCallCheck$x(this, Animator);
this._request = null;
this._charts = new Map();
this._running = false;
this._lastDate = undefined;
}
-
- _createClass(Animator, [{
+ _createClass$x(Animator, [{
key: "_notify",
value: function _notify(chart, anims, date, type) {
var callbacks = anims.listeners[type];
var numSteps = anims.duration;
callbacks.forEach(function (fn) {
return fn({
chart: chart,
+ initial: anims.initial,
numSteps: numSteps,
currentStep: Math.min(date - anims.start, numSteps)
});
});
}
}, {
key: "_refresh",
value: function _refresh() {
- var me = this;
-
- if (me._request) {
+ var _this = this;
+ if (this._request) {
return;
}
-
- me._running = true;
- me._request = requestAnimFrame.call(window, function () {
- me._update();
-
- me._request = null;
-
- if (me._running) {
- me._refresh();
+ this._running = true;
+ this._request = requestAnimFrame.call(window, function () {
+ _this._update();
+ _this._request = null;
+ if (_this._running) {
+ _this._refresh();
}
});
}
}, {
key: "_update",
value: function _update() {
+ var _this2 = this;
var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();
- var me = this;
var remaining = 0;
-
- me._charts.forEach(function (anims, chart) {
+ this._charts.forEach(function (anims, chart) {
if (!anims.running || !anims.items.length) {
return;
}
-
var items = anims.items;
var i = items.length - 1;
var draw = false;
var item;
-
for (; i >= 0; --i) {
item = items[i];
-
if (item._active) {
if (item._total > anims.duration) {
anims.duration = item._total;
}
-
item.tick(date);
draw = true;
} else {
items[i] = items[items.length - 1];
items.pop();
}
}
-
if (draw) {
chart.draw();
-
- me._notify(chart, anims, date, 'progress');
+ _this2._notify(chart, anims, date, 'progress');
}
-
if (!items.length) {
anims.running = false;
-
- me._notify(chart, anims, date, 'complete');
+ _this2._notify(chart, anims, date, 'complete');
+ anims.initial = false;
}
-
remaining += items.length;
});
-
- me._lastDate = date;
-
+ this._lastDate = date;
if (remaining === 0) {
- me._running = false;
+ this._running = false;
}
}
}, {
key: "_getAnims",
value: function _getAnims(chart) {
var charts = this._charts;
var anims = charts.get(chart);
-
if (!anims) {
anims = {
running: false,
+ initial: true,
items: [],
listeners: {
complete: [],
progress: []
}
};
charts.set(chart, anims);
}
-
return anims;
}
}, {
key: "listen",
value: function listen(chart, event, cb) {
@@ -3618,15 +4022,13 @@
}
}, {
key: "add",
value: function add(chart, items) {
var _this$_getAnims$items;
-
if (!items || !items.length) {
return;
}
-
(_this$_getAnims$items = this._getAnims(chart).items).push.apply(_this$_getAnims$items, _toConsumableArray(items));
}
}, {
key: "has",
value: function has(chart) {
@@ -3634,172 +4036,142 @@
}
}, {
key: "start",
value: function start(chart) {
var anims = this._charts.get(chart);
-
if (!anims) {
return;
}
-
anims.running = true;
anims.start = Date.now();
anims.duration = anims.items.reduce(function (acc, cur) {
return Math.max(acc, cur._duration);
}, 0);
-
this._refresh();
}
}, {
key: "running",
value: function running(chart) {
if (!this._running) {
return false;
}
-
var anims = this._charts.get(chart);
-
if (!anims || !anims.running || !anims.items.length) {
return false;
}
-
return true;
}
}, {
key: "stop",
value: function stop(chart) {
var anims = this._charts.get(chart);
-
if (!anims || !anims.items.length) {
return;
}
-
var items = anims.items;
var i = items.length - 1;
-
for (; i >= 0; --i) {
items[i].cancel();
}
-
anims.items = [];
-
this._notify(chart, anims, Date.now(), 'complete');
}
}, {
key: "remove",
value: function remove(chart) {
- return this._charts.delete(chart);
+ return this._charts["delete"](chart);
}
}]);
-
return Animator;
}();
-
- var animator = new Animator();
+ var animator = /* #__PURE__ */new Animator();
var transparent = 'transparent';
var interpolators = {
- boolean: function boolean(from, to, factor) {
+ "boolean": function boolean(from, to, factor) {
return factor > 0.5 ? to : from;
},
color: function color$1(from, to, factor) {
var c0 = color(from || transparent);
-
var c1 = c0.valid && color(to || transparent);
-
return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;
},
number: function number(from, to, factor) {
return from + (to - from) * factor;
}
};
-
var Animation = /*#__PURE__*/function () {
function Animation(cfg, target, prop, to) {
- _classCallCheck(this, Animation);
-
+ _classCallCheck$x(this, Animation);
var currentValue = target[prop];
to = resolve([cfg.to, to, currentValue, cfg.from]);
var from = resolve([cfg.from, currentValue, to]);
this._active = true;
- this._fn = cfg.fn || interpolators[cfg.type || _typeof(from)];
+ this._fn = cfg.fn || interpolators[cfg.type || _typeof$z(from)];
this._easing = effects[cfg.easing] || effects.linear;
this._start = Math.floor(Date.now() + (cfg.delay || 0));
this._duration = this._total = Math.floor(cfg.duration);
this._loop = !!cfg.loop;
this._target = target;
this._prop = prop;
this._from = from;
this._to = to;
this._promises = undefined;
}
-
- _createClass(Animation, [{
+ _createClass$x(Animation, [{
key: "active",
value: function active() {
return this._active;
}
}, {
key: "update",
value: function update(cfg, to, date) {
- var me = this;
-
- if (me._active) {
- me._notify(false);
-
- var currentValue = me._target[me._prop];
- var elapsed = date - me._start;
- var remain = me._duration - elapsed;
- me._start = date;
- me._duration = Math.floor(Math.max(remain, cfg.duration));
- me._total += elapsed;
- me._loop = !!cfg.loop;
- me._to = resolve([cfg.to, to, currentValue, cfg.from]);
- me._from = resolve([cfg.from, currentValue, to]);
+ if (this._active) {
+ this._notify(false);
+ var currentValue = this._target[this._prop];
+ var elapsed = date - this._start;
+ var remain = this._duration - elapsed;
+ this._start = date;
+ this._duration = Math.floor(Math.max(remain, cfg.duration));
+ this._total += elapsed;
+ this._loop = !!cfg.loop;
+ this._to = resolve([cfg.to, to, currentValue, cfg.from]);
+ this._from = resolve([cfg.from, currentValue, to]);
}
}
}, {
key: "cancel",
value: function cancel() {
- var me = this;
-
- if (me._active) {
- me.tick(Date.now());
- me._active = false;
-
- me._notify(false);
+ if (this._active) {
+ this.tick(Date.now());
+ this._active = false;
+ this._notify(false);
}
}
}, {
key: "tick",
value: function tick(date) {
- var me = this;
- var elapsed = date - me._start;
- var duration = me._duration;
- var prop = me._prop;
- var from = me._from;
- var loop = me._loop;
- var to = me._to;
+ var elapsed = date - this._start;
+ var duration = this._duration;
+ var prop = this._prop;
+ var from = this._from;
+ var loop = this._loop;
+ var to = this._to;
var factor;
- me._active = from !== to && (loop || elapsed < duration);
-
- if (!me._active) {
- me._target[prop] = to;
-
- me._notify(true);
-
+ this._active = from !== to && (loop || elapsed < duration);
+ if (!this._active) {
+ this._target[prop] = to;
+ this._notify(true);
return;
}
-
if (elapsed < 0) {
- me._target[prop] = from;
+ this._target[prop] = from;
return;
}
-
factor = elapsed / duration % 2;
factor = loop && factor > 1 ? 2 - factor : factor;
- factor = me._easing(Math.min(1, Math.max(0, factor)));
- me._target[prop] = me._fn(from, to, factor);
+ factor = this._easing(Math.min(1, Math.max(0, factor)));
+ this._target[prop] = this._fn(from, to, factor);
}
}, {
key: "wait",
value: function wait() {
var promises = this._promises || (this._promises = []);
@@ -3813,131 +4185,42 @@
}, {
key: "_notify",
value: function _notify(resolved) {
var method = resolved ? 'res' : 'rej';
var promises = this._promises || [];
-
for (var i = 0; i < promises.length; i++) {
promises[i][method]();
}
}
}]);
-
return Animation;
}();
-
- var numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];
- var colors = ['color', 'borderColor', 'backgroundColor'];
- defaults.set('animation', {
- delay: undefined,
- duration: 1000,
- easing: 'easeOutQuart',
- fn: undefined,
- from: undefined,
- loop: undefined,
- to: undefined,
- type: undefined
- });
- var animationOptions = Object.keys(defaults.animation);
- defaults.describe('animation', {
- _fallback: false,
- _indexable: false,
- _scriptable: function _scriptable(name) {
- return name !== 'onProgress' && name !== 'onComplete' && name !== 'fn';
- }
- });
- defaults.set('animations', {
- colors: {
- type: 'color',
- properties: colors
- },
- numbers: {
- type: 'number',
- properties: numbers
- }
- });
- defaults.describe('animations', {
- _fallback: 'animation'
- });
- defaults.set('transitions', {
- active: {
- animation: {
- duration: 400
- }
- },
- resize: {
- animation: {
- duration: 0
- }
- },
- show: {
- animations: {
- colors: {
- from: 'transparent'
- },
- visible: {
- type: 'boolean',
- duration: 0
- }
- }
- },
- hide: {
- animations: {
- colors: {
- to: 'transparent'
- },
- visible: {
- type: 'boolean',
- easing: 'linear',
- fn: function fn(v) {
- return v | 0;
- }
- }
- }
- }
- });
-
var Animations = /*#__PURE__*/function () {
function Animations(chart, config) {
- _classCallCheck(this, Animations);
-
+ _classCallCheck$x(this, Animations);
this._chart = chart;
this._properties = new Map();
this.configure(config);
}
-
- _createClass(Animations, [{
+ _createClass$x(Animations, [{
key: "configure",
value: function configure(config) {
if (!isObject(config)) {
return;
}
-
+ var animationOptions = Object.keys(defaults.animation);
var animatedProps = this._properties;
Object.getOwnPropertyNames(config).forEach(function (key) {
var cfg = config[key];
-
if (!isObject(cfg)) {
return;
}
-
var resolved = {};
-
- var _iterator = _createForOfIteratorHelper(animationOptions),
- _step;
-
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var option = _step.value;
- resolved[option] = cfg[option];
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
+ for (var _i = 0, _animationOptions = animationOptions; _i < _animationOptions.length; _i++) {
+ var option = _animationOptions[_i];
+ resolved[option] = cfg[option];
}
-
(isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {
if (prop === key || !animatedProps.has(prop)) {
animatedProps.set(prop, resolved);
}
});
@@ -3946,23 +4229,19 @@
}, {
key: "_animateOptions",
value: function _animateOptions(target, values) {
var newOptions = values.options;
var options = resolveTargetOptions(target, newOptions);
-
if (!options) {
return [];
}
-
var animations = this._createAnimations(options, newOptions);
-
if (newOptions.$shared) {
awaitAll(target.options.$animations, newOptions).then(function () {
target.options = newOptions;
}, function () {});
}
-
return animations;
}
}, {
key: "_createAnimations",
value: function _createAnimations(target, values) {
@@ -3970,327 +4249,304 @@
var animations = [];
var running = target.$animations || (target.$animations = {});
var props = Object.keys(values);
var date = Date.now();
var i;
-
for (i = props.length - 1; i >= 0; --i) {
var prop = props[i];
-
if (prop.charAt(0) === '$') {
continue;
}
-
if (prop === 'options') {
animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));
continue;
}
-
var value = values[prop];
var animation = running[prop];
var cfg = animatedProps.get(prop);
-
if (animation) {
if (cfg && animation.active()) {
animation.update(cfg, value, date);
continue;
} else {
animation.cancel();
}
}
-
if (!cfg || !cfg.duration) {
target[prop] = value;
continue;
}
-
running[prop] = animation = new Animation(cfg, target, prop, value);
animations.push(animation);
}
-
return animations;
}
}, {
key: "update",
value: function update(target, values) {
if (this._properties.size === 0) {
Object.assign(target, values);
return;
}
-
var animations = this._createAnimations(target, values);
-
if (animations.length) {
animator.add(this._chart, animations);
return true;
}
}
}]);
-
return Animations;
}();
-
function awaitAll(animations, properties) {
var running = [];
var keys = Object.keys(properties);
-
for (var i = 0; i < keys.length; i++) {
var anim = animations[keys[i]];
-
if (anim && anim.active()) {
running.push(anim.wait());
}
}
-
return Promise.all(running);
}
-
function resolveTargetOptions(target, newOptions) {
if (!newOptions) {
return;
}
-
var options = target.options;
-
if (!options) {
target.options = newOptions;
return;
}
-
if (options.$shared) {
target.options = options = Object.assign({}, options, {
$shared: false,
$animations: {}
});
}
-
return options;
}
-
function scaleClip(scale, allowedOverflow) {
var opts = scale && scale.options || {};
var reverse = opts.reverse;
var min = opts.min === undefined ? allowedOverflow : 0;
var max = opts.max === undefined ? allowedOverflow : 0;
return {
start: reverse ? max : min,
end: reverse ? min : max
};
}
-
function defaultClip(xScale, yScale, allowedOverflow) {
if (allowedOverflow === false) {
return false;
}
-
var x = scaleClip(xScale, allowedOverflow);
var y = scaleClip(yScale, allowedOverflow);
return {
top: y.end,
right: x.end,
bottom: y.start,
left: x.start
};
}
-
function toClip(value) {
var t, r, b, l;
-
if (isObject(value)) {
t = value.top;
r = value.right;
b = value.bottom;
l = value.left;
} else {
t = r = b = l = value;
}
-
return {
top: t,
right: r,
bottom: b,
- left: l
+ left: l,
+ disabled: value === false
};
}
-
function getSortedDatasetIndices(chart, filterVisible) {
var keys = [];
-
var metasets = chart._getSortedDatasetMetas(filterVisible);
-
var i, ilen;
-
for (i = 0, ilen = metasets.length; i < ilen; ++i) {
keys.push(metasets[i].index);
}
-
return keys;
}
-
- function _applyStack(stack, value, dsIndex, options) {
+ function _applyStack(stack, value, dsIndex) {
+ var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
var keys = stack.keys;
var singleMode = options.mode === 'single';
var i, ilen, datasetIndex, otherValue;
-
if (value === null) {
return;
}
-
for (i = 0, ilen = keys.length; i < ilen; ++i) {
datasetIndex = +keys[i];
-
if (datasetIndex === dsIndex) {
if (options.all) {
continue;
}
-
break;
}
-
otherValue = stack.values[datasetIndex];
-
if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {
value += otherValue;
}
}
-
return value;
}
-
function convertObjectDataToArray(data) {
var keys = Object.keys(data);
var adata = new Array(keys.length);
var i, ilen, key;
-
for (i = 0, ilen = keys.length; i < ilen; ++i) {
key = keys[i];
adata[i] = {
x: key,
y: data[key]
};
}
-
return adata;
}
-
function isStacked(scale, meta) {
var stacked = scale && scale.options.stacked;
return stacked || stacked === undefined && meta.stack !== undefined;
}
-
function getStackKey(indexScale, valueScale, meta) {
- return indexScale.id + '.' + valueScale.id + '.' + meta.stack + '.' + meta.type;
+ return "".concat(indexScale.id, ".").concat(valueScale.id, ".").concat(meta.stack || meta.type);
}
-
function getUserBounds(scale) {
var _scale$getUserBounds = scale.getUserBounds(),
- min = _scale$getUserBounds.min,
- max = _scale$getUserBounds.max,
- minDefined = _scale$getUserBounds.minDefined,
- maxDefined = _scale$getUserBounds.maxDefined;
-
+ min = _scale$getUserBounds.min,
+ max = _scale$getUserBounds.max,
+ minDefined = _scale$getUserBounds.minDefined,
+ maxDefined = _scale$getUserBounds.maxDefined;
return {
min: minDefined ? min : Number.NEGATIVE_INFINITY,
max: maxDefined ? max : Number.POSITIVE_INFINITY
};
}
-
function getOrCreateStack(stacks, stackKey, indexValue) {
var subStack = stacks[stackKey] || (stacks[stackKey] = {});
return subStack[indexValue] || (subStack[indexValue] = {});
}
-
+ function getLastIndexInStack(stack, vScale, positive, type) {
+ var _iterator = _createForOfIteratorHelper$1(vScale.getMatchingVisibleMetas(type).reverse()),
+ _step;
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var meta = _step.value;
+ var value = stack[meta.index];
+ if (positive && value > 0 || !positive && value < 0) {
+ return meta.index;
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ return null;
+ }
function updateStacks(controller, parsed) {
var chart = controller.chart,
- meta = controller._cachedMeta;
+ meta = controller._cachedMeta;
var stacks = chart._stacks || (chart._stacks = {});
var iScale = meta.iScale,
- vScale = meta.vScale,
- datasetIndex = meta.index;
+ vScale = meta.vScale,
+ datasetIndex = meta.index;
var iAxis = iScale.axis;
var vAxis = vScale.axis;
var key = getStackKey(iScale, vScale, meta);
var ilen = parsed.length;
var stack;
-
for (var i = 0; i < ilen; ++i) {
var item = parsed[i];
- var index = item[iAxis],
- value = item[vAxis];
+ var _index = item[iAxis],
+ value = item[vAxis];
var itemStacks = item._stacks || (item._stacks = {});
- stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
+ stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, _index);
stack[datasetIndex] = value;
+ stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
+ stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
+ var visualValues = stack._visualValues || (stack._visualValues = {});
+ visualValues[datasetIndex] = value;
}
}
-
function getFirstScaleId(chart, axis) {
var scales = chart.scales;
return Object.keys(scales).filter(function (key) {
return scales[key].axis === axis;
}).shift();
}
-
function createDatasetContext(parent, index) {
- return Object.assign(Object.create(parent), {
+ return createContext(parent, {
active: false,
dataset: undefined,
datasetIndex: index,
index: index,
mode: 'default',
type: 'dataset'
});
}
-
function createDataContext(parent, index, element) {
- return Object.assign(Object.create(parent), {
+ return createContext(parent, {
active: false,
dataIndex: index,
parsed: undefined,
raw: undefined,
element: element,
index: index,
mode: 'default',
type: 'data'
});
}
-
function clearStacks(meta, items) {
+ var datasetIndex = meta.controller.index;
+ var axis = meta.vScale && meta.vScale.axis;
+ if (!axis) {
+ return;
+ }
items = items || meta._parsed;
-
- var _iterator2 = _createForOfIteratorHelper(items),
- _step2;
-
+ var _iterator2 = _createForOfIteratorHelper$1(items),
+ _step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var parsed = _step2.value;
var stacks = parsed._stacks;
-
- if (!stacks || stacks[meta.vScale.id] === undefined || stacks[meta.vScale.id][meta.index] === undefined) {
+ if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {
return;
}
-
- delete stacks[meta.vScale.id][meta.index];
+ delete stacks[axis][datasetIndex];
+ if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {
+ delete stacks[axis]._visualValues[datasetIndex];
+ }
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
-
var isDirectUpdateMode = function isDirectUpdateMode(mode) {
return mode === 'reset' || mode === 'none';
};
-
var cloneIfNotShared = function cloneIfNotShared(cached, shared) {
return shared ? cached : Object.assign({}, cached);
};
-
+ var createStack = function createStack(canStack, meta, chart) {
+ return canStack && !meta.hidden && meta._stacked && {
+ keys: getSortedDatasetIndices(chart, true),
+ values: null
+ };
+ };
var DatasetController = /*#__PURE__*/function () {
function DatasetController(chart, datasetIndex) {
- _classCallCheck(this, DatasetController);
-
+ _classCallCheck$x(this, DatasetController);
this.chart = chart;
this._ctx = chart.ctx;
this.index = datasetIndex;
this._cachedDataOpts = {};
this._cachedMeta = this.getMeta();
@@ -4301,52 +4557,57 @@
this._objectData = undefined;
this._sharedOptions = undefined;
this._drawStart = undefined;
this._drawCount = undefined;
this.enableOptionSharing = false;
+ this.supportsDecimation = false;
this.$context = undefined;
+ this._syncList = [];
+ this.datasetElementType = (this instanceof DatasetController ? this.constructor : void 0).datasetElementType;
+ this.dataElementType = (this instanceof DatasetController ? this.constructor : void 0).dataElementType;
this.initialize();
}
-
- _createClass(DatasetController, [{
+ _createClass$x(DatasetController, [{
key: "initialize",
value: function initialize() {
- var me = this;
- var meta = me._cachedMeta;
- me.configure();
- me.linkScales();
+ var meta = this._cachedMeta;
+ this.configure();
+ this.linkScales();
meta._stacked = isStacked(meta.vScale, meta);
- me.addElements();
+ this.addElements();
+ if (this.options.fill && !this.chart.isPluginEnabled('filler')) {
+ console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
+ }
}
}, {
key: "updateIndex",
value: function updateIndex(datasetIndex) {
+ if (this.index !== datasetIndex) {
+ clearStacks(this._cachedMeta);
+ }
this.index = datasetIndex;
}
}, {
key: "linkScales",
value: function linkScales() {
- var me = this;
- var chart = me.chart;
- var meta = me._cachedMeta;
- var dataset = me.getDataset();
-
+ var chart = this.chart;
+ var meta = this._cachedMeta;
+ var dataset = this.getDataset();
var chooseId = function chooseId(axis, x, y, r) {
return axis === 'x' ? x : axis === 'r' ? r : y;
};
-
var xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));
var yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));
var rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));
var indexAxis = meta.indexAxis;
var iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
var vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
- meta.xScale = me.getScaleForId(xid);
- meta.yScale = me.getScaleForId(yid);
- meta.rScale = me.getScaleForId(rid);
- meta.iScale = me.getScaleForId(iid);
- meta.vScale = me.getScaleForId(vid);
+ meta.xScale = this.getScaleForId(xid);
+ meta.yScale = this.getScaleForId(yid);
+ meta.rScale = this.getScaleForId(rid);
+ meta.iScale = this.getScaleForId(iid);
+ meta.vScale = this.getScaleForId(vid);
}
}, {
key: "getDataset",
value: function getDataset() {
return this.chart.data.datasets[this.index];
@@ -4374,197 +4635,173 @@
}
}, {
key: "_destroy",
value: function _destroy() {
var meta = this._cachedMeta;
-
if (this._data) {
unlistenArrayEvents(this._data, this);
}
-
if (meta._stacked) {
clearStacks(meta);
}
}
}, {
key: "_dataCheck",
value: function _dataCheck() {
- var me = this;
- var dataset = me.getDataset();
+ var dataset = this.getDataset();
var data = dataset.data || (dataset.data = []);
-
+ var _data = this._data;
if (isObject(data)) {
- me._data = convertObjectDataToArray(data);
- } else if (me._data !== data) {
- if (me._data) {
- unlistenArrayEvents(me._data, me);
- clearStacks(me._cachedMeta);
+ this._data = convertObjectDataToArray(data);
+ } else if (_data !== data) {
+ if (_data) {
+ unlistenArrayEvents(_data, this);
+ var meta = this._cachedMeta;
+ clearStacks(meta);
+ meta._parsed = [];
}
-
if (data && Object.isExtensible(data)) {
- listenArrayEvents(data, me);
+ listenArrayEvents(data, this);
}
-
- me._data = data;
+ this._syncList = [];
+ this._data = data;
}
}
}, {
key: "addElements",
value: function addElements() {
- var me = this;
- var meta = me._cachedMeta;
-
- me._dataCheck();
-
- if (me.datasetElementType) {
- meta.dataset = new me.datasetElementType();
+ var meta = this._cachedMeta;
+ this._dataCheck();
+ if (this.datasetElementType) {
+ meta.dataset = new this.datasetElementType();
}
}
}, {
key: "buildOrUpdateElements",
value: function buildOrUpdateElements(resetNewElements) {
- var me = this;
- var meta = me._cachedMeta;
- var dataset = me.getDataset();
+ var meta = this._cachedMeta;
+ var dataset = this.getDataset();
var stackChanged = false;
-
- me._dataCheck();
-
+ this._dataCheck();
+ var oldStacked = meta._stacked;
meta._stacked = isStacked(meta.vScale, meta);
-
if (meta.stack !== dataset.stack) {
stackChanged = true;
clearStacks(meta);
meta.stack = dataset.stack;
}
-
- me._resyncElements(resetNewElements);
-
- if (stackChanged) {
- updateStacks(me, meta._parsed);
+ this._resyncElements(resetNewElements);
+ if (stackChanged || oldStacked !== meta._stacked) {
+ updateStacks(this, meta._parsed);
}
}
}, {
key: "configure",
value: function configure() {
- var me = this;
- var config = me.chart.config;
- var scopeKeys = config.datasetScopeKeys(me._type);
- var scopes = config.getOptionScopes(me.getDataset(), scopeKeys, true);
- me.options = config.createResolver(scopes, me.getContext());
- me._parsing = me.options.parsing;
+ var config = this.chart.config;
+ var scopeKeys = config.datasetScopeKeys(this._type);
+ var scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
+ this.options = config.createResolver(scopes, this.getContext());
+ this._parsing = this.options.parsing;
+ this._cachedDataOpts = {};
}
}, {
key: "parse",
value: function parse(start, count) {
- var me = this;
- var meta = me._cachedMeta,
- data = me._data;
+ var meta = this._cachedMeta,
+ data = this._data;
var iScale = meta.iScale,
- _stacked = meta._stacked;
+ _stacked = meta._stacked;
var iAxis = iScale.axis;
var sorted = start === 0 && count === data.length ? true : meta._sorted;
var prev = start > 0 && meta._parsed[start - 1];
var i, cur, parsed;
-
- if (me._parsing === false) {
+ if (this._parsing === false) {
meta._parsed = data;
meta._sorted = true;
+ parsed = data;
} else {
if (isArray(data[start])) {
- parsed = me.parseArrayData(meta, data, start, count);
+ parsed = this.parseArrayData(meta, data, start, count);
} else if (isObject(data[start])) {
- parsed = me.parseObjectData(meta, data, start, count);
+ parsed = this.parseObjectData(meta, data, start, count);
} else {
- parsed = me.parsePrimitiveData(meta, data, start, count);
+ parsed = this.parsePrimitiveData(meta, data, start, count);
}
-
var isNotInOrderComparedToPrev = function isNotInOrderComparedToPrev() {
return cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];
};
-
for (i = 0; i < count; ++i) {
meta._parsed[i + start] = cur = parsed[i];
-
if (sorted) {
if (isNotInOrderComparedToPrev()) {
sorted = false;
}
-
prev = cur;
}
}
-
meta._sorted = sorted;
}
-
if (_stacked) {
- updateStacks(me, parsed);
+ updateStacks(this, parsed);
}
}
}, {
key: "parsePrimitiveData",
value: function parsePrimitiveData(meta, data, start, count) {
var iScale = meta.iScale,
- vScale = meta.vScale;
+ vScale = meta.vScale;
var iAxis = iScale.axis;
var vAxis = vScale.axis;
var labels = iScale.getLabels();
var singleScale = iScale === vScale;
var parsed = new Array(count);
var i, ilen, index;
-
for (i = 0, ilen = count; i < ilen; ++i) {
var _parsed$i;
-
index = i + start;
- parsed[i] = (_parsed$i = {}, _defineProperty(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);
+ parsed[i] = (_parsed$i = {}, _defineProperty$w(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty$w(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);
}
-
return parsed;
}
}, {
key: "parseArrayData",
value: function parseArrayData(meta, data, start, count) {
var xScale = meta.xScale,
- yScale = meta.yScale;
+ yScale = meta.yScale;
var parsed = new Array(count);
var i, ilen, index, item;
-
for (i = 0, ilen = count; i < ilen; ++i) {
index = i + start;
item = data[index];
parsed[i] = {
x: xScale.parse(item[0], index),
y: yScale.parse(item[1], index)
};
}
-
return parsed;
}
}, {
key: "parseObjectData",
value: function parseObjectData(meta, data, start, count) {
var xScale = meta.xScale,
- yScale = meta.yScale;
+ yScale = meta.yScale;
var _this$_parsing = this._parsing,
- _this$_parsing$xAxisK = _this$_parsing.xAxisKey,
- xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,
- _this$_parsing$yAxisK = _this$_parsing.yAxisKey,
- yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;
+ _this$_parsing$xAxisK = _this$_parsing.xAxisKey,
+ xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,
+ _this$_parsing$yAxisK = _this$_parsing.yAxisKey,
+ yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;
var parsed = new Array(count);
var i, ilen, index, item;
-
for (i = 0, ilen = count; i < ilen; ++i) {
index = i + start;
item = data[index];
parsed[i] = {
x: xScale.parse(resolveObjectKey(item, xAxisKey), index),
y: yScale.parse(resolveObjectKey(item, yAxisKey), index)
};
}
-
return parsed;
}
}, {
key: "getParsed",
value: function getParsed(index) {
@@ -4581,11 +4818,11 @@
var chart = this.chart;
var meta = this._cachedMeta;
var value = parsed[scale.axis];
var stack = {
keys: getSortedDatasetIndices(chart, true),
- values: parsed._stacks[scale.axis]
+ values: parsed._stacks[scale.axis]._visualValues
};
return _applyStack(stack, value, meta.index, {
mode: mode
});
}
@@ -4593,157 +4830,127 @@
key: "updateRangeFromParsed",
value: function updateRangeFromParsed(range, scale, parsed, stack) {
var parsedValue = parsed[scale.axis];
var value = parsedValue === null ? NaN : parsedValue;
var values = stack && parsed._stacks[scale.axis];
-
if (stack && values) {
stack.values = values;
- range.min = Math.min(range.min, value);
- range.max = Math.max(range.max, value);
- value = _applyStack(stack, parsedValue, this._cachedMeta.index, {
- all: true
- });
+ value = _applyStack(stack, parsedValue, this._cachedMeta.index);
}
-
range.min = Math.min(range.min, value);
range.max = Math.max(range.max, value);
}
}, {
key: "getMinMax",
value: function getMinMax(scale, canStack) {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var _parsed = meta._parsed;
var sorted = meta._sorted && scale === meta.iScale;
var ilen = _parsed.length;
-
- var otherScale = me._getOtherScale(scale);
-
- var stack = canStack && meta._stacked && {
- keys: getSortedDatasetIndices(me.chart, true),
- values: null
- };
+ var otherScale = this._getOtherScale(scale);
+ var stack = createStack(canStack, meta, this.chart);
var range = {
min: Number.POSITIVE_INFINITY,
max: Number.NEGATIVE_INFINITY
};
-
var _getUserBounds = getUserBounds(otherScale),
- otherMin = _getUserBounds.min,
- otherMax = _getUserBounds.max;
-
- var i, value, parsed, otherValue;
-
+ otherMin = _getUserBounds.min,
+ otherMax = _getUserBounds.max;
+ var i, parsed;
function _skip() {
parsed = _parsed[i];
- value = parsed[scale.axis];
- otherValue = parsed[otherScale.axis];
- return !isNumberFinite(value) || otherMin > otherValue || otherMax < otherValue;
+ var otherValue = parsed[otherScale.axis];
+ return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
}
-
for (i = 0; i < ilen; ++i) {
if (_skip()) {
continue;
}
-
- me.updateRangeFromParsed(range, scale, parsed, stack);
-
+ this.updateRangeFromParsed(range, scale, parsed, stack);
if (sorted) {
break;
}
}
-
if (sorted) {
for (i = ilen - 1; i >= 0; --i) {
if (_skip()) {
continue;
}
-
- me.updateRangeFromParsed(range, scale, parsed, stack);
+ this.updateRangeFromParsed(range, scale, parsed, stack);
break;
}
}
-
return range;
}
}, {
key: "getAllParsedValues",
value: function getAllParsedValues(scale) {
var parsed = this._cachedMeta._parsed;
var values = [];
var i, ilen, value;
-
for (i = 0, ilen = parsed.length; i < ilen; ++i) {
value = parsed[i][scale.axis];
-
if (isNumberFinite(value)) {
values.push(value);
}
}
-
return values;
}
}, {
key: "getMaxOverflow",
value: function getMaxOverflow() {
return false;
}
}, {
key: "getLabelAndValue",
value: function getLabelAndValue(index) {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var iScale = meta.iScale;
var vScale = meta.vScale;
- var parsed = me.getParsed(index);
+ var parsed = this.getParsed(index);
return {
label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',
value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''
};
}
}, {
key: "_update",
value: function _update(mode) {
- var me = this;
- var meta = me._cachedMeta;
- me.configure();
- me._cachedDataOpts = {};
- me.update(mode || 'default');
- meta._clip = toClip(valueOrDefault(me.options.clip, defaultClip(meta.xScale, meta.yScale, me.getMaxOverflow())));
+ var meta = this._cachedMeta;
+ this.update(mode || 'default');
+ meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
}
}, {
key: "update",
value: function update(mode) {}
}, {
key: "draw",
value: function draw() {
- var me = this;
- var ctx = me._ctx;
- var chart = me.chart;
- var meta = me._cachedMeta;
+ var ctx = this._ctx;
+ var chart = this.chart;
+ var meta = this._cachedMeta;
var elements = meta.data || [];
var area = chart.chartArea;
var active = [];
- var start = me._drawStart || 0;
- var count = me._drawCount || elements.length - start;
+ var start = this._drawStart || 0;
+ var count = this._drawCount || elements.length - start;
+ var drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
var i;
-
if (meta.dataset) {
meta.dataset.draw(ctx, area, start, count);
}
-
for (i = start; i < start + count; ++i) {
var element = elements[i];
-
- if (element.active) {
+ if (element.hidden) {
+ continue;
+ }
+ if (element.active && drawActiveElementsOnTop) {
active.push(element);
} else {
element.draw(ctx, area);
}
}
-
for (i = 0; i < active.length; ++i) {
active[i].draw(ctx, area);
}
}
}, {
@@ -4753,24 +4960,23 @@
return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);
}
}, {
key: "getContext",
value: function getContext(index, active, mode) {
- var me = this;
- var dataset = me.getDataset();
+ var dataset = this.getDataset();
var context;
-
- if (index >= 0 && index < me._cachedMeta.data.length) {
- var element = me._cachedMeta.data[index];
- context = element.$context || (element.$context = createDataContext(me.getContext(), index, element));
- context.parsed = me.getParsed(index);
+ if (index >= 0 && index < this._cachedMeta.data.length) {
+ var element = this._cachedMeta.data[index];
+ context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));
+ context.parsed = this.getParsed(index);
context.raw = dataset.data[index];
+ context.index = context.dataIndex = index;
} else {
- context = me.$context || (me.$context = createDatasetContext(me.chart.getContext(), me.index));
+ context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));
context.dataset = dataset;
+ context.index = context.datasetIndex = this.index;
}
-
context.active = !!active;
context.mode = mode;
return context;
}
}, {
@@ -4784,87 +4990,86 @@
return this._resolveElementOptions(this.dataElementType.id, mode, index);
}
}, {
key: "_resolveElementOptions",
value: function _resolveElementOptions(elementType) {
+ var _this3 = this;
var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';
var index = arguments.length > 2 ? arguments[2] : undefined;
- var me = this;
var active = mode === 'active';
- var cache = me._cachedDataOpts;
+ var cache = this._cachedDataOpts;
var cacheKey = elementType + '-' + mode;
var cached = cache[cacheKey];
- var sharing = me.enableOptionSharing && defined(index);
-
+ var sharing = this.enableOptionSharing && defined(index);
if (cached) {
return cloneIfNotShared(cached, sharing);
}
-
- var config = me.chart.config;
- var scopeKeys = config.datasetElementScopeKeys(me._type, elementType);
+ var config = this.chart.config;
+ var scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
var prefixes = active ? ["".concat(elementType, "Hover"), 'hover', elementType, ''] : [elementType, ''];
- var scopes = config.getOptionScopes(me.getDataset(), scopeKeys);
+ var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
var names = Object.keys(defaults.elements[elementType]);
-
var context = function context() {
- return me.getContext(index, active);
+ return _this3.getContext(index, active, mode);
};
-
var values = config.resolveNamedOptions(scopes, names, context, prefixes);
-
if (values.$shared) {
values.$shared = sharing;
cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
}
-
return values;
}
}, {
key: "_resolveAnimations",
value: function _resolveAnimations(index, transition, active) {
- var me = this;
- var chart = me.chart;
- var cache = me._cachedDataOpts;
+ var chart = this.chart;
+ var cache = this._cachedDataOpts;
var cacheKey = "animation-".concat(transition);
var cached = cache[cacheKey];
-
if (cached) {
return cached;
}
-
var options;
-
if (chart.options.animation !== false) {
- var config = me.chart.config;
- var scopeKeys = config.datasetAnimationScopeKeys(me._type, transition);
- var scopes = config.getOptionScopes(me.getDataset(), scopeKeys);
- options = config.createResolver(scopes, me.getContext(index, active, transition));
+ var config = this.chart.config;
+ var scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
+ var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
+ options = config.createResolver(scopes, this.getContext(index, active, transition));
}
-
var animations = new Animations(chart, options && options.animations);
-
if (options && options._cacheable) {
cache[cacheKey] = Object.freeze(animations);
}
-
return animations;
}
}, {
key: "getSharedOptions",
value: function getSharedOptions(options) {
if (!options.$shared) {
return;
}
-
return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));
}
}, {
key: "includeOptions",
value: function includeOptions(mode, sharedOptions) {
return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
}
}, {
+ key: "_getSharedOptions",
+ value: function _getSharedOptions(start, mode) {
+ var firstOpts = this.resolveDataElementOptions(start, mode);
+ var previouslySharedOptions = this._sharedOptions;
+ var sharedOptions = this.getSharedOptions(firstOpts);
+ var includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;
+ this.updateSharedOptions(sharedOptions, mode, firstOpts);
+ return {
+ sharedOptions: sharedOptions,
+ includeOptions: includeOptions
+ };
+ }
+ }, {
key: "updateElement",
value: function updateElement(element, index, properties, mode) {
if (isDirectUpdateMode(mode)) {
Object.assign(element, properties);
} else {
@@ -4881,11 +5086,10 @@
}, {
key: "_setStyle",
value: function _setStyle(element, index, mode, active) {
element.active = active;
var options = this.getStyle(index, active);
-
this._resolveAnimations(index, mode, active).update(element, {
options: !active && this.getSharedOptions(options) || options
});
}
}, {
@@ -4900,285 +5104,364 @@
}
}, {
key: "_removeDatasetHoverStyle",
value: function _removeDatasetHoverStyle() {
var element = this._cachedMeta.dataset;
-
if (element) {
this._setStyle(element, undefined, 'active', false);
}
}
}, {
key: "_setDatasetHoverStyle",
value: function _setDatasetHoverStyle() {
var element = this._cachedMeta.dataset;
-
if (element) {
this._setStyle(element, undefined, 'active', true);
}
}
}, {
key: "_resyncElements",
value: function _resyncElements(resetNewElements) {
- var me = this;
- var numMeta = me._cachedMeta.data.length;
- var numData = me._data.length;
-
- if (numData > numMeta) {
- me._insertElements(numMeta, numData - numMeta, resetNewElements);
- } else if (numData < numMeta) {
- me._removeElements(numData, numMeta - numData);
+ var data = this._data;
+ var elements = this._cachedMeta.data;
+ var _iterator3 = _createForOfIteratorHelper$1(this._syncList),
+ _step3;
+ try {
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
+ var _step3$value = _slicedToArray(_step3.value, 3),
+ method = _step3$value[0],
+ arg1 = _step3$value[1],
+ arg2 = _step3$value[2];
+ this[method](arg1, arg2);
+ }
+ } catch (err) {
+ _iterator3.e(err);
+ } finally {
+ _iterator3.f();
}
-
+ this._syncList = [];
+ var numMeta = elements.length;
+ var numData = data.length;
var count = Math.min(numData, numMeta);
-
if (count) {
- me.parse(0, count);
+ this.parse(0, count);
}
+ if (numData > numMeta) {
+ this._insertElements(numMeta, numData - numMeta, resetNewElements);
+ } else if (numData < numMeta) {
+ this._removeElements(numData, numMeta - numData);
+ }
}
}, {
key: "_insertElements",
value: function _insertElements(start, count) {
var resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var data = meta.data;
var end = start + count;
var i;
-
var move = function move(arr) {
arr.length += count;
-
for (i = arr.length - 1; i >= end; i--) {
arr[i] = arr[i - count];
}
};
-
move(data);
-
for (i = start; i < end; ++i) {
- data[i] = new me.dataElementType();
+ data[i] = new this.dataElementType();
}
-
- if (me._parsing) {
+ if (this._parsing) {
move(meta._parsed);
}
-
- me.parse(start, count);
-
+ this.parse(start, count);
if (resetNewElements) {
- me.updateElements(data, start, count, 'reset');
+ this.updateElements(data, start, count, 'reset');
}
}
}, {
key: "updateElements",
value: function updateElements(element, start, count, mode) {}
}, {
key: "_removeElements",
value: function _removeElements(start, count) {
- var me = this;
- var meta = me._cachedMeta;
-
- if (me._parsing) {
+ var meta = this._cachedMeta;
+ if (this._parsing) {
var removed = meta._parsed.splice(start, count);
-
if (meta._stacked) {
clearStacks(meta, removed);
}
}
-
meta.data.splice(start, count);
}
}, {
+ key: "_sync",
+ value: function _sync(args) {
+ if (this._parsing) {
+ this._syncList.push(args);
+ } else {
+ var _args2 = _slicedToArray(args, 3),
+ method = _args2[0],
+ arg1 = _args2[1],
+ arg2 = _args2[2];
+ this[method](arg1, arg2);
+ }
+ this.chart._dataChanges.push([this.index].concat(_toConsumableArray(args)));
+ }
+ }, {
key: "_onDataPush",
value: function _onDataPush() {
var count = arguments.length;
-
- this._insertElements(this.getDataset().data.length - count, count);
+ this._sync(['_insertElements', this.getDataset().data.length - count, count]);
}
}, {
key: "_onDataPop",
value: function _onDataPop() {
- this._removeElements(this._cachedMeta.data.length - 1, 1);
+ this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);
}
}, {
key: "_onDataShift",
value: function _onDataShift() {
- this._removeElements(0, 1);
+ this._sync(['_removeElements', 0, 1]);
}
}, {
key: "_onDataSplice",
value: function _onDataSplice(start, count) {
- this._removeElements(start, count);
-
- this._insertElements(start, arguments.length - 2);
+ if (count) {
+ this._sync(['_removeElements', start, count]);
+ }
+ var newCount = arguments.length - 2;
+ if (newCount) {
+ this._sync(['_insertElements', start, newCount]);
+ }
}
}, {
key: "_onDataUnshift",
value: function _onDataUnshift() {
- this._insertElements(0, arguments.length);
+ this._sync(['_insertElements', 0, arguments.length]);
}
}]);
-
return DatasetController;
}();
-
- DatasetController.defaults = {};
- DatasetController.prototype.datasetElementType = null;
- DatasetController.prototype.dataElementType = null;
-
- function getAllScaleValues(scale) {
+ _defineProperty$w(DatasetController, "defaults", {});
+ _defineProperty$w(DatasetController, "datasetElementType", null);
+ _defineProperty$w(DatasetController, "dataElementType", null);
+ function getAllScaleValues(scale, type) {
if (!scale._cache.$bar) {
- var metas = scale.getMatchingVisibleMetas('bar');
+ var visibleMetas = scale.getMatchingVisibleMetas(type);
var values = [];
-
- for (var i = 0, ilen = metas.length; i < ilen; i++) {
- values = values.concat(metas[i].controller.getAllParsedValues(scale));
+ for (var i = 0, ilen = visibleMetas.length; i < ilen; i++) {
+ values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
}
-
scale._cache.$bar = _arrayUnique(values.sort(function (a, b) {
return a - b;
}));
}
-
return scale._cache.$bar;
}
-
- function computeMinSampleSize(scale) {
- var values = getAllScaleValues(scale);
+ function computeMinSampleSize(meta) {
+ var scale = meta.iScale;
+ var values = getAllScaleValues(scale, meta.type);
var min = scale._length;
var i, ilen, curr, prev;
-
var updateMinAndPrev = function updateMinAndPrev() {
- min = Math.min(min, i && Math.abs(curr - prev) || min);
+ if (curr === 32767 || curr === -32768) {
+ return;
+ }
+ if (defined(prev)) {
+ min = Math.min(min, Math.abs(curr - prev) || min);
+ }
prev = curr;
};
-
for (i = 0, ilen = values.length; i < ilen; ++i) {
curr = scale.getPixelForValue(values[i]);
updateMinAndPrev();
}
-
+ prev = undefined;
for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
curr = scale.getPixelForTick(i);
updateMinAndPrev();
}
-
return min;
}
-
function computeFitCategoryTraits(index, ruler, options, stackCount) {
var thickness = options.barThickness;
var size, ratio;
-
if (isNullOrUndef(thickness)) {
size = ruler.min * options.categoryPercentage;
ratio = options.barPercentage;
} else {
size = thickness * stackCount;
ratio = 1;
}
-
return {
chunk: size / stackCount,
ratio: ratio,
start: ruler.pixels[index] - size / 2
};
}
-
function computeFlexCategoryTraits(index, ruler, options, stackCount) {
var pixels = ruler.pixels;
var curr = pixels[index];
var prev = index > 0 ? pixels[index - 1] : null;
var next = index < pixels.length - 1 ? pixels[index + 1] : null;
var percent = options.categoryPercentage;
-
if (prev === null) {
prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
}
-
if (next === null) {
next = curr + curr - prev;
}
-
var start = curr - (curr - Math.min(prev, next)) / 2 * percent;
var size = Math.abs(next - prev) / 2 * percent;
return {
chunk: size / stackCount,
ratio: options.barPercentage,
start: start
};
}
-
function parseFloatBar(entry, item, vScale, i) {
var startValue = vScale.parse(entry[0], i);
var endValue = vScale.parse(entry[1], i);
var min = Math.min(startValue, endValue);
var max = Math.max(startValue, endValue);
var barStart = min;
var barEnd = max;
-
if (Math.abs(min) > Math.abs(max)) {
barStart = max;
barEnd = min;
}
-
item[vScale.axis] = barEnd;
item._custom = {
barStart: barStart,
barEnd: barEnd,
start: startValue,
end: endValue,
min: min,
max: max
};
}
-
function parseValue(entry, item, vScale, i) {
if (isArray(entry)) {
parseFloatBar(entry, item, vScale, i);
} else {
item[vScale.axis] = vScale.parse(entry, i);
}
-
return item;
}
-
function parseArrayOrPrimitive(meta, data, start, count) {
var iScale = meta.iScale;
var vScale = meta.vScale;
var labels = iScale.getLabels();
var singleScale = iScale === vScale;
var parsed = [];
var i, ilen, item, entry;
-
for (i = start, ilen = start + count; i < ilen; ++i) {
entry = data[i];
item = {};
item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
parsed.push(parseValue(entry, item, vScale, i));
}
-
return parsed;
}
-
function isFloatBar(custom) {
return custom && custom.barStart !== undefined && custom.barEnd !== undefined;
}
-
+ function barSign(size, vScale, actualBase) {
+ if (size !== 0) {
+ return sign(size);
+ }
+ return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
+ }
+ function borderProps(properties) {
+ var reverse, start, end, top, bottom;
+ if (properties.horizontal) {
+ reverse = properties.base > properties.x;
+ start = 'left';
+ end = 'right';
+ } else {
+ reverse = properties.base < properties.y;
+ start = 'bottom';
+ end = 'top';
+ }
+ if (reverse) {
+ top = 'end';
+ bottom = 'start';
+ } else {
+ top = 'start';
+ bottom = 'end';
+ }
+ return {
+ start: start,
+ end: end,
+ reverse: reverse,
+ top: top,
+ bottom: bottom
+ };
+ }
+ function setBorderSkipped(properties, options, stack, index) {
+ var edge = options.borderSkipped;
+ var res = {};
+ if (!edge) {
+ properties.borderSkipped = res;
+ return;
+ }
+ if (edge === true) {
+ properties.borderSkipped = {
+ top: true,
+ right: true,
+ bottom: true,
+ left: true
+ };
+ return;
+ }
+ var _borderProps = borderProps(properties),
+ start = _borderProps.start,
+ end = _borderProps.end,
+ reverse = _borderProps.reverse,
+ top = _borderProps.top,
+ bottom = _borderProps.bottom;
+ if (edge === 'middle' && stack) {
+ properties.enableBorderRadius = true;
+ if ((stack._top || 0) === index) {
+ edge = top;
+ } else if ((stack._bottom || 0) === index) {
+ edge = bottom;
+ } else {
+ res[parseEdge(bottom, start, end, reverse)] = true;
+ edge = top;
+ }
+ }
+ res[parseEdge(edge, start, end, reverse)] = true;
+ properties.borderSkipped = res;
+ }
+ function parseEdge(edge, a, b, reverse) {
+ if (reverse) {
+ edge = swap(edge, a, b);
+ edge = startEnd(edge, b, a);
+ } else {
+ edge = startEnd(edge, a, b);
+ }
+ return edge;
+ }
+ function swap(orig, v1, v2) {
+ return orig === v1 ? v2 : orig === v2 ? v1 : orig;
+ }
+ function startEnd(v, start, end) {
+ return v === 'start' ? start : v === 'end' ? end : v;
+ }
+ function setInflateAmount(properties, _ref, ratio) {
+ var inflateAmount = _ref.inflateAmount;
+ properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;
+ }
var BarController = /*#__PURE__*/function (_DatasetController) {
- _inherits(BarController, _DatasetController);
-
- var _super = _createSuper(BarController);
-
+ _inherits$w(BarController, _DatasetController);
+ var _super = _createSuper$w(BarController);
function BarController() {
- _classCallCheck(this, BarController);
-
+ _classCallCheck$x(this, BarController);
return _super.apply(this, arguments);
}
-
- _createClass(BarController, [{
+ _createClass$x(BarController, [{
key: "parsePrimitiveData",
value: function parsePrimitiveData(meta, data, start, count) {
return parseArrayOrPrimitive(meta, data, start, count);
}
}, {
@@ -5188,325 +5471,295 @@
}
}, {
key: "parseObjectData",
value: function parseObjectData(meta, data, start, count) {
var iScale = meta.iScale,
- vScale = meta.vScale;
+ vScale = meta.vScale;
var _this$_parsing2 = this._parsing,
- _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,
- xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,
- _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,
- yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;
+ _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,
+ xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,
+ _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,
+ yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;
var iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;
var vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;
var parsed = [];
var i, ilen, item, obj;
-
for (i = start, ilen = start + count; i < ilen; ++i) {
obj = data[i];
item = {};
item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);
parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));
}
-
return parsed;
}
}, {
key: "updateRangeFromParsed",
value: function updateRangeFromParsed(range, scale, parsed, stack) {
- _get(_getPrototypeOf(BarController.prototype), "updateRangeFromParsed", this).call(this, range, scale, parsed, stack);
-
+ _get(_getPrototypeOf$w(BarController.prototype), "updateRangeFromParsed", this).call(this, range, scale, parsed, stack);
var custom = parsed._custom;
-
if (custom && scale === this._cachedMeta.vScale) {
range.min = Math.min(range.min, custom.min);
range.max = Math.max(range.max, custom.max);
}
}
}, {
+ key: "getMaxOverflow",
+ value: function getMaxOverflow() {
+ return 0;
+ }
+ }, {
key: "getLabelAndValue",
value: function getLabelAndValue(index) {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var iScale = meta.iScale,
- vScale = meta.vScale;
- var parsed = me.getParsed(index);
+ vScale = meta.vScale;
+ var parsed = this.getParsed(index);
var custom = parsed._custom;
var value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);
return {
label: '' + iScale.getLabelForValue(parsed[iScale.axis]),
value: value
};
}
}, {
key: "initialize",
value: function initialize() {
- var me = this;
- me.enableOptionSharing = true;
-
- _get(_getPrototypeOf(BarController.prototype), "initialize", this).call(this);
-
- var meta = me._cachedMeta;
- meta.stack = me.getDataset().stack;
+ this.enableOptionSharing = true;
+ _get(_getPrototypeOf$w(BarController.prototype), "initialize", this).call(this);
+ var meta = this._cachedMeta;
+ meta.stack = this.getDataset().stack;
}
}, {
key: "update",
value: function update(mode) {
- var me = this;
- var meta = me._cachedMeta;
- me.updateElements(meta.data, 0, meta.data.length, mode);
+ var meta = this._cachedMeta;
+ this.updateElements(meta.data, 0, meta.data.length, mode);
}
}, {
key: "updateElements",
value: function updateElements(bars, start, count, mode) {
- var me = this;
var reset = mode === 'reset';
- var vScale = me._cachedMeta.vScale;
+ var index = this.index,
+ vScale = this._cachedMeta.vScale;
var base = vScale.getBasePixel();
var horizontal = vScale.isHorizontal();
-
- var ruler = me._getRuler();
-
- var firstOpts = me.resolveDataElementOptions(start, mode);
- var sharedOptions = me.getSharedOptions(firstOpts);
- var includeOptions = me.includeOptions(mode, sharedOptions);
- me.updateSharedOptions(sharedOptions, mode, firstOpts);
-
+ var ruler = this._getRuler();
+ var _this$_getSharedOptio = this._getSharedOptions(start, mode),
+ sharedOptions = _this$_getSharedOptio.sharedOptions,
+ includeOptions = _this$_getSharedOptio.includeOptions;
for (var i = start; i < start + count; i++) {
- var vpixels = reset ? {
+ var parsed = this.getParsed(i);
+ var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {
base: base,
head: base
- } : me._calculateBarValuePixels(i);
-
- var ipixels = me._calculateBarIndexPixels(i, ruler);
-
+ } : this._calculateBarValuePixels(i);
+ var ipixels = this._calculateBarIndexPixels(i, ruler);
+ var stack = (parsed._stacks || {})[vScale.axis];
var properties = {
horizontal: horizontal,
base: vpixels.base,
+ enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,
x: horizontal ? vpixels.head : ipixels.center,
y: horizontal ? ipixels.center : vpixels.head,
- height: horizontal ? ipixels.size : undefined,
- width: horizontal ? undefined : ipixels.size
+ height: horizontal ? ipixels.size : Math.abs(vpixels.size),
+ width: horizontal ? Math.abs(vpixels.size) : ipixels.size
};
-
if (includeOptions) {
- properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
+ properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);
}
-
- me.updateElement(bars[i], i, properties, mode);
+ var options = properties.options || bars[i].options;
+ setBorderSkipped(properties, options, stack, index);
+ setInflateAmount(properties, options, ruler.ratio);
+ this.updateElement(bars[i], i, properties, mode);
}
}
}, {
key: "_getStacks",
value: function _getStacks(last, dataIndex) {
- var me = this;
- var meta = me._cachedMeta;
- var iScale = meta.iScale;
- var metasets = iScale.getMatchingVisibleMetas(me._type);
+ var iScale = this._cachedMeta.iScale;
+ var metasets = iScale.getMatchingVisibleMetas(this._type).filter(function (meta) {
+ return meta.controller.options.grouped;
+ });
var stacked = iScale.options.stacked;
- var ilen = metasets.length;
var stacks = [];
- var i, item;
-
- for (i = 0; i < ilen; ++i) {
- item = metasets[i];
-
- if (typeof dataIndex !== 'undefined') {
- var val = item.controller.getParsed(dataIndex)[item.controller._cachedMeta.vScale.axis];
-
- if (isNullOrUndef(val) || isNaN(val)) {
+ var skipNull = function skipNull(meta) {
+ var parsed = meta.controller.getParsed(dataIndex);
+ var val = parsed && parsed[meta.vScale.axis];
+ if (isNullOrUndef(val) || isNaN(val)) {
+ return true;
+ }
+ };
+ var _iterator4 = _createForOfIteratorHelper$1(metasets),
+ _step4;
+ try {
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
+ var meta = _step4.value;
+ if (dataIndex !== undefined && skipNull(meta)) {
continue;
}
+ if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {
+ stacks.push(meta.stack);
+ }
+ if (meta.index === last) {
+ break;
+ }
}
-
- if (stacked === false || stacks.indexOf(item.stack) === -1 || stacked === undefined && item.stack === undefined) {
- stacks.push(item.stack);
- }
-
- if (item.index === last) {
- break;
- }
+ } catch (err) {
+ _iterator4.e(err);
+ } finally {
+ _iterator4.f();
}
-
if (!stacks.length) {
stacks.push(undefined);
}
-
return stacks;
}
}, {
key: "_getStackCount",
value: function _getStackCount(index) {
return this._getStacks(undefined, index).length;
}
}, {
key: "_getStackIndex",
- value: function _getStackIndex(datasetIndex, name) {
- var stacks = this._getStacks(datasetIndex);
-
+ value: function _getStackIndex(datasetIndex, name, dataIndex) {
+ var stacks = this._getStacks(datasetIndex, dataIndex);
var index = name !== undefined ? stacks.indexOf(name) : -1;
return index === -1 ? stacks.length - 1 : index;
}
}, {
key: "_getRuler",
value: function _getRuler() {
- var me = this;
- var opts = me.options;
- var meta = me._cachedMeta;
+ var opts = this.options;
+ var meta = this._cachedMeta;
var iScale = meta.iScale;
var pixels = [];
var i, ilen;
-
for (i = 0, ilen = meta.data.length; i < ilen; ++i) {
- pixels.push(iScale.getPixelForValue(me.getParsed(i)[iScale.axis], i));
+ pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
}
-
var barThickness = opts.barThickness;
- var min = barThickness || computeMinSampleSize(iScale);
+ var min = barThickness || computeMinSampleSize(meta);
return {
min: min,
pixels: pixels,
start: iScale._startPixel,
end: iScale._endPixel,
- stackCount: me._getStackCount(),
+ stackCount: this._getStackCount(),
scale: iScale,
grouped: opts.grouped,
ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
};
}
}, {
key: "_calculateBarValuePixels",
value: function _calculateBarValuePixels(index) {
- var me = this;
- var _me$_cachedMeta = me._cachedMeta,
- vScale = _me$_cachedMeta.vScale,
- _stacked = _me$_cachedMeta._stacked;
- var _me$options = me.options,
- baseValue = _me$options.base,
- minBarLength = _me$options.minBarLength;
- var parsed = me.getParsed(index);
+ var _this$_cachedMeta = this._cachedMeta,
+ vScale = _this$_cachedMeta.vScale,
+ _stacked = _this$_cachedMeta._stacked,
+ datasetIndex = _this$_cachedMeta.index,
+ _this$options = this.options,
+ baseValue = _this$options.base,
+ minBarLength = _this$options.minBarLength;
+ var actualBase = baseValue || 0;
+ var parsed = this.getParsed(index);
var custom = parsed._custom;
var floating = isFloatBar(custom);
var value = parsed[vScale.axis];
var start = 0;
- var length = _stacked ? me.applyStack(vScale, parsed, _stacked) : value;
+ var length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
var head, size;
-
if (length !== value) {
start = length - value;
length = value;
}
-
if (floating) {
value = custom.barStart;
length = custom.barEnd - custom.barStart;
-
if (value !== 0 && sign(value) !== sign(custom.barEnd)) {
start = 0;
}
-
start += value;
}
-
var startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;
var base = vScale.getPixelForValue(startValue);
-
if (this.chart.getDataVisibility(index)) {
head = vScale.getPixelForValue(start + length);
} else {
head = base;
}
-
size = head - base;
-
- if (minBarLength !== undefined && Math.abs(size) < minBarLength) {
- size = size < 0 ? -minBarLength : minBarLength;
-
- if (value === 0) {
+ if (Math.abs(size) < minBarLength) {
+ size = barSign(size, vScale, actualBase) * minBarLength;
+ if (value === actualBase) {
base -= size / 2;
}
-
+ var startPixel = vScale.getPixelForDecimal(0);
+ var endPixel = vScale.getPixelForDecimal(1);
+ var min = Math.min(startPixel, endPixel);
+ var max = Math.max(startPixel, endPixel);
+ base = Math.max(Math.min(base, max), min);
head = base + size;
+ if (_stacked && !floating) {
+ parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);
+ }
}
-
- var actualBase = baseValue || 0;
-
if (base === vScale.getPixelForValue(actualBase)) {
- var halfGrid = vScale.getLineWidthForValue(actualBase) / 2;
-
- if (size > 0) {
- base += halfGrid;
- size -= halfGrid;
- } else if (size < 0) {
- base -= halfGrid;
- size += halfGrid;
- }
+ var halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;
+ base += halfGrid;
+ size -= halfGrid;
}
-
return {
size: size,
base: base,
head: head,
center: head + size / 2
};
}
}, {
key: "_calculateBarIndexPixels",
value: function _calculateBarIndexPixels(index, ruler) {
- var me = this;
var scale = ruler.scale;
- var options = me.options;
+ var options = this.options;
+ var skipNull = options.skipNull;
var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
var center, size;
-
if (ruler.grouped) {
- var stackCount = options.skipNull ? me._getStackCount(index) : ruler.stackCount;
+ var stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
-
- var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack);
-
+ var stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);
center = range.start + range.chunk * stackIndex + range.chunk / 2;
size = Math.min(maxBarThickness, range.chunk * range.ratio);
} else {
- center = scale.getPixelForValue(me.getParsed(index)[scale.axis], index);
+ center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
}
-
return {
base: center - size / 2,
head: center + size / 2,
center: center,
size: size
};
}
}, {
key: "draw",
value: function draw() {
- var me = this;
- var chart = me.chart;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var vScale = meta.vScale;
var rects = meta.data;
var ilen = rects.length;
var i = 0;
- clipArea(chart.ctx, chart.chartArea);
-
for (; i < ilen; ++i) {
- if (me.getParsed(i)[vScale.axis] !== null) {
- rects[i].draw(me._ctx);
+ if (this.getParsed(i)[vScale.axis] !== null) {
+ rects[i].draw(this._ctx);
}
}
-
- unclipArea(chart.ctx);
}
}]);
-
return BarController;
}(DatasetController);
-
- BarController.id = 'bar';
- BarController.defaults = {
+ _defineProperty$w(BarController, "id", 'bar');
+ _defineProperty$w(BarController, "defaults", {
datasetElementType: false,
dataElementType: 'bar',
categoryPercentage: 0.8,
barPercentage: 0.9,
grouped: true,
@@ -5514,15 +5767,12 @@
numbers: {
type: 'number',
properties: ['x', 'y', 'base', 'width', 'height']
}
}
- };
- BarController.overrides = {
- interaction: {
- mode: 'index'
- },
+ });
+ _defineProperty$w(BarController, "overrides", {
scales: {
_index_: {
type: 'category',
offset: true,
grid: {
@@ -5532,256 +5782,227 @@
_value_: {
type: 'linear',
beginAtZero: true
}
}
- };
-
+ });
var BubbleController = /*#__PURE__*/function (_DatasetController2) {
- _inherits(BubbleController, _DatasetController2);
-
- var _super2 = _createSuper(BubbleController);
-
+ _inherits$w(BubbleController, _DatasetController2);
+ var _super2 = _createSuper$w(BubbleController);
function BubbleController() {
- _classCallCheck(this, BubbleController);
-
+ _classCallCheck$x(this, BubbleController);
return _super2.apply(this, arguments);
}
-
- _createClass(BubbleController, [{
+ _createClass$x(BubbleController, [{
key: "initialize",
value: function initialize() {
this.enableOptionSharing = true;
-
- _get(_getPrototypeOf(BubbleController.prototype), "initialize", this).call(this);
+ _get(_getPrototypeOf$w(BubbleController.prototype), "initialize", this).call(this);
}
}, {
+ key: "parsePrimitiveData",
+ value: function parsePrimitiveData(meta, data, start, count) {
+ var parsed = _get(_getPrototypeOf$w(BubbleController.prototype), "parsePrimitiveData", this).call(this, meta, data, start, count);
+ for (var i = 0; i < parsed.length; i++) {
+ parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;
+ }
+ return parsed;
+ }
+ }, {
+ key: "parseArrayData",
+ value: function parseArrayData(meta, data, start, count) {
+ var parsed = _get(_getPrototypeOf$w(BubbleController.prototype), "parseArrayData", this).call(this, meta, data, start, count);
+ for (var i = 0; i < parsed.length; i++) {
+ var item = data[start + i];
+ parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);
+ }
+ return parsed;
+ }
+ }, {
key: "parseObjectData",
value: function parseObjectData(meta, data, start, count) {
- var xScale = meta.xScale,
- yScale = meta.yScale;
- var _this$_parsing3 = this._parsing,
- _this$_parsing3$xAxis = _this$_parsing3.xAxisKey,
- xAxisKey = _this$_parsing3$xAxis === void 0 ? 'x' : _this$_parsing3$xAxis,
- _this$_parsing3$yAxis = _this$_parsing3.yAxisKey,
- yAxisKey = _this$_parsing3$yAxis === void 0 ? 'y' : _this$_parsing3$yAxis;
- var parsed = [];
- var i, ilen, item;
-
- for (i = start, ilen = start + count; i < ilen; ++i) {
- item = data[i];
- parsed.push({
- x: xScale.parse(resolveObjectKey(item, xAxisKey), i),
- y: yScale.parse(resolveObjectKey(item, yAxisKey), i),
- _custom: item && item.r && +item.r
- });
+ var parsed = _get(_getPrototypeOf$w(BubbleController.prototype), "parseObjectData", this).call(this, meta, data, start, count);
+ for (var i = 0; i < parsed.length; i++) {
+ var item = data[start + i];
+ parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);
}
-
return parsed;
}
}, {
key: "getMaxOverflow",
value: function getMaxOverflow() {
- var _this$_cachedMeta = this._cachedMeta,
- data = _this$_cachedMeta.data,
- _parsed = _this$_cachedMeta._parsed;
+ var data = this._cachedMeta.data;
var max = 0;
-
for (var i = data.length - 1; i >= 0; --i) {
- max = Math.max(max, data[i].size() / 2, _parsed[i]._custom);
+ max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
}
-
return max > 0 && max;
}
}, {
key: "getLabelAndValue",
value: function getLabelAndValue(index) {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
+ var labels = this.chart.data.labels || [];
var xScale = meta.xScale,
- yScale = meta.yScale;
- var parsed = me.getParsed(index);
+ yScale = meta.yScale;
+ var parsed = this.getParsed(index);
var x = xScale.getLabelForValue(parsed.x);
var y = yScale.getLabelForValue(parsed.y);
var r = parsed._custom;
return {
- label: meta.label,
+ label: labels[index] || '',
value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'
};
}
}, {
key: "update",
value: function update(mode) {
- var me = this;
- var points = me._cachedMeta.data;
- me.updateElements(points, 0, points.length, mode);
+ var points = this._cachedMeta.data;
+ this.updateElements(points, 0, points.length, mode);
}
}, {
key: "updateElements",
value: function updateElements(points, start, count, mode) {
- var me = this;
var reset = mode === 'reset';
- var _me$_cachedMeta2 = me._cachedMeta,
- xScale = _me$_cachedMeta2.xScale,
- yScale = _me$_cachedMeta2.yScale;
- var firstOpts = me.resolveDataElementOptions(start, mode);
- var sharedOptions = me.getSharedOptions(firstOpts);
- var includeOptions = me.includeOptions(mode, sharedOptions);
-
+ var _this$_cachedMeta2 = this._cachedMeta,
+ iScale = _this$_cachedMeta2.iScale,
+ vScale = _this$_cachedMeta2.vScale;
+ var _this$_getSharedOptio2 = this._getSharedOptions(start, mode),
+ sharedOptions = _this$_getSharedOptio2.sharedOptions,
+ includeOptions = _this$_getSharedOptio2.includeOptions;
+ var iAxis = iScale.axis;
+ var vAxis = vScale.axis;
for (var i = start; i < start + count; i++) {
var point = points[i];
- var parsed = !reset && me.getParsed(i);
- var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(parsed.x);
- var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(parsed.y);
- var properties = {
- x: x,
- y: y,
- skip: isNaN(x) || isNaN(y)
- };
-
+ var parsed = !reset && this.getParsed(i);
+ var properties = {};
+ var iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);
+ var vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);
+ properties.skip = isNaN(iPixel) || isNaN(vPixel);
if (includeOptions) {
- properties.options = me.resolveDataElementOptions(i, mode);
-
+ properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
if (reset) {
properties.options.radius = 0;
}
}
-
- me.updateElement(point, i, properties, mode);
+ this.updateElement(point, i, properties, mode);
}
-
- me.updateSharedOptions(sharedOptions, mode, firstOpts);
}
}, {
key: "resolveDataElementOptions",
value: function resolveDataElementOptions(index, mode) {
var parsed = this.getParsed(index);
-
- var values = _get(_getPrototypeOf(BubbleController.prototype), "resolveDataElementOptions", this).call(this, index, mode);
-
+ var values = _get(_getPrototypeOf$w(BubbleController.prototype), "resolveDataElementOptions", this).call(this, index, mode);
if (values.$shared) {
values = Object.assign({}, values, {
$shared: false
});
}
-
var radius = values.radius;
-
if (mode !== 'active') {
values.radius = 0;
}
-
values.radius += valueOrDefault(parsed && parsed._custom, radius);
return values;
}
}]);
-
return BubbleController;
}(DatasetController);
-
- BubbleController.id = 'bubble';
- BubbleController.defaults = {
+ _defineProperty$w(BubbleController, "id", 'bubble');
+ _defineProperty$w(BubbleController, "defaults", {
datasetElementType: false,
dataElementType: 'point',
animations: {
numbers: {
type: 'number',
properties: ['x', 'y', 'borderWidth', 'radius']
}
}
- };
- BubbleController.overrides = {
+ });
+ _defineProperty$w(BubbleController, "overrides", {
scales: {
x: {
type: 'linear'
},
y: {
type: 'linear'
}
- },
- plugins: {
- tooltip: {
- callbacks: {
- title: function title() {
- return '';
- }
- }
- }
}
- };
-
+ });
function getRatioAndOffset(rotation, circumference, cutout) {
var ratioX = 1;
var ratioY = 1;
var offsetX = 0;
var offsetY = 0;
-
if (circumference < TAU) {
var startAngle = rotation;
var endAngle = startAngle + circumference;
var startX = Math.cos(startAngle);
var startY = Math.sin(startAngle);
var endX = Math.cos(endAngle);
var endY = Math.sin(endAngle);
-
var calcMax = function calcMax(angle, a, b) {
- return _angleBetween(angle, startAngle, endAngle) ? 1 : Math.max(a, a * cutout, b, b * cutout);
+ return _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
};
-
var calcMin = function calcMin(angle, a, b) {
- return _angleBetween(angle, startAngle, endAngle) ? -1 : Math.min(a, a * cutout, b, b * cutout);
+ return _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
};
-
var maxX = calcMax(0, startX, endX);
var maxY = calcMax(HALF_PI, startY, endY);
var minX = calcMin(PI, startX, endX);
var minY = calcMin(PI + HALF_PI, startY, endY);
ratioX = (maxX - minX) / 2;
ratioY = (maxY - minY) / 2;
offsetX = -(maxX + minX) / 2;
offsetY = -(maxY + minY) / 2;
}
-
return {
ratioX: ratioX,
ratioY: ratioY,
offsetX: offsetX,
offsetY: offsetY
};
}
-
var DoughnutController = /*#__PURE__*/function (_DatasetController3) {
- _inherits(DoughnutController, _DatasetController3);
-
- var _super3 = _createSuper(DoughnutController);
-
+ _inherits$w(DoughnutController, _DatasetController3);
+ var _super3 = _createSuper$w(DoughnutController);
function DoughnutController(chart, datasetIndex) {
- var _this;
-
- _classCallCheck(this, DoughnutController);
-
- _this = _super3.call(this, chart, datasetIndex);
- _this.enableOptionSharing = true;
- _this.innerRadius = undefined;
- _this.outerRadius = undefined;
- _this.offsetX = undefined;
- _this.offsetY = undefined;
- return _this;
+ var _this4;
+ _classCallCheck$x(this, DoughnutController);
+ _this4 = _super3.call(this, chart, datasetIndex);
+ _this4.enableOptionSharing = true;
+ _this4.innerRadius = undefined;
+ _this4.outerRadius = undefined;
+ _this4.offsetX = undefined;
+ _this4.offsetY = undefined;
+ return _this4;
}
-
- _createClass(DoughnutController, [{
+ _createClass$x(DoughnutController, [{
key: "linkScales",
value: function linkScales() {}
}, {
key: "parse",
value: function parse(start, count) {
var data = this.getDataset().data;
var meta = this._cachedMeta;
- var i, ilen;
-
- for (i = start, ilen = start + count; i < ilen; ++i) {
- meta._parsed[i] = +data[i];
+ if (this._parsing === false) {
+ meta._parsed = data;
+ } else {
+ var getter = function getter(i) {
+ return +data[i];
+ };
+ if (isObject(data[start])) {
+ var _this$_parsing$key = this._parsing.key,
+ key = _this$_parsing$key === void 0 ? 'value' : _this$_parsing$key;
+ getter = function getter(i) {
+ return +resolveObjectKey(data[i], key);
+ };
+ }
+ var i, ilen;
+ for (i = start, ilen = start + count; i < ilen; ++i) {
+ meta._parsed[i] = getter(i);
+ }
}
}
}, {
key: "_getRotation",
value: function _getRotation() {
@@ -5795,237 +6016,189 @@
}, {
key: "_getRotationExtents",
value: function _getRotationExtents() {
var min = TAU;
var max = -TAU;
- var me = this;
-
- for (var i = 0; i < me.chart.data.datasets.length; ++i) {
- if (me.chart.isDatasetVisible(i)) {
- var controller = me.chart.getDatasetMeta(i).controller;
-
+ for (var i = 0; i < this.chart.data.datasets.length; ++i) {
+ if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {
+ var controller = this.chart.getDatasetMeta(i).controller;
var rotation = controller._getRotation();
-
var circumference = controller._getCircumference();
-
min = Math.min(min, rotation);
max = Math.max(max, rotation + circumference);
}
}
-
return {
rotation: min,
circumference: max - min
};
}
}, {
key: "update",
value: function update(mode) {
- var me = this;
- var chart = me.chart;
+ var chart = this.chart;
var chartArea = chart.chartArea;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var arcs = meta.data;
- var spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs);
+ var spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
- var cutout = Math.min(toPercentage(me.options.cutout, maxSize), 1);
-
- var chartWeight = me._getRingWeight(me.index);
-
- var _me$_getRotationExten = me._getRotationExtents(),
- circumference = _me$_getRotationExten.circumference,
- rotation = _me$_getRotationExten.rotation;
-
+ var cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);
+ var chartWeight = this._getRingWeight(this.index);
+ var _this$_getRotationExt = this._getRotationExtents(),
+ circumference = _this$_getRotationExt.circumference,
+ rotation = _this$_getRotationExt.rotation;
var _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),
- ratioX = _getRatioAndOffset.ratioX,
- ratioY = _getRatioAndOffset.ratioY,
- offsetX = _getRatioAndOffset.offsetX,
- offsetY = _getRatioAndOffset.offsetY;
-
+ ratioX = _getRatioAndOffset.ratioX,
+ ratioY = _getRatioAndOffset.ratioY,
+ offsetX = _getRatioAndOffset.offsetX,
+ offsetY = _getRatioAndOffset.offsetY;
var maxWidth = (chartArea.width - spacing) / ratioX;
var maxHeight = (chartArea.height - spacing) / ratioY;
var maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
- var outerRadius = toDimension(me.options.radius, maxRadius);
+ var outerRadius = toDimension(this.options.radius, maxRadius);
var innerRadius = Math.max(outerRadius * cutout, 0);
-
- var radiusLength = (outerRadius - innerRadius) / me._getVisibleDatasetWeightTotal();
-
- me.offsetX = offsetX * outerRadius;
- me.offsetY = offsetY * outerRadius;
- meta.total = me.calculateTotal();
- me.outerRadius = outerRadius - radiusLength * me._getRingWeightOffset(me.index);
- me.innerRadius = Math.max(me.outerRadius - radiusLength * chartWeight, 0);
- me.updateElements(arcs, 0, arcs.length, mode);
+ var radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
+ this.offsetX = offsetX * outerRadius;
+ this.offsetY = offsetY * outerRadius;
+ meta.total = this.calculateTotal();
+ this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
+ this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
+ this.updateElements(arcs, 0, arcs.length, mode);
}
}, {
key: "_circumference",
value: function _circumference(i, reset) {
- var me = this;
- var opts = me.options;
- var meta = me._cachedMeta;
-
- var circumference = me._getCircumference();
-
- if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null) {
+ var opts = this.options;
+ var meta = this._cachedMeta;
+ var circumference = this._getCircumference();
+ if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
return 0;
}
-
- return me.calculateCircumference(meta._parsed[i] * circumference / TAU);
+ return this.calculateCircumference(meta._parsed[i] * circumference / TAU);
}
}, {
key: "updateElements",
value: function updateElements(arcs, start, count, mode) {
- var me = this;
var reset = mode === 'reset';
- var chart = me.chart;
+ var chart = this.chart;
var chartArea = chart.chartArea;
var opts = chart.options;
var animationOpts = opts.animation;
var centerX = (chartArea.left + chartArea.right) / 2;
var centerY = (chartArea.top + chartArea.bottom) / 2;
var animateScale = reset && animationOpts.animateScale;
- var innerRadius = animateScale ? 0 : me.innerRadius;
- var outerRadius = animateScale ? 0 : me.outerRadius;
- var firstOpts = me.resolveDataElementOptions(start, mode);
- var sharedOptions = me.getSharedOptions(firstOpts);
- var includeOptions = me.includeOptions(mode, sharedOptions);
-
- var startAngle = me._getRotation();
-
+ var innerRadius = animateScale ? 0 : this.innerRadius;
+ var outerRadius = animateScale ? 0 : this.outerRadius;
+ var _this$_getSharedOptio3 = this._getSharedOptions(start, mode),
+ sharedOptions = _this$_getSharedOptio3.sharedOptions,
+ includeOptions = _this$_getSharedOptio3.includeOptions;
+ var startAngle = this._getRotation();
var i;
-
for (i = 0; i < start; ++i) {
- startAngle += me._circumference(i, reset);
+ startAngle += this._circumference(i, reset);
}
-
for (i = start; i < start + count; ++i) {
- var circumference = me._circumference(i, reset);
-
+ var circumference = this._circumference(i, reset);
var arc = arcs[i];
var properties = {
- x: centerX + me.offsetX,
- y: centerY + me.offsetY,
+ x: centerX + this.offsetX,
+ y: centerY + this.offsetY,
startAngle: startAngle,
endAngle: startAngle + circumference,
circumference: circumference,
outerRadius: outerRadius,
innerRadius: innerRadius
};
-
if (includeOptions) {
- properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
+ properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);
}
-
startAngle += circumference;
- me.updateElement(arc, i, properties, mode);
+ this.updateElement(arc, i, properties, mode);
}
-
- me.updateSharedOptions(sharedOptions, mode, firstOpts);
}
}, {
key: "calculateTotal",
value: function calculateTotal() {
var meta = this._cachedMeta;
var metaData = meta.data;
var total = 0;
var i;
-
for (i = 0; i < metaData.length; i++) {
var value = meta._parsed[i];
-
- if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i)) {
+ if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
total += Math.abs(value);
}
}
-
return total;
}
}, {
key: "calculateCircumference",
value: function calculateCircumference(value) {
var total = this._cachedMeta.total;
-
if (total > 0 && !isNaN(value)) {
return TAU * (Math.abs(value) / total);
}
-
return 0;
}
}, {
key: "getLabelAndValue",
value: function getLabelAndValue(index) {
- var me = this;
- var meta = me._cachedMeta;
- var chart = me.chart;
+ var meta = this._cachedMeta;
+ var chart = this.chart;
var labels = chart.data.labels || [];
var value = formatNumber(meta._parsed[index], chart.options.locale);
return {
label: labels[index] || '',
value: value
};
}
}, {
key: "getMaxBorderWidth",
value: function getMaxBorderWidth(arcs) {
- var me = this;
var max = 0;
- var chart = me.chart;
+ var chart = this.chart;
var i, ilen, meta, controller, options;
-
if (!arcs) {
for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
if (chart.isDatasetVisible(i)) {
meta = chart.getDatasetMeta(i);
arcs = meta.data;
controller = meta.controller;
-
- if (controller !== me) {
- controller.configure();
- }
-
break;
}
}
}
-
if (!arcs) {
return 0;
}
-
for (i = 0, ilen = arcs.length; i < ilen; ++i) {
options = controller.resolveDataElementOptions(i);
-
if (options.borderAlign !== 'inner') {
max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);
}
}
-
return max;
}
}, {
key: "getMaxOffset",
value: function getMaxOffset(arcs) {
var max = 0;
-
for (var i = 0, ilen = arcs.length; i < ilen; ++i) {
var options = this.resolveDataElementOptions(i);
max = Math.max(max, options.offset || 0, options.hoverOffset || 0);
}
-
return max;
}
}, {
key: "_getRingWeightOffset",
value: function _getRingWeightOffset(datasetIndex) {
var ringWeightOffset = 0;
-
for (var i = 0; i < datasetIndex; ++i) {
if (this.chart.isDatasetVisible(i)) {
ringWeightOffset += this._getRingWeight(i);
}
}
-
return ringWeightOffset;
}
}, {
key: "_getRingWeight",
value: function _getRingWeight(datasetIndex) {
@@ -6035,388 +6208,334 @@
key: "_getVisibleDatasetWeightTotal",
value: function _getVisibleDatasetWeightTotal() {
return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
}
}]);
-
return DoughnutController;
}(DatasetController);
-
- DoughnutController.id = 'doughnut';
- DoughnutController.defaults = {
+ _defineProperty$w(DoughnutController, "id", 'doughnut');
+ _defineProperty$w(DoughnutController, "defaults", {
datasetElementType: false,
dataElementType: 'arc',
animation: {
animateRotate: true,
animateScale: false
},
animations: {
numbers: {
type: 'number',
- properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth']
+ properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']
}
},
cutout: '50%',
rotation: 0,
circumference: 360,
radius: '100%',
+ spacing: 0,
indexAxis: 'r'
- };
- DoughnutController.overrides = {
+ });
+ _defineProperty$w(DoughnutController, "descriptors", {
+ _scriptable: function _scriptable(name) {
+ return name !== 'spacing';
+ },
+ _indexable: function _indexable(name) {
+ return name !== 'spacing';
+ }
+ });
+ _defineProperty$w(DoughnutController, "overrides", {
aspectRatio: 1,
plugins: {
legend: {
labels: {
generateLabels: function generateLabels(chart) {
var data = chart.data;
-
if (data.labels.length && data.datasets.length) {
+ var _chart$legend$options2 = chart.legend.options.labels,
+ pointStyle = _chart$legend$options2.pointStyle,
+ color = _chart$legend$options2.color;
return data.labels.map(function (label, i) {
var meta = chart.getDatasetMeta(0);
var style = meta.controller.getStyle(i);
return {
text: label,
fillStyle: style.backgroundColor,
strokeStyle: style.borderColor,
+ fontColor: color,
lineWidth: style.borderWidth,
+ pointStyle: pointStyle,
hidden: !chart.getDataVisibility(i),
index: i
};
});
}
-
return [];
}
},
onClick: function onClick(e, legendItem, legend) {
legend.chart.toggleDataVisibility(legendItem.index);
legend.chart.update();
}
- },
- tooltip: {
- callbacks: {
- title: function title() {
- return '';
- },
- label: function label(tooltipItem) {
- var dataLabel = tooltipItem.label;
- var value = ': ' + tooltipItem.formattedValue;
-
- if (isArray(dataLabel)) {
- dataLabel = dataLabel.slice();
- dataLabel[0] += value;
- } else {
- dataLabel += value;
- }
-
- return dataLabel;
- }
- }
}
}
- };
-
+ });
var LineController = /*#__PURE__*/function (_DatasetController4) {
- _inherits(LineController, _DatasetController4);
-
- var _super4 = _createSuper(LineController);
-
+ _inherits$w(LineController, _DatasetController4);
+ var _super4 = _createSuper$w(LineController);
function LineController() {
- _classCallCheck(this, LineController);
-
+ _classCallCheck$x(this, LineController);
return _super4.apply(this, arguments);
}
-
- _createClass(LineController, [{
+ _createClass$x(LineController, [{
key: "initialize",
value: function initialize() {
this.enableOptionSharing = true;
-
- _get(_getPrototypeOf(LineController.prototype), "initialize", this).call(this);
+ this.supportsDecimation = true;
+ _get(_getPrototypeOf$w(LineController.prototype), "initialize", this).call(this);
}
}, {
key: "update",
value: function update(mode) {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var line = meta.dataset,
- _meta$data = meta.data,
- points = _meta$data === void 0 ? [] : _meta$data,
- _dataset = meta._dataset;
- var animationsDisabled = me.chart._animationsDisabled;
-
- var _getStartAndCountOfVi = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),
- start = _getStartAndCountOfVi.start,
- count = _getStartAndCountOfVi.count;
-
- me._drawStart = start;
- me._drawCount = count;
-
- if (scaleRangesChanged(meta)) {
+ _meta$data = meta.data,
+ points = _meta$data === void 0 ? [] : _meta$data,
+ _dataset = meta._dataset;
+ var animationsDisabled = this.chart._animationsDisabled;
+ var _getStartAndCountOfVi = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),
+ start = _getStartAndCountOfVi.start,
+ count = _getStartAndCountOfVi.count;
+ this._drawStart = start;
+ this._drawCount = count;
+ if (_scaleRangesChanged(meta)) {
start = 0;
count = points.length;
}
-
+ line._chart = this.chart;
+ line._datasetIndex = this.index;
line._decimated = !!_dataset._decimated;
line.points = points;
-
- if (mode !== 'resize') {
- var options = me.resolveDatasetElementOptions(mode);
-
- if (!me.options.showLine) {
- options.borderWidth = 0;
- }
-
- me.updateElement(line, undefined, {
- animated: !animationsDisabled,
- options: options
- }, mode);
+ var options = this.resolveDatasetElementOptions(mode);
+ if (!this.options.showLine) {
+ options.borderWidth = 0;
}
-
- me.updateElements(points, start, count, mode);
+ options.segment = this.options.segment;
+ this.updateElement(line, undefined, {
+ animated: !animationsDisabled,
+ options: options
+ }, mode);
+ this.updateElements(points, start, count, mode);
}
}, {
key: "updateElements",
value: function updateElements(points, start, count, mode) {
- var me = this;
var reset = mode === 'reset';
- var _me$_cachedMeta3 = me._cachedMeta,
- xScale = _me$_cachedMeta3.xScale,
- yScale = _me$_cachedMeta3.yScale,
- _stacked = _me$_cachedMeta3._stacked;
- var firstOpts = me.resolveDataElementOptions(start, mode);
- var sharedOptions = me.getSharedOptions(firstOpts);
- var includeOptions = me.includeOptions(mode, sharedOptions);
- var spanGaps = me.options.spanGaps;
+ var _this$_cachedMeta3 = this._cachedMeta,
+ iScale = _this$_cachedMeta3.iScale,
+ vScale = _this$_cachedMeta3.vScale,
+ _stacked = _this$_cachedMeta3._stacked,
+ _dataset = _this$_cachedMeta3._dataset;
+ var _this$_getSharedOptio4 = this._getSharedOptions(start, mode),
+ sharedOptions = _this$_getSharedOptio4.sharedOptions,
+ includeOptions = _this$_getSharedOptio4.includeOptions;
+ var iAxis = iScale.axis;
+ var vAxis = vScale.axis;
+ var _this$options2 = this.options,
+ spanGaps = _this$options2.spanGaps,
+ segment = _this$options2.segment;
var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
- var directUpdate = me.chart._animationsDisabled || reset || mode === 'none';
- var prevParsed = start > 0 && me.getParsed(start - 1);
-
- for (var i = start; i < start + count; ++i) {
+ var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
+ var end = start + count;
+ var pointsCount = points.length;
+ var prevParsed = start > 0 && this.getParsed(start - 1);
+ for (var i = 0; i < pointsCount; ++i) {
var point = points[i];
- var parsed = me.getParsed(i);
var properties = directUpdate ? point : {};
- var x = properties.x = xScale.getPixelForValue(parsed.x, i);
- var y = properties.y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(_stacked ? me.applyStack(yScale, parsed, _stacked) : parsed.y, i);
- properties.skip = isNaN(x) || isNaN(y);
- properties.stop = i > 0 && parsed.x - prevParsed.x > maxGapLength;
-
+ if (i < start || i >= end) {
+ properties.skip = true;
+ continue;
+ }
+ var parsed = this.getParsed(i);
+ var nullData = isNullOrUndef(parsed[vAxis]);
+ var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
+ var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
+ properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
+ properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;
+ if (segment) {
+ properties.parsed = parsed;
+ properties.raw = _dataset.data[i];
+ }
if (includeOptions) {
- properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);
+ properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
}
-
if (!directUpdate) {
- me.updateElement(point, i, properties, mode);
+ this.updateElement(point, i, properties, mode);
}
-
prevParsed = parsed;
}
-
- me.updateSharedOptions(sharedOptions, mode, firstOpts);
}
}, {
key: "getMaxOverflow",
value: function getMaxOverflow() {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var dataset = meta.dataset;
var border = dataset.options && dataset.options.borderWidth || 0;
var data = meta.data || [];
-
if (!data.length) {
return border;
}
-
- var firstPoint = data[0].size(me.resolveDataElementOptions(0));
- var lastPoint = data[data.length - 1].size(me.resolveDataElementOptions(data.length - 1));
+ var firstPoint = data[0].size(this.resolveDataElementOptions(0));
+ var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
return Math.max(border, firstPoint, lastPoint) / 2;
}
}, {
key: "draw",
value: function draw() {
- this._cachedMeta.dataset.updateControlPoints(this.chart.chartArea);
-
- _get(_getPrototypeOf(LineController.prototype), "draw", this).call(this);
+ var meta = this._cachedMeta;
+ meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);
+ _get(_getPrototypeOf$w(LineController.prototype), "draw", this).call(this);
}
}]);
-
return LineController;
}(DatasetController);
-
- LineController.id = 'line';
- LineController.defaults = {
+ _defineProperty$w(LineController, "id", 'line');
+ _defineProperty$w(LineController, "defaults", {
datasetElementType: 'line',
dataElementType: 'point',
showLine: true,
spanGaps: false
- };
- LineController.overrides = {
+ });
+ _defineProperty$w(LineController, "overrides", {
scales: {
_index_: {
type: 'category'
},
_value_: {
type: 'linear'
}
}
- };
-
- function getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {
- var pointCount = points.length;
- var start = 0;
- var count = pointCount;
-
- if (meta._sorted) {
- var iScale = meta.iScale,
- _parsed = meta._parsed;
- var axis = iScale.axis;
-
- var _iScale$getUserBounds = iScale.getUserBounds(),
- min = _iScale$getUserBounds.min,
- max = _iScale$getUserBounds.max,
- minDefined = _iScale$getUserBounds.minDefined,
- maxDefined = _iScale$getUserBounds.maxDefined;
-
- if (minDefined) {
- start = _limitValue(Math.min(_lookupByKey(_parsed, iScale.axis, min).lo, animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);
- }
-
- if (maxDefined) {
- count = _limitValue(Math.max(_lookupByKey(_parsed, iScale.axis, max).hi + 1, animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1), start, pointCount) - start;
- } else {
- count = pointCount - start;
- }
- }
-
- return {
- start: start,
- count: count
- };
- }
-
- function scaleRangesChanged(meta) {
- var xScale = meta.xScale,
- yScale = meta.yScale,
- _scaleRanges = meta._scaleRanges;
- var newRanges = {
- xmin: xScale.min,
- xmax: xScale.max,
- ymin: yScale.min,
- ymax: yScale.max
- };
-
- if (!_scaleRanges) {
- meta._scaleRanges = newRanges;
- return true;
- }
-
- var changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;
- Object.assign(_scaleRanges, newRanges);
- return changed;
- }
-
+ });
var PolarAreaController = /*#__PURE__*/function (_DatasetController5) {
- _inherits(PolarAreaController, _DatasetController5);
-
- var _super5 = _createSuper(PolarAreaController);
-
+ _inherits$w(PolarAreaController, _DatasetController5);
+ var _super5 = _createSuper$w(PolarAreaController);
function PolarAreaController(chart, datasetIndex) {
- var _this2;
-
- _classCallCheck(this, PolarAreaController);
-
- _this2 = _super5.call(this, chart, datasetIndex);
- _this2.innerRadius = undefined;
- _this2.outerRadius = undefined;
- return _this2;
+ var _this5;
+ _classCallCheck$x(this, PolarAreaController);
+ _this5 = _super5.call(this, chart, datasetIndex);
+ _this5.innerRadius = undefined;
+ _this5.outerRadius = undefined;
+ return _this5;
}
-
- _createClass(PolarAreaController, [{
+ _createClass$x(PolarAreaController, [{
+ key: "getLabelAndValue",
+ value: function getLabelAndValue(index) {
+ var meta = this._cachedMeta;
+ var chart = this.chart;
+ var labels = chart.data.labels || [];
+ var value = formatNumber(meta._parsed[index].r, chart.options.locale);
+ return {
+ label: labels[index] || '',
+ value: value
+ };
+ }
+ }, {
+ key: "parseObjectData",
+ value: function parseObjectData(meta, data, start, count) {
+ return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);
+ }
+ }, {
key: "update",
value: function update(mode) {
var arcs = this._cachedMeta.data;
-
this._updateRadius();
-
this.updateElements(arcs, 0, arcs.length, mode);
}
}, {
+ key: "getMinMax",
+ value: function getMinMax() {
+ var _this6 = this;
+ var meta = this._cachedMeta;
+ var range = {
+ min: Number.POSITIVE_INFINITY,
+ max: Number.NEGATIVE_INFINITY
+ };
+ meta.data.forEach(function (element, index) {
+ var parsed = _this6.getParsed(index).r;
+ if (!isNaN(parsed) && _this6.chart.getDataVisibility(index)) {
+ if (parsed < range.min) {
+ range.min = parsed;
+ }
+ if (parsed > range.max) {
+ range.max = parsed;
+ }
+ }
+ });
+ return range;
+ }
+ }, {
key: "_updateRadius",
value: function _updateRadius() {
- var me = this;
- var chart = me.chart;
+ var chart = this.chart;
var chartArea = chart.chartArea;
var opts = chart.options;
var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
var outerRadius = Math.max(minSize / 2, 0);
var innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);
var radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();
- me.outerRadius = outerRadius - radiusLength * me.index;
- me.innerRadius = me.outerRadius - radiusLength;
+ this.outerRadius = outerRadius - radiusLength * this.index;
+ this.innerRadius = this.outerRadius - radiusLength;
}
}, {
key: "updateElements",
value: function updateElements(arcs, start, count, mode) {
- var me = this;
var reset = mode === 'reset';
- var chart = me.chart;
- var dataset = me.getDataset();
+ var chart = this.chart;
var opts = chart.options;
var animationOpts = opts.animation;
- var scale = me._cachedMeta.rScale;
+ var scale = this._cachedMeta.rScale;
var centerX = scale.xCenter;
var centerY = scale.yCenter;
var datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;
var angle = datasetStartAngle;
var i;
- var defaultAngle = 360 / me.countVisibleElements();
-
+ var defaultAngle = 360 / this.countVisibleElements();
for (i = 0; i < start; ++i) {
- angle += me._computeAngle(i, mode, defaultAngle);
+ angle += this._computeAngle(i, mode, defaultAngle);
}
-
for (i = start; i < start + count; i++) {
var arc = arcs[i];
var startAngle = angle;
-
- var endAngle = angle + me._computeAngle(i, mode, defaultAngle);
-
- var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;
+ var endAngle = angle + this._computeAngle(i, mode, defaultAngle);
+ var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;
angle = endAngle;
-
if (reset) {
if (animationOpts.animateScale) {
outerRadius = 0;
}
-
if (animationOpts.animateRotate) {
startAngle = endAngle = datasetStartAngle;
}
}
-
var properties = {
x: centerX,
y: centerY,
innerRadius: 0,
outerRadius: outerRadius,
startAngle: startAngle,
endAngle: endAngle,
- options: me.resolveDataElementOptions(i, mode)
+ options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)
};
- me.updateElement(arc, i, properties, mode);
+ this.updateElement(arc, i, properties, mode);
}
}
}, {
key: "countVisibleElements",
value: function countVisibleElements() {
- var _this3 = this;
-
- var dataset = this.getDataset();
+ var _this7 = this;
var meta = this._cachedMeta;
var count = 0;
meta.data.forEach(function (element, index) {
- if (!isNaN(dataset.data[index]) && _this3.chart.getDataVisibility(index)) {
+ if (!isNaN(_this7.getParsed(index).r) && _this7.chart.getDataVisibility(index)) {
count++;
}
});
return count;
}
@@ -6424,16 +6543,14 @@
key: "_computeAngle",
value: function _computeAngle(index, mode, defaultAngle) {
return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;
}
}]);
-
return PolarAreaController;
}(DatasetController);
-
- PolarAreaController.id = 'polarArea';
- PolarAreaController.defaults = {
+ _defineProperty$w(PolarAreaController, "id", 'polarArea');
+ _defineProperty$w(PolarAreaController, "defaults", {
dataElementType: 'arc',
animation: {
animateRotate: true,
animateScale: true
},
@@ -6443,51 +6560,44 @@
properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']
}
},
indexAxis: 'r',
startAngle: 0
- };
- PolarAreaController.overrides = {
+ });
+ _defineProperty$w(PolarAreaController, "overrides", {
aspectRatio: 1,
plugins: {
legend: {
labels: {
generateLabels: function generateLabels(chart) {
var data = chart.data;
-
if (data.labels.length && data.datasets.length) {
+ var _chart$legend$options3 = chart.legend.options.labels,
+ pointStyle = _chart$legend$options3.pointStyle,
+ color = _chart$legend$options3.color;
return data.labels.map(function (label, i) {
var meta = chart.getDatasetMeta(0);
var style = meta.controller.getStyle(i);
return {
text: label,
fillStyle: style.backgroundColor,
strokeStyle: style.borderColor,
+ fontColor: color,
lineWidth: style.borderWidth,
+ pointStyle: pointStyle,
hidden: !chart.getDataVisibility(i),
index: i
};
});
}
-
return [];
}
},
onClick: function onClick(e, legendItem, legend) {
legend.chart.toggleDataVisibility(legendItem.index);
legend.chart.update();
}
- },
- tooltip: {
- callbacks: {
- title: function title() {
- return '';
- },
- label: function label(context) {
- return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;
- }
- }
}
},
scales: {
r: {
type: 'radialLinear',
@@ -6502,177 +6612,265 @@
display: false
},
startAngle: 0
}
}
- };
-
+ });
var PieController = /*#__PURE__*/function (_DoughnutController) {
- _inherits(PieController, _DoughnutController);
-
- var _super6 = _createSuper(PieController);
-
+ _inherits$w(PieController, _DoughnutController);
+ var _super6 = _createSuper$w(PieController);
function PieController() {
- _classCallCheck(this, PieController);
-
+ _classCallCheck$x(this, PieController);
return _super6.apply(this, arguments);
}
-
- return PieController;
+ return _createClass$x(PieController);
}(DoughnutController);
-
- PieController.id = 'pie';
- PieController.defaults = {
+ _defineProperty$w(PieController, "id", 'pie');
+ _defineProperty$w(PieController, "defaults", {
cutout: 0,
rotation: 0,
circumference: 360,
radius: '100%'
- };
-
+ });
var RadarController = /*#__PURE__*/function (_DatasetController6) {
- _inherits(RadarController, _DatasetController6);
-
- var _super7 = _createSuper(RadarController);
-
+ _inherits$w(RadarController, _DatasetController6);
+ var _super7 = _createSuper$w(RadarController);
function RadarController() {
- _classCallCheck(this, RadarController);
-
+ _classCallCheck$x(this, RadarController);
return _super7.apply(this, arguments);
}
-
- _createClass(RadarController, [{
+ _createClass$x(RadarController, [{
key: "getLabelAndValue",
value: function getLabelAndValue(index) {
- var me = this;
- var vScale = me._cachedMeta.vScale;
- var parsed = me.getParsed(index);
+ var vScale = this._cachedMeta.vScale;
+ var parsed = this.getParsed(index);
return {
label: vScale.getLabels()[index],
value: '' + vScale.getLabelForValue(parsed[vScale.axis])
};
}
}, {
+ key: "parseObjectData",
+ value: function parseObjectData(meta, data, start, count) {
+ return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);
+ }
+ }, {
key: "update",
value: function update(mode) {
- var me = this;
- var meta = me._cachedMeta;
+ var meta = this._cachedMeta;
var line = meta.dataset;
var points = meta.data || [];
var labels = meta.iScale.getLabels();
line.points = points;
-
if (mode !== 'resize') {
- var options = me.resolveDatasetElementOptions(mode);
-
- if (!me.options.showLine) {
+ var options = this.resolveDatasetElementOptions(mode);
+ if (!this.options.showLine) {
options.borderWidth = 0;
}
-
var properties = {
_loop: true,
_fullLoop: labels.length === points.length,
options: options
};
- me.updateElement(line, undefined, properties, mode);
+ this.updateElement(line, undefined, properties, mode);
}
-
- me.updateElements(points, 0, points.length, mode);
+ this.updateElements(points, 0, points.length, mode);
}
}, {
key: "updateElements",
value: function updateElements(points, start, count, mode) {
- var me = this;
- var dataset = me.getDataset();
- var scale = me._cachedMeta.rScale;
+ var scale = this._cachedMeta.rScale;
var reset = mode === 'reset';
-
for (var i = start; i < start + count; i++) {
var point = points[i];
- var options = me.resolveDataElementOptions(i, mode);
- var pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);
+ var options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+ var pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);
var x = reset ? scale.xCenter : pointPosition.x;
var y = reset ? scale.yCenter : pointPosition.y;
var properties = {
x: x,
y: y,
angle: pointPosition.angle,
skip: isNaN(x) || isNaN(y),
options: options
};
- me.updateElement(point, i, properties, mode);
+ this.updateElement(point, i, properties, mode);
}
}
}]);
-
return RadarController;
}(DatasetController);
-
- RadarController.id = 'radar';
- RadarController.defaults = {
+ _defineProperty$w(RadarController, "id", 'radar');
+ _defineProperty$w(RadarController, "defaults", {
datasetElementType: 'line',
dataElementType: 'point',
indexAxis: 'r',
showLine: true,
elements: {
line: {
fill: 'start'
}
}
- };
- RadarController.overrides = {
+ });
+ _defineProperty$w(RadarController, "overrides", {
aspectRatio: 1,
scales: {
r: {
type: 'radialLinear'
}
}
- };
-
- var ScatterController = /*#__PURE__*/function (_LineController) {
- _inherits(ScatterController, _LineController);
-
- var _super8 = _createSuper(ScatterController);
-
+ });
+ var ScatterController = /*#__PURE__*/function (_DatasetController7) {
+ _inherits$w(ScatterController, _DatasetController7);
+ var _super8 = _createSuper$w(ScatterController);
function ScatterController() {
- _classCallCheck(this, ScatterController);
-
+ _classCallCheck$x(this, ScatterController);
return _super8.apply(this, arguments);
}
-
+ _createClass$x(ScatterController, [{
+ key: "getLabelAndValue",
+ value: function getLabelAndValue(index) {
+ var meta = this._cachedMeta;
+ var labels = this.chart.data.labels || [];
+ var xScale = meta.xScale,
+ yScale = meta.yScale;
+ var parsed = this.getParsed(index);
+ var x = xScale.getLabelForValue(parsed.x);
+ var y = yScale.getLabelForValue(parsed.y);
+ return {
+ label: labels[index] || '',
+ value: '(' + x + ', ' + y + ')'
+ };
+ }
+ }, {
+ key: "update",
+ value: function update(mode) {
+ var meta = this._cachedMeta;
+ var _meta$data2 = meta.data,
+ points = _meta$data2 === void 0 ? [] : _meta$data2;
+ var animationsDisabled = this.chart._animationsDisabled;
+ var _getStartAndCountOfVi2 = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),
+ start = _getStartAndCountOfVi2.start,
+ count = _getStartAndCountOfVi2.count;
+ this._drawStart = start;
+ this._drawCount = count;
+ if (_scaleRangesChanged(meta)) {
+ start = 0;
+ count = points.length;
+ }
+ if (this.options.showLine) {
+ var line = meta.dataset,
+ _dataset = meta._dataset;
+ line._chart = this.chart;
+ line._datasetIndex = this.index;
+ line._decimated = !!_dataset._decimated;
+ line.points = points;
+ var options = this.resolveDatasetElementOptions(mode);
+ options.segment = this.options.segment;
+ this.updateElement(line, undefined, {
+ animated: !animationsDisabled,
+ options: options
+ }, mode);
+ }
+ this.updateElements(points, start, count, mode);
+ }
+ }, {
+ key: "addElements",
+ value: function addElements() {
+ var showLine = this.options.showLine;
+ if (!this.datasetElementType && showLine) {
+ this.datasetElementType = this.chart.registry.getElement('line');
+ }
+ _get(_getPrototypeOf$w(ScatterController.prototype), "addElements", this).call(this);
+ }
+ }, {
+ key: "updateElements",
+ value: function updateElements(points, start, count, mode) {
+ var reset = mode === 'reset';
+ var _this$_cachedMeta4 = this._cachedMeta,
+ iScale = _this$_cachedMeta4.iScale,
+ vScale = _this$_cachedMeta4.vScale,
+ _stacked = _this$_cachedMeta4._stacked,
+ _dataset = _this$_cachedMeta4._dataset;
+ var firstOpts = this.resolveDataElementOptions(start, mode);
+ var sharedOptions = this.getSharedOptions(firstOpts);
+ var includeOptions = this.includeOptions(mode, sharedOptions);
+ var iAxis = iScale.axis;
+ var vAxis = vScale.axis;
+ var _this$options3 = this.options,
+ spanGaps = _this$options3.spanGaps,
+ segment = _this$options3.segment;
+ var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
+ var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
+ var prevParsed = start > 0 && this.getParsed(start - 1);
+ for (var i = start; i < start + count; ++i) {
+ var point = points[i];
+ var parsed = this.getParsed(i);
+ var properties = directUpdate ? point : {};
+ var nullData = isNullOrUndef(parsed[vAxis]);
+ var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
+ var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
+ properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
+ properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;
+ if (segment) {
+ properties.parsed = parsed;
+ properties.raw = _dataset.data[i];
+ }
+ if (includeOptions) {
+ properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+ }
+ if (!directUpdate) {
+ this.updateElement(point, i, properties, mode);
+ }
+ prevParsed = parsed;
+ }
+ this.updateSharedOptions(sharedOptions, mode, firstOpts);
+ }
+ }, {
+ key: "getMaxOverflow",
+ value: function getMaxOverflow() {
+ var meta = this._cachedMeta;
+ var data = meta.data || [];
+ if (!this.options.showLine) {
+ var max = 0;
+ for (var i = data.length - 1; i >= 0; --i) {
+ max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
+ }
+ return max > 0 && max;
+ }
+ var dataset = meta.dataset;
+ var border = dataset.options && dataset.options.borderWidth || 0;
+ if (!data.length) {
+ return border;
+ }
+ var firstPoint = data[0].size(this.resolveDataElementOptions(0));
+ var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
+ return Math.max(border, firstPoint, lastPoint) / 2;
+ }
+ }]);
return ScatterController;
- }(LineController);
-
- ScatterController.id = 'scatter';
- ScatterController.defaults = {
+ }(DatasetController);
+ _defineProperty$w(ScatterController, "id", 'scatter');
+ _defineProperty$w(ScatterController, "defaults", {
+ datasetElementType: false,
+ dataElementType: 'point',
showLine: false,
fill: false
- };
- ScatterController.overrides = {
+ });
+ _defineProperty$w(ScatterController, "overrides", {
interaction: {
mode: 'point'
},
- plugins: {
- tooltip: {
- callbacks: {
- title: function title() {
- return '';
- },
- label: function label(item) {
- return '(' + item.label + ', ' + item.formattedValue + ')';
- }
- }
- }
- },
scales: {
x: {
type: 'linear'
},
y: {
type: 'linear'
}
}
- };
+ });
var controllers = /*#__PURE__*/Object.freeze({
__proto__: null,
BarController: BarController,
BubbleController: BubbleController,
DoughnutController: DoughnutController,
@@ -6681,202 +6879,201 @@
PieController: PieController,
RadarController: RadarController,
ScatterController: ScatterController
});
- function abstract() {
- throw new Error('This method is not implemented: either no adapter can be found or an incomplete integration was provided.');
+ /**
+ * @namespace Chart._adapters
+ * @since 2.8.0
+ * @private
+ */
+ function _abstract() {
+ throw new Error('This method is not implemented: Check that a complete date adapter is provided.');
}
-
- var DateAdapter = /*#__PURE__*/function () {
- function DateAdapter(options) {
- _classCallCheck(this, DateAdapter);
-
+ /**
+ * Date adapter (current used by the time scale)
+ * @namespace Chart._adapters._date
+ * @memberof Chart._adapters
+ * @private
+ */
+ var DateAdapterBase = /*#__PURE__*/function () {
+ function DateAdapterBase(options) {
+ _classCallCheck$x(this, DateAdapterBase);
this.options = options || {};
}
-
- _createClass(DateAdapter, [{
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ _createClass$x(DateAdapterBase, [{
+ key: "init",
+ value: function init() {}
+ }, {
key: "formats",
value: function formats() {
- return abstract();
+ return _abstract();
}
}, {
key: "parse",
- value: function parse(value, format) {
- return abstract();
+ value: function parse() {
+ return _abstract();
}
}, {
key: "format",
- value: function format(timestamp, _format) {
- return abstract();
+ value: function format() {
+ return _abstract();
}
}, {
key: "add",
- value: function add(timestamp, amount, unit) {
- return abstract();
+ value: function add() {
+ return _abstract();
}
}, {
key: "diff",
- value: function diff(a, b, unit) {
- return abstract();
+ value: function diff() {
+ return _abstract();
}
}, {
key: "startOf",
- value: function startOf(timestamp, unit, weekday) {
- return abstract();
+ value: function startOf() {
+ return _abstract();
}
}, {
key: "endOf",
- value: function endOf(timestamp, unit) {
- return abstract();
+ value: function endOf() {
+ return _abstract();
}
+ }], [{
+ key: "override",
+ value:
+ /**
+ * Override default date adapter methods.
+ * Accepts type parameter to define options type.
+ * @example
+ * Chart._adapters._date.override<{myAdapterOption: string}>({
+ * init() {
+ * console.log(this.options.myAdapterOption);
+ * }
+ * })
+ */
+ function override(members) {
+ Object.assign(DateAdapterBase.prototype, members);
+ }
}]);
-
- return DateAdapter;
+ return DateAdapterBase;
}();
-
- DateAdapter.override = function (members) {
- Object.assign(DateAdapter.prototype, members);
- };
-
var adapters = {
- _date: DateAdapter
+ _date: DateAdapterBase
};
-
- function getRelativePosition(e, chart) {
- if ('native' in e) {
- return {
- x: e.x,
- y: e.y
- };
- }
-
- return getRelativePosition$1(e, chart);
- }
-
- function evaluateAllVisibleItems(chart, handler) {
- var metasets = chart.getSortedVisibleDatasetMetas();
- var index, data, element;
-
- for (var i = 0, ilen = metasets.length; i < ilen; ++i) {
- var _metasets$i = metasets[i];
- index = _metasets$i.index;
- data = _metasets$i.data;
-
- for (var j = 0, jlen = data.length; j < jlen; ++j) {
- element = data[j];
-
- if (!element.skip) {
- handler(element, index, j);
- }
- }
- }
- }
-
function binarySearch(metaset, axis, value, intersect) {
var controller = metaset.controller,
- data = metaset.data,
- _sorted = metaset._sorted;
+ data = metaset.data,
+ _sorted = metaset._sorted;
var iScale = controller._cachedMeta.iScale;
-
- if (iScale && axis === iScale.axis && _sorted && data.length) {
+ if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {
var lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;
-
if (!intersect) {
return lookupMethod(data, axis, value);
} else if (controller._sharedOptions) {
var el = data[0];
var range = typeof el.getRange === 'function' && el.getRange(axis);
-
if (range) {
var start = lookupMethod(data, axis, value - range);
var end = lookupMethod(data, axis, value + range);
return {
lo: start.lo,
hi: end.hi
};
}
}
}
-
return {
lo: 0,
hi: data.length - 1
};
}
-
- function optimizedEvaluateItems(chart, axis, position, handler, intersect) {
+ function evaluateInteractionItems(chart, axis, position, handler, intersect) {
var metasets = chart.getSortedVisibleDatasetMetas();
var value = position[axis];
-
for (var i = 0, ilen = metasets.length; i < ilen; ++i) {
- var _metasets$i2 = metasets[i],
- index = _metasets$i2.index,
- data = _metasets$i2.data;
-
+ var _metasets$i = metasets[i],
+ _index2 = _metasets$i.index,
+ data = _metasets$i.data;
var _binarySearch = binarySearch(metasets[i], axis, value, intersect),
- lo = _binarySearch.lo,
- hi = _binarySearch.hi;
-
+ lo = _binarySearch.lo,
+ hi = _binarySearch.hi;
for (var j = lo; j <= hi; ++j) {
var element = data[j];
-
if (!element.skip) {
- handler(element, index, j);
+ handler(element, _index2, j);
}
}
}
}
-
function getDistanceMetricForAxis(axis) {
var useX = axis.indexOf('x') !== -1;
var useY = axis.indexOf('y') !== -1;
return function (pt1, pt2) {
var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
};
}
-
- function getIntersectItems(chart, position, axis, useFinalPosition) {
+ function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
var items = [];
-
- if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {
+ if (!includeInvisible && !chart.isPointInArea(position)) {
return items;
}
-
var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {
+ if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {
+ return;
+ }
if (element.inRange(position.x, position.y, useFinalPosition)) {
items.push({
element: element,
datasetIndex: datasetIndex,
index: index
});
}
};
-
- optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);
+ evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
return items;
}
-
- function getNearestItems(chart, position, axis, intersect, useFinalPosition) {
- var distanceMetric = getDistanceMetricForAxis(axis);
- var minDistance = Number.POSITIVE_INFINITY;
+ function getNearestRadialItems(chart, position, axis, useFinalPosition) {
var items = [];
-
- if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {
- return items;
+ function evaluationFunc(element, datasetIndex, index) {
+ var _element$getProps = element.getProps(['startAngle', 'endAngle'], useFinalPosition),
+ startAngle = _element$getProps.startAngle,
+ endAngle = _element$getProps.endAngle;
+ var _getAngleFromPoint = getAngleFromPoint(element, {
+ x: position.x,
+ y: position.y
+ }),
+ angle = _getAngleFromPoint.angle;
+ if (_angleBetween(angle, startAngle, endAngle)) {
+ items.push({
+ element: element,
+ datasetIndex: datasetIndex,
+ index: index
+ });
+ }
}
-
- var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {
- if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {
+ evaluateInteractionItems(chart, axis, position, evaluationFunc);
+ return items;
+ }
+ function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
+ var items = [];
+ var distanceMetric = getDistanceMetricForAxis(axis);
+ var minDistance = Number.POSITIVE_INFINITY;
+ function evaluationFunc(element, datasetIndex, index) {
+ var inRange = element.inRange(position.x, position.y, useFinalPosition);
+ if (intersect && !inRange) {
return;
}
-
var center = element.getCenterPoint(useFinalPosition);
+ var pointInArea = !!includeInvisible || chart.isPointInArea(center);
+ if (!pointInArea && !inRange) {
+ return;
+ }
var distance = distanceMetric(position, center);
-
if (distance < minDistance) {
items = [{
element: element,
datasetIndex: datasetIndex,
index: index
@@ -6887,59 +7084,54 @@
element: element,
datasetIndex: datasetIndex,
index: index
});
}
- };
-
- optimizedEvaluateItems(chart, axis, position, evaluationFunc);
+ }
+ evaluateInteractionItems(chart, axis, position, evaluationFunc);
return items;
}
-
- function getAxisItems(chart, e, options, useFinalPosition) {
- var position = getRelativePosition(e, chart);
+ function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
+ if (!includeInvisible && !chart.isPointInArea(position)) {
+ return [];
+ }
+ return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
+ }
+ function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
var items = [];
- var axis = options.axis;
var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';
var intersectsItem = false;
- evaluateAllVisibleItems(chart, function (element, datasetIndex, index) {
+ evaluateInteractionItems(chart, axis, position, function (element, datasetIndex, index) {
if (element[rangeMethod](position[axis], useFinalPosition)) {
items.push({
element: element,
datasetIndex: datasetIndex,
index: index
});
+ intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
}
-
- if (element.inRange(position.x, position.y, useFinalPosition)) {
- intersectsItem = true;
- }
});
-
- if (options.intersect && !intersectsItem) {
+ if (intersect && !intersectsItem) {
return [];
}
-
return items;
}
-
var Interaction = {
+ evaluateInteractionItems: evaluateInteractionItems,
modes: {
index: function index(chart, e, options, useFinalPosition) {
var position = getRelativePosition(e, chart);
var axis = options.axis || 'x';
- var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);
+ var includeInvisible = options.includeInvisible || false;
+ var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
var elements = [];
-
if (!items.length) {
return [];
}
-
chart.getSortedVisibleDatasetMetas().forEach(function (meta) {
var index = items[0].index;
var element = meta.data[index];
-
if (element && !element.skip) {
elements.push({
element: element,
datasetIndex: meta.index,
index: index
@@ -6949,104 +7141,138 @@
return elements;
},
dataset: function dataset(chart, e, options, useFinalPosition) {
var position = getRelativePosition(e, chart);
var axis = options.axis || 'xy';
- var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);
-
+ var includeInvisible = options.includeInvisible || false;
+ var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
if (items.length > 0) {
var datasetIndex = items[0].datasetIndex;
var data = chart.getDatasetMeta(datasetIndex).data;
items = [];
-
for (var i = 0; i < data.length; ++i) {
items.push({
element: data[i],
datasetIndex: datasetIndex,
index: i
});
}
}
-
return items;
},
point: function point(chart, e, options, useFinalPosition) {
var position = getRelativePosition(e, chart);
var axis = options.axis || 'xy';
- return getIntersectItems(chart, position, axis, useFinalPosition);
+ var includeInvisible = options.includeInvisible || false;
+ return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
},
nearest: function nearest(chart, e, options, useFinalPosition) {
var position = getRelativePosition(e, chart);
var axis = options.axis || 'xy';
- return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);
+ var includeInvisible = options.includeInvisible || false;
+ return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);
},
x: function x(chart, e, options, useFinalPosition) {
- options.axis = 'x';
- return getAxisItems(chart, e, options, useFinalPosition);
+ var position = getRelativePosition(e, chart);
+ return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);
},
y: function y(chart, e, options, useFinalPosition) {
- options.axis = 'y';
- return getAxisItems(chart, e, options, useFinalPosition);
+ var position = getRelativePosition(e, chart);
+ return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);
}
}
};
var STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];
-
function filterByPosition(array, position) {
return array.filter(function (v) {
return v.pos === position;
});
}
-
function filterDynamicPositionByAxis(array, axis) {
return array.filter(function (v) {
return STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis;
});
}
-
function sortByWeight(array, reverse) {
return array.sort(function (a, b) {
var v0 = reverse ? b : a;
var v1 = reverse ? a : b;
return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;
});
}
-
function wrapBoxes(boxes) {
var layoutBoxes = [];
- var i, ilen, box;
-
+ var i, ilen, box, pos, stack, stackWeight;
for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
box = boxes[i];
+ var _box = box;
+ pos = _box.position;
+ var _box$options = _box.options;
+ stack = _box$options.stack;
+ var _box$options$stackWei = _box$options.stackWeight;
+ stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;
layoutBoxes.push({
index: i,
box: box,
- pos: box.position,
+ pos: pos,
horizontal: box.isHorizontal(),
- weight: box.weight
+ weight: box.weight,
+ stack: stack && pos + stack,
+ stackWeight: stackWeight
});
}
-
return layoutBoxes;
}
-
+ function buildStacks(layouts) {
+ var stacks = {};
+ var _iterator5 = _createForOfIteratorHelper$1(layouts),
+ _step5;
+ try {
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
+ var wrap = _step5.value;
+ var stack = wrap.stack,
+ pos = wrap.pos,
+ stackWeight = wrap.stackWeight;
+ if (!stack || !STATIC_POSITIONS.includes(pos)) {
+ continue;
+ }
+ var _stack = stacks[stack] || (stacks[stack] = {
+ count: 0,
+ placed: 0,
+ weight: 0,
+ size: 0
+ });
+ _stack.count++;
+ _stack.weight += stackWeight;
+ }
+ } catch (err) {
+ _iterator5.e(err);
+ } finally {
+ _iterator5.f();
+ }
+ return stacks;
+ }
function setLayoutDims(layouts, params) {
+ var stacks = buildStacks(layouts);
+ var vBoxMaxWidth = params.vBoxMaxWidth,
+ hBoxMaxHeight = params.hBoxMaxHeight;
var i, ilen, layout;
-
for (i = 0, ilen = layouts.length; i < ilen; ++i) {
layout = layouts[i];
-
+ var fullSize = layout.box.fullSize;
+ var stack = stacks[layout.stack];
+ var factor = stack && layout.stackWeight / stack.weight;
if (layout.horizontal) {
- layout.width = layout.box.fullSize && params.availableWidth;
- layout.height = params.hBoxMaxHeight;
+ layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
+ layout.height = hBoxMaxHeight;
} else {
- layout.width = params.vBoxMaxWidth;
- layout.height = layout.box.fullSize && params.availableHeight;
+ layout.width = vBoxMaxWidth;
+ layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
}
}
+ return stacks;
}
-
function buildLayoutBoxes(boxes) {
var layoutBoxes = wrapBoxes(boxes);
var fullSize = sortByWeight(layoutBoxes.filter(function (wrap) {
return wrap.box.fullSize;
}), true);
@@ -7063,44 +7289,38 @@
chartArea: filterByPosition(layoutBoxes, 'chartArea'),
vertical: left.concat(right).concat(centerVertical),
horizontal: top.concat(bottom).concat(centerHorizontal)
};
}
-
function getCombinedMax(maxPadding, chartArea, a, b) {
return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
}
-
function updateMaxPadding(maxPadding, boxPadding) {
maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
}
-
- function updateDims(chartArea, params, layout) {
- var box = layout.box;
+ function updateDims(chartArea, params, layout, stacks) {
+ var pos = layout.pos,
+ box = layout.box;
var maxPadding = chartArea.maxPadding;
-
- if (isObject(layout.pos)) {
- return {
- same: false,
- other: false
+ if (!isObject(pos)) {
+ if (layout.size) {
+ chartArea[pos] -= layout.size;
+ }
+ var stack = stacks[layout.stack] || {
+ size: 0,
+ count: 1
};
+ stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);
+ layout.size = stack.size / stack.count;
+ chartArea[pos] += layout.size;
}
-
- if (layout.size) {
- chartArea[layout.pos] -= layout.size;
- }
-
- layout.size = layout.horizontal ? box.height : box.width;
- chartArea[layout.pos] += layout.size;
-
if (box.getPadding) {
updateMaxPadding(maxPadding, box.getPadding());
}
-
var newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));
var newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));
var widthChanged = newWidth !== chartArea.w;
var heightChanged = newHeight !== chartArea.h;
chartArea.w = newWidth;
@@ -7111,29 +7331,24 @@
} : {
same: heightChanged,
other: widthChanged
};
}
-
function handleMaxPadding(chartArea) {
var maxPadding = chartArea.maxPadding;
-
function updatePos(pos) {
var change = Math.max(maxPadding[pos] - chartArea[pos], 0);
chartArea[pos] += change;
return change;
}
-
chartArea.y += updatePos('top');
chartArea.x += updatePos('left');
updatePos('right');
updatePos('bottom');
}
-
function getMargins(horizontal, chartArea) {
var maxPadding = chartArea.maxPadding;
-
function marginForPositions(positions) {
var margin = {
left: 0,
top: 0,
right: 0,
@@ -7142,101 +7357,112 @@
positions.forEach(function (pos) {
margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
});
return margin;
}
-
return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);
}
-
- function fitBoxes(boxes, chartArea, params) {
+ function fitBoxes(boxes, chartArea, params, stacks) {
var refitBoxes = [];
var i, ilen, layout, box, refit, changed;
-
for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {
layout = boxes[i];
box = layout.box;
box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));
-
- var _updateDims = updateDims(chartArea, params, layout),
- same = _updateDims.same,
- other = _updateDims.other;
-
+ var _updateDims = updateDims(chartArea, params, layout, stacks),
+ same = _updateDims.same,
+ other = _updateDims.other;
refit |= same && refitBoxes.length;
changed = changed || other;
-
if (!box.fullSize) {
refitBoxes.push(layout);
}
}
-
- return refit && fitBoxes(refitBoxes, chartArea, params) || changed;
+ return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
}
-
- function placeBoxes(boxes, chartArea, params) {
+ function setBoxDims(box, left, top, width, height) {
+ box.top = top;
+ box.left = left;
+ box.right = left + width;
+ box.bottom = top + height;
+ box.width = width;
+ box.height = height;
+ }
+ function placeBoxes(boxes, chartArea, params, stacks) {
var userPadding = params.padding;
- var x = chartArea.x;
- var y = chartArea.y;
- var i, ilen, layout, box;
-
- for (i = 0, ilen = boxes.length; i < ilen; ++i) {
- layout = boxes[i];
- box = layout.box;
-
- if (layout.horizontal) {
- box.left = box.fullSize ? userPadding.left : chartArea.left;
- box.right = box.fullSize ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;
- box.top = y;
- box.bottom = y + box.height;
- box.width = box.right - box.left;
- y = box.bottom;
- } else {
- box.left = x;
- box.right = x + box.width;
- box.top = box.fullSize ? userPadding.top : chartArea.top;
- box.bottom = box.fullSize ? params.outerHeight - userPadding.right : chartArea.top + chartArea.h;
- box.height = box.bottom - box.top;
- x = box.right;
+ var x = chartArea.x,
+ y = chartArea.y;
+ var _iterator6 = _createForOfIteratorHelper$1(boxes),
+ _step6;
+ try {
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
+ var layout = _step6.value;
+ var box = layout.box;
+ var stack = stacks[layout.stack] || {
+ count: 1,
+ placed: 0,
+ weight: 1
+ };
+ var weight = layout.stackWeight / stack.weight || 1;
+ if (layout.horizontal) {
+ var width = chartArea.w * weight;
+ var height = stack.size || box.height;
+ if (defined(stack.start)) {
+ y = stack.start;
+ }
+ if (box.fullSize) {
+ setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
+ } else {
+ setBoxDims(box, chartArea.left + stack.placed, y, width, height);
+ }
+ stack.start = y;
+ stack.placed += width;
+ y = box.bottom;
+ } else {
+ var height1 = chartArea.h * weight;
+ var width1 = stack.size || box.width;
+ if (defined(stack.start)) {
+ x = stack.start;
+ }
+ if (box.fullSize) {
+ setBoxDims(box, x, userPadding.top, width1, params.outerHeight - userPadding.bottom - userPadding.top);
+ } else {
+ setBoxDims(box, x, chartArea.top + stack.placed, width1, height1);
+ }
+ stack.start = x;
+ stack.placed += height1;
+ x = box.right;
+ }
}
+ } catch (err) {
+ _iterator6.e(err);
+ } finally {
+ _iterator6.f();
}
-
chartArea.x = x;
chartArea.y = y;
}
-
- defaults.set('layout', {
- padding: {
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- });
var layouts = {
addBox: function addBox(chart, item) {
if (!chart.boxes) {
chart.boxes = [];
}
-
item.fullSize = item.fullSize || false;
item.position = item.position || 'top';
item.weight = item.weight || 0;
-
item._layers = item._layers || function () {
return [{
z: 0,
draw: function draw(chartArea) {
item.draw(chartArea);
}
}];
};
-
chart.boxes.push(item);
},
removeBox: function removeBox(chart, layoutItem) {
var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
-
if (index !== -1) {
chart.boxes.splice(index, 1);
}
},
configure: function configure(chart, item, options) {
@@ -7246,14 +7472,13 @@
},
update: function update(chart, width, height, minPadding) {
if (!chart) {
return;
}
-
var padding = toPadding(chart.options.layout.padding);
- var availableWidth = width - padding.width;
- var availableHeight = height - padding.height;
+ var availableWidth = Math.max(width - padding.width, 0);
+ var availableHeight = Math.max(height - padding.height, 0);
var boxes = buildLayoutBoxes(chart.boxes);
var verticalBoxes = boxes.vertical;
var horizontalBoxes = boxes.horizontal;
each(chart.boxes, function (box) {
if (typeof box.beforeLayout === 'function') {
@@ -7279,23 +7504,21 @@
w: availableWidth,
h: availableHeight,
x: padding.left,
y: padding.top
}, padding);
- setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
- fitBoxes(boxes.fullSize, chartArea, params);
- fitBoxes(verticalBoxes, chartArea, params);
-
- if (fitBoxes(horizontalBoxes, chartArea, params)) {
- fitBoxes(verticalBoxes, chartArea, params);
+ var stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
+ fitBoxes(boxes.fullSize, chartArea, params, stacks);
+ fitBoxes(verticalBoxes, chartArea, params, stacks);
+ if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
+ fitBoxes(verticalBoxes, chartArea, params, stacks);
}
-
handleMaxPadding(chartArea);
- placeBoxes(boxes.leftAndTop, chartArea, params);
+ placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
chartArea.x += chartArea.w;
chartArea.y += chartArea.h;
- placeBoxes(boxes.rightAndBottom, chartArea, params);
+ placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
chart.chartArea = {
left: chartArea.left,
top: chartArea.top,
right: chartArea.left + chartArea.w,
bottom: chartArea.top + chartArea.h,
@@ -7303,21 +7526,24 @@
width: chartArea.w
};
each(boxes.chartArea, function (layout) {
var box = layout.box;
Object.assign(box, chart.chartArea);
- box.update(chartArea.w, chartArea.h);
+ box.update(chartArea.w, chartArea.h, {
+ left: 0,
+ top: 0,
+ right: 0,
+ bottom: 0
+ });
});
}
};
-
var BasePlatform = /*#__PURE__*/function () {
function BasePlatform() {
- _classCallCheck(this, BasePlatform);
+ _classCallCheck$x(this, BasePlatform);
}
-
- _createClass(BasePlatform, [{
+ _createClass$x(BasePlatform, [{
key: "acquireContext",
value: function acquireContext(canvas, aspectRatio) {}
}, {
key: "releaseContext",
value: function releaseContext(context) {
@@ -7347,36 +7573,36 @@
}, {
key: "isAttached",
value: function isAttached(canvas) {
return true;
}
+ }, {
+ key: "updateConfig",
+ value: function updateConfig(config) {}
}]);
-
return BasePlatform;
}();
-
var BasicPlatform = /*#__PURE__*/function (_BasePlatform) {
- _inherits(BasicPlatform, _BasePlatform);
-
- var _super9 = _createSuper(BasicPlatform);
-
+ _inherits$w(BasicPlatform, _BasePlatform);
+ var _super9 = _createSuper$w(BasicPlatform);
function BasicPlatform() {
- _classCallCheck(this, BasicPlatform);
-
+ _classCallCheck$x(this, BasicPlatform);
return _super9.apply(this, arguments);
}
-
- _createClass(BasicPlatform, [{
+ _createClass$x(BasicPlatform, [{
key: "acquireContext",
value: function acquireContext(item) {
return item && item.getContext && item.getContext('2d') || null;
}
+ }, {
+ key: "updateConfig",
+ value: function updateConfig(config) {
+ config.options.animation = false;
+ }
}]);
-
return BasicPlatform;
}(BasePlatform);
-
var EXPANDO_KEY = '$chartjs';
var EVENT_TYPES = {
touchstart: 'mousedown',
touchmove: 'mousemove',
touchend: 'mouseup',
@@ -7385,15 +7611,13 @@
pointermove: 'mousemove',
pointerup: 'mouseup',
pointerleave: 'mouseout',
pointerout: 'mouseout'
};
-
var isNullOrEmpty = function isNullOrEmpty(value) {
return value === null || value === '';
};
-
function initCanvas(canvas, aspectRatio) {
var style = canvas.style;
var renderHeight = canvas.getAttribute('height');
var renderWidth = canvas.getAttribute('width');
canvas[EXPANDO_KEY] = {
@@ -7407,240 +7631,217 @@
}
}
};
style.display = style.display || 'block';
style.boxSizing = style.boxSizing || 'border-box';
-
if (isNullOrEmpty(renderWidth)) {
var displayWidth = readUsedSize(canvas, 'width');
-
if (displayWidth !== undefined) {
canvas.width = displayWidth;
}
}
-
if (isNullOrEmpty(renderHeight)) {
if (canvas.style.height === '') {
canvas.height = canvas.width / (aspectRatio || 2);
} else {
var displayHeight = readUsedSize(canvas, 'height');
-
if (displayHeight !== undefined) {
canvas.height = displayHeight;
}
}
}
-
return canvas;
}
-
var eventListenerOptions = supportsEventListenerOptions ? {
passive: true
} : false;
-
function addListener(node, type, listener) {
node.addEventListener(type, listener, eventListenerOptions);
}
-
function removeListener(chart, type, listener) {
chart.canvas.removeEventListener(type, listener, eventListenerOptions);
}
-
function fromNativeEvent(event, chart) {
var type = EVENT_TYPES[event.type] || event.type;
-
- var _getRelativePosition$ = getRelativePosition$1(event, chart),
- x = _getRelativePosition$.x,
- y = _getRelativePosition$.y;
-
+ var _getRelativePosition = getRelativePosition(event, chart),
+ x = _getRelativePosition.x,
+ y = _getRelativePosition.y;
return {
type: type,
chart: chart,
- native: event,
+ "native": event,
x: x !== undefined ? x : null,
y: y !== undefined ? y : null
};
}
-
+ function nodeListContains(nodeList, canvas) {
+ var _iterator7 = _createForOfIteratorHelper$1(nodeList),
+ _step7;
+ try {
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
+ var node = _step7.value;
+ if (node === canvas || node.contains(canvas)) {
+ return true;
+ }
+ }
+ } catch (err) {
+ _iterator7.e(err);
+ } finally {
+ _iterator7.f();
+ }
+ }
function createAttachObserver(chart, type, listener) {
var canvas = chart.canvas;
-
- var container = canvas && _getParentNode(canvas);
-
- var element = container || canvas;
var observer = new MutationObserver(function (entries) {
- var parent = _getParentNode(element);
-
- entries.forEach(function (entry) {
- for (var i = 0; i < entry.addedNodes.length; i++) {
- var added = entry.addedNodes[i];
-
- if (added === element || added === parent) {
- listener(entry.target);
- }
+ var trigger = false;
+ var _iterator8 = _createForOfIteratorHelper$1(entries),
+ _step8;
+ try {
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
+ var entry = _step8.value;
+ trigger = trigger || nodeListContains(entry.addedNodes, canvas);
+ trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
}
- });
+ } catch (err) {
+ _iterator8.e(err);
+ } finally {
+ _iterator8.f();
+ }
+ if (trigger) {
+ listener();
+ }
});
observer.observe(document, {
childList: true,
subtree: true
});
return observer;
}
-
function createDetachObserver(chart, type, listener) {
var canvas = chart.canvas;
-
- var container = canvas && _getParentNode(canvas);
-
- if (!container) {
- return;
- }
-
var observer = new MutationObserver(function (entries) {
- entries.forEach(function (entry) {
- for (var i = 0; i < entry.removedNodes.length; i++) {
- if (entry.removedNodes[i] === canvas) {
- listener();
- break;
- }
+ var trigger = false;
+ var _iterator9 = _createForOfIteratorHelper$1(entries),
+ _step9;
+ try {
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
+ var entry = _step9.value;
+ trigger = trigger || nodeListContains(entry.removedNodes, canvas);
+ trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
}
- });
+ } catch (err) {
+ _iterator9.e(err);
+ } finally {
+ _iterator9.f();
+ }
+ if (trigger) {
+ listener();
+ }
});
- observer.observe(container, {
- childList: true
+ observer.observe(document, {
+ childList: true,
+ subtree: true
});
return observer;
}
-
var drpListeningCharts = new Map();
var oldDevicePixelRatio = 0;
-
function onWindowResize() {
var dpr = window.devicePixelRatio;
-
if (dpr === oldDevicePixelRatio) {
return;
}
-
oldDevicePixelRatio = dpr;
drpListeningCharts.forEach(function (resize, chart) {
if (chart.currentDevicePixelRatio !== dpr) {
resize();
}
});
}
-
function listenDevicePixelRatioChanges(chart, resize) {
if (!drpListeningCharts.size) {
window.addEventListener('resize', onWindowResize);
}
-
drpListeningCharts.set(chart, resize);
}
-
function unlistenDevicePixelRatioChanges(chart) {
- drpListeningCharts.delete(chart);
-
+ drpListeningCharts["delete"](chart);
if (!drpListeningCharts.size) {
window.removeEventListener('resize', onWindowResize);
}
}
-
function createResizeObserver(chart, type, listener) {
var canvas = chart.canvas;
-
var container = canvas && _getParentNode(canvas);
-
if (!container) {
return;
}
-
var resize = throttled(function (width, height) {
var w = container.clientWidth;
listener(width, height);
-
if (w < container.clientWidth) {
listener();
}
}, window);
var observer = new ResizeObserver(function (entries) {
var entry = entries[0];
var width = entry.contentRect.width;
var height = entry.contentRect.height;
-
if (width === 0 && height === 0) {
return;
}
-
resize(width, height);
});
observer.observe(container);
listenDevicePixelRatioChanges(chart, resize);
return observer;
}
-
function releaseObserver(chart, type, observer) {
if (observer) {
observer.disconnect();
}
-
if (type === 'resize') {
unlistenDevicePixelRatioChanges(chart);
}
}
-
function createProxyAndListen(chart, type, listener) {
var canvas = chart.canvas;
var proxy = throttled(function (event) {
if (chart.ctx !== null) {
listener(fromNativeEvent(event, chart));
}
- }, chart, function (args) {
- var event = args[0];
- return [event, event.offsetX, event.offsetY];
- });
+ }, chart);
addListener(canvas, type, proxy);
return proxy;
}
-
var DomPlatform = /*#__PURE__*/function (_BasePlatform2) {
- _inherits(DomPlatform, _BasePlatform2);
-
- var _super10 = _createSuper(DomPlatform);
-
+ _inherits$w(DomPlatform, _BasePlatform2);
+ var _super10 = _createSuper$w(DomPlatform);
function DomPlatform() {
- _classCallCheck(this, DomPlatform);
-
+ _classCallCheck$x(this, DomPlatform);
return _super10.apply(this, arguments);
}
-
- _createClass(DomPlatform, [{
+ _createClass$x(DomPlatform, [{
key: "acquireContext",
value: function acquireContext(canvas, aspectRatio) {
var context = canvas && canvas.getContext && canvas.getContext('2d');
-
if (context && context.canvas === canvas) {
initCanvas(canvas, aspectRatio);
return context;
}
-
return null;
}
}, {
key: "releaseContext",
value: function releaseContext(context) {
var canvas = context.canvas;
-
if (!canvas[EXPANDO_KEY]) {
return false;
}
-
var initial = canvas[EXPANDO_KEY].initial;
['height', 'width'].forEach(function (prop) {
var value = initial[prop];
-
if (isNullOrUndef(value)) {
canvas.removeAttribute(prop);
} else {
canvas.setAttribute(prop, value);
}
@@ -7669,15 +7870,13 @@
}, {
key: "removeEventListener",
value: function removeEventListener(chart, type) {
var proxies = chart.$proxies || (chart.$proxies = {});
var proxy = proxies[type];
-
if (!proxy) {
return;
}
-
var handlers = {
attach: releaseObserver,
detach: releaseObserver,
resize: releaseObserver
};
@@ -7697,36 +7896,32 @@
}
}, {
key: "isAttached",
value: function isAttached(canvas) {
var container = _getParentNode(canvas);
-
- return !!(container && _getParentNode(container));
+ return !!(container && container.isConnected);
}
}]);
-
return DomPlatform;
}(BasePlatform);
-
+ function _detectPlatform(canvas) {
+ if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {
+ return BasicPlatform;
+ }
+ return DomPlatform;
+ }
var Element = /*#__PURE__*/function () {
function Element() {
- _classCallCheck(this, Element);
-
- this.x = undefined;
- this.y = undefined;
- this.active = false;
- this.options = undefined;
- this.$animations = undefined;
+ _classCallCheck$x(this, Element);
+ _defineProperty$w(this, "active", false);
}
-
- _createClass(Element, [{
+ _createClass$x(Element, [{
key: "tooltipPosition",
value: function tooltipPosition(useFinalPosition) {
var _this$getProps = this.getProps(['x', 'y'], useFinalPosition),
- x = _this$getProps.x,
- y = _this$getProps.y;
-
+ x = _this$getProps.x,
+ y = _this$getProps.y;
return {
x: x,
y: y
};
}
@@ -7735,515 +7930,342 @@
value: function hasValue() {
return isNumber(this.x) && isNumber(this.y);
}
}, {
key: "getProps",
- value: function getProps(props, final) {
- var me = this;
+ value: function getProps(props, _final) {
+ var _this8 = this;
var anims = this.$animations;
-
- if (!final || !anims) {
- return me;
+ if (!_final || !anims) {
+ // let's not create an object, if not needed
+ return this;
}
-
var ret = {};
props.forEach(function (prop) {
- ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : me[prop];
+ ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : _this8[prop];
});
return ret;
}
}]);
-
return Element;
}();
-
- Element.defaults = {};
- Element.defaultRoutes = undefined;
- var formatters$2 = {
- values: function values(value) {
- return isArray(value) ? value : '' + value;
- },
- numeric: function numeric(tickValue, index, ticks) {
- if (tickValue === 0) {
- return '0';
- }
-
- var locale = this.chart.options.locale;
- var notation;
- var delta = tickValue;
-
- if (ticks.length > 1) {
- var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
-
- if (maxTick < 1e-4 || maxTick > 1e+15) {
- notation = 'scientific';
- }
-
- delta = calculateDelta(tickValue, ticks);
- }
-
- var logDelta = log10(Math.abs(delta));
- var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
- var options = {
- notation: notation,
- minimumFractionDigits: numDecimal,
- maximumFractionDigits: numDecimal
- };
- Object.assign(options, this.options.ticks.format);
- return formatNumber(tickValue, locale, options);
- },
- logarithmic: function logarithmic(tickValue, index, ticks) {
- if (tickValue === 0) {
- return '0';
- }
-
- var remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));
-
- if (remain === 1 || remain === 2 || remain === 5) {
- return formatters$2.numeric.call(this, tickValue, index, ticks);
- }
-
- return '';
- }
- };
-
- function calculateDelta(tickValue, ticks) {
- var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
-
- if (Math.abs(delta) > 1 && tickValue !== Math.floor(tickValue)) {
- delta = tickValue - Math.floor(tickValue);
- }
-
- return delta;
- }
-
- var Ticks = {
- formatters: formatters$2
- };
- defaults.set('scale', {
- display: true,
- offset: false,
- reverse: false,
- beginAtZero: false,
- bounds: 'ticks',
- grace: 0,
- grid: {
- display: true,
- lineWidth: 1,
- drawBorder: true,
- drawOnChartArea: true,
- drawTicks: true,
- tickLength: 8,
- tickWidth: function tickWidth(_ctx, options) {
- return options.lineWidth;
- },
- tickColor: function tickColor(_ctx, options) {
- return options.color;
- },
- offset: false,
- borderDash: [],
- borderDashOffset: 0.0,
- borderColor: function borderColor(_ctx, options) {
- return options.color;
- },
- borderWidth: function borderWidth(_ctx, options) {
- return options.lineWidth;
- }
- },
- title: {
- display: false,
- text: '',
- padding: {
- top: 4,
- bottom: 4
- }
- },
- ticks: {
- minRotation: 0,
- maxRotation: 50,
- mirror: false,
- textStrokeWidth: 0,
- textStrokeColor: '',
- padding: 3,
- display: true,
- autoSkip: true,
- autoSkipPadding: 3,
- labelOffset: 0,
- callback: Ticks.formatters.values,
- minor: {},
- major: {},
- align: 'center',
- crossAlign: 'near'
- }
- });
- defaults.route('scale.ticks', 'color', '', 'color');
- defaults.route('scale.grid', 'color', '', 'borderColor');
- defaults.route('scale.title', 'color', '', 'color');
- defaults.describe('scale', {
- _fallback: false,
- _scriptable: function _scriptable(name) {
- return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';
- },
- _indexable: function _indexable(name) {
- return name !== 'borderDash' && name !== 'tickBorderDash';
- }
- });
- defaults.describe('scales', {
- _fallback: 'scale'
- });
-
+ _defineProperty$w(Element, "defaults", {});
+ _defineProperty$w(Element, "defaultRoutes", undefined);
function autoSkip(scale, ticks) {
var tickOpts = scale.options.ticks;
- var ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);
+ var determinedMaxTicks = determineMaxTicks(scale);
+ var ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);
var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
var numMajorIndices = majorIndices.length;
var first = majorIndices[0];
var last = majorIndices[numMajorIndices - 1];
var newTicks = [];
-
if (numMajorIndices > ticksLimit) {
skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
return newTicks;
}
-
var spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
-
if (numMajorIndices > 0) {
var i, ilen;
var avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
-
for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {
skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
}
-
skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
return newTicks;
}
-
skip(ticks, newTicks, spacing);
return newTicks;
}
-
function determineMaxTicks(scale) {
var offset = scale.options.offset;
-
var tickLength = scale._tickSize();
-
var maxScale = scale._length / tickLength + (offset ? 0 : 1);
var maxChart = scale._maxLength / tickLength;
return Math.floor(Math.min(maxScale, maxChart));
}
-
function calculateSpacing(majorIndices, ticks, ticksLimit) {
var evenMajorSpacing = getEvenSpacing(majorIndices);
var spacing = ticks.length / ticksLimit;
-
if (!evenMajorSpacing) {
return Math.max(spacing, 1);
}
-
var factors = _factorize(evenMajorSpacing);
-
for (var i = 0, ilen = factors.length - 1; i < ilen; i++) {
var factor = factors[i];
-
if (factor > spacing) {
return factor;
}
}
-
return Math.max(spacing, 1);
}
-
function getMajorIndices(ticks) {
var result = [];
var i, ilen;
-
for (i = 0, ilen = ticks.length; i < ilen; i++) {
if (ticks[i].major) {
result.push(i);
}
}
-
return result;
}
-
function skipMajors(ticks, newTicks, majorIndices, spacing) {
var count = 0;
var next = majorIndices[0];
var i;
spacing = Math.ceil(spacing);
-
for (i = 0; i < ticks.length; i++) {
if (i === next) {
newTicks.push(ticks[i]);
count++;
next = majorIndices[count * spacing];
}
}
}
-
function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
var start = valueOrDefault(majorStart, 0);
var end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);
var count = 0;
var length, i, next;
spacing = Math.ceil(spacing);
-
if (majorEnd) {
length = majorEnd - majorStart;
spacing = length / Math.floor(length / spacing);
}
-
next = start;
-
while (next < 0) {
count++;
next = Math.round(start + count * spacing);
}
-
for (i = Math.max(start, 0); i < end; i++) {
if (i === next) {
newTicks.push(ticks[i]);
count++;
next = Math.round(start + count * spacing);
}
}
}
-
function getEvenSpacing(arr) {
var len = arr.length;
var i, diff;
-
if (len < 2) {
return false;
}
-
for (diff = arr[0], i = 1; i < len; ++i) {
if (arr[i] - arr[i - 1] !== diff) {
return false;
}
}
-
return diff;
}
-
var reverseAlign = function reverseAlign(align) {
return align === 'left' ? 'right' : align === 'right' ? 'left' : align;
};
-
var offsetFromEdge = function offsetFromEdge(scale, edge, offset) {
return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;
};
-
function sample(arr, numItems) {
var result = [];
var increment = arr.length / numItems;
var len = arr.length;
var i = 0;
-
for (; i < len; i += increment) {
result.push(arr[Math.floor(i)]);
}
-
return result;
}
-
function getPixelForGridLine(scale, index, offsetGridLines) {
var length = scale.ticks.length;
var validIndex = Math.min(index, length - 1);
var start = scale._startPixel;
var end = scale._endPixel;
var epsilon = 1e-6;
var lineValue = scale.getPixelForTick(validIndex);
var offset;
-
if (offsetGridLines) {
if (length === 1) {
offset = Math.max(lineValue - start, end - lineValue);
} else if (index === 0) {
offset = (scale.getPixelForTick(1) - lineValue) / 2;
} else {
offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;
}
-
lineValue += validIndex < index ? offset : -offset;
-
if (lineValue < start - epsilon || lineValue > end + epsilon) {
return;
}
}
-
return lineValue;
}
-
function garbageCollect(caches, length) {
each(caches, function (cache) {
var gc = cache.gc;
var gcLen = gc.length / 2;
var i;
-
if (gcLen > length) {
for (i = 0; i < gcLen; ++i) {
delete cache.data[gc[i]];
}
-
gc.splice(0, gcLen);
}
});
}
-
function getTickMarkLength(options) {
return options.drawTicks ? options.tickLength : 0;
}
-
function getTitleHeight(options, fallback) {
if (!options.display) {
return 0;
}
-
var font = toFont(options.font, fallback);
var padding = toPadding(options.padding);
var lines = isArray(options.text) ? options.text.length : 1;
return lines * font.lineHeight + padding.height;
}
-
function createScaleContext(parent, scale) {
- return Object.assign(Object.create(parent), {
+ return createContext(parent, {
scale: scale,
type: 'scale'
});
}
-
function createTickContext(parent, index, tick) {
- return Object.assign(Object.create(parent), {
+ return createContext(parent, {
tick: tick,
index: index,
type: 'tick'
});
}
-
function titleAlign(align, position, reverse) {
var ret = _toLeftRightCenter(align);
-
if (reverse && position !== 'right' || !reverse && position === 'right') {
ret = reverseAlign(ret);
}
-
return ret;
}
-
function titleArgs(scale, offset, position, align) {
var top = scale.top,
- left = scale.left,
- bottom = scale.bottom,
- right = scale.right;
+ left = scale.left,
+ bottom = scale.bottom,
+ right = scale.right,
+ chart = scale.chart;
+ var chartArea = chart.chartArea,
+ scales = chart.scales;
var rotation = 0;
var maxWidth, titleX, titleY;
-
+ var height = bottom - top;
+ var width = right - left;
if (scale.isHorizontal()) {
titleX = _alignStartEnd(align, left, right);
- titleY = offsetFromEdge(scale, position, offset);
+ if (isObject(position)) {
+ var positionAxisID = Object.keys(position)[0];
+ var value = position[positionAxisID];
+ titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
+ } else if (position === 'center') {
+ titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
+ } else {
+ titleY = offsetFromEdge(scale, position, offset);
+ }
maxWidth = right - left;
} else {
- titleX = offsetFromEdge(scale, position, offset);
+ if (isObject(position)) {
+ var positionAxisID1 = Object.keys(position)[0];
+ var value1 = position[positionAxisID1];
+ titleX = scales[positionAxisID1].getPixelForValue(value1) - width + offset;
+ } else if (position === 'center') {
+ titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
+ } else {
+ titleX = offsetFromEdge(scale, position, offset);
+ }
titleY = _alignStartEnd(align, bottom, top);
rotation = position === 'left' ? -HALF_PI : HALF_PI;
}
-
return {
titleX: titleX,
titleY: titleY,
maxWidth: maxWidth,
rotation: rotation
};
}
-
var Scale = /*#__PURE__*/function (_Element) {
- _inherits(Scale, _Element);
-
- var _super11 = _createSuper(Scale);
-
+ _inherits$w(Scale, _Element);
+ var _super11 = _createSuper$w(Scale);
function Scale(cfg) {
- var _this4;
-
- _classCallCheck(this, Scale);
-
- _this4 = _super11.call(this);
- _this4.id = cfg.id;
- _this4.type = cfg.type;
- _this4.options = undefined;
- _this4.ctx = cfg.ctx;
- _this4.chart = cfg.chart;
- _this4.top = undefined;
- _this4.bottom = undefined;
- _this4.left = undefined;
- _this4.right = undefined;
- _this4.width = undefined;
- _this4.height = undefined;
- _this4._margins = {
+ var _this9;
+ _classCallCheck$x(this, Scale);
+ _this9 = _super11.call(this);
+ _this9.id = cfg.id;
+ _this9.type = cfg.type;
+ _this9.options = undefined;
+ _this9.ctx = cfg.ctx;
+ _this9.chart = cfg.chart;
+ _this9.top = undefined;
+ _this9.bottom = undefined;
+ _this9.left = undefined;
+ _this9.right = undefined;
+ _this9.width = undefined;
+ _this9.height = undefined;
+ _this9._margins = {
left: 0,
right: 0,
top: 0,
bottom: 0
};
- _this4.maxWidth = undefined;
- _this4.maxHeight = undefined;
- _this4.paddingTop = undefined;
- _this4.paddingBottom = undefined;
- _this4.paddingLeft = undefined;
- _this4.paddingRight = undefined;
- _this4.axis = undefined;
- _this4.labelRotation = undefined;
- _this4.min = undefined;
- _this4.max = undefined;
- _this4.ticks = [];
- _this4._gridLineItems = null;
- _this4._labelItems = null;
- _this4._labelSizes = null;
- _this4._length = 0;
- _this4._maxLength = 0;
- _this4._longestTextCache = {};
- _this4._startPixel = undefined;
- _this4._endPixel = undefined;
- _this4._reversePixels = false;
- _this4._userMax = undefined;
- _this4._userMin = undefined;
- _this4._suggestedMax = undefined;
- _this4._suggestedMin = undefined;
- _this4._ticksLength = 0;
- _this4._borderValue = 0;
- _this4._cache = {};
- _this4._dataLimitsCached = false;
- _this4.$context = undefined;
- return _this4;
+ _this9.maxWidth = undefined;
+ _this9.maxHeight = undefined;
+ _this9.paddingTop = undefined;
+ _this9.paddingBottom = undefined;
+ _this9.paddingLeft = undefined;
+ _this9.paddingRight = undefined;
+ _this9.axis = undefined;
+ _this9.labelRotation = undefined;
+ _this9.min = undefined;
+ _this9.max = undefined;
+ _this9._range = undefined;
+ _this9.ticks = [];
+ _this9._gridLineItems = null;
+ _this9._labelItems = null;
+ _this9._labelSizes = null;
+ _this9._length = 0;
+ _this9._maxLength = 0;
+ _this9._longestTextCache = {};
+ _this9._startPixel = undefined;
+ _this9._endPixel = undefined;
+ _this9._reversePixels = false;
+ _this9._userMax = undefined;
+ _this9._userMin = undefined;
+ _this9._suggestedMax = undefined;
+ _this9._suggestedMin = undefined;
+ _this9._ticksLength = 0;
+ _this9._borderValue = 0;
+ _this9._cache = {};
+ _this9._dataLimitsCached = false;
+ _this9.$context = undefined;
+ return _this9;
}
-
- _createClass(Scale, [{
+ _createClass$x(Scale, [{
key: "init",
value: function init(options) {
- var me = this;
- me.options = options;
- me.axis = options.axis;
- me._userMin = me.parse(options.min);
- me._userMax = me.parse(options.max);
- me._suggestedMin = me.parse(options.suggestedMin);
- me._suggestedMax = me.parse(options.suggestedMax);
+ this.options = options.setContext(this.getContext());
+ this.axis = options.axis;
+ this._userMin = this.parse(options.min);
+ this._userMax = this.parse(options.max);
+ this._suggestedMin = this.parse(options.suggestedMin);
+ this._suggestedMax = this.parse(options.suggestedMax);
}
}, {
key: "parse",
value: function parse(raw, index) {
return raw;
}
}, {
key: "getUserBounds",
value: function getUserBounds() {
var _userMin = this._userMin,
- _userMax = this._userMax,
- _suggestedMin = this._suggestedMin,
- _suggestedMax = this._suggestedMax;
+ _userMax = this._userMax,
+ _suggestedMin = this._suggestedMin,
+ _suggestedMax = this._suggestedMax;
_userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);
_userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);
_suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);
_suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);
return {
@@ -8254,55 +8276,47 @@
};
}
}, {
key: "getMinMax",
value: function getMinMax(canStack) {
- var me = this;
-
- var _me$getUserBounds = me.getUserBounds(),
- min = _me$getUserBounds.min,
- max = _me$getUserBounds.max,
- minDefined = _me$getUserBounds.minDefined,
- maxDefined = _me$getUserBounds.maxDefined;
-
+ var _this$getUserBounds = this.getUserBounds(),
+ min = _this$getUserBounds.min,
+ max = _this$getUserBounds.max,
+ minDefined = _this$getUserBounds.minDefined,
+ maxDefined = _this$getUserBounds.maxDefined;
var range;
-
if (minDefined && maxDefined) {
return {
min: min,
max: max
};
}
-
- var metas = me.getMatchingVisibleMetas();
-
+ var metas = this.getMatchingVisibleMetas();
for (var i = 0, ilen = metas.length; i < ilen; ++i) {
- range = metas[i].controller.getMinMax(me, canStack);
-
+ range = metas[i].controller.getMinMax(this, canStack);
if (!minDefined) {
min = Math.min(min, range.min);
}
-
if (!maxDefined) {
max = Math.max(max, range.max);
}
}
-
+ min = maxDefined && min > max ? max : min;
+ max = minDefined && min > max ? min : max;
return {
min: finiteOrDefault(min, finiteOrDefault(max, min)),
max: finiteOrDefault(max, finiteOrDefault(min, max))
};
}
}, {
key: "getPadding",
value: function getPadding() {
- var me = this;
return {
- left: me.paddingLeft || 0,
- top: me.paddingTop || 0,
- right: me.paddingRight || 0,
- bottom: me.paddingBottom || 0
+ left: this.paddingLeft || 0,
+ top: this.paddingTop || 0,
+ right: this.paddingRight || 0,
+ bottom: this.paddingBottom || 0
};
}
}, {
key: "getTicks",
value: function getTicks() {
@@ -8313,10 +8327,17 @@
value: function getLabels() {
var data = this.chart.data;
return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
}
}, {
+ key: "getLabelItems",
+ value: function getLabelItems() {
+ var chartArea = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.chart.chartArea;
+ var items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
+ return items;
+ }
+ }, {
key: "beforeLayout",
value: function beforeLayout() {
this._cache = {};
this._dataLimitsCached = false;
}
@@ -8326,85 +8347,79 @@
callback(this.options.beforeUpdate, [this]);
}
}, {
key: "update",
value: function update(maxWidth, maxHeight, margins) {
- var me = this;
- var tickOpts = me.options.ticks;
+ var _this$options4 = this.options,
+ beginAtZero = _this$options4.beginAtZero,
+ grace = _this$options4.grace,
+ tickOpts = _this$options4.ticks;
var sampleSize = tickOpts.sampleSize;
- me.beforeUpdate();
- me.maxWidth = maxWidth;
- me.maxHeight = maxHeight;
- me._margins = margins = Object.assign({
+ this.beforeUpdate();
+ this.maxWidth = maxWidth;
+ this.maxHeight = maxHeight;
+ this._margins = margins = Object.assign({
left: 0,
right: 0,
top: 0,
bottom: 0
}, margins);
- me.ticks = null;
- me._labelSizes = null;
- me._gridLineItems = null;
- me._labelItems = null;
- me.beforeSetDimensions();
- me.setDimensions();
- me.afterSetDimensions();
- me._maxLength = me.isHorizontal() ? me.width + margins.left + margins.right : me.height + margins.top + margins.bottom;
-
- if (!me._dataLimitsCached) {
- me.beforeDataLimits();
- me.determineDataLimits();
- me.afterDataLimits();
- me._dataLimitsCached = true;
+ this.ticks = null;
+ this._labelSizes = null;
+ this._gridLineItems = null;
+ this._labelItems = null;
+ this.beforeSetDimensions();
+ this.setDimensions();
+ this.afterSetDimensions();
+ this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;
+ if (!this._dataLimitsCached) {
+ this.beforeDataLimits();
+ this.determineDataLimits();
+ this.afterDataLimits();
+ this._range = _addGrace(this, grace, beginAtZero);
+ this._dataLimitsCached = true;
}
-
- me.beforeBuildTicks();
- me.ticks = me.buildTicks() || [];
- me.afterBuildTicks();
- var samplingEnabled = sampleSize < me.ticks.length;
-
- me._convertTicksToLabels(samplingEnabled ? sample(me.ticks, sampleSize) : me.ticks);
-
- me.configure();
- me.beforeCalculateLabelRotation();
- me.calculateLabelRotation();
- me.afterCalculateLabelRotation();
-
+ this.beforeBuildTicks();
+ this.ticks = this.buildTicks() || [];
+ this.afterBuildTicks();
+ var samplingEnabled = sampleSize < this.ticks.length;
+ this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
+ this.configure();
+ this.beforeCalculateLabelRotation();
+ this.calculateLabelRotation();
+ this.afterCalculateLabelRotation();
if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {
- me.ticks = autoSkip(me, me.ticks);
- me._labelSizes = null;
+ this.ticks = autoSkip(this, this.ticks);
+ this._labelSizes = null;
+ this.afterAutoSkip();
}
-
if (samplingEnabled) {
- me._convertTicksToLabels(me.ticks);
+ this._convertTicksToLabels(this.ticks);
}
-
- me.beforeFit();
- me.fit();
- me.afterFit();
- me.afterUpdate();
+ this.beforeFit();
+ this.fit();
+ this.afterFit();
+ this.afterUpdate();
}
}, {
key: "configure",
value: function configure() {
- var me = this;
- var reversePixels = me.options.reverse;
+ var reversePixels = this.options.reverse;
var startPixel, endPixel;
-
- if (me.isHorizontal()) {
- startPixel = me.left;
- endPixel = me.right;
+ if (this.isHorizontal()) {
+ startPixel = this.left;
+ endPixel = this.right;
} else {
- startPixel = me.top;
- endPixel = me.bottom;
+ startPixel = this.top;
+ endPixel = this.bottom;
reversePixels = !reversePixels;
}
-
- me._startPixel = startPixel;
- me._endPixel = endPixel;
- me._reversePixels = reversePixels;
- me._length = endPixel - startPixel;
- me._alignToPixels = me.options.alignToPixels;
+ this._startPixel = startPixel;
+ this._endPixel = endPixel;
+ this._reversePixels = reversePixels;
+ this._length = endPixel - startPixel;
+ this._alignToPixels = this.options.alignToPixels;
}
}, {
key: "afterUpdate",
value: function afterUpdate() {
callback(this.options.afterUpdate, [this]);
@@ -8415,38 +8430,34 @@
callback(this.options.beforeSetDimensions, [this]);
}
}, {
key: "setDimensions",
value: function setDimensions() {
- var me = this;
-
- if (me.isHorizontal()) {
- me.width = me.maxWidth;
- me.left = 0;
- me.right = me.width;
+ if (this.isHorizontal()) {
+ this.width = this.maxWidth;
+ this.left = 0;
+ this.right = this.width;
} else {
- me.height = me.maxHeight;
- me.top = 0;
- me.bottom = me.height;
+ this.height = this.maxHeight;
+ this.top = 0;
+ this.bottom = this.height;
}
-
- me.paddingLeft = 0;
- me.paddingTop = 0;
- me.paddingRight = 0;
- me.paddingBottom = 0;
+ this.paddingLeft = 0;
+ this.paddingTop = 0;
+ this.paddingRight = 0;
+ this.paddingBottom = 0;
}
}, {
key: "afterSetDimensions",
value: function afterSetDimensions() {
callback(this.options.afterSetDimensions, [this]);
}
}, {
key: "_callHooks",
value: function _callHooks(name) {
- var me = this;
- me.chart.notifyPlugins(name, me.getContext());
- callback(me.options[name], [me]);
+ this.chart.notifyPlugins(name, this.getContext());
+ callback(this.options[name], [this]);
}
}, {
key: "beforeDataLimits",
value: function beforeDataLimits() {
this._callHooks('beforeDataLimits');
@@ -8480,17 +8491,15 @@
callback(this.options.beforeTickToLabelConversion, [this]);
}
}, {
key: "generateTickLabels",
value: function generateTickLabels(ticks) {
- var me = this;
- var tickOpts = me.options.ticks;
+ var tickOpts = this.options.ticks;
var i, ilen, tick;
-
for (i = 0, ilen = ticks.length; i < ilen; i++) {
tick = ticks[i];
- tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);
+ tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);
}
}
}, {
key: "afterTickToLabelConversion",
value: function afterTickToLabelConversion() {
@@ -8502,134 +8511,115 @@
callback(this.options.beforeCalculateLabelRotation, [this]);
}
}, {
key: "calculateLabelRotation",
value: function calculateLabelRotation() {
- var me = this;
- var options = me.options;
+ var options = this.options;
var tickOpts = options.ticks;
- var numTicks = me.ticks.length;
+ var numTicks = this.ticks.length;
var minRotation = tickOpts.minRotation || 0;
var maxRotation = tickOpts.maxRotation;
var labelRotation = minRotation;
var tickWidth, maxHeight, maxLabelDiagonal;
-
- if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {
- me.labelRotation = minRotation;
+ if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
+ this.labelRotation = minRotation;
return;
}
-
- var labelSizes = me._getLabelSizes();
-
+ var labelSizes = this._getLabelSizes();
var maxLabelWidth = labelSizes.widest.width;
var maxLabelHeight = labelSizes.highest.height;
-
- var maxWidth = _limitValue(me.chart.width - maxLabelWidth, 0, me.maxWidth);
-
- tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);
-
+ var maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);
+ tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
if (maxLabelWidth + 6 > tickWidth) {
tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
- maxHeight = me.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, me.chart.options.font);
+ maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);
maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
- labelRotation = toDegrees(Math.min(Math.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)), Math.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)));
+ labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));
labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
}
-
- me.labelRotation = labelRotation;
+ this.labelRotation = labelRotation;
}
}, {
key: "afterCalculateLabelRotation",
value: function afterCalculateLabelRotation() {
callback(this.options.afterCalculateLabelRotation, [this]);
}
}, {
+ key: "afterAutoSkip",
+ value: function afterAutoSkip() {}
+ }, {
key: "beforeFit",
value: function beforeFit() {
callback(this.options.beforeFit, [this]);
}
}, {
key: "fit",
value: function fit() {
- var me = this;
var minSize = {
width: 0,
height: 0
};
- var chart = me.chart,
- _me$options2 = me.options,
- tickOpts = _me$options2.ticks,
- titleOpts = _me$options2.title,
- gridOpts = _me$options2.grid;
-
- var display = me._isVisible();
-
- var isHorizontal = me.isHorizontal();
-
+ var chart = this.chart,
+ _this$options5 = this.options,
+ tickOpts = _this$options5.ticks,
+ titleOpts = _this$options5.title,
+ gridOpts = _this$options5.grid;
+ var display = this._isVisible();
+ var isHorizontal = this.isHorizontal();
if (display) {
var titleHeight = getTitleHeight(titleOpts, chart.options.font);
-
if (isHorizontal) {
- minSize.width = me.maxWidth;
+ minSize.width = this.maxWidth;
minSize.height = getTickMarkLength(gridOpts) + titleHeight;
} else {
- minSize.height = me.maxHeight;
+ minSize.height = this.maxHeight;
minSize.width = getTickMarkLength(gridOpts) + titleHeight;
}
-
- if (tickOpts.display && me.ticks.length) {
- var _me$_getLabelSizes = me._getLabelSizes(),
- first = _me$_getLabelSizes.first,
- last = _me$_getLabelSizes.last,
- widest = _me$_getLabelSizes.widest,
- highest = _me$_getLabelSizes.highest;
-
+ if (tickOpts.display && this.ticks.length) {
+ var _this$_getLabelSizes = this._getLabelSizes(),
+ first = _this$_getLabelSizes.first,
+ last = _this$_getLabelSizes.last,
+ widest = _this$_getLabelSizes.widest,
+ highest = _this$_getLabelSizes.highest;
var tickPadding = tickOpts.padding * 2;
- var angleRadians = toRadians(me.labelRotation);
+ var angleRadians = toRadians(this.labelRotation);
var cos = Math.cos(angleRadians);
var sin = Math.sin(angleRadians);
-
if (isHorizontal) {
- var labelHeight = sin * widest.width + cos * highest.height;
- minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);
+ var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
+ minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
} else {
var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
- minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth + tickPadding);
+ minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
}
-
- me._calculatePadding(first, last, sin, cos);
+ this._calculatePadding(first, last, sin, cos);
}
}
-
- me._handleMargins();
-
+ this._handleMargins();
if (isHorizontal) {
- me.width = me._length = chart.width - me._margins.left - me._margins.right;
- me.height = minSize.height;
+ this.width = this._length = chart.width - this._margins.left - this._margins.right;
+ this.height = minSize.height;
} else {
- me.width = minSize.width;
- me.height = me._length = chart.height - me._margins.top - me._margins.bottom;
+ this.width = minSize.width;
+ this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
}
}
}, {
key: "_calculatePadding",
value: function _calculatePadding(first, last, sin, cos) {
- var me = this;
- var _me$options3 = me.options,
- _me$options3$ticks = _me$options3.ticks,
- align = _me$options3$ticks.align,
- padding = _me$options3$ticks.padding,
- position = _me$options3.position;
- var isRotated = me.labelRotation !== 0;
- var labelsBelowTicks = position !== 'top' && me.axis === 'x';
-
- if (me.isHorizontal()) {
- var offsetLeft = me.getPixelForTick(0) - me.left;
- var offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1);
+ var _this$options6 = this.options,
+ _this$options6$ticks = _this$options6.ticks,
+ align = _this$options6$ticks.align,
+ padding = _this$options6$ticks.padding,
+ position = _this$options6.position;
+ var isRotated = this.labelRotation !== 0;
+ var labelsBelowTicks = position !== 'top' && this.axis === 'x';
+ if (this.isHorizontal()) {
+ var offsetLeft = this.getPixelForTick(0) - this.left;
+ var offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
var paddingLeft = 0;
var paddingRight = 0;
-
if (isRotated) {
if (labelsBelowTicks) {
paddingLeft = cos * first.width;
paddingRight = sin * last.height;
} else {
@@ -8638,148 +8628,140 @@
}
} else if (align === 'start') {
paddingRight = last.width;
} else if (align === 'end') {
paddingLeft = first.width;
- } else {
+ } else if (align !== 'inner') {
paddingLeft = first.width / 2;
paddingRight = last.width / 2;
}
-
- me.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * me.width / (me.width - offsetLeft), 0);
- me.paddingRight = Math.max((paddingRight - offsetRight + padding) * me.width / (me.width - offsetRight), 0);
+ this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
+ this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
} else {
var paddingTop = last.height / 2;
var paddingBottom = first.height / 2;
-
if (align === 'start') {
paddingTop = 0;
paddingBottom = first.height;
} else if (align === 'end') {
paddingTop = last.height;
paddingBottom = 0;
}
-
- me.paddingTop = paddingTop + padding;
- me.paddingBottom = paddingBottom + padding;
+ this.paddingTop = paddingTop + padding;
+ this.paddingBottom = paddingBottom + padding;
}
}
}, {
key: "_handleMargins",
value: function _handleMargins() {
- var me = this;
-
- if (me._margins) {
- me._margins.left = Math.max(me.paddingLeft, me._margins.left);
- me._margins.top = Math.max(me.paddingTop, me._margins.top);
- me._margins.right = Math.max(me.paddingRight, me._margins.right);
- me._margins.bottom = Math.max(me.paddingBottom, me._margins.bottom);
+ if (this._margins) {
+ this._margins.left = Math.max(this.paddingLeft, this._margins.left);
+ this._margins.top = Math.max(this.paddingTop, this._margins.top);
+ this._margins.right = Math.max(this.paddingRight, this._margins.right);
+ this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
}
}
}, {
key: "afterFit",
value: function afterFit() {
callback(this.options.afterFit, [this]);
}
}, {
key: "isHorizontal",
value: function isHorizontal() {
- var _this$options = this.options,
- axis = _this$options.axis,
- position = _this$options.position;
+ var _this$options7 = this.options,
+ axis = _this$options7.axis,
+ position = _this$options7.position;
return position === 'top' || position === 'bottom' || axis === 'x';
}
}, {
key: "isFullSize",
value: function isFullSize() {
return this.options.fullSize;
}
}, {
key: "_convertTicksToLabels",
value: function _convertTicksToLabels(ticks) {
- var me = this;
- me.beforeTickToLabelConversion();
- me.generateTickLabels(ticks);
- me.afterTickToLabelConversion();
+ this.beforeTickToLabelConversion();
+ this.generateTickLabels(ticks);
+ var i, ilen;
+ for (i = 0, ilen = ticks.length; i < ilen; i++) {
+ if (isNullOrUndef(ticks[i].label)) {
+ ticks.splice(i, 1);
+ ilen--;
+ i--;
+ }
+ }
+ this.afterTickToLabelConversion();
}
}, {
key: "_getLabelSizes",
value: function _getLabelSizes() {
- var me = this;
- var labelSizes = me._labelSizes;
-
+ var labelSizes = this._labelSizes;
if (!labelSizes) {
- var sampleSize = me.options.ticks.sampleSize;
- var ticks = me.ticks;
-
+ var sampleSize = this.options.ticks.sampleSize;
+ var ticks = this.ticks;
if (sampleSize < ticks.length) {
ticks = sample(ticks, sampleSize);
}
-
- me._labelSizes = labelSizes = me._computeLabelSizes(ticks, ticks.length);
+ this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);
}
-
return labelSizes;
}
}, {
key: "_computeLabelSizes",
value: function _computeLabelSizes(ticks, length) {
var ctx = this.ctx,
- caches = this._longestTextCache;
+ caches = this._longestTextCache;
var widths = [];
var heights = [];
var widestLabelSize = 0;
var highestLabelSize = 0;
var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
-
for (i = 0; i < length; ++i) {
label = ticks[i].label;
tickFont = this._resolveTickFontOptions(i);
ctx.font = fontString = tickFont.string;
cache = caches[fontString] = caches[fontString] || {
data: {},
gc: []
};
lineHeight = tickFont.lineHeight;
width = height = 0;
-
if (!isNullOrUndef(label) && !isArray(label)) {
width = _measureText(ctx, cache.data, cache.gc, width, label);
height = lineHeight;
} else if (isArray(label)) {
for (j = 0, jlen = label.length; j < jlen; ++j) {
nestedLabel = label[j];
-
if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {
width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);
height += lineHeight;
}
}
}
-
widths.push(width);
heights.push(height);
widestLabelSize = Math.max(width, widestLabelSize);
highestLabelSize = Math.max(height, highestLabelSize);
}
-
garbageCollect(caches, length);
var widest = widths.indexOf(widestLabelSize);
var highest = heights.indexOf(highestLabelSize);
-
var valueAt = function valueAt(idx) {
return {
width: widths[idx] || 0,
height: heights[idx] || 0
};
};
-
return {
first: valueAt(0),
last: valueAt(length - 1),
widest: valueAt(widest),
- highest: valueAt(highest)
+ highest: valueAt(highest),
+ widths: widths,
+ heights: heights
};
}
}, {
key: "getLabelForValue",
value: function getLabelForValue(value) {
@@ -8795,28 +8777,23 @@
value: function getValueForPixel(pixel) {}
}, {
key: "getPixelForTick",
value: function getPixelForTick(index) {
var ticks = this.ticks;
-
if (index < 0 || index > ticks.length - 1) {
return null;
}
-
return this.getPixelForValue(ticks[index].value);
}
}, {
key: "getPixelForDecimal",
value: function getPixelForDecimal(decimal) {
- var me = this;
-
- if (me._reversePixels) {
+ if (this._reversePixels) {
decimal = 1 - decimal;
}
-
- var pixel = me._startPixel + decimal * me._length;
- return _int16Range(me._alignToPixels ? _alignPixel(me.chart, pixel, 0) : pixel);
+ var pixel = this._startPixel + decimal * this._length;
+ return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);
}
}, {
key: "getDecimalForPixel",
value: function getDecimalForPixel(pixel) {
var decimal = (pixel - this._startPixel) / this._length;
@@ -8829,155 +8806,141 @@
}
}, {
key: "getBaseValue",
value: function getBaseValue() {
var min = this.min,
- max = this.max;
+ max = this.max;
return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
}
}, {
key: "getContext",
value: function getContext(index) {
- var me = this;
- var ticks = me.ticks || [];
-
+ var ticks = this.ticks || [];
if (index >= 0 && index < ticks.length) {
var tick = ticks[index];
- return tick.$context || (tick.$context = createTickContext(me.getContext(), index, tick));
+ return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));
}
-
- return me.$context || (me.$context = createScaleContext(me.chart.getContext(), me));
+ return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));
}
}, {
key: "_tickSize",
value: function _tickSize() {
- var me = this;
- var optionTicks = me.options.ticks;
- var rot = toRadians(me.labelRotation);
+ var optionTicks = this.options.ticks;
+ var rot = toRadians(this.labelRotation);
var cos = Math.abs(Math.cos(rot));
var sin = Math.abs(Math.sin(rot));
-
- var labelSizes = me._getLabelSizes();
-
+ var labelSizes = this._getLabelSizes();
var padding = optionTicks.autoSkipPadding || 0;
var w = labelSizes ? labelSizes.widest.width + padding : 0;
var h = labelSizes ? labelSizes.highest.height + padding : 0;
- return me.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;
+ return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;
}
}, {
key: "_isVisible",
value: function _isVisible() {
var display = this.options.display;
-
if (display !== 'auto') {
return !!display;
}
-
return this.getMatchingVisibleMetas().length > 0;
}
}, {
key: "_computeGridLineItems",
value: function _computeGridLineItems(chartArea) {
- var me = this;
- var axis = me.axis;
- var chart = me.chart;
- var options = me.options;
+ var axis = this.axis;
+ var chart = this.chart;
+ var options = this.options;
var grid = options.grid,
- position = options.position;
+ position = options.position,
+ border = options.border;
var offset = grid.offset;
- var isHorizontal = me.isHorizontal();
- var ticks = me.ticks;
+ var isHorizontal = this.isHorizontal();
+ var ticks = this.ticks;
var ticksLength = ticks.length + (offset ? 1 : 0);
var tl = getTickMarkLength(grid);
var items = [];
- var borderOpts = grid.setContext(me.getContext(0));
- var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;
+ var borderOpts = border.setContext(this.getContext());
+ var axisWidth = borderOpts.display ? borderOpts.width : 0;
var axisHalfWidth = axisWidth / 2;
-
var alignBorderValue = function alignBorderValue(pixel) {
return _alignPixel(chart, pixel, axisWidth);
};
-
var borderValue, i, lineValue, alignedLineValue;
var tx1, ty1, tx2, ty2, x1, y1, x2, y2;
-
if (position === 'top') {
- borderValue = alignBorderValue(me.bottom);
- ty1 = me.bottom - tl;
+ borderValue = alignBorderValue(this.bottom);
+ ty1 = this.bottom - tl;
ty2 = borderValue - axisHalfWidth;
y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
y2 = chartArea.bottom;
} else if (position === 'bottom') {
- borderValue = alignBorderValue(me.top);
+ borderValue = alignBorderValue(this.top);
y1 = chartArea.top;
y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
ty1 = borderValue + axisHalfWidth;
- ty2 = me.top + tl;
+ ty2 = this.top + tl;
} else if (position === 'left') {
- borderValue = alignBorderValue(me.right);
- tx1 = me.right - tl;
+ borderValue = alignBorderValue(this.right);
+ tx1 = this.right - tl;
tx2 = borderValue - axisHalfWidth;
x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
x2 = chartArea.right;
} else if (position === 'right') {
- borderValue = alignBorderValue(me.left);
+ borderValue = alignBorderValue(this.left);
x1 = chartArea.left;
x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
tx1 = borderValue + axisHalfWidth;
- tx2 = me.left + tl;
+ tx2 = this.left + tl;
} else if (axis === 'x') {
if (position === 'center') {
borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
} else if (isObject(position)) {
var positionAxisID = Object.keys(position)[0];
var value = position[positionAxisID];
- borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));
+ borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
}
-
y1 = chartArea.top;
y2 = chartArea.bottom;
ty1 = borderValue + axisHalfWidth;
ty2 = ty1 + tl;
} else if (axis === 'y') {
if (position === 'center') {
borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
} else if (isObject(position)) {
- var _positionAxisID = Object.keys(position)[0];
- var _value = position[_positionAxisID];
- borderValue = alignBorderValue(me.chart.scales[_positionAxisID].getPixelForValue(_value));
+ var positionAxisID1 = Object.keys(position)[0];
+ var value1 = position[positionAxisID1];
+ borderValue = alignBorderValue(this.chart.scales[positionAxisID1].getPixelForValue(value1));
}
-
tx1 = borderValue - axisHalfWidth;
tx2 = tx1 - tl;
x1 = chartArea.left;
x2 = chartArea.right;
}
-
- for (i = 0; i < ticksLength; ++i) {
- var optsAtIndex = grid.setContext(me.getContext(i));
+ var limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);
+ var step = Math.max(1, Math.ceil(ticksLength / limit));
+ for (i = 0; i < ticksLength; i += step) {
+ var context = this.getContext(i);
+ var optsAtIndex = grid.setContext(context);
+ var optsAtIndexBorder = border.setContext(context);
var lineWidth = optsAtIndex.lineWidth;
var lineColor = optsAtIndex.color;
- var borderDash = grid.borderDash || [];
- var borderDashOffset = optsAtIndex.borderDashOffset;
+ var borderDash = optsAtIndexBorder.dash || [];
+ var borderDashOffset = optsAtIndexBorder.dashOffset;
var tickWidth = optsAtIndex.tickWidth;
var tickColor = optsAtIndex.tickColor;
var tickBorderDash = optsAtIndex.tickBorderDash || [];
var tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
- lineValue = getPixelForGridLine(me, i, offset);
-
+ lineValue = getPixelForGridLine(this, i, offset);
if (lineValue === undefined) {
continue;
}
-
alignedLineValue = _alignPixel(chart, lineValue, lineWidth);
-
if (isHorizontal) {
tx1 = tx2 = x1 = x2 = alignedLineValue;
} else {
ty1 = ty2 = y1 = y2 = alignedLineValue;
}
-
items.push({
tx1: tx1,
ty1: ty1,
tx2: tx2,
ty2: ty2,
@@ -8993,99 +8956,99 @@
tickColor: tickColor,
tickBorderDash: tickBorderDash,
tickBorderDashOffset: tickBorderDashOffset
});
}
-
- me._ticksLength = ticksLength;
- me._borderValue = borderValue;
+ this._ticksLength = ticksLength;
+ this._borderValue = borderValue;
return items;
}
}, {
key: "_computeLabelItems",
value: function _computeLabelItems(chartArea) {
- var me = this;
- var axis = me.axis;
- var options = me.options;
+ var axis = this.axis;
+ var options = this.options;
var position = options.position,
- optionTicks = options.ticks;
- var isHorizontal = me.isHorizontal();
- var ticks = me.ticks;
+ optionTicks = options.ticks;
+ var isHorizontal = this.isHorizontal();
+ var ticks = this.ticks;
var align = optionTicks.align,
- crossAlign = optionTicks.crossAlign,
- padding = optionTicks.padding;
+ crossAlign = optionTicks.crossAlign,
+ padding = optionTicks.padding,
+ mirror = optionTicks.mirror;
var tl = getTickMarkLength(options.grid);
var tickAndPadding = tl + padding;
- var rotation = -toRadians(me.labelRotation);
+ var hTickAndPadding = mirror ? -padding : tickAndPadding;
+ var rotation = -toRadians(this.labelRotation);
var items = [];
var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
var textBaseline = 'middle';
-
if (position === 'top') {
- y = me.bottom - tickAndPadding;
- textAlign = me._getXAxisLabelAlignment();
+ y = this.bottom - hTickAndPadding;
+ textAlign = this._getXAxisLabelAlignment();
} else if (position === 'bottom') {
- y = me.top + tickAndPadding;
- textAlign = me._getXAxisLabelAlignment();
+ y = this.top + hTickAndPadding;
+ textAlign = this._getXAxisLabelAlignment();
} else if (position === 'left') {
var ret = this._getYAxisLabelAlignment(tl);
-
textAlign = ret.textAlign;
x = ret.x;
} else if (position === 'right') {
- var _ret = this._getYAxisLabelAlignment(tl);
-
- textAlign = _ret.textAlign;
- x = _ret.x;
+ var ret1 = this._getYAxisLabelAlignment(tl);
+ textAlign = ret1.textAlign;
+ x = ret1.x;
} else if (axis === 'x') {
if (position === 'center') {
y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
} else if (isObject(position)) {
var positionAxisID = Object.keys(position)[0];
var value = position[positionAxisID];
- y = me.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
+ y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
}
-
- textAlign = me._getXAxisLabelAlignment();
+ textAlign = this._getXAxisLabelAlignment();
} else if (axis === 'y') {
if (position === 'center') {
x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
} else if (isObject(position)) {
- var _positionAxisID2 = Object.keys(position)[0];
- var _value2 = position[_positionAxisID2];
- x = me.chart.scales[_positionAxisID2].getPixelForValue(_value2);
+ var positionAxisID1 = Object.keys(position)[0];
+ var value1 = position[positionAxisID1];
+ x = this.chart.scales[positionAxisID1].getPixelForValue(value1);
}
-
textAlign = this._getYAxisLabelAlignment(tl).textAlign;
}
-
if (axis === 'y') {
if (align === 'start') {
textBaseline = 'top';
} else if (align === 'end') {
textBaseline = 'bottom';
}
}
-
- var labelSizes = me._getLabelSizes();
-
+ var labelSizes = this._getLabelSizes();
for (i = 0, ilen = ticks.length; i < ilen; ++i) {
tick = ticks[i];
label = tick.label;
- var optsAtIndex = optionTicks.setContext(me.getContext(i));
- pixel = me.getPixelForTick(i) + optionTicks.labelOffset;
- font = me._resolveTickFontOptions(i);
+ var optsAtIndex = optionTicks.setContext(this.getContext(i));
+ pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
+ font = this._resolveTickFontOptions(i);
lineHeight = font.lineHeight;
lineCount = isArray(label) ? label.length : 1;
var halfCount = lineCount / 2;
var color = optsAtIndex.color;
var strokeColor = optsAtIndex.textStrokeColor;
var strokeWidth = optsAtIndex.textStrokeWidth;
-
+ var tickTextAlign = textAlign;
if (isHorizontal) {
x = pixel;
-
+ if (textAlign === 'inner') {
+ if (i === ilen - 1) {
+ tickTextAlign = !this.options.reverse ? 'right' : 'left';
+ } else if (i === 0) {
+ tickTextAlign = !this.options.reverse ? 'left' : 'right';
+ } else {
+ tickTextAlign = 'center';
+ }
+ }
if (position === 'top') {
if (crossAlign === 'near' || rotation !== 0) {
textOffset = -lineCount * lineHeight + lineHeight / 2;
} else if (crossAlign === 'center') {
textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
@@ -9099,203 +9062,228 @@
textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
} else {
textOffset = labelSizes.highest.height - lineCount * lineHeight;
}
}
+ if (mirror) {
+ textOffset *= -1;
+ }
+ if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {
+ x += lineHeight / 2 * Math.sin(rotation);
+ }
} else {
y = pixel;
textOffset = (1 - lineCount) * lineHeight / 2;
}
-
+ var backdrop = void 0;
+ if (optsAtIndex.showLabelBackdrop) {
+ var labelPadding = toPadding(optsAtIndex.backdropPadding);
+ var height = labelSizes.heights[i];
+ var width = labelSizes.widths[i];
+ var top = textOffset - labelPadding.top;
+ var left = 0 - labelPadding.left;
+ switch (textBaseline) {
+ case 'middle':
+ top -= height / 2;
+ break;
+ case 'bottom':
+ top -= height;
+ break;
+ }
+ switch (textAlign) {
+ case 'center':
+ left -= width / 2;
+ break;
+ case 'right':
+ left -= width;
+ break;
+ }
+ backdrop = {
+ left: left,
+ top: top,
+ width: width + labelPadding.width,
+ height: height + labelPadding.height,
+ color: optsAtIndex.backdropColor
+ };
+ }
items.push({
- rotation: rotation,
label: label,
font: font,
- color: color,
- strokeColor: strokeColor,
- strokeWidth: strokeWidth,
textOffset: textOffset,
- textAlign: textAlign,
- textBaseline: textBaseline,
- translation: [x, y]
+ options: {
+ rotation: rotation,
+ color: color,
+ strokeColor: strokeColor,
+ strokeWidth: strokeWidth,
+ textAlign: tickTextAlign,
+ textBaseline: textBaseline,
+ translation: [x, y],
+ backdrop: backdrop
+ }
});
}
-
return items;
}
}, {
key: "_getXAxisLabelAlignment",
value: function _getXAxisLabelAlignment() {
- var me = this;
- var _me$options4 = me.options,
- position = _me$options4.position,
- ticks = _me$options4.ticks;
- var rotation = -toRadians(me.labelRotation);
-
+ var _this$options8 = this.options,
+ position = _this$options8.position,
+ ticks = _this$options8.ticks;
+ var rotation = -toRadians(this.labelRotation);
if (rotation) {
return position === 'top' ? 'left' : 'right';
}
-
var align = 'center';
-
if (ticks.align === 'start') {
align = 'left';
} else if (ticks.align === 'end') {
align = 'right';
+ } else if (ticks.align === 'inner') {
+ align = 'inner';
}
-
return align;
}
}, {
key: "_getYAxisLabelAlignment",
value: function _getYAxisLabelAlignment(tl) {
- var me = this;
- var _me$options5 = me.options,
- position = _me$options5.position,
- _me$options5$ticks = _me$options5.ticks,
- crossAlign = _me$options5$ticks.crossAlign,
- mirror = _me$options5$ticks.mirror,
- padding = _me$options5$ticks.padding;
-
- var labelSizes = me._getLabelSizes();
-
+ var _this$options9 = this.options,
+ position = _this$options9.position,
+ _this$options9$ticks = _this$options9.ticks,
+ crossAlign = _this$options9$ticks.crossAlign,
+ mirror = _this$options9$ticks.mirror,
+ padding = _this$options9$ticks.padding;
+ var labelSizes = this._getLabelSizes();
var tickAndPadding = tl + padding;
var widest = labelSizes.widest.width;
var textAlign;
var x;
-
if (position === 'left') {
if (mirror) {
- textAlign = 'left';
- x = me.right - padding;
+ x = this.right + padding;
+ if (crossAlign === 'near') {
+ textAlign = 'left';
+ } else if (crossAlign === 'center') {
+ textAlign = 'center';
+ x += widest / 2;
+ } else {
+ textAlign = 'right';
+ x += widest;
+ }
} else {
- x = me.right - tickAndPadding;
-
+ x = this.right - tickAndPadding;
if (crossAlign === 'near') {
textAlign = 'right';
} else if (crossAlign === 'center') {
textAlign = 'center';
x -= widest / 2;
} else {
textAlign = 'left';
- x = me.left;
+ x = this.left;
}
}
} else if (position === 'right') {
if (mirror) {
- textAlign = 'right';
- x = me.left + padding;
+ x = this.left + padding;
+ if (crossAlign === 'near') {
+ textAlign = 'right';
+ } else if (crossAlign === 'center') {
+ textAlign = 'center';
+ x -= widest / 2;
+ } else {
+ textAlign = 'left';
+ x -= widest;
+ }
} else {
- x = me.left + tickAndPadding;
-
+ x = this.left + tickAndPadding;
if (crossAlign === 'near') {
textAlign = 'left';
} else if (crossAlign === 'center') {
textAlign = 'center';
x += widest / 2;
} else {
textAlign = 'right';
- x = me.right;
+ x = this.right;
}
}
} else {
textAlign = 'right';
}
-
return {
textAlign: textAlign,
x: x
};
}
}, {
key: "_computeLabelArea",
value: function _computeLabelArea() {
- var me = this;
-
- if (me.options.ticks.mirror) {
+ if (this.options.ticks.mirror) {
return;
}
-
- var chart = me.chart;
- var position = me.options.position;
-
+ var chart = this.chart;
+ var position = this.options.position;
if (position === 'left' || position === 'right') {
return {
top: 0,
- left: me.left,
+ left: this.left,
bottom: chart.height,
- right: me.right
+ right: this.right
};
}
-
if (position === 'top' || position === 'bottom') {
return {
- top: me.top,
+ top: this.top,
left: 0,
- bottom: me.bottom,
+ bottom: this.bottom,
right: chart.width
};
}
}
}, {
key: "drawBackground",
value: function drawBackground() {
var ctx = this.ctx,
- backgroundColor = this.options.backgroundColor,
- left = this.left,
- top = this.top,
- width = this.width,
- height = this.height;
-
+ backgroundColor = this.options.backgroundColor,
+ left = this.left,
+ top = this.top,
+ width = this.width,
+ height = this.height;
if (backgroundColor) {
ctx.save();
ctx.fillStyle = backgroundColor;
ctx.fillRect(left, top, width, height);
ctx.restore();
}
}
}, {
key: "getLineWidthForValue",
value: function getLineWidthForValue(value) {
- var me = this;
- var grid = me.options.grid;
-
- if (!me._isVisible() || !grid.display) {
+ var grid = this.options.grid;
+ if (!this._isVisible() || !grid.display) {
return 0;
}
-
- var ticks = me.ticks;
+ var ticks = this.ticks;
var index = ticks.findIndex(function (t) {
return t.value === value;
});
-
if (index >= 0) {
- var opts = grid.setContext(me.getContext(index));
+ var opts = grid.setContext(this.getContext(index));
return opts.lineWidth;
}
-
return 0;
}
}, {
key: "drawGrid",
value: function drawGrid(chartArea) {
- var me = this;
- var grid = me.options.grid;
- var ctx = me.ctx;
- var chart = me.chart;
- var borderOpts = grid.setContext(me.getContext(0));
- var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
-
- var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));
-
+ var grid = this.options.grid;
+ var ctx = this.ctx;
+ var items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
var i, ilen;
-
var drawLine = function drawLine(p1, p2, style) {
if (!style.width || !style.color) {
return;
}
-
ctx.save();
ctx.lineWidth = style.width;
ctx.strokeStyle = style.color;
ctx.setLineDash(style.borderDash || []);
ctx.lineDashOffset = style.borderDashOffset;
@@ -9303,25 +9291,22 @@
ctx.moveTo(p1.x, p1.y);
ctx.lineTo(p2.x, p2.y);
ctx.stroke();
ctx.restore();
};
-
if (grid.display) {
for (i = 0, ilen = items.length; i < ilen; ++i) {
var item = items[i];
-
if (grid.drawOnChartArea) {
drawLine({
x: item.x1,
y: item.y1
}, {
x: item.x2,
y: item.y2
}, item);
}
-
if (grid.drawTicks) {
drawLine({
x: item.tx1,
y: item.ty1
}, {
@@ -9334,107 +9319,106 @@
borderDashOffset: item.tickBorderDashOffset
});
}
}
}
-
- if (axisWidth) {
- var edgeOpts = grid.setContext(me.getContext(me._ticksLength - 1));
- var lastLineWidth = edgeOpts.lineWidth;
- var borderValue = me._borderValue;
- var x1, x2, y1, y2;
-
- if (me.isHorizontal()) {
- x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;
- x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;
- y1 = y2 = borderValue;
- } else {
- y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;
- y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
- x1 = x2 = borderValue;
- }
-
- drawLine({
- x: x1,
- y: y1
- }, {
- x: x2,
- y: y2
- }, {
- width: axisWidth,
- color: edgeOpts.borderColor
- });
+ }
+ }, {
+ key: "drawBorder",
+ value: function drawBorder() {
+ var chart = this.chart,
+ ctx = this.ctx,
+ _this$options10 = this.options,
+ border = _this$options10.border,
+ grid = _this$options10.grid;
+ var borderOpts = border.setContext(this.getContext());
+ var axisWidth = border.display ? borderOpts.width : 0;
+ if (!axisWidth) {
+ return;
}
+ var lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
+ var borderValue = this._borderValue;
+ var x1, x2, y1, y2;
+ if (this.isHorizontal()) {
+ x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;
+ x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;
+ y1 = y2 = borderValue;
+ } else {
+ y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;
+ y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
+ x1 = x2 = borderValue;
+ }
+ ctx.save();
+ ctx.lineWidth = borderOpts.width;
+ ctx.strokeStyle = borderOpts.color;
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ ctx.restore();
}
}, {
key: "drawLabels",
value: function drawLabels(chartArea) {
- var me = this;
- var optionTicks = me.options.ticks;
-
+ var optionTicks = this.options.ticks;
if (!optionTicks.display) {
return;
}
-
- var ctx = me.ctx;
-
- var area = me._computeLabelArea();
-
+ var ctx = this.ctx;
+ var area = this._computeLabelArea();
if (area) {
clipArea(ctx, area);
}
-
- var items = me._labelItems || (me._labelItems = me._computeLabelItems(chartArea));
-
- var i, ilen;
-
- for (i = 0, ilen = items.length; i < ilen; ++i) {
- var item = items[i];
- var tickFont = item.font;
- var label = item.label;
- var y = item.textOffset;
- renderText(ctx, label, 0, y, tickFont, item);
+ var items = this.getLabelItems(chartArea);
+ var _iterator10 = _createForOfIteratorHelper$1(items),
+ _step10;
+ try {
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
+ var item = _step10.value;
+ var renderTextOptions = item.options;
+ var tickFont = item.font;
+ var label = item.label;
+ var y = item.textOffset;
+ renderText(ctx, label, 0, y, tickFont, renderTextOptions);
+ }
+ } catch (err) {
+ _iterator10.e(err);
+ } finally {
+ _iterator10.f();
}
-
if (area) {
unclipArea(ctx);
}
}
}, {
key: "drawTitle",
value: function drawTitle() {
var ctx = this.ctx,
- _this$options2 = this.options,
- position = _this$options2.position,
- title = _this$options2.title,
- reverse = _this$options2.reverse;
-
+ _this$options11 = this.options,
+ position = _this$options11.position,
+ title = _this$options11.title,
+ reverse = _this$options11.reverse;
if (!title.display) {
return;
}
-
var font = toFont(title.font);
var padding = toPadding(title.padding);
var align = title.align;
var offset = font.lineHeight / 2;
-
- if (position === 'bottom') {
+ if (position === 'bottom' || position === 'center' || isObject(position)) {
offset += padding.bottom;
-
if (isArray(title.text)) {
offset += font.lineHeight * (title.text.length - 1);
}
} else {
offset += padding.top;
}
-
var _titleArgs = titleArgs(this, offset, position, align),
- titleX = _titleArgs.titleX,
- titleY = _titleArgs.titleY,
- maxWidth = _titleArgs.maxWidth,
- rotation = _titleArgs.rotation;
-
+ titleX = _titleArgs.titleX,
+ titleY = _titleArgs.titleY,
+ maxWidth = _titleArgs.maxWidth,
+ rotation = _titleArgs.rotation;
renderText(ctx, title.text, 0, 0, font, {
color: title.color,
maxWidth: maxWidth,
rotation: rotation,
textAlign: titleAlign(align, position, reverse),
@@ -9443,127 +9427,119 @@
});
}
}, {
key: "draw",
value: function draw(chartArea) {
- var me = this;
-
- if (!me._isVisible()) {
+ if (!this._isVisible()) {
return;
}
-
- me.drawBackground();
- me.drawGrid(chartArea);
- me.drawTitle();
- me.drawLabels(chartArea);
+ this.drawBackground();
+ this.drawGrid(chartArea);
+ this.drawBorder();
+ this.drawTitle();
+ this.drawLabels(chartArea);
}
}, {
key: "_layers",
value: function _layers() {
- var me = this;
- var opts = me.options;
+ var _this10 = this;
+ var opts = this.options;
var tz = opts.ticks && opts.ticks.z || 0;
- var gz = opts.grid && opts.grid.z || 0;
-
- if (!me._isVisible() || tz === gz || me.draw !== Scale.prototype.draw) {
+ var gz = valueOrDefault(opts.grid && opts.grid.z, -1);
+ var bz = valueOrDefault(opts.border && opts.border.z, 0);
+ if (!this._isVisible() || this.draw !== Scale.prototype.draw) {
return [{
z: tz,
draw: function draw(chartArea) {
- me.draw(chartArea);
+ _this10.draw(chartArea);
}
}];
}
-
return [{
z: gz,
draw: function draw(chartArea) {
- me.drawBackground();
- me.drawGrid(chartArea);
- me.drawTitle();
+ _this10.drawBackground();
+ _this10.drawGrid(chartArea);
+ _this10.drawTitle();
}
}, {
+ z: bz,
+ draw: function draw() {
+ _this10.drawBorder();
+ }
+ }, {
z: tz,
draw: function draw(chartArea) {
- me.drawLabels(chartArea);
+ _this10.drawLabels(chartArea);
}
}];
}
}, {
key: "getMatchingVisibleMetas",
value: function getMatchingVisibleMetas(type) {
- var me = this;
- var metas = me.chart.getSortedVisibleDatasetMetas();
- var axisID = me.axis + 'AxisID';
+ var metas = this.chart.getSortedVisibleDatasetMetas();
+ var axisID = this.axis + 'AxisID';
var result = [];
var i, ilen;
-
for (i = 0, ilen = metas.length; i < ilen; ++i) {
var meta = metas[i];
-
- if (meta[axisID] === me.id && (!type || meta.type === type)) {
+ if (meta[axisID] === this.id && (!type || meta.type === type)) {
result.push(meta);
}
}
-
return result;
}
}, {
key: "_resolveTickFontOptions",
value: function _resolveTickFontOptions(index) {
var opts = this.options.ticks.setContext(this.getContext(index));
return toFont(opts.font);
}
+ }, {
+ key: "_maxDigits",
+ value: function _maxDigits() {
+ var fontSize = this._resolveTickFontOptions(0).lineHeight;
+ return (this.isHorizontal() ? this.width : this.height) / fontSize;
+ }
}]);
-
return Scale;
}(Element);
-
var TypedRegistry = /*#__PURE__*/function () {
function TypedRegistry(type, scope, override) {
- _classCallCheck(this, TypedRegistry);
-
+ _classCallCheck$x(this, TypedRegistry);
this.type = type;
this.scope = scope;
this.override = override;
this.items = Object.create(null);
}
-
- _createClass(TypedRegistry, [{
+ _createClass$x(TypedRegistry, [{
key: "isForType",
value: function isForType(type) {
return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
}
}, {
key: "register",
value: function register(item) {
- var me = this;
var proto = Object.getPrototypeOf(item);
var parentScope;
-
if (isIChartComponent(proto)) {
- parentScope = me.register(proto);
+ parentScope = this.register(proto);
}
-
- var items = me.items;
+ var items = this.items;
var id = item.id;
- var scope = me.scope + '.' + id;
-
+ var scope = this.scope + '.' + id;
if (!id) {
throw new Error('class does not have id: ' + item);
}
-
if (id in items) {
return scope;
}
-
items[id] = item;
registerDefaults(item, scope, parentScope);
-
- if (me.override) {
+ if (this.override) {
defaults.override(item.id, item.overrides);
}
-
return scope;
}
}, {
key: "get",
value: function get(id) {
@@ -9573,41 +9549,33 @@
key: "unregister",
value: function unregister(item) {
var items = this.items;
var id = item.id;
var scope = this.scope;
-
if (id in items) {
delete items[id];
}
-
if (scope && id in defaults[scope]) {
delete defaults[scope][id];
-
if (this.override) {
delete overrides[id];
}
}
}
}]);
-
return TypedRegistry;
}();
-
function registerDefaults(item, scope, parentScope) {
var itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);
defaults.set(scope, itemDefaults);
-
if (item.defaultRoutes) {
routeDefaults(scope, item.defaultRoutes);
}
-
if (item.descriptors) {
defaults.describe(scope, item.descriptors);
}
}
-
function routeDefaults(scope, routes) {
Object.keys(routes).forEach(function (property) {
var propertyParts = property.split('.');
var sourceName = propertyParts.pop();
var sourceScope = [scope].concat(propertyParts).join('.');
@@ -9615,78 +9583,68 @@
var targetName = parts.pop();
var targetScope = parts.join('.');
defaults.route(sourceScope, sourceName, targetScope, targetName);
});
}
-
function isIChartComponent(proto) {
return 'id' in proto && 'defaults' in proto;
}
-
var Registry = /*#__PURE__*/function () {
function Registry() {
- _classCallCheck(this, Registry);
-
+ _classCallCheck$x(this, Registry);
this.controllers = new TypedRegistry(DatasetController, 'datasets', true);
this.elements = new TypedRegistry(Element, 'elements');
this.plugins = new TypedRegistry(Object, 'plugins');
this.scales = new TypedRegistry(Scale, 'scales');
this._typedRegistries = [this.controllers, this.scales, this.elements];
}
-
- _createClass(Registry, [{
+ _createClass$x(Registry, [{
key: "add",
value: function add() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
-
this._each('register', args);
}
}, {
key: "remove",
value: function remove() {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
-
this._each('unregister', args);
}
}, {
key: "addControllers",
value: function addControllers() {
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
-
this._each('register', args, this.controllers);
}
}, {
key: "addElements",
value: function addElements() {
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
-
this._each('register', args, this.elements);
}
}, {
key: "addPlugins",
value: function addPlugins() {
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
-
this._each('register', args, this.plugins);
}
}, {
key: "addScales",
value: function addScales() {
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
args[_key6] = arguments[_key6];
}
-
this._each('register', args, this.scales);
}
}, {
key: "getController",
value: function getController(id) {
@@ -9711,154 +9669,125 @@
key: "removeControllers",
value: function removeControllers() {
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
args[_key7] = arguments[_key7];
}
-
this._each('unregister', args, this.controllers);
}
}, {
key: "removeElements",
value: function removeElements() {
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
args[_key8] = arguments[_key8];
}
-
this._each('unregister', args, this.elements);
}
}, {
key: "removePlugins",
value: function removePlugins() {
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
args[_key9] = arguments[_key9];
}
-
this._each('unregister', args, this.plugins);
}
}, {
key: "removeScales",
value: function removeScales() {
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
args[_key10] = arguments[_key10];
}
-
this._each('unregister', args, this.scales);
}
}, {
key: "_each",
value: function _each(method, args, typedRegistry) {
- var me = this;
-
+ var _this11 = this;
_toConsumableArray(args).forEach(function (arg) {
- var reg = typedRegistry || me._getRegistryForType(arg);
-
- if (typedRegistry || reg.isForType(arg) || reg === me.plugins && arg.id) {
- me._exec(method, reg, arg);
+ var reg = typedRegistry || _this11._getRegistryForType(arg);
+ if (typedRegistry || reg.isForType(arg) || reg === _this11.plugins && arg.id) {
+ _this11._exec(method, reg, arg);
} else {
each(arg, function (item) {
- var itemReg = typedRegistry || me._getRegistryForType(item);
-
- me._exec(method, itemReg, item);
+ var itemReg = typedRegistry || _this11._getRegistryForType(item);
+ _this11._exec(method, itemReg, item);
});
}
});
}
}, {
key: "_exec",
value: function _exec(method, registry, component) {
var camelMethod = _capitalize(method);
-
callback(component['before' + camelMethod], [], component);
registry[method](component);
callback(component['after' + camelMethod], [], component);
}
}, {
key: "_getRegistryForType",
value: function _getRegistryForType(type) {
for (var i = 0; i < this._typedRegistries.length; i++) {
var reg = this._typedRegistries[i];
-
if (reg.isForType(type)) {
return reg;
}
}
-
return this.plugins;
}
}, {
key: "_get",
value: function _get(id, typedRegistry, type) {
var item = typedRegistry.get(id);
-
if (item === undefined) {
throw new Error('"' + id + '" is not a registered ' + type + '.');
}
-
return item;
}
}]);
-
return Registry;
}();
-
- var registry = new Registry();
-
+ var registry = /* #__PURE__ */new Registry();
var PluginService = /*#__PURE__*/function () {
function PluginService() {
- _classCallCheck(this, PluginService);
-
+ _classCallCheck$x(this, PluginService);
this._init = [];
}
-
- _createClass(PluginService, [{
+ _createClass$x(PluginService, [{
key: "notify",
- value: function notify(chart, hook, args) {
- var me = this;
-
+ value: function notify(chart, hook, args, filter) {
if (hook === 'beforeInit') {
- me._init = me._createDescriptors(chart, true);
-
- me._notify(me._init, chart, 'install');
+ this._init = this._createDescriptors(chart, true);
+ this._notify(this._init, chart, 'install');
}
-
- var descriptors = me._descriptors(chart);
-
- var result = me._notify(descriptors, chart, hook, args);
-
- if (hook === 'destroy') {
- me._notify(descriptors, chart, 'stop');
-
- me._notify(me._init, chart, 'uninstall');
+ var descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
+ var result = this._notify(descriptors, chart, hook, args);
+ if (hook === 'afterDestroy') {
+ this._notify(descriptors, chart, 'stop');
+ this._notify(this._init, chart, 'uninstall');
}
-
return result;
}
}, {
key: "_notify",
value: function _notify(descriptors, chart, hook, args) {
args = args || {};
-
- var _iterator3 = _createForOfIteratorHelper(descriptors),
- _step3;
-
+ var _iterator11 = _createForOfIteratorHelper$1(descriptors),
+ _step11;
try {
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
- var descriptor = _step3.value;
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
+ var descriptor = _step11.value;
var plugin = descriptor.plugin;
var method = plugin[hook];
var params = [chart, args, descriptor.options];
-
if (callback(method, params, plugin) === false && args.cancelable) {
return false;
}
}
} catch (err) {
- _iterator3.e(err);
+ _iterator11.e(err);
} finally {
- _iterator3.f();
+ _iterator11.f();
}
-
return true;
}
}, {
key: "invalidate",
value: function invalidate() {
@@ -9871,15 +9800,12 @@
key: "_descriptors",
value: function _descriptors(chart) {
if (this._cache) {
return this._cache;
}
-
var descriptors = this._cache = this._createDescriptors(chart);
-
this._notifyStateChanges(chart);
-
return descriptors;
}
}, {
key: "_createDescriptors",
value: function _createDescriptors(chart, all) {
@@ -9891,147 +9817,149 @@
}, {
key: "_notifyStateChanges",
value: function _notifyStateChanges(chart) {
var previousDescriptors = this._oldCache || [];
var descriptors = this._cache;
-
var diff = function diff(a, b) {
return a.filter(function (x) {
return !b.some(function (y) {
return x.plugin.id === y.plugin.id;
});
});
};
-
this._notify(diff(previousDescriptors, descriptors), chart, 'stop');
-
this._notify(diff(descriptors, previousDescriptors), chart, 'start');
}
}]);
-
return PluginService;
}();
-
function allPlugins(config) {
+ var localIds = {};
var plugins = [];
var keys = Object.keys(registry.plugins.items);
-
for (var i = 0; i < keys.length; i++) {
plugins.push(registry.getPlugin(keys[i]));
}
-
var local = config.plugins || [];
-
- for (var _i = 0; _i < local.length; _i++) {
- var plugin = local[_i];
-
+ for (var i1 = 0; i1 < local.length; i1++) {
+ var plugin = local[i1];
if (plugins.indexOf(plugin) === -1) {
plugins.push(plugin);
+ localIds[plugin.id] = true;
}
}
-
- return plugins;
+ return {
+ plugins: plugins,
+ localIds: localIds
+ };
}
-
function getOpts(options, all) {
if (!all && options === false) {
return null;
}
-
if (options === true) {
return {};
}
-
return options;
}
-
- function createDescriptors(chart, plugins, options, all) {
+ function createDescriptors(chart, _ref2, options, all) {
+ var plugins = _ref2.plugins,
+ localIds = _ref2.localIds;
var result = [];
var context = chart.getContext();
-
- for (var i = 0; i < plugins.length; i++) {
- var plugin = plugins[i];
- var id = plugin.id;
- var opts = getOpts(options[id], all);
-
- if (opts === null) {
- continue;
+ var _iterator12 = _createForOfIteratorHelper$1(plugins),
+ _step12;
+ try {
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
+ var plugin = _step12.value;
+ var id = plugin.id;
+ var opts = getOpts(options[id], all);
+ if (opts === null) {
+ continue;
+ }
+ result.push({
+ plugin: plugin,
+ options: pluginOpts(chart.config, {
+ plugin: plugin,
+ local: localIds[id]
+ }, opts, context)
+ });
}
-
- result.push({
- plugin: plugin,
- options: pluginOpts(chart.config, plugin, opts, context)
- });
+ } catch (err) {
+ _iterator12.e(err);
+ } finally {
+ _iterator12.f();
}
-
return result;
}
-
- function pluginOpts(config, plugin, opts, context) {
+ function pluginOpts(config, _ref3, opts, context) {
+ var plugin = _ref3.plugin,
+ local = _ref3.local;
var keys = config.pluginScopeKeys(plugin);
var scopes = config.getOptionScopes(opts, keys);
+ if (local && plugin.defaults) {
+ scopes.push(plugin.defaults);
+ }
return config.createResolver(scopes, context, [''], {
scriptable: false,
indexable: false,
allKeys: true
});
}
-
function getIndexAxis(type, options) {
var datasetDefaults = defaults.datasets[type] || {};
var datasetOptions = (options.datasets || {})[type] || {};
return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';
}
-
function getAxisFromDefaultScaleID(id, indexAxis) {
var axis = id;
-
if (id === '_index_') {
axis = indexAxis;
} else if (id === '_value_') {
axis = indexAxis === 'x' ? 'y' : 'x';
}
-
return axis;
}
-
function getDefaultScaleIDFromAxis(axis, indexAxis) {
return axis === indexAxis ? '_index_' : '_value_';
}
-
function axisFromPosition(position) {
if (position === 'top' || position === 'bottom') {
return 'x';
}
-
if (position === 'left' || position === 'right') {
return 'y';
}
}
-
function determineAxis(id, scaleOptions) {
- if (id === 'x' || id === 'y') {
+ if (id === 'x' || id === 'y' || id === 'r') {
return id;
}
-
- return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();
+ id = scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.length > 1 && determineAxis(id[0].toLowerCase(), scaleOptions);
+ if (id) {
+ return id;
+ }
+ throw new Error("Cannot determine type of '".concat(name, "' axis. Please provide 'axis' or 'position' option."));
}
-
function mergeScaleConfig(config, options) {
var chartDefaults = overrides[config.type] || {
scales: {}
};
var configScales = options.scales || {};
var chartIndexAxis = getIndexAxis(config.type, options);
- var firstIDs = Object.create(null);
var scales = Object.create(null);
Object.keys(configScales).forEach(function (id) {
var scaleConf = configScales[id];
+ if (!isObject(scaleConf)) {
+ return console.error("Invalid scale configuration for scale: ".concat(id));
+ }
+ if (scaleConf._proxy) {
+ return console.warn("Ignoring resolver passed as options for scale: ".concat(id));
+ }
var axis = determineAxis(id, scaleConf);
var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
var defaultScaleOptions = chartDefaults.scales || {};
- firstIDs[axis] = firstIDs[axis] || id;
scales[id] = mergeIf(Object.create(null), [{
axis: axis
}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);
});
config.data.datasets.forEach(function (dataset) {
@@ -10039,11 +9967,11 @@
var indexAxis = dataset.indexAxis || getIndexAxis(type, options);
var datasetDefaults = overrides[type] || {};
var defaultScaleOptions = datasetDefaults.scales || {};
Object.keys(defaultScaleOptions).forEach(function (defaultID) {
var axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
- var id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;
+ var id = dataset[axis + 'AxisID'] || axis;
scales[id] = scales[id] || Object.create(null);
mergeIf(scales[id], [{
axis: axis
}, configScales[id], defaultScaleOptions[defaultID]]);
});
@@ -10052,62 +9980,57 @@
var scale = scales[key];
mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);
});
return scales;
}
-
function initOptions(config) {
var options = config.options || (config.options = {});
options.plugins = valueOrDefault(options.plugins, {});
options.scales = mergeScaleConfig(config, options);
}
-
- function initConfig(config) {
- config = config || {};
- var data = config.data = config.data || {
- datasets: [],
- labels: []
- };
+ function initData(data) {
+ data = data || {};
data.datasets = data.datasets || [];
data.labels = data.labels || [];
+ return data;
+ }
+ function initConfig(config) {
+ config = config || {};
+ config.data = initData(config.data);
initOptions(config);
return config;
}
-
var keyCache = new Map();
var keysCached = new Set();
-
function cachedKeys(cacheKey, generate) {
var keys = keyCache.get(cacheKey);
-
if (!keys) {
keys = generate();
keyCache.set(cacheKey, keys);
keysCached.add(keys);
}
-
return keys;
}
-
var addIfFound = function addIfFound(set, obj, key) {
var opts = resolveObjectKey(obj, key);
-
if (opts !== undefined) {
set.add(opts);
}
};
-
var Config = /*#__PURE__*/function () {
function Config(config) {
- _classCallCheck(this, Config);
-
+ _classCallCheck$x(this, Config);
this._config = initConfig(config);
this._scopeCache = new Map();
this._resolverCache = new Map();
}
-
- _createClass(Config, [{
+ _createClass$x(Config, [{
+ key: "platform",
+ get: function get() {
+ return this._config.platform;
+ }
+ }, {
key: "type",
get: function get() {
return this._config.type;
},
set: function set(type) {
@@ -10117,11 +10040,11 @@
key: "data",
get: function get() {
return this._config.data;
},
set: function set(data) {
- this._config.data = data;
+ this._config.data = initData(data);
}
}, {
key: "options",
get: function get() {
return this._config.options;
@@ -10143,11 +10066,10 @@
}
}, {
key: "clearCache",
value: function clearCache() {
this._scopeCache.clear();
-
this._resolverCache.clear();
}
}, {
key: "datasetScopeKeys",
value: function datasetScopeKeys(datasetType) {
@@ -10180,44 +10102,35 @@
}
}, {
key: "_cachedScopes",
value: function _cachedScopes(mainScope, resetCache) {
var _scopeCache = this._scopeCache;
-
var cache = _scopeCache.get(mainScope);
-
if (!cache || resetCache) {
cache = new Map();
-
_scopeCache.set(mainScope, cache);
}
-
return cache;
}
}, {
key: "getOptionScopes",
value: function getOptionScopes(mainScope, keyLists, resetCache) {
var options = this.options,
- type = this.type;
-
+ type = this.type;
var cache = this._cachedScopes(mainScope, resetCache);
-
var cached = cache.get(keyLists);
-
if (cached) {
return cached;
}
-
var scopes = new Set();
keyLists.forEach(function (keys) {
if (mainScope) {
scopes.add(mainScope);
keys.forEach(function (key) {
return addIfFound(scopes, mainScope, key);
});
}
-
keys.forEach(function (key) {
return addIfFound(scopes, options, key);
});
keys.forEach(function (key) {
return addIfFound(scopes, overrides[type] || {}, key);
@@ -10227,24 +10140,24 @@
});
keys.forEach(function (key) {
return addIfFound(scopes, descriptors, key);
});
});
-
- var array = _toConsumableArray(scopes);
-
+ var array = Array.from(scopes);
+ if (array.length === 0) {
+ array.push(Object.create(null));
+ }
if (keysCached.has(keyLists)) {
cache.set(keyLists, array);
}
-
return array;
}
}, {
key: "chartOptionScopes",
value: function chartOptionScopes() {
var options = this.options,
- type = this.type;
+ type = this.type;
return [options, overrides[type] || {}, defaults.datasets[type] || {}, {
type: type
}, defaults, descriptors];
}
}, {
@@ -10252,178 +10165,182 @@
value: function resolveNamedOptions(scopes, names, context) {
var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];
var result = {
$shared: true
};
-
var _getResolver = getResolver(this._resolverCache, scopes, prefixes),
- resolver = _getResolver.resolver,
- subPrefixes = _getResolver.subPrefixes;
-
+ resolver = _getResolver.resolver,
+ subPrefixes = _getResolver.subPrefixes;
var options = resolver;
-
if (needContext(resolver, names)) {
result.$shared = false;
context = isFunction(context) ? context() : context;
var subResolver = this.createResolver(scopes, context, subPrefixes);
options = _attachContext(resolver, context, subResolver);
}
-
- var _iterator4 = _createForOfIteratorHelper(names),
- _step4;
-
+ var _iterator13 = _createForOfIteratorHelper$1(names),
+ _step13;
try {
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
- var prop = _step4.value;
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
+ var prop = _step13.value;
result[prop] = options[prop];
}
} catch (err) {
- _iterator4.e(err);
+ _iterator13.e(err);
} finally {
- _iterator4.f();
+ _iterator13.f();
}
-
return result;
}
}, {
key: "createResolver",
value: function createResolver(scopes, context) {
var prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];
var descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;
-
var _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),
- resolver = _getResolver2.resolver;
-
+ resolver = _getResolver2.resolver;
return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;
}
}]);
-
return Config;
}();
-
function getResolver(resolverCache, scopes, prefixes) {
var cache = resolverCache.get(scopes);
-
if (!cache) {
cache = new Map();
resolverCache.set(scopes, cache);
}
-
var cacheKey = prefixes.join();
var cached = cache.get(cacheKey);
-
if (!cached) {
var resolver = _createResolver(scopes, prefixes);
-
cached = {
resolver: resolver,
subPrefixes: prefixes.filter(function (p) {
return !p.toLowerCase().includes('hover');
})
};
cache.set(cacheKey, cached);
}
-
return cached;
}
-
+ var hasFunction = function hasFunction(value) {
+ return isObject(value) && Object.getOwnPropertyNames(value).reduce(function (acc, key) {
+ return acc || isFunction(value[key]);
+ }, false);
+ };
function needContext(proxy, names) {
var _descriptors2 = _descriptors(proxy),
- isScriptable = _descriptors2.isScriptable,
- isIndexable = _descriptors2.isIndexable;
-
- var _iterator5 = _createForOfIteratorHelper(names),
- _step5;
-
+ isScriptable = _descriptors2.isScriptable,
+ isIndexable = _descriptors2.isIndexable;
+ var _iterator14 = _createForOfIteratorHelper$1(names),
+ _step14;
try {
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
- var prop = _step5.value;
-
- if (isScriptable(prop) && isFunction(proxy[prop]) || isIndexable(prop) && isArray(proxy[prop])) {
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
+ var prop = _step14.value;
+ var scriptable = isScriptable(prop);
+ var indexable = isIndexable(prop);
+ var value = (indexable || scriptable) && proxy[prop];
+ if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {
return true;
}
}
} catch (err) {
- _iterator5.e(err);
+ _iterator14.e(err);
} finally {
- _iterator5.f();
+ _iterator14.f();
}
-
return false;
}
-
- var version = "3.0.2";
+ var version = "4.2.0";
var KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
-
function positionIsHorizontal(position, axis) {
return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';
}
-
function compare2Level(l1, l2) {
return function (a, b) {
return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];
};
}
-
function onAnimationsComplete(context) {
var chart = context.chart;
var animationOptions = chart.options.animation;
chart.notifyPlugins('afterRender');
callback(animationOptions && animationOptions.onComplete, [context], chart);
}
-
function onAnimationProgress(context) {
var chart = context.chart;
var animationOptions = chart.options.animation;
callback(animationOptions && animationOptions.onProgress, [context], chart);
}
-
- function isDomSupported() {
- return typeof window !== 'undefined' && typeof document !== 'undefined';
- }
-
function getCanvas(item) {
- if (isDomSupported() && typeof item === 'string') {
+ if (_isDomSupported() && typeof item === 'string') {
item = document.getElementById(item);
} else if (item && item.length) {
item = item[0];
}
-
if (item && item.canvas) {
item = item.canvas;
}
-
return item;
}
-
var instances = {};
-
var getChart = function getChart(key) {
var canvas = getCanvas(key);
return Object.values(instances).filter(function (c) {
return c.canvas === canvas;
}).pop();
};
-
- var Chart = /*#__PURE__*/function () {
- function Chart(item, config) {
- var _this5 = this;
-
- _classCallCheck(this, Chart);
-
- var me = this;
- this.config = config = new Config(config);
+ function moveNumericKeys(obj, start, move) {
+ var keys = Object.keys(obj);
+ for (var _i2 = 0, _keys = keys; _i2 < _keys.length; _i2++) {
+ var key = _keys[_i2];
+ var intKey = +key;
+ if (intKey >= start) {
+ var value = obj[key];
+ delete obj[key];
+ if (move > 0 || intKey > start) {
+ obj[intKey + move] = value;
+ }
+ }
+ }
+ }
+ function determineLastEvent(e, lastEvent, inChartArea, isClick) {
+ if (!inChartArea || e.type === 'mouseout') {
+ return null;
+ }
+ if (isClick) {
+ return lastEvent;
+ }
+ return e;
+ }
+ function getDatasetArea(meta) {
+ var xScale = meta.xScale,
+ yScale = meta.yScale;
+ if (xScale && yScale) {
+ return {
+ left: xScale.left,
+ right: xScale.right,
+ top: yScale.top,
+ bottom: yScale.bottom
+ };
+ }
+ }
+ var Chart$1 = /*#__PURE__*/function () {
+ function Chart(item, userConfig) {
+ var _this12 = this;
+ _classCallCheck$x(this, Chart);
+ var config = this.config = new Config(userConfig);
var initialCanvas = getCanvas(item);
var existingChart = getChart(initialCanvas);
-
if (existingChart) {
- throw new Error('Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' + ' must be destroyed before the canvas can be reused.');
+ throw new Error('Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' + ' must be destroyed before the canvas with ID \'' + existingChart.canvas.id + '\' can be reused.');
}
-
- var options = config.createResolver(config.chartOptionScopes(), me.getContext());
- this.platform = me._initializePlatform(initialCanvas, config);
- var context = me.platform.acquireContext(initialCanvas, options.aspectRatio);
+ var options = config.createResolver(config.chartOptionScopes(), this.getContext());
+ this.platform = new (config.platform || _detectPlatform(initialCanvas))();
+ this.platform.updateConfig(config);
+ var context = this.platform.acquireContext(initialCanvas, options.aspectRatio);
var canvas = context && context.canvas;
var height = canvas && canvas.height;
var width = canvas && canvas.width;
this.id = uid();
this.ctx = context;
@@ -10439,57 +10356,50 @@
this.currentDevicePixelRatio = undefined;
this.chartArea = undefined;
this._active = [];
this._lastEvent = undefined;
this._listeners = {};
+ this._responsiveListeners = undefined;
this._sortedMetasets = [];
this.scales = {};
- this.scale = undefined;
this._plugins = new PluginService();
this.$proxies = {};
this._hiddenIndices = {};
this.attached = false;
this._animationsDisabled = undefined;
this.$context = undefined;
- this._doResize = debounce(function () {
- return _this5.update('resize');
+ this._doResize = debounce(function (mode) {
+ return _this12.update(mode);
}, options.resizeDelay || 0);
- instances[me.id] = me;
-
+ this._dataChanges = [];
+ instances[this.id] = this;
if (!context || !canvas) {
console.error("Failed to create chart: can't acquire context from the given item");
return;
}
-
- animator.listen(me, 'complete', onAnimationsComplete);
- animator.listen(me, 'progress', onAnimationProgress);
-
- me._initialize();
-
- if (me.attached) {
- me.update();
+ animator.listen(this, 'complete', onAnimationsComplete);
+ animator.listen(this, 'progress', onAnimationProgress);
+ this._initialize();
+ if (this.attached) {
+ this.update();
}
}
-
- _createClass(Chart, [{
+ _createClass$x(Chart, [{
key: "aspectRatio",
get: function get() {
- var _this$options3 = this.options,
- aspectRatio = _this$options3.aspectRatio,
- maintainAspectRatio = _this$options3.maintainAspectRatio,
- width = this.width,
- height = this.height,
- _aspectRatio = this._aspectRatio;
-
+ var _this$options12 = this.options,
+ aspectRatio = _this$options12.aspectRatio,
+ maintainAspectRatio = _this$options12.maintainAspectRatio,
+ width = this.width,
+ height = this.height,
+ _aspectRatio = this._aspectRatio;
if (!isNullOrUndef(aspectRatio)) {
return aspectRatio;
}
-
if (maintainAspectRatio && _aspectRatio) {
return _aspectRatio;
}
-
return height ? width / height : null;
}
}, {
key: "data",
get: function get() {
@@ -10505,37 +10415,28 @@
},
set: function set(options) {
this.config.options = options;
}
}, {
+ key: "registry",
+ get: function get() {
+ return registry;
+ }
+ }, {
key: "_initialize",
value: function _initialize() {
- var me = this;
- me.notifyPlugins('beforeInit');
-
- if (me.options.responsive) {
- me.resize();
+ this.notifyPlugins('beforeInit');
+ if (this.options.responsive) {
+ this.resize();
} else {
- retinaScale(me, me.options.devicePixelRatio);
+ retinaScale(this, this.options.devicePixelRatio);
}
-
- me.bindEvents();
- me.notifyPlugins('afterInit');
- return me;
+ this.bindEvents();
+ this.notifyPlugins('afterInit');
+ return this;
}
}, {
- key: "_initializePlatform",
- value: function _initializePlatform(canvas, config) {
- if (config.platform) {
- return new config.platform();
- } else if (!isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {
- return new BasicPlatform();
- }
-
- return new DomPlatform();
- }
- }, {
key: "clear",
value: function clear() {
clearCanvas(this.canvas, this.ctx);
return this;
}
@@ -10558,34 +10459,29 @@
}
}
}, {
key: "_resize",
value: function _resize(width, height) {
- var me = this;
- var options = me.options;
- var canvas = me.canvas;
- var aspectRatio = options.maintainAspectRatio && me.aspectRatio;
- var newSize = me.platform.getMaximumSize(canvas, width, height, aspectRatio);
- var oldRatio = me.currentDevicePixelRatio;
- var newRatio = options.devicePixelRatio || me.platform.getDevicePixelRatio();
-
- if (me.width === newSize.width && me.height === newSize.height && oldRatio === newRatio) {
+ var options = this.options;
+ var canvas = this.canvas;
+ var aspectRatio = options.maintainAspectRatio && this.aspectRatio;
+ var newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
+ var newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();
+ var mode = this.width ? 'resize' : 'attach';
+ this.width = newSize.width;
+ this.height = newSize.height;
+ this._aspectRatio = this.aspectRatio;
+ if (!retinaScale(this, newRatio, true)) {
return;
}
-
- me.width = newSize.width;
- me.height = newSize.height;
- me._aspectRatio = me.aspectRatio;
- retinaScale(me, newRatio, true);
- me.notifyPlugins('resize', {
+ this.notifyPlugins('resize', {
size: newSize
});
- callback(options.onResize, [me, newSize], me);
-
- if (me.attached) {
- if (me._doResize()) {
- me.render();
+ callback(options.onResize, [this, newSize], this);
+ if (this.attached) {
+ if (this._doResize(mode)) {
+ this.render();
}
}
}
}, {
key: "ensureScalesHaveIDs",
@@ -10597,20 +10493,19 @@
});
}
}, {
key: "buildOrUpdateScales",
value: function buildOrUpdateScales() {
- var me = this;
- var options = me.options;
+ var _this13 = this;
+ var options = this.options;
var scaleOpts = options.scales;
- var scales = me.scales;
+ var scales = this.scales;
var updated = Object.keys(scales).reduce(function (obj, id) {
obj[id] = false;
return obj;
}, {});
var items = [];
-
if (scaleOpts) {
items = items.concat(Object.keys(scaleOpts).map(function (id) {
var scaleOptions = scaleOpts[id];
var axis = determineAxis(id, scaleOptions);
var isRadial = axis === 'r';
@@ -10620,460 +10515,457 @@
dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',
dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'
};
}));
}
-
each(items, function (item) {
var scaleOptions = item.options;
var id = scaleOptions.id;
var axis = determineAxis(id, scaleOptions);
var scaleType = valueOrDefault(scaleOptions.type, item.dtype);
-
if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
scaleOptions.position = item.dposition;
}
-
updated[id] = true;
var scale = null;
-
if (id in scales && scales[id].type === scaleType) {
scale = scales[id];
} else {
var scaleClass = registry.getScale(scaleType);
scale = new scaleClass({
id: id,
type: scaleType,
- ctx: me.ctx,
- chart: me
+ ctx: _this13.ctx,
+ chart: _this13
});
scales[scale.id] = scale;
}
-
scale.init(scaleOptions, options);
});
each(updated, function (hasUpdated, id) {
if (!hasUpdated) {
delete scales[id];
}
});
each(scales, function (scale) {
- layouts.configure(me, scale, scale.options);
- layouts.addBox(me, scale);
+ layouts.configure(_this13, scale, scale.options);
+ layouts.addBox(_this13, scale);
});
}
}, {
- key: "_updateMetasetIndex",
- value: function _updateMetasetIndex(meta, index) {
- var metasets = this._metasets;
- var oldIndex = meta.index;
-
- if (oldIndex !== index) {
- metasets[oldIndex] = metasets[index];
- metasets[index] = meta;
- meta.index = index;
- }
- }
- }, {
key: "_updateMetasets",
value: function _updateMetasets() {
- var me = this;
- var metasets = me._metasets;
- var numData = me.data.datasets.length;
+ var metasets = this._metasets;
+ var numData = this.data.datasets.length;
var numMeta = metasets.length;
-
+ metasets.sort(function (a, b) {
+ return a.index - b.index;
+ });
if (numMeta > numData) {
for (var i = numData; i < numMeta; ++i) {
- me._destroyDatasetMeta(i);
+ this._destroyDatasetMeta(i);
}
-
metasets.splice(numData, numMeta - numData);
}
-
- me._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));
+ this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));
}
}, {
key: "_removeUnreferencedMetasets",
value: function _removeUnreferencedMetasets() {
- var me = this;
- var metasets = me._metasets,
- datasets = me.data.datasets;
-
+ var _this14 = this;
+ var metasets = this._metasets,
+ datasets = this.data.datasets;
if (metasets.length > datasets.length) {
- delete me._stacks;
+ delete this._stacks;
}
-
metasets.forEach(function (meta, index) {
if (datasets.filter(function (x) {
return x === meta._dataset;
}).length === 0) {
- me._destroyDatasetMeta(index);
+ _this14._destroyDatasetMeta(index);
}
});
}
}, {
key: "buildOrUpdateControllers",
value: function buildOrUpdateControllers() {
- var me = this;
var newControllers = [];
- var datasets = me.data.datasets;
+ var datasets = this.data.datasets;
var i, ilen;
-
- me._removeUnreferencedMetasets();
-
+ this._removeUnreferencedMetasets();
for (i = 0, ilen = datasets.length; i < ilen; i++) {
var dataset = datasets[i];
- var meta = me.getDatasetMeta(i);
- var type = dataset.type || me.config.type;
-
+ var meta = this.getDatasetMeta(i);
+ var type = dataset.type || this.config.type;
if (meta.type && meta.type !== type) {
- me._destroyDatasetMeta(i);
-
- meta = me.getDatasetMeta(i);
+ this._destroyDatasetMeta(i);
+ meta = this.getDatasetMeta(i);
}
-
meta.type = type;
- meta.indexAxis = dataset.indexAxis || getIndexAxis(type, me.options);
+ meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
meta.order = dataset.order || 0;
-
- me._updateMetasetIndex(meta, i);
-
+ meta.index = i;
meta.label = '' + dataset.label;
- meta.visible = me.isDatasetVisible(i);
-
+ meta.visible = this.isDatasetVisible(i);
if (meta.controller) {
meta.controller.updateIndex(i);
meta.controller.linkScales();
} else {
var ControllerClass = registry.getController(type);
var _defaults$datasets$ty = defaults.datasets[type],
- datasetElementType = _defaults$datasets$ty.datasetElementType,
- dataElementType = _defaults$datasets$ty.dataElementType;
- Object.assign(ControllerClass.prototype, {
+ datasetElementType = _defaults$datasets$ty.datasetElementType,
+ dataElementType = _defaults$datasets$ty.dataElementType;
+ Object.assign(ControllerClass, {
dataElementType: registry.getElement(dataElementType),
datasetElementType: datasetElementType && registry.getElement(datasetElementType)
});
- meta.controller = new ControllerClass(me, i);
+ meta.controller = new ControllerClass(this, i);
newControllers.push(meta.controller);
}
}
-
- me._updateMetasets();
-
+ this._updateMetasets();
return newControllers;
}
}, {
key: "_resetElements",
value: function _resetElements() {
- var me = this;
- each(me.data.datasets, function (dataset, datasetIndex) {
- me.getDatasetMeta(datasetIndex).controller.reset();
- }, me);
+ var _this15 = this;
+ each(this.data.datasets, function (dataset, datasetIndex) {
+ _this15.getDatasetMeta(datasetIndex).controller.reset();
+ }, this);
}
}, {
key: "reset",
value: function reset() {
this._resetElements();
-
this.notifyPlugins('reset');
}
}, {
key: "update",
value: function update(mode) {
- var me = this;
- var config = me.config;
+ var config = this.config;
config.update();
- me._options = config.createResolver(config.chartOptionScopes(), me.getContext());
- each(me.scales, function (scale) {
- layouts.removeBox(me, scale);
- });
- var animsDisabled = me._animationsDisabled = !me.options.animation;
- me.ensureScalesHaveIDs();
- me.buildOrUpdateScales();
-
- me._plugins.invalidate();
-
- if (me.notifyPlugins('beforeUpdate', {
+ var options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
+ var animsDisabled = this._animationsDisabled = !options.animation;
+ this._updateScales();
+ this._checkEventBindings();
+ this._updateHiddenIndices();
+ this._plugins.invalidate();
+ if (this.notifyPlugins('beforeUpdate', {
mode: mode,
cancelable: true
}) === false) {
return;
}
-
- var newControllers = me.buildOrUpdateControllers();
- me.notifyPlugins('beforeElementsUpdate');
+ var newControllers = this.buildOrUpdateControllers();
+ this.notifyPlugins('beforeElementsUpdate');
var minPadding = 0;
-
- for (var i = 0, ilen = me.data.datasets.length; i < ilen; i++) {
- var _me$getDatasetMeta = me.getDatasetMeta(i),
- controller = _me$getDatasetMeta.controller;
-
+ for (var i = 0, ilen = this.data.datasets.length; i < ilen; i++) {
+ var _this$getDatasetMeta = this.getDatasetMeta(i),
+ controller = _this$getDatasetMeta.controller;
var reset = !animsDisabled && newControllers.indexOf(controller) === -1;
controller.buildOrUpdateElements(reset);
minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
}
-
- me._minPadding = minPadding;
-
- me._updateLayout(minPadding);
-
+ minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;
+ this._updateLayout(minPadding);
if (!animsDisabled) {
each(newControllers, function (controller) {
controller.reset();
});
}
-
- me._updateDatasets(mode);
-
- me.notifyPlugins('afterUpdate', {
+ this._updateDatasets(mode);
+ this.notifyPlugins('afterUpdate', {
mode: mode
});
-
- me._layers.sort(compare2Level('z', '_idx'));
-
- if (me._lastEvent) {
- me._eventHandler(me._lastEvent, true);
+ this._layers.sort(compare2Level('z', '_idx'));
+ var _active = this._active,
+ _lastEvent = this._lastEvent;
+ if (_lastEvent) {
+ this._eventHandler(_lastEvent, true);
+ } else if (_active.length) {
+ this._updateHoverStyles(_active, _active, true);
}
-
- me.render();
+ this.render();
}
}, {
+ key: "_updateScales",
+ value: function _updateScales() {
+ var _this16 = this;
+ each(this.scales, function (scale) {
+ layouts.removeBox(_this16, scale);
+ });
+ this.ensureScalesHaveIDs();
+ this.buildOrUpdateScales();
+ }
+ }, {
+ key: "_checkEventBindings",
+ value: function _checkEventBindings() {
+ var options = this.options;
+ var existingEvents = new Set(Object.keys(this._listeners));
+ var newEvents = new Set(options.events);
+ if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {
+ this.unbindEvents();
+ this.bindEvents();
+ }
+ }
+ }, {
+ key: "_updateHiddenIndices",
+ value: function _updateHiddenIndices() {
+ var _hiddenIndices = this._hiddenIndices;
+ var changes = this._getUniformDataChanges() || [];
+ var _iterator15 = _createForOfIteratorHelper$1(changes),
+ _step15;
+ try {
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
+ var _step15$value = _step15.value,
+ method = _step15$value.method,
+ start = _step15$value.start,
+ count = _step15$value.count;
+ var move = method === '_removeElements' ? -count : count;
+ moveNumericKeys(_hiddenIndices, start, move);
+ }
+ } catch (err) {
+ _iterator15.e(err);
+ } finally {
+ _iterator15.f();
+ }
+ }
+ }, {
+ key: "_getUniformDataChanges",
+ value: function _getUniformDataChanges() {
+ var _dataChanges = this._dataChanges;
+ if (!_dataChanges || !_dataChanges.length) {
+ return;
+ }
+ this._dataChanges = [];
+ var datasetCount = this.data.datasets.length;
+ var makeSet = function makeSet(idx) {
+ return new Set(_dataChanges.filter(function (c) {
+ return c[0] === idx;
+ }).map(function (c, i) {
+ return i + ',' + c.splice(1).join(',');
+ }));
+ };
+ var changeSet = makeSet(0);
+ for (var i = 1; i < datasetCount; i++) {
+ if (!setsEqual(changeSet, makeSet(i))) {
+ return;
+ }
+ }
+ return Array.from(changeSet).map(function (c) {
+ return c.split(',');
+ }).map(function (a) {
+ return {
+ method: a[1],
+ start: +a[2],
+ count: +a[3]
+ };
+ });
+ }
+ }, {
key: "_updateLayout",
value: function _updateLayout(minPadding) {
- var me = this;
-
- if (me.notifyPlugins('beforeLayout', {
+ var _this17 = this;
+ if (this.notifyPlugins('beforeLayout', {
cancelable: true
}) === false) {
return;
}
-
- layouts.update(me, me.width, me.height, minPadding);
- var area = me.chartArea;
+ layouts.update(this, this.width, this.height, minPadding);
+ var area = this.chartArea;
var noArea = area.width <= 0 || area.height <= 0;
- me._layers = [];
- each(me.boxes, function (box) {
- var _me$_layers;
-
+ this._layers = [];
+ each(this.boxes, function (box) {
+ var _this17$_layers;
if (noArea && box.position === 'chartArea') {
return;
}
-
if (box.configure) {
box.configure();
}
-
- (_me$_layers = me._layers).push.apply(_me$_layers, _toConsumableArray(box._layers()));
- }, me);
-
- me._layers.forEach(function (item, index) {
+ (_this17$_layers = _this17._layers).push.apply(_this17$_layers, _toConsumableArray(box._layers()));
+ }, this);
+ this._layers.forEach(function (item, index) {
item._idx = index;
});
-
- me.notifyPlugins('afterLayout');
+ this.notifyPlugins('afterLayout');
}
}, {
key: "_updateDatasets",
value: function _updateDatasets(mode) {
- var me = this;
- var isFunction = typeof mode === 'function';
-
- if (me.notifyPlugins('beforeDatasetsUpdate', {
+ if (this.notifyPlugins('beforeDatasetsUpdate', {
mode: mode,
cancelable: true
}) === false) {
return;
}
-
- for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
- me._updateDataset(i, isFunction ? mode({
- datasetIndex: i
+ for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
+ this.getDatasetMeta(i).controller.configure();
+ }
+ for (var i1 = 0, ilen1 = this.data.datasets.length; i1 < ilen1; ++i1) {
+ this._updateDataset(i1, isFunction(mode) ? mode({
+ datasetIndex: i1
}) : mode);
}
-
- me.notifyPlugins('afterDatasetsUpdate', {
+ this.notifyPlugins('afterDatasetsUpdate', {
mode: mode
});
}
}, {
key: "_updateDataset",
value: function _updateDataset(index, mode) {
- var me = this;
- var meta = me.getDatasetMeta(index);
+ var meta = this.getDatasetMeta(index);
var args = {
meta: meta,
index: index,
mode: mode,
cancelable: true
};
-
- if (me.notifyPlugins('beforeDatasetUpdate', args) === false) {
+ if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {
return;
}
-
meta.controller._update(mode);
-
args.cancelable = false;
- me.notifyPlugins('afterDatasetUpdate', args);
+ this.notifyPlugins('afterDatasetUpdate', args);
}
}, {
key: "render",
value: function render() {
- var me = this;
-
- if (me.notifyPlugins('beforeRender', {
+ if (this.notifyPlugins('beforeRender', {
cancelable: true
}) === false) {
return;
}
-
- if (animator.has(me)) {
- if (me.attached && !animator.running(me)) {
- animator.start(me);
+ if (animator.has(this)) {
+ if (this.attached && !animator.running(this)) {
+ animator.start(this);
}
} else {
- me.draw();
+ this.draw();
onAnimationsComplete({
- chart: me
+ chart: this
});
}
}
}, {
key: "draw",
value: function draw() {
- var me = this;
var i;
-
- if (me._resizeBeforeDraw) {
- var _me$_resizeBeforeDraw = me._resizeBeforeDraw,
- width = _me$_resizeBeforeDraw.width,
- height = _me$_resizeBeforeDraw.height;
-
- me._resize(width, height);
-
- me._resizeBeforeDraw = null;
+ if (this._resizeBeforeDraw) {
+ var _this$_resizeBeforeDr = this._resizeBeforeDraw,
+ width = _this$_resizeBeforeDr.width,
+ height = _this$_resizeBeforeDr.height;
+ this._resize(width, height);
+ this._resizeBeforeDraw = null;
}
-
- me.clear();
-
- if (me.width <= 0 || me.height <= 0) {
+ this.clear();
+ if (this.width <= 0 || this.height <= 0) {
return;
}
-
- if (me.notifyPlugins('beforeDraw', {
+ if (this.notifyPlugins('beforeDraw', {
cancelable: true
}) === false) {
return;
}
-
- var layers = me._layers;
-
+ var layers = this._layers;
for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {
- layers[i].draw(me.chartArea);
+ layers[i].draw(this.chartArea);
}
-
- me._drawDatasets();
-
+ this._drawDatasets();
for (; i < layers.length; ++i) {
- layers[i].draw(me.chartArea);
+ layers[i].draw(this.chartArea);
}
-
- me.notifyPlugins('afterDraw');
+ this.notifyPlugins('afterDraw');
}
}, {
key: "_getSortedDatasetMetas",
value: function _getSortedDatasetMetas(filterVisible) {
- var me = this;
- var metasets = me._sortedMetasets;
+ var metasets = this._sortedMetasets;
var result = [];
var i, ilen;
-
for (i = 0, ilen = metasets.length; i < ilen; ++i) {
var meta = metasets[i];
-
if (!filterVisible || meta.visible) {
result.push(meta);
}
}
-
return result;
}
}, {
key: "getSortedVisibleDatasetMetas",
value: function getSortedVisibleDatasetMetas() {
return this._getSortedDatasetMetas(true);
}
}, {
key: "_drawDatasets",
value: function _drawDatasets() {
- var me = this;
-
- if (me.notifyPlugins('beforeDatasetsDraw', {
+ if (this.notifyPlugins('beforeDatasetsDraw', {
cancelable: true
}) === false) {
return;
}
-
- var metasets = me.getSortedVisibleDatasetMetas();
-
+ var metasets = this.getSortedVisibleDatasetMetas();
for (var i = metasets.length - 1; i >= 0; --i) {
- me._drawDataset(metasets[i]);
+ this._drawDataset(metasets[i]);
}
-
- me.notifyPlugins('afterDatasetsDraw');
+ this.notifyPlugins('afterDatasetsDraw');
}
}, {
key: "_drawDataset",
value: function _drawDataset(meta) {
- var me = this;
- var ctx = me.ctx;
+ var ctx = this.ctx;
var clip = meta._clip;
- var area = me.chartArea;
+ var useClip = !clip.disabled;
+ var area = getDatasetArea(meta) || this.chartArea;
var args = {
meta: meta,
index: meta.index,
cancelable: true
};
-
- if (me.notifyPlugins('beforeDatasetDraw', args) === false) {
+ if (this.notifyPlugins('beforeDatasetDraw', args) === false) {
return;
}
-
- clipArea(ctx, {
- left: clip.left === false ? 0 : area.left - clip.left,
- right: clip.right === false ? me.width : area.right + clip.right,
- top: clip.top === false ? 0 : area.top - clip.top,
- bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom
- });
+ if (useClip) {
+ clipArea(ctx, {
+ left: clip.left === false ? 0 : area.left - clip.left,
+ right: clip.right === false ? this.width : area.right + clip.right,
+ top: clip.top === false ? 0 : area.top - clip.top,
+ bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom
+ });
+ }
meta.controller.draw();
- unclipArea(ctx);
+ if (useClip) {
+ unclipArea(ctx);
+ }
args.cancelable = false;
- me.notifyPlugins('afterDatasetDraw', args);
+ this.notifyPlugins('afterDatasetDraw', args);
}
}, {
+ key: "isPointInArea",
+ value: function isPointInArea(point) {
+ return _isPointInArea(point, this.chartArea, this._minPadding);
+ }
+ }, {
key: "getElementsAtEventForMode",
value: function getElementsAtEventForMode(e, mode, options, useFinalPosition) {
var method = Interaction.modes[mode];
-
if (typeof method === 'function') {
return method(this, e, options, useFinalPosition);
}
-
return [];
}
}, {
key: "getDatasetMeta",
value: function getDatasetMeta(datasetIndex) {
- var me = this;
- var dataset = me.data.datasets[datasetIndex];
- var metasets = me._metasets;
+ var dataset = this.data.datasets[datasetIndex];
+ var metasets = this._metasets;
var meta = metasets.filter(function (x) {
return x && x._dataset === dataset;
}).pop();
-
if (!meta) {
- meta = metasets[datasetIndex] = {
+ meta = {
type: null,
data: [],
dataset: null,
controller: null,
hidden: null,
@@ -11083,36 +10975,34 @@
index: datasetIndex,
_dataset: dataset,
_parsed: [],
_sorted: false
};
+ metasets.push(meta);
}
-
return meta;
}
}, {
key: "getContext",
value: function getContext() {
- return this.$context || (this.$context = {
+ return this.$context || (this.$context = createContext(null, {
chart: this,
type: 'chart'
- });
+ }));
}
}, {
key: "getVisibleDatasetCount",
value: function getVisibleDatasetCount() {
return this.getSortedVisibleDatasetMetas().length;
}
}, {
key: "isDatasetVisible",
value: function isDatasetVisible(datasetIndex) {
var dataset = this.data.datasets[datasetIndex];
-
if (!dataset) {
return false;
}
-
var meta = this.getDatasetMeta(datasetIndex);
return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;
}
}, {
key: "setDatasetVisibility",
@@ -11129,179 +11019,180 @@
key: "getDataVisibility",
value: function getDataVisibility(index) {
return !this._hiddenIndices[index];
}
}, {
- key: "_updateDatasetVisibility",
- value: function _updateDatasetVisibility(datasetIndex, visible) {
- var me = this;
+ key: "_updateVisibility",
+ value: function _updateVisibility(datasetIndex, dataIndex, visible) {
var mode = visible ? 'show' : 'hide';
- var meta = me.getDatasetMeta(datasetIndex);
-
+ var meta = this.getDatasetMeta(datasetIndex);
var anims = meta.controller._resolveAnimations(undefined, mode);
-
- me.setDatasetVisibility(datasetIndex, visible);
- anims.update(meta, {
- visible: visible
- });
- me.update(function (ctx) {
- return ctx.datasetIndex === datasetIndex ? mode : undefined;
- });
+ if (defined(dataIndex)) {
+ meta.data[dataIndex].hidden = !visible;
+ this.update();
+ } else {
+ this.setDatasetVisibility(datasetIndex, visible);
+ anims.update(meta, {
+ visible: visible
+ });
+ this.update(function (ctx) {
+ return ctx.datasetIndex === datasetIndex ? mode : undefined;
+ });
+ }
}
}, {
key: "hide",
- value: function hide(datasetIndex) {
- this._updateDatasetVisibility(datasetIndex, false);
+ value: function hide(datasetIndex, dataIndex) {
+ this._updateVisibility(datasetIndex, dataIndex, false);
}
}, {
key: "show",
- value: function show(datasetIndex) {
- this._updateDatasetVisibility(datasetIndex, true);
+ value: function show(datasetIndex, dataIndex) {
+ this._updateVisibility(datasetIndex, dataIndex, true);
}
}, {
key: "_destroyDatasetMeta",
value: function _destroyDatasetMeta(datasetIndex) {
- var me = this;
- var meta = me._metasets && me._metasets[datasetIndex];
-
+ var meta = this._metasets[datasetIndex];
if (meta && meta.controller) {
meta.controller._destroy();
-
- delete me._metasets[datasetIndex];
}
+ delete this._metasets[datasetIndex];
}
}, {
- key: "destroy",
- value: function destroy() {
- var me = this;
- var canvas = me.canvas,
- ctx = me.ctx;
+ key: "_stop",
+ value: function _stop() {
var i, ilen;
- me.stop();
- animator.remove(me);
-
- for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
- me._destroyDatasetMeta(i);
+ this.stop();
+ animator.remove(this);
+ for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
+ this._destroyDatasetMeta(i);
}
-
- me.config.clearCache();
-
+ }
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ this.notifyPlugins('beforeDestroy');
+ var canvas = this.canvas,
+ ctx = this.ctx;
+ this._stop();
+ this.config.clearCache();
if (canvas) {
- me.unbindEvents();
+ this.unbindEvents();
clearCanvas(canvas, ctx);
- me.platform.releaseContext(ctx);
- me.canvas = null;
- me.ctx = null;
+ this.platform.releaseContext(ctx);
+ this.canvas = null;
+ this.ctx = null;
}
-
- me.notifyPlugins('destroy');
- delete instances[me.id];
+ delete instances[this.id];
+ this.notifyPlugins('afterDestroy');
}
}, {
key: "toBase64Image",
value: function toBase64Image() {
var _this$canvas;
-
return (_this$canvas = this.canvas).toDataURL.apply(_this$canvas, arguments);
}
}, {
key: "bindEvents",
value: function bindEvents() {
- var me = this;
- var listeners = me._listeners;
- var platform = me.platform;
-
+ this.bindUserEvents();
+ if (this.options.responsive) {
+ this.bindResponsiveEvents();
+ } else {
+ this.attached = true;
+ }
+ }
+ }, {
+ key: "bindUserEvents",
+ value: function bindUserEvents() {
+ var _this18 = this;
+ var listeners = this._listeners;
+ var platform = this.platform;
var _add = function _add(type, listener) {
- platform.addEventListener(me, type, listener);
+ platform.addEventListener(_this18, type, listener);
listeners[type] = listener;
};
-
- var _remove = function _remove(type, listener) {
- if (listeners[type]) {
- platform.removeEventListener(me, type, listener);
- delete listeners[type];
- }
- };
-
var listener = function listener(e, x, y) {
e.offsetX = x;
e.offsetY = y;
-
- me._eventHandler(e);
+ _this18._eventHandler(e);
};
-
- each(me.options.events, function (type) {
+ each(this.options.events, function (type) {
return _add(type, listener);
});
-
- if (me.options.responsive) {
- listener = function listener(width, height) {
- if (me.canvas) {
- me.resize(width, height);
- }
- };
-
- var detached;
-
- var attached = function attached() {
- _remove('attach', attached);
-
- me.attached = true;
- me.resize();
-
- _add('resize', listener);
-
- _add('detach', detached);
- };
-
- detached = function detached() {
- me.attached = false;
-
- _remove('resize', listener);
-
- _add('attach', attached);
- };
-
- if (platform.isAttached(me.canvas)) {
- attached();
- } else {
- detached();
+ }
+ }, {
+ key: "bindResponsiveEvents",
+ value: function bindResponsiveEvents() {
+ var _this19 = this;
+ if (!this._responsiveListeners) {
+ this._responsiveListeners = {};
+ }
+ var listeners = this._responsiveListeners;
+ var platform = this.platform;
+ var _add = function _add(type, listener) {
+ platform.addEventListener(_this19, type, listener);
+ listeners[type] = listener;
+ };
+ var _remove = function _remove(type, listener) {
+ if (listeners[type]) {
+ platform.removeEventListener(_this19, type, listener);
+ delete listeners[type];
}
+ };
+ var listener = function listener(width, height) {
+ if (_this19.canvas) {
+ _this19.resize(width, height);
+ }
+ };
+ var detached;
+ var attached = function attached() {
+ _remove('attach', attached);
+ _this19.attached = true;
+ _this19.resize();
+ _add('resize', listener);
+ _add('detach', detached);
+ };
+ detached = function detached() {
+ _this19.attached = false;
+ _remove('resize', listener);
+ _this19._stop();
+ _this19._resize(0, 0);
+ _add('attach', attached);
+ };
+ if (platform.isAttached(this.canvas)) {
+ attached();
} else {
- me.attached = true;
+ detached();
}
}
}, {
key: "unbindEvents",
value: function unbindEvents() {
- var me = this;
- var listeners = me._listeners;
-
- if (!listeners) {
- return;
- }
-
- delete me._listeners;
- each(listeners, function (listener, type) {
- me.platform.removeEventListener(me, type, listener);
+ var _this20 = this;
+ each(this._listeners, function (listener, type) {
+ _this20.platform.removeEventListener(_this20, type, listener);
});
+ this._listeners = {};
+ each(this._responsiveListeners, function (listener, type) {
+ _this20.platform.removeEventListener(_this20, type, listener);
+ });
+ this._responsiveListeners = undefined;
}
}, {
key: "updateHoverStyle",
value: function updateHoverStyle(items, mode, enabled) {
var prefix = enabled ? 'set' : 'remove';
var meta, item, i, ilen;
-
if (mode === 'dataset') {
meta = this.getDatasetMeta(items[0].datasetIndex);
meta.controller['_' + prefix + 'DatasetHoverStyle']();
}
-
for (i = 0, ilen = items.length; i < ilen; ++i) {
item = items[i];
var controller = item && this.getDatasetMeta(item.datasetIndex).controller;
-
if (controller) {
controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);
}
}
}
@@ -11311,374 +11202,418 @@
return this._active || [];
}
}, {
key: "setActiveElements",
value: function setActiveElements(activeElements) {
- var me = this;
- var lastActive = me._active || [];
- var active = activeElements.map(function (_ref) {
- var datasetIndex = _ref.datasetIndex,
- index = _ref.index;
- var meta = me.getDatasetMeta(datasetIndex);
-
+ var _this21 = this;
+ var lastActive = this._active || [];
+ var active = activeElements.map(function (_ref4) {
+ var datasetIndex = _ref4.datasetIndex,
+ index = _ref4.index;
+ var meta = _this21.getDatasetMeta(datasetIndex);
if (!meta) {
throw new Error('No dataset found at index ' + datasetIndex);
}
-
return {
datasetIndex: datasetIndex,
element: meta.data[index],
index: index
};
});
var changed = !_elementsEqual(active, lastActive);
-
if (changed) {
- me._active = active;
-
- me._updateHoverStyles(active, lastActive);
+ this._active = active;
+ this._lastEvent = null;
+ this._updateHoverStyles(active, lastActive);
}
}
}, {
key: "notifyPlugins",
- value: function notifyPlugins(hook, args) {
- return this._plugins.notify(this, hook, args);
+ value: function notifyPlugins(hook, args, filter) {
+ return this._plugins.notify(this, hook, args, filter);
}
}, {
+ key: "isPluginEnabled",
+ value: function isPluginEnabled(pluginId) {
+ return this._plugins._cache.filter(function (p) {
+ return p.plugin.id === pluginId;
+ }).length === 1;
+ }
+ }, {
key: "_updateHoverStyles",
value: function _updateHoverStyles(active, lastActive, replay) {
- var me = this;
- var hoverOptions = me.options.hover;
-
+ var hoverOptions = this.options.hover;
var diff = function diff(a, b) {
return a.filter(function (x) {
return !b.some(function (y) {
return x.datasetIndex === y.datasetIndex && x.index === y.index;
});
});
};
-
var deactivated = diff(lastActive, active);
var activated = replay ? active : diff(active, lastActive);
-
if (deactivated.length) {
- me.updateHoverStyle(deactivated, hoverOptions.mode, false);
+ this.updateHoverStyle(deactivated, hoverOptions.mode, false);
}
-
if (activated.length && hoverOptions.mode) {
- me.updateHoverStyle(activated, hoverOptions.mode, true);
+ this.updateHoverStyle(activated, hoverOptions.mode, true);
}
}
}, {
key: "_eventHandler",
value: function _eventHandler(e, replay) {
- var me = this;
+ var _this22 = this;
var args = {
event: e,
replay: replay,
- cancelable: true
+ cancelable: true,
+ inChartArea: this.isPointInArea(e)
};
-
- if (me.notifyPlugins('beforeEvent', args) === false) {
+ var eventFilter = function eventFilter(plugin) {
+ return (plugin.options.events || _this22.options.events).includes(e["native"].type);
+ };
+ if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {
return;
}
-
- var changed = me._handleEvent(e, replay);
-
+ var changed = this._handleEvent(e, replay, args.inChartArea);
args.cancelable = false;
- me.notifyPlugins('afterEvent', args);
-
+ this.notifyPlugins('afterEvent', args, eventFilter);
if (changed || args.changed) {
- me.render();
+ this.render();
}
-
- return me;
+ return this;
}
}, {
key: "_handleEvent",
- value: function _handleEvent(e, replay) {
- var me = this;
- var _me$_active = me._active,
- lastActive = _me$_active === void 0 ? [] : _me$_active,
- options = me.options;
- var hoverOptions = options.hover;
+ value: function _handleEvent(e, replay, inChartArea) {
+ var _this$_active = this._active,
+ lastActive = _this$_active === void 0 ? [] : _this$_active,
+ options = this.options;
var useFinalPosition = replay;
- var active = [];
- var changed = false;
- var lastEvent = null;
-
- if (e.type !== 'mouseout') {
- active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
- lastEvent = e.type === 'click' ? me._lastEvent : e;
- }
-
- me._lastEvent = null;
- callback(options.onHover, [e, active, me], me);
-
- if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {
- if (_isPointInArea(e, me.chartArea, me._minPadding)) {
- callback(options.onClick, [e, active, me], me);
+ var active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
+ var isClick = _isClickEvent(e);
+ var lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
+ if (inChartArea) {
+ this._lastEvent = null;
+ callback(options.onHover, [e, active, this], this);
+ if (isClick) {
+ callback(options.onClick, [e, active, this], this);
}
}
-
- changed = !_elementsEqual(active, lastActive);
-
+ var changed = !_elementsEqual(active, lastActive);
if (changed || replay) {
- me._active = active;
-
- me._updateHoverStyles(active, lastActive, replay);
+ this._active = active;
+ this._updateHoverStyles(active, lastActive, replay);
}
-
- me._lastEvent = lastEvent;
+ this._lastEvent = lastEvent;
return changed;
}
- }]);
-
- return Chart;
- }();
-
- var invalidatePlugins = function invalidatePlugins() {
- return each(Chart.instances, function (chart) {
- return chart._plugins.invalidate();
- });
- };
-
- var enumerable = true;
- Object.defineProperties(Chart, {
- defaults: {
- enumerable: enumerable,
- value: defaults
- },
- instances: {
- enumerable: enumerable,
- value: instances
- },
- overrides: {
- enumerable: enumerable,
- value: overrides
- },
- registry: {
- enumerable: enumerable,
- value: registry
- },
- version: {
- enumerable: enumerable,
- value: version
- },
- getChart: {
- enumerable: enumerable,
- value: getChart
- },
- register: {
- enumerable: enumerable,
- value: function value() {
+ }, {
+ key: "_getActiveElements",
+ value: function _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
+ if (e.type === 'mouseout') {
+ return [];
+ }
+ if (!inChartArea) {
+ return lastActive;
+ }
+ var hoverOptions = this.options.hover;
+ return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
+ }
+ }], [{
+ key: "register",
+ value: function register() {
registry.add.apply(registry, arguments);
invalidatePlugins();
}
- },
- unregister: {
- enumerable: enumerable,
- value: function value() {
+ }, {
+ key: "unregister",
+ value: function unregister() {
registry.remove.apply(registry, arguments);
invalidatePlugins();
}
- }
- });
-
- function clipArc(ctx, element) {
+ }]);
+ return Chart;
+ }();
+ _defineProperty$w(Chart$1, "defaults", defaults);
+ _defineProperty$w(Chart$1, "instances", instances);
+ _defineProperty$w(Chart$1, "overrides", overrides);
+ _defineProperty$w(Chart$1, "registry", registry);
+ _defineProperty$w(Chart$1, "version", version);
+ _defineProperty$w(Chart$1, "getChart", getChart);
+ function invalidatePlugins() {
+ return each(Chart$1.instances, function (chart) {
+ return chart._plugins.invalidate();
+ });
+ }
+ function clipArc(ctx, element, endAngle) {
var startAngle = element.startAngle,
- endAngle = element.endAngle,
- pixelMargin = element.pixelMargin,
- x = element.x,
- y = element.y,
- outerRadius = element.outerRadius,
- innerRadius = element.innerRadius;
+ pixelMargin = element.pixelMargin,
+ x = element.x,
+ y = element.y,
+ outerRadius = element.outerRadius,
+ innerRadius = element.innerRadius;
var angleMargin = pixelMargin / outerRadius;
+ // Draw an inner border by clipping the arc and drawing a double-width border
+ // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders
ctx.beginPath();
ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
-
if (innerRadius > pixelMargin) {
angleMargin = pixelMargin / innerRadius;
ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
} else {
ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);
}
-
ctx.closePath();
ctx.clip();
}
-
- function pathArc(ctx, element) {
+ function toRadiusCorners(value) {
+ return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);
+ }
+ /**
+ * Parse border radius from the provided options
+ */
+ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
+ var o = toRadiusCorners(arc.options.borderRadius);
+ var halfThickness = (outerRadius - innerRadius) / 2;
+ var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
+ // Outer limits are complicated. We want to compute the available angular distance at
+ // a radius of outerRadius - borderRadius because for small angular distances, this term limits.
+ // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.
+ //
+ // If the borderRadius is large, that value can become negative.
+ // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius
+ // we know that the thickness term will dominate and compute the limits at that point
+ var computeOuterLimit = function computeOuterLimit(val) {
+ var outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
+ return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
+ };
+ return {
+ outerStart: computeOuterLimit(o.outerStart),
+ outerEnd: computeOuterLimit(o.outerEnd),
+ innerStart: _limitValue(o.innerStart, 0, innerLimit),
+ innerEnd: _limitValue(o.innerEnd, 0, innerLimit)
+ };
+ }
+ /**
+ * Convert (r, 𝜃) to (x, y)
+ */
+ function rThetaToXY(r, theta, x, y) {
+ return {
+ x: x + r * Math.cos(theta),
+ y: y + r * Math.sin(theta)
+ };
+ }
+ /**
+ * Path the arc, respecting border radius by separating into left and right halves.
+ *
+ * Start End
+ *
+ * 1--->a--->2 Outer
+ * / \
+ * 8 3
+ * | |
+ * | |
+ * 7 4
+ * \ /
+ * 6<---b<---5 Inner
+ */
+ function pathArc(ctx, element, offset, spacing, end, circular) {
var x = element.x,
- y = element.y,
- startAngle = element.startAngle,
- endAngle = element.endAngle,
- pixelMargin = element.pixelMargin;
- var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);
- var innerRadius = element.innerRadius + pixelMargin;
+ y = element.y,
+ start = element.startAngle,
+ pixelMargin = element.pixelMargin,
+ innerR = element.innerRadius;
+ var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
+ var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
+ var spacingOffset = 0;
+ var alpha = end - start;
+ if (spacing) {
+ // When spacing is present, it is the same for all items
+ // So we adjust the start and end angle of the arc such that
+ // the distance is the same as it would be without the spacing
+ var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
+ var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
+ var avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
+ var adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;
+ spacingOffset = (alpha - adjustedAngle) / 2;
+ }
+ var beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;
+ var angleOffset = (alpha - beta) / 2;
+ var startAngle = start + angleOffset + spacingOffset;
+ var endAngle = end - angleOffset - spacingOffset;
+ var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),
+ outerStart = _parseBorderRadius$.outerStart,
+ outerEnd = _parseBorderRadius$.outerEnd,
+ innerStart = _parseBorderRadius$.innerStart,
+ innerEnd = _parseBorderRadius$.innerEnd;
+ var outerStartAdjustedRadius = outerRadius - outerStart;
+ var outerEndAdjustedRadius = outerRadius - outerEnd;
+ var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
+ var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
+ var innerStartAdjustedRadius = innerRadius + innerStart;
+ var innerEndAdjustedRadius = innerRadius + innerEnd;
+ var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
+ var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
ctx.beginPath();
- ctx.arc(x, y, outerRadius, startAngle, endAngle);
- ctx.arc(x, y, innerRadius, endAngle, startAngle, true);
+ if (circular) {
+ // The first arc segments from point 1 to point a to point 2
+ var outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;
+ ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);
+ ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);
+ // The corner segment from point 2 to point 3
+ if (outerEnd > 0) {
+ var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
+ ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);
+ }
+ // The line from point 3 to point 4
+ var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
+ ctx.lineTo(p4.x, p4.y);
+ // The corner segment from point 4 to point 5
+ if (innerEnd > 0) {
+ var pCenter1 = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
+ ctx.arc(pCenter1.x, pCenter1.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
+ }
+ // The inner arc from point 5 to point b to point 6
+ var innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
+ ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
+ ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
+ // The corner segment from point 6 to point 7
+ if (innerStart > 0) {
+ var pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
+ ctx.arc(pCenter2.x, pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
+ }
+ // The line from point 7 to point 8
+ var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
+ ctx.lineTo(p8.x, p8.y);
+ // The corner segment from point 8 to point 1
+ if (outerStart > 0) {
+ var pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
+ ctx.arc(pCenter3.x, pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
+ }
+ } else {
+ ctx.moveTo(x, y);
+ var outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
+ var outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
+ ctx.lineTo(outerStartX, outerStartY);
+ var outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
+ var outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
+ ctx.lineTo(outerEndX, outerEndY);
+ }
ctx.closePath();
}
-
- function drawArc(ctx, element) {
- if (element.fullCircles) {
- element.endAngle = element.startAngle + TAU;
- pathArc(ctx, element);
-
- for (var i = 0; i < element.fullCircles; ++i) {
+ function drawArc(ctx, element, offset, spacing, circular) {
+ var fullCircles = element.fullCircles,
+ startAngle = element.startAngle,
+ circumference = element.circumference;
+ var endAngle = element.endAngle;
+ if (fullCircles) {
+ pathArc(ctx, element, offset, spacing, endAngle, circular);
+ for (var i = 0; i < fullCircles; ++i) {
ctx.fill();
}
+ if (!isNaN(circumference)) {
+ endAngle = startAngle + (circumference % TAU || TAU);
+ }
}
-
- if (!isNaN(element.circumference)) {
- element.endAngle = element.startAngle + element.circumference % TAU;
- }
-
- pathArc(ctx, element);
+ pathArc(ctx, element, offset, spacing, endAngle, circular);
ctx.fill();
+ return endAngle;
}
-
- function drawFullCircleBorders(ctx, element, inner) {
- var x = element.x,
- y = element.y,
- startAngle = element.startAngle,
- endAngle = element.endAngle,
- pixelMargin = element.pixelMargin;
- var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);
- var innerRadius = element.innerRadius + pixelMargin;
- var i;
-
- if (inner) {
- element.endAngle = element.startAngle + TAU;
- clipArc(ctx, element);
- element.endAngle = endAngle;
-
- if (element.endAngle === element.startAngle) {
- element.endAngle += TAU;
- element.fullCircles--;
- }
- }
-
- ctx.beginPath();
- ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);
-
- for (i = 0; i < element.fullCircles; ++i) {
- ctx.stroke();
- }
-
- ctx.beginPath();
- ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);
-
- for (i = 0; i < element.fullCircles; ++i) {
- ctx.stroke();
- }
- }
-
- function drawBorder(ctx, element) {
- var x = element.x,
- y = element.y,
- startAngle = element.startAngle,
- endAngle = element.endAngle,
- pixelMargin = element.pixelMargin,
- options = element.options;
- var outerRadius = element.outerRadius;
- var innerRadius = element.innerRadius + pixelMargin;
+ function drawBorder(ctx, element, offset, spacing, circular) {
+ var fullCircles = element.fullCircles,
+ startAngle = element.startAngle,
+ circumference = element.circumference,
+ options = element.options;
+ var borderWidth = options.borderWidth,
+ borderJoinStyle = options.borderJoinStyle;
var inner = options.borderAlign === 'inner';
-
- if (!options.borderWidth) {
+ if (!borderWidth) {
return;
}
-
if (inner) {
- ctx.lineWidth = options.borderWidth * 2;
- ctx.lineJoin = 'round';
+ ctx.lineWidth = borderWidth * 2;
+ ctx.lineJoin = borderJoinStyle || 'round';
} else {
- ctx.lineWidth = options.borderWidth;
- ctx.lineJoin = 'bevel';
+ ctx.lineWidth = borderWidth;
+ ctx.lineJoin = borderJoinStyle || 'bevel';
}
-
- if (element.fullCircles) {
- drawFullCircleBorders(ctx, element, inner);
+ var endAngle = element.endAngle;
+ if (fullCircles) {
+ pathArc(ctx, element, offset, spacing, endAngle, circular);
+ for (var i = 0; i < fullCircles; ++i) {
+ ctx.stroke();
+ }
+ if (!isNaN(circumference)) {
+ endAngle = startAngle + (circumference % TAU || TAU);
+ }
}
-
if (inner) {
- clipArc(ctx, element);
+ clipArc(ctx, element, endAngle);
}
-
- ctx.beginPath();
- ctx.arc(x, y, outerRadius, startAngle, endAngle);
- ctx.arc(x, y, innerRadius, endAngle, startAngle, true);
- ctx.closePath();
- ctx.stroke();
+ if (!fullCircles) {
+ pathArc(ctx, element, offset, spacing, endAngle, circular);
+ ctx.stroke();
+ }
}
-
var ArcElement = /*#__PURE__*/function (_Element2) {
- _inherits(ArcElement, _Element2);
-
- var _super12 = _createSuper(ArcElement);
-
+ _inherits$w(ArcElement, _Element2);
+ var _super12 = _createSuper$w(ArcElement);
function ArcElement(cfg) {
- var _this6;
-
- _classCallCheck(this, ArcElement);
-
- _this6 = _super12.call(this);
- _this6.options = undefined;
- _this6.circumference = undefined;
- _this6.startAngle = undefined;
- _this6.endAngle = undefined;
- _this6.innerRadius = undefined;
- _this6.outerRadius = undefined;
- _this6.pixelMargin = 0;
- _this6.fullCircles = 0;
-
+ var _this23;
+ _classCallCheck$x(this, ArcElement);
+ _this23 = _super12.call(this);
+ _this23.options = undefined;
+ _this23.circumference = undefined;
+ _this23.startAngle = undefined;
+ _this23.endAngle = undefined;
+ _this23.innerRadius = undefined;
+ _this23.outerRadius = undefined;
+ _this23.pixelMargin = 0;
+ _this23.fullCircles = 0;
if (cfg) {
- Object.assign(_assertThisInitialized(_this6), cfg);
+ Object.assign(_assertThisInitialized$w(_this23), cfg);
}
-
- return _this6;
+ return _this23;
}
-
- _createClass(ArcElement, [{
+ _createClass$x(ArcElement, [{
key: "inRange",
value: function inRange(chartX, chartY, useFinalPosition) {
var point = this.getProps(['x', 'y'], useFinalPosition);
-
- var _getAngleFromPoint = getAngleFromPoint(point, {
- x: chartX,
- y: chartY
- }),
- angle = _getAngleFromPoint.angle,
- distance = _getAngleFromPoint.distance;
-
+ var _getAngleFromPoint2 = getAngleFromPoint(point, {
+ x: chartX,
+ y: chartY
+ }),
+ angle = _getAngleFromPoint2.angle,
+ distance = _getAngleFromPoint2.distance;
var _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),
- startAngle = _this$getProps2.startAngle,
- endAngle = _this$getProps2.endAngle,
- innerRadius = _this$getProps2.innerRadius,
- outerRadius = _this$getProps2.outerRadius,
- circumference = _this$getProps2.circumference;
-
- var betweenAngles = circumference >= TAU || _angleBetween(angle, startAngle, endAngle);
-
- var withinRadius = distance >= innerRadius && distance <= outerRadius;
+ startAngle = _this$getProps2.startAngle,
+ endAngle = _this$getProps2.endAngle,
+ innerRadius = _this$getProps2.innerRadius,
+ outerRadius = _this$getProps2.outerRadius,
+ circumference = _this$getProps2.circumference;
+ var rAdjust = this.options.spacing / 2;
+ var _circumference = valueOrDefault(circumference, endAngle - startAngle);
+ var betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);
+ var withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
return betweenAngles && withinRadius;
}
}, {
key: "getCenterPoint",
value: function getCenterPoint(useFinalPosition) {
- var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'], useFinalPosition),
- x = _this$getProps3.x,
- y = _this$getProps3.y,
- startAngle = _this$getProps3.startAngle,
- endAngle = _this$getProps3.endAngle,
- innerRadius = _this$getProps3.innerRadius,
- outerRadius = _this$getProps3.outerRadius;
-
+ var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),
+ x = _this$getProps3.x,
+ y = _this$getProps3.y,
+ startAngle = _this$getProps3.startAngle,
+ endAngle = _this$getProps3.endAngle,
+ innerRadius = _this$getProps3.innerRadius,
+ outerRadius = _this$getProps3.outerRadius;
+ var _this$options13 = this.options,
+ offset = _this$options13.offset,
+ spacing = _this$options13.spacing;
var halfAngle = (startAngle + endAngle) / 2;
- var halfRadius = (innerRadius + outerRadius) / 2;
+ var halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
return {
x: x + Math.cos(halfAngle) * halfRadius,
y: y + Math.sin(halfAngle) * halfRadius
};
}
@@ -11688,301 +11623,281 @@
return this.getCenterPoint(useFinalPosition);
}
}, {
key: "draw",
value: function draw(ctx) {
- var me = this;
- var options = me.options;
- var offset = options.offset || 0;
- me.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;
- me.fullCircles = Math.floor(me.circumference / TAU);
-
- if (me.circumference === 0 || me.innerRadius < 0 || me.outerRadius < 0) {
+ var options = this.options,
+ circumference = this.circumference;
+ var offset = (options.offset || 0) / 4;
+ var spacing = (options.spacing || 0) / 2;
+ var circular = options.circular;
+ this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;
+ this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;
+ if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
return;
}
-
ctx.save();
-
- if (offset && me.circumference < TAU) {
- var halfAngle = (me.startAngle + me.endAngle) / 2;
- ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
- }
-
+ var halfAngle = (this.startAngle + this.endAngle) / 2;
+ ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
+ var fix = 1 - Math.sin(Math.min(PI, circumference || 0));
+ var radiusOffset = offset * fix;
ctx.fillStyle = options.backgroundColor;
ctx.strokeStyle = options.borderColor;
- drawArc(ctx, me);
- drawBorder(ctx, me);
+ drawArc(ctx, this, radiusOffset, spacing, circular);
+ drawBorder(ctx, this, radiusOffset, spacing, circular);
ctx.restore();
}
}]);
-
return ArcElement;
}(Element);
-
- ArcElement.id = 'arc';
- ArcElement.defaults = {
+ _defineProperty$w(ArcElement, "id", 'arc');
+ _defineProperty$w(ArcElement, "defaults", {
borderAlign: 'center',
borderColor: '#fff',
+ borderJoinStyle: undefined,
+ borderRadius: 0,
borderWidth: 2,
offset: 0,
- angle: undefined
- };
- ArcElement.defaultRoutes = {
+ spacing: 0,
+ angle: undefined,
+ circular: true
+ });
+ _defineProperty$w(ArcElement, "defaultRoutes", {
backgroundColor: 'backgroundColor'
- };
-
- function setStyle(ctx, vm) {
- ctx.lineCap = vm.borderCapStyle;
- ctx.setLineDash(vm.borderDash);
- ctx.lineDashOffset = vm.borderDashOffset;
- ctx.lineJoin = vm.borderJoinStyle;
- ctx.lineWidth = vm.borderWidth;
- ctx.strokeStyle = vm.borderColor;
+ });
+ function setStyle(ctx, options) {
+ var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;
+ ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);
+ ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));
+ ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);
+ ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);
+ ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);
+ ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);
}
-
function lineTo(ctx, previous, target) {
ctx.lineTo(target.x, target.y);
}
-
function getLineMethod(options) {
if (options.stepped) {
return _steppedLineTo;
}
-
- if (options.tension) {
+ if (options.tension || options.cubicInterpolationMode === 'monotone') {
return _bezierCurveTo;
}
-
return lineTo;
}
-
- function pathVars(points, segment, params) {
- params = params || {};
+ function pathVars(points, segment) {
+ var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var count = points.length;
- var start = Math.max(params.start || 0, segment.start);
- var end = Math.min(params.end || count - 1, segment.end);
+ var _params$start = params.start,
+ paramsStart = _params$start === void 0 ? 0 : _params$start,
+ _params$end = params.end,
+ paramsEnd = _params$end === void 0 ? count - 1 : _params$end;
+ var segmentStart = segment.start,
+ segmentEnd = segment.end;
+ var start = Math.max(paramsStart, segmentStart);
+ var end = Math.min(paramsEnd, segmentEnd);
+ var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;
return {
count: count,
start: start,
loop: segment.loop,
- ilen: end < start ? count + end - start : end - start
+ ilen: end < start && !outside ? count + end - start : end - start
};
}
-
function pathSegment(ctx, line, segment, params) {
var points = line.points,
- options = line.options;
-
+ options = line.options;
var _pathVars = pathVars(points, segment, params),
- count = _pathVars.count,
- start = _pathVars.start,
- loop = _pathVars.loop,
- ilen = _pathVars.ilen;
-
+ count = _pathVars.count,
+ start = _pathVars.start,
+ loop = _pathVars.loop,
+ ilen = _pathVars.ilen;
var lineMethod = getLineMethod(options);
-
- var _ref2 = params || {},
- _ref2$move = _ref2.move,
- move = _ref2$move === void 0 ? true : _ref2$move,
- reverse = _ref2.reverse;
-
+ var _ref5 = params || {},
+ _ref5$move = _ref5.move,
+ move = _ref5$move === void 0 ? true : _ref5$move,
+ reverse = _ref5.reverse;
var i, point, prev;
-
for (i = 0; i <= ilen; ++i) {
point = points[(start + (reverse ? ilen - i : i)) % count];
-
if (point.skip) {
continue;
} else if (move) {
ctx.moveTo(point.x, point.y);
move = false;
} else {
lineMethod(ctx, prev, point, reverse, options.stepped);
}
-
prev = point;
}
-
if (loop) {
point = points[(start + (reverse ? ilen : 0)) % count];
lineMethod(ctx, prev, point, reverse, options.stepped);
}
-
return !!loop;
}
-
function fastPathSegment(ctx, line, segment, params) {
var points = line.points;
-
var _pathVars2 = pathVars(points, segment, params),
- count = _pathVars2.count,
- start = _pathVars2.start,
- ilen = _pathVars2.ilen;
-
- var _ref3 = params || {},
- _ref3$move = _ref3.move,
- move = _ref3$move === void 0 ? true : _ref3$move,
- reverse = _ref3.reverse;
-
+ count = _pathVars2.count,
+ start = _pathVars2.start,
+ ilen = _pathVars2.ilen;
+ var _ref6 = params || {},
+ _ref6$move = _ref6.move,
+ move = _ref6$move === void 0 ? true : _ref6$move,
+ reverse = _ref6.reverse;
var avgX = 0;
var countX = 0;
var i, point, prevX, minY, maxY, lastY;
-
var pointIndex = function pointIndex(index) {
return (start + (reverse ? ilen - index : index)) % count;
};
-
var drawX = function drawX() {
if (minY !== maxY) {
ctx.lineTo(avgX, maxY);
ctx.lineTo(avgX, minY);
ctx.lineTo(avgX, lastY);
}
};
-
if (move) {
point = points[pointIndex(0)];
ctx.moveTo(point.x, point.y);
}
-
for (i = 0; i <= ilen; ++i) {
point = points[pointIndex(i)];
-
if (point.skip) {
continue;
}
-
var x = point.x;
var y = point.y;
var truncX = x | 0;
-
if (truncX === prevX) {
if (y < minY) {
minY = y;
} else if (y > maxY) {
maxY = y;
}
-
avgX = (countX * avgX + x) / ++countX;
} else {
drawX();
ctx.lineTo(x, y);
prevX = truncX;
countX = 0;
minY = maxY = y;
}
-
lastY = y;
}
-
drawX();
}
-
function _getSegmentMethod(line) {
var opts = line.options;
var borderDash = opts.borderDash && opts.borderDash.length;
- var useFastPath = !line._decimated && !line._loop && !opts.tension && !opts.stepped && !borderDash;
+ var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;
return useFastPath ? fastPathSegment : pathSegment;
}
-
function _getInterpolationMethod(options) {
if (options.stepped) {
return _steppedInterpolation;
}
-
- if (options.tension) {
+ if (options.tension || options.cubicInterpolationMode === 'monotone') {
return _bezierInterpolation;
}
-
return _pointInLine;
}
-
function strokePathWithCache(ctx, line, start, count) {
var path = line._path;
-
if (!path) {
path = line._path = new Path2D();
-
if (line.path(path, start, count)) {
path.closePath();
}
}
-
+ setStyle(ctx, line.options);
ctx.stroke(path);
}
-
function strokePathDirect(ctx, line, start, count) {
- ctx.beginPath();
-
- if (line.path(ctx, start, count)) {
- ctx.closePath();
+ var segments = line.segments,
+ options = line.options;
+ var segmentMethod = _getSegmentMethod(line);
+ var _iterator16 = _createForOfIteratorHelper$1(segments),
+ _step16;
+ try {
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
+ var segment = _step16.value;
+ setStyle(ctx, options, segment.style);
+ ctx.beginPath();
+ if (segmentMethod(ctx, line, segment, {
+ start: start,
+ end: start + count - 1
+ })) {
+ ctx.closePath();
+ }
+ ctx.stroke();
+ }
+ } catch (err) {
+ _iterator16.e(err);
+ } finally {
+ _iterator16.f();
}
-
- ctx.stroke();
}
-
var usePath2D = typeof Path2D === 'function';
- var strokePath = usePath2D ? strokePathWithCache : strokePathDirect;
-
+ function _draw(ctx, line, start, count) {
+ if (usePath2D && !line.options.segment) {
+ strokePathWithCache(ctx, line, start, count);
+ } else {
+ strokePathDirect(ctx, line, start, count);
+ }
+ }
var LineElement = /*#__PURE__*/function (_Element3) {
- _inherits(LineElement, _Element3);
-
- var _super13 = _createSuper(LineElement);
-
+ _inherits$w(LineElement, _Element3);
+ var _super13 = _createSuper$w(LineElement);
function LineElement(cfg) {
- var _this7;
-
- _classCallCheck(this, LineElement);
-
- _this7 = _super13.call(this);
- _this7.animated = true;
- _this7.options = undefined;
- _this7._loop = undefined;
- _this7._fullLoop = undefined;
- _this7._path = undefined;
- _this7._points = undefined;
- _this7._segments = undefined;
- _this7._decimated = false;
- _this7._pointsUpdated = false;
-
+ var _this24;
+ _classCallCheck$x(this, LineElement);
+ _this24 = _super13.call(this);
+ _this24.animated = true;
+ _this24.options = undefined;
+ _this24._chart = undefined;
+ _this24._loop = undefined;
+ _this24._fullLoop = undefined;
+ _this24._path = undefined;
+ _this24._points = undefined;
+ _this24._segments = undefined;
+ _this24._decimated = false;
+ _this24._pointsUpdated = false;
+ _this24._datasetIndex = undefined;
if (cfg) {
- Object.assign(_assertThisInitialized(_this7), cfg);
+ Object.assign(_assertThisInitialized$w(_this24), cfg);
}
-
- return _this7;
+ return _this24;
}
-
- _createClass(LineElement, [{
+ _createClass$x(LineElement, [{
key: "updateControlPoints",
- value: function updateControlPoints(chartArea) {
- var me = this;
- var options = me.options;
-
- if (options.tension && !options.stepped && !me._pointsUpdated) {
- var loop = options.spanGaps ? me._loop : me._fullLoop;
-
- _updateBezierControlPoints(me._points, options, chartArea, loop);
-
- me._pointsUpdated = true;
+ value: function updateControlPoints(chartArea, indexAxis) {
+ var options = this.options;
+ if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {
+ var loop = options.spanGaps ? this._loop : this._fullLoop;
+ _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);
+ this._pointsUpdated = true;
}
}
}, {
key: "points",
get: function get() {
return this._points;
},
set: function set(points) {
- var me = this;
- me._points = points;
- delete me._segments;
- delete me._path;
- me._pointsUpdated = false;
+ this._points = points;
+ delete this._segments;
+ delete this._path;
+ this._pointsUpdated = false;
}
}, {
key: "segments",
get: function get() {
- return this._segments || (this._segments = _computeSegments(this));
+ return this._segments || (this._segments = _computeSegments(this, this.options.segment));
}
}, {
key: "first",
value: function first() {
var segments = this.segments;
@@ -11998,110 +11913,92 @@
return count && points[segments[count - 1].end];
}
}, {
key: "interpolate",
value: function interpolate(point, property) {
- var me = this;
- var options = me.options;
+ var options = this.options;
var value = point[property];
- var points = me.points;
-
- var segments = _boundSegments(me, {
+ var points = this.points;
+ var segments = _boundSegments(this, {
property: property,
start: value,
end: value
});
-
if (!segments.length) {
return;
}
-
var result = [];
-
var _interpolate = _getInterpolationMethod(options);
-
var i, ilen;
-
for (i = 0, ilen = segments.length; i < ilen; ++i) {
var _segments$i = segments[i],
- start = _segments$i.start,
- end = _segments$i.end;
+ start = _segments$i.start,
+ end = _segments$i.end;
var p1 = points[start];
var p2 = points[end];
-
if (p1 === p2) {
result.push(p1);
continue;
}
-
var t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));
-
var interpolated = _interpolate(p1, p2, t, options.stepped);
-
interpolated[property] = point[property];
result.push(interpolated);
}
-
return result.length === 1 ? result[0] : result;
}
}, {
key: "pathSegment",
value: function pathSegment(ctx, segment, params) {
var segmentMethod = _getSegmentMethod(this);
-
return segmentMethod(ctx, this, segment, params);
}
}, {
key: "path",
value: function path(ctx, start, count) {
- var me = this;
- var segments = me.segments;
- var ilen = segments.length;
-
- var segmentMethod = _getSegmentMethod(me);
-
- var loop = me._loop;
+ var segments = this.segments;
+ var segmentMethod = _getSegmentMethod(this);
+ var loop = this._loop;
start = start || 0;
- count = count || me.points.length - start;
-
- for (var i = 0; i < ilen; ++i) {
- loop &= segmentMethod(ctx, me, segments[i], {
- start: start,
- end: start + count - 1
- });
+ count = count || this.points.length - start;
+ var _iterator17 = _createForOfIteratorHelper$1(segments),
+ _step17;
+ try {
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
+ var segment = _step17.value;
+ loop &= segmentMethod(ctx, this, segment, {
+ start: start,
+ end: start + count - 1
+ });
+ }
+ } catch (err) {
+ _iterator17.e(err);
+ } finally {
+ _iterator17.f();
}
-
return !!loop;
}
}, {
key: "draw",
value: function draw(ctx, chartArea, start, count) {
- var me = this;
- var options = me.options || {};
- var points = me.points || [];
-
- if (!points.length || !options.borderWidth) {
- return;
+ var options = this.options || {};
+ var points = this.points || [];
+ if (points.length && options.borderWidth) {
+ ctx.save();
+ _draw(ctx, this, start, count);
+ ctx.restore();
}
-
- ctx.save();
- setStyle(ctx, options);
- strokePath(ctx, me, start, count);
- ctx.restore();
-
- if (me.animated) {
- me._pointsUpdated = false;
- me._path = undefined;
+ if (this.animated) {
+ this._pointsUpdated = false;
+ this._path = undefined;
}
}
}]);
-
return LineElement;
}(Element);
-
- LineElement.id = 'line';
- LineElement.defaults = {
+ _defineProperty$w(LineElement, "id", 'line');
+ _defineProperty$w(LineElement, "defaults", {
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0,
borderJoinStyle: 'miter',
borderWidth: 3,
@@ -12109,62 +12006,58 @@
cubicInterpolationMode: 'default',
fill: false,
spanGaps: false,
stepped: false,
tension: 0
- };
- LineElement.defaultRoutes = {
+ });
+ _defineProperty$w(LineElement, "defaultRoutes", {
backgroundColor: 'backgroundColor',
borderColor: 'borderColor'
- };
- LineElement.descriptors = {
+ });
+ _defineProperty$w(LineElement, "descriptors", {
_scriptable: true,
_indexable: function _indexable(name) {
return name !== 'borderDash' && name !== 'fill';
}
- };
-
+ });
function inRange$1(el, pos, axis, useFinalPosition) {
var options = el.options;
-
var _el$getProps = el.getProps([axis], useFinalPosition),
- value = _el$getProps[axis];
-
+ value = _el$getProps[axis];
return Math.abs(pos - value) < options.radius + options.hitRadius;
}
-
var PointElement = /*#__PURE__*/function (_Element4) {
- _inherits(PointElement, _Element4);
+ _inherits$w(PointElement, _Element4);
+ var _super14 = _createSuper$w(PointElement);
+ /**
+ * @type {any}
+ */
- var _super14 = _createSuper(PointElement);
+ /**
+ * @type {any}
+ */
function PointElement(cfg) {
- var _this8;
-
- _classCallCheck(this, PointElement);
-
- _this8 = _super14.call(this);
- _this8.options = undefined;
- _this8.skip = undefined;
- _this8.stop = undefined;
-
+ var _this25;
+ _classCallCheck$x(this, PointElement);
+ _this25 = _super14.call(this);
+ _this25.options = undefined;
+ _this25.parsed = undefined;
+ _this25.skip = undefined;
+ _this25.stop = undefined;
if (cfg) {
- Object.assign(_assertThisInitialized(_this8), cfg);
+ Object.assign(_assertThisInitialized$w(_this25), cfg);
}
-
- return _this8;
+ return _this25;
}
-
- _createClass(PointElement, [{
+ _createClass$x(PointElement, [{
key: "inRange",
value: function inRange(mouseX, mouseY, useFinalPosition) {
var options = this.options;
-
var _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),
- x = _this$getProps4.x,
- y = _this$getProps4.y;
-
+ x = _this$getProps4.x,
+ y = _this$getProps4.y;
return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);
}
}, {
key: "inXRange",
value: function inXRange(mouseX, useFinalPosition) {
@@ -12177,13 +12070,12 @@
}
}, {
key: "getCenterPoint",
value: function getCenterPoint(useFinalPosition) {
var _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),
- x = _this$getProps5.x,
- y = _this$getProps5.y;
-
+ x = _this$getProps5.x,
+ y = _this$getProps5.y;
return {
x: x,
y: y
};
}
@@ -12196,59 +12088,52 @@
var borderWidth = radius && options.borderWidth || 0;
return (radius + borderWidth) * 2;
}
}, {
key: "draw",
- value: function draw(ctx) {
- var me = this;
- var options = me.options;
-
- if (me.skip || options.radius < 0.1) {
+ value: function draw(ctx, area) {
+ var options = this.options;
+ if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {
return;
}
-
ctx.strokeStyle = options.borderColor;
ctx.lineWidth = options.borderWidth;
ctx.fillStyle = options.backgroundColor;
- drawPoint(ctx, options, me.x, me.y);
+ drawPoint(ctx, options, this.x, this.y);
}
}, {
key: "getRange",
value: function getRange() {
var options = this.options || {};
+ // @ts-expect-error Fallbacks should never be hit in practice
return options.radius + options.hitRadius;
}
}]);
-
return PointElement;
}(Element);
-
- PointElement.id = 'point';
- PointElement.defaults = {
+ _defineProperty$w(PointElement, "id", 'point');
+ _defineProperty$w(PointElement, "defaults", {
borderWidth: 1,
hitRadius: 1,
hoverBorderWidth: 1,
hoverRadius: 4,
pointStyle: 'circle',
radius: 3,
rotation: 0
- };
- PointElement.defaultRoutes = {
+ });
+ _defineProperty$w(PointElement, "defaultRoutes", {
backgroundColor: 'backgroundColor',
borderColor: 'borderColor'
- };
-
+ });
function getBarBounds(bar, useFinalPosition) {
var _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),
- x = _bar$getProps.x,
- y = _bar$getProps.y,
- base = _bar$getProps.base,
- width = _bar$getProps.width,
- height = _bar$getProps.height;
-
+ x = _bar$getProps.x,
+ y = _bar$getProps.y,
+ base = _bar$getProps.base,
+ width = _bar$getProps.width,
+ height = _bar$getProps.height;
var left, right, top, bottom, half;
-
if (bar.horizontal) {
half = height / 2;
left = Math.min(x, base);
right = Math.max(x, base);
top = y - half;
@@ -12258,80 +12143,46 @@
left = x - half;
right = x + half;
top = Math.min(y, base);
bottom = Math.max(y, base);
}
-
return {
left: left,
top: top,
right: right,
bottom: bottom
};
}
-
- function parseBorderSkipped(bar) {
- var edge = bar.options.borderSkipped;
- var res = {};
-
- if (!edge) {
- return res;
- }
-
- edge = bar.horizontal ? parseEdge(edge, 'left', 'right', bar.base > bar.x) : parseEdge(edge, 'bottom', 'top', bar.base < bar.y);
- res[edge] = true;
- return res;
- }
-
- function parseEdge(edge, a, b, reverse) {
- if (reverse) {
- edge = swap(edge, a, b);
- edge = startEnd(edge, b, a);
- } else {
- edge = startEnd(edge, a, b);
- }
-
- return edge;
- }
-
- function swap(orig, v1, v2) {
- return orig === v1 ? v2 : orig === v2 ? v1 : orig;
- }
-
- function startEnd(v, start, end) {
- return v === 'start' ? start : v === 'end' ? end : v;
- }
-
function skipOrLimit(skip, value, min, max) {
- return skip ? 0 : Math.max(Math.min(value, max), min);
+ return skip ? 0 : _limitValue(value, min, max);
}
-
function parseBorderWidth(bar, maxW, maxH) {
var value = bar.options.borderWidth;
- var skip = parseBorderSkipped(bar);
+ var skip = bar.borderSkipped;
var o = toTRBL(value);
return {
t: skipOrLimit(skip.top, o.top, 0, maxH),
r: skipOrLimit(skip.right, o.right, 0, maxW),
b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),
l: skipOrLimit(skip.left, o.left, 0, maxW)
};
}
-
function parseBorderRadius(bar, maxW, maxH) {
+ var _bar$getProps2 = bar.getProps(['enableBorderRadius']),
+ enableBorderRadius = _bar$getProps2.enableBorderRadius;
var value = bar.options.borderRadius;
var o = toTRBLCorners(value);
var maxR = Math.min(maxW, maxH);
- var skip = parseBorderSkipped(bar);
+ var skip = bar.borderSkipped;
+ var enableBorder = enableBorderRadius || isObject(value);
return {
- topLeft: skipOrLimit(skip.top || skip.left, o.topLeft, 0, maxR),
- topRight: skipOrLimit(skip.top || skip.right, o.topRight, 0, maxR),
- bottomLeft: skipOrLimit(skip.bottom || skip.left, o.bottomLeft, 0, maxR),
- bottomRight: skipOrLimit(skip.bottom || skip.right, o.bottomRight, 0, maxR)
+ topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),
+ topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),
+ bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),
+ bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)
};
}
-
function boundingRects(bar) {
var bounds = getBarBounds(bar);
var width = bounds.right - bounds.left;
var height = bounds.bottom - bounds.top;
var border = parseBorderWidth(bar, width / 2, height / 2);
@@ -12356,91 +12207,78 @@
bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))
}
}
};
}
-
function _inRange(bar, x, y, useFinalPosition) {
var skipX = x === null;
var skipY = y === null;
var skipBoth = skipX && skipY;
var bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
- return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);
+ return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));
}
-
function hasRadius(radius) {
return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
}
-
- function addRoundedRectPath(ctx, rect) {
- var x = rect.x,
- y = rect.y,
- w = rect.w,
- h = rect.h,
- radius = rect.radius;
- ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
- ctx.lineTo(x, y + h - radius.bottomLeft);
- ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
- ctx.lineTo(x + w - radius.bottomRight, y + h);
- ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
- ctx.lineTo(x + w, y + radius.topRight);
- ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
- ctx.lineTo(x + radius.topLeft, y);
- }
-
function addNormalRectPath(ctx, rect) {
ctx.rect(rect.x, rect.y, rect.w, rect.h);
}
-
+ function inflateRect(rect, amount) {
+ var refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ var x = rect.x !== refRect.x ? -amount : 0;
+ var y = rect.y !== refRect.y ? -amount : 0;
+ var w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
+ var h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
+ return {
+ x: rect.x + x,
+ y: rect.y + y,
+ w: rect.w + w,
+ h: rect.h + h,
+ radius: rect.radius
+ };
+ }
var BarElement = /*#__PURE__*/function (_Element5) {
- _inherits(BarElement, _Element5);
-
- var _super15 = _createSuper(BarElement);
-
+ _inherits$w(BarElement, _Element5);
+ var _super15 = _createSuper$w(BarElement);
function BarElement(cfg) {
- var _this9;
-
- _classCallCheck(this, BarElement);
-
- _this9 = _super15.call(this);
- _this9.options = undefined;
- _this9.horizontal = undefined;
- _this9.base = undefined;
- _this9.width = undefined;
- _this9.height = undefined;
-
+ var _this26;
+ _classCallCheck$x(this, BarElement);
+ _this26 = _super15.call(this);
+ _this26.options = undefined;
+ _this26.horizontal = undefined;
+ _this26.base = undefined;
+ _this26.width = undefined;
+ _this26.height = undefined;
+ _this26.inflateAmount = undefined;
if (cfg) {
- Object.assign(_assertThisInitialized(_this9), cfg);
+ Object.assign(_assertThisInitialized$w(_this26), cfg);
}
-
- return _this9;
+ return _this26;
}
-
- _createClass(BarElement, [{
+ _createClass$x(BarElement, [{
key: "draw",
value: function draw(ctx) {
- var options = this.options;
-
+ var inflateAmount = this.inflateAmount,
+ _this$options14 = this.options,
+ borderColor = _this$options14.borderColor,
+ backgroundColor = _this$options14.backgroundColor;
var _boundingRects = boundingRects(this),
- inner = _boundingRects.inner,
- outer = _boundingRects.outer;
-
+ inner = _boundingRects.inner,
+ outer = _boundingRects.outer;
var addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;
ctx.save();
-
if (outer.w !== inner.w || outer.h !== inner.h) {
ctx.beginPath();
- addRectPath(ctx, outer);
+ addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
ctx.clip();
- addRectPath(ctx, inner);
- ctx.fillStyle = options.borderColor;
+ addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
+ ctx.fillStyle = borderColor;
ctx.fill('evenodd');
}
-
ctx.beginPath();
- addRectPath(ctx, inner);
- ctx.fillStyle = options.backgroundColor;
+ addRectPath(ctx, inflateRect(inner, inflateAmount));
+ ctx.fillStyle = backgroundColor;
ctx.fill();
ctx.restore();
}
}, {
key: "inRange",
@@ -12459,15 +12297,14 @@
}
}, {
key: "getCenterPoint",
value: function getCenterPoint(useFinalPosition) {
var _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),
- x = _this$getProps6.x,
- y = _this$getProps6.y,
- base = _this$getProps6.base,
- horizontal = _this$getProps6.horizontal;
-
+ x = _this$getProps6.x,
+ y = _this$getProps6.y,
+ base = _this$getProps6.base,
+ horizontal = _this$getProps6.horizontal;
return {
x: horizontal ? (x + base) / 2 : x,
y: horizontal ? y : (y + base) / 2
};
}
@@ -12475,155 +12312,240 @@
key: "getRange",
value: function getRange(axis) {
return axis === 'x' ? this.width / 2 : this.height / 2;
}
}]);
-
return BarElement;
}(Element);
-
- BarElement.id = 'bar';
- BarElement.defaults = {
+ _defineProperty$w(BarElement, "id", 'bar');
+ _defineProperty$w(BarElement, "defaults", {
borderSkipped: 'start',
borderWidth: 0,
borderRadius: 0,
+ inflateAmount: 'auto',
pointStyle: undefined
- };
- BarElement.defaultRoutes = {
+ });
+ _defineProperty$w(BarElement, "defaultRoutes", {
backgroundColor: 'backgroundColor',
borderColor: 'borderColor'
- };
+ });
var elements = /*#__PURE__*/Object.freeze({
__proto__: null,
ArcElement: ArcElement,
LineElement: LineElement,
PointElement: PointElement,
BarElement: BarElement
});
-
- function lttbDecimation(data, availableWidth, options) {
+ var BORDER_COLORS = ['rgb(54, 162, 235)', 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' // grey
+ ];
+ // Border colors with 50% transparency
+ var BACKGROUND_COLORS = /* #__PURE__ */BORDER_COLORS.map(function (color) {
+ return color.replace('rgb(', 'rgba(').replace(')', ', 0.5)');
+ });
+ function getBorderColor(i) {
+ return BORDER_COLORS[i % BORDER_COLORS.length];
+ }
+ function getBackgroundColor(i) {
+ return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];
+ }
+ function colorizeDefaultDataset(dataset, i) {
+ dataset.borderColor = getBorderColor(i);
+ dataset.backgroundColor = getBackgroundColor(i);
+ return ++i;
+ }
+ function colorizeDoughnutDataset(dataset, i) {
+ dataset.backgroundColor = dataset.data.map(function () {
+ return getBorderColor(i++);
+ });
+ return i;
+ }
+ function colorizePolarAreaDataset(dataset, i) {
+ dataset.backgroundColor = dataset.data.map(function () {
+ return getBackgroundColor(i++);
+ });
+ return i;
+ }
+ function getColorizer(chart) {
+ var i = 0;
+ return function (dataset, datasetIndex) {
+ var controller = chart.getDatasetMeta(datasetIndex).controller;
+ if (controller instanceof DoughnutController) {
+ i = colorizeDoughnutDataset(dataset, i);
+ } else if (controller instanceof PolarAreaController) {
+ i = colorizePolarAreaDataset(dataset, i);
+ } else if (controller) {
+ i = colorizeDefaultDataset(dataset, i);
+ }
+ };
+ }
+ function containsColorsDefinitions(descriptors) {
+ var k;
+ for (k in descriptors) {
+ if (descriptors[k].borderColor || descriptors[k].backgroundColor) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function containsColorsDefinition(descriptor) {
+ return descriptor && (descriptor.borderColor || descriptor.backgroundColor);
+ }
+ var plugin_colors = {
+ id: 'colors',
+ defaults: {
+ enabled: true,
+ forceOverride: false
+ },
+ beforeLayout: function beforeLayout(chart, _args, options) {
+ if (!options.enabled) {
+ return;
+ }
+ var _chart$config = chart.config,
+ datasets = _chart$config.data.datasets,
+ chartOptions = _chart$config.options;
+ var elements = chartOptions.elements;
+ if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {
+ return;
+ }
+ var colorizer = getColorizer(chart);
+ datasets.forEach(colorizer);
+ }
+ };
+ function lttbDecimation(data, start, count, availableWidth, options) {
var samples = options.samples || availableWidth;
+ if (samples >= count) {
+ return data.slice(start, start + count);
+ }
var decimated = [];
- var bucketWidth = (data.length - 2) / (samples - 2);
+ var bucketWidth = (count - 2) / (samples - 2);
var sampledIndex = 0;
- var a = 0;
+ var endIndex = start + count - 1;
+ var a = start;
var i, maxAreaPoint, maxArea, area, nextA;
decimated[sampledIndex++] = data[a];
-
for (i = 0; i < samples - 2; i++) {
var avgX = 0;
var avgY = 0;
var j = void 0;
- var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1;
- var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, data.length);
+ var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;
+ var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;
var avgRangeLength = avgRangeEnd - avgRangeStart;
-
for (j = avgRangeStart; j < avgRangeEnd; j++) {
- avgX = data[j].x;
- avgY = data[j].y;
+ avgX += data[j].x;
+ avgY += data[j].y;
}
-
avgX /= avgRangeLength;
avgY /= avgRangeLength;
- var rangeOffs = Math.floor(i * bucketWidth) + 1;
- var rangeTo = Math.floor((i + 1) * bucketWidth) + 1;
+ var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;
+ var rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;
var _data$a = data[a],
- pointAx = _data$a.x,
- pointAy = _data$a.y;
+ pointAx = _data$a.x,
+ pointAy = _data$a.y;
maxArea = area = -1;
-
for (j = rangeOffs; j < rangeTo; j++) {
area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));
-
if (area > maxArea) {
maxArea = area;
maxAreaPoint = data[j];
nextA = j;
}
}
-
decimated[sampledIndex++] = maxAreaPoint;
a = nextA;
}
-
- decimated[sampledIndex++] = data[data.length - 1];
+ decimated[sampledIndex++] = data[endIndex];
return decimated;
}
-
- function minMaxDecimation(data, availableWidth) {
+ function minMaxDecimation(data, start, count, availableWidth) {
var avgX = 0;
var countX = 0;
var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;
var decimated = [];
- var xMin = data[0].x;
- var xMax = data[data.length - 1].x;
+ var endIndex = start + count - 1;
+ var xMin = data[start].x;
+ var xMax = data[endIndex].x;
var dx = xMax - xMin;
-
- for (i = 0; i < data.length; ++i) {
+ for (i = start; i < start + count; ++i) {
point = data[i];
x = (point.x - xMin) / dx * availableWidth;
y = point.y;
var truncX = x | 0;
-
if (truncX === prevX) {
if (y < minY) {
minY = y;
minIndex = i;
} else if (y > maxY) {
maxY = y;
maxIndex = i;
}
-
avgX = (countX * avgX + point.x) / ++countX;
} else {
var lastIndex = i - 1;
-
if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {
var intermediateIndex1 = Math.min(minIndex, maxIndex);
var intermediateIndex2 = Math.max(minIndex, maxIndex);
-
if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {
decimated.push(_objectSpread2(_objectSpread2({}, data[intermediateIndex1]), {}, {
x: avgX
}));
}
-
if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {
decimated.push(_objectSpread2(_objectSpread2({}, data[intermediateIndex2]), {}, {
x: avgX
}));
}
}
-
if (i > 0 && lastIndex !== startIndex) {
decimated.push(data[lastIndex]);
}
-
decimated.push(point);
prevX = truncX;
countX = 0;
minY = maxY = y;
minIndex = maxIndex = startIndex = i;
}
}
-
return decimated;
}
-
+ function cleanDecimatedDataset(dataset) {
+ if (dataset._decimated) {
+ var data = dataset._data;
+ delete dataset._decimated;
+ delete dataset._data;
+ Object.defineProperty(dataset, 'data', {
+ value: data
+ });
+ }
+ }
function cleanDecimatedData(chart) {
chart.data.datasets.forEach(function (dataset) {
- if (dataset._decimated) {
- var data = dataset._data;
- delete dataset._decimated;
- delete dataset._data;
- Object.defineProperty(dataset, 'data', {
- value: data
- });
- }
+ cleanDecimatedDataset(dataset);
});
}
-
+ function getStartAndCountOfVisiblePointsSimplified(meta, points) {
+ var pointCount = points.length;
+ var start = 0;
+ var count;
+ var iScale = meta.iScale;
+ var _iScale$getUserBounds = iScale.getUserBounds(),
+ min = _iScale$getUserBounds.min,
+ max = _iScale$getUserBounds.max,
+ minDefined = _iScale$getUserBounds.minDefined,
+ maxDefined = _iScale$getUserBounds.maxDefined;
+ if (minDefined) {
+ start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);
+ }
+ if (maxDefined) {
+ count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;
+ } else {
+ count = pointCount - start;
+ }
+ return {
+ start: start,
+ count: count
+ };
+ }
var plugin_decimation = {
id: 'decimation',
defaults: {
algorithm: 'min-max',
enabled: false
@@ -12631,40 +12553,37 @@
beforeElementsUpdate: function beforeElementsUpdate(chart, args, options) {
if (!options.enabled) {
cleanDecimatedData(chart);
return;
}
-
var availableWidth = chart.width;
chart.data.datasets.forEach(function (dataset, datasetIndex) {
var _data = dataset._data,
- indexAxis = dataset.indexAxis;
+ indexAxis = dataset.indexAxis;
var meta = chart.getDatasetMeta(datasetIndex);
var data = _data || dataset.data;
-
if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {
return;
}
-
- if (meta.type !== 'line') {
+ if (!meta.controller.supportsDecimation) {
return;
}
-
var xAxis = chart.scales[meta.xAxisID];
-
if (xAxis.type !== 'linear' && xAxis.type !== 'time') {
return;
}
-
if (chart.options.parsing) {
return;
}
-
- if (data.length <= 4 * availableWidth) {
+ var _getStartAndCountOfVi3 = getStartAndCountOfVisiblePointsSimplified(meta, data),
+ start = _getStartAndCountOfVi3.start,
+ count = _getStartAndCountOfVi3.count;
+ var threshold = options.threshold || 4 * availableWidth;
+ if (count <= threshold) {
+ cleanDecimatedDataset(dataset);
return;
}
-
if (isNullOrUndef(_data)) {
dataset._data = data;
delete dataset.data;
Object.defineProperty(dataset, 'data', {
configurable: true,
@@ -12675,211 +12594,120 @@
set: function set(d) {
this._data = d;
}
});
}
-
var decimated;
-
switch (options.algorithm) {
case 'lttb':
- decimated = lttbDecimation(data, availableWidth, options);
+ decimated = lttbDecimation(data, start, count, availableWidth, options);
break;
-
case 'min-max':
- decimated = minMaxDecimation(data, availableWidth);
+ decimated = minMaxDecimation(data, start, count, availableWidth);
break;
-
default:
throw new Error("Unsupported decimation algorithm '".concat(options.algorithm, "'"));
}
-
dataset._decimated = decimated;
});
},
destroy: function destroy(chart) {
cleanDecimatedData(chart);
}
};
-
- function getLineByIndex(chart, index) {
- var meta = chart.getDatasetMeta(index);
- var visible = meta && chart.isDatasetVisible(index);
- return visible ? meta.dataset : null;
- }
-
- function parseFillOption(line) {
- var options = line.options;
- var fillOption = options.fill;
- var fill = valueOrDefault(fillOption && fillOption.target, fillOption);
-
- if (fill === undefined) {
- fill = !!options.backgroundColor;
- }
-
- if (fill === false || fill === null) {
- return false;
- }
-
- if (fill === true) {
- return 'origin';
- }
-
- return fill;
- }
-
- function decodeFill(line, index, count) {
- var fill = parseFillOption(line);
-
- if (isObject(fill)) {
- return isNaN(fill.value) ? false : fill;
- }
-
- var target = parseFloat(fill);
-
- if (isNumberFinite(target) && Math.floor(target) === target) {
- if (fill[0] === '-' || fill[0] === '+') {
- target = index + target;
+ function _segments(line, target, property) {
+ var segments = line.segments;
+ var points = line.points;
+ var tpoints = target.points;
+ var parts = [];
+ var _iterator18 = _createForOfIteratorHelper$1(segments),
+ _step18;
+ try {
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
+ var segment = _step18.value;
+ var start = segment.start,
+ end = segment.end;
+ end = _findSegmentEnd(start, end, points);
+ var bounds = _getBounds(property, points[start], points[end], segment.loop);
+ if (!target.segments) {
+ parts.push({
+ source: segment,
+ target: bounds,
+ start: points[start],
+ end: points[end]
+ });
+ continue;
+ }
+ var targetSegments = _boundSegments(target, bounds);
+ var _iterator19 = _createForOfIteratorHelper$1(targetSegments),
+ _step19;
+ try {
+ for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
+ var tgt = _step19.value;
+ var subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
+ var fillSources = _boundSegment(segment, points, subBounds);
+ var _iterator20 = _createForOfIteratorHelper$1(fillSources),
+ _step20;
+ try {
+ for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
+ var fillSource = _step20.value;
+ parts.push({
+ source: fillSource,
+ target: tgt,
+ start: _defineProperty$w({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),
+ end: _defineProperty$w({}, property, _getEdge(bounds, subBounds, 'end', Math.min))
+ });
+ }
+ } catch (err) {
+ _iterator20.e(err);
+ } finally {
+ _iterator20.f();
+ }
+ }
+ } catch (err) {
+ _iterator19.e(err);
+ } finally {
+ _iterator19.f();
+ }
}
-
- if (target === index || target < 0 || target >= count) {
- return false;
- }
-
- return target;
+ } catch (err) {
+ _iterator18.e(err);
+ } finally {
+ _iterator18.f();
}
-
- return ['origin', 'start', 'end', 'stack'].indexOf(fill) >= 0 && fill;
+ return parts;
}
-
- function computeLinearBoundary(source) {
- var _source$scale = source.scale,
- scale = _source$scale === void 0 ? {} : _source$scale,
- fill = source.fill;
- var target = null;
- var horizontal;
-
- if (fill === 'start') {
- target = scale.bottom;
- } else if (fill === 'end') {
- target = scale.top;
- } else if (isObject(fill)) {
- target = scale.getPixelForValue(fill.value);
- } else if (scale.getBasePixel) {
- target = scale.getBasePixel();
+ function _getBounds(property, first, last, loop) {
+ if (loop) {
+ return;
}
-
- if (isNumberFinite(target)) {
- horizontal = scale.isHorizontal();
- return {
- x: horizontal ? target : null,
- y: horizontal ? null : target
- };
+ var start = first[property];
+ var end = last[property];
+ if (property === 'angle') {
+ start = _normalizeAngle(start);
+ end = _normalizeAngle(end);
}
-
- return null;
+ return {
+ property: property,
+ start: start,
+ end: end
+ };
}
-
- var simpleArc = /*#__PURE__*/function () {
- function simpleArc(opts) {
- _classCallCheck(this, simpleArc);
-
- this.x = opts.x;
- this.y = opts.y;
- this.radius = opts.radius;
- }
-
- _createClass(simpleArc, [{
- key: "pathSegment",
- value: function pathSegment(ctx, bounds, opts) {
- var x = this.x,
- y = this.y,
- radius = this.radius;
- bounds = bounds || {
- start: 0,
- end: TAU
- };
- ctx.arc(x, y, radius, bounds.end, bounds.start, true);
- return !opts.bounds;
- }
- }, {
- key: "interpolate",
- value: function interpolate(point) {
- var x = this.x,
- y = this.y,
- radius = this.radius;
- var angle = point.angle;
- return {
- x: x + Math.cos(angle) * radius,
- y: y + Math.sin(angle) * radius,
- angle: angle
- };
- }
- }]);
-
- return simpleArc;
- }();
-
- function computeCircularBoundary(source) {
- var scale = source.scale,
- fill = source.fill;
- var options = scale.options;
- var length = scale.getLabels().length;
- var target = [];
- var start = options.reverse ? scale.max : scale.min;
- var end = options.reverse ? scale.min : scale.max;
- var i, center, value;
-
- if (fill === 'start') {
- value = start;
- } else if (fill === 'end') {
- value = end;
- } else if (isObject(fill)) {
- value = fill.value;
- } else {
- value = scale.getBaseValue();
- }
-
- if (options.grid.circular) {
- center = scale.getPointPositionForValue(0, start);
- return new simpleArc({
- x: center.x,
- y: center.y,
- radius: scale.getDistanceFromCenterForValue(value)
- });
- }
-
- for (i = 0; i < length; ++i) {
- target.push(scale.getPointPositionForValue(i, value));
- }
-
- return target;
- }
-
- function computeBoundary(source) {
- var scale = source.scale || {};
-
- if (scale.getPointPositionForValue) {
- return computeCircularBoundary(source);
- }
-
- return computeLinearBoundary(source);
- }
-
- function pointsFromSegments(boundary, line) {
- var _ref4 = boundary || {},
- _ref4$x = _ref4.x,
- x = _ref4$x === void 0 ? null : _ref4$x,
- _ref4$y = _ref4.y,
- y = _ref4$y === void 0 ? null : _ref4$y;
-
+ function _pointsFromSegments(boundary, line) {
+ var _ref7 = boundary || {},
+ _ref7$x = _ref7.x,
+ x = _ref7$x === void 0 ? null : _ref7$x,
+ _ref7$y = _ref7.y,
+ y = _ref7$y === void 0 ? null : _ref7$y;
var linePoints = line.points;
var points = [];
- line.segments.forEach(function (segment) {
- var first = linePoints[segment.start];
- var last = linePoints[segment.end];
-
+ line.segments.forEach(function (_ref8) {
+ var start = _ref8.start,
+ end = _ref8.end;
+ end = _findSegmentEnd(start, end, linePoints);
+ var first = linePoints[start];
+ var last = linePoints[end];
if (y !== null) {
points.push({
x: first.x,
y: y
});
@@ -12898,645 +12726,702 @@
});
}
});
return points;
}
-
- function buildStackLine(source) {
- var chart = source.chart,
- scale = source.scale,
- index = source.index,
- line = source.line;
+ function _findSegmentEnd(start, end, points) {
+ for (; end > start; end--) {
+ var point = points[end];
+ if (!isNaN(point.x) && !isNaN(point.y)) {
+ break;
+ }
+ }
+ return end;
+ }
+ function _getEdge(a, b, prop, fn) {
+ if (a && b) {
+ return fn(a[prop], b[prop]);
+ }
+ return a ? a[prop] : b ? b[prop] : 0;
+ }
+ function _createBoundaryLine(boundary, line) {
var points = [];
+ var _loop = false;
+ if (isArray(boundary)) {
+ _loop = true;
+ points = boundary;
+ } else {
+ points = _pointsFromSegments(boundary, line);
+ }
+ return points.length ? new LineElement({
+ points: points,
+ options: {
+ tension: 0
+ },
+ _loop: _loop,
+ _fullLoop: _loop
+ }) : null;
+ }
+ function _shouldApplyFill(source) {
+ return source && source.fill !== false;
+ }
+ function _resolveTarget(sources, index, propagate) {
+ var source = sources[index];
+ var fill = source.fill;
+ var visited = [index];
+ var target;
+ if (!propagate) {
+ return fill;
+ }
+ while (fill !== false && visited.indexOf(fill) === -1) {
+ if (!isNumberFinite(fill)) {
+ return fill;
+ }
+ target = sources[fill];
+ if (!target) {
+ return false;
+ }
+ if (target.visible) {
+ return fill;
+ }
+ visited.push(fill);
+ fill = target.fill;
+ }
+ return false;
+ }
+ function _decodeFill(line, index, count) {
+ var fill = parseFillOption(line);
+ if (isObject(fill)) {
+ return isNaN(fill.value) ? false : fill;
+ }
+ var target = parseFloat(fill);
+ if (isNumberFinite(target) && Math.floor(target) === target) {
+ return decodeTargetIndex(fill[0], index, target, count);
+ }
+ return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;
+ }
+ function decodeTargetIndex(firstCh, index, target, count) {
+ if (firstCh === '-' || firstCh === '+') {
+ target = index + target;
+ }
+ if (target === index || target < 0 || target >= count) {
+ return false;
+ }
+ return target;
+ }
+ function _getTargetPixel(fill, scale) {
+ var pixel = null;
+ if (fill === 'start') {
+ pixel = scale.bottom;
+ } else if (fill === 'end') {
+ pixel = scale.top;
+ } else if (isObject(fill)) {
+ pixel = scale.getPixelForValue(fill.value);
+ } else if (scale.getBasePixel) {
+ pixel = scale.getBasePixel();
+ }
+ return pixel;
+ }
+ function _getTargetValue(fill, scale, startValue) {
+ var value;
+ if (fill === 'start') {
+ value = startValue;
+ } else if (fill === 'end') {
+ value = scale.options.reverse ? scale.min : scale.max;
+ } else if (isObject(fill)) {
+ value = fill.value;
+ } else {
+ value = scale.getBaseValue();
+ }
+ return value;
+ }
+ function parseFillOption(line) {
+ var options = line.options;
+ var fillOption = options.fill;
+ var fill = valueOrDefault(fillOption && fillOption.target, fillOption);
+ if (fill === undefined) {
+ fill = !!options.backgroundColor;
+ }
+ if (fill === false || fill === null) {
+ return false;
+ }
+ if (fill === true) {
+ return 'origin';
+ }
+ return fill;
+ }
+ function _buildStackLine(source) {
+ var scale = source.scale,
+ index = source.index,
+ line = source.line;
+ var points = [];
var segments = line.segments;
var sourcePoints = line.points;
- var linesBelow = getLinesBelow(chart, index);
- linesBelow.push(createBoundaryLine({
+ var linesBelow = getLinesBelow(scale, index);
+ linesBelow.push(_createBoundaryLine({
x: null,
y: scale.bottom
}, line));
-
for (var i = 0; i < segments.length; i++) {
var segment = segments[i];
-
for (var j = segment.start; j <= segment.end; j++) {
addPointsBelow(points, sourcePoints[j], linesBelow);
}
}
-
return new LineElement({
points: points,
options: {}
});
}
-
- var isLineAndNotInHideAnimation = function isLineAndNotInHideAnimation(meta) {
- return meta.type === 'line' && !meta.hidden;
- };
-
- function getLinesBelow(chart, index) {
+ function getLinesBelow(scale, index) {
var below = [];
- var metas = chart.getSortedVisibleDatasetMetas();
-
+ var metas = scale.getMatchingVisibleMetas('line');
for (var i = 0; i < metas.length; i++) {
var meta = metas[i];
-
if (meta.index === index) {
break;
}
-
- if (isLineAndNotInHideAnimation(meta)) {
+ if (!meta.hidden) {
below.unshift(meta.dataset);
}
}
-
return below;
}
-
function addPointsBelow(points, sourcePoint, linesBelow) {
var postponed = [];
-
for (var j = 0; j < linesBelow.length; j++) {
var line = linesBelow[j];
-
var _findPoint = findPoint(line, sourcePoint, 'x'),
- first = _findPoint.first,
- last = _findPoint.last,
- point = _findPoint.point;
-
+ first = _findPoint.first,
+ last = _findPoint.last,
+ point = _findPoint.point;
if (!point || first && last) {
continue;
}
-
if (first) {
postponed.unshift(point);
} else {
points.push(point);
-
if (!last) {
break;
}
}
}
-
points.push.apply(points, postponed);
}
-
function findPoint(line, sourcePoint, property) {
var point = line.interpolate(sourcePoint, property);
-
if (!point) {
return {};
}
-
var pointValue = point[property];
var segments = line.segments;
var linePoints = line.points;
var first = false;
var last = false;
-
for (var i = 0; i < segments.length; i++) {
var segment = segments[i];
var firstValue = linePoints[segment.start][property];
var lastValue = linePoints[segment.end][property];
-
- if (pointValue >= firstValue && pointValue <= lastValue) {
+ if (_isBetween(pointValue, firstValue, lastValue)) {
first = pointValue === firstValue;
last = pointValue === lastValue;
break;
}
}
-
return {
first: first,
last: last,
point: point
};
}
-
- function getTarget(source) {
+ var simpleArc = /*#__PURE__*/function () {
+ function simpleArc(opts) {
+ _classCallCheck$x(this, simpleArc);
+ this.x = opts.x;
+ this.y = opts.y;
+ this.radius = opts.radius;
+ }
+ _createClass$x(simpleArc, [{
+ key: "pathSegment",
+ value: function pathSegment(ctx, bounds, opts) {
+ var x = this.x,
+ y = this.y,
+ radius = this.radius;
+ bounds = bounds || {
+ start: 0,
+ end: TAU
+ };
+ ctx.arc(x, y, radius, bounds.end, bounds.start, true);
+ return !opts.bounds;
+ }
+ }, {
+ key: "interpolate",
+ value: function interpolate(point) {
+ var x = this.x,
+ y = this.y,
+ radius = this.radius;
+ var angle = point.angle;
+ return {
+ x: x + Math.cos(angle) * radius,
+ y: y + Math.sin(angle) * radius,
+ angle: angle
+ };
+ }
+ }]);
+ return simpleArc;
+ }();
+ function _getTarget(source) {
var chart = source.chart,
- fill = source.fill,
- line = source.line;
-
+ fill = source.fill,
+ line = source.line;
if (isNumberFinite(fill)) {
return getLineByIndex(chart, fill);
}
-
if (fill === 'stack') {
- return buildStackLine(source);
+ return _buildStackLine(source);
}
-
+ if (fill === 'shape') {
+ return true;
+ }
var boundary = computeBoundary(source);
-
if (boundary instanceof simpleArc) {
return boundary;
}
-
- return createBoundaryLine(boundary, line);
+ return _createBoundaryLine(boundary, line);
}
-
- function createBoundaryLine(boundary, line) {
- var points = [];
- var _loop = false;
-
- if (isArray(boundary)) {
- _loop = true;
- points = boundary;
- } else {
- points = pointsFromSegments(boundary, line);
- }
-
- return points.length ? new LineElement({
- points: points,
- options: {
- tension: 0
- },
- _loop: _loop,
- _fullLoop: _loop
- }) : null;
+ function getLineByIndex(chart, index) {
+ var meta = chart.getDatasetMeta(index);
+ var visible = meta && chart.isDatasetVisible(index);
+ return visible ? meta.dataset : null;
}
-
- function resolveTarget(sources, index, propagate) {
- var source = sources[index];
- var fill = source.fill;
- var visited = [index];
- var target;
-
- if (!propagate) {
- return fill;
+ function computeBoundary(source) {
+ var scale = source.scale || {};
+ if (scale.getPointPositionForValue) {
+ return computeCircularBoundary(source);
}
-
- while (fill !== false && visited.indexOf(fill) === -1) {
- if (!isNumberFinite(fill)) {
- return fill;
- }
-
- target = sources[fill];
-
- if (!target) {
- return false;
- }
-
- if (target.visible) {
- return fill;
- }
-
- visited.push(fill);
- fill = target.fill;
- }
-
- return false;
+ return computeLinearBoundary(source);
}
-
- function _clip(ctx, target, clipY) {
- ctx.beginPath();
- target.path(ctx);
- ctx.lineTo(target.last().x, clipY);
- ctx.lineTo(target.first().x, clipY);
- ctx.closePath();
- ctx.clip();
- }
-
- function getBounds(property, first, last, loop) {
- if (loop) {
- return;
+ function computeLinearBoundary(source) {
+ var _source$scale = source.scale,
+ scale = _source$scale === void 0 ? {} : _source$scale,
+ fill = source.fill;
+ var pixel = _getTargetPixel(fill, scale);
+ if (isNumberFinite(pixel)) {
+ var horizontal = scale.isHorizontal();
+ return {
+ x: horizontal ? pixel : null,
+ y: horizontal ? null : pixel
+ };
}
-
- var start = first[property];
- var end = last[property];
-
- if (property === 'angle') {
- start = _normalizeAngle(start);
- end = _normalizeAngle(end);
- }
-
- return {
- property: property,
- start: start,
- end: end
- };
+ return null;
}
-
- function _getEdge(a, b, prop, fn) {
- if (a && b) {
- return fn(a[prop], b[prop]);
+ function computeCircularBoundary(source) {
+ var scale = source.scale,
+ fill = source.fill;
+ var options = scale.options;
+ var length = scale.getLabels().length;
+ var start = options.reverse ? scale.max : scale.min;
+ var value = _getTargetValue(fill, scale, start);
+ var target = [];
+ if (options.grid.circular) {
+ var center = scale.getPointPositionForValue(0, start);
+ return new simpleArc({
+ x: center.x,
+ y: center.y,
+ radius: scale.getDistanceFromCenterForValue(value)
+ });
}
-
- return a ? a[prop] : b ? b[prop] : 0;
- }
-
- function _segments(line, target, property) {
- var segments = line.segments;
- var points = line.points;
- var tpoints = target.points;
- var parts = [];
-
- for (var i = 0; i < segments.length; i++) {
- var segment = segments[i];
- var bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);
-
- if (!target.segments) {
- parts.push({
- source: segment,
- target: bounds,
- start: points[segment.start],
- end: points[segment.end]
- });
- continue;
- }
-
- var subs = _boundSegments(target, bounds);
-
- for (var j = 0; j < subs.length; ++j) {
- var sub = subs[j];
- var subBounds = getBounds(property, tpoints[sub.start], tpoints[sub.end], sub.loop);
-
- var fillSources = _boundSegment(segment, points, subBounds);
-
- for (var k = 0; k < fillSources.length; k++) {
- parts.push({
- source: fillSources[k],
- target: sub,
- start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),
- end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))
- });
- }
- }
+ for (var i = 0; i < length; ++i) {
+ target.push(scale.getPointPositionForValue(i, value));
}
-
- return parts;
+ return target;
}
-
- function clipBounds(ctx, scale, bounds) {
- var _scale$chart$chartAre = scale.chart.chartArea,
- top = _scale$chart$chartAre.top,
- bottom = _scale$chart$chartAre.bottom;
-
- var _ref5 = bounds || {},
- property = _ref5.property,
- start = _ref5.start,
- end = _ref5.end;
-
- if (property === 'x') {
- ctx.beginPath();
- ctx.rect(start, top, end - start, bottom - top);
- ctx.clip();
- }
- }
-
- function interpolatedLineTo(ctx, target, point, property) {
- var interpolatedPoint = target.interpolate(point, property);
-
- if (interpolatedPoint) {
- ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);
- }
- }
-
- function _fill(ctx, cfg) {
- var line = cfg.line,
- target = cfg.target,
- property = cfg.property,
- color = cfg.color,
- scale = cfg.scale;
-
- var segments = _segments(line, target, property);
-
- ctx.fillStyle = color;
-
- for (var i = 0, ilen = segments.length; i < ilen; ++i) {
- var _segments$i2 = segments[i],
- src = _segments$i2.source,
- tgt = _segments$i2.target,
- start = _segments$i2.start,
- end = _segments$i2.end;
- ctx.save();
- clipBounds(ctx, scale, getBounds(property, start, end));
- ctx.beginPath();
- var lineLoop = !!line.pathSegment(ctx, src);
-
- if (lineLoop) {
- ctx.closePath();
- } else {
- interpolatedLineTo(ctx, target, end, property);
- }
-
- var targetLoop = !!target.pathSegment(ctx, tgt, {
- move: lineLoop,
- reverse: true
+ function _drawfill(ctx, source, area) {
+ var target = _getTarget(source);
+ var line = source.line,
+ scale = source.scale,
+ axis = source.axis;
+ var lineOpts = line.options;
+ var fillOption = lineOpts.fill;
+ var color = lineOpts.backgroundColor;
+ var _ref9 = fillOption || {},
+ _ref9$above = _ref9.above,
+ above = _ref9$above === void 0 ? color : _ref9$above,
+ _ref9$below = _ref9.below,
+ below = _ref9$below === void 0 ? color : _ref9$below;
+ if (target && line.points.length) {
+ clipArea(ctx, area);
+ doFill(ctx, {
+ line: line,
+ target: target,
+ above: above,
+ below: below,
+ area: area,
+ scale: scale,
+ axis: axis
});
- var loop = lineLoop && targetLoop;
-
- if (!loop) {
- interpolatedLineTo(ctx, target, start, property);
- }
-
- ctx.closePath();
- ctx.fill(loop ? 'evenodd' : 'nonzero');
- ctx.restore();
+ unclipArea(ctx);
}
}
-
function doFill(ctx, cfg) {
var line = cfg.line,
- target = cfg.target,
- above = cfg.above,
- below = cfg.below,
- area = cfg.area,
- scale = cfg.scale;
- var property = line._loop ? 'angle' : 'x';
+ target = cfg.target,
+ above = cfg.above,
+ below = cfg.below,
+ area = cfg.area,
+ scale = cfg.scale;
+ var property = line._loop ? 'angle' : cfg.axis;
ctx.save();
-
if (property === 'x' && below !== above) {
- _clip(ctx, target, area.top);
-
- _fill(ctx, {
+ clipVertical(ctx, target, area.top);
+ fill(ctx, {
line: line,
target: target,
color: above,
scale: scale,
property: property
});
-
ctx.restore();
ctx.save();
-
- _clip(ctx, target, area.bottom);
+ clipVertical(ctx, target, area.bottom);
}
-
- _fill(ctx, {
+ fill(ctx, {
line: line,
target: target,
color: below,
scale: scale,
property: property
});
-
ctx.restore();
}
-
- var plugin_filler = {
+ function clipVertical(ctx, target, clipY) {
+ var segments = target.segments,
+ points = target.points;
+ var first = true;
+ var lineLoop = false;
+ ctx.beginPath();
+ var _iterator21 = _createForOfIteratorHelper$1(segments),
+ _step21;
+ try {
+ for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
+ var segment = _step21.value;
+ var start = segment.start,
+ end = segment.end;
+ var firstPoint = points[start];
+ var lastPoint = points[_findSegmentEnd(start, end, points)];
+ if (first) {
+ ctx.moveTo(firstPoint.x, firstPoint.y);
+ first = false;
+ } else {
+ ctx.lineTo(firstPoint.x, clipY);
+ ctx.lineTo(firstPoint.x, firstPoint.y);
+ }
+ lineLoop = !!target.pathSegment(ctx, segment, {
+ move: lineLoop
+ });
+ if (lineLoop) {
+ ctx.closePath();
+ } else {
+ ctx.lineTo(lastPoint.x, clipY);
+ }
+ }
+ } catch (err) {
+ _iterator21.e(err);
+ } finally {
+ _iterator21.f();
+ }
+ ctx.lineTo(target.first().x, clipY);
+ ctx.closePath();
+ ctx.clip();
+ }
+ function fill(ctx, cfg) {
+ var line = cfg.line,
+ target = cfg.target,
+ property = cfg.property,
+ color = cfg.color,
+ scale = cfg.scale;
+ var segments = _segments(line, target, property);
+ var _iterator22 = _createForOfIteratorHelper$1(segments),
+ _step22;
+ try {
+ for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
+ var _step22$value = _step22.value,
+ src = _step22$value.source,
+ tgt = _step22$value.target,
+ start = _step22$value.start,
+ end = _step22$value.end;
+ var _src$style = src.style,
+ _src$style2 = _src$style === void 0 ? {} : _src$style,
+ _src$style2$backgroun = _src$style2.backgroundColor,
+ backgroundColor = _src$style2$backgroun === void 0 ? color : _src$style2$backgroun;
+ var notShape = target !== true;
+ ctx.save();
+ ctx.fillStyle = backgroundColor;
+ clipBounds(ctx, scale, notShape && _getBounds(property, start, end));
+ ctx.beginPath();
+ var lineLoop = !!line.pathSegment(ctx, src);
+ var loop = void 0;
+ if (notShape) {
+ if (lineLoop) {
+ ctx.closePath();
+ } else {
+ interpolatedLineTo(ctx, target, end, property);
+ }
+ var targetLoop = !!target.pathSegment(ctx, tgt, {
+ move: lineLoop,
+ reverse: true
+ });
+ loop = lineLoop && targetLoop;
+ if (!loop) {
+ interpolatedLineTo(ctx, target, start, property);
+ }
+ }
+ ctx.closePath();
+ ctx.fill(loop ? 'evenodd' : 'nonzero');
+ ctx.restore();
+ }
+ } catch (err) {
+ _iterator22.e(err);
+ } finally {
+ _iterator22.f();
+ }
+ }
+ function clipBounds(ctx, scale, bounds) {
+ var _scale$chart$chartAre = scale.chart.chartArea,
+ top = _scale$chart$chartAre.top,
+ bottom = _scale$chart$chartAre.bottom;
+ var _ref10 = bounds || {},
+ property = _ref10.property,
+ start = _ref10.start,
+ end = _ref10.end;
+ if (property === 'x') {
+ ctx.beginPath();
+ ctx.rect(start, top, end - start, bottom - top);
+ ctx.clip();
+ }
+ }
+ function interpolatedLineTo(ctx, target, point, property) {
+ var interpolatedPoint = target.interpolate(point, property);
+ if (interpolatedPoint) {
+ ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);
+ }
+ }
+ var index = {
id: 'filler',
afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {
var count = (chart.data.datasets || []).length;
- var propagate = options.propagate;
var sources = [];
var meta, i, line, source;
-
for (i = 0; i < count; ++i) {
meta = chart.getDatasetMeta(i);
line = meta.dataset;
source = null;
-
if (line && line.options && line instanceof LineElement) {
source = {
visible: chart.isDatasetVisible(i),
index: i,
- fill: decodeFill(line, i, count),
+ fill: _decodeFill(line, i, count),
chart: chart,
+ axis: meta.controller.options.indexAxis,
scale: meta.vScale,
line: line
};
}
-
meta.$filler = source;
sources.push(source);
}
-
for (i = 0; i < count; ++i) {
source = sources[i];
-
if (!source || source.fill === false) {
continue;
}
-
- source.fill = resolveTarget(sources, i, propagate);
+ source.fill = _resolveTarget(sources, i, options.propagate);
}
},
- beforeDatasetsDraw: function beforeDatasetsDraw(chart) {
+ beforeDraw: function beforeDraw(chart, _args, options) {
+ var draw = options.drawTime === 'beforeDraw';
var metasets = chart.getSortedVisibleDatasetMetas();
var area = chart.chartArea;
- var i, meta;
-
- for (i = metasets.length - 1; i >= 0; --i) {
- meta = metasets[i].$filler;
-
- if (meta) {
- meta.line.updateControlPoints(area);
+ for (var i = metasets.length - 1; i >= 0; --i) {
+ var source = metasets[i].$filler;
+ if (!source) {
+ continue;
}
+ source.line.updateControlPoints(area, source.axis);
+ if (draw && source.fill) {
+ _drawfill(chart.ctx, source, area);
+ }
}
},
- beforeDatasetDraw: function beforeDatasetDraw(chart, args) {
- var area = chart.chartArea;
- var ctx = chart.ctx;
- var source = args.meta.$filler;
-
- if (!source || source.fill === false) {
+ beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {
+ if (options.drawTime !== 'beforeDatasetsDraw') {
return;
}
-
- var target = getTarget(source);
- var line = source.line,
- scale = source.scale;
- var lineOpts = line.options;
- var fillOption = lineOpts.fill;
- var color = lineOpts.backgroundColor;
-
- var _ref6 = fillOption || {},
- _ref6$above = _ref6.above,
- above = _ref6$above === void 0 ? color : _ref6$above,
- _ref6$below = _ref6.below,
- below = _ref6$below === void 0 ? color : _ref6$below;
-
- if (target && line.points.length) {
- clipArea(ctx, area);
- doFill(ctx, {
- line: line,
- target: target,
- above: above,
- below: below,
- area: area,
- scale: scale
- });
- unclipArea(ctx);
+ var metasets = chart.getSortedVisibleDatasetMetas();
+ for (var i = metasets.length - 1; i >= 0; --i) {
+ var source = metasets[i].$filler;
+ if (_shouldApplyFill(source)) {
+ _drawfill(chart.ctx, source, chart.chartArea);
+ }
}
},
+ beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {
+ var source = args.meta.$filler;
+ if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {
+ return;
+ }
+ _drawfill(chart.ctx, source, chart.chartArea);
+ },
defaults: {
- propagate: true
+ propagate: true,
+ drawTime: 'beforeDatasetDraw'
}
};
-
var getBoxSize = function getBoxSize(labelOpts, fontSize) {
var _labelOpts$boxHeight = labelOpts.boxHeight,
- boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,
- _labelOpts$boxWidth = labelOpts.boxWidth,
- boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;
-
+ boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,
+ _labelOpts$boxWidth = labelOpts.boxWidth,
+ boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;
if (labelOpts.usePointStyle) {
boxHeight = Math.min(boxHeight, fontSize);
- boxWidth = Math.min(boxWidth, fontSize);
+ boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
}
-
return {
boxWidth: boxWidth,
boxHeight: boxHeight,
itemHeight: Math.max(fontSize, boxHeight)
};
};
-
var itemsEqual = function itemsEqual(a, b) {
return a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
};
-
var Legend = /*#__PURE__*/function (_Element6) {
- _inherits(Legend, _Element6);
-
- var _super16 = _createSuper(Legend);
-
+ _inherits$w(Legend, _Element6);
+ var _super16 = _createSuper$w(Legend);
function Legend(config) {
- var _this10;
-
- _classCallCheck(this, Legend);
-
- _this10 = _super16.call(this);
- _this10._added = false;
- _this10.legendHitBoxes = [];
- _this10._hoveredItem = null;
- _this10.doughnutMode = false;
- _this10.chart = config.chart;
- _this10.options = config.options;
- _this10.ctx = config.ctx;
- _this10.legendItems = undefined;
- _this10.columnSizes = undefined;
- _this10.lineWidths = undefined;
- _this10.maxHeight = undefined;
- _this10.maxWidth = undefined;
- _this10.top = undefined;
- _this10.bottom = undefined;
- _this10.left = undefined;
- _this10.right = undefined;
- _this10.height = undefined;
- _this10.width = undefined;
- _this10._margins = undefined;
- _this10.position = undefined;
- _this10.weight = undefined;
- _this10.fullSize = undefined;
- return _this10;
+ var _this27;
+ _classCallCheck$x(this, Legend);
+ _this27 = _super16.call(this);
+ _this27._added = false;
+ _this27.legendHitBoxes = [];
+ _this27._hoveredItem = null;
+ _this27.doughnutMode = false;
+ _this27.chart = config.chart;
+ _this27.options = config.options;
+ _this27.ctx = config.ctx;
+ _this27.legendItems = undefined;
+ _this27.columnSizes = undefined;
+ _this27.lineWidths = undefined;
+ _this27.maxHeight = undefined;
+ _this27.maxWidth = undefined;
+ _this27.top = undefined;
+ _this27.bottom = undefined;
+ _this27.left = undefined;
+ _this27.right = undefined;
+ _this27.height = undefined;
+ _this27.width = undefined;
+ _this27._margins = undefined;
+ _this27.position = undefined;
+ _this27.weight = undefined;
+ _this27.fullSize = undefined;
+ return _this27;
}
-
- _createClass(Legend, [{
+ _createClass$x(Legend, [{
key: "update",
value: function update(maxWidth, maxHeight, margins) {
- var me = this;
- me.maxWidth = maxWidth;
- me.maxHeight = maxHeight;
- me._margins = margins;
- me.setDimensions();
- me.buildLabels();
- me.fit();
+ this.maxWidth = maxWidth;
+ this.maxHeight = maxHeight;
+ this._margins = margins;
+ this.setDimensions();
+ this.buildLabels();
+ this.fit();
}
}, {
key: "setDimensions",
value: function setDimensions() {
- var me = this;
-
- if (me.isHorizontal()) {
- me.width = me.maxWidth;
- me.left = 0;
- me.right = me.width;
+ if (this.isHorizontal()) {
+ this.width = this.maxWidth;
+ this.left = this._margins.left;
+ this.right = this.width;
} else {
- me.height = me.maxHeight;
- me.top = 0;
- me.bottom = me.height;
+ this.height = this.maxHeight;
+ this.top = this._margins.top;
+ this.bottom = this.height;
}
}
}, {
key: "buildLabels",
value: function buildLabels() {
- var me = this;
- var labelOpts = me.options.labels || {};
- var legendItems = callback(labelOpts.generateLabels, [me.chart], me) || [];
-
+ var _this28 = this;
+ var labelOpts = this.options.labels || {};
+ var legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];
if (labelOpts.filter) {
legendItems = legendItems.filter(function (item) {
- return labelOpts.filter(item, me.chart.data);
+ return labelOpts.filter(item, _this28.chart.data);
});
}
-
if (labelOpts.sort) {
legendItems = legendItems.sort(function (a, b) {
- return labelOpts.sort(a, b, me.chart.data);
+ return labelOpts.sort(a, b, _this28.chart.data);
});
}
-
- if (me.options.reverse) {
+ if (this.options.reverse) {
legendItems.reverse();
}
-
- me.legendItems = legendItems;
+ this.legendItems = legendItems;
}
}, {
key: "fit",
value: function fit() {
- var me = this;
- var options = me.options,
- ctx = me.ctx;
-
+ var options = this.options,
+ ctx = this.ctx;
if (!options.display) {
- me.width = me.height = 0;
+ this.width = this.height = 0;
return;
}
-
var labelOpts = options.labels;
var labelFont = toFont(labelOpts.font);
var fontSize = labelFont.size;
-
- var titleHeight = me._computeTitleHeight();
-
+ var titleHeight = this._computeTitleHeight();
var _getBoxSize = getBoxSize(labelOpts, fontSize),
- boxWidth = _getBoxSize.boxWidth,
- itemHeight = _getBoxSize.itemHeight;
-
+ boxWidth = _getBoxSize.boxWidth,
+ itemHeight = _getBoxSize.itemHeight;
var width, height;
ctx.font = labelFont.string;
-
- if (me.isHorizontal()) {
- width = me.maxWidth;
- height = me._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
+ if (this.isHorizontal()) {
+ width = this.maxWidth;
+ height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
} else {
- height = me.maxHeight;
- width = me._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;
+ height = this.maxHeight;
+ width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;
}
-
- me.width = Math.min(width, options.maxWidth || me.maxWidth);
- me.height = Math.min(height, options.maxHeight || me.maxHeight);
+ this.width = Math.min(width, options.maxWidth || this.maxWidth);
+ this.height = Math.min(height, options.maxHeight || this.maxHeight);
}
}, {
key: "_fitRows",
value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
- var me = this;
- var ctx = me.ctx,
- maxWidth = me.maxWidth,
- padding = me.options.labels.padding;
- var hitboxes = me.legendHitBoxes = [];
- var lineWidths = me.lineWidths = [0];
+ var ctx = this.ctx,
+ maxWidth = this.maxWidth,
+ padding = this.options.labels.padding;
+ var hitboxes = this.legendHitBoxes = [];
+ var lineWidths = this.lineWidths = [0];
var lineHeight = itemHeight + padding;
var totalHeight = titleHeight;
ctx.textAlign = 'left';
ctx.textBaseline = 'middle';
var row = -1;
var top = -lineHeight;
- me.legendItems.forEach(function (legendItem, i) {
+ this.legendItems.forEach(function (legendItem, i) {
var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
-
if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
totalHeight += lineHeight;
lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
top += lineHeight;
row++;
}
-
hitboxes[i] = {
left: 0,
top: top,
row: row,
width: itemWidth,
@@ -13546,49 +13431,45 @@
});
return totalHeight;
}
}, {
key: "_fitCols",
- value: function _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {
- var me = this;
- var ctx = me.ctx,
- maxHeight = me.maxHeight,
- padding = me.options.labels.padding;
- var hitboxes = me.legendHitBoxes = [];
- var columnSizes = me.columnSizes = [];
+ value: function _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {
+ var ctx = this.ctx,
+ maxHeight = this.maxHeight,
+ padding = this.options.labels.padding;
+ var hitboxes = this.legendHitBoxes = [];
+ var columnSizes = this.columnSizes = [];
var heightLimit = maxHeight - titleHeight;
var totalWidth = padding;
var currentColWidth = 0;
var currentColHeight = 0;
var left = 0;
- var top = 0;
var col = 0;
- me.legendItems.forEach(function (legendItem, i) {
- var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
-
- if (i > 0 && currentColHeight + fontSize + 2 * padding > heightLimit) {
+ this.legendItems.forEach(function (legendItem, i) {
+ var _calculateItemSize = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight),
+ itemWidth = _calculateItemSize.itemWidth,
+ itemHeight = _calculateItemSize.itemHeight;
+ if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
totalWidth += currentColWidth + padding;
columnSizes.push({
width: currentColWidth,
height: currentColHeight
});
left += currentColWidth + padding;
col++;
- top = 0;
currentColWidth = currentColHeight = 0;
}
-
- currentColWidth = Math.max(currentColWidth, itemWidth);
- currentColHeight += fontSize + padding;
hitboxes[i] = {
left: left,
- top: top,
+ top: currentColHeight,
col: col,
width: itemWidth,
height: itemHeight
};
- top += itemHeight + padding;
+ currentColWidth = Math.max(currentColWidth, itemWidth);
+ currentColHeight += itemHeight + padding;
});
totalWidth += currentColWidth;
columnSizes.push({
width: currentColWidth,
height: currentColHeight
@@ -13596,74 +13477,62 @@
return totalWidth;
}
}, {
key: "adjustHitBoxes",
value: function adjustHitBoxes() {
- var me = this;
-
- if (!me.options.display) {
+ if (!this.options.display) {
return;
}
-
- var titleHeight = me._computeTitleHeight();
-
- var hitboxes = me.legendHitBoxes,
- _me$options6 = me.options,
- align = _me$options6.align,
- padding = _me$options6.labels.padding;
-
+ var titleHeight = this._computeTitleHeight();
+ var hitboxes = this.legendHitBoxes,
+ _this$options15 = this.options,
+ align = _this$options15.align,
+ padding = _this$options15.labels.padding,
+ rtl = _this$options15.rtl;
+ var rtlHelper = getRtlAdapter(rtl, this.left, this.width);
if (this.isHorizontal()) {
var row = 0;
-
- var left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);
-
- var _iterator6 = _createForOfIteratorHelper(hitboxes),
- _step6;
-
+ var left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
+ var _iterator23 = _createForOfIteratorHelper$1(hitboxes),
+ _step23;
try {
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
- var hitbox = _step6.value;
-
+ for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
+ var hitbox = _step23.value;
if (row !== hitbox.row) {
row = hitbox.row;
- left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);
+ left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
}
-
- hitbox.top += me.top + titleHeight + padding;
- hitbox.left = left;
+ hitbox.top += this.top + titleHeight + padding;
+ hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
left += hitbox.width + padding;
}
} catch (err) {
- _iterator6.e(err);
+ _iterator23.e(err);
} finally {
- _iterator6.f();
+ _iterator23.f();
}
} else {
var col = 0;
-
- var top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);
-
- var _iterator7 = _createForOfIteratorHelper(hitboxes),
- _step7;
-
+ var top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
+ var _iterator24 = _createForOfIteratorHelper$1(hitboxes),
+ _step24;
try {
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
- var _hitbox = _step7.value;
-
- if (_hitbox.col !== col) {
- col = _hitbox.col;
- top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);
+ for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
+ var hitbox1 = _step24.value;
+ if (hitbox1.col !== col) {
+ col = hitbox1.col;
+ top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
}
-
- _hitbox.top = top;
- _hitbox.left += me.left + padding;
- top += _hitbox.height + padding;
+ hitbox1.top = top;
+ hitbox1.left += this.left + padding;
+ hitbox1.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox1.left), hitbox1.width);
+ top += hitbox1.height + padding;
}
} catch (err) {
- _iterator7.e(err);
+ _iterator24.e(err);
} finally {
- _iterator7.f();
+ _iterator24.f();
}
}
}
}, {
key: "isHorizontal",
@@ -13671,184 +13540,178 @@
return this.options.position === 'top' || this.options.position === 'bottom';
}
}, {
key: "draw",
value: function draw() {
- var me = this;
-
- if (me.options.display) {
- var ctx = me.ctx;
- clipArea(ctx, me);
-
- me._draw();
-
+ if (this.options.display) {
+ var ctx = this.ctx;
+ clipArea(ctx, this);
+ this._draw();
unclipArea(ctx);
}
}
}, {
key: "_draw",
value: function _draw() {
- var me = this;
- var opts = me.options,
- columnSizes = me.columnSizes,
- lineWidths = me.lineWidths,
- ctx = me.ctx;
+ var _this29 = this;
+ var opts = this.options,
+ columnSizes = this.columnSizes,
+ lineWidths = this.lineWidths,
+ ctx = this.ctx;
var align = opts.align,
- labelOpts = opts.labels;
+ labelOpts = opts.labels;
var defaultColor = defaults.color;
- var rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);
+ var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
var labelFont = toFont(labelOpts.font);
- var fontColor = labelOpts.color,
- padding = labelOpts.padding;
+ var padding = labelOpts.padding;
var fontSize = labelFont.size;
var halfFontSize = fontSize / 2;
var cursor;
- me.drawTitle();
+ this.drawTitle();
ctx.textAlign = rtlHelper.textAlign('left');
ctx.textBaseline = 'middle';
ctx.lineWidth = 0.5;
- ctx.strokeStyle = fontColor;
- ctx.fillStyle = fontColor;
ctx.font = labelFont.string;
-
var _getBoxSize2 = getBoxSize(labelOpts, fontSize),
- boxWidth = _getBoxSize2.boxWidth,
- boxHeight = _getBoxSize2.boxHeight,
- itemHeight = _getBoxSize2.itemHeight;
-
+ boxWidth = _getBoxSize2.boxWidth,
+ boxHeight = _getBoxSize2.boxHeight,
+ itemHeight = _getBoxSize2.itemHeight;
var drawLegendBox = function drawLegendBox(x, y, legendItem) {
if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
return;
}
-
ctx.save();
var lineWidth = valueOrDefault(legendItem.lineWidth, 1);
ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);
ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');
ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);
ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');
ctx.lineWidth = lineWidth;
ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);
ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));
-
if (labelOpts.usePointStyle) {
var drawOptions = {
- radius: boxWidth * Math.SQRT2 / 2,
+ radius: boxHeight * Math.SQRT2 / 2,
pointStyle: legendItem.pointStyle,
rotation: legendItem.rotation,
borderWidth: lineWidth
};
var centerX = rtlHelper.xPlus(x, boxWidth / 2);
var centerY = y + halfFontSize;
- drawPoint(ctx, drawOptions, centerX, centerY);
+ drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
} else {
var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
- ctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), yBoxTop, boxWidth, boxHeight);
-
+ var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
+ var borderRadius = toTRBLCorners(legendItem.borderRadius);
+ ctx.beginPath();
+ if (Object.values(borderRadius).some(function (v) {
+ return v !== 0;
+ })) {
+ addRoundedRectPath(ctx, {
+ x: xBoxLeft,
+ y: yBoxTop,
+ w: boxWidth,
+ h: boxHeight,
+ radius: borderRadius
+ });
+ } else {
+ ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
+ }
+ ctx.fill();
if (lineWidth !== 0) {
- ctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), yBoxTop, boxWidth, boxHeight);
+ ctx.stroke();
}
}
-
ctx.restore();
};
-
var fillText = function fillText(x, y, legendItem) {
renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {
strikethrough: legendItem.hidden,
- textAlign: legendItem.textAlign
+ textAlign: rtlHelper.textAlign(legendItem.textAlign)
});
};
-
- var isHorizontal = me.isHorizontal();
-
+ var isHorizontal = this.isHorizontal();
var titleHeight = this._computeTitleHeight();
-
if (isHorizontal) {
cursor = {
- x: _alignStartEnd(align, me.left + padding, me.right - lineWidths[0]),
- y: me.top + padding + titleHeight,
+ x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),
+ y: this.top + padding + titleHeight,
line: 0
};
} else {
cursor = {
- x: me.left + padding,
- y: _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[0].height),
+ x: this.left + padding,
+ y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
line: 0
};
}
-
- overrideTextDirection(me.ctx, opts.textDirection);
+ overrideTextDirection(this.ctx, opts.textDirection);
var lineHeight = itemHeight + padding;
- me.legendItems.forEach(function (legendItem, i) {
+ this.legendItems.forEach(function (legendItem, i) {
+ ctx.strokeStyle = legendItem.fontColor;
+ ctx.fillStyle = legendItem.fontColor;
var textWidth = ctx.measureText(legendItem.text).width;
var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
- var width = boxWidth + fontSize / 2 + textWidth;
+ var width = boxWidth + halfFontSize + textWidth;
var x = cursor.x;
var y = cursor.y;
- rtlHelper.setWidth(me.width);
-
+ rtlHelper.setWidth(_this29.width);
if (isHorizontal) {
- if (i > 0 && x + width + padding > me.right) {
+ if (i > 0 && x + width + padding > _this29.right) {
y = cursor.y += lineHeight;
cursor.line++;
- x = cursor.x = _alignStartEnd(align, me.left + padding, me.right - lineWidths[cursor.line]);
+ x = cursor.x = _alignStartEnd(align, _this29.left + padding, _this29.right - lineWidths[cursor.line]);
}
- } else if (i > 0 && y + lineHeight > me.bottom) {
+ } else if (i > 0 && y + lineHeight > _this29.bottom) {
x = cursor.x = x + columnSizes[cursor.line].width + padding;
cursor.line++;
- y = cursor.y = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[cursor.line].height);
+ y = cursor.y = _alignStartEnd(align, _this29.top + titleHeight + padding, _this29.bottom - columnSizes[cursor.line].height);
}
-
var realX = rtlHelper.x(x);
drawLegendBox(realX, y, legendItem);
- x = _textX(textAlign, x + boxWidth + halfFontSize, me.right);
+ x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : _this29.right, opts.rtl);
fillText(rtlHelper.x(x), y, legendItem);
-
if (isHorizontal) {
cursor.x += width + padding;
+ } else if (typeof legendItem.text !== 'string') {
+ var fontLineHeight = labelFont.lineHeight;
+ cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight);
} else {
cursor.y += lineHeight;
}
});
- restoreTextDirection(me.ctx, opts.textDirection);
+ restoreTextDirection(this.ctx, opts.textDirection);
}
}, {
key: "drawTitle",
value: function drawTitle() {
- var me = this;
- var opts = me.options;
+ var opts = this.options;
var titleOpts = opts.title;
var titleFont = toFont(titleOpts.font);
var titlePadding = toPadding(titleOpts.padding);
-
if (!titleOpts.display) {
return;
}
-
- var rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);
- var ctx = me.ctx;
+ var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
+ var ctx = this.ctx;
var position = titleOpts.position;
var halfFontSize = titleFont.size / 2;
var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
var y;
- var left = me.left;
- var maxWidth = me.width;
-
+ var left = this.left;
+ var maxWidth = this.width;
if (this.isHorizontal()) {
- maxWidth = Math.max.apply(Math, _toConsumableArray(me.lineWidths));
- y = me.top + topPaddingPlusHalfFontSize;
- left = _alignStartEnd(opts.align, left, me.right - maxWidth);
+ maxWidth = Math.max.apply(Math, _toConsumableArray(this.lineWidths));
+ y = this.top + topPaddingPlusHalfFontSize;
+ left = _alignStartEnd(opts.align, left, this.right - maxWidth);
} else {
- var maxHeight = me.columnSizes.reduce(function (acc, size) {
+ var maxHeight = this.columnSizes.reduce(function (acc, size) {
return Math.max(acc, size.height);
}, 0);
- y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, me.top, me.bottom - maxHeight - opts.labels.padding - me._computeTitleHeight());
+ y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
}
-
var x = _alignStartEnd(position, left, left + maxWidth);
-
ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));
ctx.textBaseline = 'middle';
ctx.strokeStyle = titleOpts.color;
ctx.fillStyle = titleOpts.color;
ctx.font = titleFont.string;
@@ -13863,73 +13726,84 @@
return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
}
}, {
key: "_getLegendItemAt",
value: function _getLegendItemAt(x, y) {
- var me = this;
var i, hitBox, lh;
-
- if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {
- lh = me.legendHitBoxes;
-
+ if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {
+ lh = this.legendHitBoxes;
for (i = 0; i < lh.length; ++i) {
hitBox = lh[i];
-
- if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
- return me.legendItems[i];
+ if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {
+ return this.legendItems[i];
}
}
}
-
return null;
}
}, {
key: "handleEvent",
value: function handleEvent(e) {
- var me = this;
- var opts = me.options;
-
+ var opts = this.options;
if (!isListened(e.type, opts)) {
return;
}
-
- var hoveredItem = me._getLegendItemAt(e.x, e.y);
-
- if (e.type === 'mousemove') {
- var previous = me._hoveredItem;
+ var hoveredItem = this._getLegendItemAt(e.x, e.y);
+ if (e.type === 'mousemove' || e.type === 'mouseout') {
+ var previous = this._hoveredItem;
var sameItem = itemsEqual(previous, hoveredItem);
-
if (previous && !sameItem) {
- callback(opts.onLeave, [e, previous, me], me);
+ callback(opts.onLeave, [e, previous, this], this);
}
-
- me._hoveredItem = hoveredItem;
-
+ this._hoveredItem = hoveredItem;
if (hoveredItem && !sameItem) {
- callback(opts.onHover, [e, hoveredItem, me], me);
+ callback(opts.onHover, [e, hoveredItem, this], this);
}
} else if (hoveredItem) {
- callback(opts.onClick, [e, hoveredItem, me], me);
+ callback(opts.onClick, [e, hoveredItem, this], this);
}
}
}]);
-
return Legend;
}(Element);
-
+ function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {
+ var itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);
+ var itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);
+ return {
+ itemWidth: itemWidth,
+ itemHeight: itemHeight
+ };
+ }
+ function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {
+ var legendItemText = legendItem.text;
+ if (legendItemText && typeof legendItemText !== 'string') {
+ legendItemText = legendItemText.reduce(function (a, b) {
+ return a.length > b.length ? a : b;
+ });
+ }
+ return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;
+ }
+ function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {
+ var itemHeight = _itemHeight;
+ if (typeof legendItem.text !== 'string') {
+ itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);
+ }
+ return itemHeight;
+ }
+ function calculateLegendItemHeight(legendItem, fontLineHeight) {
+ var labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0;
+ return fontLineHeight * labelHeight;
+ }
function isListened(type, opts) {
- if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {
+ if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {
return true;
}
-
if (opts.onClick && (type === 'click' || type === 'mouseup')) {
return true;
}
-
return false;
}
-
var plugin_legend = {
id: 'legend',
_element: Legend,
start: function start(chart, _args, options) {
var legend = chart.legend = new Legend({
@@ -13967,11 +13841,10 @@
reverse: false,
weight: 1000,
onClick: function onClick(e, legendItem, legend) {
var index = legendItem.datasetIndex;
var ci = legend.chart;
-
if (ci.isDatasetVisible(index)) {
ci.hide(index);
legendItem.hidden = true;
} else {
ci.show(index);
@@ -13987,29 +13860,34 @@
boxWidth: 40,
padding: 10,
generateLabels: function generateLabels(chart) {
var datasets = chart.data.datasets;
var _chart$legend$options = chart.legend.options.labels,
- usePointStyle = _chart$legend$options.usePointStyle,
- pointStyle = _chart$legend$options.pointStyle,
- textAlign = _chart$legend$options.textAlign;
+ usePointStyle = _chart$legend$options.usePointStyle,
+ pointStyle = _chart$legend$options.pointStyle,
+ textAlign = _chart$legend$options.textAlign,
+ color = _chart$legend$options.color,
+ useBorderRadius = _chart$legend$options.useBorderRadius,
+ borderRadius = _chart$legend$options.borderRadius;
return chart._getSortedDatasetMetas().map(function (meta) {
var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);
var borderWidth = toPadding(style.borderWidth);
return {
text: datasets[meta.index].label,
fillStyle: style.backgroundColor,
+ fontColor: color,
hidden: !meta.visible,
lineCap: style.borderCapStyle,
lineDash: style.borderDash,
lineDashOffset: style.borderDashOffset,
lineJoin: style.borderJoinStyle,
lineWidth: (borderWidth.width + borderWidth.height) / 4,
strokeStyle: style.borderColor,
pointStyle: pointStyle || style.pointStyle,
rotation: style.rotation,
textAlign: textAlign || style.textAlign,
+ borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
datasetIndex: meta.index
};
}, this);
}
},
@@ -14031,62 +13909,51 @@
return !['generateLabels', 'filter', 'sort'].includes(name);
}
}
}
};
-
var Title = /*#__PURE__*/function (_Element7) {
- _inherits(Title, _Element7);
-
- var _super17 = _createSuper(Title);
-
+ _inherits$w(Title, _Element7);
+ var _super17 = _createSuper$w(Title);
function Title(config) {
- var _this11;
-
- _classCallCheck(this, Title);
-
- _this11 = _super17.call(this);
- _this11.chart = config.chart;
- _this11.options = config.options;
- _this11.ctx = config.ctx;
- _this11._padding = undefined;
- _this11.top = undefined;
- _this11.bottom = undefined;
- _this11.left = undefined;
- _this11.right = undefined;
- _this11.width = undefined;
- _this11.height = undefined;
- _this11.position = undefined;
- _this11.weight = undefined;
- _this11.fullSize = undefined;
- return _this11;
+ var _this30;
+ _classCallCheck$x(this, Title);
+ _this30 = _super17.call(this);
+ _this30.chart = config.chart;
+ _this30.options = config.options;
+ _this30.ctx = config.ctx;
+ _this30._padding = undefined;
+ _this30.top = undefined;
+ _this30.bottom = undefined;
+ _this30.left = undefined;
+ _this30.right = undefined;
+ _this30.width = undefined;
+ _this30.height = undefined;
+ _this30.position = undefined;
+ _this30.weight = undefined;
+ _this30.fullSize = undefined;
+ return _this30;
}
-
- _createClass(Title, [{
+ _createClass$x(Title, [{
key: "update",
value: function update(maxWidth, maxHeight) {
- var me = this;
- var opts = me.options;
- me.left = 0;
- me.top = 0;
-
+ var opts = this.options;
+ this.left = 0;
+ this.top = 0;
if (!opts.display) {
- me.width = me.height = me.right = me.bottom = 0;
+ this.width = this.height = this.right = this.bottom = 0;
return;
}
-
- me.width = me.right = maxWidth;
- me.height = me.bottom = maxHeight;
+ this.width = this.right = maxWidth;
+ this.height = this.bottom = maxHeight;
var lineCount = isArray(opts.text) ? opts.text.length : 1;
- me._padding = toPadding(opts.padding);
-
- var textSize = lineCount * toFont(opts.font).lineHeight + me._padding.height;
-
- if (me.isHorizontal()) {
- me.height = textSize;
+ this._padding = toPadding(opts.padding);
+ var textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;
+ if (this.isHorizontal()) {
+ this.height = textSize;
} else {
- me.width = textSize;
+ this.width = textSize;
}
}
}, {
key: "isHorizontal",
value: function isHorizontal() {
@@ -14095,18 +13962,17 @@
}
}, {
key: "_drawArgs",
value: function _drawArgs(offset) {
var top = this.top,
- left = this.left,
- bottom = this.bottom,
- right = this.right,
- options = this.options;
+ left = this.left,
+ bottom = this.bottom,
+ right = this.right,
+ options = this.options;
var align = options.align;
var rotation = 0;
var maxWidth, titleX, titleY;
-
if (this.isHorizontal()) {
titleX = _alignStartEnd(align, left, right);
titleY = top + offset;
maxWidth = right - left;
} else {
@@ -14117,67 +13983,57 @@
} else {
titleX = right - offset;
titleY = _alignStartEnd(align, top, bottom);
rotation = PI * 0.5;
}
-
maxWidth = bottom - top;
}
-
return {
titleX: titleX,
titleY: titleY,
maxWidth: maxWidth,
rotation: rotation
};
}
}, {
key: "draw",
value: function draw() {
- var me = this;
- var ctx = me.ctx;
- var opts = me.options;
-
+ var ctx = this.ctx;
+ var opts = this.options;
if (!opts.display) {
return;
}
-
var fontOpts = toFont(opts.font);
var lineHeight = fontOpts.lineHeight;
- var offset = lineHeight / 2 + me._padding.top;
-
- var _me$_drawArgs = me._drawArgs(offset),
- titleX = _me$_drawArgs.titleX,
- titleY = _me$_drawArgs.titleY,
- maxWidth = _me$_drawArgs.maxWidth,
- rotation = _me$_drawArgs.rotation;
-
+ var offset = lineHeight / 2 + this._padding.top;
+ var _this$_drawArgs = this._drawArgs(offset),
+ titleX = _this$_drawArgs.titleX,
+ titleY = _this$_drawArgs.titleY,
+ maxWidth = _this$_drawArgs.maxWidth,
+ rotation = _this$_drawArgs.rotation;
renderText(ctx, opts.text, 0, 0, fontOpts, {
color: opts.color,
maxWidth: maxWidth,
rotation: rotation,
textAlign: _toLeftRightCenter(opts.align),
textBaseline: 'middle',
translation: [titleX, titleY]
});
}
}]);
-
return Title;
}(Element);
-
function createTitle(chart, titleOpts) {
var title = new Title({
ctx: chart.ctx,
options: titleOpts,
chart: chart
});
layouts.configure(chart, title, titleOpts);
layouts.addBox(chart, title);
chart.titleBlock = title;
}
-
var plugin_title = {
id: 'title',
_element: Title,
start: function start(chart, _args, options) {
createTitle(chart, options);
@@ -14194,11 +14050,11 @@
},
defaults: {
align: 'center',
display: false,
font: {
- style: 'bold'
+ weight: 'bold'
},
fullSize: true,
padding: 10,
position: 'top',
text: '',
@@ -14210,100 +14066,129 @@
descriptors: {
_scriptable: true,
_indexable: false
}
};
+ var map = new WeakMap();
+ var plugin_subtitle = {
+ id: 'subtitle',
+ start: function start(chart, _args, options) {
+ var title = new Title({
+ ctx: chart.ctx,
+ options: options,
+ chart: chart
+ });
+ layouts.configure(chart, title, options);
+ layouts.addBox(chart, title);
+ map.set(chart, title);
+ },
+ stop: function stop(chart) {
+ layouts.removeBox(chart, map.get(chart));
+ map["delete"](chart);
+ },
+ beforeUpdate: function beforeUpdate(chart, _args, options) {
+ var title = map.get(chart);
+ layouts.configure(chart, title, options);
+ title.options = options;
+ },
+ defaults: {
+ align: 'center',
+ display: false,
+ font: {
+ weight: 'normal'
+ },
+ fullSize: true,
+ padding: 0,
+ position: 'top',
+ text: '',
+ weight: 1500
+ },
+ defaultRoutes: {
+ color: 'color'
+ },
+ descriptors: {
+ _scriptable: true,
+ _indexable: false
+ }
+ };
var positioners = {
average: function average(items) {
if (!items.length) {
return false;
}
-
var i, len;
var x = 0;
var y = 0;
var count = 0;
-
for (i = 0, len = items.length; i < len; ++i) {
var el = items[i].element;
-
if (el && el.hasValue()) {
var pos = el.tooltipPosition();
x += pos.x;
y += pos.y;
++count;
}
}
-
return {
x: x / count,
y: y / count
};
},
nearest: function nearest(items, eventPosition) {
+ if (!items.length) {
+ return false;
+ }
var x = eventPosition.x;
var y = eventPosition.y;
var minDistance = Number.POSITIVE_INFINITY;
var i, len, nearestElement;
-
for (i = 0, len = items.length; i < len; ++i) {
var el = items[i].element;
-
if (el && el.hasValue()) {
var center = el.getCenterPoint();
var d = distanceBetweenPoints(eventPosition, center);
-
if (d < minDistance) {
minDistance = d;
nearestElement = el;
}
}
}
-
if (nearestElement) {
var tp = nearestElement.tooltipPosition();
x = tp.x;
y = tp.y;
}
-
return {
x: x,
y: y
};
}
};
-
function pushOrConcat(base, toPush) {
if (toPush) {
if (isArray(toPush)) {
Array.prototype.push.apply(base, toPush);
} else {
base.push(toPush);
}
}
-
return base;
}
-
function splitNewlines(str) {
if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) {
return str.split('\n');
}
-
return str;
}
-
function createTooltipItem(chart, item) {
var element = item.element,
- datasetIndex = item.datasetIndex,
- index = item.index;
+ datasetIndex = item.datasetIndex,
+ index = item.index;
var controller = chart.getDatasetMeta(datasetIndex).controller;
-
var _controller$getLabelA = controller.getLabelAndValue(index),
- label = _controller$getLabelA.label,
- value = _controller$getLabelA.value;
-
+ label = _controller$getLabelA.label,
+ value = _controller$getLabelA.value;
return {
chart: chart,
label: label,
parsed: controller.getParsed(index),
raw: chart.data.datasets[datasetIndex].data[index],
@@ -14312,18 +14197,17 @@
dataIndex: index,
datasetIndex: datasetIndex,
element: element
};
}
-
function getTooltipSize(tooltip, options) {
- var ctx = tooltip._chart.ctx;
+ var ctx = tooltip.chart.ctx;
var body = tooltip.body,
- footer = tooltip.footer,
- title = tooltip.title;
+ footer = tooltip.footer,
+ title = tooltip.title;
var boxWidth = options.boxWidth,
- boxHeight = options.boxHeight;
+ boxHeight = options.boxHeight;
var bodyFont = toFont(options.bodyFont);
var titleFont = toFont(options.titleFont);
var footerFont = toFont(options.footerFont);
var titleLineCount = title.length;
var footerLineCount = footer.length;
@@ -14333,36 +14217,30 @@
var width = 0;
var combinedBodyLength = body.reduce(function (count, bodyItem) {
return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;
}, 0);
combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
-
if (titleLineCount) {
height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;
}
-
if (combinedBodyLength) {
var bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;
}
-
if (footerLineCount) {
height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;
}
-
var widthPadding = 0;
-
var maxLineWidth = function maxLineWidth(line) {
width = Math.max(width, ctx.measureText(line).width + widthPadding);
};
-
ctx.save();
ctx.font = titleFont.string;
each(tooltip.title, maxLineWidth);
ctx.font = bodyFont.string;
each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
- widthPadding = options.displayColors ? boxWidth + 2 : 0;
+ widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;
each(body, function (bodyItem) {
each(bodyItem.before, maxLineWidth);
each(bodyItem.lines, maxLineWidth);
each(bodyItem.after, maxLineWidth);
});
@@ -14374,373 +14252,400 @@
return {
width: width,
height: height
};
}
-
function determineYAlign(chart, size) {
var y = size.y,
- height = size.height;
-
+ height = size.height;
if (y < height / 2) {
return 'top';
} else if (y > chart.height - height / 2) {
return 'bottom';
}
-
return 'center';
}
-
function doesNotFitWithAlign(xAlign, chart, options, size) {
var x = size.x,
- width = size.width;
+ width = size.width;
var caret = options.caretSize + options.caretPadding;
-
if (xAlign === 'left' && x + width + caret > chart.width) {
return true;
}
-
if (xAlign === 'right' && x - width - caret < 0) {
return true;
}
}
-
function determineXAlign(chart, options, size, yAlign) {
var x = size.x,
- width = size.width;
+ width = size.width;
var chartWidth = chart.width,
- _chart$chartArea = chart.chartArea,
- left = _chart$chartArea.left,
- right = _chart$chartArea.right;
+ _chart$chartArea = chart.chartArea,
+ left = _chart$chartArea.left,
+ right = _chart$chartArea.right;
var xAlign = 'center';
-
if (yAlign === 'center') {
xAlign = x <= (left + right) / 2 ? 'left' : 'right';
} else if (x <= width / 2) {
xAlign = 'left';
} else if (x >= chartWidth - width / 2) {
xAlign = 'right';
}
-
if (doesNotFitWithAlign(xAlign, chart, options, size)) {
xAlign = 'center';
}
-
return xAlign;
}
-
function determineAlignment(chart, options, size) {
- var yAlign = options.yAlign || determineYAlign(chart, size);
+ var yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);
return {
- xAlign: options.xAlign || determineXAlign(chart, options, size, yAlign),
+ xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),
yAlign: yAlign
};
}
-
function alignX(size, xAlign) {
var x = size.x,
- width = size.width;
-
+ width = size.width;
if (xAlign === 'right') {
x -= width;
} else if (xAlign === 'center') {
x -= width / 2;
}
-
return x;
}
-
function alignY(size, yAlign, paddingAndSize) {
var y = size.y,
- height = size.height;
-
+ height = size.height;
if (yAlign === 'top') {
y += paddingAndSize;
} else if (yAlign === 'bottom') {
y -= height + paddingAndSize;
} else {
y -= height / 2;
}
-
return y;
}
-
function getBackgroundPoint(options, size, alignment, chart) {
var caretSize = options.caretSize,
- caretPadding = options.caretPadding,
- cornerRadius = options.cornerRadius;
+ caretPadding = options.caretPadding,
+ cornerRadius = options.cornerRadius;
var xAlign = alignment.xAlign,
- yAlign = alignment.yAlign;
+ yAlign = alignment.yAlign;
var paddingAndSize = caretSize + caretPadding;
- var radiusAndPadding = cornerRadius + caretPadding;
+ var _toTRBLCorners = toTRBLCorners(cornerRadius),
+ topLeft = _toTRBLCorners.topLeft,
+ topRight = _toTRBLCorners.topRight,
+ bottomLeft = _toTRBLCorners.bottomLeft,
+ bottomRight = _toTRBLCorners.bottomRight;
var x = alignX(size, xAlign);
var y = alignY(size, yAlign, paddingAndSize);
-
if (yAlign === 'center') {
if (xAlign === 'left') {
x += paddingAndSize;
} else if (xAlign === 'right') {
x -= paddingAndSize;
}
} else if (xAlign === 'left') {
- x -= radiusAndPadding;
+ x -= Math.max(topLeft, bottomLeft) + caretSize;
} else if (xAlign === 'right') {
- x += radiusAndPadding;
+ x += Math.max(topRight, bottomRight) + caretSize;
}
-
return {
x: _limitValue(x, 0, chart.width - size.width),
y: _limitValue(y, 0, chart.height - size.height)
};
}
-
function getAlignedX(tooltip, align, options) {
var padding = toPadding(options.padding);
return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;
}
-
function getBeforeAfterBodyLines(callback) {
return pushOrConcat([], splitNewlines(callback));
}
-
function createTooltipContext(parent, tooltip, tooltipItems) {
- return Object.assign(Object.create(parent), {
+ return createContext(parent, {
tooltip: tooltip,
tooltipItems: tooltipItems,
type: 'tooltip'
});
}
-
function overrideCallbacks(callbacks, context) {
var override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
return override ? callbacks.override(override) : callbacks;
}
-
+ var defaultCallbacks = {
+ beforeTitle: noop,
+ title: function title(tooltipItems) {
+ if (tooltipItems.length > 0) {
+ var item = tooltipItems[0];
+ var labels = item.chart.data.labels;
+ var labelCount = labels ? labels.length : 0;
+ if (this && this.options && this.options.mode === 'dataset') {
+ return item.dataset.label || '';
+ } else if (item.label) {
+ return item.label;
+ } else if (labelCount > 0 && item.dataIndex < labelCount) {
+ return labels[item.dataIndex];
+ }
+ }
+ return '';
+ },
+ afterTitle: noop,
+ beforeBody: noop,
+ beforeLabel: noop,
+ label: function label(tooltipItem) {
+ if (this && this.options && this.options.mode === 'dataset') {
+ return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;
+ }
+ var label = tooltipItem.dataset.label || '';
+ if (label) {
+ label += ': ';
+ }
+ var value = tooltipItem.formattedValue;
+ if (!isNullOrUndef(value)) {
+ label += value;
+ }
+ return label;
+ },
+ labelColor: function labelColor(tooltipItem) {
+ var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
+ var options = meta.controller.getStyle(tooltipItem.dataIndex);
+ return {
+ borderColor: options.borderColor,
+ backgroundColor: options.backgroundColor,
+ borderWidth: options.borderWidth,
+ borderDash: options.borderDash,
+ borderDashOffset: options.borderDashOffset,
+ borderRadius: 0
+ };
+ },
+ labelTextColor: function labelTextColor() {
+ return this.options.bodyColor;
+ },
+ labelPointStyle: function labelPointStyle(tooltipItem) {
+ var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
+ var options = meta.controller.getStyle(tooltipItem.dataIndex);
+ return {
+ pointStyle: options.pointStyle,
+ rotation: options.rotation
+ };
+ },
+ afterLabel: noop,
+ afterBody: noop,
+ beforeFooter: noop,
+ footer: noop,
+ afterFooter: noop
+ };
+ function invokeCallbackWithFallback(callbacks, name, ctx, arg) {
+ var result = callbacks[name].call(ctx, arg);
+ if (typeof result === 'undefined') {
+ return defaultCallbacks[name].call(ctx, arg);
+ }
+ return result;
+ }
var Tooltip = /*#__PURE__*/function (_Element8) {
- _inherits(Tooltip, _Element8);
-
- var _super18 = _createSuper(Tooltip);
-
+ _inherits$w(Tooltip, _Element8);
+ var _super18 = _createSuper$w(Tooltip);
function Tooltip(config) {
- var _this12;
-
- _classCallCheck(this, Tooltip);
-
- _this12 = _super18.call(this);
- _this12.opacity = 0;
- _this12._active = [];
- _this12._chart = config._chart;
- _this12._eventPosition = undefined;
- _this12._size = undefined;
- _this12._cachedAnimations = undefined;
- _this12._tooltipItems = [];
- _this12.$animations = undefined;
- _this12.$context = undefined;
- _this12.options = config.options;
- _this12.dataPoints = undefined;
- _this12.title = undefined;
- _this12.beforeBody = undefined;
- _this12.body = undefined;
- _this12.afterBody = undefined;
- _this12.footer = undefined;
- _this12.xAlign = undefined;
- _this12.yAlign = undefined;
- _this12.x = undefined;
- _this12.y = undefined;
- _this12.height = undefined;
- _this12.width = undefined;
- _this12.caretX = undefined;
- _this12.caretY = undefined;
- _this12.labelColors = undefined;
- _this12.labelPointStyles = undefined;
- _this12.labelTextColors = undefined;
- return _this12;
+ var _this31;
+ _classCallCheck$x(this, Tooltip);
+ _this31 = _super18.call(this);
+ _this31.opacity = 0;
+ _this31._active = [];
+ _this31._eventPosition = undefined;
+ _this31._size = undefined;
+ _this31._cachedAnimations = undefined;
+ _this31._tooltipItems = [];
+ _this31.$animations = undefined;
+ _this31.$context = undefined;
+ _this31.chart = config.chart;
+ _this31.options = config.options;
+ _this31.dataPoints = undefined;
+ _this31.title = undefined;
+ _this31.beforeBody = undefined;
+ _this31.body = undefined;
+ _this31.afterBody = undefined;
+ _this31.footer = undefined;
+ _this31.xAlign = undefined;
+ _this31.yAlign = undefined;
+ _this31.x = undefined;
+ _this31.y = undefined;
+ _this31.height = undefined;
+ _this31.width = undefined;
+ _this31.caretX = undefined;
+ _this31.caretY = undefined;
+ _this31.labelColors = undefined;
+ _this31.labelPointStyles = undefined;
+ _this31.labelTextColors = undefined;
+ return _this31;
}
-
- _createClass(Tooltip, [{
+ _createClass$x(Tooltip, [{
key: "initialize",
value: function initialize(options) {
this.options = options;
this._cachedAnimations = undefined;
this.$context = undefined;
}
}, {
key: "_resolveAnimations",
value: function _resolveAnimations() {
- var me = this;
- var cached = me._cachedAnimations;
-
+ var cached = this._cachedAnimations;
if (cached) {
return cached;
}
-
- var chart = me._chart;
- var options = me.options.setContext(me.getContext());
+ var chart = this.chart;
+ var options = this.options.setContext(this.getContext());
var opts = options.enabled && chart.options.animation && options.animations;
- var animations = new Animations(me._chart, opts);
-
+ var animations = new Animations(this.chart, opts);
if (opts._cacheable) {
- me._cachedAnimations = Object.freeze(animations);
+ this._cachedAnimations = Object.freeze(animations);
}
-
return animations;
}
}, {
key: "getContext",
value: function getContext() {
- var me = this;
- return me.$context || (me.$context = createTooltipContext(me._chart.getContext(), me, me._tooltipItems));
+ return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
}
}, {
key: "getTitle",
value: function getTitle(context, options) {
- var me = this;
var callbacks = options.callbacks;
- var beforeTitle = callbacks.beforeTitle.apply(me, [context]);
- var title = callbacks.title.apply(me, [context]);
- var afterTitle = callbacks.afterTitle.apply(me, [context]);
+ var beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);
+ var title = invokeCallbackWithFallback(callbacks, 'title', this, context);
+ var afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);
var lines = [];
lines = pushOrConcat(lines, splitNewlines(beforeTitle));
lines = pushOrConcat(lines, splitNewlines(title));
lines = pushOrConcat(lines, splitNewlines(afterTitle));
return lines;
}
}, {
key: "getBeforeBody",
value: function getBeforeBody(tooltipItems, options) {
- return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));
+ return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));
}
}, {
key: "getBody",
value: function getBody(tooltipItems, options) {
- var me = this;
+ var _this32 = this;
var callbacks = options.callbacks;
var bodyItems = [];
each(tooltipItems, function (context) {
var bodyItem = {
before: [],
lines: [],
after: []
};
var scoped = overrideCallbacks(callbacks, context);
- pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(me, context)));
- pushOrConcat(bodyItem.lines, scoped.label.call(me, context));
- pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(me, context)));
+ pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', _this32, context)));
+ pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', _this32, context));
+ pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', _this32, context)));
bodyItems.push(bodyItem);
});
return bodyItems;
}
}, {
key: "getAfterBody",
value: function getAfterBody(tooltipItems, options) {
- return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));
+ return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));
}
}, {
key: "getFooter",
value: function getFooter(tooltipItems, options) {
- var me = this;
var callbacks = options.callbacks;
- var beforeFooter = callbacks.beforeFooter.apply(me, [tooltipItems]);
- var footer = callbacks.footer.apply(me, [tooltipItems]);
- var afterFooter = callbacks.afterFooter.apply(me, [tooltipItems]);
+ var beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);
+ var footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);
+ var afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);
var lines = [];
lines = pushOrConcat(lines, splitNewlines(beforeFooter));
lines = pushOrConcat(lines, splitNewlines(footer));
lines = pushOrConcat(lines, splitNewlines(afterFooter));
return lines;
}
}, {
key: "_createItems",
value: function _createItems(options) {
- var me = this;
- var active = me._active;
- var data = me._chart.data;
+ var _this33 = this;
+ var active = this._active;
+ var data = this.chart.data;
var labelColors = [];
var labelPointStyles = [];
var labelTextColors = [];
var tooltipItems = [];
var i, len;
-
for (i = 0, len = active.length; i < len; ++i) {
- tooltipItems.push(createTooltipItem(me._chart, active[i]));
+ tooltipItems.push(createTooltipItem(this.chart, active[i]));
}
-
if (options.filter) {
tooltipItems = tooltipItems.filter(function (element, index, array) {
return options.filter(element, index, array, data);
});
}
-
if (options.itemSort) {
tooltipItems = tooltipItems.sort(function (a, b) {
return options.itemSort(a, b, data);
});
}
-
each(tooltipItems, function (context) {
var scoped = overrideCallbacks(options.callbacks, context);
- labelColors.push(scoped.labelColor.call(me, context));
- labelPointStyles.push(scoped.labelPointStyle.call(me, context));
- labelTextColors.push(scoped.labelTextColor.call(me, context));
+ labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', _this33, context));
+ labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', _this33, context));
+ labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', _this33, context));
});
- me.labelColors = labelColors;
- me.labelPointStyles = labelPointStyles;
- me.labelTextColors = labelTextColors;
- me.dataPoints = tooltipItems;
+ this.labelColors = labelColors;
+ this.labelPointStyles = labelPointStyles;
+ this.labelTextColors = labelTextColors;
+ this.dataPoints = tooltipItems;
return tooltipItems;
}
}, {
key: "update",
value: function update(changed, replay) {
- var me = this;
- var options = me.options.setContext(me.getContext());
- var active = me._active;
+ var options = this.options.setContext(this.getContext());
+ var active = this._active;
var properties;
var tooltipItems = [];
-
if (!active.length) {
- if (me.opacity !== 0) {
+ if (this.opacity !== 0) {
properties = {
opacity: 0
};
}
} else {
- var position = positioners[options.position].call(me, active, me._eventPosition);
- tooltipItems = me._createItems(options);
- me.title = me.getTitle(tooltipItems, options);
- me.beforeBody = me.getBeforeBody(tooltipItems, options);
- me.body = me.getBody(tooltipItems, options);
- me.afterBody = me.getAfterBody(tooltipItems, options);
- me.footer = me.getFooter(tooltipItems, options);
- var size = me._size = getTooltipSize(me, options);
+ var position = positioners[options.position].call(this, active, this._eventPosition);
+ tooltipItems = this._createItems(options);
+ this.title = this.getTitle(tooltipItems, options);
+ this.beforeBody = this.getBeforeBody(tooltipItems, options);
+ this.body = this.getBody(tooltipItems, options);
+ this.afterBody = this.getAfterBody(tooltipItems, options);
+ this.footer = this.getFooter(tooltipItems, options);
+ var size = this._size = getTooltipSize(this, options);
var positionAndSize = Object.assign({}, position, size);
- var alignment = determineAlignment(me._chart, options, positionAndSize);
- var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, me._chart);
- me.xAlign = alignment.xAlign;
- me.yAlign = alignment.yAlign;
+ var alignment = determineAlignment(this.chart, options, positionAndSize);
+ var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);
+ this.xAlign = alignment.xAlign;
+ this.yAlign = alignment.yAlign;
properties = {
opacity: 1,
x: backgroundPoint.x,
y: backgroundPoint.y,
width: size.width,
height: size.height,
caretX: position.x,
caretY: position.y
};
}
-
- me._tooltipItems = tooltipItems;
- me.$context = undefined;
-
+ this._tooltipItems = tooltipItems;
+ this.$context = undefined;
if (properties) {
- me._resolveAnimations().update(me, properties);
+ this._resolveAnimations().update(this, properties);
}
-
if (changed && options.external) {
- options.external.call(me, {
- chart: me._chart,
- tooltip: me,
+ options.external.call(this, {
+ chart: this.chart,
+ tooltip: this,
replay: replay
});
}
}
}, {
@@ -14753,22 +14658,25 @@
}
}, {
key: "getCaretPosition",
value: function getCaretPosition(tooltipPoint, size, options) {
var xAlign = this.xAlign,
- yAlign = this.yAlign;
- var cornerRadius = options.cornerRadius,
- caretSize = options.caretSize;
+ yAlign = this.yAlign;
+ var caretSize = options.caretSize,
+ cornerRadius = options.cornerRadius;
+ var _toTRBLCorners2 = toTRBLCorners(cornerRadius),
+ topLeft = _toTRBLCorners2.topLeft,
+ topRight = _toTRBLCorners2.topRight,
+ bottomLeft = _toTRBLCorners2.bottomLeft,
+ bottomRight = _toTRBLCorners2.bottomRight;
var ptX = tooltipPoint.x,
- ptY = tooltipPoint.y;
+ ptY = tooltipPoint.y;
var width = size.width,
- height = size.height;
+ height = size.height;
var x1, x2, x3, y1, y2, y3;
-
if (yAlign === 'center') {
y2 = ptY + height / 2;
-
if (xAlign === 'left') {
x1 = ptX;
x2 = x1 - caretSize;
y1 = y2 + caretSize;
y3 = y2 - caretSize;
@@ -14776,21 +14684,19 @@
x1 = ptX + width;
x2 = x1 + caretSize;
y1 = y2 - caretSize;
y3 = y2 + caretSize;
}
-
x3 = x1;
} else {
if (xAlign === 'left') {
- x2 = ptX + cornerRadius + caretSize;
+ x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;
} else if (xAlign === 'right') {
- x2 = ptX + width - cornerRadius - caretSize;
+ x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
} else {
x2 = this.caretX;
}
-
if (yAlign === 'top') {
y1 = ptY;
y2 = y1 - caretSize;
x1 = x2 - caretSize;
x3 = x2 + caretSize;
@@ -14798,14 +14704,12 @@
y1 = ptY + height;
y2 = y1 + caretSize;
x1 = x2 + caretSize;
x3 = x2 - caretSize;
}
-
y3 = y1;
}
-
return {
x1: x1,
x2: x2,
x3: x3,
y1: y1,
@@ -14814,49 +14718,44 @@
};
}
}, {
key: "drawTitle",
value: function drawTitle(pt, ctx, options) {
- var me = this;
- var title = me.title;
+ var title = this.title;
var length = title.length;
var titleFont, titleSpacing, i;
-
if (length) {
- var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);
- pt.x = getAlignedX(me, options.titleAlign, options);
+ var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
+ pt.x = getAlignedX(this, options.titleAlign, options);
ctx.textAlign = rtlHelper.textAlign(options.titleAlign);
ctx.textBaseline = 'middle';
titleFont = toFont(options.titleFont);
titleSpacing = options.titleSpacing;
ctx.fillStyle = options.titleColor;
ctx.font = titleFont.string;
-
for (i = 0; i < length; ++i) {
ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
pt.y += titleFont.lineHeight + titleSpacing;
-
if (i + 1 === length) {
pt.y += options.titleMarginBottom - titleSpacing;
}
}
}
}
}, {
key: "_drawColorBox",
value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {
- var me = this;
- var labelColors = me.labelColors[i];
- var labelPointStyle = me.labelPointStyles[i];
+ var labelColors = this.labelColors[i];
+ var labelPointStyle = this.labelPointStyles[i];
var boxHeight = options.boxHeight,
- boxWidth = options.boxWidth;
+ boxWidth = options.boxWidth,
+ boxPadding = options.boxPadding;
var bodyFont = toFont(options.bodyFont);
- var colorX = getAlignedX(me, 'left', options);
+ var colorX = getAlignedX(this, 'left', options);
var rtlColorX = rtlHelper.x(colorX);
var yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
var colorY = pt.y + yOffSet;
-
if (options.usePointStyle) {
var drawOptions = {
radius: Math.min(boxWidth, boxHeight) / 2,
pointStyle: labelPointStyle.pointStyle,
rotation: labelPointStyle.rotation,
@@ -14869,218 +14768,226 @@
drawPoint(ctx, drawOptions, centerX, centerY);
ctx.strokeStyle = labelColors.borderColor;
ctx.fillStyle = labelColors.backgroundColor;
drawPoint(ctx, drawOptions, centerX, centerY);
} else {
- ctx.fillStyle = options.multiKeyBackground;
- ctx.fillRect(rtlHelper.leftForLtr(rtlColorX, boxWidth), colorY, boxWidth, boxHeight);
- ctx.lineWidth = 1;
+ ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max.apply(Math, _toConsumableArray(Object.values(labelColors.borderWidth))) : labelColors.borderWidth || 1;
ctx.strokeStyle = labelColors.borderColor;
- ctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, boxWidth), colorY, boxWidth, boxHeight);
- ctx.fillStyle = labelColors.backgroundColor;
- ctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2), colorY + 1, boxWidth - 2, boxHeight - 2);
+ ctx.setLineDash(labelColors.borderDash || []);
+ ctx.lineDashOffset = labelColors.borderDashOffset || 0;
+ var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);
+ var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);
+ var borderRadius = toTRBLCorners(labelColors.borderRadius);
+ if (Object.values(borderRadius).some(function (v) {
+ return v !== 0;
+ })) {
+ ctx.beginPath();
+ ctx.fillStyle = options.multiKeyBackground;
+ addRoundedRectPath(ctx, {
+ x: outerX,
+ y: colorY,
+ w: boxWidth,
+ h: boxHeight,
+ radius: borderRadius
+ });
+ ctx.fill();
+ ctx.stroke();
+ ctx.fillStyle = labelColors.backgroundColor;
+ ctx.beginPath();
+ addRoundedRectPath(ctx, {
+ x: innerX,
+ y: colorY + 1,
+ w: boxWidth - 2,
+ h: boxHeight - 2,
+ radius: borderRadius
+ });
+ ctx.fill();
+ } else {
+ ctx.fillStyle = options.multiKeyBackground;
+ ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
+ ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
+ ctx.fillStyle = labelColors.backgroundColor;
+ ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
+ }
}
-
- ctx.fillStyle = me.labelTextColors[i];
+ ctx.fillStyle = this.labelTextColors[i];
}
}, {
key: "drawBody",
value: function drawBody(pt, ctx, options) {
- var me = this;
- var body = me.body;
+ var body = this.body;
var bodySpacing = options.bodySpacing,
- bodyAlign = options.bodyAlign,
- displayColors = options.displayColors,
- boxHeight = options.boxHeight,
- boxWidth = options.boxWidth;
+ bodyAlign = options.bodyAlign,
+ displayColors = options.displayColors,
+ boxHeight = options.boxHeight,
+ boxWidth = options.boxWidth,
+ boxPadding = options.boxPadding;
var bodyFont = toFont(options.bodyFont);
var bodyLineHeight = bodyFont.lineHeight;
var xLinePadding = 0;
- var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);
-
+ var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
var fillLineOfText = function fillLineOfText(line) {
ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
pt.y += bodyLineHeight + bodySpacing;
};
-
var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
var bodyItem, textColor, lines, i, j, ilen, jlen;
ctx.textAlign = bodyAlign;
ctx.textBaseline = 'middle';
ctx.font = bodyFont.string;
- pt.x = getAlignedX(me, bodyAlignForCalculation, options);
+ pt.x = getAlignedX(this, bodyAlignForCalculation, options);
ctx.fillStyle = options.bodyColor;
- each(me.beforeBody, fillLineOfText);
- xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + 1 : boxWidth + 2 : 0;
-
+ each(this.beforeBody, fillLineOfText);
+ xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;
for (i = 0, ilen = body.length; i < ilen; ++i) {
bodyItem = body[i];
- textColor = me.labelTextColors[i];
+ textColor = this.labelTextColors[i];
ctx.fillStyle = textColor;
each(bodyItem.before, fillLineOfText);
lines = bodyItem.lines;
-
if (displayColors && lines.length) {
- me._drawColorBox(ctx, pt, i, rtlHelper, options);
-
+ this._drawColorBox(ctx, pt, i, rtlHelper, options);
bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
}
-
for (j = 0, jlen = lines.length; j < jlen; ++j) {
fillLineOfText(lines[j]);
bodyLineHeight = bodyFont.lineHeight;
}
-
each(bodyItem.after, fillLineOfText);
}
-
xLinePadding = 0;
bodyLineHeight = bodyFont.lineHeight;
- each(me.afterBody, fillLineOfText);
+ each(this.afterBody, fillLineOfText);
pt.y -= bodySpacing;
}
}, {
key: "drawFooter",
value: function drawFooter(pt, ctx, options) {
- var me = this;
- var footer = me.footer;
+ var footer = this.footer;
var length = footer.length;
var footerFont, i;
-
if (length) {
- var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);
- pt.x = getAlignedX(me, options.footerAlign, options);
+ var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
+ pt.x = getAlignedX(this, options.footerAlign, options);
pt.y += options.footerMarginTop;
ctx.textAlign = rtlHelper.textAlign(options.footerAlign);
ctx.textBaseline = 'middle';
footerFont = toFont(options.footerFont);
ctx.fillStyle = options.footerColor;
ctx.font = footerFont.string;
-
for (i = 0; i < length; ++i) {
ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
pt.y += footerFont.lineHeight + options.footerSpacing;
}
}
}
}, {
key: "drawBackground",
value: function drawBackground(pt, ctx, tooltipSize, options) {
var xAlign = this.xAlign,
- yAlign = this.yAlign;
+ yAlign = this.yAlign;
var x = pt.x,
- y = pt.y;
+ y = pt.y;
var width = tooltipSize.width,
- height = tooltipSize.height;
- var radius = options.cornerRadius;
+ height = tooltipSize.height;
+ var _toTRBLCorners3 = toTRBLCorners(options.cornerRadius),
+ topLeft = _toTRBLCorners3.topLeft,
+ topRight = _toTRBLCorners3.topRight,
+ bottomLeft = _toTRBLCorners3.bottomLeft,
+ bottomRight = _toTRBLCorners3.bottomRight;
ctx.fillStyle = options.backgroundColor;
ctx.strokeStyle = options.borderColor;
ctx.lineWidth = options.borderWidth;
ctx.beginPath();
- ctx.moveTo(x + radius, y);
-
+ ctx.moveTo(x + topLeft, y);
if (yAlign === 'top') {
this.drawCaret(pt, ctx, tooltipSize, options);
}
-
- ctx.lineTo(x + width - radius, y);
- ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
-
+ ctx.lineTo(x + width - topRight, y);
+ ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
if (yAlign === 'center' && xAlign === 'right') {
this.drawCaret(pt, ctx, tooltipSize, options);
}
-
- ctx.lineTo(x + width, y + height - radius);
- ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
-
+ ctx.lineTo(x + width, y + height - bottomRight);
+ ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
if (yAlign === 'bottom') {
this.drawCaret(pt, ctx, tooltipSize, options);
}
-
- ctx.lineTo(x + radius, y + height);
- ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
-
+ ctx.lineTo(x + bottomLeft, y + height);
+ ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
if (yAlign === 'center' && xAlign === 'left') {
this.drawCaret(pt, ctx, tooltipSize, options);
}
-
- ctx.lineTo(x, y + radius);
- ctx.quadraticCurveTo(x, y, x + radius, y);
+ ctx.lineTo(x, y + topLeft);
+ ctx.quadraticCurveTo(x, y, x + topLeft, y);
ctx.closePath();
ctx.fill();
-
if (options.borderWidth > 0) {
ctx.stroke();
}
}
}, {
key: "_updateAnimationTarget",
value: function _updateAnimationTarget(options) {
- var me = this;
- var chart = me._chart;
- var anims = me.$animations;
+ var chart = this.chart;
+ var anims = this.$animations;
var animX = anims && anims.x;
var animY = anims && anims.y;
-
if (animX || animY) {
- var position = positioners[options.position].call(me, me._active, me._eventPosition);
-
+ var position = positioners[options.position].call(this, this._active, this._eventPosition);
if (!position) {
return;
}
-
- var size = me._size = getTooltipSize(me, options);
- var positionAndSize = Object.assign({}, position, me._size);
+ var size = this._size = getTooltipSize(this, options);
+ var positionAndSize = Object.assign({}, position, this._size);
var alignment = determineAlignment(chart, options, positionAndSize);
var point = getBackgroundPoint(options, positionAndSize, alignment, chart);
-
if (animX._to !== point.x || animY._to !== point.y) {
- me.xAlign = alignment.xAlign;
- me.yAlign = alignment.yAlign;
- me.width = size.width;
- me.height = size.height;
- me.caretX = position.x;
- me.caretY = position.y;
-
- me._resolveAnimations().update(me, point);
+ this.xAlign = alignment.xAlign;
+ this.yAlign = alignment.yAlign;
+ this.width = size.width;
+ this.height = size.height;
+ this.caretX = position.x;
+ this.caretY = position.y;
+ this._resolveAnimations().update(this, point);
}
}
}
}, {
+ key: "_willRender",
+ value: function _willRender() {
+ return !!this.opacity;
+ }
+ }, {
key: "draw",
value: function draw(ctx) {
- var me = this;
- var options = me.options.setContext(me.getContext());
- var opacity = me.opacity;
-
+ var options = this.options.setContext(this.getContext());
+ var opacity = this.opacity;
if (!opacity) {
return;
}
-
- me._updateAnimationTarget(options);
-
+ this._updateAnimationTarget(options);
var tooltipSize = {
- width: me.width,
- height: me.height
+ width: this.width,
+ height: this.height
};
var pt = {
- x: me.x,
- y: me.y
+ x: this.x,
+ y: this.y
};
opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
var padding = toPadding(options.padding);
- var hasTooltipContent = me.title.length || me.beforeBody.length || me.body.length || me.afterBody.length || me.footer.length;
-
+ var hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
if (options.enabled && hasTooltipContent) {
ctx.save();
ctx.globalAlpha = opacity;
- me.drawBackground(pt, ctx, tooltipSize, options);
+ this.drawBackground(pt, ctx, tooltipSize, options);
overrideTextDirection(ctx, options.textDirection);
pt.y += padding.top;
- me.drawTitle(pt, ctx, options);
- me.drawBody(pt, ctx, options);
- me.drawFooter(pt, ctx, options);
+ this.drawTitle(pt, ctx, options);
+ this.drawBody(pt, ctx, options);
+ this.drawFooter(pt, ctx, options);
restoreTextDirection(ctx, options.textDirection);
ctx.restore();
}
}
}, {
@@ -15089,94 +14996,96 @@
return this._active || [];
}
}, {
key: "setActiveElements",
value: function setActiveElements(activeElements, eventPosition) {
- var me = this;
- var lastActive = me._active;
- var active = activeElements.map(function (_ref7) {
- var datasetIndex = _ref7.datasetIndex,
- index = _ref7.index;
-
- var meta = me._chart.getDatasetMeta(datasetIndex);
-
+ var _this34 = this;
+ var lastActive = this._active;
+ var active = activeElements.map(function (_ref11) {
+ var datasetIndex = _ref11.datasetIndex,
+ index = _ref11.index;
+ var meta = _this34.chart.getDatasetMeta(datasetIndex);
if (!meta) {
throw new Error('Cannot find a dataset at index ' + datasetIndex);
}
-
return {
datasetIndex: datasetIndex,
element: meta.data[index],
index: index
};
});
var changed = !_elementsEqual(lastActive, active);
-
- var positionChanged = me._positionChanged(active, eventPosition);
-
+ var positionChanged = this._positionChanged(active, eventPosition);
if (changed || positionChanged) {
- me._active = active;
- me._eventPosition = eventPosition;
- me.update(true);
+ this._active = active;
+ this._eventPosition = eventPosition;
+ this._ignoreReplayEvents = true;
+ this.update(true);
}
}
}, {
key: "handleEvent",
value: function handleEvent(e, replay) {
- var me = this;
- var options = me.options;
- var lastActive = me._active || [];
- var changed = false;
- var active = [];
-
- if (e.type !== 'mouseout') {
- active = me._chart.getElementsAtEventForMode(e, options.mode, options, replay);
-
- if (options.reverse) {
- active.reverse();
- }
+ var inChartArea = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+ if (replay && this._ignoreReplayEvents) {
+ return false;
}
-
- var positionChanged = me._positionChanged(active, e);
-
- changed = replay || !_elementsEqual(active, lastActive) || positionChanged;
-
+ this._ignoreReplayEvents = false;
+ var options = this.options;
+ var lastActive = this._active || [];
+ var active = this._getActiveElements(e, lastActive, replay, inChartArea);
+ var positionChanged = this._positionChanged(active, e);
+ var changed = replay || !_elementsEqual(active, lastActive) || positionChanged;
if (changed) {
- me._active = active;
-
+ this._active = active;
if (options.enabled || options.external) {
- me._eventPosition = {
+ this._eventPosition = {
x: e.x,
y: e.y
};
- me.update(true, replay);
+ this.update(true, replay);
}
}
-
return changed;
}
}, {
+ key: "_getActiveElements",
+ value: function _getActiveElements(e, lastActive, replay, inChartArea) {
+ var options = this.options;
+ if (e.type === 'mouseout') {
+ return [];
+ }
+ if (!inChartArea) {
+ return lastActive;
+ }
+ var active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);
+ if (options.reverse) {
+ active.reverse();
+ }
+ return active;
+ }
+ }, {
key: "_positionChanged",
value: function _positionChanged(active, e) {
- var me = this;
- var position = positioners[me.options.position].call(me, active, e);
- return me.caretX !== position.x || me.caretY !== position.y;
+ var caretX = this.caretX,
+ caretY = this.caretY,
+ options = this.options;
+ var position = positioners[options.position].call(this, active, e);
+ return position !== false && (caretX !== position.x || caretY !== position.y);
}
}]);
-
return Tooltip;
}(Element);
-
- Tooltip.positioners = positioners;
+ _defineProperty$w(Tooltip, "positioners", positioners);
var plugin_tooltip = {
id: 'tooltip',
_element: Tooltip,
positioners: positioners,
afterInit: function afterInit(chart, _args, options) {
if (options) {
chart.tooltip = new Tooltip({
- _chart: chart,
+ chart: chart,
options: options
});
}
},
beforeUpdate: function beforeUpdate(chart, _args, options) {
@@ -15189,29 +15098,27 @@
chart.tooltip.initialize(options);
}
},
afterDraw: function afterDraw(chart) {
var tooltip = chart.tooltip;
- var args = {
- tooltip: tooltip
- };
-
- if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {
- return;
- }
-
- if (tooltip) {
+ if (tooltip && tooltip._willRender()) {
+ var args = {
+ tooltip: tooltip
+ };
+ if (chart.notifyPlugins('beforeTooltipDraw', _objectSpread2(_objectSpread2({}, args), {}, {
+ cancelable: true
+ })) === false) {
+ return;
+ }
tooltip.draw(chart.ctx);
+ chart.notifyPlugins('afterTooltipDraw', args);
}
-
- chart.notifyPlugins('afterTooltipDraw', args);
},
afterEvent: function afterEvent(chart, args) {
if (chart.tooltip) {
var useFinalPosition = args.replay;
-
- if (chart.tooltip.handleEvent(args.event, useFinalPosition)) {
+ if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
args.changed = true;
}
}
},
defaults: {
@@ -15219,11 +15126,11 @@
external: null,
position: 'average',
backgroundColor: 'rgba(0,0,0,0.8)',
titleColor: '#fff',
titleFont: {
- style: 'bold'
+ weight: 'bold'
},
titleSpacing: 2,
titleMarginBottom: 6,
titleAlign: 'left',
bodyColor: '#fff',
@@ -15232,11 +15139,11 @@
bodyAlign: 'left',
footerColor: '#fff',
footerSpacing: 2,
footerMarginTop: 6,
footerFont: {
- style: 'bold'
+ weight: 'bold'
},
footerAlign: 'left',
padding: 6,
caretPadding: 2,
caretSize: 5,
@@ -15247,10 +15154,11 @@
boxWidth: function boxWidth(ctx, opts) {
return opts.bodyFont.size;
},
multiKeyBackground: '#fff',
displayColors: true,
+ boxPadding: 0,
borderColor: 'rgba(0,0,0,0)',
borderWidth: 0,
animation: {
duration: 400,
easing: 'easeOutQuart'
@@ -15263,76 +15171,11 @@
opacity: {
easing: 'linear',
duration: 200
}
},
- callbacks: {
- beforeTitle: noop,
- title: function title(tooltipItems) {
- if (tooltipItems.length > 0) {
- var item = tooltipItems[0];
- var labels = item.chart.data.labels;
- var labelCount = labels ? labels.length : 0;
-
- if (this && this.options && this.options.mode === 'dataset') {
- return item.dataset.label || '';
- } else if (item.label) {
- return item.label;
- } else if (labelCount > 0 && item.dataIndex < labelCount) {
- return labels[item.dataIndex];
- }
- }
-
- return '';
- },
- afterTitle: noop,
- beforeBody: noop,
- beforeLabel: noop,
- label: function label(tooltipItem) {
- if (this && this.options && this.options.mode === 'dataset') {
- return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;
- }
-
- var label = tooltipItem.dataset.label || '';
-
- if (label) {
- label += ': ';
- }
-
- var value = tooltipItem.formattedValue;
-
- if (!isNullOrUndef(value)) {
- label += value;
- }
-
- return label;
- },
- labelColor: function labelColor(tooltipItem) {
- var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
- var options = meta.controller.getStyle(tooltipItem.dataIndex);
- return {
- borderColor: options.borderColor,
- backgroundColor: options.backgroundColor
- };
- },
- labelTextColor: function labelTextColor() {
- return this.options.bodyColor;
- },
- labelPointStyle: function labelPointStyle(tooltipItem) {
- var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
- var options = meta.controller.getStyle(tooltipItem.dataIndex);
- return {
- pointStyle: options.pointStyle,
- rotation: options.rotation
- };
- },
- afterLabel: noop,
- afterBody: noop,
- beforeFooter: noop,
- footer: noop,
- afterFooter: noop
- }
+ callbacks: defaultCallbacks
},
defaultRoutes: {
bodyFont: 'font',
footerFont: 'font',
titleFont: 'font'
@@ -15355,485 +15198,464 @@
},
additionalOptionScopes: ['interaction']
};
var plugins = /*#__PURE__*/Object.freeze({
__proto__: null,
+ Colors: plugin_colors,
Decimation: plugin_decimation,
- Filler: plugin_filler,
+ Filler: index,
Legend: plugin_legend,
+ SubTitle: plugin_subtitle,
Title: plugin_title,
Tooltip: plugin_tooltip
});
-
- var addIfString = function addIfString(labels, raw, index) {
- return typeof raw === 'string' ? labels.push(raw) - 1 : isNaN(raw) ? null : index;
+ var addIfString = function addIfString(labels, raw, index, addedLabels) {
+ if (typeof raw === 'string') {
+ index = labels.push(raw) - 1;
+ addedLabels.unshift({
+ index: index,
+ label: raw
+ });
+ } else if (isNaN(raw)) {
+ index = null;
+ }
+ return index;
};
-
- function findOrAddLabel(labels, raw, index) {
+ function findOrAddLabel(labels, raw, index, addedLabels) {
var first = labels.indexOf(raw);
-
if (first === -1) {
- return addIfString(labels, raw, index);
+ return addIfString(labels, raw, index, addedLabels);
}
-
var last = labels.lastIndexOf(raw);
return first !== last ? index : first;
}
-
var validIndex = function validIndex(index, max) {
return index === null ? null : _limitValue(Math.round(index), 0, max);
};
-
+ function _getLabelForValue(value) {
+ var labels = this.getLabels();
+ if (value >= 0 && value < labels.length) {
+ return labels[value];
+ }
+ return value;
+ }
var CategoryScale = /*#__PURE__*/function (_Scale) {
- _inherits(CategoryScale, _Scale);
-
- var _super19 = _createSuper(CategoryScale);
-
+ _inherits$w(CategoryScale, _Scale);
+ var _super19 = _createSuper$w(CategoryScale);
function CategoryScale(cfg) {
- var _this13;
-
- _classCallCheck(this, CategoryScale);
-
- _this13 = _super19.call(this, cfg);
- _this13._startValue = undefined;
- _this13._valueRange = 0;
- return _this13;
+ var _this35;
+ _classCallCheck$x(this, CategoryScale);
+ _this35 = _super19.call(this, cfg);
+ _this35._startValue = undefined;
+ _this35._valueRange = 0;
+ _this35._addedLabels = [];
+ return _this35;
}
-
- _createClass(CategoryScale, [{
+ _createClass$x(CategoryScale, [{
+ key: "init",
+ value: function init(scaleOptions) {
+ var added = this._addedLabels;
+ if (added.length) {
+ var labels = this.getLabels();
+ var _iterator25 = _createForOfIteratorHelper$1(added),
+ _step25;
+ try {
+ for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
+ var _step25$value = _step25.value,
+ _index3 = _step25$value.index,
+ label = _step25$value.label;
+ if (labels[_index3] === label) {
+ labels.splice(_index3, 1);
+ }
+ }
+ } catch (err) {
+ _iterator25.e(err);
+ } finally {
+ _iterator25.f();
+ }
+ this._addedLabels = [];
+ }
+ _get(_getPrototypeOf$w(CategoryScale.prototype), "init", this).call(this, scaleOptions);
+ }
+ }, {
key: "parse",
value: function parse(raw, index) {
if (isNullOrUndef(raw)) {
return null;
}
-
var labels = this.getLabels();
- index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw));
+ index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);
return validIndex(index, labels.length - 1);
}
}, {
key: "determineDataLimits",
value: function determineDataLimits() {
- var me = this;
-
- var _me$getUserBounds2 = me.getUserBounds(),
- minDefined = _me$getUserBounds2.minDefined,
- maxDefined = _me$getUserBounds2.maxDefined;
-
- var _me$getMinMax = me.getMinMax(true),
- min = _me$getMinMax.min,
- max = _me$getMinMax.max;
-
- if (me.options.bounds === 'ticks') {
+ var _this$getUserBounds2 = this.getUserBounds(),
+ minDefined = _this$getUserBounds2.minDefined,
+ maxDefined = _this$getUserBounds2.maxDefined;
+ var _this$getMinMax = this.getMinMax(true),
+ min = _this$getMinMax.min,
+ max = _this$getMinMax.max;
+ if (this.options.bounds === 'ticks') {
if (!minDefined) {
min = 0;
}
-
if (!maxDefined) {
- max = me.getLabels().length - 1;
+ max = this.getLabels().length - 1;
}
}
-
- me.min = min;
- me.max = max;
+ this.min = min;
+ this.max = max;
}
}, {
key: "buildTicks",
value: function buildTicks() {
- var me = this;
- var min = me.min;
- var max = me.max;
- var offset = me.options.offset;
+ var min = this.min;
+ var max = this.max;
+ var offset = this.options.offset;
var ticks = [];
- var labels = me.getLabels();
+ var labels = this.getLabels();
labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);
- me._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
- me._startValue = me.min - (offset ? 0.5 : 0);
-
+ this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
+ this._startValue = this.min - (offset ? 0.5 : 0);
for (var value = min; value <= max; value++) {
ticks.push({
value: value
});
}
-
return ticks;
}
}, {
key: "getLabelForValue",
value: function getLabelForValue(value) {
- var me = this;
- var labels = me.getLabels();
-
- if (value >= 0 && value < labels.length) {
- return labels[value];
- }
-
- return value;
+ return _getLabelForValue.call(this, value);
}
}, {
key: "configure",
value: function configure() {
- var me = this;
-
- _get(_getPrototypeOf(CategoryScale.prototype), "configure", this).call(this);
-
- if (!me.isHorizontal()) {
- me._reversePixels = !me._reversePixels;
+ _get(_getPrototypeOf$w(CategoryScale.prototype), "configure", this).call(this);
+ if (!this.isHorizontal()) {
+ this._reversePixels = !this._reversePixels;
}
}
}, {
key: "getPixelForValue",
value: function getPixelForValue(value) {
- var me = this;
-
if (typeof value !== 'number') {
- value = me.parse(value);
+ value = this.parse(value);
}
-
- return value === null ? NaN : me.getPixelForDecimal((value - me._startValue) / me._valueRange);
+ return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
}
}, {
key: "getPixelForTick",
value: function getPixelForTick(index) {
- var me = this;
- var ticks = me.ticks;
-
+ var ticks = this.ticks;
if (index < 0 || index > ticks.length - 1) {
return null;
}
-
- return me.getPixelForValue(ticks[index].value);
+ return this.getPixelForValue(ticks[index].value);
}
}, {
key: "getValueForPixel",
value: function getValueForPixel(pixel) {
- var me = this;
- return Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);
+ return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
}
}, {
key: "getBasePixel",
value: function getBasePixel() {
return this.bottom;
}
}]);
-
return CategoryScale;
}(Scale);
-
- CategoryScale.id = 'category';
- CategoryScale.defaults = {
+ _defineProperty$w(CategoryScale, "id", 'category');
+ _defineProperty$w(CategoryScale, "defaults", {
ticks: {
- callback: CategoryScale.prototype.getLabelForValue
+ callback: _getLabelForValue
}
- };
-
+ });
function generateTicks$1(generationOptions, dataRange) {
var ticks = [];
var MIN_SPACING = 1e-14;
- var step = generationOptions.step,
- min = generationOptions.min,
- max = generationOptions.max,
- precision = generationOptions.precision,
- count = generationOptions.count,
- maxTicks = generationOptions.maxTicks;
+ var bounds = generationOptions.bounds,
+ step = generationOptions.step,
+ min = generationOptions.min,
+ max = generationOptions.max,
+ precision = generationOptions.precision,
+ count = generationOptions.count,
+ maxTicks = generationOptions.maxTicks,
+ maxDigits = generationOptions.maxDigits,
+ includeBounds = generationOptions.includeBounds;
var unit = step || 1;
var maxSpaces = maxTicks - 1;
var rmin = dataRange.min,
- rmax = dataRange.max;
+ rmax = dataRange.max;
var minDefined = !isNullOrUndef(min);
var maxDefined = !isNullOrUndef(max);
var countDefined = !isNullOrUndef(count);
+ var minSpacing = (rmax - rmin) / (maxDigits + 1);
var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
var factor, niceMin, niceMax, numSpaces;
-
if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
return [{
value: rmin
}, {
value: rmax
}];
}
-
numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
-
if (numSpaces > maxSpaces) {
spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;
}
-
if (!isNullOrUndef(precision)) {
factor = Math.pow(10, precision);
spacing = Math.ceil(spacing * factor) / factor;
}
-
- niceMin = Math.floor(rmin / spacing) * spacing;
- niceMax = Math.ceil(rmax / spacing) * spacing;
-
+ if (bounds === 'ticks') {
+ niceMin = Math.floor(rmin / spacing) * spacing;
+ niceMax = Math.ceil(rmax / spacing) * spacing;
+ } else {
+ niceMin = rmin;
+ niceMax = rmax;
+ }
if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {
- numSpaces = Math.min((max - min) / spacing, maxTicks);
+ numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
spacing = (max - min) / numSpaces;
niceMin = min;
niceMax = max;
} else if (countDefined) {
niceMin = minDefined ? min : niceMin;
niceMax = maxDefined ? max : niceMax;
numSpaces = count - 1;
spacing = (niceMax - niceMin) / numSpaces;
} else {
numSpaces = (niceMax - niceMin) / spacing;
-
if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
numSpaces = Math.round(numSpaces);
} else {
numSpaces = Math.ceil(numSpaces);
}
}
-
- factor = Math.pow(10, isNullOrUndef(precision) ? _decimalPlaces(spacing) : precision);
+ var decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));
+ factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);
niceMin = Math.round(niceMin * factor) / factor;
niceMax = Math.round(niceMax * factor) / factor;
var j = 0;
-
if (minDefined) {
- ticks.push({
- value: min
- });
-
- if (niceMin <= min) {
+ if (includeBounds && niceMin !== min) {
+ ticks.push({
+ value: min
+ });
+ if (niceMin < min) {
+ j++;
+ }
+ if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
+ j++;
+ }
+ } else if (niceMin < min) {
j++;
}
-
- if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, spacing / 10)) {
- j++;
- }
}
-
for (; j < numSpaces; ++j) {
ticks.push({
value: Math.round((niceMin + j * spacing) * factor) / factor
});
}
-
- if (maxDefined) {
- if (almostEquals(ticks[ticks.length - 1].value, max, spacing / 10)) {
+ if (maxDefined && includeBounds && niceMax !== max) {
+ if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
ticks[ticks.length - 1].value = max;
} else {
ticks.push({
value: max
});
}
- } else {
+ } else if (!maxDefined || niceMax === max) {
ticks.push({
value: niceMax
});
}
-
return ticks;
}
-
+ function relativeLabelSize(value, minSpacing, _ref12) {
+ var horizontal = _ref12.horizontal,
+ minRotation = _ref12.minRotation;
+ var rad = toRadians(minRotation);
+ var ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;
+ var length = 0.75 * minSpacing * ('' + value).length;
+ return Math.min(minSpacing / ratio, length);
+ }
var LinearScaleBase = /*#__PURE__*/function (_Scale2) {
- _inherits(LinearScaleBase, _Scale2);
-
- var _super20 = _createSuper(LinearScaleBase);
-
+ _inherits$w(LinearScaleBase, _Scale2);
+ var _super20 = _createSuper$w(LinearScaleBase);
function LinearScaleBase(cfg) {
- var _this14;
-
- _classCallCheck(this, LinearScaleBase);
-
- _this14 = _super20.call(this, cfg);
- _this14.start = undefined;
- _this14.end = undefined;
- _this14._startValue = undefined;
- _this14._endValue = undefined;
- _this14._valueRange = 0;
- return _this14;
+ var _this36;
+ _classCallCheck$x(this, LinearScaleBase);
+ _this36 = _super20.call(this, cfg);
+ _this36.start = undefined;
+ _this36.end = undefined;
+ _this36._startValue = undefined;
+ _this36._endValue = undefined;
+ _this36._valueRange = 0;
+ return _this36;
}
-
- _createClass(LinearScaleBase, [{
+ _createClass$x(LinearScaleBase, [{
key: "parse",
value: function parse(raw, index) {
if (isNullOrUndef(raw)) {
return null;
}
-
if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {
return null;
}
-
return +raw;
}
}, {
key: "handleTickRangeOptions",
value: function handleTickRangeOptions() {
- var me = this;
- var _me$options7 = me.options,
- beginAtZero = _me$options7.beginAtZero,
- stacked = _me$options7.stacked;
-
- var _me$getUserBounds3 = me.getUserBounds(),
- minDefined = _me$getUserBounds3.minDefined,
- maxDefined = _me$getUserBounds3.maxDefined;
-
- var min = me.min,
- max = me.max;
-
+ var beginAtZero = this.options.beginAtZero;
+ var _this$getUserBounds3 = this.getUserBounds(),
+ minDefined = _this$getUserBounds3.minDefined,
+ maxDefined = _this$getUserBounds3.maxDefined;
+ var min = this.min,
+ max = this.max;
var setMin = function setMin(v) {
return min = minDefined ? min : v;
};
-
var setMax = function setMax(v) {
return max = maxDefined ? max : v;
};
-
- if (beginAtZero || stacked) {
+ if (beginAtZero) {
var minSign = sign(min);
var maxSign = sign(max);
-
if (minSign < 0 && maxSign < 0) {
setMax(0);
} else if (minSign > 0 && maxSign > 0) {
setMin(0);
}
}
-
if (min === max) {
- setMax(max + 1);
-
+ var offset = max === 0 ? 1 : Math.abs(max * 0.05);
+ setMax(max + offset);
if (!beginAtZero) {
- setMin(min - 1);
+ setMin(min - offset);
}
}
-
- me.min = min;
- me.max = max;
+ this.min = min;
+ this.max = max;
}
}, {
key: "getTickLimit",
value: function getTickLimit() {
- var me = this;
- var tickOpts = me.options.ticks;
+ var tickOpts = this.options.ticks;
var maxTicksLimit = tickOpts.maxTicksLimit,
- stepSize = tickOpts.stepSize;
+ stepSize = tickOpts.stepSize;
var maxTicks;
-
if (stepSize) {
- maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;
+ maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
+ if (maxTicks > 1000) {
+ console.warn("scales.".concat(this.id, ".ticks.stepSize: ").concat(stepSize, " would result generating up to ").concat(maxTicks, " ticks. Limiting to 1000."));
+ maxTicks = 1000;
+ }
} else {
- maxTicks = me.computeTickLimit();
+ maxTicks = this.computeTickLimit();
maxTicksLimit = maxTicksLimit || 11;
}
-
if (maxTicksLimit) {
maxTicks = Math.min(maxTicksLimit, maxTicks);
}
-
return maxTicks;
}
}, {
key: "computeTickLimit",
value: function computeTickLimit() {
return Number.POSITIVE_INFINITY;
}
}, {
key: "buildTicks",
value: function buildTicks() {
- var me = this;
- var opts = me.options;
+ var opts = this.options;
var tickOpts = opts.ticks;
- var maxTicks = me.getTickLimit();
+ var maxTicks = this.getTickLimit();
maxTicks = Math.max(2, maxTicks);
var numericGeneratorOptions = {
maxTicks: maxTicks,
+ bounds: opts.bounds,
min: opts.min,
max: opts.max,
precision: tickOpts.precision,
step: tickOpts.stepSize,
- count: tickOpts.count
+ count: tickOpts.count,
+ maxDigits: this._maxDigits(),
+ horizontal: this.isHorizontal(),
+ minRotation: tickOpts.minRotation || 0,
+ includeBounds: tickOpts.includeBounds !== false
};
- var ticks = generateTicks$1(numericGeneratorOptions, _addGrace(me, opts.grace));
-
+ var dataRange = this._range || this;
+ var ticks = generateTicks$1(numericGeneratorOptions, dataRange);
if (opts.bounds === 'ticks') {
- _setMinAndMaxByKey(ticks, me, 'value');
+ _setMinAndMaxByKey(ticks, this, 'value');
}
-
if (opts.reverse) {
ticks.reverse();
- me.start = me.max;
- me.end = me.min;
+ this.start = this.max;
+ this.end = this.min;
} else {
- me.start = me.min;
- me.end = me.max;
+ this.start = this.min;
+ this.end = this.max;
}
-
return ticks;
}
}, {
key: "configure",
value: function configure() {
- var me = this;
- var ticks = me.ticks;
- var start = me.min;
- var end = me.max;
-
- _get(_getPrototypeOf(LinearScaleBase.prototype), "configure", this).call(this);
-
- if (me.options.offset && ticks.length) {
+ var ticks = this.ticks;
+ var start = this.min;
+ var end = this.max;
+ _get(_getPrototypeOf$w(LinearScaleBase.prototype), "configure", this).call(this);
+ if (this.options.offset && ticks.length) {
var offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
start -= offset;
end += offset;
}
-
- me._startValue = start;
- me._endValue = end;
- me._valueRange = end - start;
+ this._startValue = start;
+ this._endValue = end;
+ this._valueRange = end - start;
}
}, {
key: "getLabelForValue",
value: function getLabelForValue(value) {
- return formatNumber(value, this.chart.options.locale);
+ return formatNumber(value, this.chart.options.locale, this.options.ticks.format);
}
}]);
-
return LinearScaleBase;
}(Scale);
-
var LinearScale = /*#__PURE__*/function (_LinearScaleBase) {
- _inherits(LinearScale, _LinearScaleBase);
-
- var _super21 = _createSuper(LinearScale);
-
+ _inherits$w(LinearScale, _LinearScaleBase);
+ var _super21 = _createSuper$w(LinearScale);
function LinearScale() {
- _classCallCheck(this, LinearScale);
-
+ _classCallCheck$x(this, LinearScale);
return _super21.apply(this, arguments);
}
-
- _createClass(LinearScale, [{
+ _createClass$x(LinearScale, [{
key: "determineDataLimits",
value: function determineDataLimits() {
- var me = this;
-
- var _me$getMinMax2 = me.getMinMax(true),
- min = _me$getMinMax2.min,
- max = _me$getMinMax2.max;
-
- me.min = isNumberFinite(min) ? min : 0;
- me.max = isNumberFinite(max) ? max : 1;
- me.handleTickRangeOptions();
+ var _this$getMinMax2 = this.getMinMax(true),
+ min = _this$getMinMax2.min,
+ max = _this$getMinMax2.max;
+ this.min = isNumberFinite(min) ? min : 0;
+ this.max = isNumberFinite(max) ? max : 1;
+ this.handleTickRangeOptions();
}
}, {
key: "computeTickLimit",
value: function computeTickLimit() {
- var me = this;
-
- if (me.isHorizontal()) {
- return Math.ceil(me.width / 40);
- }
-
- var tickFont = me._resolveTickFontOptions(0);
-
- return Math.ceil(me.height / tickFont.lineHeight);
+ var horizontal = this.isHorizontal();
+ var length = horizontal ? this.width : this.height;
+ var minRotation = toRadians(this.options.ticks.minRotation);
+ var ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;
+ var tickFont = this._resolveTickFontOptions(0);
+ return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
}
}, {
key: "getPixelForValue",
value: function getPixelForValue(value) {
return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
@@ -15842,260 +15664,235 @@
key: "getValueForPixel",
value: function getValueForPixel(pixel) {
return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
}
}]);
-
return LinearScale;
}(LinearScaleBase);
-
- LinearScale.id = 'linear';
- LinearScale.defaults = {
+ _defineProperty$w(LinearScale, "id", 'linear');
+ _defineProperty$w(LinearScale, "defaults", {
ticks: {
callback: Ticks.formatters.numeric
}
+ });
+ var log10Floor = function log10Floor(v) {
+ return Math.floor(log10(v));
};
-
+ var changeExponent = function changeExponent(v, m) {
+ return Math.pow(10, log10Floor(v) + m);
+ };
function isMajor(tickVal) {
- var remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));
+ var remain = tickVal / Math.pow(10, log10Floor(tickVal));
return remain === 1;
}
-
- function generateTicks(generationOptions, dataRange) {
- var endExp = Math.floor(log10(dataRange.max));
- var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));
+ function steps(min, max, rangeExp) {
+ var rangeStep = Math.pow(10, rangeExp);
+ var start = Math.floor(min / rangeStep);
+ var end = Math.ceil(max / rangeStep);
+ return end - start;
+ }
+ function startExp(min, max) {
+ var range = max - min;
+ var rangeExp = log10Floor(range);
+ while (steps(min, max, rangeExp) > 10) {
+ rangeExp++;
+ }
+ while (steps(min, max, rangeExp) < 10) {
+ rangeExp--;
+ }
+ return Math.min(rangeExp, log10Floor(min));
+ }
+ function generateTicks(generationOptions, _ref13) {
+ var min = _ref13.min,
+ max = _ref13.max;
+ min = finiteOrDefault(generationOptions.min, min);
var ticks = [];
- var tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));
- var exp = Math.floor(log10(tickVal));
- var significand = Math.floor(tickVal / Math.pow(10, exp));
+ var minExp = log10Floor(min);
+ var exp = startExp(min, max);
var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
-
- do {
+ var stepSize = Math.pow(10, exp);
+ var base = minExp > exp ? Math.pow(10, minExp) : 0;
+ var start = Math.round((min - base) * precision) / precision;
+ var offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;
+ var significand = Math.floor((start - offset) / Math.pow(10, exp));
+ var value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);
+ while (value < max) {
ticks.push({
- value: tickVal,
- major: isMajor(tickVal)
+ value: value,
+ major: isMajor(value),
+ significand: significand
});
- ++significand;
-
- if (significand === 10) {
- significand = 1;
- ++exp;
+ if (significand >= 10) {
+ significand = significand < 15 ? 15 : 20;
+ } else {
+ significand++;
+ }
+ if (significand >= 20) {
+ exp++;
+ significand = 2;
precision = exp >= 0 ? 1 : precision;
}
-
- tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;
- } while (exp < endExp || exp === endExp && significand < endSignificand);
-
- var lastTick = finiteOrDefault(generationOptions.max, tickVal);
+ value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;
+ }
+ var lastTick = finiteOrDefault(generationOptions.max, value);
ticks.push({
value: lastTick,
- major: isMajor(tickVal)
+ major: isMajor(lastTick),
+ significand: significand
});
return ticks;
}
-
var LogarithmicScale = /*#__PURE__*/function (_Scale3) {
- _inherits(LogarithmicScale, _Scale3);
-
- var _super22 = _createSuper(LogarithmicScale);
-
+ _inherits$w(LogarithmicScale, _Scale3);
+ var _super22 = _createSuper$w(LogarithmicScale);
function LogarithmicScale(cfg) {
- var _this15;
-
- _classCallCheck(this, LogarithmicScale);
-
- _this15 = _super22.call(this, cfg);
- _this15.start = undefined;
- _this15.end = undefined;
- _this15._startValue = undefined;
- _this15._valueRange = 0;
- return _this15;
+ var _this37;
+ _classCallCheck$x(this, LogarithmicScale);
+ _this37 = _super22.call(this, cfg);
+ _this37.start = undefined;
+ _this37.end = undefined;
+ _this37._startValue = undefined;
+ _this37._valueRange = 0;
+ return _this37;
}
-
- _createClass(LogarithmicScale, [{
+ _createClass$x(LogarithmicScale, [{
key: "parse",
value: function parse(raw, index) {
var value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);
-
if (value === 0) {
this._zero = true;
return undefined;
}
-
return isNumberFinite(value) && value > 0 ? value : null;
}
}, {
key: "determineDataLimits",
value: function determineDataLimits() {
- var me = this;
-
- var _me$getMinMax3 = me.getMinMax(true),
- min = _me$getMinMax3.min,
- max = _me$getMinMax3.max;
-
- me.min = isNumberFinite(min) ? Math.max(0, min) : null;
- me.max = isNumberFinite(max) ? Math.max(0, max) : null;
-
- if (me.options.beginAtZero) {
- me._zero = true;
+ var _this$getMinMax3 = this.getMinMax(true),
+ min = _this$getMinMax3.min,
+ max = _this$getMinMax3.max;
+ this.min = isNumberFinite(min) ? Math.max(0, min) : null;
+ this.max = isNumberFinite(max) ? Math.max(0, max) : null;
+ if (this.options.beginAtZero) {
+ this._zero = true;
}
-
- me.handleTickRangeOptions();
+ if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {
+ this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);
+ }
+ this.handleTickRangeOptions();
}
}, {
key: "handleTickRangeOptions",
value: function handleTickRangeOptions() {
- var me = this;
-
- var _me$getUserBounds4 = me.getUserBounds(),
- minDefined = _me$getUserBounds4.minDefined,
- maxDefined = _me$getUserBounds4.maxDefined;
-
- var min = me.min;
- var max = me.max;
-
+ var _this$getUserBounds4 = this.getUserBounds(),
+ minDefined = _this$getUserBounds4.minDefined,
+ maxDefined = _this$getUserBounds4.maxDefined;
+ var min = this.min;
+ var max = this.max;
var setMin = function setMin(v) {
return min = minDefined ? min : v;
};
-
var setMax = function setMax(v) {
return max = maxDefined ? max : v;
};
-
- var exp = function exp(v, m) {
- return Math.pow(10, Math.floor(log10(v)) + m);
- };
-
if (min === max) {
if (min <= 0) {
setMin(1);
setMax(10);
} else {
- setMin(exp(min, -1));
- setMax(exp(max, +1));
+ setMin(changeExponent(min, -1));
+ setMax(changeExponent(max, +1));
}
}
-
if (min <= 0) {
- setMin(exp(max, -1));
+ setMin(changeExponent(max, -1));
}
-
if (max <= 0) {
- setMax(exp(min, +1));
+ setMax(changeExponent(min, +1));
}
-
- if (me._zero && me.min !== me._suggestedMin && min === exp(me.min, 0)) {
- setMin(exp(min, -1));
- }
-
- me.min = min;
- me.max = max;
+ this.min = min;
+ this.max = max;
}
}, {
key: "buildTicks",
value: function buildTicks() {
- var me = this;
- var opts = me.options;
+ var opts = this.options;
var generationOptions = {
- min: me._userMin,
- max: me._userMax
+ min: this._userMin,
+ max: this._userMax
};
- var ticks = generateTicks(generationOptions, me);
-
+ var ticks = generateTicks(generationOptions, this);
if (opts.bounds === 'ticks') {
- _setMinAndMaxByKey(ticks, me, 'value');
+ _setMinAndMaxByKey(ticks, this, 'value');
}
-
if (opts.reverse) {
ticks.reverse();
- me.start = me.max;
- me.end = me.min;
+ this.start = this.max;
+ this.end = this.min;
} else {
- me.start = me.min;
- me.end = me.max;
+ this.start = this.min;
+ this.end = this.max;
}
-
return ticks;
}
}, {
key: "getLabelForValue",
value: function getLabelForValue(value) {
- return value === undefined ? '0' : formatNumber(value, this.chart.options.locale);
+ return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);
}
}, {
key: "configure",
value: function configure() {
- var me = this;
- var start = me.min;
-
- _get(_getPrototypeOf(LogarithmicScale.prototype), "configure", this).call(this);
-
- me._startValue = log10(start);
- me._valueRange = log10(me.max) - log10(start);
+ var start = this.min;
+ _get(_getPrototypeOf$w(LogarithmicScale.prototype), "configure", this).call(this);
+ this._startValue = log10(start);
+ this._valueRange = log10(this.max) - log10(start);
}
}, {
key: "getPixelForValue",
value: function getPixelForValue(value) {
- var me = this;
-
if (value === undefined || value === 0) {
- value = me.min;
+ value = this.min;
}
-
if (value === null || isNaN(value)) {
return NaN;
}
-
- return me.getPixelForDecimal(value === me.min ? 0 : (log10(value) - me._startValue) / me._valueRange);
+ return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);
}
}, {
key: "getValueForPixel",
value: function getValueForPixel(pixel) {
- var me = this;
- var decimal = me.getDecimalForPixel(pixel);
- return Math.pow(10, me._startValue + decimal * me._valueRange);
+ var decimal = this.getDecimalForPixel(pixel);
+ return Math.pow(10, this._startValue + decimal * this._valueRange);
}
}]);
-
return LogarithmicScale;
}(Scale);
-
- LogarithmicScale.id = 'logarithmic';
- LogarithmicScale.defaults = {
+ _defineProperty$w(LogarithmicScale, "id", 'logarithmic');
+ _defineProperty$w(LogarithmicScale, "defaults", {
ticks: {
callback: Ticks.formatters.logarithmic,
major: {
enabled: true
}
}
- };
-
+ });
function getTickBackdropHeight(opts) {
var tickOpts = opts.ticks;
-
if (tickOpts.display && opts.display) {
var padding = toPadding(tickOpts.backdropPadding);
return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;
}
-
return 0;
}
-
- function measureLabelSize(ctx, lineHeight, label) {
- if (isArray(label)) {
- return {
- w: _longestText(ctx, ctx.font, label),
- h: label.length * lineHeight
- };
- }
-
+ function measureLabelSize(ctx, font, label) {
+ label = isArray(label) ? label : [label];
return {
- w: ctx.measureText(label).width,
- h: lineHeight
+ w: _longestText(ctx, font.string, label),
+ h: label.length * font.lineHeight
};
}
-
function determineLimits(angle, pos, size, min, max) {
if (angle === min || angle === max) {
return {
start: pos - size / 2,
end: pos + size / 2
@@ -16104,334 +15901,312 @@
return {
start: pos - size,
end: pos
};
}
-
return {
start: pos,
end: pos + size
};
}
-
function fitWithPointLabels(scale) {
- var furthestLimits = {
- l: 0,
- r: scale.width,
- t: 0,
- b: scale.height - scale.paddingTop
+ var orig = {
+ l: scale.left + scale._padding.left,
+ r: scale.right - scale._padding.right,
+ t: scale.top + scale._padding.top,
+ b: scale.bottom - scale._padding.bottom
};
- var furthestAngles = {};
- var i, textSize, pointPosition;
+ var limits = Object.assign({}, orig);
var labelSizes = [];
var padding = [];
- var valueCount = scale.getLabels().length;
-
- for (i = 0; i < valueCount; i++) {
- var _opts = scale.options.pointLabels.setContext(scale.getContext(i));
-
- padding[i] = _opts.padding;
- pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);
- var plFont = toFont(_opts.font);
- scale.ctx.font = plFont.string;
- textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale._pointLabels[i]);
+ var valueCount = scale._pointLabels.length;
+ var pointLabelOpts = scale.options.pointLabels;
+ var additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;
+ for (var i = 0; i < valueCount; i++) {
+ var opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
+ padding[i] = opts.padding;
+ var pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
+ var plFont = toFont(opts.font);
+ var textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
labelSizes[i] = textSize;
- var angleRadians = scale.getIndexAngle(i);
- var angle = toDegrees(angleRadians);
+ var angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);
+ var angle = Math.round(toDegrees(angleRadians));
var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
-
- if (hLimits.start < furthestLimits.l) {
- furthestLimits.l = hLimits.start;
- furthestAngles.l = angleRadians;
- }
-
- if (hLimits.end > furthestLimits.r) {
- furthestLimits.r = hLimits.end;
- furthestAngles.r = angleRadians;
- }
-
- if (vLimits.start < furthestLimits.t) {
- furthestLimits.t = vLimits.start;
- furthestAngles.t = angleRadians;
- }
-
- if (vLimits.end > furthestLimits.b) {
- furthestLimits.b = vLimits.end;
- furthestAngles.b = angleRadians;
- }
+ updateLimits(limits, orig, angleRadians, hLimits, vLimits);
}
-
- scale._setReductions(scale.drawingArea, furthestLimits, furthestAngles);
-
- scale._pointLabelItems = [];
+ scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);
+ scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
+ }
+ function updateLimits(limits, orig, angle, hLimits, vLimits) {
+ var sin = Math.abs(Math.sin(angle));
+ var cos = Math.abs(Math.cos(angle));
+ var x = 0;
+ var y = 0;
+ if (hLimits.start < orig.l) {
+ x = (orig.l - hLimits.start) / sin;
+ limits.l = Math.min(limits.l, orig.l - x);
+ } else if (hLimits.end > orig.r) {
+ x = (hLimits.end - orig.r) / sin;
+ limits.r = Math.max(limits.r, orig.r + x);
+ }
+ if (vLimits.start < orig.t) {
+ y = (orig.t - vLimits.start) / cos;
+ limits.t = Math.min(limits.t, orig.t - y);
+ } else if (vLimits.end > orig.b) {
+ y = (vLimits.end - orig.b) / cos;
+ limits.b = Math.max(limits.b, orig.b + y);
+ }
+ }
+ function buildPointLabelItems(scale, labelSizes, padding) {
+ var items = [];
+ var valueCount = scale._pointLabels.length;
var opts = scale.options;
- var tickBackdropHeight = getTickBackdropHeight(opts);
- var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);
-
- for (i = 0; i < valueCount; i++) {
- var extra = i === 0 ? tickBackdropHeight / 2 : 0;
- var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);
-
- var _angle = toDegrees(scale.getIndexAngle(i));
-
+ var extra = getTickBackdropHeight(opts) / 2;
+ var outerDistance = scale.drawingArea;
+ var additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;
+ for (var i = 0; i < valueCount; i++) {
+ var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);
+ var angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));
var size = labelSizes[i];
- adjustPointPositionForLabelHeight(_angle, size, pointLabelPosition);
- var textAlign = getTextAlignForAngle(_angle);
- var left = void 0;
-
- if (textAlign === 'left') {
- left = pointLabelPosition.x;
- } else if (textAlign === 'center') {
- left = pointLabelPosition.x - size.w / 2;
- } else {
- left = pointLabelPosition.x - size.w;
- }
-
- var right = left + size.w;
- scale._pointLabelItems[i] = {
+ var y = yForAngle(pointLabelPosition.y, size.h, angle);
+ var textAlign = getTextAlignForAngle(angle);
+ var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
+ items.push({
x: pointLabelPosition.x,
- y: pointLabelPosition.y,
+ y: y,
textAlign: textAlign,
left: left,
- top: pointLabelPosition.y,
- right: right,
- bottom: pointLabelPosition.y + size.h
- };
+ top: y,
+ right: left + size.w,
+ bottom: y + size.h
+ });
}
+ return items;
}
-
function getTextAlignForAngle(angle) {
if (angle === 0 || angle === 180) {
return 'center';
} else if (angle < 180) {
return 'left';
}
-
return 'right';
}
-
- function adjustPointPositionForLabelHeight(angle, textSize, position) {
+ function leftForTextAlign(x, w, align) {
+ if (align === 'right') {
+ x -= w;
+ } else if (align === 'center') {
+ x -= w / 2;
+ }
+ return x;
+ }
+ function yForAngle(y, h, angle) {
if (angle === 90 || angle === 270) {
- position.y -= textSize.h / 2;
+ y -= h / 2;
} else if (angle > 270 || angle < 90) {
- position.y -= textSize.h;
+ y -= h;
}
+ return y;
}
-
function drawPointLabels(scale, labelCount) {
var ctx = scale.ctx,
- pointLabels = scale.options.pointLabels;
-
+ pointLabels = scale.options.pointLabels;
for (var i = labelCount - 1; i >= 0; i--) {
- var optsAtIndex = pointLabels.setContext(scale.getContext(i));
+ var optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
var plFont = toFont(optsAtIndex.font);
var _scale$_pointLabelIte = scale._pointLabelItems[i],
- x = _scale$_pointLabelIte.x,
- y = _scale$_pointLabelIte.y,
- textAlign = _scale$_pointLabelIte.textAlign,
- left = _scale$_pointLabelIte.left,
- top = _scale$_pointLabelIte.top,
- right = _scale$_pointLabelIte.right,
- bottom = _scale$_pointLabelIte.bottom;
+ x = _scale$_pointLabelIte.x,
+ y = _scale$_pointLabelIte.y,
+ textAlign = _scale$_pointLabelIte.textAlign,
+ left = _scale$_pointLabelIte.left,
+ top = _scale$_pointLabelIte.top,
+ right = _scale$_pointLabelIte.right,
+ bottom = _scale$_pointLabelIte.bottom;
var backdropColor = optsAtIndex.backdropColor;
-
if (!isNullOrUndef(backdropColor)) {
+ var borderRadius = toTRBLCorners(optsAtIndex.borderRadius);
var padding = toPadding(optsAtIndex.backdropPadding);
ctx.fillStyle = backdropColor;
- ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);
+ var backdropLeft = left - padding.left;
+ var backdropTop = top - padding.top;
+ var backdropWidth = right - left + padding.width;
+ var backdropHeight = bottom - top + padding.height;
+ if (Object.values(borderRadius).some(function (v) {
+ return v !== 0;
+ })) {
+ ctx.beginPath();
+ addRoundedRectPath(ctx, {
+ x: backdropLeft,
+ y: backdropTop,
+ w: backdropWidth,
+ h: backdropHeight,
+ radius: borderRadius
+ });
+ ctx.fill();
+ } else {
+ ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
+ }
}
-
renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
color: optsAtIndex.color,
textAlign: textAlign,
textBaseline: 'middle'
});
}
}
-
function pathRadiusLine(scale, radius, circular, labelCount) {
var ctx = scale.ctx;
-
if (circular) {
ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);
} else {
var pointPosition = scale.getPointPosition(0, radius);
ctx.moveTo(pointPosition.x, pointPosition.y);
-
for (var i = 1; i < labelCount; i++) {
pointPosition = scale.getPointPosition(i, radius);
ctx.lineTo(pointPosition.x, pointPosition.y);
}
}
}
-
- function drawRadiusLine(scale, gridLineOpts, radius, labelCount) {
+ function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
var ctx = scale.ctx;
var circular = gridLineOpts.circular;
var color = gridLineOpts.color,
- lineWidth = gridLineOpts.lineWidth;
-
+ lineWidth = gridLineOpts.lineWidth;
if (!circular && !labelCount || !color || !lineWidth || radius < 0) {
return;
}
-
ctx.save();
ctx.strokeStyle = color;
ctx.lineWidth = lineWidth;
- ctx.setLineDash(gridLineOpts.borderDash);
- ctx.lineDashOffset = gridLineOpts.borderDashOffset;
+ ctx.setLineDash(borderOpts.dash);
+ ctx.lineDashOffset = borderOpts.dashOffset;
ctx.beginPath();
pathRadiusLine(scale, radius, circular, labelCount);
ctx.closePath();
ctx.stroke();
ctx.restore();
}
-
- function numberOrZero(param) {
- return isNumber(param) ? param : 0;
+ function createPointLabelContext(parent, index, label) {
+ return createContext(parent, {
+ label: label,
+ index: index,
+ type: 'pointLabel'
+ });
}
-
var RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {
- _inherits(RadialLinearScale, _LinearScaleBase2);
-
- var _super23 = _createSuper(RadialLinearScale);
-
+ _inherits$w(RadialLinearScale, _LinearScaleBase2);
+ var _super23 = _createSuper$w(RadialLinearScale);
function RadialLinearScale(cfg) {
- var _this16;
-
- _classCallCheck(this, RadialLinearScale);
-
- _this16 = _super23.call(this, cfg);
- _this16.xCenter = undefined;
- _this16.yCenter = undefined;
- _this16.drawingArea = undefined;
- _this16._pointLabels = [];
- _this16._pointLabelItems = [];
- return _this16;
+ var _this38;
+ _classCallCheck$x(this, RadialLinearScale);
+ _this38 = _super23.call(this, cfg);
+ _this38.xCenter = undefined;
+ _this38.yCenter = undefined;
+ _this38.drawingArea = undefined;
+ _this38._pointLabels = [];
+ _this38._pointLabelItems = [];
+ return _this38;
}
-
- _createClass(RadialLinearScale, [{
+ _createClass$x(RadialLinearScale, [{
key: "setDimensions",
value: function setDimensions() {
- var me = this;
- me.width = me.maxWidth;
- me.height = me.maxHeight;
- me.paddingTop = getTickBackdropHeight(me.options) / 2;
- me.xCenter = Math.floor(me.width / 2);
- me.yCenter = Math.floor((me.height - me.paddingTop) / 2);
- me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;
+ var padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);
+ var w = this.width = this.maxWidth - padding.width;
+ var h = this.height = this.maxHeight - padding.height;
+ this.xCenter = Math.floor(this.left + w / 2 + padding.left);
+ this.yCenter = Math.floor(this.top + h / 2 + padding.top);
+ this.drawingArea = Math.floor(Math.min(w, h) / 2);
}
}, {
key: "determineDataLimits",
value: function determineDataLimits() {
- var me = this;
-
- var _me$getMinMax4 = me.getMinMax(false),
- min = _me$getMinMax4.min,
- max = _me$getMinMax4.max;
-
- me.min = isNumberFinite(min) && !isNaN(min) ? min : 0;
- me.max = isNumberFinite(max) && !isNaN(max) ? max : 0;
- me.handleTickRangeOptions();
+ var _this$getMinMax4 = this.getMinMax(false),
+ min = _this$getMinMax4.min,
+ max = _this$getMinMax4.max;
+ this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;
+ this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;
+ this.handleTickRangeOptions();
}
}, {
key: "computeTickLimit",
value: function computeTickLimit() {
return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
}
}, {
key: "generateTickLabels",
value: function generateTickLabels(ticks) {
- var me = this;
- LinearScaleBase.prototype.generateTickLabels.call(me, ticks);
- me._pointLabels = me.getLabels().map(function (value, index) {
- var label = callback(me.options.pointLabels.callback, [value, index], me);
+ var _this39 = this;
+ LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
+ this._pointLabels = this.getLabels().map(function (value, index) {
+ var label = callback(_this39.options.pointLabels.callback, [value, index], _this39);
return label || label === 0 ? label : '';
+ }).filter(function (v, i) {
+ return _this39.chart.getDataVisibility(i);
});
}
}, {
key: "fit",
value: function fit() {
- var me = this;
- var opts = me.options;
-
+ var opts = this.options;
if (opts.display && opts.pointLabels.display) {
- fitWithPointLabels(me);
+ fitWithPointLabels(this);
} else {
- me.setCenterPoint(0, 0, 0, 0);
+ this.setCenterPoint(0, 0, 0, 0);
}
}
}, {
- key: "_setReductions",
- value: function _setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {
- var me = this;
- var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);
- var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);
- var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);
- var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);
- radiusReductionLeft = numberOrZero(radiusReductionLeft);
- radiusReductionRight = numberOrZero(radiusReductionRight);
- radiusReductionTop = numberOrZero(radiusReductionTop);
- radiusReductionBottom = numberOrZero(radiusReductionBottom);
- me.drawingArea = Math.max(largestPossibleRadius / 2, Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));
- me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);
- }
- }, {
key: "setCenterPoint",
value: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
- var me = this;
- var maxRight = me.width - rightMovement - me.drawingArea;
- var maxLeft = leftMovement + me.drawingArea;
- var maxTop = topMovement + me.drawingArea;
- var maxBottom = me.height - me.paddingTop - bottomMovement - me.drawingArea;
- me.xCenter = Math.floor((maxLeft + maxRight) / 2 + me.left);
- me.yCenter = Math.floor((maxTop + maxBottom) / 2 + me.top + me.paddingTop);
+ this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
+ this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
+ this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
}
}, {
key: "getIndexAngle",
value: function getIndexAngle(index) {
- var angleMultiplier = TAU / this.getLabels().length;
+ var angleMultiplier = TAU / (this._pointLabels.length || 1);
var startAngle = this.options.startAngle || 0;
return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));
}
}, {
key: "getDistanceFromCenterForValue",
value: function getDistanceFromCenterForValue(value) {
- var me = this;
-
if (isNullOrUndef(value)) {
return NaN;
}
-
- var scalingFactor = me.drawingArea / (me.max - me.min);
-
- if (me.options.reverse) {
- return (me.max - value) * scalingFactor;
+ var scalingFactor = this.drawingArea / (this.max - this.min);
+ if (this.options.reverse) {
+ return (this.max - value) * scalingFactor;
}
-
- return (value - me.min) * scalingFactor;
+ return (value - this.min) * scalingFactor;
}
}, {
key: "getValueForDistanceFromCenter",
value: function getValueForDistanceFromCenter(distance) {
if (isNullOrUndef(distance)) {
return NaN;
}
-
- var me = this;
- var scaledDistance = distance / (me.drawingArea / (me.max - me.min));
- return me.options.reverse ? me.max - scaledDistance : me.min + scaledDistance;
+ var scaledDistance = distance / (this.drawingArea / (this.max - this.min));
+ return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
}
}, {
+ key: "getPointLabelContext",
+ value: function getPointLabelContext(index) {
+ var pointLabels = this._pointLabels || [];
+ if (index >= 0 && index < pointLabels.length) {
+ var pointLabel = pointLabels[index];
+ return createPointLabelContext(this.getContext(), index, pointLabel);
+ }
+ }
+ }, {
key: "getPointPosition",
value: function getPointPosition(index, distanceFromCenter) {
- var me = this;
- var angle = me.getIndexAngle(index) - HALF_PI;
+ var additionalAngle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+ var angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;
return {
- x: Math.cos(angle) * distanceFromCenter + me.xCenter,
- y: Math.sin(angle) * distanceFromCenter + me.yCenter,
+ x: Math.cos(angle) * distanceFromCenter + this.xCenter,
+ y: Math.sin(angle) * distanceFromCenter + this.yCenter,
angle: angle
};
}
}, {
key: "getPointPositionForValue",
@@ -16445,143 +16220,134 @@
}
}, {
key: "getPointLabelPosition",
value: function getPointLabelPosition(index) {
var _this$_pointLabelItem = this._pointLabelItems[index],
- left = _this$_pointLabelItem.left,
- top = _this$_pointLabelItem.top,
- right = _this$_pointLabelItem.right,
- bottom = _this$_pointLabelItem.bottom;
+ left = _this$_pointLabelItem.left,
+ top = _this$_pointLabelItem.top,
+ right = _this$_pointLabelItem.right,
+ bottom = _this$_pointLabelItem.bottom;
return {
left: left,
top: top,
right: right,
bottom: bottom
};
}
}, {
key: "drawBackground",
value: function drawBackground() {
- var me = this;
- var _me$options8 = me.options,
- backgroundColor = _me$options8.backgroundColor,
- circular = _me$options8.grid.circular;
-
+ var _this$options16 = this.options,
+ backgroundColor = _this$options16.backgroundColor,
+ circular = _this$options16.grid.circular;
if (backgroundColor) {
- var ctx = me.ctx;
+ var ctx = this.ctx;
ctx.save();
ctx.beginPath();
- pathRadiusLine(me, me.getDistanceFromCenterForValue(me._endValue), circular, me.getLabels().length);
+ pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
ctx.closePath();
ctx.fillStyle = backgroundColor;
ctx.fill();
ctx.restore();
}
}
}, {
key: "drawGrid",
value: function drawGrid() {
- var me = this;
- var ctx = me.ctx;
- var opts = me.options;
+ var _this40 = this;
+ var ctx = this.ctx;
+ var opts = this.options;
var angleLines = opts.angleLines,
- grid = opts.grid;
- var labelCount = me.getLabels().length;
+ grid = opts.grid,
+ border = opts.border;
+ var labelCount = this._pointLabels.length;
var i, offset, position;
-
if (opts.pointLabels.display) {
- drawPointLabels(me, labelCount);
+ drawPointLabels(this, labelCount);
}
-
if (grid.display) {
- me.ticks.forEach(function (tick, index) {
+ this.ticks.forEach(function (tick, index) {
if (index !== 0) {
- offset = me.getDistanceFromCenterForValue(tick.value);
- var optsAtIndex = grid.setContext(me.getContext(index - 1));
- drawRadiusLine(me, optsAtIndex, offset, labelCount);
+ offset = _this40.getDistanceFromCenterForValue(tick.value);
+ var context = _this40.getContext(index);
+ var optsAtIndex = grid.setContext(context);
+ var optsAtIndexBorder = border.setContext(context);
+ drawRadiusLine(_this40, optsAtIndex, offset, labelCount, optsAtIndexBorder);
}
});
}
-
if (angleLines.display) {
ctx.save();
-
- for (i = me.getLabels().length - 1; i >= 0; i--) {
- var optsAtIndex = angleLines.setContext(me.getContext(i));
+ for (i = labelCount - 1; i >= 0; i--) {
+ var optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
var color = optsAtIndex.color,
- lineWidth = optsAtIndex.lineWidth;
-
+ lineWidth = optsAtIndex.lineWidth;
if (!lineWidth || !color) {
continue;
}
-
ctx.lineWidth = lineWidth;
ctx.strokeStyle = color;
ctx.setLineDash(optsAtIndex.borderDash);
ctx.lineDashOffset = optsAtIndex.borderDashOffset;
- offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);
- position = me.getPointPosition(i, offset);
+ offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);
+ position = this.getPointPosition(i, offset);
ctx.beginPath();
- ctx.moveTo(me.xCenter, me.yCenter);
+ ctx.moveTo(this.xCenter, this.yCenter);
ctx.lineTo(position.x, position.y);
ctx.stroke();
}
-
ctx.restore();
}
}
}, {
+ key: "drawBorder",
+ value: function drawBorder() {}
+ }, {
key: "drawLabels",
value: function drawLabels() {
- var me = this;
- var ctx = me.ctx;
- var opts = me.options;
+ var _this41 = this;
+ var ctx = this.ctx;
+ var opts = this.options;
var tickOpts = opts.ticks;
-
if (!tickOpts.display) {
return;
}
-
- var startAngle = me.getIndexAngle(0);
+ var startAngle = this.getIndexAngle(0);
var offset, width;
ctx.save();
- ctx.translate(me.xCenter, me.yCenter);
+ ctx.translate(this.xCenter, this.yCenter);
ctx.rotate(startAngle);
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
- me.ticks.forEach(function (tick, index) {
+ this.ticks.forEach(function (tick, index) {
if (index === 0 && !opts.reverse) {
return;
}
-
- var optsAtIndex = tickOpts.setContext(me.getContext(index));
+ var optsAtIndex = tickOpts.setContext(_this41.getContext(index));
var tickFont = toFont(optsAtIndex.font);
- offset = me.getDistanceFromCenterForValue(me.ticks[index].value);
-
+ offset = _this41.getDistanceFromCenterForValue(_this41.ticks[index].value);
if (optsAtIndex.showLabelBackdrop) {
+ ctx.font = tickFont.string;
width = ctx.measureText(tick.label).width;
ctx.fillStyle = optsAtIndex.backdropColor;
var padding = toPadding(optsAtIndex.backdropPadding);
ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);
}
-
renderText(ctx, tick.label, 0, -offset, tickFont, {
color: optsAtIndex.color
});
});
ctx.restore();
}
}, {
key: "drawTitle",
value: function drawTitle() {}
}]);
-
return RadialLinearScale;
}(LinearScaleBase);
-
- RadialLinearScale.id = 'radialLinear';
- RadialLinearScale.defaults = {
+ _defineProperty$w(RadialLinearScale, "id", 'radialLinear');
+ _defineProperty$w(RadialLinearScale, "defaults", {
display: true,
animate: true,
position: 'chartArea',
angleLines: {
display: true,
@@ -16593,12 +16359,10 @@
circular: false
},
startAngle: 0,
ticks: {
showLabelBackdrop: true,
- backdropColor: 'rgba(255,255,255,0.75)',
- backdropPadding: 2,
callback: Ticks.formatters.numeric
},
pointLabels: {
backdropColor: undefined,
backdropPadding: 2,
@@ -16607,23 +16371,24 @@
size: 10
},
callback: function callback(label) {
return label;
},
- padding: 5
+ padding: 5,
+ centerPointLabels: false
}
- };
- RadialLinearScale.defaultRoutes = {
+ });
+ _defineProperty$w(RadialLinearScale, "defaultRoutes", {
'angleLines.color': 'borderColor',
'pointLabels.color': 'color',
'ticks.color': 'color'
- };
- RadialLinearScale.descriptors = {
+ });
+ _defineProperty$w(RadialLinearScale, "descriptors", {
angleLines: {
_fallback: 'grid'
}
- };
+ });
var INTERVALS = {
millisecond: {
common: true,
size: 1,
steps: 1000
@@ -16666,494 +16431,428 @@
year: {
common: true,
size: 3.154e10
}
};
- var UNITS = Object.keys(INTERVALS);
-
+ var UNITS = /* #__PURE__ */Object.keys(INTERVALS);
function sorter(a, b) {
return a - b;
}
-
function _parse(scale, input) {
if (isNullOrUndef(input)) {
return null;
}
-
var adapter = scale._adapter;
- var options = scale.options.time;
- var parser = options.parser,
- round = options.round,
- isoWeekday = options.isoWeekday;
+ var _scale$_parseOpts = scale._parseOpts,
+ parser = _scale$_parseOpts.parser,
+ round = _scale$_parseOpts.round,
+ isoWeekday = _scale$_parseOpts.isoWeekday;
var value = input;
-
if (typeof parser === 'function') {
value = parser(value);
}
-
if (!isNumberFinite(value)) {
value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);
}
-
if (value === null) {
return null;
}
-
if (round) {
value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);
}
-
return +value;
}
-
function determineUnitForAutoTicks(minUnit, min, max, capacity) {
var ilen = UNITS.length;
-
for (var i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
var interval = INTERVALS[UNITS[i]];
var factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
-
if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
return UNITS[i];
}
}
-
return UNITS[ilen - 1];
}
-
function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
for (var i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {
var unit = UNITS[i];
-
if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
return unit;
}
}
-
return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
}
-
function determineMajorUnit(unit) {
for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
if (INTERVALS[UNITS[i]].common) {
return UNITS[i];
}
}
}
-
function addTick(ticks, time, timestamps) {
if (!timestamps) {
ticks[time] = true;
} else if (timestamps.length) {
var _lookup2 = _lookup(timestamps, time),
- lo = _lookup2.lo,
- hi = _lookup2.hi;
-
+ lo = _lookup2.lo,
+ hi = _lookup2.hi;
var timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
ticks[timestamp] = true;
}
}
-
function setMajorTicks(scale, ticks, map, majorUnit) {
var adapter = scale._adapter;
var first = +adapter.startOf(ticks[0].value, majorUnit);
var last = ticks[ticks.length - 1].value;
var major, index;
-
for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {
index = map[major];
-
if (index >= 0) {
ticks[index].major = true;
}
}
-
return ticks;
}
-
function ticksFromTimestamps(scale, values, majorUnit) {
var ticks = [];
var map = {};
var ilen = values.length;
var i, value;
-
for (i = 0; i < ilen; ++i) {
value = values[i];
map[value] = i;
ticks.push({
value: value,
major: false
});
}
-
return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);
}
-
var TimeScale = /*#__PURE__*/function (_Scale4) {
- _inherits(TimeScale, _Scale4);
-
- var _super24 = _createSuper(TimeScale);
-
+ _inherits$w(TimeScale, _Scale4);
+ var _super24 = _createSuper$w(TimeScale);
function TimeScale(props) {
- var _this17;
-
- _classCallCheck(this, TimeScale);
-
- _this17 = _super24.call(this, props);
- _this17._cache = {
+ var _this42;
+ _classCallCheck$x(this, TimeScale);
+ _this42 = _super24.call(this, props);
+ _this42._cache = {
data: [],
labels: [],
all: []
};
- _this17._unit = 'day';
- _this17._majorUnit = undefined;
- _this17._offsets = {};
- _this17._normalized = false;
- return _this17;
+ _this42._unit = 'day';
+ _this42._majorUnit = undefined;
+ _this42._offsets = {};
+ _this42._normalized = false;
+ _this42._parseOpts = undefined;
+ return _this42;
}
-
- _createClass(TimeScale, [{
+ _createClass$x(TimeScale, [{
key: "init",
- value: function init(scaleOpts, opts) {
+ value: function init(scaleOpts) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var time = scaleOpts.time || (scaleOpts.time = {});
var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
+ adapter.init(opts);
mergeIf(time.displayFormats, adapter.formats());
-
- _get(_getPrototypeOf(TimeScale.prototype), "init", this).call(this, scaleOpts);
-
+ this._parseOpts = {
+ parser: time.parser,
+ round: time.round,
+ isoWeekday: time.isoWeekday
+ };
+ _get(_getPrototypeOf$w(TimeScale.prototype), "init", this).call(this, scaleOpts);
this._normalized = opts.normalized;
}
}, {
key: "parse",
value: function parse(raw, index) {
if (raw === undefined) {
return null;
}
-
return _parse(this, raw);
}
}, {
key: "beforeLayout",
value: function beforeLayout() {
- _get(_getPrototypeOf(TimeScale.prototype), "beforeLayout", this).call(this);
-
+ _get(_getPrototypeOf$w(TimeScale.prototype), "beforeLayout", this).call(this);
this._cache = {
data: [],
labels: [],
all: []
};
}
}, {
key: "determineDataLimits",
value: function determineDataLimits() {
- var me = this;
- var options = me.options;
- var adapter = me._adapter;
+ var options = this.options;
+ var adapter = this._adapter;
var unit = options.time.unit || 'day';
-
- var _me$getUserBounds5 = me.getUserBounds(),
- min = _me$getUserBounds5.min,
- max = _me$getUserBounds5.max,
- minDefined = _me$getUserBounds5.minDefined,
- maxDefined = _me$getUserBounds5.maxDefined;
-
+ var _this$getUserBounds5 = this.getUserBounds(),
+ min = _this$getUserBounds5.min,
+ max = _this$getUserBounds5.max,
+ minDefined = _this$getUserBounds5.minDefined,
+ maxDefined = _this$getUserBounds5.maxDefined;
function _applyBounds(bounds) {
if (!minDefined && !isNaN(bounds.min)) {
min = Math.min(min, bounds.min);
}
-
if (!maxDefined && !isNaN(bounds.max)) {
max = Math.max(max, bounds.max);
}
}
-
if (!minDefined || !maxDefined) {
- _applyBounds(me._getLabelBounds());
-
+ _applyBounds(this._getLabelBounds());
if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {
- _applyBounds(me.getMinMax(false));
+ _applyBounds(this.getMinMax(false));
}
}
-
min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
- me.min = Math.min(min, max - 1);
- me.max = Math.max(min + 1, max);
+ this.min = Math.min(min, max - 1);
+ this.max = Math.max(min + 1, max);
}
}, {
key: "_getLabelBounds",
value: function _getLabelBounds() {
var arr = this.getLabelTimestamps();
var min = Number.POSITIVE_INFINITY;
var max = Number.NEGATIVE_INFINITY;
-
if (arr.length) {
min = arr[0];
max = arr[arr.length - 1];
}
-
return {
min: min,
max: max
};
}
}, {
key: "buildTicks",
value: function buildTicks() {
- var me = this;
- var options = me.options;
+ var options = this.options;
var timeOpts = options.time;
var tickOpts = options.ticks;
- var timestamps = tickOpts.source === 'labels' ? me.getLabelTimestamps() : me._generate();
-
+ var timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();
if (options.bounds === 'ticks' && timestamps.length) {
- me.min = me._userMin || timestamps[0];
- me.max = me._userMax || timestamps[timestamps.length - 1];
+ this.min = this._userMin || timestamps[0];
+ this.max = this._userMax || timestamps[timestamps.length - 1];
}
-
- var min = me.min;
- var max = me.max;
-
+ var min = this.min;
+ var max = this.max;
var ticks = _filterBetween(timestamps, min, max);
-
- me._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, me._getLabelCapacity(min)) : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));
- me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined : determineMajorUnit(me._unit);
- me.initOffsets(timestamps);
-
+ this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
+ this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);
+ this.initOffsets(timestamps);
if (options.reverse) {
ticks.reverse();
}
-
- return ticksFromTimestamps(me, ticks, me._majorUnit);
+ return ticksFromTimestamps(this, ticks, this._majorUnit);
}
}, {
+ key: "afterAutoSkip",
+ value: function afterAutoSkip() {
+ if (this.options.offsetAfterAutoskip) {
+ this.initOffsets(this.ticks.map(function (tick) {
+ return +tick.value;
+ }));
+ }
+ }
+ }, {
key: "initOffsets",
- value: function initOffsets(timestamps) {
- var me = this;
+ value: function initOffsets() {
+ var timestamps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var start = 0;
var end = 0;
var first, last;
-
- if (me.options.offset && timestamps.length) {
- first = me.getDecimalForValue(timestamps[0]);
-
+ if (this.options.offset && timestamps.length) {
+ first = this.getDecimalForValue(timestamps[0]);
if (timestamps.length === 1) {
start = 1 - first;
} else {
- start = (me.getDecimalForValue(timestamps[1]) - first) / 2;
+ start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
}
-
- last = me.getDecimalForValue(timestamps[timestamps.length - 1]);
-
+ last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
if (timestamps.length === 1) {
end = last;
} else {
- end = (last - me.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
+ end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
}
}
-
var limit = timestamps.length < 3 ? 0.5 : 0.25;
start = _limitValue(start, 0, limit);
end = _limitValue(end, 0, limit);
- me._offsets = {
+ this._offsets = {
start: start,
end: end,
factor: 1 / (start + 1 + end)
};
}
}, {
key: "_generate",
value: function _generate() {
- var me = this;
- var adapter = me._adapter;
- var min = me.min;
- var max = me.max;
- var options = me.options;
+ var adapter = this._adapter;
+ var min = this.min;
+ var max = this.max;
+ var options = this.options;
var timeOpts = options.time;
- var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, me._getLabelCapacity(min));
- var stepSize = valueOrDefault(timeOpts.stepSize, 1);
+ var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
+ var stepSize = valueOrDefault(options.ticks.stepSize, 1);
var weekday = minor === 'week' ? timeOpts.isoWeekday : false;
var hasWeekday = isNumber(weekday) || weekday === true;
var ticks = {};
var first = min;
var time, count;
-
if (hasWeekday) {
first = +adapter.startOf(first, 'isoWeek', weekday);
}
-
first = +adapter.startOf(first, hasWeekday ? 'day' : minor);
-
if (adapter.diff(max, min, minor) > 100000 * stepSize) {
throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);
}
-
- var timestamps = options.ticks.source === 'data' && me.getDataTimestamps();
-
+ var timestamps = options.ticks.source === 'data' && this.getDataTimestamps();
for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {
addTick(ticks, time, timestamps);
}
-
if (time === max || options.bounds === 'ticks' || count === 1) {
addTick(ticks, time, timestamps);
}
-
return Object.keys(ticks).sort(function (a, b) {
return a - b;
}).map(function (x) {
return +x;
});
}
}, {
key: "getLabelForValue",
value: function getLabelForValue(value) {
- var me = this;
- var adapter = me._adapter;
- var timeOpts = me.options.time;
-
+ var adapter = this._adapter;
+ var timeOpts = this.options.time;
if (timeOpts.tooltipFormat) {
return adapter.format(value, timeOpts.tooltipFormat);
}
-
return adapter.format(value, timeOpts.displayFormats.datetime);
}
}, {
+ key: "format",
+ value: function format(value, _format) {
+ var options = this.options;
+ var formats = options.time.displayFormats;
+ var unit = this._unit;
+ var fmt = _format || formats[unit];
+ return this._adapter.format(value, fmt);
+ }
+ }, {
key: "_tickFormatFunction",
value: function _tickFormatFunction(time, index, ticks, format) {
- var me = this;
- var options = me.options;
+ var options = this.options;
+ var formatter = options.ticks.callback;
+ if (formatter) {
+ return callback(formatter, [time, index, ticks], this);
+ }
var formats = options.time.displayFormats;
- var unit = me._unit;
- var majorUnit = me._majorUnit;
+ var unit = this._unit;
+ var majorUnit = this._majorUnit;
var minorFormat = unit && formats[unit];
var majorFormat = majorUnit && formats[majorUnit];
var tick = ticks[index];
var major = majorUnit && majorFormat && tick && tick.major;
-
- var label = me._adapter.format(time, format || (major ? majorFormat : minorFormat));
-
- var formatter = options.ticks.callback;
- return formatter ? formatter(label, index, ticks) : label;
+ return this._adapter.format(time, format || (major ? majorFormat : minorFormat));
}
}, {
key: "generateTickLabels",
value: function generateTickLabels(ticks) {
var i, ilen, tick;
-
for (i = 0, ilen = ticks.length; i < ilen; ++i) {
tick = ticks[i];
tick.label = this._tickFormatFunction(tick.value, i, ticks);
}
}
}, {
key: "getDecimalForValue",
value: function getDecimalForValue(value) {
- var me = this;
- return value === null ? NaN : (value - me.min) / (me.max - me.min);
+ return value === null ? NaN : (value - this.min) / (this.max - this.min);
}
}, {
key: "getPixelForValue",
value: function getPixelForValue(value) {
- var me = this;
- var offsets = me._offsets;
- var pos = me.getDecimalForValue(value);
- return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);
+ var offsets = this._offsets;
+ var pos = this.getDecimalForValue(value);
+ return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
}
}, {
key: "getValueForPixel",
value: function getValueForPixel(pixel) {
- var me = this;
- var offsets = me._offsets;
- var pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
- return me.min + pos * (me.max - me.min);
+ var offsets = this._offsets;
+ var pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+ return this.min + pos * (this.max - this.min);
}
}, {
key: "_getLabelSize",
value: function _getLabelSize(label) {
- var me = this;
- var ticksOpts = me.options.ticks;
- var tickLabelWidth = me.ctx.measureText(label).width;
- var angle = toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
+ var ticksOpts = this.options.ticks;
+ var tickLabelWidth = this.ctx.measureText(label).width;
+ var angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
var cosRotation = Math.cos(angle);
var sinRotation = Math.sin(angle);
-
- var tickFontSize = me._resolveTickFontOptions(0).size;
-
+ var tickFontSize = this._resolveTickFontOptions(0).size;
return {
w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,
h: tickLabelWidth * sinRotation + tickFontSize * cosRotation
};
}
}, {
key: "_getLabelCapacity",
value: function _getLabelCapacity(exampleTime) {
- var me = this;
- var timeOpts = me.options.time;
+ var timeOpts = this.options.time;
var displayFormats = timeOpts.displayFormats;
var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
-
- var exampleLabel = me._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);
-
- var size = me._getLabelSize(exampleLabel);
-
- var capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h) - 1;
+ var exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);
+ var size = this._getLabelSize(exampleLabel);
+ var capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
return capacity > 0 ? capacity : 1;
}
}, {
key: "getDataTimestamps",
value: function getDataTimestamps() {
- var me = this;
- var timestamps = me._cache.data || [];
+ var timestamps = this._cache.data || [];
var i, ilen;
-
if (timestamps.length) {
return timestamps;
}
-
- var metas = me.getMatchingVisibleMetas();
-
- if (me._normalized && metas.length) {
- return me._cache.data = metas[0].controller.getAllParsedValues(me);
+ var metas = this.getMatchingVisibleMetas();
+ if (this._normalized && metas.length) {
+ return this._cache.data = metas[0].controller.getAllParsedValues(this);
}
-
for (i = 0, ilen = metas.length; i < ilen; ++i) {
- timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(me));
+ timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
}
-
- return me._cache.data = me.normalize(timestamps);
+ return this._cache.data = this.normalize(timestamps);
}
}, {
key: "getLabelTimestamps",
value: function getLabelTimestamps() {
- var me = this;
- var timestamps = me._cache.labels || [];
+ var timestamps = this._cache.labels || [];
var i, ilen;
-
if (timestamps.length) {
return timestamps;
}
-
- var labels = me.getLabels();
-
+ var labels = this.getLabels();
for (i = 0, ilen = labels.length; i < ilen; ++i) {
- timestamps.push(_parse(me, labels[i]));
+ timestamps.push(_parse(this, labels[i]));
}
-
- return me._cache.labels = me._normalized ? timestamps : me.normalize(timestamps);
+ return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);
}
}, {
key: "normalize",
value: function normalize(values) {
return _arrayUnique(values.sort(sorter));
}
}]);
-
return TimeScale;
}(Scale);
-
- TimeScale.id = 'time';
- TimeScale.defaults = {
+ _defineProperty$w(TimeScale, "id", 'time');
+ _defineProperty$w(TimeScale, "defaults", {
bounds: 'data',
adapters: {},
time: {
parser: false,
unit: false,
@@ -17162,146 +16861,139 @@
minUnit: 'millisecond',
displayFormats: {}
},
ticks: {
source: 'auto',
+ callback: false,
major: {
enabled: false
}
}
- };
-
+ });
function interpolate(table, val, reverse) {
+ var lo = 0;
+ var hi = table.length - 1;
var prevSource, nextSource, prevTarget, nextTarget;
-
if (reverse) {
- prevSource = Math.floor(val);
- nextSource = Math.ceil(val);
- prevTarget = table[prevSource];
- nextTarget = table[nextSource];
+ if (val >= table[lo].pos && val <= table[hi].pos) {
+ var _lookupByKey2 = _lookupByKey(table, 'pos', val);
+ lo = _lookupByKey2.lo;
+ hi = _lookupByKey2.hi;
+ }
+ var _table$lo = table[lo];
+ prevSource = _table$lo.pos;
+ prevTarget = _table$lo.time;
+ var _table$hi = table[hi];
+ nextSource = _table$hi.pos;
+ nextTarget = _table$hi.time;
} else {
- var result = _lookup(table, val);
-
- prevTarget = result.lo;
- nextTarget = result.hi;
- prevSource = table[prevTarget];
- nextSource = table[nextTarget];
+ if (val >= table[lo].time && val <= table[hi].time) {
+ var _lookupByKey3 = _lookupByKey(table, 'time', val);
+ lo = _lookupByKey3.lo;
+ hi = _lookupByKey3.hi;
+ }
+ var _table$lo2 = table[lo];
+ prevSource = _table$lo2.time;
+ prevTarget = _table$lo2.pos;
+ var _table$hi2 = table[hi];
+ nextSource = _table$hi2.time;
+ nextTarget = _table$hi2.pos;
}
-
var span = nextSource - prevSource;
return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
}
-
var TimeSeriesScale = /*#__PURE__*/function (_TimeScale) {
- _inherits(TimeSeriesScale, _TimeScale);
-
- var _super25 = _createSuper(TimeSeriesScale);
-
+ _inherits$w(TimeSeriesScale, _TimeScale);
+ var _super25 = _createSuper$w(TimeSeriesScale);
function TimeSeriesScale(props) {
- var _this18;
-
- _classCallCheck(this, TimeSeriesScale);
-
- _this18 = _super25.call(this, props);
- _this18._table = [];
- _this18._maxIndex = undefined;
- return _this18;
+ var _this43;
+ _classCallCheck$x(this, TimeSeriesScale);
+ _this43 = _super25.call(this, props);
+ _this43._table = [];
+ _this43._minPos = undefined;
+ _this43._tableRange = undefined;
+ return _this43;
}
-
- _createClass(TimeSeriesScale, [{
+ _createClass$x(TimeSeriesScale, [{
key: "initOffsets",
value: function initOffsets() {
- var me = this;
-
- var timestamps = me._getTimestampsForTable();
-
- me._table = me.buildLookupTable(timestamps);
- me._maxIndex = me._table.length - 1;
-
- _get(_getPrototypeOf(TimeSeriesScale.prototype), "initOffsets", this).call(this, timestamps);
+ var timestamps = this._getTimestampsForTable();
+ var table = this._table = this.buildLookupTable(timestamps);
+ this._minPos = interpolate(table, this.min);
+ this._tableRange = interpolate(table, this.max) - this._minPos;
+ _get(_getPrototypeOf$w(TimeSeriesScale.prototype), "initOffsets", this).call(this, timestamps);
}
}, {
key: "buildLookupTable",
value: function buildLookupTable(timestamps) {
- var me = this;
- var min = me.min,
- max = me.max;
-
- if (!timestamps.length) {
+ var min = this.min,
+ max = this.max;
+ var items = [];
+ var table = [];
+ var i, ilen, prev, curr, next;
+ for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
+ curr = timestamps[i];
+ if (curr >= min && curr <= max) {
+ items.push(curr);
+ }
+ }
+ if (items.length < 2) {
return [{
time: min,
pos: 0
}, {
time: max,
pos: 1
}];
}
-
- var items = [min];
- var i, ilen, curr;
-
- for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
- curr = timestamps[i];
-
- if (curr > min && curr < max) {
- items.push(curr);
+ for (i = 0, ilen = items.length; i < ilen; ++i) {
+ next = items[i + 1];
+ prev = items[i - 1];
+ curr = items[i];
+ if (Math.round((next + prev) / 2) !== curr) {
+ table.push({
+ time: curr,
+ pos: i / (ilen - 1)
+ });
}
}
-
- items.push(max);
- return items;
+ return table;
}
}, {
key: "_getTimestampsForTable",
value: function _getTimestampsForTable() {
- var me = this;
- var timestamps = me._cache.all || [];
-
+ var timestamps = this._cache.all || [];
if (timestamps.length) {
return timestamps;
}
-
- var data = me.getDataTimestamps();
- var label = me.getLabelTimestamps();
-
+ var data = this.getDataTimestamps();
+ var label = this.getLabelTimestamps();
if (data.length && label.length) {
- timestamps = me.normalize(data.concat(label));
+ timestamps = this.normalize(data.concat(label));
} else {
timestamps = data.length ? data : label;
}
-
- timestamps = me._cache.all = timestamps;
+ timestamps = this._cache.all = timestamps;
return timestamps;
}
}, {
- key: "getPixelForValue",
- value: function getPixelForValue(value, index) {
- var me = this;
- var offsets = me._offsets;
- var pos = me._normalized && me._maxIndex > 0 && !isNullOrUndef(index) ? index / me._maxIndex : me.getDecimalForValue(value);
- return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);
- }
- }, {
key: "getDecimalForValue",
value: function getDecimalForValue(value) {
- return interpolate(this._table, value) / this._maxIndex;
+ return (interpolate(this._table, value) - this._minPos) / this._tableRange;
}
}, {
key: "getValueForPixel",
value: function getValueForPixel(pixel) {
- var me = this;
- var offsets = me._offsets;
- var decimal = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
- return interpolate(me._table, decimal * this._maxIndex, true);
+ var offsets = this._offsets;
+ var decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+ return interpolate(this._table, decimal * this._tableRange + this._minPos, true);
}
}]);
-
return TimeSeriesScale;
}(TimeScale);
-
- TimeSeriesScale.id = 'timeseries';
- TimeSeriesScale.defaults = TimeScale.defaults;
+ _defineProperty$w(TimeSeriesScale, "id", 'timeseries');
+ _defineProperty$w(TimeSeriesScale, "defaults", TimeScale.defaults);
var scales = /*#__PURE__*/Object.freeze({
__proto__: null,
CategoryScale: CategoryScale,
LinearScale: LinearScale,
LogarithmicScale: LogarithmicScale,
@@ -17309,32 +17001,169 @@
TimeScale: TimeScale,
TimeSeriesScale: TimeSeriesScale
});
var registerables = [controllers, elements, plugins, scales];
- Chart.register.apply(Chart, _toConsumableArray(registerables));
+ Chart$1.register.apply(Chart$1, _toConsumableArray(registerables));
+ var Chart = Chart$1;
+ var helpers = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ HALF_PI: HALF_PI,
+ INFINITY: INFINITY,
+ PI: PI,
+ PITAU: PITAU,
+ QUARTER_PI: QUARTER_PI,
+ RAD_PER_DEG: RAD_PER_DEG,
+ TAU: TAU,
+ TWO_THIRDS_PI: TWO_THIRDS_PI,
+ _addGrace: _addGrace,
+ _alignPixel: _alignPixel,
+ _alignStartEnd: _alignStartEnd,
+ _angleBetween: _angleBetween,
+ _angleDiff: _angleDiff,
+ _arrayUnique: _arrayUnique,
+ _attachContext: _attachContext,
+ _bezierCurveTo: _bezierCurveTo,
+ _bezierInterpolation: _bezierInterpolation,
+ _boundSegment: _boundSegment,
+ _boundSegments: _boundSegments,
+ _capitalize: _capitalize,
+ _computeSegments: _computeSegments,
+ _createResolver: _createResolver,
+ _decimalPlaces: _decimalPlaces,
+ _deprecated: _deprecated,
+ _descriptors: _descriptors,
+ _elementsEqual: _elementsEqual,
+ _factorize: _factorize,
+ _filterBetween: _filterBetween,
+ _getParentNode: _getParentNode,
+ _getStartAndCountOfVisiblePoints: _getStartAndCountOfVisiblePoints,
+ _int16Range: _int16Range,
+ _isBetween: _isBetween,
+ _isClickEvent: _isClickEvent,
+ _isDomSupported: _isDomSupported,
+ _isPointInArea: _isPointInArea,
+ _limitValue: _limitValue,
+ _longestText: _longestText,
+ _lookup: _lookup,
+ _lookupByKey: _lookupByKey,
+ _measureText: _measureText,
+ _merger: _merger,
+ _mergerIf: _mergerIf,
+ _normalizeAngle: _normalizeAngle,
+ _parseObjectDataRadialScale: _parseObjectDataRadialScale,
+ _pointInLine: _pointInLine,
+ _readValueToProps: _readValueToProps,
+ _rlookupByKey: _rlookupByKey,
+ _scaleRangesChanged: _scaleRangesChanged,
+ _setMinAndMaxByKey: _setMinAndMaxByKey,
+ _splitKey: _splitKey,
+ _steppedInterpolation: _steppedInterpolation,
+ _steppedLineTo: _steppedLineTo,
+ _textX: _textX,
+ _toLeftRightCenter: _toLeftRightCenter,
+ _updateBezierControlPoints: _updateBezierControlPoints,
+ addRoundedRectPath: addRoundedRectPath,
+ almostEquals: almostEquals,
+ almostWhole: almostWhole,
+ callback: callback,
+ clearCanvas: clearCanvas,
+ clipArea: clipArea,
+ clone: clone,
+ color: color,
+ createContext: createContext,
+ debounce: debounce,
+ defined: defined,
+ distanceBetweenPoints: distanceBetweenPoints,
+ drawPoint: drawPoint,
+ drawPointLegend: drawPointLegend,
+ each: each,
+ easingEffects: effects,
+ finiteOrDefault: finiteOrDefault,
+ fontString: fontString,
+ formatNumber: formatNumber,
+ getAngleFromPoint: getAngleFromPoint,
+ getHoverColor: getHoverColor,
+ getMaximumSize: getMaximumSize,
+ getRelativePosition: getRelativePosition,
+ getRtlAdapter: getRtlAdapter,
+ getStyle: getStyle,
+ isArray: isArray,
+ isFinite: isNumberFinite,
+ isFunction: isFunction,
+ isNullOrUndef: isNullOrUndef,
+ isNumber: isNumber,
+ isObject: isObject,
+ isPatternOrGradient: isPatternOrGradient,
+ listenArrayEvents: listenArrayEvents,
+ log10: log10,
+ merge: merge,
+ mergeIf: mergeIf,
+ niceNum: niceNum,
+ noop: noop,
+ overrideTextDirection: overrideTextDirection,
+ readUsedSize: readUsedSize,
+ renderText: renderText,
+ requestAnimFrame: requestAnimFrame,
+ resolve: resolve,
+ resolveObjectKey: resolveObjectKey,
+ restoreTextDirection: restoreTextDirection,
+ retinaScale: retinaScale,
+ setsEqual: setsEqual,
+ sign: sign,
+ splineCurve: splineCurve,
+ splineCurveMonotone: splineCurveMonotone,
+ supportsEventListenerOptions: supportsEventListenerOptions,
+ throttled: throttled,
+ toDegrees: toDegrees,
+ toDimension: toDimension,
+ toFont: toFont,
+ toFontString: toFontString,
+ toLineHeight: toLineHeight,
+ toPadding: toPadding,
+ toPercentage: toPercentage,
+ toRadians: toRadians,
+ toTRBL: toTRBL,
+ toTRBLCorners: toTRBLCorners,
+ uid: uid,
+ unclipArea: unclipArea,
+ unlistenArrayEvents: unlistenArrayEvents,
+ valueOrDefault: valueOrDefault
+ });
+
function toInteger(dirtyNumber) {
if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {
return NaN;
}
-
var number = Number(dirtyNumber);
-
if (isNaN(number)) {
return number;
}
-
return number < 0 ? Math.ceil(number) : Math.floor(number);
}
function requiredArgs(required, args) {
if (args.length < required) {
throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');
}
}
+ function _typeof$y(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$y = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$y = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$y(obj);
+ }
/**
* @name toDate
* @category Common Helpers
* @summary Convert the given argument to an instance of Date.
*
@@ -17366,23 +17195,22 @@
function toDate(argument) {
requiredArgs(1, arguments);
var argStr = Object.prototype.toString.call(argument); // Clone the date
- if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {
+ if (argument instanceof Date || _typeof$y(argument) === 'object' && argStr === '[object Date]') {
// Prevent the date to lose the milliseconds when passed to new Date() in IE10
return new Date(argument.getTime());
} else if (typeof argument === 'number' || argStr === '[object Number]') {
return new Date(argument);
} else {
if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {
// eslint-disable-next-line no-console
- console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"); // eslint-disable-next-line no-console
+ console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"); // eslint-disable-next-line no-console
console.warn(new Error().stack);
}
-
return new Date(NaN);
}
}
/**
@@ -17391,18 +17219,14 @@
* @summary Add the specified number of days to the given date.
*
* @description
* Add the specified number of days to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
- * @returns {Date} the new date with the days added
- * @throws {TypeError} 2 arguments required
+ * @returns {Date} - the new date with the days added
+ * @throws {TypeError} - 2 arguments required
*
* @example
* // Add 10 days to 1 September 2014:
* const result = addDays(new Date(2014, 8, 1), 10)
* //=> Thu Sep 11 2014 00:00:00
@@ -17410,20 +17234,17 @@
function addDays(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var date = toDate(dirtyDate);
var amount = toInteger(dirtyAmount);
-
if (isNaN(amount)) {
return new Date(NaN);
}
-
if (!amount) {
// If 0 days, no-op to avoid changing times in the hour before end of DST
return date;
}
-
date.setDate(date.getDate() + amount);
return date;
}
/**
@@ -17432,14 +17253,10 @@
* @summary Add the specified number of months to the given date.
*
* @description
* Add the specified number of months to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the months added
* @throws {TypeError} 2 arguments required
*
@@ -17451,33 +17268,29 @@
function addMonths(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var date = toDate(dirtyDate);
var amount = toInteger(dirtyAmount);
-
if (isNaN(amount)) {
return new Date(NaN);
}
-
if (!amount) {
// If 0 months, no-op to avoid changing times in the hour before end of DST
return date;
}
-
var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for
- // month, day, etc. For example, new Date(2020, 1, 0) returns 31 Dec 2019 and
+ // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and
// new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we
// want except that dates will wrap around the end of a month, meaning that
// new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So
// we'll default to the end of the desired month by adding 1 to the desired
// month and using a date of 0 to back up one day to the end of the desired
// month.
var endOfDesiredMonth = new Date(date.getTime());
endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);
var daysInMonth = endOfDesiredMonth.getDate();
-
if (dayOfMonth >= daysInMonth) {
// If we're already at the end of the month, then this is the correct date
// and we're done.
return endOfDesiredMonth;
} else {
@@ -17499,14 +17312,10 @@
* @summary Add the specified number of milliseconds to the given date.
*
* @description
* Add the specified number of milliseconds to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the milliseconds added
* @throws {TypeError} 2 arguments required
*
@@ -17521,23 +17330,19 @@
var timestamp = toDate(dirtyDate).getTime();
var amount = toInteger(dirtyAmount);
return new Date(timestamp + amount);
}
- var MILLISECONDS_IN_HOUR$3 = 3600000;
+ var MILLISECONDS_IN_HOUR = 3600000;
/**
* @name addHours
* @category Hour Helpers
* @summary Add the specified number of hours to the given date.
*
* @description
* Add the specified number of hours to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the hours added
* @throws {TypeError} 2 arguments required
*
@@ -17548,57 +17353,55 @@
*/
function addHours(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
- return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR$3);
+ return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);
}
+ var defaultOptions = {};
+ function getDefaultOptions() {
+ return defaultOptions;
+ }
+
/**
* @name startOfWeek
* @category Week Helpers
* @summary Return the start of a week for the given date.
*
* @description
* Return the start of a week for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @param {Object} [options] - an object with options.
* @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
* @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
* @returns {Date} the start of a week
* @throws {TypeError} 1 argument required
* @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
*
* @example
* // The start of a week for 2 September 2014 11:55:00:
- * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
+ * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))
* //=> Sun Aug 31 2014 00:00:00
*
* @example
* // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:
- * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
+ * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
* //=> Mon Sep 01 2014 00:00:00
*/
- function startOfWeek(dirtyDate, dirtyOptions) {
+ function startOfWeek(dirtyDate, options) {
+ var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
requiredArgs(1, arguments);
- var options = dirtyOptions || {};
- var locale = options.locale;
- var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;
- var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);
- var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ var defaultOptions = getDefaultOptions();
+ var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
-
var date = toDate(dirtyDate);
var day = date.getDay();
var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
date.setDate(date.getDate() - diff);
date.setHours(0, 0, 0, 0);
@@ -17629,14 +17432,10 @@
*
* @description
* Return the start of a day for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the start of a day
* @throws {TypeError} 1 argument required
*
* @example
@@ -17660,30 +17459,26 @@
*
* @description
* Get the number of calendar days between the given dates. This means that the times are removed
* from the dates and then the difference in days is calculated.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar days
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar days are between
* // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
- * var result = differenceInCalendarDays(
+ * const result = differenceInCalendarDays(
* new Date(2012, 6, 2, 0, 0),
* new Date(2011, 6, 2, 23, 0)
* )
* //=> 366
* // How many calendar days are between
* // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
- * var result = differenceInCalendarDays(
+ * const result = differenceInCalendarDays(
* new Date(2011, 6, 3, 0, 1),
* new Date(2011, 6, 2, 23, 59)
* )
* //=> 1
*/
@@ -17698,23 +17493,19 @@
// (e.g. it's different in the day of the daylight saving time clock shift)
return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY$1);
}
- var MILLISECONDS_IN_MINUTE$3 = 60000;
+ var MILLISECONDS_IN_MINUTE = 60000;
/**
* @name addMinutes
* @category Minute Helpers
* @summary Add the specified number of minutes to the given date.
*
* @description
* Add the specified number of minutes to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the minutes added
* @throws {TypeError} 2 arguments required
*
@@ -17725,25 +17516,21 @@
*/
function addMinutes(dirtyDate, dirtyAmount) {
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
- return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE$3);
+ return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE);
}
/**
* @name addQuarters
* @category Quarter Helpers
* @summary Add the specified number of year quarters to the given date.
*
* @description
* Add the specified number of year quarters to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the quarters added
* @throws {TypeError} 2 arguments required
*
@@ -17766,14 +17553,10 @@
* @summary Add the specified number of seconds to the given date.
*
* @description
* Add the specified number of seconds to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the seconds added
* @throws {TypeError} 2 arguments required
*
@@ -17795,14 +17578,10 @@
* @summary Add the specified number of weeks to the given date.
*
* @description
* Add the specified number of week to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the weeks added
* @throws {TypeError} 2 arguments required
*
@@ -17825,14 +17604,10 @@
* @summary Add the specified number of years to the given date.
*
* @description
* Add the specified number of years to the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the years added
* @throws {TypeError} 2 arguments required
*
@@ -17855,14 +17630,10 @@
*
* @description
* Compare the two dates and return 1 if the first date is after the second,
* -1 if the first date is before the second or 0 if dates are equal.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the first date to compare
* @param {Date|Number} dateRight - the second date to compare
* @returns {Number} the result of the comparison
* @throws {TypeError} 2 arguments required
*
@@ -17888,21 +17659,111 @@
function compareAsc(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var diff = dateLeft.getTime() - dateRight.getTime();
-
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1; // Return 0 if diff is 0; return NaN if diff is NaN
} else {
return diff;
}
}
/**
+ * Days in 1 week.
+ *
+ * @name daysInWeek
+ * @constant
+ * @type {number}
+ * @default
+ */
+ /**
+ * Milliseconds in 1 minute
+ *
+ * @name millisecondsInMinute
+ * @constant
+ * @type {number}
+ * @default
+ */
+
+ var millisecondsInMinute = 60000;
+ /**
+ * Milliseconds in 1 hour
+ *
+ * @name millisecondsInHour
+ * @constant
+ * @type {number}
+ * @default
+ */
+
+ var millisecondsInHour = 3600000;
+ /**
+ * Milliseconds in 1 second
+ *
+ * @name millisecondsInSecond
+ * @constant
+ * @type {number}
+ * @default
+ */
+
+ var millisecondsInSecond = 1000;
+
+ function _typeof$x(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$x = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$x = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$x(obj);
+ }
+ /**
+ * @name isDate
+ * @category Common Helpers
+ * @summary Is the given value a date?
+ *
+ * @description
+ * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.
+ *
+ * @param {*} value - the value to check
+ * @returns {boolean} true if the given value is a date
+ * @throws {TypeError} 1 arguments required
+ *
+ * @example
+ * // For a valid date:
+ * const result = isDate(new Date())
+ * //=> true
+ *
+ * @example
+ * // For an invalid date:
+ * const result = isDate(new Date(NaN))
+ * //=> true
+ *
+ * @example
+ * // For some value:
+ * const result = isDate('2014-02-31')
+ * //=> false
+ *
+ * @example
+ * // For an object:
+ * const result = isDate({})
+ * //=> false
+ */
+
+ function isDate(value) {
+ requiredArgs(1, arguments);
+ return value instanceof Date || _typeof$x(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';
+ }
+
+ /**
* @name isValid
* @category Common Helpers
* @summary Is the given date valid?
*
* @description
@@ -17910,82 +17771,55 @@
* Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}
* Invalid Date is a Date, whose time value is NaN.
*
* Time value of Date: http://es5.github.io/#x15.9.1.1
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
- * - Now `isValid` doesn't throw an exception
- * if the first argument is not an instance of Date.
- * Instead, argument is converted beforehand using `toDate`.
- *
- * Examples:
- *
- * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |
- * |---------------------------|---------------|---------------|
- * | `new Date()` | `true` | `true` |
- * | `new Date('2016-01-01')` | `true` | `true` |
- * | `new Date('')` | `false` | `false` |
- * | `new Date(1488370835081)` | `true` | `true` |
- * | `new Date(NaN)` | `false` | `false` |
- * | `'2016-01-01'` | `TypeError` | `false` |
- * | `''` | `TypeError` | `false` |
- * | `1488370835081` | `TypeError` | `true` |
- * | `NaN` | `TypeError` | `false` |
- *
- * We introduce this change to make *date-fns* consistent with ECMAScript behavior
- * that try to coerce arguments to the expected type
- * (which is also the case with other *date-fns* functions).
- *
* @param {*} date - the date to check
* @returns {Boolean} the date is valid
* @throws {TypeError} 1 argument required
*
* @example
* // For the valid date:
- * var result = isValid(new Date(2014, 1, 31))
+ * const result = isValid(new Date(2014, 1, 31))
* //=> true
*
* @example
* // For the value, convertable into a date:
- * var result = isValid(1393804800000)
+ * const result = isValid(1393804800000)
* //=> true
*
* @example
* // For the invalid date:
- * var result = isValid(new Date(''))
+ * const result = isValid(new Date(''))
* //=> false
*/
function isValid(dirtyDate) {
requiredArgs(1, arguments);
+ if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {
+ return false;
+ }
var date = toDate(dirtyDate);
- return !isNaN(date);
+ return !isNaN(Number(date));
}
/**
* @name differenceInCalendarMonths
* @category Month Helpers
* @summary Get the number of calendar months between the given dates.
*
* @description
* Get the number of calendar months between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar months
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar months are between 31 January 2014 and 1 September 2014?
- * var result = differenceInCalendarMonths(
+ * const result = differenceInCalendarMonths(
* new Date(2014, 8, 1),
* new Date(2014, 0, 31)
* )
* //=> 8
*/
@@ -18005,22 +17839,18 @@
* @summary Get the number of calendar years between the given dates.
*
* @description
* Get the number of calendar years between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar years
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar years are between 31 December 2013 and 11 February 2015?
- * var result = differenceInCalendarYears(
+ * const result = differenceInCalendarYears(
* new Date(2015, 1, 11),
* new Date(2013, 11, 31)
* )
* //=> 2
*/
@@ -18036,11 +17866,10 @@
// having the same representation in local time, e.g. one hour before
// DST ends vs. the instant that DST ends.
function compareLocalAsc(dateLeft, dateRight) {
var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();
-
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1; // Return 0 if diff is 0; return NaN if diff is NaN
} else {
@@ -18062,58 +17891,53 @@
*
* To ignore DST and only measure exact 24-hour periods, use this instead:
* `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.
*
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full days according to the local timezone
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full days are between
* // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
- * var result = differenceInDays(
+ * const result = differenceInDays(
* new Date(2012, 6, 2, 0, 0),
* new Date(2011, 6, 2, 23, 0)
* )
* //=> 365
* // How many full days are between
* // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
- * var result = differenceInDays(
+ * const result = differenceInDays(
* new Date(2011, 6, 3, 0, 1),
* new Date(2011, 6, 2, 23, 59)
* )
* //=> 0
* // How many full days are between
* // 1 March 2020 0:00 and 1 June 2020 0:00 ?
* // Note: because local time is used, the
* // result will always be 92 days, even in
* // time zones where DST starts and the
* // period has only 92*24-1 hours.
- * var result = differenceInDays(
+ * const result = differenceInDays(
* new Date(2020, 5, 1),
* new Date(2020, 2, 1)
* )
//=> 92
*/
-
function differenceInDays(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
var dateLeft = toDate(dirtyDateLeft);
var dateRight = toDate(dirtyDateRight);
var sign = compareLocalAsc(dateLeft, dateRight);
var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));
dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full
// If so, result must be decreased by 1 in absolute value
- var isLastDayNotFull = compareLocalAsc(dateLeft, dateRight) === -sign;
+ var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);
var result = sign * (difference - isLastDayNotFull); // Prevent negative zero
return result === 0 ? 0 : result;
}
@@ -18123,108 +17947,110 @@
* @summary Get the number of milliseconds between the given dates.
*
* @description
* Get the number of milliseconds between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of milliseconds
* @throws {TypeError} 2 arguments required
*
* @example
* // How many milliseconds are between
* // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?
- * var result = differenceInMilliseconds(
+ * const result = differenceInMilliseconds(
* new Date(2014, 6, 2, 12, 30, 21, 700),
* new Date(2014, 6, 2, 12, 30, 20, 600)
* )
* //=> 1100
*/
- function differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) {
+ function differenceInMilliseconds(dateLeft, dateRight) {
requiredArgs(2, arguments);
- var dateLeft = toDate(dirtyDateLeft);
- var dateRight = toDate(dirtyDateRight);
- return dateLeft.getTime() - dateRight.getTime();
+ return toDate(dateLeft).getTime() - toDate(dateRight).getTime();
}
- var MILLISECONDS_IN_HOUR$2 = 3600000;
+ var roundingMap = {
+ ceil: Math.ceil,
+ round: Math.round,
+ floor: Math.floor,
+ trunc: function trunc(value) {
+ return value < 0 ? Math.ceil(value) : Math.floor(value);
+ } // Math.trunc is not supported by IE
+ };
+
+ var defaultRoundingMethod = 'trunc';
+ function getRoundingMethod(method) {
+ return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];
+ }
+
/**
* @name differenceInHours
* @category Hour Helpers
* @summary Get the number of hours between the given dates.
*
* @description
* Get the number of hours between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
+ * @param {Object} [options] - an object with options.
+ * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of hours
* @throws {TypeError} 2 arguments required
*
* @example
* // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?
- * var result = differenceInHours(
+ * const result = differenceInHours(
* new Date(2014, 6, 2, 19, 0),
* new Date(2014, 6, 2, 6, 50)
* )
* //=> 12
*/
- function differenceInHours(dirtyDateLeft, dirtyDateRight) {
+ function differenceInHours(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
- var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_HOUR$2;
- return diff > 0 ? Math.floor(diff) : Math.ceil(diff);
+ var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;
+ return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
- var MILLISECONDS_IN_MINUTE$2 = 60000;
/**
* @name differenceInMinutes
* @category Minute Helpers
* @summary Get the number of minutes between the given dates.
*
* @description
* Get the signed number of full (rounded towards 0) minutes between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
+ * @param {Object} [options] - an object with options.
+ * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of minutes
* @throws {TypeError} 2 arguments required
*
* @example
* // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?
- * var result = differenceInMinutes(
+ * const result = differenceInMinutes(
* new Date(2014, 6, 2, 12, 20, 0),
* new Date(2014, 6, 2, 12, 7, 59)
* )
* //=> 12
*
* @example
- * // How many minutes are from 10:01:59 to 10:00:00
- * var result = differenceInMinutes(
+ * // How many minutes are between 10:01:59 and 10:00:00
+ * const result = differenceInMinutes(
* new Date(2000, 0, 1, 10, 0, 0),
* new Date(2000, 0, 1, 10, 1, 59)
* )
* //=> -1
*/
- function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {
+ function differenceInMinutes(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
- var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE$2;
- return diff > 0 ? Math.floor(diff) : Math.ceil(diff);
+ var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;
+ return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
/**
* @name endOfDay
* @category Day Helpers
@@ -18232,14 +18058,10 @@
*
* @description
* Return the end of a day for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the end of a day
* @throws {TypeError} 1 argument required
*
* @example
@@ -18262,14 +18084,10 @@
*
* @description
* Return the end of a month for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the end of a month
* @throws {TypeError} 1 argument required
*
* @example
@@ -18293,21 +18111,17 @@
* @summary Is the given date the last day of a month?
*
* @description
* Is the given date the last day of a month?
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to check
* @returns {Boolean} the date is the last day of a month
* @throws {TypeError} 1 argument required
*
* @example
* // Is 28 February 2014 the last day of a month?
- * var result = isLastDayOfMonth(new Date(2014, 1, 28))
+ * const result = isLastDayOfMonth(new Date(2014, 1, 28))
* //=> true
*/
function isLastDayOfMonth(dirtyDate) {
requiredArgs(1, arguments);
@@ -18319,24 +18133,20 @@
* @name differenceInMonths
* @category Month Helpers
* @summary Get the number of full months between the given dates.
*
* @description
- * Get the number of full months between the given dates.
+ * Get the number of full months between the given dates using trunc as a default rounding method.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full months
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full months are between 31 January 2014 and 1 September 2014?
- * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))
+ * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))
* //=> 7
*/
function differenceInMonths(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
@@ -18352,159 +18162,146 @@
if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {
// This will check if the date is end of Feb and assign a higher end of month date
// to compare it with Jan
dateLeft.setDate(30);
}
-
dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full
// If so, result must be decreased by 1 in absolute value
var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month
if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {
isLastMonthNotFull = false;
}
-
- result = sign * (difference - isLastMonthNotFull);
+ result = sign * (difference - Number(isLastMonthNotFull));
} // Prevent negative zero
-
return result === 0 ? 0 : result;
}
/**
* @name differenceInQuarters
* @category Quarter Helpers
- * @summary Get the number of full quarters between the given dates.
+ * @summary Get the number of quarters between the given dates.
*
* @description
- * Get the number of full quarters between the given dates.
+ * Get the number of quarters between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
+ * @param {Object} [options] - an object with options.
+ * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of full quarters
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full quarters are between 31 December 2013 and 2 July 2014?
- * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))
+ * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))
* //=> 2
*/
- function differenceInQuarters(dirtyDateLeft, dirtyDateRight) {
+ function differenceInQuarters(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
- var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3;
- return diff > 0 ? Math.floor(diff) : Math.ceil(diff);
+ var diff = differenceInMonths(dateLeft, dateRight) / 3;
+ return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
/**
* @name differenceInSeconds
* @category Second Helpers
* @summary Get the number of seconds between the given dates.
*
* @description
* Get the number of seconds between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
+ * @param {Object} [options] - an object with options.
+ * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of seconds
* @throws {TypeError} 2 arguments required
*
* @example
* // How many seconds are between
* // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?
- * var result = differenceInSeconds(
+ * const result = differenceInSeconds(
* new Date(2014, 6, 2, 12, 30, 20, 0),
* new Date(2014, 6, 2, 12, 30, 7, 999)
* )
* //=> 12
*/
- function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {
+ function differenceInSeconds(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
- var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000;
- return diff > 0 ? Math.floor(diff) : Math.ceil(diff);
+ var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;
+ return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
/**
* @name differenceInWeeks
* @category Week Helpers
* @summary Get the number of full weeks between the given dates.
*
* @description
* Get the number of full weeks between two dates. Fractional weeks are
- * truncated towards zero.
+ * truncated towards zero by default.
*
* One "full week" is the distance between a local time in one day to the same
* local time 7 days earlier or later. A full week can sometimes be less than
* or more than 7*24 hours if a daylight savings change happens between two dates.
*
* To ignore DST and only measure exact 7*24-hour periods, use this instead:
* `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.
*
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
+ * @param {Object} [options] - an object with options.
+ * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of full weeks
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full weeks are between 5 July 2014 and 20 July 2014?
- * var result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))
+ * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))
* //=> 2
*
* // How many full weeks are between
* // 1 March 2020 0:00 and 6 June 2020 0:00 ?
* // Note: because local time is used, the
* // result will always be 8 weeks (54 days),
* // even if DST starts and the period has
* // only 54*24-1 hours.
- * var result = differenceInWeeks(
+ * const result = differenceInWeeks(
* new Date(2020, 5, 1),
* new Date(2020, 2, 6)
* )
* //=> 8
*/
- function differenceInWeeks(dirtyDateLeft, dirtyDateRight) {
+ function differenceInWeeks(dateLeft, dateRight, options) {
requiredArgs(2, arguments);
- var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7;
- return diff > 0 ? Math.floor(diff) : Math.ceil(diff);
+ var diff = differenceInDays(dateLeft, dateRight) / 7;
+ return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
/**
* @name differenceInYears
* @category Year Helpers
* @summary Get the number of full years between the given dates.
*
* @description
* Get the number of full years between the given dates.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full years
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full years are between 31 December 2013 and 11 February 2015?
- * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))
+ * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))
* //=> 1
*/
function differenceInYears(dirtyDateLeft, dirtyDateRight) {
requiredArgs(2, arguments);
@@ -18512,33 +18309,55 @@
var dateRight = toDate(dirtyDateRight);
var sign = compareAsc(dateLeft, dateRight);
var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing
// with leap days
- dateLeft.setFullYear('1584');
- dateRight.setFullYear('1584'); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full
+ dateLeft.setFullYear(1584);
+ dateRight.setFullYear(1584); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full
// If so, result must be decreased by 1 in absolute value
var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;
- var result = sign * (difference - isLastYearNotFull); // Prevent negative zero
+ var result = sign * (difference - Number(isLastYearNotFull)); // Prevent negative zero
return result === 0 ? 0 : result;
}
/**
+ * @name startOfMinute
+ * @category Minute Helpers
+ * @summary Return the start of a minute for the given date.
+ *
+ * @description
+ * Return the start of a minute for the given date.
+ * The result will be in the local timezone.
+ *
+ * @param {Date|Number} date - the original date
+ * @returns {Date} the start of a minute
+ * @throws {TypeError} 1 argument required
+ *
+ * @example
+ * // The start of a minute for 1 December 2014 22:15:45.400:
+ * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
+ * //=> Mon Dec 01 2014 22:15:00
+ */
+
+ function startOfMinute(dirtyDate) {
+ requiredArgs(1, arguments);
+ var date = toDate(dirtyDate);
+ date.setSeconds(0, 0);
+ return date;
+ }
+
+ /**
* @name startOfQuarter
* @category Quarter Helpers
* @summary Return the start of a year quarter for the given date.
*
* @description
* Return the start of a year quarter for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the start of a quarter
* @throws {TypeError} 1 argument required
*
* @example
@@ -18564,14 +18383,10 @@
*
* @description
* Return the start of a month for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the start of a month
* @throws {TypeError} 1 argument required
*
* @example
@@ -18587,70 +18402,62 @@
date.setHours(0, 0, 0, 0);
return date;
}
/**
- * @name startOfYear
+ * @name endOfYear
* @category Year Helpers
- * @summary Return the start of a year for the given date.
+ * @summary Return the end of a year for the given date.
*
* @description
- * Return the start of a year for the given date.
+ * Return the end of a year for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
- * @returns {Date} the start of a year
+ * @returns {Date} the end of a year
* @throws {TypeError} 1 argument required
*
* @example
- * // The start of a year for 2 September 2014 11:55:00:
- * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))
- * //=> Wed Jan 01 2014 00:00:00
+ * // The end of a year for 2 September 2014 11:55:00:
+ * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))
+ * //=> Wed Dec 31 2014 23:59:59.999
*/
- function startOfYear(dirtyDate) {
+ function endOfYear(dirtyDate) {
requiredArgs(1, arguments);
- var cleanDate = toDate(dirtyDate);
- var date = new Date(0);
- date.setFullYear(cleanDate.getFullYear(), 0, 1);
- date.setHours(0, 0, 0, 0);
+ var date = toDate(dirtyDate);
+ var year = date.getFullYear();
+ date.setFullYear(year + 1, 0, 0);
+ date.setHours(23, 59, 59, 999);
return date;
}
/**
- * @name endOfYear
+ * @name startOfYear
* @category Year Helpers
- * @summary Return the end of a year for the given date.
+ * @summary Return the start of a year for the given date.
*
* @description
- * Return the end of a year for the given date.
+ * Return the start of a year for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
- * @returns {Date} the end of a year
+ * @returns {Date} the start of a year
* @throws {TypeError} 1 argument required
*
* @example
- * // The end of a year for 2 September 2014 11:55:00:
- * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))
- * //=> Wed Dec 31 2014 23:59:59.999
+ * // The start of a year for 2 September 2014 11:55:00:
+ * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))
+ * //=> Wed Jan 01 2014 00:00:00
*/
- function endOfYear(dirtyDate) {
+ function startOfYear(dirtyDate) {
requiredArgs(1, arguments);
- var date = toDate(dirtyDate);
- var year = date.getFullYear();
- date.setFullYear(year + 1, 0, 0);
- date.setHours(23, 59, 59, 999);
+ var cleanDate = toDate(dirtyDate);
+ var date = new Date(0);
+ date.setFullYear(cleanDate.getFullYear(), 0, 1);
+ date.setHours(0, 0, 0, 0);
return date;
}
/**
* @name endOfHour
@@ -18659,14 +18466,10 @@
*
* @description
* Return the end of an hour for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the end of an hour
* @throws {TypeError} 1 argument required
*
* @example
@@ -18689,14 +18492,10 @@
*
* @description
* Return the end of a week for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @param {Object} [options] - an object with options.
* @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
* @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
* @returns {Date} the end of a week
@@ -18711,23 +18510,19 @@
* @example
* // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:
* const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })
* //=> Sun Sep 07 2014 23:59:59.999
*/
-
- function endOfWeek(dirtyDate, dirtyOptions) {
+ function endOfWeek(dirtyDate, options) {
+ var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
requiredArgs(1, arguments);
- var options = dirtyOptions || {};
- var locale = options.locale;
- var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;
- var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);
- var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ var defaultOptions = getDefaultOptions();
+ var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
-
var date = toDate(dirtyDate);
var day = date.getDay();
var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);
date.setDate(date.getDate() + diff);
date.setHours(23, 59, 59, 999);
@@ -18741,14 +18536,10 @@
*
* @description
* Return the end of a minute for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the end of a minute
* @throws {TypeError} 1 argument required
*
* @example
@@ -18771,14 +18562,10 @@
*
* @description
* Return the end of a year quarter for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the end of a quarter
* @throws {TypeError} 1 argument required
*
* @example
@@ -18804,14 +18591,10 @@
*
* @description
* Return the end of a second for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the end of a second
* @throws {TypeError} 1 argument required
*
* @example
@@ -18825,531 +18608,18 @@
var date = toDate(dirtyDate);
date.setMilliseconds(999);
return date;
}
- var formatDistanceLocale = {
- lessThanXSeconds: {
- one: 'less than a second',
- other: 'less than {{count}} seconds'
- },
- xSeconds: {
- one: '1 second',
- other: '{{count}} seconds'
- },
- halfAMinute: 'half a minute',
- lessThanXMinutes: {
- one: 'less than a minute',
- other: 'less than {{count}} minutes'
- },
- xMinutes: {
- one: '1 minute',
- other: '{{count}} minutes'
- },
- aboutXHours: {
- one: 'about 1 hour',
- other: 'about {{count}} hours'
- },
- xHours: {
- one: '1 hour',
- other: '{{count}} hours'
- },
- xDays: {
- one: '1 day',
- other: '{{count}} days'
- },
- aboutXWeeks: {
- one: 'about 1 week',
- other: 'about {{count}} weeks'
- },
- xWeeks: {
- one: '1 week',
- other: '{{count}} weeks'
- },
- aboutXMonths: {
- one: 'about 1 month',
- other: 'about {{count}} months'
- },
- xMonths: {
- one: '1 month',
- other: '{{count}} months'
- },
- aboutXYears: {
- one: 'about 1 year',
- other: 'about {{count}} years'
- },
- xYears: {
- one: '1 year',
- other: '{{count}} years'
- },
- overXYears: {
- one: 'over 1 year',
- other: 'over {{count}} years'
- },
- almostXYears: {
- one: 'almost 1 year',
- other: 'almost {{count}} years'
- }
- };
- function formatDistance(token, count, options) {
- options = options || {};
- var result;
-
- if (typeof formatDistanceLocale[token] === 'string') {
- result = formatDistanceLocale[token];
- } else if (count === 1) {
- result = formatDistanceLocale[token].one;
- } else {
- result = formatDistanceLocale[token].other.replace('{{count}}', count);
- }
-
- if (options.addSuffix) {
- if (options.comparison > 0) {
- return 'in ' + result;
- } else {
- return result + ' ago';
- }
- }
-
- return result;
- }
-
- function buildFormatLongFn(args) {
- return function (dirtyOptions) {
- var options = dirtyOptions || {};
- var width = options.width ? String(options.width) : args.defaultWidth;
- var format = args.formats[width] || args.formats[args.defaultWidth];
- return format;
- };
- }
-
- var dateFormats = {
- full: 'EEEE, MMMM do, y',
- long: 'MMMM do, y',
- medium: 'MMM d, y',
- short: 'MM/dd/yyyy'
- };
- var timeFormats = {
- full: 'h:mm:ss a zzzz',
- long: 'h:mm:ss a z',
- medium: 'h:mm:ss a',
- short: 'h:mm a'
- };
- var dateTimeFormats = {
- full: "{{date}} 'at' {{time}}",
- long: "{{date}} 'at' {{time}}",
- medium: '{{date}}, {{time}}',
- short: '{{date}}, {{time}}'
- };
- var formatLong = {
- date: buildFormatLongFn({
- formats: dateFormats,
- defaultWidth: 'full'
- }),
- time: buildFormatLongFn({
- formats: timeFormats,
- defaultWidth: 'full'
- }),
- dateTime: buildFormatLongFn({
- formats: dateTimeFormats,
- defaultWidth: 'full'
- })
- };
-
- var formatRelativeLocale = {
- lastWeek: "'last' eeee 'at' p",
- yesterday: "'yesterday at' p",
- today: "'today at' p",
- tomorrow: "'tomorrow at' p",
- nextWeek: "eeee 'at' p",
- other: 'P'
- };
- function formatRelative(token, _date, _baseDate, _options) {
- return formatRelativeLocale[token];
- }
-
- function buildLocalizeFn(args) {
- return function (dirtyIndex, dirtyOptions) {
- var options = dirtyOptions || {};
- var context = options.context ? String(options.context) : 'standalone';
- var valuesArray;
-
- if (context === 'formatting' && args.formattingValues) {
- var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
- var width = options.width ? String(options.width) : defaultWidth;
- valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
- } else {
- var _defaultWidth = args.defaultWidth;
-
- var _width = options.width ? String(options.width) : args.defaultWidth;
-
- valuesArray = args.values[_width] || args.values[_defaultWidth];
- }
-
- var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;
- return valuesArray[index];
- };
- }
-
- var eraValues = {
- narrow: ['B', 'A'],
- abbreviated: ['BC', 'AD'],
- wide: ['Before Christ', 'Anno Domini']
- };
- var quarterValues = {
- narrow: ['1', '2', '3', '4'],
- abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
- wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter'] // Note: in English, the names of days of the week and months are capitalized.
- // If you are making a new locale based on this one, check if the same is true for the language you're working on.
- // Generally, formatted dates should look like they are in the middle of a sentence,
- // e.g. in Spanish language the weekdays and months should be in the lowercase.
-
- };
- var monthValues = {
- narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
- abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
- };
- var dayValues = {
- narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
- short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
- abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
- wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
- };
- var dayPeriodValues = {
- narrow: {
- am: 'a',
- pm: 'p',
- midnight: 'mi',
- noon: 'n',
- morning: 'morning',
- afternoon: 'afternoon',
- evening: 'evening',
- night: 'night'
- },
- abbreviated: {
- am: 'AM',
- pm: 'PM',
- midnight: 'midnight',
- noon: 'noon',
- morning: 'morning',
- afternoon: 'afternoon',
- evening: 'evening',
- night: 'night'
- },
- wide: {
- am: 'a.m.',
- pm: 'p.m.',
- midnight: 'midnight',
- noon: 'noon',
- morning: 'morning',
- afternoon: 'afternoon',
- evening: 'evening',
- night: 'night'
- }
- };
- var formattingDayPeriodValues = {
- narrow: {
- am: 'a',
- pm: 'p',
- midnight: 'mi',
- noon: 'n',
- morning: 'in the morning',
- afternoon: 'in the afternoon',
- evening: 'in the evening',
- night: 'at night'
- },
- abbreviated: {
- am: 'AM',
- pm: 'PM',
- midnight: 'midnight',
- noon: 'noon',
- morning: 'in the morning',
- afternoon: 'in the afternoon',
- evening: 'in the evening',
- night: 'at night'
- },
- wide: {
- am: 'a.m.',
- pm: 'p.m.',
- midnight: 'midnight',
- noon: 'noon',
- morning: 'in the morning',
- afternoon: 'in the afternoon',
- evening: 'in the evening',
- night: 'at night'
- }
- };
-
- function ordinalNumber(dirtyNumber, _dirtyOptions) {
- var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,
- // if they are different for different grammatical genders,
- // use `options.unit`:
- //
- // var options = dirtyOptions || {}
- // var unit = String(options.unit)
- //
- // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
- // 'day', 'hour', 'minute', 'second'
-
- var rem100 = number % 100;
-
- if (rem100 > 20 || rem100 < 10) {
- switch (rem100 % 10) {
- case 1:
- return number + 'st';
-
- case 2:
- return number + 'nd';
-
- case 3:
- return number + 'rd';
- }
- }
-
- return number + 'th';
- }
-
- var localize = {
- ordinalNumber: ordinalNumber,
- era: buildLocalizeFn({
- values: eraValues,
- defaultWidth: 'wide'
- }),
- quarter: buildLocalizeFn({
- values: quarterValues,
- defaultWidth: 'wide',
- argumentCallback: function argumentCallback(quarter) {
- return Number(quarter) - 1;
- }
- }),
- month: buildLocalizeFn({
- values: monthValues,
- defaultWidth: 'wide'
- }),
- day: buildLocalizeFn({
- values: dayValues,
- defaultWidth: 'wide'
- }),
- dayPeriod: buildLocalizeFn({
- values: dayPeriodValues,
- defaultWidth: 'wide',
- formattingValues: formattingDayPeriodValues,
- defaultFormattingWidth: 'wide'
- })
- };
-
- function buildMatchPatternFn(args) {
- return function (dirtyString, dirtyOptions) {
- var string = String(dirtyString);
- var options = dirtyOptions || {};
- var matchResult = string.match(args.matchPattern);
-
- if (!matchResult) {
- return null;
- }
-
- var matchedString = matchResult[0];
- var parseResult = string.match(args.parsePattern);
-
- if (!parseResult) {
- return null;
- }
-
- var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
- value = options.valueCallback ? options.valueCallback(value) : value;
- return {
- value: value,
- rest: string.slice(matchedString.length)
- };
- };
- }
-
- function buildMatchFn(args) {
- return function (dirtyString, dirtyOptions) {
- var string = String(dirtyString);
- var options = dirtyOptions || {};
- var width = options.width;
- var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
- var matchResult = string.match(matchPattern);
-
- if (!matchResult) {
- return null;
- }
-
- var matchedString = matchResult[0];
- var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
- var value;
-
- if (Object.prototype.toString.call(parsePatterns) === '[object Array]') {
- value = findIndex(parsePatterns, function (pattern) {
- return pattern.test(matchedString);
- });
- } else {
- value = findKey(parsePatterns, function (pattern) {
- return pattern.test(matchedString);
- });
- }
-
- value = args.valueCallback ? args.valueCallback(value) : value;
- value = options.valueCallback ? options.valueCallback(value) : value;
- return {
- value: value,
- rest: string.slice(matchedString.length)
- };
- };
- }
-
- function findKey(object, predicate) {
- for (var key in object) {
- if (object.hasOwnProperty(key) && predicate(object[key])) {
- return key;
- }
- }
- }
-
- function findIndex(array, predicate) {
- for (var key = 0; key < array.length; key++) {
- if (predicate(array[key])) {
- return key;
- }
- }
- }
-
- var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
- var parseOrdinalNumberPattern = /\d+/i;
- var matchEraPatterns = {
- narrow: /^(b|a)/i,
- abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
- wide: /^(before christ|before common era|anno domini|common era)/i
- };
- var parseEraPatterns = {
- any: [/^b/i, /^(a|c)/i]
- };
- var matchQuarterPatterns = {
- narrow: /^[1234]/i,
- abbreviated: /^q[1234]/i,
- wide: /^[1234](th|st|nd|rd)? quarter/i
- };
- var parseQuarterPatterns = {
- any: [/1/i, /2/i, /3/i, /4/i]
- };
- var matchMonthPatterns = {
- narrow: /^[jfmasond]/i,
- abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
- wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
- };
- var parseMonthPatterns = {
- narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],
- any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]
- };
- var matchDayPatterns = {
- narrow: /^[smtwf]/i,
- short: /^(su|mo|tu|we|th|fr|sa)/i,
- abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
- wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
- };
- var parseDayPatterns = {
- narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
- any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
- };
- var matchDayPeriodPatterns = {
- narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
- any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
- };
- var parseDayPeriodPatterns = {
- any: {
- am: /^a/i,
- pm: /^p/i,
- midnight: /^mi/i,
- noon: /^no/i,
- morning: /morning/i,
- afternoon: /afternoon/i,
- evening: /evening/i,
- night: /night/i
- }
- };
- var match = {
- ordinalNumber: buildMatchPatternFn({
- matchPattern: matchOrdinalNumberPattern,
- parsePattern: parseOrdinalNumberPattern,
- valueCallback: function valueCallback(value) {
- return parseInt(value, 10);
- }
- }),
- era: buildMatchFn({
- matchPatterns: matchEraPatterns,
- defaultMatchWidth: 'wide',
- parsePatterns: parseEraPatterns,
- defaultParseWidth: 'any'
- }),
- quarter: buildMatchFn({
- matchPatterns: matchQuarterPatterns,
- defaultMatchWidth: 'wide',
- parsePatterns: parseQuarterPatterns,
- defaultParseWidth: 'any',
- valueCallback: function valueCallback(index) {
- return index + 1;
- }
- }),
- month: buildMatchFn({
- matchPatterns: matchMonthPatterns,
- defaultMatchWidth: 'wide',
- parsePatterns: parseMonthPatterns,
- defaultParseWidth: 'any'
- }),
- day: buildMatchFn({
- matchPatterns: matchDayPatterns,
- defaultMatchWidth: 'wide',
- parsePatterns: parseDayPatterns,
- defaultParseWidth: 'any'
- }),
- dayPeriod: buildMatchFn({
- matchPatterns: matchDayPeriodPatterns,
- defaultMatchWidth: 'any',
- parsePatterns: parseDayPeriodPatterns,
- defaultParseWidth: 'any'
- })
- };
-
/**
- * @type {Locale}
- * @category Locales
- * @summary English locale (United States).
- * @language English
- * @iso-639-2 eng
- * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
- * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
- */
-
- var locale = {
- code: 'en-US',
- formatDistance: formatDistance,
- formatLong: formatLong,
- formatRelative: formatRelative,
- localize: localize,
- match: match,
- options: {
- weekStartsOn: 0
- /* Sunday */
- ,
- firstWeekContainsDate: 1
- }
- };
-
- /**
* @name subMilliseconds
* @category Millisecond Helpers
* @summary Subtract the specified number of milliseconds from the given date.
*
* @description
* Subtract the specified number of milliseconds from the given date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the milliseconds subtracted
* @throws {TypeError} 2 arguments required
*
@@ -19363,107 +18633,11 @@
requiredArgs(2, arguments);
var amount = toInteger(dirtyAmount);
return addMilliseconds(dirtyDate, -amount);
}
- function addLeadingZeros(number, targetLength) {
- var sign = number < 0 ? '-' : '';
- var output = Math.abs(number).toString();
-
- while (output.length < targetLength) {
- output = '0' + output;
- }
-
- return sign + output;
- }
-
- /*
- * | | Unit | | Unit |
- * |-----|--------------------------------|-----|--------------------------------|
- * | a | AM, PM | A* | |
- * | d | Day of month | D | |
- * | h | Hour [1-12] | H | Hour [0-23] |
- * | m | Minute | M | Month |
- * | s | Second | S | Fraction of second |
- * | y | Year (abs) | Y | |
- *
- * Letters marked by * are not implemented but reserved by Unicode standard.
- */
-
- var formatters$1 = {
- // Year
- y: function y(date, token) {
- // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens
- // | Year | y | yy | yyy | yyyy | yyyyy |
- // |----------|-------|----|-------|-------|-------|
- // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
- // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
- // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
- // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
- // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
- var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)
-
- var year = signedYear > 0 ? signedYear : 1 - signedYear;
- return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);
- },
- // Month
- M: function M(date, token) {
- var month = date.getUTCMonth();
- return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);
- },
- // Day of the month
- d: function d(date, token) {
- return addLeadingZeros(date.getUTCDate(), token.length);
- },
- // AM or PM
- a: function a(date, token) {
- var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';
-
- switch (token) {
- case 'a':
- case 'aa':
- return dayPeriodEnumValue.toUpperCase();
-
- case 'aaa':
- return dayPeriodEnumValue;
-
- case 'aaaaa':
- return dayPeriodEnumValue[0];
-
- case 'aaaa':
- default:
- return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';
- }
- },
- // Hour [1-12]
- h: function h(date, token) {
- return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);
- },
- // Hour [0-23]
- H: function H(date, token) {
- return addLeadingZeros(date.getUTCHours(), token.length);
- },
- // Minute
- m: function m(date, token) {
- return addLeadingZeros(date.getUTCMinutes(), token.length);
- },
- // Second
- s: function s(date, token) {
- return addLeadingZeros(date.getUTCSeconds(), token.length);
- },
- // Fraction of second
- S: function S(date, token) {
- var numberOfDigits = token.length;
- var milliseconds = date.getUTCMilliseconds();
- var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));
- return addLeadingZeros(fractionalSeconds, token.length);
- }
- };
-
- var MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
+ var MILLISECONDS_IN_DAY = 86400000;
function getUTCDayOfYear(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
var timestamp = date.getTime();
date.setUTCMonth(0, 1);
@@ -19471,12 +18645,10 @@
var startOfYearTimestamp = date.getTime();
var difference = timestamp - startOfYearTimestamp;
return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
function startOfUTCISOWeek(dirtyDate) {
requiredArgs(1, arguments);
var weekStartsOn = 1;
var date = toDate(dirtyDate);
var day = date.getUTCDay();
@@ -19484,12 +18656,10 @@
date.setUTCDate(date.getUTCDate() - diff);
date.setUTCHours(0, 0, 0, 0);
return date;
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
function getUTCISOWeekYear(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
var year = date.getUTCFullYear();
var fourthOfJanuaryOfNextYear = new Date(0);
@@ -19498,192 +18668,258 @@
var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);
var fourthOfJanuaryOfThisYear = new Date(0);
fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);
fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);
var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);
-
if (date.getTime() >= startOfNextYear.getTime()) {
return year + 1;
} else if (date.getTime() >= startOfThisYear.getTime()) {
return year;
} else {
return year - 1;
}
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
function startOfUTCISOWeekYear(dirtyDate) {
requiredArgs(1, arguments);
var year = getUTCISOWeekYear(dirtyDate);
var fourthOfJanuary = new Date(0);
fourthOfJanuary.setUTCFullYear(year, 0, 4);
fourthOfJanuary.setUTCHours(0, 0, 0, 0);
var date = startOfUTCISOWeek(fourthOfJanuary);
return date;
}
- var MILLISECONDS_IN_WEEK$1 = 604800000; // This function will be a part of public API when UTC function will be implemented.
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
+ var MILLISECONDS_IN_WEEK$1 = 604800000;
function getUTCISOWeek(dirtyDate) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer
// because the number of milliseconds in a week is not constant
// (e.g. it's different in the week of the daylight saving time clock shift)
return Math.round(diff / MILLISECONDS_IN_WEEK$1) + 1;
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
- function startOfUTCWeek(dirtyDate, dirtyOptions) {
+ function startOfUTCWeek(dirtyDate, options) {
+ var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
requiredArgs(1, arguments);
- var options = dirtyOptions || {};
- var locale = options.locale;
- var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;
- var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);
- var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+ var defaultOptions = getDefaultOptions();
+ var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
-
var date = toDate(dirtyDate);
var day = date.getUTCDay();
var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
date.setUTCDate(date.getUTCDate() - diff);
date.setUTCHours(0, 0, 0, 0);
return date;
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
- function getUTCWeekYear(dirtyDate, dirtyOptions) {
+ function getUTCWeekYear(dirtyDate, options) {
+ var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
requiredArgs(1, arguments);
- var date = toDate(dirtyDate, dirtyOptions);
+ var date = toDate(dirtyDate);
var year = date.getUTCFullYear();
- var options = dirtyOptions || {};
- var locale = options.locale;
- var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;
- var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);
- var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
+ var defaultOptions = getDefaultOptions();
+ var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');
}
-
var firstWeekOfNextYear = new Date(0);
firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);
firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);
- var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);
+ var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);
var firstWeekOfThisYear = new Date(0);
firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);
firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);
- var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);
-
+ var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);
if (date.getTime() >= startOfNextYear.getTime()) {
return year + 1;
} else if (date.getTime() >= startOfThisYear.getTime()) {
return year;
} else {
return year - 1;
}
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
- function startOfUTCWeekYear(dirtyDate, dirtyOptions) {
+ function startOfUTCWeekYear(dirtyDate, options) {
+ var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
requiredArgs(1, arguments);
- var options = dirtyOptions || {};
- var locale = options.locale;
- var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;
- var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);
- var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);
- var year = getUTCWeekYear(dirtyDate, dirtyOptions);
+ var defaultOptions = getDefaultOptions();
+ var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);
+ var year = getUTCWeekYear(dirtyDate, options);
var firstWeek = new Date(0);
firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);
firstWeek.setUTCHours(0, 0, 0, 0);
- var date = startOfUTCWeek(firstWeek, dirtyOptions);
+ var date = startOfUTCWeek(firstWeek, options);
return date;
}
- var MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
+ var MILLISECONDS_IN_WEEK = 604800000;
function getUTCWeek(dirtyDate, options) {
requiredArgs(1, arguments);
var date = toDate(dirtyDate);
var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer
// because the number of milliseconds in a week is not constant
// (e.g. it's different in the week of the daylight saving time clock shift)
return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;
}
+ function addLeadingZeros(number, targetLength) {
+ var sign = number < 0 ? '-' : '';
+ var output = Math.abs(number).toString();
+ while (output.length < targetLength) {
+ output = '0' + output;
+ }
+ return sign + output;
+ }
+
+ /*
+ * | | Unit | | Unit |
+ * |-----|--------------------------------|-----|--------------------------------|
+ * | a | AM, PM | A* | |
+ * | d | Day of month | D | |
+ * | h | Hour [1-12] | H | Hour [0-23] |
+ * | m | Minute | M | Month |
+ * | s | Second | S | Fraction of second |
+ * | y | Year (abs) | Y | |
+ *
+ * Letters marked by * are not implemented but reserved by Unicode standard.
+ */
+
+ var formatters$2 = {
+ // Year
+ y: function y(date, token) {
+ // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens
+ // | Year | y | yy | yyy | yyyy | yyyyy |
+ // |----------|-------|----|-------|-------|-------|
+ // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
+ // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
+ // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
+ // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
+ // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
+ var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)
+
+ var year = signedYear > 0 ? signedYear : 1 - signedYear;
+ return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);
+ },
+ // Month
+ M: function M(date, token) {
+ var month = date.getUTCMonth();
+ return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);
+ },
+ // Day of the month
+ d: function d(date, token) {
+ return addLeadingZeros(date.getUTCDate(), token.length);
+ },
+ // AM or PM
+ a: function a(date, token) {
+ var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';
+ switch (token) {
+ case 'a':
+ case 'aa':
+ return dayPeriodEnumValue.toUpperCase();
+ case 'aaa':
+ return dayPeriodEnumValue;
+ case 'aaaaa':
+ return dayPeriodEnumValue[0];
+ case 'aaaa':
+ default:
+ return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';
+ }
+ },
+ // Hour [1-12]
+ h: function h(date, token) {
+ return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);
+ },
+ // Hour [0-23]
+ H: function H(date, token) {
+ return addLeadingZeros(date.getUTCHours(), token.length);
+ },
+ // Minute
+ m: function m(date, token) {
+ return addLeadingZeros(date.getUTCMinutes(), token.length);
+ },
+ // Second
+ s: function s(date, token) {
+ return addLeadingZeros(date.getUTCSeconds(), token.length);
+ },
+ // Fraction of second
+ S: function S(date, token) {
+ var numberOfDigits = token.length;
+ var milliseconds = date.getUTCMilliseconds();
+ var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));
+ return addLeadingZeros(fractionalSeconds, token.length);
+ }
+ };
+ var formatters$3 = formatters$2;
+
var dayPeriodEnum = {
am: 'am',
pm: 'pm',
midnight: 'midnight',
noon: 'noon',
morning: 'morning',
afternoon: 'afternoon',
evening: 'evening',
night: 'night'
- /*
- * | | Unit | | Unit |
- * |-----|--------------------------------|-----|--------------------------------|
- * | a | AM, PM | A* | Milliseconds in day |
- * | b | AM, PM, noon, midnight | B | Flexible day period |
- * | c | Stand-alone local day of week | C* | Localized hour w/ day period |
- * | d | Day of month | D | Day of year |
- * | e | Local day of week | E | Day of week |
- * | f | | F* | Day of week in month |
- * | g* | Modified Julian day | G | Era |
- * | h | Hour [1-12] | H | Hour [0-23] |
- * | i! | ISO day of week | I! | ISO week of year |
- * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
- * | k | Hour [1-24] | K | Hour [0-11] |
- * | l* | (deprecated) | L | Stand-alone month |
- * | m | Minute | M | Month |
- * | n | | N | |
- * | o! | Ordinal number modifier | O | Timezone (GMT) |
- * | p! | Long localized time | P! | Long localized date |
- * | q | Stand-alone quarter | Q | Quarter |
- * | r* | Related Gregorian year | R! | ISO week-numbering year |
- * | s | Second | S | Fraction of second |
- * | t! | Seconds timestamp | T! | Milliseconds timestamp |
- * | u | Extended year | U* | Cyclic year |
- * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
- * | w | Local week of year | W* | Week of month |
- * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
- * | y | Year (abs) | Y | Local week-numbering year |
- * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
- *
- * Letters marked by * are not implemented but reserved by Unicode standard.
- *
- * Letters marked by ! are non-standard, but implemented by date-fns:
- * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)
- * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
- * i.e. 7 for Sunday, 1 for Monday, etc.
- * - `I` is ISO week of year, as opposed to `w` which is local week of year.
- * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
- * `R` is supposed to be used in conjunction with `I` and `i`
- * for universal ISO week-numbering date, whereas
- * `Y` is supposed to be used in conjunction with `w` and `e`
- * for week-numbering date specific to the locale.
- * - `P` is long localized date format
- * - `p` is long localized time format
- */
-
};
+
+ /*
+ * | | Unit | | Unit |
+ * |-----|--------------------------------|-----|--------------------------------|
+ * | a | AM, PM | A* | Milliseconds in day |
+ * | b | AM, PM, noon, midnight | B | Flexible day period |
+ * | c | Stand-alone local day of week | C* | Localized hour w/ day period |
+ * | d | Day of month | D | Day of year |
+ * | e | Local day of week | E | Day of week |
+ * | f | | F* | Day of week in month |
+ * | g* | Modified Julian day | G | Era |
+ * | h | Hour [1-12] | H | Hour [0-23] |
+ * | i! | ISO day of week | I! | ISO week of year |
+ * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
+ * | k | Hour [1-24] | K | Hour [0-11] |
+ * | l* | (deprecated) | L | Stand-alone month |
+ * | m | Minute | M | Month |
+ * | n | | N | |
+ * | o! | Ordinal number modifier | O | Timezone (GMT) |
+ * | p! | Long localized time | P! | Long localized date |
+ * | q | Stand-alone quarter | Q | Quarter |
+ * | r* | Related Gregorian year | R! | ISO week-numbering year |
+ * | s | Second | S | Fraction of second |
+ * | t! | Seconds timestamp | T! | Milliseconds timestamp |
+ * | u | Extended year | U* | Cyclic year |
+ * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
+ * | w | Local week of year | W* | Week of month |
+ * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
+ * | y | Year (abs) | Y | Local week-numbering year |
+ * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
+ *
+ * Letters marked by * are not implemented but reserved by Unicode standard.
+ *
+ * Letters marked by ! are non-standard, but implemented by date-fns:
+ * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)
+ * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
+ * i.e. 7 for Sunday, 1 for Monday, etc.
+ * - `I` is ISO week of year, as opposed to `w` which is local week of year.
+ * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
+ * `R` is supposed to be used in conjunction with `I` and `i`
+ * for universal ISO week-numbering date, whereas
+ * `Y` is supposed to be used in conjunction with `w` and `e`
+ * for week-numbering date specific to the locale.
+ * - `P` is long localized date format
+ * - `p` is long localized time format
+ */
var formatters = {
// Era
G: function G(date, token, localize) {
var era = date.getUTCFullYear() > 0 ? 1 : 0;
-
switch (token) {
// AD, BC
case 'G':
case 'GG':
case 'GGG':
@@ -19714,12 +18950,11 @@
var year = signedYear > 0 ? signedYear : 1 - signedYear;
return localize.ordinalNumber(year, {
unit: 'year'
});
}
-
- return formatters$1.y(date, token);
+ return formatters$3.y(date, token);
},
// Local week-numbering year
Y: function Y(date, token, localize, options) {
var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)
@@ -19728,18 +18963,16 @@
if (token === 'YY') {
var twoDigitYear = weekYear % 100;
return addLeadingZeros(twoDigitYear, 2);
} // Ordinal number
-
if (token === 'Yo') {
return localize.ordinalNumber(weekYear, {
unit: 'year'
});
} // Padding
-
return addLeadingZeros(weekYear, token.length);
},
// ISO week-numbering year
R: function R(date, token) {
var isoWeekYear = getUTCISOWeekYear(date); // Padding
@@ -19760,11 +18993,10 @@
return addLeadingZeros(year, token.length);
},
// Quarter
Q: function Q(date, token, localize) {
var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
-
switch (token) {
// 1, 2, 3, 4
case 'Q':
return String(quarter);
// 01, 02, 03, 04
@@ -19802,11 +19034,10 @@
}
},
// Stand-alone quarter
q: function q(date, token, localize) {
var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
-
switch (token) {
// 1, 2, 3, 4
case 'q':
return String(quarter);
// 01, 02, 03, 04
@@ -19844,15 +19075,14 @@
}
},
// Month
M: function M(date, token, localize) {
var month = date.getUTCMonth();
-
switch (token) {
case 'M':
case 'MM':
- return formatters$1.M(date, token);
+ return formatters$3.M(date, token);
// 1st, 2nd, ..., 12th
case 'Mo':
return localize.ordinalNumber(month + 1, {
unit: 'month'
@@ -19882,11 +19112,10 @@
}
},
// Stand-alone month
L: function L(date, token, localize) {
var month = date.getUTCMonth();
-
switch (token) {
// 1, 2, ..., 12
case 'L':
return String(month + 1);
// 01, 02, ..., 12
@@ -19924,57 +19153,49 @@
}
},
// Local week of year
w: function w(date, token, localize, options) {
var week = getUTCWeek(date, options);
-
if (token === 'wo') {
return localize.ordinalNumber(week, {
unit: 'week'
});
}
-
return addLeadingZeros(week, token.length);
},
// ISO week of year
I: function I(date, token, localize) {
var isoWeek = getUTCISOWeek(date);
-
if (token === 'Io') {
return localize.ordinalNumber(isoWeek, {
unit: 'week'
});
}
-
return addLeadingZeros(isoWeek, token.length);
},
// Day of the month
d: function d(date, token, localize) {
if (token === 'do') {
return localize.ordinalNumber(date.getUTCDate(), {
unit: 'date'
});
}
-
- return formatters$1.d(date, token);
+ return formatters$3.d(date, token);
},
// Day of year
D: function D(date, token, localize) {
var dayOfYear = getUTCDayOfYear(date);
-
if (token === 'Do') {
return localize.ordinalNumber(dayOfYear, {
unit: 'dayOfYear'
});
}
-
return addLeadingZeros(dayOfYear, token.length);
},
// Day of week
E: function E(date, token, localize) {
var dayOfWeek = date.getUTCDay();
-
switch (token) {
// Tue
case 'E':
case 'EE':
case 'EEE':
@@ -20008,11 +19229,10 @@
},
// Local day of week
e: function e(date, token, localize, options) {
var dayOfWeek = date.getUTCDay();
var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
-
switch (token) {
// Numerical value (Nth day of week with current locale or weekStartsOn)
case 'e':
return String(localDayOfWeek);
// Padded numerical value
@@ -20023,11 +19243,10 @@
case 'eo':
return localize.ordinalNumber(localDayOfWeek, {
unit: 'day'
});
-
case 'eee':
return localize.day(dayOfWeek, {
width: 'abbreviated',
context: 'formatting'
});
@@ -20057,11 +19276,10 @@
},
// Stand-alone local day of week
c: function c(date, token, localize, options) {
var dayOfWeek = date.getUTCDay();
var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
-
switch (token) {
// Numerical value (same as in `e`)
case 'c':
return String(localDayOfWeek);
// Padded numerical value
@@ -20072,11 +19290,10 @@
case 'co':
return localize.ordinalNumber(localDayOfWeek, {
unit: 'day'
});
-
case 'ccc':
return localize.day(dayOfWeek, {
width: 'abbreviated',
context: 'standalone'
});
@@ -20106,11 +19323,10 @@
},
// ISO day of week
i: function i(date, token, localize) {
var dayOfWeek = date.getUTCDay();
var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
-
switch (token) {
// 2
case 'i':
return String(isoDayOfWeek);
// 02
@@ -20156,31 +19372,27 @@
},
// AM or PM
a: function a(date, token, localize) {
var hours = date.getUTCHours();
var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';
-
switch (token) {
case 'a':
case 'aa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
});
-
case 'aaa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
}).toLowerCase();
-
case 'aaaaa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'narrow',
context: 'formatting'
});
-
case 'aaaa':
default:
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'wide',
context: 'formatting'
@@ -20189,39 +19401,34 @@
},
// AM, PM, midnight, noon
b: function b(date, token, localize) {
var hours = date.getUTCHours();
var dayPeriodEnumValue;
-
if (hours === 12) {
dayPeriodEnumValue = dayPeriodEnum.noon;
} else if (hours === 0) {
dayPeriodEnumValue = dayPeriodEnum.midnight;
} else {
dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';
}
-
switch (token) {
case 'b':
case 'bb':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
});
-
case 'bbb':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
}).toLowerCase();
-
case 'bbbbb':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'narrow',
context: 'formatting'
});
-
case 'bbbb':
default:
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'wide',
context: 'formatting'
@@ -20230,36 +19437,32 @@
},
// in the morning, in the afternoon, in the evening, at night
B: function B(date, token, localize) {
var hours = date.getUTCHours();
var dayPeriodEnumValue;
-
if (hours >= 17) {
dayPeriodEnumValue = dayPeriodEnum.evening;
} else if (hours >= 12) {
dayPeriodEnumValue = dayPeriodEnum.afternoon;
} else if (hours >= 4) {
dayPeriodEnumValue = dayPeriodEnum.morning;
} else {
dayPeriodEnumValue = dayPeriodEnum.night;
}
-
switch (token) {
case 'B':
case 'BB':
case 'BBB':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
});
-
case 'BBBBB':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'narrow',
context: 'formatting'
});
-
case 'BBBB':
default:
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'wide',
context: 'formatting'
@@ -20273,81 +19476,71 @@
if (hours === 0) hours = 12;
return localize.ordinalNumber(hours, {
unit: 'hour'
});
}
-
- return formatters$1.h(date, token);
+ return formatters$3.h(date, token);
},
// Hour [0-23]
H: function H(date, token, localize) {
if (token === 'Ho') {
return localize.ordinalNumber(date.getUTCHours(), {
unit: 'hour'
});
}
-
- return formatters$1.H(date, token);
+ return formatters$3.H(date, token);
},
// Hour [0-11]
K: function K(date, token, localize) {
var hours = date.getUTCHours() % 12;
-
if (token === 'Ko') {
return localize.ordinalNumber(hours, {
unit: 'hour'
});
}
-
return addLeadingZeros(hours, token.length);
},
// Hour [1-24]
k: function k(date, token, localize) {
var hours = date.getUTCHours();
if (hours === 0) hours = 24;
-
if (token === 'ko') {
return localize.ordinalNumber(hours, {
unit: 'hour'
});
}
-
return addLeadingZeros(hours, token.length);
},
// Minute
m: function m(date, token, localize) {
if (token === 'mo') {
return localize.ordinalNumber(date.getUTCMinutes(), {
unit: 'minute'
});
}
-
- return formatters$1.m(date, token);
+ return formatters$3.m(date, token);
},
// Second
s: function s(date, token, localize) {
if (token === 'so') {
return localize.ordinalNumber(date.getUTCSeconds(), {
unit: 'second'
});
}
-
- return formatters$1.s(date, token);
+ return formatters$3.s(date, token);
},
// Fraction of second
S: function S(date, token) {
- return formatters$1.S(date, token);
+ return formatters$3.S(date, token);
},
// Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
X: function X(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
-
if (timezoneOffset === 0) {
return 'Z';
}
-
switch (token) {
// Hours and optional minutes
case 'X':
return formatTimezoneWithOptionalMinutes(timezoneOffset);
// Hours, minutes and optional seconds without `:` delimiter
@@ -20371,11 +19564,10 @@
},
// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
x: function x(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
-
switch (token) {
// Hours and optional minutes
case 'x':
return formatTimezoneWithOptionalMinutes(timezoneOffset);
// Hours, minutes and optional seconds without `:` delimiter
@@ -20399,11 +19591,10 @@
},
// Timezone (GMT)
O: function O(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
-
switch (token) {
// Short
case 'O':
case 'OO':
case 'OOO':
@@ -20417,11 +19608,10 @@
},
// Timezone (specific non-location)
z: function z(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
-
switch (token) {
// Short
case 'z':
case 'zz':
case 'zzz':
@@ -20444,138 +19634,118 @@
var originalDate = options._originalDate || date;
var timestamp = originalDate.getTime();
return addLeadingZeros(timestamp, token.length);
}
};
-
function formatTimezoneShort(offset, dirtyDelimiter) {
var sign = offset > 0 ? '-' : '+';
var absOffset = Math.abs(offset);
var hours = Math.floor(absOffset / 60);
var minutes = absOffset % 60;
-
if (minutes === 0) {
return sign + String(hours);
}
-
var delimiter = dirtyDelimiter || '';
return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);
}
-
function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {
if (offset % 60 === 0) {
var sign = offset > 0 ? '-' : '+';
return sign + addLeadingZeros(Math.abs(offset) / 60, 2);
}
-
return formatTimezone(offset, dirtyDelimiter);
}
-
function formatTimezone(offset, dirtyDelimiter) {
var delimiter = dirtyDelimiter || '';
var sign = offset > 0 ? '-' : '+';
var absOffset = Math.abs(offset);
var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);
var minutes = addLeadingZeros(absOffset % 60, 2);
return sign + hours + delimiter + minutes;
}
+ var formatters$1 = formatters;
- function dateLongFormatter(pattern, formatLong) {
+ var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {
switch (pattern) {
case 'P':
return formatLong.date({
width: 'short'
});
-
case 'PP':
return formatLong.date({
width: 'medium'
});
-
case 'PPP':
return formatLong.date({
width: 'long'
});
-
case 'PPPP':
default:
return formatLong.date({
width: 'full'
});
}
- }
-
- function timeLongFormatter(pattern, formatLong) {
+ };
+ var timeLongFormatter = function timeLongFormatter(pattern, formatLong) {
switch (pattern) {
case 'p':
return formatLong.time({
width: 'short'
});
-
case 'pp':
return formatLong.time({
width: 'medium'
});
-
case 'ppp':
return formatLong.time({
width: 'long'
});
-
case 'pppp':
default:
return formatLong.time({
width: 'full'
});
}
- }
-
- function dateTimeLongFormatter(pattern, formatLong) {
- var matchResult = pattern.match(/(P+)(p+)?/);
+ };
+ var dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {
+ var matchResult = pattern.match(/(P+)(p+)?/) || [];
var datePattern = matchResult[1];
var timePattern = matchResult[2];
-
if (!timePattern) {
return dateLongFormatter(pattern, formatLong);
}
-
var dateTimeFormat;
-
switch (datePattern) {
case 'P':
dateTimeFormat = formatLong.dateTime({
width: 'short'
});
break;
-
case 'PP':
dateTimeFormat = formatLong.dateTime({
width: 'medium'
});
break;
-
case 'PPP':
dateTimeFormat = formatLong.dateTime({
width: 'long'
});
break;
-
case 'PPPP':
default:
dateTimeFormat = formatLong.dateTime({
width: 'full'
});
break;
}
-
return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));
- }
-
+ };
var longFormatters = {
p: timeLongFormatter,
P: dateTimeLongFormatter
};
+ var longFormatters$1 = longFormatters;
var protectedDayOfYearTokens = ['D', 'DD'];
var protectedWeekYearTokens = ['YY', 'YYYY'];
function isProtectedDayOfYearToken(token) {
return protectedDayOfYearTokens.indexOf(token) !== -1;
@@ -20583,20 +19753,503 @@
function isProtectedWeekYearToken(token) {
return protectedWeekYearTokens.indexOf(token) !== -1;
}
function throwProtectedError(token, format, input) {
if (token === 'YYYY') {
- throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://git.io/fxCyr"));
+ throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
} else if (token === 'YY') {
- throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://git.io/fxCyr"));
+ throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
} else if (token === 'D') {
- throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://git.io/fxCyr"));
+ throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
} else if (token === 'DD') {
- throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://git.io/fxCyr"));
+ throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
}
}
+ var formatDistanceLocale = {
+ lessThanXSeconds: {
+ one: 'less than a second',
+ other: 'less than {{count}} seconds'
+ },
+ xSeconds: {
+ one: '1 second',
+ other: '{{count}} seconds'
+ },
+ halfAMinute: 'half a minute',
+ lessThanXMinutes: {
+ one: 'less than a minute',
+ other: 'less than {{count}} minutes'
+ },
+ xMinutes: {
+ one: '1 minute',
+ other: '{{count}} minutes'
+ },
+ aboutXHours: {
+ one: 'about 1 hour',
+ other: 'about {{count}} hours'
+ },
+ xHours: {
+ one: '1 hour',
+ other: '{{count}} hours'
+ },
+ xDays: {
+ one: '1 day',
+ other: '{{count}} days'
+ },
+ aboutXWeeks: {
+ one: 'about 1 week',
+ other: 'about {{count}} weeks'
+ },
+ xWeeks: {
+ one: '1 week',
+ other: '{{count}} weeks'
+ },
+ aboutXMonths: {
+ one: 'about 1 month',
+ other: 'about {{count}} months'
+ },
+ xMonths: {
+ one: '1 month',
+ other: '{{count}} months'
+ },
+ aboutXYears: {
+ one: 'about 1 year',
+ other: 'about {{count}} years'
+ },
+ xYears: {
+ one: '1 year',
+ other: '{{count}} years'
+ },
+ overXYears: {
+ one: 'over 1 year',
+ other: 'over {{count}} years'
+ },
+ almostXYears: {
+ one: 'almost 1 year',
+ other: 'almost {{count}} years'
+ }
+ };
+ var formatDistance = function formatDistance(token, count, options) {
+ var result;
+ var tokenValue = formatDistanceLocale[token];
+ if (typeof tokenValue === 'string') {
+ result = tokenValue;
+ } else if (count === 1) {
+ result = tokenValue.one;
+ } else {
+ result = tokenValue.other.replace('{{count}}', count.toString());
+ }
+ if (options !== null && options !== void 0 && options.addSuffix) {
+ if (options.comparison && options.comparison > 0) {
+ return 'in ' + result;
+ } else {
+ return result + ' ago';
+ }
+ }
+ return result;
+ };
+ var formatDistance$1 = formatDistance;
+
+ function buildFormatLongFn(args) {
+ return function () {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+ // TODO: Remove String()
+ var width = options.width ? String(options.width) : args.defaultWidth;
+ var format = args.formats[width] || args.formats[args.defaultWidth];
+ return format;
+ };
+ }
+
+ var dateFormats = {
+ full: 'EEEE, MMMM do, y',
+ "long": 'MMMM do, y',
+ medium: 'MMM d, y',
+ "short": 'MM/dd/yyyy'
+ };
+ var timeFormats = {
+ full: 'h:mm:ss a zzzz',
+ "long": 'h:mm:ss a z',
+ medium: 'h:mm:ss a',
+ "short": 'h:mm a'
+ };
+ var dateTimeFormats = {
+ full: "{{date}} 'at' {{time}}",
+ "long": "{{date}} 'at' {{time}}",
+ medium: '{{date}}, {{time}}',
+ "short": '{{date}}, {{time}}'
+ };
+ var formatLong = {
+ date: buildFormatLongFn({
+ formats: dateFormats,
+ defaultWidth: 'full'
+ }),
+ time: buildFormatLongFn({
+ formats: timeFormats,
+ defaultWidth: 'full'
+ }),
+ dateTime: buildFormatLongFn({
+ formats: dateTimeFormats,
+ defaultWidth: 'full'
+ })
+ };
+ var formatLong$1 = formatLong;
+
+ var formatRelativeLocale = {
+ lastWeek: "'last' eeee 'at' p",
+ yesterday: "'yesterday at' p",
+ today: "'today at' p",
+ tomorrow: "'tomorrow at' p",
+ nextWeek: "eeee 'at' p",
+ other: 'P'
+ };
+ var formatRelative = function formatRelative(token, _date, _baseDate, _options) {
+ return formatRelativeLocale[token];
+ };
+ var formatRelative$1 = formatRelative;
+
+ function buildLocalizeFn(args) {
+ return function (dirtyIndex, options) {
+ var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';
+ var valuesArray;
+ if (context === 'formatting' && args.formattingValues) {
+ var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
+ var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;
+ valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
+ } else {
+ var _defaultWidth = args.defaultWidth;
+ var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;
+ valuesArray = args.values[_width] || args.values[_defaultWidth];
+ }
+ var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!
+
+ return valuesArray[index];
+ };
+ }
+
+ var eraValues = {
+ narrow: ['B', 'A'],
+ abbreviated: ['BC', 'AD'],
+ wide: ['Before Christ', 'Anno Domini']
+ };
+ var quarterValues = {
+ narrow: ['1', '2', '3', '4'],
+ abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
+ wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']
+ }; // Note: in English, the names of days of the week and months are capitalized.
+ // If you are making a new locale based on this one, check if the same is true for the language you're working on.
+ // Generally, formatted dates should look like they are in the middle of a sentence,
+ // e.g. in Spanish language the weekdays and months should be in the lowercase.
+
+ var monthValues = {
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
+ abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
+ };
+ var dayValues = {
+ narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
+ "short": ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+ abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
+ };
+ var dayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mi',
+ noon: 'n',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'morning',
+ afternoon: 'afternoon',
+ evening: 'evening',
+ night: 'night'
+ }
+ };
+ var formattingDayPeriodValues = {
+ narrow: {
+ am: 'a',
+ pm: 'p',
+ midnight: 'mi',
+ noon: 'n',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ },
+ abbreviated: {
+ am: 'AM',
+ pm: 'PM',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ },
+ wide: {
+ am: 'a.m.',
+ pm: 'p.m.',
+ midnight: 'midnight',
+ noon: 'noon',
+ morning: 'in the morning',
+ afternoon: 'in the afternoon',
+ evening: 'in the evening',
+ night: 'at night'
+ }
+ };
+ var ordinalNumber = function ordinalNumber(dirtyNumber, _options) {
+ var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,
+ // if they are different for different grammatical genders,
+ // use `options.unit`.
+ //
+ // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
+ // 'day', 'hour', 'minute', 'second'.
+
+ var rem100 = number % 100;
+ if (rem100 > 20 || rem100 < 10) {
+ switch (rem100 % 10) {
+ case 1:
+ return number + 'st';
+ case 2:
+ return number + 'nd';
+ case 3:
+ return number + 'rd';
+ }
+ }
+ return number + 'th';
+ };
+ var localize = {
+ ordinalNumber: ordinalNumber,
+ era: buildLocalizeFn({
+ values: eraValues,
+ defaultWidth: 'wide'
+ }),
+ quarter: buildLocalizeFn({
+ values: quarterValues,
+ defaultWidth: 'wide',
+ argumentCallback: function argumentCallback(quarter) {
+ return quarter - 1;
+ }
+ }),
+ month: buildLocalizeFn({
+ values: monthValues,
+ defaultWidth: 'wide'
+ }),
+ day: buildLocalizeFn({
+ values: dayValues,
+ defaultWidth: 'wide'
+ }),
+ dayPeriod: buildLocalizeFn({
+ values: dayPeriodValues,
+ defaultWidth: 'wide',
+ formattingValues: formattingDayPeriodValues,
+ defaultFormattingWidth: 'wide'
+ })
+ };
+ var localize$1 = localize;
+
+ function buildMatchFn(args) {
+ return function (string) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var width = options.width;
+ var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
+ var matchResult = string.match(matchPattern);
+ if (!matchResult) {
+ return null;
+ }
+ var matchedString = matchResult[0];
+ var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
+ var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {
+ return pattern.test(matchedString);
+ }) : findKey(parsePatterns, function (pattern) {
+ return pattern.test(matchedString);
+ });
+ var value;
+ value = args.valueCallback ? args.valueCallback(key) : key;
+ value = options.valueCallback ? options.valueCallback(value) : value;
+ var rest = string.slice(matchedString.length);
+ return {
+ value: value,
+ rest: rest
+ };
+ };
+ }
+ function findKey(object, predicate) {
+ for (var key in object) {
+ if (object.hasOwnProperty(key) && predicate(object[key])) {
+ return key;
+ }
+ }
+ return undefined;
+ }
+ function findIndex(array, predicate) {
+ for (var key = 0; key < array.length; key++) {
+ if (predicate(array[key])) {
+ return key;
+ }
+ }
+ return undefined;
+ }
+
+ function buildMatchPatternFn(args) {
+ return function (string) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var matchResult = string.match(args.matchPattern);
+ if (!matchResult) return null;
+ var matchedString = matchResult[0];
+ var parseResult = string.match(args.parsePattern);
+ if (!parseResult) return null;
+ var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
+ value = options.valueCallback ? options.valueCallback(value) : value;
+ var rest = string.slice(matchedString.length);
+ return {
+ value: value,
+ rest: rest
+ };
+ };
+ }
+
+ var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
+ var parseOrdinalNumberPattern = /\d+/i;
+ var matchEraPatterns = {
+ narrow: /^(b|a)/i,
+ abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
+ wide: /^(before christ|before common era|anno domini|common era)/i
+ };
+ var parseEraPatterns = {
+ any: [/^b/i, /^(a|c)/i]
+ };
+ var matchQuarterPatterns = {
+ narrow: /^[1234]/i,
+ abbreviated: /^q[1234]/i,
+ wide: /^[1234](th|st|nd|rd)? quarter/i
+ };
+ var parseQuarterPatterns = {
+ any: [/1/i, /2/i, /3/i, /4/i]
+ };
+ var matchMonthPatterns = {
+ narrow: /^[jfmasond]/i,
+ abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
+ wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
+ };
+ var parseMonthPatterns = {
+ narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],
+ any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]
+ };
+ var matchDayPatterns = {
+ narrow: /^[smtwf]/i,
+ "short": /^(su|mo|tu|we|th|fr|sa)/i,
+ abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
+ wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
+ };
+ var parseDayPatterns = {
+ narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
+ any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
+ };
+ var matchDayPeriodPatterns = {
+ narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
+ any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
+ };
+ var parseDayPeriodPatterns = {
+ any: {
+ am: /^a/i,
+ pm: /^p/i,
+ midnight: /^mi/i,
+ noon: /^no/i,
+ morning: /morning/i,
+ afternoon: /afternoon/i,
+ evening: /evening/i,
+ night: /night/i
+ }
+ };
+ var match = {
+ ordinalNumber: buildMatchPatternFn({
+ matchPattern: matchOrdinalNumberPattern,
+ parsePattern: parseOrdinalNumberPattern,
+ valueCallback: function valueCallback(value) {
+ return parseInt(value, 10);
+ }
+ }),
+ era: buildMatchFn({
+ matchPatterns: matchEraPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseEraPatterns,
+ defaultParseWidth: 'any'
+ }),
+ quarter: buildMatchFn({
+ matchPatterns: matchQuarterPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseQuarterPatterns,
+ defaultParseWidth: 'any',
+ valueCallback: function valueCallback(index) {
+ return index + 1;
+ }
+ }),
+ month: buildMatchFn({
+ matchPatterns: matchMonthPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseMonthPatterns,
+ defaultParseWidth: 'any'
+ }),
+ day: buildMatchFn({
+ matchPatterns: matchDayPatterns,
+ defaultMatchWidth: 'wide',
+ parsePatterns: parseDayPatterns,
+ defaultParseWidth: 'any'
+ }),
+ dayPeriod: buildMatchFn({
+ matchPatterns: matchDayPeriodPatterns,
+ defaultMatchWidth: 'any',
+ parsePatterns: parseDayPeriodPatterns,
+ defaultParseWidth: 'any'
+ })
+ };
+ var match$1 = match;
+
+ /**
+ * @type {Locale}
+ * @category Locales
+ * @summary English locale (United States).
+ * @language English
+ * @iso-639-2 eng
+ * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
+ * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
+ */
+ var locale = {
+ code: 'en-US',
+ formatDistance: formatDistance$1,
+ formatLong: formatLong$1,
+ formatRelative: formatRelative$1,
+ localize: localize$1,
+ match: match$1,
+ options: {
+ weekStartsOn: 0
+ /* Sunday */,
+
+ firstWeekContainsDate: 1
+ }
+ };
+ var defaultLocale = locale;
+
// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token
// (one of the certain letters followed by `o`)
// - (\w)\1* matches any sequences of the same letter
// - '' matches two quote characters in a row
// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),
@@ -20620,11 +20273,11 @@
*
* @description
* Return the formatted date string in the given format. The result may vary by locale.
*
* > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.
- * > See: https://git.io/fxCyr
+ * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
*
* The characters wrapped between two single quotes characters (') are escaped.
* Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
* (see the last example)
*
@@ -20699,32 +20352,32 @@
* | | DDD | 001, 002, ..., 365, 366 | |
* | | DDDD | ... | 3 |
* | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |
* | | EEEE | Monday, Tuesday, ..., Sunday | 2 |
* | | EEEEE | M, T, W, T, F, S, S | |
- * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |
* | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |
* | | io | 1st, 2nd, ..., 7th | 7 |
* | | ii | 01, 02, ..., 07 | 7 |
* | | iii | Mon, Tue, Wed, ..., Sun | 7 |
* | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |
* | | iiiii | M, T, W, T, F, S, S | 7 |
- * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |
+ * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |
* | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |
* | | eo | 2nd, 3rd, ..., 1st | 7 |
* | | ee | 02, 03, ..., 01 | |
* | | eee | Mon, Tue, Wed, ..., Sun | |
* | | eeee | Monday, Tuesday, ..., Sunday | 2 |
* | | eeeee | M, T, W, T, F, S, S | |
- * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |
* | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |
* | | co | 2nd, 3rd, ..., 1st | 7 |
* | | cc | 02, 03, ..., 01 | |
* | | ccc | Mon, Tue, Wed, ..., Sun | |
* | | cccc | Monday, Tuesday, ..., Sunday | 2 |
* | | ccccc | M, T, W, T, F, S, S | |
- * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |
* | AM, PM | a..aa | AM, PM | |
* | | aaa | am, pm | |
* | | aaaa | a.m., p.m. | 2 |
* | | aaaaa | a, p | |
* | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |
@@ -20752,11 +20405,11 @@
* | Second | s | 0, 1, ..., 59 | |
* | | so | 0th, 1st, ..., 59th | 7 |
* | | ss | 00, 01, ..., 59 | |
* | Fraction of second | S | 0, 1, ..., 9 | |
* | | SS | 00, 01, ..., 99 | |
- * | | SSS | 000, 0001, ..., 999 | |
+ * | | SSS | 000, 001, ..., 999 | |
* | | SSSS | ... | 3 |
* | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |
* | | XX | -0800, +0530, Z | |
* | | XXX | -08:00, +05:30, Z | |
* | | XXXX | -0800, +0530, Z, +123456 | 2 |
@@ -20856,256 +20509,539 @@
* - `o`: ordinal number modifier
* - `P`: long localized date
* - `p`: long localized time
*
* 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.
- * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr
+ * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
*
- * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.
- * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr
+ * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.
+ * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
- * - The second argument is now required for the sake of explicitness.
- *
- * ```javascript
- * // Before v2.0.0
- * format(new Date(2016, 0, 1))
- *
- * // v2.0.0 onward
- * format(new Date(2016, 0, 1), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx")
- * ```
- *
- * - New format string API for `format` function
- * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).
- * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.
- *
- * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.
- *
* @param {Date|Number} date - the original date
* @param {String} format - the string of tokens
* @param {Object} [options] - an object with options.
* @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
* @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
* @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is
* @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;
- * see: https://git.io/fxCyr
+ * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
* @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;
- * see: https://git.io/fxCyr
+ * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
* @returns {String} the formatted date string
* @throws {TypeError} 2 arguments required
* @throws {RangeError} `date` must not be Invalid Date
* @throws {RangeError} `options.locale` must contain `localize` property
* @throws {RangeError} `options.locale` must contain `formatLong` property
* @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
* @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
- * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
- * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
- * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
- * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
+ * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
+ * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
+ * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
* @throws {RangeError} format string contains an unescaped latin alphabet character
*
* @example
* // Represent 11 February 2014 in middle-endian format:
- * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')
+ * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')
* //=> '02/11/2014'
*
* @example
* // Represent 2 July 2014 in Esperanto:
* import { eoLocale } from 'date-fns/locale/eo'
- * var result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", {
+ * const result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", {
* locale: eoLocale
* })
* //=> '2-a de julio 2014'
*
* @example
* // Escape string by single quote characters:
- * var result = format(new Date(2014, 6, 2, 15), "h 'o''clock'")
+ * const result = format(new Date(2014, 6, 2, 15), "h 'o''clock'")
* //=> "3 o'clock"
*/
- function format(dirtyDate, dirtyFormatStr, dirtyOptions) {
+ function format(dirtyDate, dirtyFormatStr, options) {
+ var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;
requiredArgs(2, arguments);
var formatStr = String(dirtyFormatStr);
- var options = dirtyOptions || {};
- var locale$1 = options.locale || locale;
- var localeFirstWeekContainsDate = locale$1.options && locale$1.options.firstWeekContainsDate;
- var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);
- var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
+ var defaultOptions = getDefaultOptions();
+ var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;
+ var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');
}
+ var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
- var localeWeekStartsOn = locale$1.options && locale$1.options.weekStartsOn;
- var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);
- var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
-
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
-
- if (!locale$1.localize) {
+ if (!locale.localize) {
throw new RangeError('locale must contain localize property');
}
-
- if (!locale$1.formatLong) {
+ if (!locale.formatLong) {
throw new RangeError('locale must contain formatLong property');
}
-
var originalDate = toDate(dirtyDate);
-
if (!isValid(originalDate)) {
throw new RangeError('Invalid time value');
} // Convert the date in system timezone to the same date in UTC+00:00 timezone.
// This ensures that when UTC functions will be implemented, locales will be compatible with them.
// See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376
-
var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);
var utcDate = subMilliseconds(originalDate, timezoneOffset);
var formatterOptions = {
firstWeekContainsDate: firstWeekContainsDate,
weekStartsOn: weekStartsOn,
- locale: locale$1,
+ locale: locale,
_originalDate: originalDate
};
var result = formatStr.match(longFormattingTokensRegExp$1).map(function (substring) {
var firstCharacter = substring[0];
-
if (firstCharacter === 'p' || firstCharacter === 'P') {
- var longFormatter = longFormatters[firstCharacter];
- return longFormatter(substring, locale$1.formatLong, formatterOptions);
+ var longFormatter = longFormatters$1[firstCharacter];
+ return longFormatter(substring, locale.formatLong);
}
-
return substring;
}).join('').match(formattingTokensRegExp$1).map(function (substring) {
// Replace two single quote characters with one single quote character
if (substring === "''") {
return "'";
}
-
var firstCharacter = substring[0];
-
if (firstCharacter === "'") {
return cleanEscapedString$1(substring);
}
-
- var formatter = formatters[firstCharacter];
-
+ var formatter = formatters$1[firstCharacter];
if (formatter) {
- if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {
- throwProtectedError(substring, dirtyFormatStr, dirtyDate);
+ if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {
+ throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));
}
-
- if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {
- throwProtectedError(substring, dirtyFormatStr, dirtyDate);
+ if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {
+ throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));
}
-
- return formatter(utcDate, substring, locale$1.localize, formatterOptions);
+ return formatter(utcDate, substring, locale.localize, formatterOptions);
}
-
if (firstCharacter.match(unescapedLatinCharacterRegExp$1)) {
throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');
}
-
return substring;
}).join('');
return result;
}
-
function cleanEscapedString$1(input) {
- return input.match(escapedStringRegExp$1)[1].replace(doubleQuoteRegExp$1, "'");
+ var matched = input.match(escapedStringRegExp$1);
+ if (!matched) {
+ return input;
+ }
+ return matched[1].replace(doubleQuoteRegExp$1, "'");
}
- function assign(target, dirtyObject) {
+ function assign(target, object) {
if (target == null) {
throw new TypeError('assign requires that input parameter not be null or undefined');
}
-
- dirtyObject = dirtyObject || {};
-
- for (var property in dirtyObject) {
- if (dirtyObject.hasOwnProperty(property)) {
- target[property] = dirtyObject[property];
+ for (var property in object) {
+ if (Object.prototype.hasOwnProperty.call(object, property)) {
+ target[property] = object[property];
}
}
-
return target;
}
- // See issue: https://github.com/date-fns/date-fns/issues/376
+ function _typeof$w(obj) {
+ "@babel/helpers - typeof";
- function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {
- requiredArgs(2, arguments);
- var options = dirtyOptions || {};
- var locale = options.locale;
- var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;
- var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);
- var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
-
- if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
- throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$w = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$w = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
}
-
- var date = toDate(dirtyDate);
- var day = toInteger(dirtyDay);
- var currentDay = date.getUTCDay();
- var remainder = day % 7;
- var dayIndex = (remainder + 7) % 7;
- var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
- date.setUTCDate(date.getUTCDate() + diff);
- return date;
+ return _typeof$w(obj);
}
-
- // See issue: https://github.com/date-fns/date-fns/issues/376
-
- function setUTCISODay(dirtyDate, dirtyDay) {
- requiredArgs(2, arguments);
- var day = toInteger(dirtyDay);
-
- if (day % 7 === 0) {
- day = day - 7;
+ function _inherits$v(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
}
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$v(subClass, superClass);
+ }
+ function _setPrototypeOf$v(o, p) {
+ _setPrototypeOf$v = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$v(o, p);
+ }
+ function _createSuper$v(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$v();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$v(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$v(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$v(this, result);
+ };
+ }
+ function _possibleConstructorReturn$v(self, call) {
+ if (call && (_typeof$w(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$v(self);
+ }
+ function _assertThisInitialized$v(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$v() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$v(o) {
+ _getPrototypeOf$v = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$v(o);
+ }
+ function _classCallCheck$w(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$w(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$w(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$w(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$w(Constructor, staticProps);
+ return Constructor;
+ }
+ function _defineProperty$v(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var TIMEZONE_UNIT_PRIORITY = 10;
+ var Setter = /*#__PURE__*/function () {
+ function Setter() {
+ _classCallCheck$w(this, Setter);
+ _defineProperty$v(this, "subPriority", 0);
+ }
+ _createClass$w(Setter, [{
+ key: "validate",
+ value: function validate(_utcDate, _options) {
+ return true;
+ }
+ }]);
+ return Setter;
+ }();
+ var ValueSetter = /*#__PURE__*/function (_Setter) {
+ _inherits$v(ValueSetter, _Setter);
+ var _super = _createSuper$v(ValueSetter);
+ function ValueSetter(value, validateValue, setValue, priority, subPriority) {
+ var _this;
+ _classCallCheck$w(this, ValueSetter);
+ _this = _super.call(this);
+ _this.value = value;
+ _this.validateValue = validateValue;
+ _this.setValue = setValue;
+ _this.priority = priority;
+ if (subPriority) {
+ _this.subPriority = subPriority;
+ }
+ return _this;
+ }
+ _createClass$w(ValueSetter, [{
+ key: "validate",
+ value: function validate(utcDate, options) {
+ return this.validateValue(utcDate, this.value, options);
+ }
+ }, {
+ key: "set",
+ value: function set(utcDate, flags, options) {
+ return this.setValue(utcDate, flags, this.value, options);
+ }
+ }]);
+ return ValueSetter;
+ }(Setter);
+ var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) {
+ _inherits$v(DateToSystemTimezoneSetter, _Setter2);
+ var _super2 = _createSuper$v(DateToSystemTimezoneSetter);
+ function DateToSystemTimezoneSetter() {
+ var _this2;
+ _classCallCheck$w(this, DateToSystemTimezoneSetter);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this2 = _super2.call.apply(_super2, [this].concat(args));
+ _defineProperty$v(_assertThisInitialized$v(_this2), "priority", TIMEZONE_UNIT_PRIORITY);
+ _defineProperty$v(_assertThisInitialized$v(_this2), "subPriority", -1);
+ return _this2;
+ }
+ _createClass$w(DateToSystemTimezoneSetter, [{
+ key: "set",
+ value: function set(date, flags) {
+ if (flags.timestampIsSet) {
+ return date;
+ }
+ var convertedDate = new Date(0);
+ convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
+ convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());
+ return convertedDate;
+ }
+ }]);
+ return DateToSystemTimezoneSetter;
+ }(Setter);
- var weekStartsOn = 1;
- var date = toDate(dirtyDate);
- var currentDay = date.getUTCDay();
- var remainder = day % 7;
- var dayIndex = (remainder + 7) % 7;
- var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
- date.setUTCDate(date.getUTCDate() + diff);
- return date;
+ function _classCallCheck$v(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
}
+ function _defineProperties$v(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$v(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$v(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$v(Constructor, staticProps);
+ return Constructor;
+ }
+ var Parser = /*#__PURE__*/function () {
+ function Parser() {
+ _classCallCheck$v(this, Parser);
+ }
+ _createClass$v(Parser, [{
+ key: "run",
+ value: function run(dateString, token, match, options) {
+ var result = this.parse(dateString, token, match, options);
+ if (!result) {
+ return null;
+ }
+ return {
+ setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),
+ rest: result.rest
+ };
+ }
+ }, {
+ key: "validate",
+ value: function validate(_utcDate, _value, _options) {
+ return true;
+ }
+ }]);
+ return Parser;
+ }();
- // See issue: https://github.com/date-fns/date-fns/issues/376
+ function _typeof$v(obj) {
+ "@babel/helpers - typeof";
- function setUTCISOWeek(dirtyDate, dirtyISOWeek) {
- requiredArgs(2, arguments);
- var date = toDate(dirtyDate);
- var isoWeek = toInteger(dirtyISOWeek);
- var diff = getUTCISOWeek(date) - isoWeek;
- date.setUTCDate(date.getUTCDate() - diff * 7);
- return date;
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$v = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$v = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$v(obj);
}
+ function _classCallCheck$u(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$u(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$u(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$u(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$u(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$u(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$u(subClass, superClass);
+ }
+ function _setPrototypeOf$u(o, p) {
+ _setPrototypeOf$u = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$u(o, p);
+ }
+ function _createSuper$u(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$u();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$u(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$u(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$u(this, result);
+ };
+ }
+ function _possibleConstructorReturn$u(self, call) {
+ if (call && (_typeof$v(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$u(self);
+ }
+ function _assertThisInitialized$u(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$u() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$u(o) {
+ _getPrototypeOf$u = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$u(o);
+ }
+ function _defineProperty$u(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var EraParser = /*#__PURE__*/function (_Parser) {
+ _inherits$u(EraParser, _Parser);
+ var _super = _createSuper$u(EraParser);
+ function EraParser() {
+ var _this;
+ _classCallCheck$u(this, EraParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$u(_assertThisInitialized$u(_this), "priority", 140);
+ _defineProperty$u(_assertThisInitialized$u(_this), "incompatibleTokens", ['R', 'u', 't', 'T']);
+ return _this;
+ }
+ _createClass$u(EraParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
+ switch (token) {
+ // AD, BC
+ case 'G':
+ case 'GG':
+ case 'GGG':
+ return match.era(dateString, {
+ width: 'abbreviated'
+ }) || match.era(dateString, {
+ width: 'narrow'
+ });
+ // A, B
- // See issue: https://github.com/date-fns/date-fns/issues/376
+ case 'GGGGG':
+ return match.era(dateString, {
+ width: 'narrow'
+ });
+ // Anno Domini, Before Christ
- function setUTCWeek(dirtyDate, dirtyWeek, options) {
- requiredArgs(2, arguments);
- var date = toDate(dirtyDate);
- var week = toInteger(dirtyWeek);
- var diff = getUTCWeek(date, options) - week;
- date.setUTCDate(date.getUTCDate() - diff * 7);
- return date;
- }
+ case 'GGGG':
+ default:
+ return match.era(dateString, {
+ width: 'wide'
+ }) || match.era(dateString, {
+ width: 'abbreviated'
+ }) || match.era(dateString, {
+ width: 'narrow'
+ });
+ }
+ }
+ }, {
+ key: "set",
+ value: function set(date, flags, value) {
+ flags.era = value;
+ date.setUTCFullYear(value, 0, 1);
+ date.setUTCHours(0, 0, 0, 0);
+ return date;
+ }
+ }]);
+ return EraParser;
+ }(Parser);
- var MILLISECONDS_IN_HOUR$1 = 3600000;
- var MILLISECONDS_IN_MINUTE$1 = 60000;
- var MILLISECONDS_IN_SECOND = 1000;
var numericPatterns = {
month: /^(1[0-2]|0?\d)/,
// 0 to 12
date: /^(3[0-1]|[0-2]?\d)/,
// 0 to 31
@@ -21139,1467 +21075,5326 @@
twoDigitsSigned: /^-?\d{1,2}/,
// 0 to 99, -0 to -99
threeDigitsSigned: /^-?\d{1,3}/,
// 0 to 999, -0 to -999
fourDigitsSigned: /^-?\d{1,4}/ // 0 to 9999, -0 to -9999
-
};
+
var timezonePatterns = {
basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/,
basic: /^([+-])(\d{2})(\d{2})|Z/,
basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,
extended: /^([+-])(\d{2}):(\d{2})|Z/,
extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/
};
- function parseNumericPattern(pattern, string, valueCallback) {
- var matchResult = string.match(pattern);
-
+ function mapValue(parseFnResult, mapFn) {
+ if (!parseFnResult) {
+ return parseFnResult;
+ }
+ return {
+ value: mapFn(parseFnResult.value),
+ rest: parseFnResult.rest
+ };
+ }
+ function parseNumericPattern(pattern, dateString) {
+ var matchResult = dateString.match(pattern);
if (!matchResult) {
return null;
}
-
- var value = parseInt(matchResult[0], 10);
return {
- value: valueCallback ? valueCallback(value) : value,
- rest: string.slice(matchResult[0].length)
+ value: parseInt(matchResult[0], 10),
+ rest: dateString.slice(matchResult[0].length)
};
}
-
- function parseTimezonePattern(pattern, string) {
- var matchResult = string.match(pattern);
-
+ function parseTimezonePattern(pattern, dateString) {
+ var matchResult = dateString.match(pattern);
if (!matchResult) {
return null;
} // Input is 'Z'
-
if (matchResult[0] === 'Z') {
return {
value: 0,
- rest: string.slice(1)
+ rest: dateString.slice(1)
};
}
-
var sign = matchResult[1] === '+' ? 1 : -1;
var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;
var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;
var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;
return {
- value: sign * (hours * MILLISECONDS_IN_HOUR$1 + minutes * MILLISECONDS_IN_MINUTE$1 + seconds * MILLISECONDS_IN_SECOND),
- rest: string.slice(matchResult[0].length)
+ value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),
+ rest: dateString.slice(matchResult[0].length)
};
}
-
- function parseAnyDigitsSigned(string, valueCallback) {
- return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback);
+ function parseAnyDigitsSigned(dateString) {
+ return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);
}
-
- function parseNDigits(n, string, valueCallback) {
+ function parseNDigits(n, dateString) {
switch (n) {
case 1:
- return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.singleDigit, dateString);
case 2:
- return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.twoDigits, dateString);
case 3:
- return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.threeDigits, dateString);
case 4:
- return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.fourDigits, dateString);
default:
- return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), string, valueCallback);
+ return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), dateString);
}
}
-
- function parseNDigitsSigned(n, string, valueCallback) {
+ function parseNDigitsSigned(n, dateString) {
switch (n) {
case 1:
- return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);
case 2:
- return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);
case 3:
- return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);
case 4:
- return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback);
-
+ return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);
default:
- return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), string, valueCallback);
+ return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), dateString);
}
}
-
- function dayPeriodEnumToHours(enumValue) {
- switch (enumValue) {
+ function dayPeriodEnumToHours(dayPeriod) {
+ switch (dayPeriod) {
case 'morning':
return 4;
-
case 'evening':
return 17;
-
case 'pm':
case 'noon':
case 'afternoon':
return 12;
-
case 'am':
case 'midnight':
case 'night':
default:
return 0;
}
}
-
function normalizeTwoDigitYear(twoDigitYear, currentYear) {
var isCommonEra = currentYear > 0; // Absolute number of the current year:
// 1 -> 1 AC
// 0 -> 1 BC
// -1 -> 2 BC
var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
var result;
-
if (absCurrentYear <= 50) {
result = twoDigitYear || 100;
} else {
var rangeEnd = absCurrentYear + 50;
var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;
var isPreviousCentury = twoDigitYear >= rangeEnd % 100;
result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
}
-
return isCommonEra ? result : 1 - result;
}
-
- var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
- var DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation
-
function isLeapYearIndex$1(year) {
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
}
- /*
- * | | Unit | | Unit |
- * |-----|--------------------------------|-----|--------------------------------|
- * | a | AM, PM | A* | Milliseconds in day |
- * | b | AM, PM, noon, midnight | B | Flexible day period |
- * | c | Stand-alone local day of week | C* | Localized hour w/ day period |
- * | d | Day of month | D | Day of year |
- * | e | Local day of week | E | Day of week |
- * | f | | F* | Day of week in month |
- * | g* | Modified Julian day | G | Era |
- * | h | Hour [1-12] | H | Hour [0-23] |
- * | i! | ISO day of week | I! | ISO week of year |
- * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
- * | k | Hour [1-24] | K | Hour [0-11] |
- * | l* | (deprecated) | L | Stand-alone month |
- * | m | Minute | M | Month |
- * | n | | N | |
- * | o! | Ordinal number modifier | O* | Timezone (GMT) |
- * | p | | P | |
- * | q | Stand-alone quarter | Q | Quarter |
- * | r* | Related Gregorian year | R! | ISO week-numbering year |
- * | s | Second | S | Fraction of second |
- * | t! | Seconds timestamp | T! | Milliseconds timestamp |
- * | u | Extended year | U* | Cyclic year |
- * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
- * | w | Local week of year | W* | Week of month |
- * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
- * | y | Year (abs) | Y | Local week-numbering year |
- * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
- *
- * Letters marked by * are not implemented but reserved by Unicode standard.
- *
- * Letters marked by ! are non-standard, but implemented by date-fns:
- * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)
- * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
- * i.e. 7 for Sunday, 1 for Monday, etc.
- * - `I` is ISO week of year, as opposed to `w` which is local week of year.
- * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
- * `R` is supposed to be used in conjunction with `I` and `i`
- * for universal ISO week-numbering date, whereas
- * `Y` is supposed to be used in conjunction with `w` and `e`
- * for week-numbering date specific to the locale.
- */
+ function _typeof$u(obj) {
+ "@babel/helpers - typeof";
- var parsers = {
- // Era
- G: {
- priority: 140,
- parse: function parse(string, token, match, _options) {
- switch (token) {
- // AD, BC
- case 'G':
- case 'GG':
- case 'GGG':
- return match.era(string, {
- width: 'abbreviated'
- }) || match.era(string, {
- width: 'narrow'
- });
- // A, B
-
- case 'GGGGG':
- return match.era(string, {
- width: 'narrow'
- });
- // Anno Domini, Before Christ
-
- case 'GGGG':
- default:
- return match.era(string, {
- width: 'wide'
- }) || match.era(string, {
- width: 'abbreviated'
- }) || match.era(string, {
- width: 'narrow'
- });
- }
- },
- set: function set(date, flags, value, _options) {
- flags.era = value;
- date.setUTCFullYear(value, 0, 1);
- date.setUTCHours(0, 0, 0, 0);
- return date;
- },
- incompatibleTokens: ['R', 'u', 't', 'T']
- },
- // Year
- y: {
- // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
- // | Year | y | yy | yyy | yyyy | yyyyy |
- // |----------|-------|----|-------|-------|-------|
- // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
- // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
- // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
- // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
- // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
- priority: 130,
- parse: function parse(string, token, match, _options) {
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$u = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$u = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$u(obj);
+ }
+ function _classCallCheck$t(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$t(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$t(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$t(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$t(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$t(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$t(subClass, superClass);
+ }
+ function _setPrototypeOf$t(o, p) {
+ _setPrototypeOf$t = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$t(o, p);
+ }
+ function _createSuper$t(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$t();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$t(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$t(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$t(this, result);
+ };
+ }
+ function _possibleConstructorReturn$t(self, call) {
+ if (call && (_typeof$u(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$t(self);
+ }
+ function _assertThisInitialized$t(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$t() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$t(o) {
+ _getPrototypeOf$t = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$t(o);
+ }
+ function _defineProperty$t(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
+ // | Year | y | yy | yyy | yyyy | yyyyy |
+ // |----------|-------|----|-------|-------|-------|
+ // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
+ // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
+ // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
+ // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
+ // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
+ var YearParser = /*#__PURE__*/function (_Parser) {
+ _inherits$t(YearParser, _Parser);
+ var _super = _createSuper$t(YearParser);
+ function YearParser() {
+ var _this;
+ _classCallCheck$t(this, YearParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$t(_assertThisInitialized$t(_this), "priority", 130);
+ _defineProperty$t(_assertThisInitialized$t(_this), "incompatibleTokens", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$t(YearParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
var valueCallback = function valueCallback(year) {
return {
year: year,
isTwoDigitYear: token === 'yy'
};
};
-
switch (token) {
case 'y':
- return parseNDigits(4, string, valueCallback);
-
+ return mapValue(parseNDigits(4, dateString), valueCallback);
case 'yo':
- return match.ordinalNumber(string, {
- unit: 'year',
- valueCallback: valueCallback
- });
-
+ return mapValue(match.ordinalNumber(dateString, {
+ unit: 'year'
+ }), valueCallback);
default:
- return parseNDigits(token.length, string, valueCallback);
+ return mapValue(parseNDigits(token.length, dateString), valueCallback);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value.isTwoDigitYear || value.year > 0;
- },
- set: function set(date, flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, flags, value) {
var currentYear = date.getUTCFullYear();
-
if (value.isTwoDigitYear) {
var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);
date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
}
-
var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;
date.setUTCFullYear(year, 0, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']
- },
- // Local week-numbering year
- Y: {
- priority: 130,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return YearParser;
+ }(Parser);
+
+ function _typeof$t(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$t = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$t = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$t(obj);
+ }
+ function _classCallCheck$s(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$s(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$s(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$s(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$s(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$s(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$s(subClass, superClass);
+ }
+ function _setPrototypeOf$s(o, p) {
+ _setPrototypeOf$s = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$s(o, p);
+ }
+ function _createSuper$s(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$s();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$s(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$s(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$s(this, result);
+ };
+ }
+ function _possibleConstructorReturn$s(self, call) {
+ if (call && (_typeof$t(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$s(self);
+ }
+ function _assertThisInitialized$s(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$s() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$s(o) {
+ _getPrototypeOf$s = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$s(o);
+ }
+ function _defineProperty$s(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ // Local week-numbering year
+ var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {
+ _inherits$s(LocalWeekYearParser, _Parser);
+ var _super = _createSuper$s(LocalWeekYearParser);
+ function LocalWeekYearParser() {
+ var _this;
+ _classCallCheck$s(this, LocalWeekYearParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$s(_assertThisInitialized$s(_this), "priority", 130);
+ _defineProperty$s(_assertThisInitialized$s(_this), "incompatibleTokens", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);
+ return _this;
+ }
+ _createClass$s(LocalWeekYearParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
var valueCallback = function valueCallback(year) {
return {
year: year,
isTwoDigitYear: token === 'YY'
};
};
-
switch (token) {
case 'Y':
- return parseNDigits(4, string, valueCallback);
-
+ return mapValue(parseNDigits(4, dateString), valueCallback);
case 'Yo':
- return match.ordinalNumber(string, {
- unit: 'year',
- valueCallback: valueCallback
- });
-
+ return mapValue(match.ordinalNumber(dateString, {
+ unit: 'year'
+ }), valueCallback);
default:
- return parseNDigits(token.length, string, valueCallback);
+ return mapValue(parseNDigits(token.length, dateString), valueCallback);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value.isTwoDigitYear || value.year > 0;
- },
- set: function set(date, flags, value, options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, flags, value, options) {
var currentYear = getUTCWeekYear(date, options);
-
if (value.isTwoDigitYear) {
var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);
date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);
date.setUTCHours(0, 0, 0, 0);
return startOfUTCWeek(date, options);
}
-
var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;
date.setUTCFullYear(year, 0, options.firstWeekContainsDate);
date.setUTCHours(0, 0, 0, 0);
return startOfUTCWeek(date, options);
- },
- incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']
- },
- // ISO week-numbering year
- R: {
- priority: 130,
- parse: function parse(string, token, _match, _options) {
+ }
+ }]);
+ return LocalWeekYearParser;
+ }(Parser);
+
+ function _typeof$s(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$s = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$s = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$s(obj);
+ }
+ function _classCallCheck$r(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$r(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$r(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$r(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$r(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$r(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$r(subClass, superClass);
+ }
+ function _setPrototypeOf$r(o, p) {
+ _setPrototypeOf$r = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$r(o, p);
+ }
+ function _createSuper$r(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$r();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$r(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$r(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$r(this, result);
+ };
+ }
+ function _possibleConstructorReturn$r(self, call) {
+ if (call && (_typeof$s(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$r(self);
+ }
+ function _assertThisInitialized$r(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$r() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$r(o) {
+ _getPrototypeOf$r = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$r(o);
+ }
+ function _defineProperty$r(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {
+ _inherits$r(ISOWeekYearParser, _Parser);
+ var _super = _createSuper$r(ISOWeekYearParser);
+ function ISOWeekYearParser() {
+ var _this;
+ _classCallCheck$r(this, ISOWeekYearParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$r(_assertThisInitialized$r(_this), "priority", 130);
+ _defineProperty$r(_assertThisInitialized$r(_this), "incompatibleTokens", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$r(ISOWeekYearParser, [{
+ key: "parse",
+ value: function parse(dateString, token) {
if (token === 'R') {
- return parseNDigitsSigned(4, string);
+ return parseNDigitsSigned(4, dateString);
}
-
- return parseNDigitsSigned(token.length, string);
- },
- set: function set(_date, _flags, value, _options) {
+ return parseNDigitsSigned(token.length, dateString);
+ }
+ }, {
+ key: "set",
+ value: function set(_date, _flags, value) {
var firstWeekOfYear = new Date(0);
firstWeekOfYear.setUTCFullYear(value, 0, 4);
firstWeekOfYear.setUTCHours(0, 0, 0, 0);
return startOfUTCISOWeek(firstWeekOfYear);
- },
- incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']
- },
- // Extended year
- u: {
- priority: 130,
- parse: function parse(string, token, _match, _options) {
+ }
+ }]);
+ return ISOWeekYearParser;
+ }(Parser);
+
+ function _typeof$r(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$r = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$r = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$r(obj);
+ }
+ function _classCallCheck$q(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$q(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$q(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$q(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$q(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$q(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$q(subClass, superClass);
+ }
+ function _setPrototypeOf$q(o, p) {
+ _setPrototypeOf$q = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$q(o, p);
+ }
+ function _createSuper$q(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$q();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$q(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$q(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$q(this, result);
+ };
+ }
+ function _possibleConstructorReturn$q(self, call) {
+ if (call && (_typeof$r(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$q(self);
+ }
+ function _assertThisInitialized$q(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$q() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$q(o) {
+ _getPrototypeOf$q = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$q(o);
+ }
+ function _defineProperty$q(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var ExtendedYearParser = /*#__PURE__*/function (_Parser) {
+ _inherits$q(ExtendedYearParser, _Parser);
+ var _super = _createSuper$q(ExtendedYearParser);
+ function ExtendedYearParser() {
+ var _this;
+ _classCallCheck$q(this, ExtendedYearParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$q(_assertThisInitialized$q(_this), "priority", 130);
+ _defineProperty$q(_assertThisInitialized$q(_this), "incompatibleTokens", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$q(ExtendedYearParser, [{
+ key: "parse",
+ value: function parse(dateString, token) {
if (token === 'u') {
- return parseNDigitsSigned(4, string);
+ return parseNDigitsSigned(4, dateString);
}
-
- return parseNDigitsSigned(token.length, string);
- },
- set: function set(date, _flags, value, _options) {
+ return parseNDigitsSigned(token.length, dateString);
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCFullYear(value, 0, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']
- },
- // Quarter
- Q: {
- priority: 120,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return ExtendedYearParser;
+ }(Parser);
+
+ function _typeof$q(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$q = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$q = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$q(obj);
+ }
+ function _classCallCheck$p(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$p(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$p(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$p(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$p(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$p(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$p(subClass, superClass);
+ }
+ function _setPrototypeOf$p(o, p) {
+ _setPrototypeOf$p = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$p(o, p);
+ }
+ function _createSuper$p(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$p();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$p(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$p(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$p(this, result);
+ };
+ }
+ function _possibleConstructorReturn$p(self, call) {
+ if (call && (_typeof$q(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$p(self);
+ }
+ function _assertThisInitialized$p(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$p() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$p(o) {
+ _getPrototypeOf$p = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$p(o);
+ }
+ function _defineProperty$p(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var QuarterParser = /*#__PURE__*/function (_Parser) {
+ _inherits$p(QuarterParser, _Parser);
+ var _super = _createSuper$p(QuarterParser);
+ function QuarterParser() {
+ var _this;
+ _classCallCheck$p(this, QuarterParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$p(_assertThisInitialized$p(_this), "priority", 120);
+ _defineProperty$p(_assertThisInitialized$p(_this), "incompatibleTokens", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$p(QuarterParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
// 1, 2, 3, 4
case 'Q':
case 'QQ':
// 01, 02, 03, 04
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
// 1st, 2nd, 3rd, 4th
case 'Qo':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'quarter'
});
// Q1, Q2, Q3, Q4
case 'QQQ':
- return match.quarter(string, {
+ return match.quarter(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.quarter(string, {
+ }) || match.quarter(dateString, {
width: 'narrow',
context: 'formatting'
});
// 1, 2, 3, 4 (narrow quarter; could be not numerical)
case 'QQQQQ':
- return match.quarter(string, {
+ return match.quarter(dateString, {
width: 'narrow',
context: 'formatting'
});
// 1st quarter, 2nd quarter, ...
case 'QQQQ':
default:
- return match.quarter(string, {
+ return match.quarter(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.quarter(string, {
+ }) || match.quarter(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.quarter(string, {
+ }) || match.quarter(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 4;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMonth((value - 1) * 3, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']
- },
- // Stand-alone quarter
- q: {
- priority: 120,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return QuarterParser;
+ }(Parser);
+
+ function _typeof$p(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$p = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$p = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$p(obj);
+ }
+ function _classCallCheck$o(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$o(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$o(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$o(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$o(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$o(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$o(subClass, superClass);
+ }
+ function _setPrototypeOf$o(o, p) {
+ _setPrototypeOf$o = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$o(o, p);
+ }
+ function _createSuper$o(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$o();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$o(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$o(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$o(this, result);
+ };
+ }
+ function _possibleConstructorReturn$o(self, call) {
+ if (call && (_typeof$p(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$o(self);
+ }
+ function _assertThisInitialized$o(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$o() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$o(o) {
+ _getPrototypeOf$o = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$o(o);
+ }
+ function _defineProperty$o(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {
+ _inherits$o(StandAloneQuarterParser, _Parser);
+ var _super = _createSuper$o(StandAloneQuarterParser);
+ function StandAloneQuarterParser() {
+ var _this;
+ _classCallCheck$o(this, StandAloneQuarterParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$o(_assertThisInitialized$o(_this), "priority", 120);
+ _defineProperty$o(_assertThisInitialized$o(_this), "incompatibleTokens", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$o(StandAloneQuarterParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
// 1, 2, 3, 4
case 'q':
case 'qq':
// 01, 02, 03, 04
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
// 1st, 2nd, 3rd, 4th
case 'qo':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'quarter'
});
// Q1, Q2, Q3, Q4
case 'qqq':
- return match.quarter(string, {
+ return match.quarter(dateString, {
width: 'abbreviated',
context: 'standalone'
- }) || match.quarter(string, {
+ }) || match.quarter(dateString, {
width: 'narrow',
context: 'standalone'
});
// 1, 2, 3, 4 (narrow quarter; could be not numerical)
case 'qqqqq':
- return match.quarter(string, {
+ return match.quarter(dateString, {
width: 'narrow',
context: 'standalone'
});
// 1st quarter, 2nd quarter, ...
case 'qqqq':
default:
- return match.quarter(string, {
+ return match.quarter(dateString, {
width: 'wide',
context: 'standalone'
- }) || match.quarter(string, {
+ }) || match.quarter(dateString, {
width: 'abbreviated',
context: 'standalone'
- }) || match.quarter(string, {
+ }) || match.quarter(dateString, {
width: 'narrow',
context: 'standalone'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 4;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMonth((value - 1) * 3, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']
- },
- // Month
- M: {
- priority: 110,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return StandAloneQuarterParser;
+ }(Parser);
+
+ function _typeof$o(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$o = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$o = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$o(obj);
+ }
+ function _classCallCheck$n(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$n(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$n(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$n(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$n(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$n(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$n(subClass, superClass);
+ }
+ function _setPrototypeOf$n(o, p) {
+ _setPrototypeOf$n = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$n(o, p);
+ }
+ function _createSuper$n(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$n();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$n(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$n(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$n(this, result);
+ };
+ }
+ function _possibleConstructorReturn$n(self, call) {
+ if (call && (_typeof$o(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$n(self);
+ }
+ function _assertThisInitialized$n(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$n() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$n(o) {
+ _getPrototypeOf$n = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$n(o);
+ }
+ function _defineProperty$n(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var MonthParser = /*#__PURE__*/function (_Parser) {
+ _inherits$n(MonthParser, _Parser);
+ var _super = _createSuper$n(MonthParser);
+ function MonthParser() {
+ var _this;
+ _classCallCheck$n(this, MonthParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$n(_assertThisInitialized$n(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);
+ _defineProperty$n(_assertThisInitialized$n(_this), "priority", 110);
+ return _this;
+ }
+ _createClass$n(MonthParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
var valueCallback = function valueCallback(value) {
return value - 1;
};
-
switch (token) {
// 1, 2, ..., 12
case 'M':
- return parseNumericPattern(numericPatterns.month, string, valueCallback);
+ return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);
// 01, 02, ..., 12
case 'MM':
- return parseNDigits(2, string, valueCallback);
+ return mapValue(parseNDigits(2, dateString), valueCallback);
// 1st, 2nd, ..., 12th
case 'Mo':
- return match.ordinalNumber(string, {
- unit: 'month',
- valueCallback: valueCallback
- });
+ return mapValue(match.ordinalNumber(dateString, {
+ unit: 'month'
+ }), valueCallback);
// Jan, Feb, ..., Dec
case 'MMM':
- return match.month(string, {
+ return match.month(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.month(string, {
+ }) || match.month(dateString, {
width: 'narrow',
context: 'formatting'
});
// J, F, ..., D
case 'MMMMM':
- return match.month(string, {
+ return match.month(dateString, {
width: 'narrow',
context: 'formatting'
});
// January, February, ..., December
case 'MMMM':
default:
- return match.month(string, {
+ return match.month(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.month(string, {
+ }) || match.month(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.month(string, {
+ }) || match.month(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 11;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMonth(value, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']
- },
- // Stand-alone month
- L: {
- priority: 110,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return MonthParser;
+ }(Parser);
+
+ function _typeof$n(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$n = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$n = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$n(obj);
+ }
+ function _classCallCheck$m(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$m(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$m(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$m(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$m(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$m(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$m(subClass, superClass);
+ }
+ function _setPrototypeOf$m(o, p) {
+ _setPrototypeOf$m = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$m(o, p);
+ }
+ function _createSuper$m(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$m();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$m(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$m(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$m(this, result);
+ };
+ }
+ function _possibleConstructorReturn$m(self, call) {
+ if (call && (_typeof$n(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$m(self);
+ }
+ function _assertThisInitialized$m(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$m() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$m(o) {
+ _getPrototypeOf$m = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$m(o);
+ }
+ function _defineProperty$m(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {
+ _inherits$m(StandAloneMonthParser, _Parser);
+ var _super = _createSuper$m(StandAloneMonthParser);
+ function StandAloneMonthParser() {
+ var _this;
+ _classCallCheck$m(this, StandAloneMonthParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$m(_assertThisInitialized$m(_this), "priority", 110);
+ _defineProperty$m(_assertThisInitialized$m(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$m(StandAloneMonthParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
var valueCallback = function valueCallback(value) {
return value - 1;
};
-
switch (token) {
// 1, 2, ..., 12
case 'L':
- return parseNumericPattern(numericPatterns.month, string, valueCallback);
+ return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);
// 01, 02, ..., 12
case 'LL':
- return parseNDigits(2, string, valueCallback);
+ return mapValue(parseNDigits(2, dateString), valueCallback);
// 1st, 2nd, ..., 12th
case 'Lo':
- return match.ordinalNumber(string, {
- unit: 'month',
- valueCallback: valueCallback
- });
+ return mapValue(match.ordinalNumber(dateString, {
+ unit: 'month'
+ }), valueCallback);
// Jan, Feb, ..., Dec
case 'LLL':
- return match.month(string, {
+ return match.month(dateString, {
width: 'abbreviated',
context: 'standalone'
- }) || match.month(string, {
+ }) || match.month(dateString, {
width: 'narrow',
context: 'standalone'
});
// J, F, ..., D
case 'LLLLL':
- return match.month(string, {
+ return match.month(dateString, {
width: 'narrow',
context: 'standalone'
});
// January, February, ..., December
case 'LLLL':
default:
- return match.month(string, {
+ return match.month(dateString, {
width: 'wide',
context: 'standalone'
- }) || match.month(string, {
+ }) || match.month(dateString, {
width: 'abbreviated',
context: 'standalone'
- }) || match.month(string, {
+ }) || match.month(dateString, {
width: 'narrow',
context: 'standalone'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 11;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMonth(value, 1);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']
- },
- // Local week of year
- w: {
- priority: 100,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return StandAloneMonthParser;
+ }(Parser);
+
+ function setUTCWeek(dirtyDate, dirtyWeek, options) {
+ requiredArgs(2, arguments);
+ var date = toDate(dirtyDate);
+ var week = toInteger(dirtyWeek);
+ var diff = getUTCWeek(date, options) - week;
+ date.setUTCDate(date.getUTCDate() - diff * 7);
+ return date;
+ }
+
+ function _typeof$m(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$m = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$m = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$m(obj);
+ }
+ function _classCallCheck$l(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$l(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$l(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$l(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$l(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$l(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$l(subClass, superClass);
+ }
+ function _setPrototypeOf$l(o, p) {
+ _setPrototypeOf$l = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$l(o, p);
+ }
+ function _createSuper$l(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$l();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$l(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$l(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$l(this, result);
+ };
+ }
+ function _possibleConstructorReturn$l(self, call) {
+ if (call && (_typeof$m(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$l(self);
+ }
+ function _assertThisInitialized$l(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$l() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$l(o) {
+ _getPrototypeOf$l = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$l(o);
+ }
+ function _defineProperty$l(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var LocalWeekParser = /*#__PURE__*/function (_Parser) {
+ _inherits$l(LocalWeekParser, _Parser);
+ var _super = _createSuper$l(LocalWeekParser);
+ function LocalWeekParser() {
+ var _this;
+ _classCallCheck$l(this, LocalWeekParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$l(_assertThisInitialized$l(_this), "priority", 100);
+ _defineProperty$l(_assertThisInitialized$l(_this), "incompatibleTokens", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']);
+ return _this;
+ }
+ _createClass$l(LocalWeekParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'w':
- return parseNumericPattern(numericPatterns.week, string);
-
+ return parseNumericPattern(numericPatterns.week, dateString);
case 'wo':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'week'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 53;
- },
- set: function set(date, _flags, value, options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value, options) {
return startOfUTCWeek(setUTCWeek(date, value, options), options);
- },
- incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']
- },
- // ISO week of year
- I: {
- priority: 100,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return LocalWeekParser;
+ }(Parser);
+
+ function setUTCISOWeek(dirtyDate, dirtyISOWeek) {
+ requiredArgs(2, arguments);
+ var date = toDate(dirtyDate);
+ var isoWeek = toInteger(dirtyISOWeek);
+ var diff = getUTCISOWeek(date) - isoWeek;
+ date.setUTCDate(date.getUTCDate() - diff * 7);
+ return date;
+ }
+
+ function _typeof$l(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$l = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$l = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$l(obj);
+ }
+ function _classCallCheck$k(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$k(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$k(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$k(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$k(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$k(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$k(subClass, superClass);
+ }
+ function _setPrototypeOf$k(o, p) {
+ _setPrototypeOf$k = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$k(o, p);
+ }
+ function _createSuper$k(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$k();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$k(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$k(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$k(this, result);
+ };
+ }
+ function _possibleConstructorReturn$k(self, call) {
+ if (call && (_typeof$l(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$k(self);
+ }
+ function _assertThisInitialized$k(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$k() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$k(o) {
+ _getPrototypeOf$k = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$k(o);
+ }
+ function _defineProperty$k(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var ISOWeekParser = /*#__PURE__*/function (_Parser) {
+ _inherits$k(ISOWeekParser, _Parser);
+ var _super = _createSuper$k(ISOWeekParser);
+ function ISOWeekParser() {
+ var _this;
+ _classCallCheck$k(this, ISOWeekParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$k(_assertThisInitialized$k(_this), "priority", 100);
+ _defineProperty$k(_assertThisInitialized$k(_this), "incompatibleTokens", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$k(ISOWeekParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'I':
- return parseNumericPattern(numericPatterns.week, string);
-
+ return parseNumericPattern(numericPatterns.week, dateString);
case 'Io':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'week'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 53;
- },
- set: function set(date, _flags, value, options) {
- return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options);
- },
- incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']
- },
- // Day of the month
- d: {
- priority: 90,
- subPriority: 1,
- parse: function parse(string, token, match, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
+ return startOfUTCISOWeek(setUTCISOWeek(date, value));
+ }
+ }]);
+ return ISOWeekParser;
+ }(Parser);
+
+ function _typeof$k(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$k = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$k = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$k(obj);
+ }
+ function _classCallCheck$j(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$j(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$j(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$j(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$j(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$j(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$j(subClass, superClass);
+ }
+ function _setPrototypeOf$j(o, p) {
+ _setPrototypeOf$j = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$j(o, p);
+ }
+ function _createSuper$j(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$j();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$j(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$j(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$j(this, result);
+ };
+ }
+ function _possibleConstructorReturn$j(self, call) {
+ if (call && (_typeof$k(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$j(self);
+ }
+ function _assertThisInitialized$j(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$j() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$j(o) {
+ _getPrototypeOf$j = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$j(o);
+ }
+ function _defineProperty$j(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+ var DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month
+
+ var DateParser = /*#__PURE__*/function (_Parser) {
+ _inherits$j(DateParser, _Parser);
+ var _super = _createSuper$j(DateParser);
+ function DateParser() {
+ var _this;
+ _classCallCheck$j(this, DateParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$j(_assertThisInitialized$j(_this), "priority", 90);
+ _defineProperty$j(_assertThisInitialized$j(_this), "subPriority", 1);
+ _defineProperty$j(_assertThisInitialized$j(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$j(DateParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'd':
- return parseNumericPattern(numericPatterns.date, string);
-
+ return parseNumericPattern(numericPatterns.date, dateString);
case 'do':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'date'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(date, value) {
var year = date.getUTCFullYear();
var isLeapYear = isLeapYearIndex$1(year);
var month = date.getUTCMonth();
-
if (isLeapYear) {
return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];
} else {
return value >= 1 && value <= DAYS_IN_MONTH[month];
}
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCDate(value);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']
- },
- // Day of year
- D: {
- priority: 90,
- subPriority: 1,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return DateParser;
+ }(Parser);
+
+ function _typeof$j(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$j = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$j = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$j(obj);
+ }
+ function _classCallCheck$i(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$i(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$i(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$i(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$i(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$i(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$i(subClass, superClass);
+ }
+ function _setPrototypeOf$i(o, p) {
+ _setPrototypeOf$i = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$i(o, p);
+ }
+ function _createSuper$i(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$i();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$i(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$i(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$i(this, result);
+ };
+ }
+ function _possibleConstructorReturn$i(self, call) {
+ if (call && (_typeof$j(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$i(self);
+ }
+ function _assertThisInitialized$i(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$i() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$i(o) {
+ _getPrototypeOf$i = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$i(o);
+ }
+ function _defineProperty$i(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var DayOfYearParser = /*#__PURE__*/function (_Parser) {
+ _inherits$i(DayOfYearParser, _Parser);
+ var _super = _createSuper$i(DayOfYearParser);
+ function DayOfYearParser() {
+ var _this;
+ _classCallCheck$i(this, DayOfYearParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$i(_assertThisInitialized$i(_this), "priority", 90);
+ _defineProperty$i(_assertThisInitialized$i(_this), "subpriority", 1);
+ _defineProperty$i(_assertThisInitialized$i(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$i(DayOfYearParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'D':
case 'DD':
- return parseNumericPattern(numericPatterns.dayOfYear, string);
-
+ return parseNumericPattern(numericPatterns.dayOfYear, dateString);
case 'Do':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'date'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(date, value) {
var year = date.getUTCFullYear();
var isLeapYear = isLeapYearIndex$1(year);
-
if (isLeapYear) {
return value >= 1 && value <= 366;
} else {
return value >= 1 && value <= 365;
}
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMonth(0, value);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']
- },
- // Day of week
- E: {
- priority: 90,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return DayOfYearParser;
+ }(Parser);
+
+ function setUTCDay(dirtyDate, dirtyDay, options) {
+ var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
+ requiredArgs(2, arguments);
+ var defaultOptions = getDefaultOptions();
+ var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
+
+ if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
+ throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
+ }
+ var date = toDate(dirtyDate);
+ var day = toInteger(dirtyDay);
+ var currentDay = date.getUTCDay();
+ var remainder = day % 7;
+ var dayIndex = (remainder + 7) % 7;
+ var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
+ date.setUTCDate(date.getUTCDate() + diff);
+ return date;
+ }
+
+ function _typeof$i(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$i = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$i = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$i(obj);
+ }
+ function _classCallCheck$h(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$h(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$h(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$h(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$h(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$h(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$h(subClass, superClass);
+ }
+ function _setPrototypeOf$h(o, p) {
+ _setPrototypeOf$h = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$h(o, p);
+ }
+ function _createSuper$h(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$h();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$h(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$h(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$h(this, result);
+ };
+ }
+ function _possibleConstructorReturn$h(self, call) {
+ if (call && (_typeof$i(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$h(self);
+ }
+ function _assertThisInitialized$h(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$h() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$h(o) {
+ _getPrototypeOf$h = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$h(o);
+ }
+ function _defineProperty$h(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var DayParser = /*#__PURE__*/function (_Parser) {
+ _inherits$h(DayParser, _Parser);
+ var _super = _createSuper$h(DayParser);
+ function DayParser() {
+ var _this;
+ _classCallCheck$h(this, DayParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$h(_assertThisInitialized$h(_this), "priority", 90);
+ _defineProperty$h(_assertThisInitialized$h(_this), "incompatibleTokens", ['D', 'i', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$h(DayParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
// Tue
case 'E':
case 'EE':
case 'EEE':
- return match.day(string, {
+ return match.day(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'short',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
// T
case 'EEEEE':
- return match.day(string, {
+ return match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
// Tu
case 'EEEEEE':
- return match.day(string, {
+ return match.day(dateString, {
width: 'short',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
// Tuesday
case 'EEEE':
default:
- return match.day(string, {
+ return match.day(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'short',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 6;
- },
- set: function set(date, _flags, value, options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value, options) {
date = setUTCDay(date, value, options);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']
- },
- // Local day of week
- e: {
- priority: 90,
- parse: function parse(string, token, match, options) {
+ }
+ }]);
+ return DayParser;
+ }(Parser);
+
+ function _typeof$h(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$h = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$h = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$h(obj);
+ }
+ function _classCallCheck$g(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$g(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$g(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$g(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$g(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$g(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$g(subClass, superClass);
+ }
+ function _setPrototypeOf$g(o, p) {
+ _setPrototypeOf$g = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$g(o, p);
+ }
+ function _createSuper$g(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$g();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$g(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$g(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$g(this, result);
+ };
+ }
+ function _possibleConstructorReturn$g(self, call) {
+ if (call && (_typeof$h(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$g(self);
+ }
+ function _assertThisInitialized$g(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$g() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$g(o) {
+ _getPrototypeOf$g = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$g(o);
+ }
+ function _defineProperty$g(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var LocalDayParser = /*#__PURE__*/function (_Parser) {
+ _inherits$g(LocalDayParser, _Parser);
+ var _super = _createSuper$g(LocalDayParser);
+ function LocalDayParser() {
+ var _this;
+ _classCallCheck$g(this, LocalDayParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$g(_assertThisInitialized$g(_this), "priority", 90);
+ _defineProperty$g(_assertThisInitialized$g(_this), "incompatibleTokens", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$g(LocalDayParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match, options) {
var valueCallback = function valueCallback(value) {
var wholeWeekDays = Math.floor((value - 1) / 7) * 7;
return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;
};
-
switch (token) {
// 3
case 'e':
case 'ee':
// 03
- return parseNDigits(token.length, string, valueCallback);
+ return mapValue(parseNDigits(token.length, dateString), valueCallback);
// 3rd
case 'eo':
- return match.ordinalNumber(string, {
- unit: 'day',
- valueCallback: valueCallback
- });
+ return mapValue(match.ordinalNumber(dateString, {
+ unit: 'day'
+ }), valueCallback);
// Tue
case 'eee':
- return match.day(string, {
+ return match.day(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'short',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
// T
case 'eeeee':
- return match.day(string, {
+ return match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
// Tu
case 'eeeeee':
- return match.day(string, {
+ return match.day(dateString, {
width: 'short',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
// Tuesday
case 'eeee':
default:
- return match.day(string, {
+ return match.day(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'short',
context: 'formatting'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 6;
- },
- set: function set(date, _flags, value, options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value, options) {
date = setUTCDay(date, value, options);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']
- },
- // Stand-alone local day of week
- c: {
- priority: 90,
- parse: function parse(string, token, match, options) {
+ }
+ }]);
+ return LocalDayParser;
+ }(Parser);
+
+ function _typeof$g(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$g = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$g = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$g(obj);
+ }
+ function _classCallCheck$f(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$f(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$f(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$f(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$f(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$f(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$f(subClass, superClass);
+ }
+ function _setPrototypeOf$f(o, p) {
+ _setPrototypeOf$f = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$f(o, p);
+ }
+ function _createSuper$f(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$f();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$f(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$f(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$f(this, result);
+ };
+ }
+ function _possibleConstructorReturn$f(self, call) {
+ if (call && (_typeof$g(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$f(self);
+ }
+ function _assertThisInitialized$f(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$f() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$f(o) {
+ _getPrototypeOf$f = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$f(o);
+ }
+ function _defineProperty$f(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {
+ _inherits$f(StandAloneLocalDayParser, _Parser);
+ var _super = _createSuper$f(StandAloneLocalDayParser);
+ function StandAloneLocalDayParser() {
+ var _this;
+ _classCallCheck$f(this, StandAloneLocalDayParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$f(_assertThisInitialized$f(_this), "priority", 90);
+ _defineProperty$f(_assertThisInitialized$f(_this), "incompatibleTokens", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']);
+ return _this;
+ }
+ _createClass$f(StandAloneLocalDayParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match, options) {
var valueCallback = function valueCallback(value) {
var wholeWeekDays = Math.floor((value - 1) / 7) * 7;
return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;
};
-
switch (token) {
// 3
case 'c':
case 'cc':
// 03
- return parseNDigits(token.length, string, valueCallback);
+ return mapValue(parseNDigits(token.length, dateString), valueCallback);
// 3rd
case 'co':
- return match.ordinalNumber(string, {
- unit: 'day',
- valueCallback: valueCallback
- });
+ return mapValue(match.ordinalNumber(dateString, {
+ unit: 'day'
+ }), valueCallback);
// Tue
case 'ccc':
- return match.day(string, {
+ return match.day(dateString, {
width: 'abbreviated',
context: 'standalone'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'short',
context: 'standalone'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'standalone'
});
// T
case 'ccccc':
- return match.day(string, {
+ return match.day(dateString, {
width: 'narrow',
context: 'standalone'
});
// Tu
case 'cccccc':
- return match.day(string, {
+ return match.day(dateString, {
width: 'short',
context: 'standalone'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'standalone'
});
// Tuesday
case 'cccc':
default:
- return match.day(string, {
+ return match.day(dateString, {
width: 'wide',
context: 'standalone'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'abbreviated',
context: 'standalone'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'short',
context: 'standalone'
- }) || match.day(string, {
+ }) || match.day(dateString, {
width: 'narrow',
context: 'standalone'
});
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 6;
- },
- set: function set(date, _flags, value, options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value, options) {
date = setUTCDay(date, value, options);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']
- },
- // ISO day of week
- i: {
- priority: 90,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return StandAloneLocalDayParser;
+ }(Parser);
+
+ function setUTCISODay(dirtyDate, dirtyDay) {
+ requiredArgs(2, arguments);
+ var day = toInteger(dirtyDay);
+ if (day % 7 === 0) {
+ day = day - 7;
+ }
+ var weekStartsOn = 1;
+ var date = toDate(dirtyDate);
+ var currentDay = date.getUTCDay();
+ var remainder = day % 7;
+ var dayIndex = (remainder + 7) % 7;
+ var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
+ date.setUTCDate(date.getUTCDate() + diff);
+ return date;
+ }
+
+ function _typeof$f(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$f = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$f = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$f(obj);
+ }
+ function _classCallCheck$e(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$e(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$e(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$e(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$e(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$e(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$e(subClass, superClass);
+ }
+ function _setPrototypeOf$e(o, p) {
+ _setPrototypeOf$e = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$e(o, p);
+ }
+ function _createSuper$e(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$e();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$e(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$e(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$e(this, result);
+ };
+ }
+ function _possibleConstructorReturn$e(self, call) {
+ if (call && (_typeof$f(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$e(self);
+ }
+ function _assertThisInitialized$e(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$e() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$e(o) {
+ _getPrototypeOf$e = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$e(o);
+ }
+ function _defineProperty$e(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var ISODayParser = /*#__PURE__*/function (_Parser) {
+ _inherits$e(ISODayParser, _Parser);
+ var _super = _createSuper$e(ISODayParser);
+ function ISODayParser() {
+ var _this;
+ _classCallCheck$e(this, ISODayParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$e(_assertThisInitialized$e(_this), "priority", 90);
+ _defineProperty$e(_assertThisInitialized$e(_this), "incompatibleTokens", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']);
+ return _this;
+ }
+ _createClass$e(ISODayParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
var valueCallback = function valueCallback(value) {
if (value === 0) {
return 7;
}
-
return value;
};
-
switch (token) {
// 2
case 'i':
case 'ii':
// 02
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
// 2nd
case 'io':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'day'
});
// Tue
case 'iii':
- return match.day(string, {
+ return mapValue(match.day(dateString, {
width: 'abbreviated',
- context: 'formatting',
- valueCallback: valueCallback
- }) || match.day(string, {
+ context: 'formatting'
+ }) || match.day(dateString, {
width: 'short',
- context: 'formatting',
- valueCallback: valueCallback
- }) || match.day(string, {
+ context: 'formatting'
+ }) || match.day(dateString, {
width: 'narrow',
- context: 'formatting',
- valueCallback: valueCallback
- });
+ context: 'formatting'
+ }), valueCallback);
// T
case 'iiiii':
- return match.day(string, {
+ return mapValue(match.day(dateString, {
width: 'narrow',
- context: 'formatting',
- valueCallback: valueCallback
- });
+ context: 'formatting'
+ }), valueCallback);
// Tu
case 'iiiiii':
- return match.day(string, {
+ return mapValue(match.day(dateString, {
width: 'short',
- context: 'formatting',
- valueCallback: valueCallback
- }) || match.day(string, {
+ context: 'formatting'
+ }) || match.day(dateString, {
width: 'narrow',
- context: 'formatting',
- valueCallback: valueCallback
- });
+ context: 'formatting'
+ }), valueCallback);
// Tuesday
case 'iiii':
default:
- return match.day(string, {
+ return mapValue(match.day(dateString, {
width: 'wide',
- context: 'formatting',
- valueCallback: valueCallback
- }) || match.day(string, {
+ context: 'formatting'
+ }) || match.day(dateString, {
width: 'abbreviated',
- context: 'formatting',
- valueCallback: valueCallback
- }) || match.day(string, {
+ context: 'formatting'
+ }) || match.day(dateString, {
width: 'short',
- context: 'formatting',
- valueCallback: valueCallback
- }) || match.day(string, {
+ context: 'formatting'
+ }) || match.day(dateString, {
width: 'narrow',
- context: 'formatting',
- valueCallback: valueCallback
- });
+ context: 'formatting'
+ }), valueCallback);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 7;
- },
- set: function set(date, _flags, value, options) {
- date = setUTCISODay(date, value, options);
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
+ date = setUTCISODay(date, value);
date.setUTCHours(0, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']
- },
- // AM or PM
- a: {
- priority: 80,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return ISODayParser;
+ }(Parser);
+
+ function _typeof$e(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$e = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$e = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$e(obj);
+ }
+ function _classCallCheck$d(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$d(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$d(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$d(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$d(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$d(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$d(subClass, superClass);
+ }
+ function _setPrototypeOf$d(o, p) {
+ _setPrototypeOf$d = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$d(o, p);
+ }
+ function _createSuper$d(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$d();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$d(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$d(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$d(this, result);
+ };
+ }
+ function _possibleConstructorReturn$d(self, call) {
+ if (call && (_typeof$e(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$d(self);
+ }
+ function _assertThisInitialized$d(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$d() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$d(o) {
+ _getPrototypeOf$d = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$d(o);
+ }
+ function _defineProperty$d(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var AMPMParser = /*#__PURE__*/function (_Parser) {
+ _inherits$d(AMPMParser, _Parser);
+ var _super = _createSuper$d(AMPMParser);
+ function AMPMParser() {
+ var _this;
+ _classCallCheck$d(this, AMPMParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$d(_assertThisInitialized$d(_this), "priority", 80);
+ _defineProperty$d(_assertThisInitialized$d(_this), "incompatibleTokens", ['b', 'B', 'H', 'k', 't', 'T']);
+ return _this;
+ }
+ _createClass$d(AMPMParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'a':
case 'aa':
case 'aaa':
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
-
case 'aaaaa':
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
-
case 'aaaa':
default:
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);
return date;
- },
- incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T']
- },
- // AM, PM, midnight
- b: {
- priority: 80,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return AMPMParser;
+ }(Parser);
+
+ function _typeof$d(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$d = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$d = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$d(obj);
+ }
+ function _classCallCheck$c(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$c(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$c(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$c(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$c(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$c(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$c(subClass, superClass);
+ }
+ function _setPrototypeOf$c(o, p) {
+ _setPrototypeOf$c = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$c(o, p);
+ }
+ function _createSuper$c(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$c();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$c(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$c(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$c(this, result);
+ };
+ }
+ function _possibleConstructorReturn$c(self, call) {
+ if (call && (_typeof$d(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$c(self);
+ }
+ function _assertThisInitialized$c(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$c() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$c(o) {
+ _getPrototypeOf$c = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$c(o);
+ }
+ function _defineProperty$c(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {
+ _inherits$c(AMPMMidnightParser, _Parser);
+ var _super = _createSuper$c(AMPMMidnightParser);
+ function AMPMMidnightParser() {
+ var _this;
+ _classCallCheck$c(this, AMPMMidnightParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$c(_assertThisInitialized$c(_this), "priority", 80);
+ _defineProperty$c(_assertThisInitialized$c(_this), "incompatibleTokens", ['a', 'B', 'H', 'k', 't', 'T']);
+ return _this;
+ }
+ _createClass$c(AMPMMidnightParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'b':
case 'bb':
case 'bbb':
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
-
case 'bbbbb':
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
-
case 'bbbb':
default:
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);
return date;
- },
- incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T']
- },
- // in the morning, in the afternoon, in the evening, at night
- B: {
- priority: 80,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return AMPMMidnightParser;
+ }(Parser);
+
+ function _typeof$c(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$c = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$c = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$c(obj);
+ }
+ function _classCallCheck$b(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$b(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$b(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$b(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$b(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$b(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$b(subClass, superClass);
+ }
+ function _setPrototypeOf$b(o, p) {
+ _setPrototypeOf$b = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$b(o, p);
+ }
+ function _createSuper$b(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$b();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$b(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$b(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$b(this, result);
+ };
+ }
+ function _possibleConstructorReturn$b(self, call) {
+ if (call && (_typeof$c(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$b(self);
+ }
+ function _assertThisInitialized$b(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$b() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$b(o) {
+ _getPrototypeOf$b = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$b(o);
+ }
+ function _defineProperty$b(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var DayPeriodParser = /*#__PURE__*/function (_Parser) {
+ _inherits$b(DayPeriodParser, _Parser);
+ var _super = _createSuper$b(DayPeriodParser);
+ function DayPeriodParser() {
+ var _this;
+ _classCallCheck$b(this, DayPeriodParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$b(_assertThisInitialized$b(_this), "priority", 80);
+ _defineProperty$b(_assertThisInitialized$b(_this), "incompatibleTokens", ['a', 'b', 't', 'T']);
+ return _this;
+ }
+ _createClass$b(DayPeriodParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'B':
case 'BB':
case 'BBB':
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
-
case 'BBBBB':
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
-
case 'BBBB':
default:
- return match.dayPeriod(string, {
+ return match.dayPeriod(dateString, {
width: 'wide',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'abbreviated',
context: 'formatting'
- }) || match.dayPeriod(string, {
+ }) || match.dayPeriod(dateString, {
width: 'narrow',
context: 'formatting'
});
}
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);
return date;
- },
- incompatibleTokens: ['a', 'b', 't', 'T']
- },
- // Hour [1-12]
- h: {
- priority: 70,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return DayPeriodParser;
+ }(Parser);
+
+ function _typeof$b(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$b = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$b = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$b(obj);
+ }
+ function _classCallCheck$a(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$a(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$a(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$a(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$a(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$a(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$a(subClass, superClass);
+ }
+ function _setPrototypeOf$a(o, p) {
+ _setPrototypeOf$a = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$a(o, p);
+ }
+ function _createSuper$a(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$a();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$a(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$a(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$a(this, result);
+ };
+ }
+ function _possibleConstructorReturn$a(self, call) {
+ if (call && (_typeof$b(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$a(self);
+ }
+ function _assertThisInitialized$a(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$a() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$a(o) {
+ _getPrototypeOf$a = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$a(o);
+ }
+ function _defineProperty$a(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var Hour1to12Parser = /*#__PURE__*/function (_Parser) {
+ _inherits$a(Hour1to12Parser, _Parser);
+ var _super = _createSuper$a(Hour1to12Parser);
+ function Hour1to12Parser() {
+ var _this;
+ _classCallCheck$a(this, Hour1to12Parser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$a(_assertThisInitialized$a(_this), "priority", 70);
+ _defineProperty$a(_assertThisInitialized$a(_this), "incompatibleTokens", ['H', 'K', 'k', 't', 'T']);
+ return _this;
+ }
+ _createClass$a(Hour1to12Parser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'h':
- return parseNumericPattern(numericPatterns.hour12h, string);
-
+ return parseNumericPattern(numericPatterns.hour12h, dateString);
case 'ho':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'hour'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 12;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
var isPM = date.getUTCHours() >= 12;
-
if (isPM && value < 12) {
date.setUTCHours(value + 12, 0, 0, 0);
} else if (!isPM && value === 12) {
date.setUTCHours(0, 0, 0, 0);
} else {
date.setUTCHours(value, 0, 0, 0);
}
-
return date;
- },
- incompatibleTokens: ['H', 'K', 'k', 't', 'T']
- },
- // Hour [0-23]
- H: {
- priority: 70,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return Hour1to12Parser;
+ }(Parser);
+
+ function _typeof$a(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$a = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$a = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$a(obj);
+ }
+ function _classCallCheck$9(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$9(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$9(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$9(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$9(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$9(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$9(subClass, superClass);
+ }
+ function _setPrototypeOf$9(o, p) {
+ _setPrototypeOf$9 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$9(o, p);
+ }
+ function _createSuper$9(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$9();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$9(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$9(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$9(this, result);
+ };
+ }
+ function _possibleConstructorReturn$9(self, call) {
+ if (call && (_typeof$a(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$9(self);
+ }
+ function _assertThisInitialized$9(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$9() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$9(o) {
+ _getPrototypeOf$9 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$9(o);
+ }
+ function _defineProperty$9(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var Hour0to23Parser = /*#__PURE__*/function (_Parser) {
+ _inherits$9(Hour0to23Parser, _Parser);
+ var _super = _createSuper$9(Hour0to23Parser);
+ function Hour0to23Parser() {
+ var _this;
+ _classCallCheck$9(this, Hour0to23Parser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$9(_assertThisInitialized$9(_this), "priority", 70);
+ _defineProperty$9(_assertThisInitialized$9(_this), "incompatibleTokens", ['a', 'b', 'h', 'K', 'k', 't', 'T']);
+ return _this;
+ }
+ _createClass$9(Hour0to23Parser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'H':
- return parseNumericPattern(numericPatterns.hour23h, string);
-
+ return parseNumericPattern(numericPatterns.hour23h, dateString);
case 'Ho':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'hour'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 23;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCHours(value, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']
- },
- // Hour [0-11]
- K: {
- priority: 70,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return Hour0to23Parser;
+ }(Parser);
+
+ function _typeof$9(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$9 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$9 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$9(obj);
+ }
+ function _classCallCheck$8(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$8(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$8(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$8(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$8(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$8(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$8(subClass, superClass);
+ }
+ function _setPrototypeOf$8(o, p) {
+ _setPrototypeOf$8 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$8(o, p);
+ }
+ function _createSuper$8(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$8();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$8(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$8(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$8(this, result);
+ };
+ }
+ function _possibleConstructorReturn$8(self, call) {
+ if (call && (_typeof$9(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$8(self);
+ }
+ function _assertThisInitialized$8(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$8() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$8(o) {
+ _getPrototypeOf$8 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$8(o);
+ }
+ function _defineProperty$8(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var Hour0To11Parser = /*#__PURE__*/function (_Parser) {
+ _inherits$8(Hour0To11Parser, _Parser);
+ var _super = _createSuper$8(Hour0To11Parser);
+ function Hour0To11Parser() {
+ var _this;
+ _classCallCheck$8(this, Hour0To11Parser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$8(_assertThisInitialized$8(_this), "priority", 70);
+ _defineProperty$8(_assertThisInitialized$8(_this), "incompatibleTokens", ['h', 'H', 'k', 't', 'T']);
+ return _this;
+ }
+ _createClass$8(Hour0To11Parser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'K':
- return parseNumericPattern(numericPatterns.hour11h, string);
-
+ return parseNumericPattern(numericPatterns.hour11h, dateString);
case 'Ko':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'hour'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 11;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
var isPM = date.getUTCHours() >= 12;
-
if (isPM && value < 12) {
date.setUTCHours(value + 12, 0, 0, 0);
} else {
date.setUTCHours(value, 0, 0, 0);
}
-
return date;
- },
- incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T']
- },
- // Hour [1-24]
- k: {
- priority: 70,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return Hour0To11Parser;
+ }(Parser);
+
+ function _typeof$8(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$8 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$8 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$8(obj);
+ }
+ function _classCallCheck$7(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$7(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$7(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$7(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$7(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$7(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$7(subClass, superClass);
+ }
+ function _setPrototypeOf$7(o, p) {
+ _setPrototypeOf$7 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$7(o, p);
+ }
+ function _createSuper$7(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$7();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$7(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$7(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$7(this, result);
+ };
+ }
+ function _possibleConstructorReturn$7(self, call) {
+ if (call && (_typeof$8(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$7(self);
+ }
+ function _assertThisInitialized$7(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$7() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$7(o) {
+ _getPrototypeOf$7 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$7(o);
+ }
+ function _defineProperty$7(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var Hour1To24Parser = /*#__PURE__*/function (_Parser) {
+ _inherits$7(Hour1To24Parser, _Parser);
+ var _super = _createSuper$7(Hour1To24Parser);
+ function Hour1To24Parser() {
+ var _this;
+ _classCallCheck$7(this, Hour1To24Parser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$7(_assertThisInitialized$7(_this), "priority", 70);
+ _defineProperty$7(_assertThisInitialized$7(_this), "incompatibleTokens", ['a', 'b', 'h', 'H', 'K', 't', 'T']);
+ return _this;
+ }
+ _createClass$7(Hour1To24Parser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'k':
- return parseNumericPattern(numericPatterns.hour24h, string);
-
+ return parseNumericPattern(numericPatterns.hour24h, dateString);
case 'ko':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'hour'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 1 && value <= 24;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
var hours = value <= 24 ? value % 24 : value;
date.setUTCHours(hours, 0, 0, 0);
return date;
- },
- incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']
- },
- // Minute
- m: {
- priority: 60,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return Hour1To24Parser;
+ }(Parser);
+
+ function _typeof$7(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$7 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$7 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$7(obj);
+ }
+ function _classCallCheck$6(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$6(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$6(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$6(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$6(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$6(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$6(subClass, superClass);
+ }
+ function _setPrototypeOf$6(o, p) {
+ _setPrototypeOf$6 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$6(o, p);
+ }
+ function _createSuper$6(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$6();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$6(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$6(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$6(this, result);
+ };
+ }
+ function _possibleConstructorReturn$6(self, call) {
+ if (call && (_typeof$7(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$6(self);
+ }
+ function _assertThisInitialized$6(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$6() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$6(o) {
+ _getPrototypeOf$6 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$6(o);
+ }
+ function _defineProperty$6(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var MinuteParser = /*#__PURE__*/function (_Parser) {
+ _inherits$6(MinuteParser, _Parser);
+ var _super = _createSuper$6(MinuteParser);
+ function MinuteParser() {
+ var _this;
+ _classCallCheck$6(this, MinuteParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$6(_assertThisInitialized$6(_this), "priority", 60);
+ _defineProperty$6(_assertThisInitialized$6(_this), "incompatibleTokens", ['t', 'T']);
+ return _this;
+ }
+ _createClass$6(MinuteParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 'm':
- return parseNumericPattern(numericPatterns.minute, string);
-
+ return parseNumericPattern(numericPatterns.minute, dateString);
case 'mo':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'minute'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 59;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMinutes(value, 0, 0);
return date;
- },
- incompatibleTokens: ['t', 'T']
- },
- // Second
- s: {
- priority: 50,
- parse: function parse(string, token, match, _options) {
+ }
+ }]);
+ return MinuteParser;
+ }(Parser);
+
+ function _typeof$6(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$6 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$6 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$6(obj);
+ }
+ function _classCallCheck$5(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$5(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$5(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$5(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$5(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$5(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$5(subClass, superClass);
+ }
+ function _setPrototypeOf$5(o, p) {
+ _setPrototypeOf$5 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$5(o, p);
+ }
+ function _createSuper$5(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$5();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$5(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$5(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$5(this, result);
+ };
+ }
+ function _possibleConstructorReturn$5(self, call) {
+ if (call && (_typeof$6(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$5(self);
+ }
+ function _assertThisInitialized$5(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$5() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$5(o) {
+ _getPrototypeOf$5 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$5(o);
+ }
+ function _defineProperty$5(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var SecondParser = /*#__PURE__*/function (_Parser) {
+ _inherits$5(SecondParser, _Parser);
+ var _super = _createSuper$5(SecondParser);
+ function SecondParser() {
+ var _this;
+ _classCallCheck$5(this, SecondParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$5(_assertThisInitialized$5(_this), "priority", 50);
+ _defineProperty$5(_assertThisInitialized$5(_this), "incompatibleTokens", ['t', 'T']);
+ return _this;
+ }
+ _createClass$5(SecondParser, [{
+ key: "parse",
+ value: function parse(dateString, token, match) {
switch (token) {
case 's':
- return parseNumericPattern(numericPatterns.second, string);
-
+ return parseNumericPattern(numericPatterns.second, dateString);
case 'so':
- return match.ordinalNumber(string, {
+ return match.ordinalNumber(dateString, {
unit: 'second'
});
-
default:
- return parseNDigits(token.length, string);
+ return parseNDigits(token.length, dateString);
}
- },
- validate: function validate(_date, value, _options) {
+ }
+ }, {
+ key: "validate",
+ value: function validate(_date, value) {
return value >= 0 && value <= 59;
- },
- set: function set(date, _flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCSeconds(value, 0);
return date;
- },
- incompatibleTokens: ['t', 'T']
- },
- // Fraction of second
- S: {
- priority: 30,
- parse: function parse(string, token, _match, _options) {
+ }
+ }]);
+ return SecondParser;
+ }(Parser);
+
+ function _typeof$5(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$5 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$5 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$5(obj);
+ }
+ function _classCallCheck$4(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$4(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$4(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$4(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$4(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$4(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$4(subClass, superClass);
+ }
+ function _setPrototypeOf$4(o, p) {
+ _setPrototypeOf$4 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$4(o, p);
+ }
+ function _createSuper$4(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$4();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$4(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$4(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$4(this, result);
+ };
+ }
+ function _possibleConstructorReturn$4(self, call) {
+ if (call && (_typeof$5(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$4(self);
+ }
+ function _assertThisInitialized$4(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$4() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$4(o) {
+ _getPrototypeOf$4 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$4(o);
+ }
+ function _defineProperty$4(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {
+ _inherits$4(FractionOfSecondParser, _Parser);
+ var _super = _createSuper$4(FractionOfSecondParser);
+ function FractionOfSecondParser() {
+ var _this;
+ _classCallCheck$4(this, FractionOfSecondParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$4(_assertThisInitialized$4(_this), "priority", 30);
+ _defineProperty$4(_assertThisInitialized$4(_this), "incompatibleTokens", ['t', 'T']);
+ return _this;
+ }
+ _createClass$4(FractionOfSecondParser, [{
+ key: "parse",
+ value: function parse(dateString, token) {
var valueCallback = function valueCallback(value) {
return Math.floor(value * Math.pow(10, -token.length + 3));
};
-
- return parseNDigits(token.length, string, valueCallback);
- },
- set: function set(date, _flags, value, _options) {
+ return mapValue(parseNDigits(token.length, dateString), valueCallback);
+ }
+ }, {
+ key: "set",
+ value: function set(date, _flags, value) {
date.setUTCMilliseconds(value);
return date;
- },
- incompatibleTokens: ['t', 'T']
- },
- // Timezone (ISO-8601. +00:00 is `'Z'`)
- X: {
- priority: 10,
- parse: function parse(string, token, _match, _options) {
+ }
+ }]);
+ return FractionOfSecondParser;
+ }(Parser);
+
+ function _typeof$4(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$4 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$4 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$4(obj);
+ }
+ function _classCallCheck$3(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$3(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$3(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$3(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$3(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$3(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$3(subClass, superClass);
+ }
+ function _setPrototypeOf$3(o, p) {
+ _setPrototypeOf$3 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$3(o, p);
+ }
+ function _createSuper$3(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$3();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$3(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$3(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$3(this, result);
+ };
+ }
+ function _possibleConstructorReturn$3(self, call) {
+ if (call && (_typeof$4(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$3(self);
+ }
+ function _assertThisInitialized$3(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$3() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$3(o) {
+ _getPrototypeOf$3 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$3(o);
+ }
+ function _defineProperty$3(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {
+ _inherits$3(ISOTimezoneWithZParser, _Parser);
+ var _super = _createSuper$3(ISOTimezoneWithZParser);
+ function ISOTimezoneWithZParser() {
+ var _this;
+ _classCallCheck$3(this, ISOTimezoneWithZParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$3(_assertThisInitialized$3(_this), "priority", 10);
+ _defineProperty$3(_assertThisInitialized$3(_this), "incompatibleTokens", ['t', 'T', 'x']);
+ return _this;
+ }
+ _createClass$3(ISOTimezoneWithZParser, [{
+ key: "parse",
+ value: function parse(dateString, token) {
switch (token) {
case 'X':
- return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);
-
+ return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);
case 'XX':
- return parseTimezonePattern(timezonePatterns.basic, string);
-
+ return parseTimezonePattern(timezonePatterns.basic, dateString);
case 'XXXX':
- return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);
-
+ return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);
case 'XXXXX':
- return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);
-
+ return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);
case 'XXX':
default:
- return parseTimezonePattern(timezonePatterns.extended, string);
+ return parseTimezonePattern(timezonePatterns.extended, dateString);
}
- },
- set: function set(date, flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, flags, value) {
if (flags.timestampIsSet) {
return date;
}
-
return new Date(date.getTime() - value);
- },
- incompatibleTokens: ['t', 'T', 'x']
- },
- // Timezone (ISO-8601)
- x: {
- priority: 10,
- parse: function parse(string, token, _match, _options) {
+ }
+ }]);
+ return ISOTimezoneWithZParser;
+ }(Parser);
+
+ function _typeof$3(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$3 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$3 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$3(obj);
+ }
+ function _classCallCheck$2(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$2(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$2(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$2(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$2(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$2(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$2(subClass, superClass);
+ }
+ function _setPrototypeOf$2(o, p) {
+ _setPrototypeOf$2 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$2(o, p);
+ }
+ function _createSuper$2(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$2();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$2(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$2(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$2(this, result);
+ };
+ }
+ function _possibleConstructorReturn$2(self, call) {
+ if (call && (_typeof$3(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$2(self);
+ }
+ function _assertThisInitialized$2(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$2() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$2(o) {
+ _getPrototypeOf$2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$2(o);
+ }
+ function _defineProperty$2(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+
+ var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {
+ _inherits$2(ISOTimezoneParser, _Parser);
+ var _super = _createSuper$2(ISOTimezoneParser);
+ function ISOTimezoneParser() {
+ var _this;
+ _classCallCheck$2(this, ISOTimezoneParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$2(_assertThisInitialized$2(_this), "priority", 10);
+ _defineProperty$2(_assertThisInitialized$2(_this), "incompatibleTokens", ['t', 'T', 'X']);
+ return _this;
+ }
+ _createClass$2(ISOTimezoneParser, [{
+ key: "parse",
+ value: function parse(dateString, token) {
switch (token) {
case 'x':
- return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);
-
+ return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);
case 'xx':
- return parseTimezonePattern(timezonePatterns.basic, string);
-
+ return parseTimezonePattern(timezonePatterns.basic, dateString);
case 'xxxx':
- return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);
-
+ return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);
case 'xxxxx':
- return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);
-
+ return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);
case 'xxx':
default:
- return parseTimezonePattern(timezonePatterns.extended, string);
+ return parseTimezonePattern(timezonePatterns.extended, dateString);
}
- },
- set: function set(date, flags, value, _options) {
+ }
+ }, {
+ key: "set",
+ value: function set(date, flags, value) {
if (flags.timestampIsSet) {
return date;
}
-
return new Date(date.getTime() - value);
- },
- incompatibleTokens: ['t', 'T', 'X']
- },
- // Seconds timestamp
- t: {
- priority: 40,
- parse: function parse(string, _token, _match, _options) {
- return parseAnyDigitsSigned(string);
- },
- set: function set(_date, _flags, value, _options) {
+ }
+ }]);
+ return ISOTimezoneParser;
+ }(Parser);
+
+ function _typeof$2(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$2 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$2 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$2(obj);
+ }
+ function _classCallCheck$1(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties$1(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass$1(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties$1(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties$1(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits$1(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf$1(subClass, superClass);
+ }
+ function _setPrototypeOf$1(o, p) {
+ _setPrototypeOf$1 = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf$1(o, p);
+ }
+ function _createSuper$1(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct$1();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf$1(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf$1(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn$1(this, result);
+ };
+ }
+ function _possibleConstructorReturn$1(self, call) {
+ if (call && (_typeof$2(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized$1(self);
+ }
+ function _assertThisInitialized$1(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct$1() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf$1(o) {
+ _getPrototypeOf$1 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf$1(o);
+ }
+ function _defineProperty$1(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {
+ _inherits$1(TimestampSecondsParser, _Parser);
+ var _super = _createSuper$1(TimestampSecondsParser);
+ function TimestampSecondsParser() {
+ var _this;
+ _classCallCheck$1(this, TimestampSecondsParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty$1(_assertThisInitialized$1(_this), "priority", 40);
+ _defineProperty$1(_assertThisInitialized$1(_this), "incompatibleTokens", '*');
+ return _this;
+ }
+ _createClass$1(TimestampSecondsParser, [{
+ key: "parse",
+ value: function parse(dateString) {
+ return parseAnyDigitsSigned(dateString);
+ }
+ }, {
+ key: "set",
+ value: function set(_date, _flags, value) {
return [new Date(value * 1000), {
timestampIsSet: true
}];
- },
- incompatibleTokens: '*'
- },
- // Milliseconds timestamp
- T: {
- priority: 20,
- parse: function parse(string, _token, _match, _options) {
- return parseAnyDigitsSigned(string);
- },
- set: function set(_date, _flags, value, _options) {
+ }
+ }]);
+ return TimestampSecondsParser;
+ }(Parser);
+
+ function _typeof$1(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof$1 = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof$1 = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof$1(obj);
+ }
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ function _defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ function _createClass(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties(Constructor, staticProps);
+ return Constructor;
+ }
+ function _inherits(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) _setPrototypeOf(subClass, superClass);
+ }
+ function _setPrototypeOf(o, p) {
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+ return _setPrototypeOf(o, p);
+ }
+ function _createSuper(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct();
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf(Derived),
+ result;
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf(this).constructor;
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+ return _possibleConstructorReturn(this, result);
+ };
+ }
+ function _possibleConstructorReturn(self, call) {
+ if (call && (_typeof$1(call) === "object" || typeof call === "function")) {
+ return call;
+ }
+ return _assertThisInitialized(self);
+ }
+ function _assertThisInitialized(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+ return self;
+ }
+ function _isNativeReflectConstruct() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ function _getPrototypeOf(o) {
+ _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf(o);
+ }
+ function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {
+ _inherits(TimestampMillisecondsParser, _Parser);
+ var _super = _createSuper(TimestampMillisecondsParser);
+ function TimestampMillisecondsParser() {
+ var _this;
+ _classCallCheck(this, TimestampMillisecondsParser);
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ _this = _super.call.apply(_super, [this].concat(args));
+ _defineProperty(_assertThisInitialized(_this), "priority", 20);
+ _defineProperty(_assertThisInitialized(_this), "incompatibleTokens", '*');
+ return _this;
+ }
+ _createClass(TimestampMillisecondsParser, [{
+ key: "parse",
+ value: function parse(dateString) {
+ return parseAnyDigitsSigned(dateString);
+ }
+ }, {
+ key: "set",
+ value: function set(_date, _flags, value) {
return [new Date(value), {
timestampIsSet: true
}];
- },
- incompatibleTokens: '*'
- }
+ }
+ }]);
+ return TimestampMillisecondsParser;
+ }(Parser);
+
+ /*
+ * | | Unit | | Unit |
+ * |-----|--------------------------------|-----|--------------------------------|
+ * | a | AM, PM | A* | Milliseconds in day |
+ * | b | AM, PM, noon, midnight | B | Flexible day period |
+ * | c | Stand-alone local day of week | C* | Localized hour w/ day period |
+ * | d | Day of month | D | Day of year |
+ * | e | Local day of week | E | Day of week |
+ * | f | | F* | Day of week in month |
+ * | g* | Modified Julian day | G | Era |
+ * | h | Hour [1-12] | H | Hour [0-23] |
+ * | i! | ISO day of week | I! | ISO week of year |
+ * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
+ * | k | Hour [1-24] | K | Hour [0-11] |
+ * | l* | (deprecated) | L | Stand-alone month |
+ * | m | Minute | M | Month |
+ * | n | | N | |
+ * | o! | Ordinal number modifier | O* | Timezone (GMT) |
+ * | p | | P | |
+ * | q | Stand-alone quarter | Q | Quarter |
+ * | r* | Related Gregorian year | R! | ISO week-numbering year |
+ * | s | Second | S | Fraction of second |
+ * | t! | Seconds timestamp | T! | Milliseconds timestamp |
+ * | u | Extended year | U* | Cyclic year |
+ * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
+ * | w | Local week of year | W* | Week of month |
+ * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
+ * | y | Year (abs) | Y | Local week-numbering year |
+ * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
+ *
+ * Letters marked by * are not implemented but reserved by Unicode standard.
+ *
+ * Letters marked by ! are non-standard, but implemented by date-fns:
+ * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)
+ * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
+ * i.e. 7 for Sunday, 1 for Monday, etc.
+ * - `I` is ISO week of year, as opposed to `w` which is local week of year.
+ * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
+ * `R` is supposed to be used in conjunction with `I` and `i`
+ * for universal ISO week-numbering date, whereas
+ * `Y` is supposed to be used in conjunction with `w` and `e`
+ * for week-numbering date specific to the locale.
+ */
+
+ var parsers = {
+ G: new EraParser(),
+ y: new YearParser(),
+ Y: new LocalWeekYearParser(),
+ R: new ISOWeekYearParser(),
+ u: new ExtendedYearParser(),
+ Q: new QuarterParser(),
+ q: new StandAloneQuarterParser(),
+ M: new MonthParser(),
+ L: new StandAloneMonthParser(),
+ w: new LocalWeekParser(),
+ I: new ISOWeekParser(),
+ d: new DateParser(),
+ D: new DayOfYearParser(),
+ E: new DayParser(),
+ e: new LocalDayParser(),
+ c: new StandAloneLocalDayParser(),
+ i: new ISODayParser(),
+ a: new AMPMParser(),
+ b: new AMPMMidnightParser(),
+ B: new DayPeriodParser(),
+ h: new Hour1to12Parser(),
+ H: new Hour0to23Parser(),
+ K: new Hour0To11Parser(),
+ k: new Hour1To24Parser(),
+ m: new MinuteParser(),
+ s: new SecondParser(),
+ S: new FractionOfSecondParser(),
+ X: new ISOTimezoneWithZParser(),
+ x: new ISOTimezoneParser(),
+ t: new TimestampSecondsParser(),
+ T: new TimestampMillisecondsParser()
};
- var TIMEZONE_UNIT_PRIORITY = 10; // This RegExp consists of three parts separated by `|`:
+ function _typeof(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+ return _typeof(obj);
+ }
+ function _createForOfIteratorHelper(o, allowArrayLike) {
+ var it;
+ if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+ if (it) o = it;
+ var i = 0;
+ var F = function F() {};
+ return {
+ s: F,
+ n: function n() {
+ if (i >= o.length) return {
+ done: true
+ };
+ return {
+ done: false,
+ value: o[i++]
+ };
+ },
+ e: function e(_e) {
+ throw _e;
+ },
+ f: F
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ var normalCompletion = true,
+ didErr = false,
+ err;
+ return {
+ s: function s() {
+ it = o[Symbol.iterator]();
+ },
+ n: function n() {
+ var step = it.next();
+ normalCompletion = step.done;
+ return step;
+ },
+ e: function e(_e2) {
+ didErr = true;
+ err = _e2;
+ },
+ f: function f() {
+ try {
+ if (!normalCompletion && it["return"] != null) it["return"]();
+ } finally {
+ if (didErr) throw err;
+ }
+ }
+ };
+ }
+ function _unsupportedIterableToArray(o, minLen) {
+ if (!o) return;
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+ var n = Object.prototype.toString.call(o).slice(8, -1);
+ if (n === "Object" && o.constructor) n = o.constructor.name;
+ if (n === "Map" || n === "Set") return Array.from(o);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+ }
+ function _arrayLikeToArray(arr, len) {
+ if (len == null || len > arr.length) len = arr.length;
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
+ arr2[i] = arr[i];
+ }
+ return arr2;
+ }
// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token
// (one of the certain letters followed by `o`)
// - (\w)\1* matches any sequences of the same letter
// - '' matches two quote characters in a row
// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),
@@ -22624,11 +26419,11 @@
*
* @description
* Return the date parsed from string using the given format string.
*
* > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.
- * > See: https://git.io/fxCyr
+ * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
*
* The characters in the format string wrapped between two single quotes characters (') are escaped.
* Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
*
* Format of the format string is based on Unicode Technical Standard #35:
@@ -22712,32 +26507,32 @@
* | | | DDD | 001, 002, ..., 365, 366 | |
* | | | DDDD | ... | 2 |
* | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |
* | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |
* | | | EEEEE | M, T, W, T, F, S, S | |
- * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |
* | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |
* | | | io | 1st, 2nd, ..., 7th | 5 |
* | | | ii | 01, 02, ..., 07 | 5 |
* | | | iii | Mon, Tue, Wed, ..., Sun | 5 |
* | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |
* | | | iiiii | M, T, W, T, F, S, S | 5 |
- * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |
+ * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |
* | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |
* | | | eo | 2nd, 3rd, ..., 1st | 5 |
* | | | ee | 02, 03, ..., 01 | |
* | | | eee | Mon, Tue, Wed, ..., Sun | |
* | | | eeee | Monday, Tuesday, ..., Sunday | 2 |
* | | | eeeee | M, T, W, T, F, S, S | |
- * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |
* | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |
* | | | co | 2nd, 3rd, ..., 1st | 5 |
* | | | cc | 02, 03, ..., 01 | |
* | | | ccc | Mon, Tue, Wed, ..., Sun | |
* | | | cccc | Monday, Tuesday, ..., Sunday | 2 |
* | | | ccccc | M, T, W, T, F, S, S | |
- * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |
+ * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |
* | AM, PM | 80 | a..aaa | AM, PM | |
* | | | aaaa | a.m., p.m. | 2 |
* | | | aaaaa | a, p | |
* | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |
* | | | bbbb | a.m., p.m., noon, midnight | 2 |
@@ -22765,11 +26560,11 @@
* | | | ss | 00, 01, ..., 59 | |
* | Seconds timestamp | 40 | t | 512969520 | |
* | | | tt | ... | 2 |
* | Fraction of second | 30 | S | 0, 1, ..., 9 | |
* | | | SS | 00, 01, ..., 99 | |
- * | | | SSS | 000, 0001, ..., 999 | |
+ * | | | SSS | 000, 001, ..., 999 | |
* | | | SSSS | ... | 2 |
* | Milliseconds timestamp | 20 | T | 512969520900 | |
* | | | TT | ... | 2 |
* | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |
* | | | XX | -0800, +0530, Z | |
@@ -22847,14 +26642,14 @@
* - `o`: ordinal number modifier
* - `P`: long localized date
* - `p`: long localized time
*
* 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.
- * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr
+ * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
*
* 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.
- * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr
+ * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
*
* 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based
* on the given locale.
*
* using `en-US` locale: `P` => `MM/dd/yyyy`
@@ -22881,47 +26676,30 @@
*
* If parsing failed, `Invalid Date` will be returned.
* Invalid Date is a Date, whose time value is NaN.
* Time value of Date: http://es5.github.io/#x15.9.1.1
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
- * - Old `parse` was renamed to `toDate`.
- * Now `parse` is a new function which parses a string using a provided format.
- *
- * ```javascript
- * // Before v2.0.0
- * parse('2016-01-01')
- *
- * // v2.0.0 onward (toDate no longer accepts a string)
- * toDate(1392098430000) // Unix to timestamp
- * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date
- * parse('2016-01-01', 'yyyy-MM-dd', new Date())
- * ```
- *
* @param {String} dateString - the string to parse
* @param {String} formatString - the string of tokens
* @param {Date|Number} referenceDate - defines values missing from the parsed dateString
* @param {Object} [options] - an object with options.
* @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
* @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
* @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year
* @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;
- * see: https://git.io/fxCyr
+ * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
* @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;
- * see: https://git.io/fxCyr
+ * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
* @returns {Date} the parsed date
* @throws {TypeError} 3 arguments required
* @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
* @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
* @throws {RangeError} `options.locale` must contain `match` property
- * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
- * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr
- * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
- * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr
+ * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
+ * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
+ * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
+ * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
* @throws {RangeError} format string contains an unescaped latin alphabet character
*
* @example
* // Parse 11 February 2014 from middle-endian format:
* var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())
@@ -22934,151 +26712,122 @@
* locale: eo
* })
* //=> Sun Feb 28 2010 00:00:00
*/
- function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) {
+ function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, options) {
+ var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;
requiredArgs(3, arguments);
var dateString = String(dirtyDateString);
var formatString = String(dirtyFormatString);
- var options = dirtyOptions || {};
- var locale$1 = options.locale || locale;
-
- if (!locale$1.match) {
+ var defaultOptions = getDefaultOptions();
+ var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;
+ if (!locale.match) {
throw new RangeError('locale must contain match property');
}
+ var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
- var localeFirstWeekContainsDate = locale$1.options && locale$1.options.firstWeekContainsDate;
- var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);
- var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
-
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');
}
+ var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
- var localeWeekStartsOn = locale$1.options && locale$1.options.weekStartsOn;
- var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);
- var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
-
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
-
if (formatString === '') {
if (dateString === '') {
return toDate(dirtyReferenceDate);
} else {
return new Date(NaN);
}
}
-
var subFnOptions = {
firstWeekContainsDate: firstWeekContainsDate,
weekStartsOn: weekStartsOn,
- locale: locale$1 // If timezone isn't specified, it will be set to the system timezone
+ locale: locale
+ }; // If timezone isn't specified, it will be set to the system timezone
- };
- var setters = [{
- priority: TIMEZONE_UNIT_PRIORITY,
- subPriority: -1,
- set: dateToSystemTimezone,
- index: 0
- }];
- var i;
+ var setters = [new DateToSystemTimezoneSetter()];
var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {
var firstCharacter = substring[0];
-
- if (firstCharacter === 'p' || firstCharacter === 'P') {
- var longFormatter = longFormatters[firstCharacter];
- return longFormatter(substring, locale$1.formatLong, subFnOptions);
+ if (firstCharacter in longFormatters$1) {
+ var longFormatter = longFormatters$1[firstCharacter];
+ return longFormatter(substring, locale.formatLong);
}
-
return substring;
}).join('').match(formattingTokensRegExp);
var usedTokens = [];
-
- for (i = 0; i < tokens.length; i++) {
- var token = tokens[i];
-
- if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {
- throwProtectedError(token, formatString, dirtyDateString);
- }
-
- if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {
- throwProtectedError(token, formatString, dirtyDateString);
- }
-
- var firstCharacter = token[0];
- var parser = parsers[firstCharacter];
-
- if (parser) {
- var incompatibleTokens = parser.incompatibleTokens;
-
- if (Array.isArray(incompatibleTokens)) {
- var incompatibleToken = void 0;
-
- for (var _i = 0; _i < usedTokens.length; _i++) {
- var usedToken = usedTokens[_i].token;
-
- if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) {
- incompatibleToken = usedTokens[_i];
- break;
+ var _iterator = _createForOfIteratorHelper(tokens),
+ _step;
+ try {
+ var _loop = function _loop() {
+ var token = _step.value;
+ if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {
+ throwProtectedError(token, formatString, dirtyDateString);
+ }
+ if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {
+ throwProtectedError(token, formatString, dirtyDateString);
+ }
+ var firstCharacter = token[0];
+ var parser = parsers[firstCharacter];
+ if (parser) {
+ var incompatibleTokens = parser.incompatibleTokens;
+ if (Array.isArray(incompatibleTokens)) {
+ var incompatibleToken = usedTokens.find(function (usedToken) {
+ return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;
+ });
+ if (incompatibleToken) {
+ throw new RangeError("The format string mustn't contain `".concat(incompatibleToken.fullToken, "` and `").concat(token, "` at the same time"));
}
+ } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) {
+ throw new RangeError("The format string mustn't contain `".concat(token, "` and any other token at the same time"));
}
-
- if (incompatibleToken) {
- throw new RangeError("The format string mustn't contain `".concat(incompatibleToken.fullToken, "` and `").concat(token, "` at the same time"));
+ usedTokens.push({
+ token: firstCharacter,
+ fullToken: token
+ });
+ var parseResult = parser.run(dateString, token, locale.match, subFnOptions);
+ if (!parseResult) {
+ return {
+ v: new Date(NaN)
+ };
}
- } else if (parser.incompatibleTokens === '*' && usedTokens.length) {
- throw new RangeError("The format string mustn't contain `".concat(token, "` and any other token at the same time"));
- }
-
- usedTokens.push({
- token: firstCharacter,
- fullToken: token
- });
- var parseResult = parser.parse(dateString, token, locale$1.match, subFnOptions);
-
- if (!parseResult) {
- return new Date(NaN);
- }
-
- setters.push({
- priority: parser.priority,
- subPriority: parser.subPriority || 0,
- set: parser.set,
- validate: parser.validate,
- value: parseResult.value,
- index: setters.length
- });
- dateString = parseResult.rest;
- } else {
- if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
- throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');
- } // Replace two single quote characters with one single quote character
-
-
- if (token === "''") {
- token = "'";
- } else if (firstCharacter === "'") {
- token = cleanEscapedString(token);
- } // Cut token from string, or, if string doesn't match the token, return Invalid Date
-
-
- if (dateString.indexOf(token) === 0) {
- dateString = dateString.slice(token.length);
+ setters.push(parseResult.setter);
+ dateString = parseResult.rest;
} else {
- return new Date(NaN);
- }
- }
- } // Check if the remaining input contains something other than whitespace
+ if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
+ throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');
+ } // Replace two single quote characters with one single quote character
+ if (token === "''") {
+ token = "'";
+ } else if (firstCharacter === "'") {
+ token = cleanEscapedString(token);
+ } // Cut token from string, or, if string doesn't match the token, return Invalid Date
+ if (dateString.indexOf(token) === 0) {
+ dateString = dateString.slice(token.length);
+ } else {
+ return {
+ v: new Date(NaN)
+ };
+ }
+ }
+ };
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var _ret = _loop();
+ if (_typeof(_ret) === "object") return _ret.v;
+ } // Check if the remaining input contains something other than whitespace
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {
return new Date(NaN);
}
-
var uniquePrioritySetters = setters.map(function (setter) {
return setter.priority;
}).sort(function (a, b) {
return b - a;
}).filter(function (priority, index, array) {
@@ -23091,52 +26840,40 @@
});
}).map(function (setterArray) {
return setterArray[0];
});
var date = toDate(dirtyReferenceDate);
-
- if (isNaN(date)) {
+ if (isNaN(date.getTime())) {
return new Date(NaN);
} // Convert the date in system timezone to the same date in UTC+00:00 timezone.
- // This ensures that when UTC functions will be implemented, locales will be compatible with them.
- // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37
-
var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));
var flags = {};
+ var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),
+ _step2;
+ try {
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
+ var setter = _step2.value;
+ if (!setter.validate(utcDate, subFnOptions)) {
+ return new Date(NaN);
+ }
+ var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags)
- for (i = 0; i < uniquePrioritySetters.length; i++) {
- var setter = uniquePrioritySetters[i];
-
- if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) {
- return new Date(NaN);
+ if (Array.isArray(result)) {
+ utcDate = result[0];
+ assign(flags, result[1]); // Result is date
+ } else {
+ utcDate = result;
+ }
}
-
- var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags)
-
- if (result[0]) {
- utcDate = result[0];
- assign(flags, result[1]); // Result is date
- } else {
- utcDate = result;
- }
+ } catch (err) {
+ _iterator2.e(err);
+ } finally {
+ _iterator2.f();
}
-
return utcDate;
}
-
- function dateToSystemTimezone(date, flags) {
- if (flags.timestampIsSet) {
- return date;
- }
-
- var convertedDate = new Date(0);
- convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
- convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());
- return convertedDate;
- }
-
function cleanEscapedString(input) {
return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'");
}
/**
@@ -23146,14 +26883,10 @@
*
* @description
* Return the start of an hour for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the start of an hour
* @throws {TypeError} 1 argument required
*
* @example
@@ -23168,52 +26901,18 @@
date.setMinutes(0, 0, 0);
return date;
}
/**
- * @name startOfMinute
- * @category Minute Helpers
- * @summary Return the start of a minute for the given date.
- *
- * @description
- * Return the start of a minute for the given date.
- * The result will be in the local timezone.
- *
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
- * @param {Date|Number} date - the original date
- * @returns {Date} the start of a minute
- * @throws {TypeError} 1 argument required
- *
- * @example
- * // The start of a minute for 1 December 2014 22:15:45.400:
- * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))
- * //=> Mon Dec 01 2014 22:15:00
- */
-
- function startOfMinute(dirtyDate) {
- requiredArgs(1, arguments);
- var date = toDate(dirtyDate);
- date.setSeconds(0, 0);
- return date;
- }
-
- /**
* @name startOfSecond
* @category Second Helpers
* @summary Return the start of a second for the given date.
*
* @description
* Return the start of a second for the given date.
* The result will be in the local timezone.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
* @param {Date|Number} date - the original date
* @returns {Date} the start of a second
* @throws {TypeError} 1 argument required
*
* @example
@@ -23227,21 +26926,10 @@
var date = toDate(dirtyDate);
date.setMilliseconds(0);
return date;
}
- var MILLISECONDS_IN_HOUR = 3600000;
- var MILLISECONDS_IN_MINUTE = 60000;
- var DEFAULT_ADDITIONAL_DIGITS = 2;
- var patterns = {
- dateTimeDelimiter: /[T ]/,
- timeZoneDelimiter: /[Z ]/i,
- timezone: /([Z+-].*)$/
- };
- var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/;
- var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/;
- var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/;
/**
* @name parseISO
* @category Common Helpers
* @summary Parse ISO string
*
@@ -23252,94 +26940,59 @@
* ISO 8601: http://en.wikipedia.org/wiki/ISO_8601
*
* If the argument isn't a string, the function cannot parse the string or
* the values are invalid, it returns Invalid Date.
*
- * ### v2.0.0 breaking changes:
- *
- * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).
- *
- * - The previous `parse` implementation was renamed to `parseISO`.
- *
- * ```javascript
- * // Before v2.0.0
- * parse('2016-01-01')
- *
- * // v2.0.0 onward
- * parseISO('2016-01-01')
- * ```
- *
- * - `parseISO` now validates separate date and time values in ISO-8601 strings
- * and returns `Invalid Date` if the date is invalid.
- *
- * ```javascript
- * parseISO('2018-13-32')
- * //=> Invalid Date
- * ```
- *
- * - `parseISO` now doesn't fall back to `new Date` constructor
- * if it fails to parse a string argument. Instead, it returns `Invalid Date`.
- *
* @param {String} argument - the value to convert
* @param {Object} [options] - an object with options.
* @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format
* @returns {Date} the parsed date in the local time zone
* @throws {TypeError} 1 argument required
* @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2
*
* @example
* // Convert string '2014-02-11T11:30:30' to date:
- * var result = parseISO('2014-02-11T11:30:30')
+ * const result = parseISO('2014-02-11T11:30:30')
* //=> Tue Feb 11 2014 11:30:30
*
* @example
* // Convert string '+02014101' to date,
* // if the additional number of digits in the extended year format is 1:
- * var result = parseISO('+02014101', { additionalDigits: 1 })
+ * const result = parseISO('+02014101', { additionalDigits: 1 })
* //=> Fri Apr 11 2014 00:00:00
*/
- function parseISO(argument, dirtyOptions) {
+ function parseISO(argument, options) {
+ var _options$additionalDi;
requiredArgs(1, arguments);
- var options = dirtyOptions || {};
- var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : toInteger(options.additionalDigits);
-
+ var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);
if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {
throw new RangeError('additionalDigits must be 0, 1 or 2');
}
-
if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {
return new Date(NaN);
}
-
var dateStrings = splitDateString(argument);
var date;
-
if (dateStrings.date) {
var parseYearResult = parseYear(dateStrings.date, additionalDigits);
date = parseDate(parseYearResult.restDateString, parseYearResult.year);
}
-
- if (isNaN(date) || !date) {
+ if (!date || isNaN(date.getTime())) {
return new Date(NaN);
}
-
var timestamp = date.getTime();
var time = 0;
var offset;
-
if (dateStrings.time) {
time = parseTime(dateStrings.time);
-
- if (isNaN(time) || time === null) {
+ if (isNaN(time)) {
return new Date(NaN);
}
}
-
if (dateStrings.timezone) {
offset = parseTimezone(dateStrings.timezone);
-
if (isNaN(offset)) {
return new Date(NaN);
}
} else {
var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone
@@ -23351,172 +27004,151 @@
var result = new Date(0);
result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());
result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());
return result;
}
-
return new Date(timestamp + time + offset);
}
-
+ var patterns = {
+ dateTimeDelimiter: /[T ]/,
+ timeZoneDelimiter: /[Z ]/i,
+ timezone: /([Z+-].*)$/
+ };
+ var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/;
+ var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/;
+ var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/;
function splitDateString(dateString) {
var dateStrings = {};
var array = dateString.split(patterns.dateTimeDelimiter);
var timeString; // The regex match should only return at maximum two array elements.
// [date], [time], or [date, time].
if (array.length > 2) {
return dateStrings;
}
-
if (/:/.test(array[0])) {
- dateStrings.date = null;
timeString = array[0];
} else {
dateStrings.date = array[0];
timeString = array[1];
-
if (patterns.timeZoneDelimiter.test(dateStrings.date)) {
dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];
timeString = dateString.substr(dateStrings.date.length, dateString.length);
}
}
-
if (timeString) {
var token = patterns.timezone.exec(timeString);
-
if (token) {
dateStrings.time = timeString.replace(token[1], '');
dateStrings.timezone = token[1];
} else {
dateStrings.time = timeString;
}
}
-
return dateStrings;
}
-
function parseYear(dateString, additionalDigits) {
var regex = new RegExp('^(?:(\\d{4}|[+-]\\d{' + (4 + additionalDigits) + '})|(\\d{2}|[+-]\\d{' + (2 + additionalDigits) + '})$)');
var captures = dateString.match(regex); // Invalid ISO-formatted year
if (!captures) return {
- year: null
+ year: NaN,
+ restDateString: ''
};
- var year = captures[1] && parseInt(captures[1]);
- var century = captures[2] && parseInt(captures[2]);
+ var year = captures[1] ? parseInt(captures[1]) : null;
+ var century = captures[2] ? parseInt(captures[2]) : null; // either year or century is null, not both
+
return {
- year: century == null ? year : century * 100,
+ year: century === null ? year : century * 100,
restDateString: dateString.slice((captures[1] || captures[2]).length)
};
}
-
function parseDate(dateString, year) {
// Invalid ISO-formatted year
- if (year === null) return null;
+ if (year === null) return new Date(NaN);
var captures = dateString.match(dateRegex); // Invalid ISO-formatted string
- if (!captures) return null;
+ if (!captures) return new Date(NaN);
var isWeekDate = !!captures[4];
var dayOfYear = parseDateUnit(captures[1]);
var month = parseDateUnit(captures[2]) - 1;
var day = parseDateUnit(captures[3]);
var week = parseDateUnit(captures[4]);
var dayOfWeek = parseDateUnit(captures[5]) - 1;
-
if (isWeekDate) {
if (!validateWeekDate(year, week, dayOfWeek)) {
return new Date(NaN);
}
-
return dayOfISOWeekYear(year, week, dayOfWeek);
} else {
var date = new Date(0);
-
if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {
return new Date(NaN);
}
-
date.setUTCFullYear(year, month, Math.max(dayOfYear, day));
return date;
}
}
-
function parseDateUnit(value) {
return value ? parseInt(value) : 1;
}
-
function parseTime(timeString) {
var captures = timeString.match(timeRegex);
- if (!captures) return null; // Invalid ISO-formatted time
+ if (!captures) return NaN; // Invalid ISO-formatted time
var hours = parseTimeUnit(captures[1]);
var minutes = parseTimeUnit(captures[2]);
var seconds = parseTimeUnit(captures[3]);
-
if (!validateTime(hours, minutes, seconds)) {
return NaN;
}
-
- return hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000;
+ return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;
}
-
function parseTimeUnit(value) {
return value && parseFloat(value.replace(',', '.')) || 0;
}
-
function parseTimezone(timezoneString) {
if (timezoneString === 'Z') return 0;
var captures = timezoneString.match(timezoneRegex);
if (!captures) return 0;
var sign = captures[1] === '+' ? -1 : 1;
var hours = parseInt(captures[2]);
var minutes = captures[3] && parseInt(captures[3]) || 0;
-
if (!validateTimezone(hours, minutes)) {
return NaN;
}
-
- return sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE);
+ return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);
}
-
function dayOfISOWeekYear(isoWeekYear, week, day) {
var date = new Date(0);
date.setUTCFullYear(isoWeekYear, 0, 4);
var fourthOfJanuaryDay = date.getUTCDay() || 7;
var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;
date.setUTCDate(date.getUTCDate() + diff);
return date;
} // Validation functions
// February is null to handle the leap year (using ||)
-
var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-
function isLeapYearIndex(year) {
- return year % 400 === 0 || year % 4 === 0 && year % 100;
+ return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
}
-
function validateDate(year, month, date) {
return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));
}
-
function validateDayOfYearDate(year, dayOfYear) {
return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);
}
-
function validateWeekDate(_year, week, day) {
return week >= 1 && week <= 53 && day >= 0 && day <= 6;
}
-
function validateTime(hours, minutes, seconds) {
if (hours === 24) {
return minutes === 0 && seconds === 0;
}
-
return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;
}
-
function validateTimezone(_hours, minutes) {
return minutes >= 0 && minutes <= 59;
}
var FORMATS = {
@@ -23529,170 +27161,151 @@
week: 'PP',
month: 'MMM yyyy',
quarter: 'qqq - yyyy',
year: 'yyyy'
};
-
adapters._date.override({
_id: 'date-fns',
// DEBUG
+
formats: function formats() {
return FORMATS;
},
parse: function parse$1(value, fmt) {
if (value === null || typeof value === 'undefined') {
return null;
}
-
- var type = _typeof(value);
-
+ var type = _typeof$z(value);
if (type === 'number' || value instanceof Date) {
value = toDate(value);
} else if (type === 'string') {
if (typeof fmt === 'string') {
value = parse(value, fmt, new Date(), this.options);
} else {
value = parseISO(value, this.options);
}
}
-
return isValid(value) ? value.getTime() : null;
},
format: function format$1(time, fmt) {
return format(time, fmt, this.options);
},
add: function add(time, amount, unit) {
switch (unit) {
case 'millisecond':
return addMilliseconds(time, amount);
-
case 'second':
return addSeconds(time, amount);
-
case 'minute':
return addMinutes(time, amount);
-
case 'hour':
return addHours(time, amount);
-
case 'day':
return addDays(time, amount);
-
case 'week':
return addWeeks(time, amount);
-
case 'month':
return addMonths(time, amount);
-
case 'quarter':
return addQuarters(time, amount);
-
case 'year':
return addYears(time, amount);
-
default:
return time;
}
},
diff: function diff(max, min, unit) {
switch (unit) {
case 'millisecond':
return differenceInMilliseconds(max, min);
-
case 'second':
return differenceInSeconds(max, min);
-
case 'minute':
return differenceInMinutes(max, min);
-
case 'hour':
return differenceInHours(max, min);
-
case 'day':
return differenceInDays(max, min);
-
case 'week':
return differenceInWeeks(max, min);
-
case 'month':
return differenceInMonths(max, min);
-
case 'quarter':
return differenceInQuarters(max, min);
-
case 'year':
return differenceInYears(max, min);
-
default:
return 0;
}
},
startOf: function startOf(time, unit, weekday) {
switch (unit) {
case 'second':
return startOfSecond(time);
-
case 'minute':
return startOfMinute(time);
-
case 'hour':
return startOfHour(time);
-
case 'day':
return startOfDay(time);
-
case 'week':
return startOfWeek(time);
-
case 'isoWeek':
return startOfWeek(time, {
weekStartsOn: +weekday
});
-
case 'month':
return startOfMonth(time);
-
case 'quarter':
return startOfQuarter(time);
-
case 'year':
return startOfYear(time);
-
default:
return time;
}
},
endOf: function endOf(time, unit) {
switch (unit) {
case 'second':
return endOfSecond(time);
-
case 'minute':
return endOfMinute(time);
-
case 'hour':
return endOfHour(time);
-
case 'day':
return endOfDay(time);
-
case 'week':
return endOfWeek(time);
-
case 'month':
return endOfMonth(time);
-
case 'quarter':
return endOfQuarter(time);
-
case 'year':
return endOfYear(time);
-
default:
return time;
}
}
});
+ // for plugins
+ // match src/index.umd.ts in Chart.js
+ // except for platforms (not exported)
+ Chart.helpers = _objectSpread2({}, helpers);
+ Chart._adapters = adapters;
+ Chart.Animation = Animation;
+ Chart.Animations = Animations;
+ Chart.animator = animator;
+ Chart.controllers = registry.controllers.items;
+ Chart.DatasetController = DatasetController;
+ Chart.Element = Element;
+ Chart.elements = elements;
+ Chart.Interaction = Interaction;
+ Chart.layouts = layouts;
+ Chart.Scale = Scale;
+ Chart.Ticks = Ticks;
+ Object.assign(Chart, controllers, scales, elements, plugins);
+ Chart.Chart = Chart;
+
return Chart;
-})));
+}));