@nivo/scales
Advanced tools
Comparing version 0.73.0 to 0.74.0
@@ -14,2 +14,3 @@ 'use strict'; | ||
var d3Scale = require('d3-scale'); | ||
var d3Time = require('d3-time'); | ||
@@ -180,2 +181,6 @@ function _arrayLikeToArray(arr, len) { | ||
if (nice === true) scale.nice();else if (typeof nice === 'number') scale.nice(nice); | ||
return castLinearScale(scale, stacked); | ||
}; | ||
var castLinearScale = function castLinearScale(scale) { | ||
var stacked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
var typedScale = scale; | ||
@@ -198,2 +203,5 @@ typedScale.type = 'linear'; | ||
var scale = d3Scale.scaleBand().range(axis === 'x' ? [0, size] : [size, 0]).domain(data.all).round(round); | ||
return castBandScale(scale); | ||
}; | ||
var castBandScale = function castBandScale(scale) { | ||
var typedScale = scale; | ||
@@ -372,21 +380,41 @@ typedScale.type = 'band'; | ||
} | ||
var computeXYScalesForSeries = function computeXYScalesForSeries(_series, xScaleSpec, yScaleSpec, width, height) { | ||
var series = _series.map(function (serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (d) { | ||
return { | ||
data: _objectSpread2({}, d) | ||
}; | ||
}) | ||
}); | ||
var nestSerieData = function nestSerieData(serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (d) { | ||
return { | ||
data: _objectSpread2({}, d) | ||
}; | ||
}) | ||
}); | ||
}; | ||
var xy = generateSeriesXY(series, xScaleSpec, yScaleSpec); | ||
var getDatumAxisPosition = function getDatumAxisPosition(datum, axis, scale) { | ||
var _scale; | ||
if ('stacked' in scale && scale.stacked) { | ||
var stackedValue = datum.data[axis === 'x' ? 'xStacked' : 'yStacked']; | ||
if (stackedValue === null || stackedValue === undefined) { | ||
return null; | ||
} | ||
return scale(stackedValue); | ||
} | ||
return (_scale = scale(datum.data[axis])) !== null && _scale !== void 0 ? _scale : null; | ||
}; | ||
var computeXYScalesForSeries = function computeXYScalesForSeries(series, xScaleSpec, yScaleSpec, width, height) { | ||
var nestedSeries = series.map(function (serie) { | ||
return nestSerieData(serie); | ||
}); | ||
var xy = generateSeriesXY(nestedSeries, xScaleSpec, yScaleSpec); | ||
if ('stacked' in xScaleSpec && xScaleSpec.stacked === true) { | ||
stackX(xy, series); | ||
stackX(xy, nestedSeries); | ||
} | ||
if ('stacked' in yScaleSpec && yScaleSpec.stacked === true) { | ||
stackY(xy, series); | ||
stackY(xy, nestedSeries); | ||
} | ||
@@ -396,14 +424,16 @@ | ||
var yScale = computeScale(yScaleSpec, xy.y, height, 'y'); | ||
series.forEach(function (serie) { | ||
serie.data.forEach(function (d) { | ||
var _xScale, _yScale; | ||
d.position = { | ||
x: 'stacked' in xScale && xScale.stacked === true ? d.data.xStacked === null ? null : xScale(d.data.xStacked) : d.data.x === null ? null : (_xScale = xScale(d.data.x)) !== null && _xScale !== void 0 ? _xScale : null, | ||
y: 'stacked' in yScale && yScale.stacked === true ? d.data.yStacked === null ? null : yScale(d.data.yStacked) : d.data.y === null ? null : (_yScale = yScale(d.data.y)) !== null && _yScale !== void 0 ? _yScale : null | ||
}; | ||
var computedSeries = nestedSeries.map(function (serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (datum) { | ||
return _objectSpread2(_objectSpread2({}, datum), {}, { | ||
position: { | ||
x: getDatumAxisPosition(datum, 'x', xScale), | ||
y: getDatumAxisPosition(datum, 'y', yScale) | ||
} | ||
}); | ||
}) | ||
}); | ||
}); | ||
return _objectSpread2(_objectSpread2({}, xy), {}, { | ||
series: series, | ||
series: computedSeries, | ||
xScale: xScale, | ||
@@ -463,3 +493,5 @@ yScale: yScale | ||
{ | ||
var all = sortBy(uniq(values), function (v) { | ||
var all = sortBy(uniq(values).filter(function (v) { | ||
return v !== null; | ||
}), function (v) { | ||
return v; | ||
@@ -527,3 +559,3 @@ }); | ||
datum.data["".concat(axis, "Stacked")] = stackValue; | ||
datum.data[axis === 'x' ? 'xStacked' : 'yStacked'] = stackValue; | ||
} | ||
@@ -550,2 +582,153 @@ | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
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 _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); | ||
} | ||
var centerScale = function centerScale(scale) { | ||
var bandwidth = scale.bandwidth(); | ||
if (bandwidth === 0) return scale; | ||
var offset = bandwidth / 2; | ||
if (scale.round()) { | ||
offset = Math.round(offset); | ||
} | ||
return function (d) { | ||
var _scale; | ||
return ((_scale = scale(d)) !== null && _scale !== void 0 ? _scale : 0) + offset; | ||
}; | ||
}; | ||
var timeDay = d3Time.timeInterval(function (date) { | ||
return date.setHours(0, 0, 0, 0); | ||
}, function (date, step) { | ||
return date.setDate(date.getDate() + step); | ||
}, function (start, end) { | ||
return (end.getTime() - start.getTime()) / 864e5; | ||
}, function (date) { | ||
return Math.floor(date.getTime() / 864e5); | ||
}); | ||
var utcDay = d3Time.timeInterval(function (date) { | ||
return date.setUTCHours(0, 0, 0, 0); | ||
}, function (date, step) { | ||
return date.setUTCDate(date.getUTCDate() + step); | ||
}, function (start, end) { | ||
return (end.getTime() - start.getTime()) / 864e5; | ||
}, function (date) { | ||
return Math.floor(date.getTime() / 864e5); | ||
}); | ||
var timeByType = { | ||
millisecond: [d3Time.timeMillisecond, d3Time.utcMillisecond], | ||
second: [d3Time.timeSecond, d3Time.utcSecond], | ||
minute: [d3Time.timeMinute, d3Time.utcMinute], | ||
hour: [d3Time.timeHour, d3Time.utcHour], | ||
day: [timeDay, utcDay], | ||
week: [d3Time.timeWeek, d3Time.utcWeek], | ||
sunday: [d3Time.timeSunday, d3Time.utcSunday], | ||
monday: [d3Time.timeMonday, d3Time.utcMonday], | ||
tuesday: [d3Time.timeTuesday, d3Time.utcTuesday], | ||
wednesday: [d3Time.timeWednesday, d3Time.utcWednesday], | ||
thursday: [d3Time.timeThursday, d3Time.utcThursday], | ||
friday: [d3Time.timeFriday, d3Time.utcFriday], | ||
saturday: [d3Time.timeSaturday, d3Time.utcSaturday], | ||
month: [d3Time.timeMonth, d3Time.utcMonth], | ||
year: [d3Time.timeYear, d3Time.utcYear] | ||
}; | ||
var timeTypes = Object.keys(timeByType); | ||
var timeIntervalRegexp = new RegExp("^every\\s*(\\d+)?\\s*(".concat(timeTypes.join('|'), ")s?$"), 'i'); | ||
var isInteger = function isInteger(value) { | ||
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | ||
}; | ||
var getScaleTicks = function getScaleTicks(scale, spec) { | ||
if (Array.isArray(spec)) { | ||
return spec; | ||
} | ||
if (typeof spec === 'string' && 'useUTC' in scale) { | ||
var matches = spec.match(timeIntervalRegexp); | ||
if (matches) { | ||
var _matches = _slicedToArray(matches, 3), | ||
amount = _matches[1], | ||
type = _matches[2]; | ||
var timeType = timeByType[type][scale.useUTC ? 1 : 0]; | ||
if (type === 'day') { | ||
var _timeType$every$range, _timeType$every; | ||
var _scale$domain = scale.domain(), | ||
_scale$domain2 = _slicedToArray(_scale$domain, 2), | ||
start = _scale$domain2[0], | ||
originalStop = _scale$domain2[1]; | ||
var stop = new Date(originalStop); | ||
stop.setDate(stop.getDate() + 1); | ||
return (_timeType$every$range = (_timeType$every = timeType.every(Number(amount !== null && amount !== void 0 ? amount : 1))) === null || _timeType$every === void 0 ? void 0 : _timeType$every.range(start, stop)) !== null && _timeType$every$range !== void 0 ? _timeType$every$range : []; | ||
} | ||
if (amount === undefined) { | ||
return scale.ticks(timeType); | ||
} | ||
var interval = timeType.every(Number(amount)); | ||
if (interval) { | ||
return scale.ticks(interval); | ||
} | ||
} | ||
throw new Error("Invalid tickValues: ".concat(spec)); | ||
} | ||
if ('ticks' in scale) { | ||
if (spec === undefined) { | ||
return scale.ticks(); | ||
} | ||
if (isInteger(spec)) { | ||
return scale.ticks(spec); | ||
} | ||
} | ||
return scale.domain(); | ||
}; | ||
exports.castBandScale = castBandScale; | ||
exports.castLinearScale = castLinearScale; | ||
exports.centerScale = centerScale; | ||
exports.compareDateValues = compareDateValues; | ||
@@ -566,2 +749,3 @@ exports.compareValues = compareValues; | ||
exports.getOtherAxis = getOtherAxis; | ||
exports.getScaleTicks = getScaleTicks; | ||
exports.precisionCutOffs = precisionCutOffs; | ||
@@ -568,0 +752,0 @@ exports.precisionCutOffsByType = precisionCutOffsByType; |
@@ -8,2 +8,3 @@ import uniq from 'lodash/uniq'; | ||
import { scaleLinear, scalePoint, scaleBand, scaleUtc, scaleTime, scaleLog, scaleSymlog } from 'd3-scale'; | ||
import { timeInterval, timeMillisecond, utcMillisecond, timeSecond, utcSecond, timeMinute, utcMinute, timeHour, utcHour, timeWeek, utcWeek, timeSunday, utcSunday, timeMonday, utcMonday, timeTuesday, utcTuesday, timeWednesday, utcWednesday, timeThursday, utcThursday, timeFriday, utcFriday, timeSaturday, utcSaturday, timeMonth, utcMonth, timeYear, utcYear } from 'd3-time'; | ||
@@ -174,2 +175,6 @@ function _arrayLikeToArray(arr, len) { | ||
if (nice === true) scale.nice();else if (typeof nice === 'number') scale.nice(nice); | ||
return castLinearScale(scale, stacked); | ||
}; | ||
var castLinearScale = function castLinearScale(scale) { | ||
var stacked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
var typedScale = scale; | ||
@@ -192,2 +197,5 @@ typedScale.type = 'linear'; | ||
var scale = scaleBand().range(axis === 'x' ? [0, size] : [size, 0]).domain(data.all).round(round); | ||
return castBandScale(scale); | ||
}; | ||
var castBandScale = function castBandScale(scale) { | ||
var typedScale = scale; | ||
@@ -366,21 +374,41 @@ typedScale.type = 'band'; | ||
} | ||
var computeXYScalesForSeries = function computeXYScalesForSeries(_series, xScaleSpec, yScaleSpec, width, height) { | ||
var series = _series.map(function (serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (d) { | ||
return { | ||
data: _objectSpread2({}, d) | ||
}; | ||
}) | ||
}); | ||
var nestSerieData = function nestSerieData(serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (d) { | ||
return { | ||
data: _objectSpread2({}, d) | ||
}; | ||
}) | ||
}); | ||
}; | ||
var xy = generateSeriesXY(series, xScaleSpec, yScaleSpec); | ||
var getDatumAxisPosition = function getDatumAxisPosition(datum, axis, scale) { | ||
var _scale; | ||
if ('stacked' in scale && scale.stacked) { | ||
var stackedValue = datum.data[axis === 'x' ? 'xStacked' : 'yStacked']; | ||
if (stackedValue === null || stackedValue === undefined) { | ||
return null; | ||
} | ||
return scale(stackedValue); | ||
} | ||
return (_scale = scale(datum.data[axis])) !== null && _scale !== void 0 ? _scale : null; | ||
}; | ||
var computeXYScalesForSeries = function computeXYScalesForSeries(series, xScaleSpec, yScaleSpec, width, height) { | ||
var nestedSeries = series.map(function (serie) { | ||
return nestSerieData(serie); | ||
}); | ||
var xy = generateSeriesXY(nestedSeries, xScaleSpec, yScaleSpec); | ||
if ('stacked' in xScaleSpec && xScaleSpec.stacked === true) { | ||
stackX(xy, series); | ||
stackX(xy, nestedSeries); | ||
} | ||
if ('stacked' in yScaleSpec && yScaleSpec.stacked === true) { | ||
stackY(xy, series); | ||
stackY(xy, nestedSeries); | ||
} | ||
@@ -390,14 +418,16 @@ | ||
var yScale = computeScale(yScaleSpec, xy.y, height, 'y'); | ||
series.forEach(function (serie) { | ||
serie.data.forEach(function (d) { | ||
var _xScale, _yScale; | ||
d.position = { | ||
x: 'stacked' in xScale && xScale.stacked === true ? d.data.xStacked === null ? null : xScale(d.data.xStacked) : d.data.x === null ? null : (_xScale = xScale(d.data.x)) !== null && _xScale !== void 0 ? _xScale : null, | ||
y: 'stacked' in yScale && yScale.stacked === true ? d.data.yStacked === null ? null : yScale(d.data.yStacked) : d.data.y === null ? null : (_yScale = yScale(d.data.y)) !== null && _yScale !== void 0 ? _yScale : null | ||
}; | ||
var computedSeries = nestedSeries.map(function (serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (datum) { | ||
return _objectSpread2(_objectSpread2({}, datum), {}, { | ||
position: { | ||
x: getDatumAxisPosition(datum, 'x', xScale), | ||
y: getDatumAxisPosition(datum, 'y', yScale) | ||
} | ||
}); | ||
}) | ||
}); | ||
}); | ||
return _objectSpread2(_objectSpread2({}, xy), {}, { | ||
series: series, | ||
series: computedSeries, | ||
xScale: xScale, | ||
@@ -457,3 +487,5 @@ yScale: yScale | ||
{ | ||
var all = sortBy(uniq(values), function (v) { | ||
var all = sortBy(uniq(values).filter(function (v) { | ||
return v !== null; | ||
}), function (v) { | ||
return v; | ||
@@ -521,3 +553,3 @@ }); | ||
datum.data["".concat(axis, "Stacked")] = stackValue; | ||
datum.data[axis === 'x' ? 'xStacked' : 'yStacked'] = stackValue; | ||
} | ||
@@ -544,3 +576,151 @@ | ||
export { compareDateValues, compareValues, computeScale, computeXYScalesForSeries, createBandScale, createDateNormalizer, createLinearScale, createLogScale, createPointScale, createPrecisionMethod, createSymlogScale, createTimeScale, generateSeriesAxis, generateSeriesXY, getOtherAxis, precisionCutOffs, precisionCutOffsByType, stackAxis, timePrecisions }; | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
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 _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); | ||
} | ||
var centerScale = function centerScale(scale) { | ||
var bandwidth = scale.bandwidth(); | ||
if (bandwidth === 0) return scale; | ||
var offset = bandwidth / 2; | ||
if (scale.round()) { | ||
offset = Math.round(offset); | ||
} | ||
return function (d) { | ||
var _scale; | ||
return ((_scale = scale(d)) !== null && _scale !== void 0 ? _scale : 0) + offset; | ||
}; | ||
}; | ||
var timeDay = timeInterval(function (date) { | ||
return date.setHours(0, 0, 0, 0); | ||
}, function (date, step) { | ||
return date.setDate(date.getDate() + step); | ||
}, function (start, end) { | ||
return (end.getTime() - start.getTime()) / 864e5; | ||
}, function (date) { | ||
return Math.floor(date.getTime() / 864e5); | ||
}); | ||
var utcDay = timeInterval(function (date) { | ||
return date.setUTCHours(0, 0, 0, 0); | ||
}, function (date, step) { | ||
return date.setUTCDate(date.getUTCDate() + step); | ||
}, function (start, end) { | ||
return (end.getTime() - start.getTime()) / 864e5; | ||
}, function (date) { | ||
return Math.floor(date.getTime() / 864e5); | ||
}); | ||
var timeByType = { | ||
millisecond: [timeMillisecond, utcMillisecond], | ||
second: [timeSecond, utcSecond], | ||
minute: [timeMinute, utcMinute], | ||
hour: [timeHour, utcHour], | ||
day: [timeDay, utcDay], | ||
week: [timeWeek, utcWeek], | ||
sunday: [timeSunday, utcSunday], | ||
monday: [timeMonday, utcMonday], | ||
tuesday: [timeTuesday, utcTuesday], | ||
wednesday: [timeWednesday, utcWednesday], | ||
thursday: [timeThursday, utcThursday], | ||
friday: [timeFriday, utcFriday], | ||
saturday: [timeSaturday, utcSaturday], | ||
month: [timeMonth, utcMonth], | ||
year: [timeYear, utcYear] | ||
}; | ||
var timeTypes = Object.keys(timeByType); | ||
var timeIntervalRegexp = new RegExp("^every\\s*(\\d+)?\\s*(".concat(timeTypes.join('|'), ")s?$"), 'i'); | ||
var isInteger = function isInteger(value) { | ||
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | ||
}; | ||
var getScaleTicks = function getScaleTicks(scale, spec) { | ||
if (Array.isArray(spec)) { | ||
return spec; | ||
} | ||
if (typeof spec === 'string' && 'useUTC' in scale) { | ||
var matches = spec.match(timeIntervalRegexp); | ||
if (matches) { | ||
var _matches = _slicedToArray(matches, 3), | ||
amount = _matches[1], | ||
type = _matches[2]; | ||
var timeType = timeByType[type][scale.useUTC ? 1 : 0]; | ||
if (type === 'day') { | ||
var _timeType$every$range, _timeType$every; | ||
var _scale$domain = scale.domain(), | ||
_scale$domain2 = _slicedToArray(_scale$domain, 2), | ||
start = _scale$domain2[0], | ||
originalStop = _scale$domain2[1]; | ||
var stop = new Date(originalStop); | ||
stop.setDate(stop.getDate() + 1); | ||
return (_timeType$every$range = (_timeType$every = timeType.every(Number(amount !== null && amount !== void 0 ? amount : 1))) === null || _timeType$every === void 0 ? void 0 : _timeType$every.range(start, stop)) !== null && _timeType$every$range !== void 0 ? _timeType$every$range : []; | ||
} | ||
if (amount === undefined) { | ||
return scale.ticks(timeType); | ||
} | ||
var interval = timeType.every(Number(amount)); | ||
if (interval) { | ||
return scale.ticks(interval); | ||
} | ||
} | ||
throw new Error("Invalid tickValues: ".concat(spec)); | ||
} | ||
if ('ticks' in scale) { | ||
if (spec === undefined) { | ||
return scale.ticks(); | ||
} | ||
if (isInteger(spec)) { | ||
return scale.ticks(spec); | ||
} | ||
} | ||
return scale.domain(); | ||
}; | ||
export { castBandScale, castLinearScale, centerScale, compareDateValues, compareValues, computeScale, computeXYScalesForSeries, createBandScale, createDateNormalizer, createLinearScale, createLogScale, createPointScale, createPrecisionMethod, createSymlogScale, createTimeScale, generateSeriesAxis, generateSeriesXY, getOtherAxis, getScaleTicks, precisionCutOffs, precisionCutOffsByType, stackAxis, timePrecisions }; | ||
//# sourceMappingURL=nivo-scales.es.js.map |
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/uniq'), require('lodash/uniqBy'), require('lodash/sortBy'), require('lodash/last'), require('lodash/isDate'), require('d3-time-format'), require('d3-scale')) : | ||
typeof define === 'function' && define.amd ? define(['exports', 'lodash/uniq', 'lodash/uniqBy', 'lodash/sortBy', 'lodash/last', 'lodash/isDate', 'd3-time-format', 'd3-scale'], factory) : | ||
(global = global || self, factory(global.nivo = global.nivo || {}, global['lodash/uniq'], global['lodash/uniqBy'], global['lodash/sortBy'], global['lodash/last'], global['lodash/isDate'], global.d3, global.d3)); | ||
}(this, (function (exports, uniq, uniqBy, sortBy, last, isDate, d3TimeFormat, d3Scale) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/uniq'), require('lodash/uniqBy'), require('lodash/sortBy'), require('lodash/last'), require('lodash/isDate'), require('d3-time-format'), require('d3-scale'), require('d3-time')) : | ||
typeof define === 'function' && define.amd ? define(['exports', 'lodash/uniq', 'lodash/uniqBy', 'lodash/sortBy', 'lodash/last', 'lodash/isDate', 'd3-time-format', 'd3-scale', 'd3-time'], factory) : | ||
(global = global || self, factory(global.nivo = global.nivo || {}, global['lodash/uniq'], global['lodash/uniqBy'], global['lodash/sortBy'], global['lodash/last'], global['lodash/isDate'], global.d3, global.d3, global.d3)); | ||
}(this, (function (exports, uniq, uniqBy, sortBy, last, isDate, d3TimeFormat, d3Scale, d3Time) { 'use strict'; | ||
@@ -177,2 +177,6 @@ uniq = uniq && Object.prototype.hasOwnProperty.call(uniq, 'default') ? uniq['default'] : uniq; | ||
if (nice === true) scale.nice();else if (typeof nice === 'number') scale.nice(nice); | ||
return castLinearScale(scale, stacked); | ||
}; | ||
var castLinearScale = function castLinearScale(scale) { | ||
var stacked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
var typedScale = scale; | ||
@@ -195,2 +199,5 @@ typedScale.type = 'linear'; | ||
var scale = d3Scale.scaleBand().range(axis === 'x' ? [0, size] : [size, 0]).domain(data.all).round(round); | ||
return castBandScale(scale); | ||
}; | ||
var castBandScale = function castBandScale(scale) { | ||
var typedScale = scale; | ||
@@ -369,21 +376,41 @@ typedScale.type = 'band'; | ||
} | ||
var computeXYScalesForSeries = function computeXYScalesForSeries(_series, xScaleSpec, yScaleSpec, width, height) { | ||
var series = _series.map(function (serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (d) { | ||
return { | ||
data: _objectSpread2({}, d) | ||
}; | ||
}) | ||
}); | ||
var nestSerieData = function nestSerieData(serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (d) { | ||
return { | ||
data: _objectSpread2({}, d) | ||
}; | ||
}) | ||
}); | ||
}; | ||
var xy = generateSeriesXY(series, xScaleSpec, yScaleSpec); | ||
var getDatumAxisPosition = function getDatumAxisPosition(datum, axis, scale) { | ||
var _scale; | ||
if ('stacked' in scale && scale.stacked) { | ||
var stackedValue = datum.data[axis === 'x' ? 'xStacked' : 'yStacked']; | ||
if (stackedValue === null || stackedValue === undefined) { | ||
return null; | ||
} | ||
return scale(stackedValue); | ||
} | ||
return (_scale = scale(datum.data[axis])) !== null && _scale !== void 0 ? _scale : null; | ||
}; | ||
var computeXYScalesForSeries = function computeXYScalesForSeries(series, xScaleSpec, yScaleSpec, width, height) { | ||
var nestedSeries = series.map(function (serie) { | ||
return nestSerieData(serie); | ||
}); | ||
var xy = generateSeriesXY(nestedSeries, xScaleSpec, yScaleSpec); | ||
if ('stacked' in xScaleSpec && xScaleSpec.stacked === true) { | ||
stackX(xy, series); | ||
stackX(xy, nestedSeries); | ||
} | ||
if ('stacked' in yScaleSpec && yScaleSpec.stacked === true) { | ||
stackY(xy, series); | ||
stackY(xy, nestedSeries); | ||
} | ||
@@ -393,14 +420,16 @@ | ||
var yScale = computeScale(yScaleSpec, xy.y, height, 'y'); | ||
series.forEach(function (serie) { | ||
serie.data.forEach(function (d) { | ||
var _xScale, _yScale; | ||
d.position = { | ||
x: 'stacked' in xScale && xScale.stacked === true ? d.data.xStacked === null ? null : xScale(d.data.xStacked) : d.data.x === null ? null : (_xScale = xScale(d.data.x)) !== null && _xScale !== void 0 ? _xScale : null, | ||
y: 'stacked' in yScale && yScale.stacked === true ? d.data.yStacked === null ? null : yScale(d.data.yStacked) : d.data.y === null ? null : (_yScale = yScale(d.data.y)) !== null && _yScale !== void 0 ? _yScale : null | ||
}; | ||
var computedSeries = nestedSeries.map(function (serie) { | ||
return _objectSpread2(_objectSpread2({}, serie), {}, { | ||
data: serie.data.map(function (datum) { | ||
return _objectSpread2(_objectSpread2({}, datum), {}, { | ||
position: { | ||
x: getDatumAxisPosition(datum, 'x', xScale), | ||
y: getDatumAxisPosition(datum, 'y', yScale) | ||
} | ||
}); | ||
}) | ||
}); | ||
}); | ||
return _objectSpread2(_objectSpread2({}, xy), {}, { | ||
series: series, | ||
series: computedSeries, | ||
xScale: xScale, | ||
@@ -460,3 +489,5 @@ yScale: yScale | ||
{ | ||
var all = sortBy(uniq(values), function (v) { | ||
var all = sortBy(uniq(values).filter(function (v) { | ||
return v !== null; | ||
}), function (v) { | ||
return v; | ||
@@ -524,3 +555,3 @@ }); | ||
datum.data["".concat(axis, "Stacked")] = stackValue; | ||
datum.data[axis === 'x' ? 'xStacked' : 'yStacked'] = stackValue; | ||
} | ||
@@ -547,2 +578,153 @@ | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
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 _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); | ||
} | ||
var centerScale = function centerScale(scale) { | ||
var bandwidth = scale.bandwidth(); | ||
if (bandwidth === 0) return scale; | ||
var offset = bandwidth / 2; | ||
if (scale.round()) { | ||
offset = Math.round(offset); | ||
} | ||
return function (d) { | ||
var _scale; | ||
return ((_scale = scale(d)) !== null && _scale !== void 0 ? _scale : 0) + offset; | ||
}; | ||
}; | ||
var timeDay = d3Time.timeInterval(function (date) { | ||
return date.setHours(0, 0, 0, 0); | ||
}, function (date, step) { | ||
return date.setDate(date.getDate() + step); | ||
}, function (start, end) { | ||
return (end.getTime() - start.getTime()) / 864e5; | ||
}, function (date) { | ||
return Math.floor(date.getTime() / 864e5); | ||
}); | ||
var utcDay = d3Time.timeInterval(function (date) { | ||
return date.setUTCHours(0, 0, 0, 0); | ||
}, function (date, step) { | ||
return date.setUTCDate(date.getUTCDate() + step); | ||
}, function (start, end) { | ||
return (end.getTime() - start.getTime()) / 864e5; | ||
}, function (date) { | ||
return Math.floor(date.getTime() / 864e5); | ||
}); | ||
var timeByType = { | ||
millisecond: [d3Time.timeMillisecond, d3Time.utcMillisecond], | ||
second: [d3Time.timeSecond, d3Time.utcSecond], | ||
minute: [d3Time.timeMinute, d3Time.utcMinute], | ||
hour: [d3Time.timeHour, d3Time.utcHour], | ||
day: [timeDay, utcDay], | ||
week: [d3Time.timeWeek, d3Time.utcWeek], | ||
sunday: [d3Time.timeSunday, d3Time.utcSunday], | ||
monday: [d3Time.timeMonday, d3Time.utcMonday], | ||
tuesday: [d3Time.timeTuesday, d3Time.utcTuesday], | ||
wednesday: [d3Time.timeWednesday, d3Time.utcWednesday], | ||
thursday: [d3Time.timeThursday, d3Time.utcThursday], | ||
friday: [d3Time.timeFriday, d3Time.utcFriday], | ||
saturday: [d3Time.timeSaturday, d3Time.utcSaturday], | ||
month: [d3Time.timeMonth, d3Time.utcMonth], | ||
year: [d3Time.timeYear, d3Time.utcYear] | ||
}; | ||
var timeTypes = Object.keys(timeByType); | ||
var timeIntervalRegexp = new RegExp("^every\\s*(\\d+)?\\s*(".concat(timeTypes.join('|'), ")s?$"), 'i'); | ||
var isInteger = function isInteger(value) { | ||
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | ||
}; | ||
var getScaleTicks = function getScaleTicks(scale, spec) { | ||
if (Array.isArray(spec)) { | ||
return spec; | ||
} | ||
if (typeof spec === 'string' && 'useUTC' in scale) { | ||
var matches = spec.match(timeIntervalRegexp); | ||
if (matches) { | ||
var _matches = _slicedToArray(matches, 3), | ||
amount = _matches[1], | ||
type = _matches[2]; | ||
var timeType = timeByType[type][scale.useUTC ? 1 : 0]; | ||
if (type === 'day') { | ||
var _timeType$every$range, _timeType$every; | ||
var _scale$domain = scale.domain(), | ||
_scale$domain2 = _slicedToArray(_scale$domain, 2), | ||
start = _scale$domain2[0], | ||
originalStop = _scale$domain2[1]; | ||
var stop = new Date(originalStop); | ||
stop.setDate(stop.getDate() + 1); | ||
return (_timeType$every$range = (_timeType$every = timeType.every(Number(amount !== null && amount !== void 0 ? amount : 1))) === null || _timeType$every === void 0 ? void 0 : _timeType$every.range(start, stop)) !== null && _timeType$every$range !== void 0 ? _timeType$every$range : []; | ||
} | ||
if (amount === undefined) { | ||
return scale.ticks(timeType); | ||
} | ||
var interval = timeType.every(Number(amount)); | ||
if (interval) { | ||
return scale.ticks(interval); | ||
} | ||
} | ||
throw new Error("Invalid tickValues: ".concat(spec)); | ||
} | ||
if ('ticks' in scale) { | ||
if (spec === undefined) { | ||
return scale.ticks(); | ||
} | ||
if (isInteger(spec)) { | ||
return scale.ticks(spec); | ||
} | ||
} | ||
return scale.domain(); | ||
}; | ||
exports.castBandScale = castBandScale; | ||
exports.castLinearScale = castLinearScale; | ||
exports.centerScale = centerScale; | ||
exports.compareDateValues = compareDateValues; | ||
@@ -563,2 +745,3 @@ exports.compareValues = compareValues; | ||
exports.getOtherAxis = getOtherAxis; | ||
exports.getScaleTicks = getScaleTicks; | ||
exports.precisionCutOffs = precisionCutOffs; | ||
@@ -565,0 +748,0 @@ exports.precisionCutOffsByType = precisionCutOffsByType; |
@@ -0,3 +1,5 @@ | ||
import { ScaleBand as D3ScaleBand } from 'd3-scale'; | ||
import { ComputedSerieAxis, ScaleBand, ScaleBandSpec, StringValue, ScaleAxis } from './types'; | ||
export declare const createBandScale: <Input extends StringValue>({ round }: ScaleBandSpec, data: ComputedSerieAxis<Input>, size: number, axis: ScaleAxis) => ScaleBand<Input>; | ||
export declare const castBandScale: <Input>(scale: D3ScaleBand<Input>) => ScaleBand<Input>; | ||
//# sourceMappingURL=bandScale.d.ts.map |
@@ -1,2 +0,2 @@ | ||
import { ScaleAxis, ScaleSpec, Series, ScaleValue, SerieAxis, ComputedSerieAxis } from './types'; | ||
import { ScaleAxis, ScaleSpec, ScaleValue, SerieAxis, ComputedSerieAxis } from './types'; | ||
declare type XY = ReturnType<typeof generateSeriesXY>; | ||
@@ -9,22 +9,25 @@ declare type StackedXY = { | ||
}; | ||
declare type InputXYSeries = Record<'x' | 'y', number | string | Date | null>; | ||
interface Data { | ||
x: number; | ||
xStacked: number | null; | ||
y: number; | ||
yStacked: number | null; | ||
[key: string]: number | null; | ||
interface SerieDatum { | ||
x: number | string | Date; | ||
xStacked?: number | null; | ||
y: number | string | Date; | ||
yStacked?: number | null; | ||
} | ||
declare type XYSeries = InputXYSeries & { | ||
data: Data[]; | ||
declare type Serie<S = never, D extends SerieDatum = SerieDatum> = S & { | ||
data: D[]; | ||
}; | ||
interface ComputedXYSeries extends InputXYSeries { | ||
data: Array<{ | ||
data: Data; | ||
declare type NestedSerie<S = never, D extends SerieDatum = SerieDatum> = S & { | ||
data: { | ||
data: D; | ||
}[]; | ||
}; | ||
export declare type ComputedSerie<S = never, D extends SerieDatum = SerieDatum> = S & { | ||
data: { | ||
data: D; | ||
position: { | ||
x: ScaleValue | null; | ||
y: ScaleValue | null; | ||
x: number | null; | ||
y: number | null; | ||
}; | ||
}>; | ||
} | ||
}[]; | ||
}; | ||
export declare const getOtherAxis: (axis: ScaleAxis) => ScaleAxis; | ||
@@ -34,6 +37,13 @@ export declare const compareValues: (a: string | number, b: string | number) => boolean; | ||
export declare function computeScale<Input extends ScaleValue>(spec: ScaleSpec, data: ComputedSerieAxis<any>, size: number, axis: ScaleAxis): import("./types").ScaleSymlog | import("d3-scale").ScaleLogarithmic<number, number, never> | import("./types").ScaleLinear<number> | import("./types").ScalePoint<Input> | import("./types").ScaleBand<Input> | import("./types").ScaleTime<Date | import("d3-scale").NumberValue>; | ||
export declare const computeXYScalesForSeries: (_series: XYSeries[], xScaleSpec: ScaleSpec, yScaleSpec: ScaleSpec, width: number, height: number) => { | ||
series: ComputedXYSeries[]; | ||
xScale: import("./types").ScaleSymlog | import("d3-scale").ScaleLogarithmic<number, number, never> | import("./types").ScaleLinear<number> | import("./types").ScaleTime<Date | import("d3-scale").NumberValue> | import("./types").ScalePoint<ScaleValue> | import("./types").ScaleBand<ScaleValue>; | ||
yScale: import("./types").ScaleSymlog | import("d3-scale").ScaleLogarithmic<number, number, never> | import("./types").ScaleLinear<number> | import("./types").ScaleTime<Date | import("d3-scale").NumberValue> | import("./types").ScalePoint<ScaleValue> | import("./types").ScaleBand<ScaleValue>; | ||
/** | ||
* Compute x/y d3 scales from an array of data series, and scale specifications. | ||
* | ||
* We use generics as it's not uncommon to have extra properties such as an id | ||
* added to the series, or extra props on data, in such case, you should override | ||
* the default types. | ||
*/ | ||
export declare const computeXYScalesForSeries: <S = never, D extends SerieDatum = SerieDatum>(series: Serie<S, D>[], xScaleSpec: ScaleSpec, yScaleSpec: ScaleSpec, width: number, height: number) => { | ||
series: ComputedSerie<S, D>[]; | ||
xScale: import("./types").ScaleSymlog | import("d3-scale").ScaleLogarithmic<number, number, never> | import("./types").ScaleLinear<number> | import("./types").ScaleTime<Date | import("d3-scale").NumberValue> | import("./types").ScalePoint<D["x"]> | import("./types").ScaleBand<D["x"]>; | ||
yScale: import("./types").ScaleSymlog | import("d3-scale").ScaleLogarithmic<number, number, never> | import("./types").ScaleLinear<number> | import("./types").ScaleTime<Date | import("d3-scale").NumberValue> | import("./types").ScalePoint<D["y"]> | import("./types").ScaleBand<D["y"]>; | ||
x: { | ||
@@ -50,3 +60,3 @@ all: unknown[]; | ||
}; | ||
export declare const generateSeriesXY: <XValue extends ScaleValue, YValue extends ScaleValue>(series: Series<XValue, YValue>, xScaleSpec: ScaleSpec, yScaleSpec: ScaleSpec) => { | ||
export declare const generateSeriesXY: <S = never, D extends SerieDatum = SerieDatum>(series: NestedSerie<S, D>[], xScaleSpec: ScaleSpec, yScaleSpec: ScaleSpec) => { | ||
x: { | ||
@@ -79,4 +89,4 @@ all: unknown[]; | ||
}; | ||
export declare const stackAxis: (axis: ScaleAxis, xy: StackedXY, series: ComputedXYSeries[]) => void; | ||
export declare const stackAxis: <S = never, D extends SerieDatum = SerieDatum>(axis: ScaleAxis, xy: StackedXY, series: NestedSerie<S, D>[]) => void; | ||
export {}; | ||
//# sourceMappingURL=compute.d.ts.map |
@@ -9,3 +9,4 @@ export * from './compute'; | ||
export * from './bandScale'; | ||
export * from './ticks'; | ||
export * from './types'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -1,4 +0,5 @@ | ||
import { NumberValue } from 'd3-scale'; | ||
import { NumberValue, ScaleLinear as D3ScaleLinear } from 'd3-scale'; | ||
import { ScaleLinearSpec, ScaleLinear, ComputedSerieAxis, ScaleAxis } from './types'; | ||
export declare const createLinearScale: <Output extends NumberValue>({ min, max, stacked, reverse, clamp, nice, }: ScaleLinearSpec, data: ComputedSerieAxis<Output>, size: number, axis: ScaleAxis) => ScaleLinear<number>; | ||
export declare const castLinearScale: <Range_1, Output>(scale: D3ScaleLinear<Range_1, Output, never>, stacked?: boolean) => ScaleLinear<number>; | ||
//# sourceMappingURL=linearScale.d.ts.map |
@@ -89,2 +89,4 @@ import { ScaleLinear as D3ScaleLinear, ScalePoint as D3ScalePoint, ScaleBand as D3ScaleBand, ScaleLogarithmic as D3ScaleLogarithmic, ScaleSymLog as D3ScaleSymLog, ScaleTime as D3ScaleTime } from 'd3-scale'; | ||
} | ||
export declare type AnyScale = Scale<any, any>; | ||
export declare type ScaleWithBandwidth = ScaleBand<any> | ScalePoint<any>; | ||
export declare type Series<XValue extends ScaleValue, YValue extends ScaleValue> = { | ||
@@ -110,2 +112,3 @@ data: { | ||
}; | ||
export declare type TicksSpec<Value extends ScaleValue> = number | string | Value[]; | ||
//# sourceMappingURL=types.d.ts.map |
{ | ||
"name": "@nivo/scales", | ||
"version": "0.73.0", | ||
"version": "0.74.0", | ||
"license": "MIT", | ||
@@ -31,2 +31,3 @@ "author": { | ||
"@types/d3-scale": "^3.2.2", | ||
"@types/d3-time": "^1.1.1", | ||
"@types/d3-time-format": "^3.0.0" | ||
@@ -37,3 +38,3 @@ }, | ||
}, | ||
"gitHead": "919f213600a08609939198ea743f7dbde9a572e2" | ||
"gitHead": "5d387c6723bb384f276d2b6ce15ca49c0e49948a" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
252037
31
2154
3