@carbon/charts 0.30.7 → 0.30.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/build/demo/data/bar.d.ts +56 -94
- package/build/demo/data/bubble.d.ts +58 -13
- package/build/demo/data/donut.d.ts +3 -6
- package/build/demo/data/line.d.ts +35 -35
- package/build/demo/data/pie.d.ts +3 -6
- package/build/demo/data/scatter.d.ts +33 -20
- package/build/demo/data/step.d.ts +15 -16
- package/build/demo/data/time-series-axis.d.ts +12 -48
- package/build/src/charts/bar-grouped.d.ts +2 -2
- package/build/src/charts/bar-simple.d.ts +2 -4
- package/build/src/components/essentials/legend.d.ts +0 -4
- package/build/src/components/essentials/tooltip-bar.d.ts +1 -1
- package/build/src/components/essentials/tooltip-pie.d.ts +5 -0
- package/build/src/components/essentials/tooltip-scatter.d.ts +1 -1
- package/build/src/components/graphs/bar-grouped.d.ts +6 -4
- package/build/src/components/graphs/bar-simple.d.ts +0 -1
- package/build/src/components/graphs/bar-stacked.d.ts +0 -1
- package/build/src/components/graphs/bubble.d.ts +0 -1
- package/build/src/components/graphs/line.d.ts +3 -1
- package/build/src/components/graphs/pie.d.ts +0 -1
- package/build/src/components/graphs/scatter.d.ts +0 -1
- package/build/src/components/index.d.ts +1 -0
- package/build/src/interfaces/axis-scales.d.ts +4 -16
- package/build/src/interfaces/charts.d.ts +23 -1
- package/build/src/interfaces/enums.d.ts +0 -4
- package/build/src/model-pie.d.ts +1 -7
- package/build/src/model.d.ts +31 -13
- package/build/src/services/scales-cartesian.d.ts +11 -3
- package/build/src/tools.d.ts +2 -2
- package/build/stories/tutorials.stories.d.ts +1 -0
- package/bundle.js +1 -1
- package/charts/bar-grouped.d.ts +2 -2
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.d.ts +2 -4
- package/charts/bar-simple.js +0 -2
- package/charts/bar-simple.js.map +1 -1
- package/charts/donut.js +2 -2
- package/charts/donut.js.map +1 -1
- package/charts/pie.js +2 -2
- package/charts/pie.js.map +1 -1
- package/components/axes/grid.js +10 -17
- package/components/axes/grid.js.map +1 -1
- package/components/essentials/legend.d.ts +0 -4
- package/components/essentials/legend.js +8 -22
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/tooltip-bar.d.ts +1 -1
- package/components/essentials/tooltip-bar.js +12 -4
- package/components/essentials/tooltip-bar.js.map +1 -1
- package/components/essentials/tooltip-pie.d.ts +5 -0
- package/components/essentials/tooltip-pie.js +40 -0
- package/components/essentials/tooltip-pie.js.map +1 -0
- package/components/essentials/tooltip-scatter.d.ts +1 -1
- package/components/essentials/tooltip-scatter.js +8 -6
- package/components/essentials/tooltip-scatter.js.map +1 -1
- package/components/essentials/tooltip.js +13 -16
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/bar-grouped.d.ts +6 -4
- package/components/graphs/bar-grouped.js +58 -30
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.d.ts +0 -1
- package/components/graphs/bar-simple.js +10 -28
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.d.ts +0 -1
- package/components/graphs/bar-stacked.js +27 -108
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/bubble.d.ts +0 -1
- package/components/graphs/bubble.js +16 -20
- package/components/graphs/bubble.js.map +1 -1
- package/components/graphs/donut.js +1 -1
- package/components/graphs/donut.js.map +1 -1
- package/components/graphs/line.d.ts +3 -1
- package/components/graphs/line.js +41 -30
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/pie.d.ts +0 -1
- package/components/graphs/pie.js +11 -18
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/scatter.d.ts +0 -1
- package/components/graphs/scatter.js +24 -39
- package/components/graphs/scatter.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.js +1 -0
- package/components/index.js.map +1 -1
- package/configuration.js +7 -0
- package/configuration.js.map +1 -1
- package/demo/data/bar.d.ts +56 -94
- package/demo/data/bar.js +106 -271
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bubble.d.ts +58 -13
- package/demo/data/bubble.js +74 -174
- package/demo/data/bubble.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/donut.d.ts +3 -6
- package/demo/data/index.js +22 -4
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.d.ts +35 -35
- package/demo/data/line.js +70 -196
- package/demo/data/line.js.map +1 -1
- package/demo/data/pie.d.ts +3 -6
- package/demo/data/pie.js +8 -10
- package/demo/data/pie.js.map +1 -1
- package/demo/data/scatter.d.ts +33 -20
- package/demo/data/scatter.js +50 -68
- package/demo/data/scatter.js.map +1 -1
- package/demo/data/step.d.ts +15 -16
- package/demo/data/time-series-axis.d.ts +12 -48
- package/demo/data/time-series-axis.js +34 -46
- package/demo/data/time-series-axis.js.map +1 -1
- package/demo/styles.css +28 -0
- package/demo/styles.css.map +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/styles.min.css.map +1 -1
- package/demo/tsconfig.tsbuildinfo +36 -35
- package/interfaces/axis-scales.d.ts +4 -16
- package/interfaces/axis-scales.js.map +1 -1
- package/interfaces/charts.d.ts +23 -1
- package/interfaces/charts.js.map +1 -1
- package/interfaces/enums.d.ts +0 -4
- package/interfaces/enums.js +0 -5
- package/interfaces/enums.js.map +1 -1
- package/model-pie.d.ts +1 -7
- package/model-pie.js +2 -107
- package/model-pie.js.map +1 -1
- package/model.d.ts +31 -13
- package/model.js +199 -75
- package/model.js.map +1 -1
- package/package.json +3 -1
- package/services/scales-cartesian.d.ts +11 -3
- package/services/scales-cartesian.js +104 -122
- package/services/scales-cartesian.js.map +1 -1
- package/tools.d.ts +2 -2
- package/tools.js +23 -2
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +72 -73
- package/build/src/model-simple-bar.d.ts +0 -11
- package/model-simple-bar.d.ts +0 -11
- package/model-simple-bar.js +0 -88
- package/model-simple-bar.js.map +0 -1
|
@@ -18,7 +18,8 @@ import { AxisPositions, CartesianOrientations, ScaleTypes } from "../interfaces"
|
|
|
18
18
|
import { Tools } from "../tools";
|
|
19
19
|
// D3 Imports
|
|
20
20
|
import { scaleBand, scaleLinear, scaleTime, scaleLog } from "d3-scale";
|
|
21
|
-
import {
|
|
21
|
+
import { extent, sum } from "d3-array";
|
|
22
|
+
import { map, values } from "d3-collection";
|
|
22
23
|
// Misc
|
|
23
24
|
import { differenceInYears, addYears, subYears, differenceInMonths, addMonths, subMonths, differenceInDays, addDays, subDays, differenceInHours, addHours, subHours, differenceInMinutes, addMinutes, subMinutes, differenceInSeconds, subSeconds, addSeconds } from "date-fns";
|
|
24
25
|
function addPaddingInDomain(_a, paddingRatio) {
|
|
@@ -55,55 +56,68 @@ var CartesianScales = /** @class */ (function (_super) {
|
|
|
55
56
|
CartesianScales.prototype.getRangeAxisPosition = function () {
|
|
56
57
|
return this.rangeAxisPosition;
|
|
57
58
|
};
|
|
58
|
-
CartesianScales.prototype.setDefaultAxes = function () {
|
|
59
|
-
var axesOptions = Tools.getProperty(this.model.getOptions(), "axes");
|
|
60
|
-
if (!axesOptions) {
|
|
61
|
-
this.model.getOptions().axes = {
|
|
62
|
-
left: {
|
|
63
|
-
primary: true,
|
|
64
|
-
includeZero: true,
|
|
65
|
-
},
|
|
66
|
-
bottom: {
|
|
67
|
-
secondary: true,
|
|
68
|
-
includeZero: true,
|
|
69
|
-
scaleType: this.model.getDisplayData().labels ? ScaleTypes.LABELS : undefined
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
59
|
CartesianScales.prototype.update = function (animate) {
|
|
75
60
|
var _this = this;
|
|
76
61
|
if (animate === void 0) { animate = true; }
|
|
77
|
-
this.
|
|
62
|
+
this.findDomainAndRangeAxes();
|
|
78
63
|
this.determineOrientation();
|
|
79
64
|
var axisPositions = Object.keys(AxisPositions).map(function (axisPositionKey) { return AxisPositions[axisPositionKey]; });
|
|
80
65
|
axisPositions.forEach(function (axisPosition) {
|
|
81
66
|
_this.scales[axisPosition] = _this.createScale(axisPosition);
|
|
82
67
|
});
|
|
83
68
|
};
|
|
84
|
-
CartesianScales.prototype.
|
|
85
|
-
var _this = this;
|
|
69
|
+
CartesianScales.prototype.findMainVerticalAxisPosition = function () {
|
|
86
70
|
var options = this.model.getOptions();
|
|
87
|
-
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
AxisPositions.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
71
|
+
var axisOptions = Tools.getProperty(options, "axes");
|
|
72
|
+
// If right axis has been specified as `main`
|
|
73
|
+
if (Tools.getProperty(axisOptions, "axes", AxisPositions.RIGHT, "main") === true) {
|
|
74
|
+
return AxisPositions.RIGHT;
|
|
75
|
+
}
|
|
76
|
+
return AxisPositions.LEFT;
|
|
77
|
+
};
|
|
78
|
+
CartesianScales.prototype.findMainHorizontalAxisPosition = function () {
|
|
79
|
+
var options = this.model.getOptions();
|
|
80
|
+
var axisOptions = Tools.getProperty(options, "axes");
|
|
81
|
+
// If top axis has been specified as `main`
|
|
82
|
+
if (Tools.getProperty(axisOptions, "axes", AxisPositions.TOP, "main") === true) {
|
|
83
|
+
return AxisPositions.TOP;
|
|
84
|
+
}
|
|
85
|
+
return AxisPositions.BOTTOM;
|
|
86
|
+
};
|
|
87
|
+
CartesianScales.prototype.findDomainAndRangeAxesPositions = function (mainVerticalAxisPosition, mainHorizontalAxisPosition) {
|
|
88
|
+
var options = this.model.getOptions();
|
|
89
|
+
var mainVerticalAxisOptions = Tools.getProperty(options, "axes", mainVerticalAxisPosition);
|
|
90
|
+
var mainHorizontalAxisOptions = Tools.getProperty(options, "axes", mainHorizontalAxisPosition);
|
|
91
|
+
var mainVerticalScaleType = mainVerticalAxisOptions.scaleType || ScaleTypes.LINEAR;
|
|
92
|
+
var mainHorizontalScaleType = mainHorizontalAxisOptions.scaleType || ScaleTypes.LINEAR;
|
|
93
|
+
var result = {
|
|
94
|
+
domainAxisPosition: null,
|
|
95
|
+
rangeAxisPosition: null
|
|
96
|
+
};
|
|
97
|
+
if (mainHorizontalScaleType === ScaleTypes.LABELS || mainHorizontalScaleType === ScaleTypes.TIME) {
|
|
98
|
+
result.domainAxisPosition = mainHorizontalAxisPosition;
|
|
99
|
+
result.rangeAxisPosition = mainVerticalAxisPosition;
|
|
100
|
+
}
|
|
101
|
+
else if (mainVerticalScaleType === ScaleTypes.LABELS || mainVerticalScaleType === ScaleTypes.TIME) {
|
|
102
|
+
result.domainAxisPosition = mainVerticalAxisPosition;
|
|
103
|
+
result.rangeAxisPosition = mainHorizontalAxisPosition;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
result.domainAxisPosition = mainHorizontalAxisPosition;
|
|
107
|
+
result.rangeAxisPosition = mainVerticalAxisPosition;
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
};
|
|
111
|
+
CartesianScales.prototype.findDomainAndRangeAxes = function () {
|
|
112
|
+
// find main axes between (left & right) && (bottom & top)
|
|
113
|
+
var mainVerticalAxisPosition = this.findMainVerticalAxisPosition();
|
|
114
|
+
var mainHorizontalAxisPosition = this.findMainHorizontalAxisPosition();
|
|
115
|
+
// Now we have horizontal & vertical main axes to choose domain & range axes from
|
|
116
|
+
var domainAndRangeAxesPositions = this.findDomainAndRangeAxesPositions(mainVerticalAxisPosition, mainHorizontalAxisPosition);
|
|
117
|
+
this.domainAxisPosition = domainAndRangeAxesPositions.domainAxisPosition;
|
|
118
|
+
this.rangeAxisPosition = domainAndRangeAxesPositions.rangeAxisPosition;
|
|
119
|
+
};
|
|
120
|
+
CartesianScales.prototype.determineOrientation = function () {
|
|
107
121
|
if (this.rangeAxisPosition === AxisPositions.LEFT && this.domainAxisPosition === AxisPositions.BOTTOM) {
|
|
108
122
|
this.orientation = CartesianOrientations.VERTICAL;
|
|
109
123
|
}
|
|
@@ -145,15 +159,17 @@ var CartesianScales = /** @class */ (function (_super) {
|
|
|
145
159
|
return this.scales[this.getMainYAxisPosition()];
|
|
146
160
|
};
|
|
147
161
|
CartesianScales.prototype.getValueFromScale = function (axisPosition, datum, index) {
|
|
148
|
-
var
|
|
162
|
+
var options = this.model.getOptions();
|
|
163
|
+
var axisOptions = Tools.getProperty(options, "axes", axisPosition);
|
|
149
164
|
var scaleType = this.scaleTypes[axisPosition];
|
|
150
165
|
var scale = this.scales[axisPosition];
|
|
166
|
+
var mapsTo = axisOptions.mapsTo;
|
|
167
|
+
var value = datum[mapsTo] !== undefined ? datum[mapsTo] : datum;
|
|
151
168
|
if (scaleType === ScaleTypes.LABELS) {
|
|
152
|
-
|
|
153
|
-
return scale(correspondingLabel) + scale.step() / 2;
|
|
169
|
+
return scale(value) + scale.step() / 2;
|
|
154
170
|
}
|
|
155
|
-
|
|
156
|
-
return scale(new Date(
|
|
171
|
+
if (scaleType === ScaleTypes.TIME) {
|
|
172
|
+
return scale(new Date(value));
|
|
157
173
|
}
|
|
158
174
|
return scale(value);
|
|
159
175
|
};
|
|
@@ -163,97 +179,63 @@ var CartesianScales = /** @class */ (function (_super) {
|
|
|
163
179
|
CartesianScales.prototype.getRangeValue = function (d, i) {
|
|
164
180
|
return this.getValueFromScale(this.rangeAxisPosition, d, i);
|
|
165
181
|
};
|
|
166
|
-
|
|
182
|
+
CartesianScales.prototype.getDomainIdentifier = function () {
|
|
183
|
+
var options = this.model.getOptions();
|
|
184
|
+
var axisOptions = Tools.getProperty(options, "axes", this.domainAxisPosition);
|
|
185
|
+
return axisOptions.mapsTo;
|
|
186
|
+
};
|
|
187
|
+
CartesianScales.prototype.getRangeIdentifier = function () {
|
|
188
|
+
var options = this.model.getOptions();
|
|
189
|
+
var axisOptions = Tools.getProperty(options, "axes", this.rangeAxisPosition);
|
|
190
|
+
return axisOptions.mapsTo;
|
|
191
|
+
};
|
|
192
|
+
/** Uses the primary Y Axis to get data items associated with that value. */
|
|
167
193
|
CartesianScales.prototype.getDataFromDomain = function (domainValue) {
|
|
168
194
|
var displayData = this.model.getDisplayData();
|
|
169
|
-
var
|
|
195
|
+
var domainIdentifier = this.getDomainIdentifier();
|
|
170
196
|
var scaleType = this.scaleTypes[this.domainAxisPosition];
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
displayData.datasets.forEach(function (dataset) {
|
|
176
|
-
activePoints.push({
|
|
177
|
-
datasetLabel: dataset.label,
|
|
178
|
-
value: dataset.data[index_1],
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
break;
|
|
182
|
-
case ScaleTypes.TIME:
|
|
183
|
-
// time series we filter using the date
|
|
184
|
-
var domainKey_1 = Object.keys(displayData.datasets[0].data[0]).filter(function (key) { return key !== "value"; })[0];
|
|
185
|
-
displayData.datasets.forEach(function (dataset) {
|
|
186
|
-
var sharedLabel = dataset.label;
|
|
187
|
-
// filter the items in each dataset for the points associated with the Domain
|
|
188
|
-
var dataItems = dataset.data.filter(function (item) {
|
|
189
|
-
var date1 = new Date(item[domainKey_1]);
|
|
190
|
-
var date2 = new Date(domainValue);
|
|
191
|
-
return date1.getTime() === date2.getTime();
|
|
192
|
-
});
|
|
193
|
-
// assign the shared label on the data items and add them to the array
|
|
194
|
-
dataItems.forEach(function (item) {
|
|
195
|
-
activePoints.push(Object.assign({
|
|
196
|
-
datasetLabel: sharedLabel,
|
|
197
|
-
value: item.value,
|
|
198
|
-
}, item));
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
break;
|
|
197
|
+
if (scaleType === ScaleTypes.TIME) {
|
|
198
|
+
return displayData.filter(function (datum) {
|
|
199
|
+
return datum[domainIdentifier].getTime() === domainValue.getTime();
|
|
200
|
+
});
|
|
202
201
|
}
|
|
203
|
-
return
|
|
202
|
+
return displayData.filter(function (datum) {
|
|
203
|
+
return datum[domainIdentifier] === domainValue;
|
|
204
|
+
});
|
|
204
205
|
};
|
|
205
206
|
CartesianScales.prototype.getScaleDomain = function (axisPosition) {
|
|
206
207
|
var options = this.model.getOptions();
|
|
207
208
|
var axisOptions = Tools.getProperty(options, "axes", axisPosition);
|
|
208
209
|
var includeZero = axisOptions.includeZero;
|
|
209
|
-
var
|
|
210
|
+
var scaleType = Tools.getProperty(axisOptions, "scaleType") || ScaleTypes.LINEAR;
|
|
211
|
+
var displayData = this.model.getDisplayData();
|
|
212
|
+
var mapsTo = axisOptions.mapsTo;
|
|
213
|
+
// If domain is specified return that domain
|
|
214
|
+
if (axisOptions.domain) {
|
|
215
|
+
return axisOptions.domain;
|
|
216
|
+
}
|
|
210
217
|
// If scale is a LABELS scale, return some labels as the domain
|
|
211
218
|
if (axisOptions && axisOptions.scaleType === ScaleTypes.LABELS) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
return this.model.getDisplayData().datasets[0].data.map(function (d, i) { return i + 1; });
|
|
217
|
-
}
|
|
219
|
+
// Get unique values
|
|
220
|
+
return map(displayData, function (d) { return d[mapsTo]; }).keys();
|
|
218
221
|
}
|
|
219
222
|
// Get the extent of the domain
|
|
220
223
|
var domain;
|
|
221
|
-
|
|
222
|
-
if (axisOptions.domain) {
|
|
223
|
-
return axisOptions.domain;
|
|
224
|
-
}
|
|
224
|
+
var allDataValues;
|
|
225
225
|
// If the scale is stacked
|
|
226
226
|
if (axisOptions.stacked) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
var totalValue = correspondingValues.reduce(function (a, b) { return a + b; }, 0);
|
|
232
|
-
// Save both the total value and the minimum
|
|
233
|
-
return m.concat(totalValue, min(correspondingValues));
|
|
234
|
-
}, [])
|
|
235
|
-
// Currently stack layouts in the library
|
|
236
|
-
// Only support positive values
|
|
237
|
-
.concat(0));
|
|
227
|
+
var dataValuesGroupedByKeys = this.model.getDataValuesGroupedByKeys();
|
|
228
|
+
allDataValues = dataValuesGroupedByKeys.map(function (dataValues) {
|
|
229
|
+
return sum(values(dataValues));
|
|
230
|
+
});
|
|
238
231
|
}
|
|
239
232
|
else {
|
|
240
|
-
|
|
241
|
-
var allDataValues = datasets.reduce(function (dataValues, dataset) {
|
|
242
|
-
dataset.data.forEach(function (datum) {
|
|
243
|
-
if (axisOptions.scaleType === ScaleTypes.TIME) {
|
|
244
|
-
dataValues = dataValues.concat(datum.date);
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
dataValues = dataValues.concat(isNaN(datum) ? datum.value : datum);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
return dataValues;
|
|
251
|
-
}, []);
|
|
252
|
-
if (axisOptions.scaleType !== ScaleTypes.TIME && includeZero) {
|
|
253
|
-
allDataValues = allDataValues.concat(0);
|
|
254
|
-
}
|
|
255
|
-
domain = extent(allDataValues);
|
|
233
|
+
allDataValues = displayData.map(function (datum) { return datum[mapsTo]; });
|
|
256
234
|
}
|
|
235
|
+
if (axisOptions.scaleType !== ScaleTypes.TIME && includeZero) {
|
|
236
|
+
allDataValues.push(0);
|
|
237
|
+
}
|
|
238
|
+
domain = extent(allDataValues);
|
|
257
239
|
if (axisOptions.scaleType === ScaleTypes.TIME) {
|
|
258
240
|
var spaceToAddToEdges = Tools.getProperty(options, "timeScale", "addSpaceOnEdges");
|
|
259
241
|
if (spaceToAddToEdges) {
|
|
@@ -285,12 +267,12 @@ var CartesianScales = /** @class */ (function (_super) {
|
|
|
285
267
|
}
|
|
286
268
|
return [startDate, endDate];
|
|
287
269
|
}
|
|
288
|
-
return [
|
|
289
|
-
new Date(domain[0]),
|
|
290
|
-
new Date(domain[1])
|
|
291
|
-
];
|
|
292
270
|
}
|
|
293
|
-
|
|
271
|
+
domain = addPaddingInDomain(domain, Configuration.axis.paddingRatio);
|
|
272
|
+
if (scaleType === ScaleTypes.TIME) {
|
|
273
|
+
domain = domain.map(function (d) { return new Date(d); });
|
|
274
|
+
}
|
|
275
|
+
return domain;
|
|
294
276
|
};
|
|
295
277
|
CartesianScales.prototype.createScale = function (axisPosition) {
|
|
296
278
|
var options = this.model.getOptions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scales-cartesian.js","sourceRoot":"","sources":["scales-cartesian.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../configuration\";\nimport { Service } from \"./service\";\nimport { AxisPositions, CartesianOrientations, ScaleTypes, AxesOptions } from \"../interfaces\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport {\n\tscaleBand,\n\tscaleLinear,\n\tscaleTime,\n\tscaleLog\n} from \"d3-scale\";\nimport { min, extent } from \"d3-array\";\n\n// Misc\nimport {\n\tdifferenceInYears,\n\taddYears,\n\tsubYears,\n\tdifferenceInMonths,\n\taddMonths,\n\tsubMonths,\n\tdifferenceInDays,\n\taddDays,\n\tsubDays,\n\tdifferenceInHours,\n\taddHours,\n\tsubHours,\n\tdifferenceInMinutes,\n\taddMinutes,\n\tsubMinutes,\n\tdifferenceInSeconds,\n\tsubSeconds,\n\taddSeconds\n} from \"date-fns\";\n\nfunction addPaddingInDomain([lower, upper]: number[], paddingRatio: number) {\n\tconst domainLength = upper - lower;\n\tconst padding = domainLength * paddingRatio;\n\n\t// If padding crosses 0, keep 0 as new upper bound\n\tconst newUpper = upper <= 0 && upper + padding > 0 ? 0 : upper + padding;\n\t// If padding crosses 0, keep 0 as new lower bound\n\tconst newLower = lower >= 0 && lower - padding < 0 ? 0 : lower - padding;\n\n\treturn [newLower, newUpper];\n}\n\nexport class CartesianScales extends Service {\n\tprotected scaleTypes = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected scales = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected domainAxisPosition: AxisPositions;\n\tprotected rangeAxisPosition: AxisPositions;\n\n\tprotected orientation: CartesianOrientations;\n\n\tgetDomainAxisPosition() {\n\t\treturn this.domainAxisPosition;\n\t}\n\n\tgetRangeAxisPosition() {\n\t\treturn this.rangeAxisPosition;\n\t}\n\n\tsetDefaultAxes() {\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\t\tif (!axesOptions) {\n\t\t\t(this.model.getOptions().axes as AxesOptions) = {\n\t\t\t\tleft: {\n\t\t\t\t\tprimary: true,\n\t\t\t\t\tincludeZero: true,\n\t\t\t\t},\n\t\t\t\tbottom: {\n\t\t\t\t\tsecondary: true,\n\t\t\t\t\tincludeZero: true,\n\t\t\t\t\tscaleType: this.model.getDisplayData().labels ? ScaleTypes.LABELS : undefined\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.setDefaultAxes();\n\t\tthis.determineOrientation();\n\t\tconst axisPositions = Object.keys(AxisPositions).map(axisPositionKey => AxisPositions[axisPositionKey]);\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tthis.scales[axisPosition] = this.createScale(axisPosition);\n\t\t});\n\t}\n\n\tdetermineOrientation() {\n\t\tconst options = this.model.getOptions();\n\n\t\t// Manually specifying positions here\n\t\t// In order to enforce a priority\n\t\t[\n\t\t\tAxisPositions.LEFT,\n\t\t\tAxisPositions.BOTTOM,\n\t\t\tAxisPositions.RIGHT,\n\t\t\tAxisPositions.TOP\n\t\t].forEach(axisPosition => {\n\t\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\t\tif (axisOptions) {\n\t\t\t\tconst scaleType = axisOptions.scaleType || ScaleTypes.LINEAR;\n\t\t\t\tthis.scaleTypes[axisPosition] = scaleType;\n\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tthis.rangeAxisPosition = axisPosition;\n\t\t\t\t} else {\n\t\t\t\t\tthis.domainAxisPosition = axisPosition;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (this.rangeAxisPosition === AxisPositions.LEFT && this.domainAxisPosition === AxisPositions.BOTTOM) {\n\t\t\tthis.orientation = CartesianOrientations.VERTICAL;\n\t\t} else {\n\t\t\tthis.orientation = CartesianOrientations.HORIZONTAL;\n\t\t}\n\t}\n\n\tgetOrientation() {\n\t\treturn this.orientation;\n\t}\n\n\tgetScaleByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scales[axisPosition];\n\t}\n\n\tgetScaleTypeByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scaleTypes[axisPosition];\n\t}\n\n\tgetDomainScale() {\n\t\treturn this.scales[this.domainAxisPosition];\n\t}\n\n\tgetRangeScale() {\n\t\treturn this.scales[this.rangeAxisPosition];\n\t}\n\n\t// Find the main x-axis out of the 2 x-axis on the chart (when 2D axis is used)\n\tgetMainXAxisPosition() {\n\t\tconst possibleXAxisPositions = [AxisPositions.BOTTOM, AxisPositions.TOP];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleXAxisPositions.indexOf(position) > -1);\n\t}\n\n\t// Find the main y-axis out of the 2 y-axis on the chart (when 2D axis is used)\n\tgetMainYAxisPosition() {\n\t\tconst possibleYAxisPositions = [AxisPositions.LEFT, AxisPositions.RIGHT];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleYAxisPositions.indexOf(position) > -1);\n\t}\n\n\tgetMainXScale() {\n\t\treturn this.scales[this.getMainXAxisPosition()];\n\t}\n\n\tgetMainYScale() {\n\t\treturn this.scales[this.getMainYAxisPosition()];\n\t}\n\n\tgetValueFromScale(axisPosition: AxisPositions, datum: any, index?: number) {\n\t\tconst value = isNaN(datum) ? datum.value : datum;\n\t\tconst scaleType = this.scaleTypes[axisPosition];\n\t\tconst scale = this.scales[axisPosition];\n\t\tif (scaleType === ScaleTypes.LABELS) {\n\t\t\tconst correspondingLabel = this.model.getDisplayData().labels[index];\n\t\t\treturn scale(correspondingLabel) + scale.step() / 2;\n\t\t} else if (scaleType === ScaleTypes.TIME) {\n\t\t\treturn scale(new Date(datum.date || datum.label));\n\t\t}\n\n\t\treturn scale(value);\n\t}\n\n\tgetDomainValue(d, i) {\n\t\treturn this.getValueFromScale(this.domainAxisPosition, d, i);\n\t}\n\n\tgetRangeValue(d, i) {\n\t\treturn this.getValueFromScale(this.rangeAxisPosition, d, i);\n\t}\n\n\t/** Uses the primary Y Axis to get data items associated with that value. */\n\tgetDataFromDomain(domainValue) {\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst activePoints = [];\n\t\tconst scaleType = this.scaleTypes[this.domainAxisPosition];\n\n\t\tswitch (scaleType) {\n\t\t\tcase ScaleTypes.LABELS:\n\t\t\t\t// based on labels we use the index to get the associated data\n\t\t\t\tconst index = displayData.labels.indexOf(domainValue);\n\n\t\t\t\tdisplayData.datasets.forEach(dataset => {\n\t\t\t\t\tactivePoints.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\t\t\t\tvalue: dataset.data[index],\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase ScaleTypes.TIME:\n\t\t\t\t// time series we filter using the date\n\t\t\t\tconst domainKey = Object.keys(displayData.datasets[0].data[0]).filter(key => key !== \"value\")[0];\n\n\t\t\t\tdisplayData.datasets.forEach(dataset => {\n\t\t\t\t\tconst sharedLabel = dataset.label;\n\n\t\t\t\t\t// filter the items in each dataset for the points associated with the Domain\n\t\t\t\t\tconst dataItems = dataset.data.filter(item => {\n\t\t\t\t\t\tconst date1 = new Date(item[domainKey]);\n\t\t\t\t\t\tconst date2 = new Date(domainValue);\n\t\t\t\t\t\treturn date1.getTime() === date2.getTime();\n\t\t\t\t\t});\n\n\t\t\t\t\t// assign the shared label on the data items and add them to the array\n\t\t\t\t\tdataItems.forEach(item => {\n\t\t\t\t\t\tactivePoints.push(\n\t\t\t\t\t\t\tObject.assign({\n\t\t\t\t\t\t\t\tdatasetLabel: sharedLabel,\n\t\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\t}, item)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t\treturn activePoints;\n\t}\n\n\tprotected getScaleDomain(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst { includeZero } = axisOptions;\n\t\tconst { datasets, labels } = this.model.getDisplayData();\n\n\t\t// If scale is a LABELS scale, return some labels as the domain\n\t\tif (axisOptions && axisOptions.scaleType === ScaleTypes.LABELS) {\n\t\t\tif (labels) {\n\t\t\t\treturn labels;\n\t\t\t} else {\n\t\t\t\treturn this.model.getDisplayData().datasets[0].data.map((d, i) => i + 1);\n\t\t\t}\n\t\t}\n\n\t\t// Get the extent of the domain\n\t\tlet domain;\n\n\t\t// If domain is specified return that domain\n\t\tif (axisOptions.domain) {\n\t\t\treturn axisOptions.domain;\n\t\t}\n\n\t\t// If the scale is stacked\n\t\tif (axisOptions.stacked) {\n\t\t\tdomain = extent(\n\t\t\t\tlabels.reduce((m, label: any, i) => {\n\t\t\t\t\tconst correspondingValues = datasets.map(dataset => {\n\t\t\t\t\t\treturn !isNaN(dataset.data[i]) ? dataset.data[i] : dataset.data[i].value;\n\t\t\t\t\t});\n\t\t\t\t\tconst totalValue = correspondingValues.reduce((a, b) => a + b, 0);\n\n\t\t\t\t\t// Save both the total value and the minimum\n\t\t\t\t\treturn m.concat(totalValue, min(correspondingValues));\n\t\t\t\t}, [])\n\t\t\t\t\t// Currently stack layouts in the library\n\t\t\t\t\t// Only support positive values\n\t\t\t\t\t.concat(0)\n\t\t\t);\n\t\t} else {\n\t\t\t// Get all the chart's data values in a flat array\n\t\t\tlet allDataValues = datasets.reduce((dataValues, dataset: any) => {\n\t\t\t\tdataset.data.forEach((datum: any) => {\n\t\t\t\t\tif (axisOptions.scaleType === ScaleTypes.TIME) {\n\t\t\t\t\t\tdataValues = dataValues.concat(datum.date);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataValues = dataValues.concat(isNaN(datum) ? datum.value : datum);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn dataValues;\n\t\t\t}, []);\n\n\t\t\tif (axisOptions.scaleType !== ScaleTypes.TIME && includeZero) {\n\t\t\t\tallDataValues = allDataValues.concat(0);\n\t\t\t}\n\n\t\t\tdomain = extent(allDataValues);\n\t\t}\n\n\t\tif (axisOptions.scaleType === ScaleTypes.TIME) {\n\t\t\tconst spaceToAddToEdges = Tools.getProperty(options, \"timeScale\", \"addSpaceOnEdges\");\n\n\t\t\tif (spaceToAddToEdges) {\n\t\t\t\tconst startDate = new Date(domain[0]);\n\t\t\t\tconst endDate = new Date(domain[1]);\n\n\t\t\t\tif (differenceInYears(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subYears(startDate, spaceToAddToEdges), addYears(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInMonths(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subMonths(startDate, spaceToAddToEdges), addMonths(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInDays(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subDays(startDate, spaceToAddToEdges), addDays(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInHours(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subHours(startDate, spaceToAddToEdges), addHours(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInMinutes(endDate, startDate) > 30) {\n\t\t\t\t\treturn [subMinutes(startDate, spaceToAddToEdges * 30), addMinutes(endDate, spaceToAddToEdges * 30)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInMinutes(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subMinutes(startDate, spaceToAddToEdges), addMinutes(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInSeconds(endDate, startDate) > 15) {\n\t\t\t\t\treturn [subSeconds(startDate, spaceToAddToEdges * 15), addSeconds(endDate, spaceToAddToEdges * 15)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInSeconds(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subSeconds(startDate, spaceToAddToEdges), addSeconds(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\treturn [startDate, endDate];\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\tnew Date(domain[0]),\n\t\t\t\tnew Date(domain[1])\n\t\t\t];\n\t\t}\n\n\t\treturn addPaddingInDomain(domain, Configuration.axis.paddingRatio);\n\t}\n\n\tprotected createScale(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tif (!axisOptions) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\t\tthis.scaleTypes[axisPosition] = scaleType;\n\n\t\tlet scale;\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\tscale = scaleTime();\n\t\t} else if (scaleType === ScaleTypes.LOG) {\n\t\t\tscale = scaleLog().base(axisOptions.base || 10);\n\t\t} else if (scaleType === ScaleTypes.LABELS) {\n\t\t\tscale = scaleBand();\n\t\t} else {\n\t\t\tscale = scaleLinear();\n\t\t}\n\n\t\tscale.domain(this.getScaleDomain(axisPosition));\n\t\treturn scale;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scales-cartesian.js","sourceRoot":"","sources":["scales-cartesian.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../configuration\";\nimport { Service } from \"./service\";\nimport { AxisPositions, CartesianOrientations, ScaleTypes, AxesOptions } from \"../interfaces\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport {\n\tscaleBand,\n\tscaleLinear,\n\tscaleTime,\n\tscaleLog\n} from \"d3-scale\";\nimport { extent, sum } from \"d3-array\";\nimport { map, values } from \"d3-collection\";\n\n// Misc\nimport {\n\tdifferenceInYears,\n\taddYears,\n\tsubYears,\n\tdifferenceInMonths,\n\taddMonths,\n\tsubMonths,\n\tdifferenceInDays,\n\taddDays,\n\tsubDays,\n\tdifferenceInHours,\n\taddHours,\n\tsubHours,\n\tdifferenceInMinutes,\n\taddMinutes,\n\tsubMinutes,\n\tdifferenceInSeconds,\n\tsubSeconds,\n\taddSeconds\n} from \"date-fns\";\n\nfunction addPaddingInDomain([lower, upper]: number[], paddingRatio: number) {\n\tconst domainLength = upper - lower;\n\tconst padding = domainLength * paddingRatio;\n\n\t// If padding crosses 0, keep 0 as new upper bound\n\tconst newUpper = upper <= 0 && upper + padding > 0 ? 0 : upper + padding;\n\t// If padding crosses 0, keep 0 as new lower bound\n\tconst newLower = lower >= 0 && lower - padding < 0 ? 0 : lower - padding;\n\n\treturn [newLower, newUpper];\n}\n\nexport class CartesianScales extends Service {\n\tprotected scaleTypes = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected scales = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected domainAxisPosition: AxisPositions;\n\tprotected rangeAxisPosition: AxisPositions;\n\n\tprotected orientation: CartesianOrientations;\n\n\tgetDomainAxisPosition() {\n\t\treturn this.domainAxisPosition;\n\t}\n\n\tgetRangeAxisPosition() {\n\t\treturn this.rangeAxisPosition;\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.findDomainAndRangeAxes();\n\t\tthis.determineOrientation();\n\t\tconst axisPositions = Object.keys(AxisPositions).map(axisPositionKey => AxisPositions[axisPositionKey]);\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tthis.scales[axisPosition] = this.createScale(axisPosition);\n\t\t});\n\t}\n\n\tprotected findMainVerticalAxisPosition() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\");\n\n\t\t// If right axis has been specified as `main`\n\t\tif (Tools.getProperty(axisOptions, \"axes\", AxisPositions.RIGHT, \"main\") === true) {\n\t\t\treturn AxisPositions.RIGHT;\n\t\t}\n\n\t\treturn AxisPositions.LEFT;\n\t}\n\n\tprotected findMainHorizontalAxisPosition() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\");\n\n\t\t// If top axis has been specified as `main`\n\t\tif (Tools.getProperty(axisOptions, \"axes\", AxisPositions.TOP, \"main\") === true) {\n\t\t\treturn AxisPositions.TOP;\n\t\t}\n\n\t\treturn AxisPositions.BOTTOM;\n\t}\n\n\tprotected findDomainAndRangeAxesPositions(mainVerticalAxisPosition: AxisPositions, mainHorizontalAxisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst mainVerticalAxisOptions = Tools.getProperty(options, \"axes\", mainVerticalAxisPosition);\n\t\tconst mainHorizontalAxisOptions = Tools.getProperty(options, \"axes\", mainHorizontalAxisPosition);\n\n\t\tconst mainVerticalScaleType = mainVerticalAxisOptions.scaleType || ScaleTypes.LINEAR;\n\t\tconst mainHorizontalScaleType = mainHorizontalAxisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\tconst result = {\n\t\t\tdomainAxisPosition: null,\n\t\t\trangeAxisPosition: null\n\t\t};\n\t\tif (mainHorizontalScaleType === ScaleTypes.LABELS || mainHorizontalScaleType === ScaleTypes.TIME) {\n\t\t\tresult.domainAxisPosition = mainHorizontalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainVerticalAxisPosition;\n\t\t} else if (mainVerticalScaleType === ScaleTypes.LABELS || mainVerticalScaleType === ScaleTypes.TIME) {\n\t\t\tresult.domainAxisPosition = mainVerticalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainHorizontalAxisPosition;\n\t\t} else {\n\t\t\tresult.domainAxisPosition = mainHorizontalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainVerticalAxisPosition;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfindDomainAndRangeAxes() {\n\t\t// find main axes between (left & right) && (bottom & top)\n\t\tconst mainVerticalAxisPosition = this.findMainVerticalAxisPosition();\n\t\tconst mainHorizontalAxisPosition = this.findMainHorizontalAxisPosition();\n\n\t\t// Now we have horizontal & vertical main axes to choose domain & range axes from\n\t\tconst domainAndRangeAxesPositions = this.findDomainAndRangeAxesPositions(mainVerticalAxisPosition, mainHorizontalAxisPosition);\n\n\t\tthis.domainAxisPosition = domainAndRangeAxesPositions.domainAxisPosition;\n\t\tthis.rangeAxisPosition = domainAndRangeAxesPositions.rangeAxisPosition;\n\t}\n\n\tdetermineOrientation() {\n\t\tif (this.rangeAxisPosition === AxisPositions.LEFT && this.domainAxisPosition === AxisPositions.BOTTOM) {\n\t\t\tthis.orientation = CartesianOrientations.VERTICAL;\n\t\t} else {\n\t\t\tthis.orientation = CartesianOrientations.HORIZONTAL;\n\t\t}\n\t}\n\n\tgetOrientation() {\n\t\treturn this.orientation;\n\t}\n\n\tgetScaleByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scales[axisPosition];\n\t}\n\n\tgetScaleTypeByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scaleTypes[axisPosition];\n\t}\n\n\tgetDomainScale() {\n\t\treturn this.scales[this.domainAxisPosition];\n\t}\n\n\tgetRangeScale() {\n\t\treturn this.scales[this.rangeAxisPosition];\n\t}\n\n\t// Find the main x-axis out of the 2 x-axis on the chart (when 2D axis is used)\n\tgetMainXAxisPosition() {\n\t\tconst possibleXAxisPositions = [AxisPositions.BOTTOM, AxisPositions.TOP];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleXAxisPositions.indexOf(position) > -1);\n\t}\n\n\t// Find the main y-axis out of the 2 y-axis on the chart (when 2D axis is used)\n\tgetMainYAxisPosition() {\n\t\tconst possibleYAxisPositions = [AxisPositions.LEFT, AxisPositions.RIGHT];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleYAxisPositions.indexOf(position) > -1);\n\t}\n\n\tgetMainXScale() {\n\t\treturn this.scales[this.getMainXAxisPosition()];\n\t}\n\n\tgetMainYScale() {\n\t\treturn this.scales[this.getMainYAxisPosition()];\n\t}\n\n\tgetValueFromScale(axisPosition: AxisPositions, datum: any, index?: number) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tconst scaleType = this.scaleTypes[axisPosition];\n\t\tconst scale = this.scales[axisPosition];\n\n\t\tconst { mapsTo } = axisOptions;\n\t\tconst value = datum[mapsTo] !== undefined ? datum[mapsTo] : datum;\n\n\t\tif (scaleType === ScaleTypes.LABELS) {\n\t\t\treturn scale(value) + scale.step() / 2;\n\t\t}\n\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\treturn scale(new Date(value));\n\t\t}\n\n\t\treturn scale(value);\n\t}\n\n\tgetDomainValue(d, i) {\n\t\treturn this.getValueFromScale(this.domainAxisPosition, d, i);\n\t}\n\n\tgetRangeValue(d, i) {\n\t\treturn this.getValueFromScale(this.rangeAxisPosition, d, i);\n\t}\n\n\tgetDomainIdentifier() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", this.domainAxisPosition);\n\n\t\treturn axisOptions.mapsTo;\n\t}\n\n\tgetRangeIdentifier() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", this.rangeAxisPosition);\n\n\t\treturn axisOptions.mapsTo;\n\t}\n\n\t/** Uses the primary Y Axis to get data items associated with that value. */\n\tgetDataFromDomain(domainValue) {\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst domainIdentifier = this.getDomainIdentifier();\n\t\tconst scaleType = this.scaleTypes[this.domainAxisPosition];\n\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\treturn displayData.filter(datum => {\n\t\t\t\treturn datum[domainIdentifier].getTime() === domainValue.getTime();\n\t\t\t});\n\t\t}\n\n\t\treturn displayData.filter(datum => {\n\t\t\treturn datum[domainIdentifier] === domainValue;\n\t\t});\n\t}\n\n\tprotected getScaleDomain(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst { includeZero } = axisOptions;\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst { mapsTo } = axisOptions;\n\n\t\t// If domain is specified return that domain\n\t\tif (axisOptions.domain) {\n\t\t\treturn axisOptions.domain;\n\t\t}\n\n\t\t// If scale is a LABELS scale, return some labels as the domain\n\t\tif (axisOptions && axisOptions.scaleType === ScaleTypes.LABELS) {\n\t\t\t// Get unique values\n\t\t\treturn map(displayData, d => d[mapsTo]).keys();\n\t\t}\n\n\n\t\t// Get the extent of the domain\n\t\tlet domain;\n\t\tlet allDataValues;\n\t\t// If the scale is stacked\n\t\tif (axisOptions.stacked) {\n\t\t\tconst dataValuesGroupedByKeys = this.model.getDataValuesGroupedByKeys();\n\t\t\tallDataValues = dataValuesGroupedByKeys.map(dataValues => {\n\t\t\t\treturn sum(\n\t\t\t\t\tvalues(dataValues) as any\n\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tallDataValues = displayData.map(datum => datum[mapsTo]);\n\t\t}\n\n\t\tif (axisOptions.scaleType !== ScaleTypes.TIME && includeZero) {\n\t\t\tallDataValues.push(0);\n\t\t}\n\n\t\tdomain = extent(allDataValues);\n\n\t\tif (axisOptions.scaleType === ScaleTypes.TIME) {\n\t\t\tconst spaceToAddToEdges = Tools.getProperty(options, \"timeScale\", \"addSpaceOnEdges\");\n\n\t\t\tif (spaceToAddToEdges) {\n\t\t\t\tconst startDate = new Date(domain[0]);\n\t\t\t\tconst endDate = new Date(domain[1]);\n\n\t\t\t\tif (differenceInYears(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subYears(startDate, spaceToAddToEdges), addYears(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInMonths(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subMonths(startDate, spaceToAddToEdges), addMonths(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInDays(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subDays(startDate, spaceToAddToEdges), addDays(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInHours(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subHours(startDate, spaceToAddToEdges), addHours(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInMinutes(endDate, startDate) > 30) {\n\t\t\t\t\treturn [subMinutes(startDate, spaceToAddToEdges * 30), addMinutes(endDate, spaceToAddToEdges * 30)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInMinutes(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subMinutes(startDate, spaceToAddToEdges), addMinutes(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInSeconds(endDate, startDate) > 15) {\n\t\t\t\t\treturn [subSeconds(startDate, spaceToAddToEdges * 15), addSeconds(endDate, spaceToAddToEdges * 15)];\n\t\t\t\t}\n\n\t\t\t\tif (differenceInSeconds(endDate, startDate) > 1) {\n\t\t\t\t\treturn [subSeconds(startDate, spaceToAddToEdges), addSeconds(endDate, spaceToAddToEdges)];\n\t\t\t\t}\n\n\t\t\t\treturn [startDate, endDate];\n\t\t\t}\n\t\t}\n\n\t\tdomain = addPaddingInDomain(domain, Configuration.axis.paddingRatio);\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\tdomain = domain.map(d => new Date(d));\n\t\t}\n\n\t\treturn domain;\n\t}\n\n\tprotected createScale(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tif (!axisOptions) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\t\tthis.scaleTypes[axisPosition] = scaleType;\n\n\t\tlet scale;\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\tscale = scaleTime();\n\t\t} else if (scaleType === ScaleTypes.LOG) {\n\t\t\tscale = scaleLog().base(axisOptions.base || 10);\n\t\t} else if (scaleType === ScaleTypes.LABELS) {\n\t\t\tscale = scaleBand();\n\t\t} else {\n\t\t\tscale = scaleLinear();\n\t\t}\n\n\t\tscale.domain(this.getScaleDomain(axisPosition));\n\t\treturn scale;\n\t}\n}\n"]}
|
package/tools.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CartesianOrientations
|
|
1
|
+
import { CartesianOrientations } from "./interfaces";
|
|
2
2
|
export declare namespace Tools {
|
|
3
3
|
export const debounce: any;
|
|
4
4
|
export const clone: any;
|
|
@@ -15,7 +15,7 @@ export declare namespace Tools {
|
|
|
15
15
|
* @param {AxisChartOptions} providedOptions user provided options
|
|
16
16
|
* @returns merged options
|
|
17
17
|
*/
|
|
18
|
-
export function mergeDefaultChartOptions(defaultOptions:
|
|
18
|
+
export function mergeDefaultChartOptions(defaultOptions: any, providedOptions: any): any;
|
|
19
19
|
/**************************************
|
|
20
20
|
* DOM-related operations *
|
|
21
21
|
*************************************/
|
package/tools.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Internal imports
|
|
2
|
-
import { CartesianOrientations } from "./interfaces";
|
|
2
|
+
import { CartesianOrientations, ScaleTypes } from "./interfaces";
|
|
3
3
|
import { debounce as lodashDebounce, merge as lodashMerge, cloneDeep as lodashCloneDeep, uniq as lodashUnique, clamp as lodashClamp } from "lodash-es";
|
|
4
4
|
// Functions
|
|
5
5
|
export var Tools;
|
|
@@ -26,8 +26,29 @@ export var Tools;
|
|
|
26
26
|
if (providedAxesNames.length === 0) {
|
|
27
27
|
delete defaultOptions.axes;
|
|
28
28
|
}
|
|
29
|
+
// Update deprecated options to work with the tabular data format
|
|
30
|
+
// Similar to the functionality in model.transformToTabularData()
|
|
29
31
|
for (var axisName in defaultOptions.axes) {
|
|
30
|
-
if (
|
|
32
|
+
if (providedAxesNames.includes(axisName)) {
|
|
33
|
+
var providedAxisOptions = providedOptions.axes[axisName];
|
|
34
|
+
if (providedAxisOptions["primary"] || providedAxisOptions["secondary"]) {
|
|
35
|
+
console.warn("`primary` & `secondary` are no longer needed for axis configurations. Read more here https://carbon-design-system.github.io/carbon-charts/?path=/story/tutorials--tabular-data-format");
|
|
36
|
+
}
|
|
37
|
+
var identifier = providedAxisOptions["mapsTo"];
|
|
38
|
+
if (identifier === undefined || identifier === null) {
|
|
39
|
+
var scaleType = providedAxisOptions["scaleType"];
|
|
40
|
+
if (scaleType === undefined || scaleType === null) {
|
|
41
|
+
providedAxisOptions["mapsTo"] = "value";
|
|
42
|
+
}
|
|
43
|
+
else if (scaleType === ScaleTypes.TIME) {
|
|
44
|
+
providedAxisOptions["mapsTo"] = "date";
|
|
45
|
+
}
|
|
46
|
+
else if (scaleType === ScaleTypes.LABELS) {
|
|
47
|
+
providedAxisOptions["mapsTo"] = "key";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
31
52
|
delete defaultOptions.axes[axisName];
|
|
32
53
|
}
|
|
33
54
|
}
|
package/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["tools.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,qBAAqB,EAAoB,MAAM,cAAc,CAAC;AAEvE,OAAO,EACN,QAAQ,IAAI,cAAc,EAC1B,KAAK,IAAI,WAAW,EACpB,SAAS,IAAI,eAAe,EAC5B,IAAI,IAAI,YAAY,EACpB,KAAK,IAAI,WAAW,EAIpB,MAAM,WAAW,CAAC;AAEnB,YAAY;AACZ,MAAM,KAAW,KAAK,CAgPrB;AAhPD,WAAiB,KAAK;IACrB,qCAAqC;IACxB,cAAQ,GAAG,cAAc,CAAC;IAC1B,WAAK,GAAG,eAAe,CAAC;IACxB,WAAK,GAAG,WAAW,CAAC;IACpB,2BAAqB,GAAG,YAAY,CAAC;IACrC,WAAK,GAAG,WAAW,CAAC;IAGjC;;;;;;;;;OASG;IACH,SAAgB,wBAAwB,CAAC,cAAgC,EAAE,eAAiC;QAC3G,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAElE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,OAAO,cAAc,CAAC,IAAI,CAAC;SAC3B;QAED,KAAK,IAAM,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE;YAC3C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC1C,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACrC;SACD;QAED,OAAO,KAAK,CAAC,KAAK,CACjB,cAAc,EACd,eAAe,CACf,CAAC;IACH,CAAC;IAlBe,8BAAwB,2BAkBvC,CAAA;IAED;;2CAEuC;IAEvC;;;;;;OAMG;IACH,SAAgB,aAAa,CAAC,EAAE;QAC/B,OAAO;YACN,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;YACrE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC;SACxE,CAAC;IACH,CAAC;IALe,mBAAa,gBAK5B,CAAA;IAED;;;;OAIG;IACH,SAAgB,oBAAoB,CAAC,UAAuB;QAC3D,uFAAuF;QACvF,IAAM,cAAc,GAAG,8CAA8C,CAAC;QAEtE,IAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChF,sBAAsB;QACtB,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,IAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3F,OAAO;gBACN,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;gBACjB,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;aACjB,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAfe,0BAAoB,uBAenC,CAAA;IAED;;2CAEuC;IAEvC;;;;;;OAMG;IACH,SAAgB,kBAAkB,CAAC,MAAM;QACxC,IAAM,MAAM,GAAG,aAAa,CAAC;QAC7B,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAElC,OAAO;YACN,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC1B,CAAC;IACH,CAAC;IATe,wBAAkB,qBASjC,CAAA;IAED;;;;;;OAMG;IACH,SAAgB,qBAAqB,CAAC,MAAM;QAC3C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAFe,2BAAqB,wBAEpC,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ;QACtD,IAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,KAAK,GAAG,GAAG,CAAC,KAAK,EAAjB,CAAiB,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QACtF,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC;IAHe,8BAAwB,2BAGvC,CAAA;IAED;;2CAEuC;IACvC;;;;;;;OAOG;IACH,SAAgB,gBAAgB,CAAC,QAAe,EAAE,QAAe;QAChE,IAAM,UAAU,GAAG;YAClB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;SACT,CAAC;QAEF,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;YACvB,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACjC;QACF,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;YACvB,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC/B;QACF,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACnB,CAAC;IAnBe,sBAAgB,mBAmB/B,CAAA;IAED;;;;;;OAMG;IACH,SAAgB,kBAAkB,CAAC,GAAQ;QAC1C,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAM,eAAe,GAAG,EAAE,CAAC;QAE3B,GAAG,CAAC,OAAO,CAAC,UAAA,KAAK;YAChB,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC1E,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC5B;YAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,OAAO,eAAe,CAAC;IACxB,CAAC;IAbe,wBAAkB,qBAajC,CAAA;IAED,mFAAmF;IACnF,gBAAgB;IAChB,mFAAmF;IACnF;;;;;;OAMG;IACH,SAAgB,WAAW,CAAC,OAAO;QAClC,OAAO,OAAO,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC;IAJe,iBAAW,cAI1B,CAAA;IAED,mFAAmF;IACnF,gBAAgB;IAChB,mFAAmF;IAEtE,iBAAW,GAAG,UAAC,MAAM;QAAE,kBAAW;aAAX,UAAW,EAAX,qBAAW,EAAX,IAAW;YAAX,iCAAW;;QAC9C,IAAI,QAAQ,GAAG,MAAM,CAAC;QACtB,IAAI,QAAQ,EAAE;YACb,KAAmB,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;gBAAxB,IAAM,IAAI,iBAAA;gBACd,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;oBAC5D,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAC1B;qBAAM;oBACN,OAAO,IAAI,CAAC;iBACZ;aACD;YACD,OAAO,QAAQ,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IASW,0CAAoC,GAAG,UAAC,mBAAuC,EAAE,WAAmC;QAChI,IAAI,WAAW,KAAK,qBAAqB,CAAC,UAAU,EAAE;YACrD,OAAO;gBACN,EAAE,EAAE,mBAAmB,CAAC,EAAE;gBAC1B,EAAE,EAAE,mBAAmB,CAAC,EAAE;gBAC1B,EAAE,EAAE,mBAAmB,CAAC,EAAE;gBAC1B,EAAE,EAAE,mBAAmB,CAAC,EAAE;aAC1B,CAAC;SACF;QAED,OAAO,mBAAmB,CAAC;IAC5B,CAAC,CAAC;IAEW,2BAAqB,GAAG,UAAC,mBAAuC,EAAE,WAAmC;QAC3G,IAAA,iFAA2F,EAAzF,UAAE,EAAE,UAAE,EAAE,UAAE,EAAE,UAA6E,CAAC;QAElG,OAAO,MAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAI,CAAC;IACvE,CAAC,CAAC;AACH,CAAC,EAhPgB,KAAK,KAAL,KAAK,QAgPrB","sourcesContent":["// Internal imports\nimport { CartesianOrientations, AxisChartOptions } from \"./interfaces\";\n\nimport {\n\tdebounce as lodashDebounce,\n\tmerge as lodashMerge,\n\tcloneDeep as lodashCloneDeep,\n\tuniq as lodashUnique,\n\tclamp as lodashClamp,\n\t// the imports below are needed because of typescript bug (error TS4029)\n\tCancelable,\n\tDebounceSettings\n} from \"lodash-es\";\n\n// Functions\nexport namespace Tools {\n\t// Export these functions from lodash\n\texport const debounce = lodashDebounce;\n\texport const clone = lodashCloneDeep;\n\texport const merge = lodashMerge;\n\texport const removeArrayDuplicates = lodashUnique;\n\texport const clamp = lodashClamp;\n\n\n\t/**\n\t * Returns default chart options merged with provided options,\n\t * with special cases for axes.\n\t * Axes object will not merge the not provided axes.\n\t *\n\t * @export\n\t * @param {AxisChartOptions} defaultOptions Configuration.options[chartType]\n\t * @param {AxisChartOptions} providedOptions user provided options\n\t * @returns merged options\n\t */\n\texport function mergeDefaultChartOptions(defaultOptions: AxisChartOptions, providedOptions: AxisChartOptions) {\n\t\tdefaultOptions = Tools.clone(defaultOptions);\n\t\tconst providedAxesNames = Object.keys(providedOptions.axes || {});\n\n\t\tif (providedAxesNames.length === 0) {\n\t\t\tdelete defaultOptions.axes;\n\t\t}\n\n\t\tfor (const axisName in defaultOptions.axes) {\n\t\t\tif (!providedAxesNames.includes(axisName)) {\n\t\t\t\tdelete defaultOptions.axes[axisName];\n\t\t\t}\n\t\t}\n\n\t\treturn Tools.merge(\n\t\t\tdefaultOptions,\n\t\t\tprovidedOptions\n\t\t);\n\t}\n\n\t/**************************************\n\t * DOM-related operations *\n\t *************************************/\n\n\t/**\n\t * Get width & height of an element\n\t *\n\t * @export\n\t * @param {any} el element to get dimensions from\n\t * @returns an object containing the width and height of el\n\t */\n\texport function getDimensions(el) {\n\t\treturn {\n\t\t\twidth: parseFloat(el.style.width.replace(\"px\", \"\") || el.offsetWidth),\n\t\t\theight: parseFloat(el.style.height.replace(\"px\", \"\") || el.offsetHeight)\n\t\t};\n\t}\n\n\t/**\n\t * Returns an elements's x and y translations from attribute transform\n\t * @param {HTMLElement} element\n\t * @returns an object containing the x and y translations or null\n\t */\n\texport function getTranslationValues(elementRef: HTMLElement) {\n\t\t// regex to ONLY get values for translate (instead of all rotate, translate, skew, etc)\n\t\tconst translateRegex = /translate\\([0-9]+\\.?[0-9]*,[0-9]+\\.?[0-9]*\\)/;\n\n\t\tconst transformStr = elementRef.getAttribute(\"transform\").match(translateRegex);\n\t\t// check for the match\n\t\tif (transformStr[0]) {\n\t\t\tconst transforms = transformStr[0].replace(/translate\\(/, \"\").replace(/\\)/, \"\").split(\",\");\n\n\t\t\treturn {\n\t\t\t\ttx: transforms[0],\n\t\t\t\tty: transforms[1]\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**************************************\n\t * Formatting & calculations *\n\t *************************************/\n\n\t/**\n\t * Gets x and y coordinates from a HTML transform attribute\n\t *\n\t * @export\n\t * @param {any} string the transform attribute string ie. transform(x,y)\n\t * @returns Returns an object with x and y offsets of the transform\n\t */\n\texport function getTranformOffsets(string) {\n\t\tconst regExp = /\\(([^)]+)\\)/;\n\t\tconst match = regExp.exec(string)[1];\n\t\tconst xyString = match.split(\",\");\n\n\t\treturn {\n\t\t\tx: parseFloat(xyString[0]),\n\t\t\ty: parseFloat(xyString[1])\n\t\t};\n\t}\n\n\t/**\n\t * Capitalizes first letter of a string\n\t *\n\t * @export\n\t * @param {any} string the string whose first letter you'd like to capitalize\n\t * @returns The input string with its first letter capitalized\n\t */\n\texport function capitalizeFirstLetter(string) {\n\t\treturn string[0].toUpperCase() + string.slice(1);\n\t}\n\n\t/**\n\t * Get the percentage of a datapoint compared to the entire data-set.\n\t * Returns 1 significant digit if percentage is less than 1%.\n\t * @export\n\t * @param {any} item\n\t * @param {any} fullData\n\t * @returns The percentage in the form of a number\n\t */\n\texport function convertValueToPercentage(item, fullData) {\n\t\tconst percentage = item / fullData.reduce((accum, val) => accum + val.value, 0) * 100;\n\t\treturn percentage < 1 ? percentage.toPrecision(1) : Math.floor(percentage);\n\t}\n\n\t/**************************************\n\t * Object/array related checks *\n\t *************************************/\n\t/**\n\t * Get the difference between two arrays' items\n\t *\n\t * @export\n\t * @param {any[]} oldArray\n\t * @param {any[]} newArray\n\t * @returns The items missing in newArray from oldArray, and items added to newArray compared to oldArray\n\t */\n\texport function arrayDifferences(oldArray: any[], newArray: any[]) {\n\t\tconst difference = {\n\t\t\tmissing: [],\n\t\t\tadded: []\n\t\t};\n\n\t\toldArray.forEach(element => {\n\t\t\tif (newArray.indexOf(element) === -1) {\n\t\t\t\tdifference.missing.push(element);\n\t\t\t}\n\t\t});\n\n\t\tnewArray.forEach(element => {\n\t\t\tif (oldArray.indexOf(element) === -1) {\n\t\t\t\tdifference.added.push(element);\n\t\t\t}\n\t\t});\n\n\t\treturn difference;\n\t}\n\n\t/**\n\t * Lists out the duplicated keys in an array of data\n\t *\n\t * @export\n\t * @param {*} data - array of data\n\t * @returns A list of the duplicated keys in data\n\t */\n\texport function getDuplicateValues(arr: any) {\n\t\tconst values = [];\n\t\tconst duplicateValues = [];\n\n\t\tarr.forEach(value => {\n\t\t\tif (values.indexOf(value) !== -1 && duplicateValues.indexOf(value) === -1) {\n\t\t\t\tduplicateValues.push(value);\n\t\t\t}\n\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\treturn duplicateValues;\n\t}\n\n\t// ================================================================================\n\t// D3 Extensions\n\t// ================================================================================\n\t/**\n\t * In D3, moves an element to the front of the canvas\n\t *\n\t * @export\n\t * @param {any} element\n\t * @returns The function to be used by D3 to push element to the top of the canvas\n\t */\n\texport function moveToFront(element) {\n\t\treturn element.each(function() {\n\t\t\tthis.parentNode.appendChild(this);\n\t\t});\n\t}\n\n\t// ================================================================================\n\t// Style Helpers\n\t// ================================================================================\n\n\texport const getProperty = (object, ...propPath) => {\n\t\tlet position = object;\n\t\tif (position) {\n\t\t\tfor (const prop of propPath) {\n\t\t\t\tif (position[prop] !== null && position[prop] !== undefined) {\n\t\t\t\t\tposition = position[prop];\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn position;\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tinterface SVGPathCoordinates {\n\t\tx0: number;\n\t\tx1: number;\n\t\ty0: number;\n\t\ty1: number;\n\t}\n\n\texport const flipSVGCoordinatesBasedOnOrientation = (verticalCoordinates: SVGPathCoordinates, orientation?: CartesianOrientations) => {\n\t\tif (orientation === CartesianOrientations.HORIZONTAL) {\n\t\t\treturn {\n\t\t\t\ty0: verticalCoordinates.x0,\n\t\t\t\ty1: verticalCoordinates.x1,\n\t\t\t\tx0: verticalCoordinates.y0,\n\t\t\t\tx1: verticalCoordinates.y1\n\t\t\t};\n\t\t}\n\n\t\treturn verticalCoordinates;\n\t};\n\n\texport const generateSVGPathString = (verticalCoordinates: SVGPathCoordinates, orientation?: CartesianOrientations) => {\n\t\tconst { x0, x1, y0, y1 } = flipSVGCoordinatesBasedOnOrientation(verticalCoordinates, orientation);\n\n\t\treturn `M${x0},${y0}L${x0},${y1}L${x1},${y1}L${x1},${y0}L${x0},${y0}`;\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["tools.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal imports\nimport {\n\tAxisChartOptions,\n\tCartesianOrientations,\n\tScaleTypes\n} from \"./interfaces\";\n\nimport {\n\tdebounce as lodashDebounce,\n\tmerge as lodashMerge,\n\tcloneDeep as lodashCloneDeep,\n\tuniq as lodashUnique,\n\tclamp as lodashClamp,\n\t// the imports below are needed because of typescript bug (error TS4029)\n\tCancelable,\n\tDebounceSettings\n} from \"lodash-es\";\n\n// Functions\nexport namespace Tools {\n\t// Export these functions from lodash\n\texport const debounce = lodashDebounce;\n\texport const clone = lodashCloneDeep;\n\texport const merge = lodashMerge;\n\texport const removeArrayDuplicates = lodashUnique;\n\texport const clamp = lodashClamp;\n\n\t/**\n\t * Returns default chart options merged with provided options,\n\t * with special cases for axes.\n\t * Axes object will not merge the not provided axes.\n\t *\n\t * @export\n\t * @param {AxisChartOptions} defaultOptions Configuration.options[chartType]\n\t * @param {AxisChartOptions} providedOptions user provided options\n\t * @returns merged options\n\t */\n\texport function mergeDefaultChartOptions(defaultOptions: any, providedOptions: any) {\n\t\tdefaultOptions = Tools.clone(defaultOptions);\n\t\tconst providedAxesNames = Object.keys(providedOptions.axes || {});\n\n\t\tif (providedAxesNames.length === 0) {\n\t\t\tdelete defaultOptions.axes;\n\t\t}\n\n\t\t// Update deprecated options to work with the tabular data format\n\t\t// Similar to the functionality in model.transformToTabularData()\n\t\tfor (const axisName in defaultOptions.axes) {\n\t\t\tif (providedAxesNames.includes(axisName)) {\n\t\t\t\tconst providedAxisOptions = providedOptions.axes[axisName];\n\n\t\t\t\tif (providedAxisOptions[\"primary\"] || providedAxisOptions[\"secondary\"]) {\n\t\t\t\t\tconsole.warn(\"`primary` & `secondary` are no longer needed for axis configurations. Read more here https://carbon-design-system.github.io/carbon-charts/?path=/story/tutorials--tabular-data-format\")\n\t\t\t\t}\n\n\t\t\t\tconst identifier = providedAxisOptions[\"mapsTo\"];\n\t\t\t\tif (identifier === undefined || identifier === null) {\n\t\t\t\t\tconst scaleType = providedAxisOptions[\"scaleType\"];\n\n\t\t\t\t\tif (scaleType === undefined || scaleType === null) {\n\t\t\t\t\t\tprovidedAxisOptions[\"mapsTo\"] = \"value\";\n\t\t\t\t\t} else if (scaleType === ScaleTypes.TIME) {\n\t\t\t\t\t\tprovidedAxisOptions[\"mapsTo\"] = \"date\";\n\t\t\t\t\t} else if (scaleType === ScaleTypes.LABELS) {\n\t\t\t\t\t\tprovidedAxisOptions[\"mapsTo\"] = \"key\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete defaultOptions.axes[axisName];\n\t\t\t}\n\t\t}\n\n\t\treturn Tools.merge(\n\t\t\tdefaultOptions,\n\t\t\tprovidedOptions\n\t\t);\n\t}\n\n\t/**************************************\n\t * DOM-related operations *\n\t *************************************/\n\n\t/**\n\t * Get width & height of an element\n\t *\n\t * @export\n\t * @param {any} el element to get dimensions from\n\t * @returns an object containing the width and height of el\n\t */\n\texport function getDimensions(el) {\n\t\treturn {\n\t\t\twidth: parseFloat(el.style.width.replace(\"px\", \"\") || el.offsetWidth),\n\t\t\theight: parseFloat(el.style.height.replace(\"px\", \"\") || el.offsetHeight)\n\t\t};\n\t}\n\n\t/**\n\t * Returns an elements's x and y translations from attribute transform\n\t * @param {HTMLElement} element\n\t * @returns an object containing the x and y translations or null\n\t */\n\texport function getTranslationValues(elementRef: HTMLElement) {\n\t\t// regex to ONLY get values for translate (instead of all rotate, translate, skew, etc)\n\t\tconst translateRegex = /translate\\([0-9]+\\.?[0-9]*,[0-9]+\\.?[0-9]*\\)/;\n\n\t\tconst transformStr = elementRef.getAttribute(\"transform\").match(translateRegex);\n\t\t// check for the match\n\t\tif (transformStr[0]) {\n\t\t\tconst transforms = transformStr[0].replace(/translate\\(/, \"\").replace(/\\)/, \"\").split(\",\");\n\n\t\t\treturn {\n\t\t\t\ttx: transforms[0],\n\t\t\t\tty: transforms[1]\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**************************************\n\t * Formatting & calculations *\n\t *************************************/\n\n\t/**\n\t * Gets x and y coordinates from a HTML transform attribute\n\t *\n\t * @export\n\t * @param {any} string the transform attribute string ie. transform(x,y)\n\t * @returns Returns an object with x and y offsets of the transform\n\t */\n\texport function getTranformOffsets(string) {\n\t\tconst regExp = /\\(([^)]+)\\)/;\n\t\tconst match = regExp.exec(string)[1];\n\t\tconst xyString = match.split(\",\");\n\n\t\treturn {\n\t\t\tx: parseFloat(xyString[0]),\n\t\t\ty: parseFloat(xyString[1])\n\t\t};\n\t}\n\n\t/**\n\t * Capitalizes first letter of a string\n\t *\n\t * @export\n\t * @param {any} string the string whose first letter you'd like to capitalize\n\t * @returns The input string with its first letter capitalized\n\t */\n\texport function capitalizeFirstLetter(string) {\n\t\treturn string[0].toUpperCase() + string.slice(1);\n\t}\n\n\t/**\n\t * Get the percentage of a datapoint compared to the entire data-set.\n\t * Returns 1 significant digit if percentage is less than 1%.\n\t * @export\n\t * @param {any} item\n\t * @param {any} fullData\n\t * @returns The percentage in the form of a number\n\t */\n\texport function convertValueToPercentage(item, fullData) {\n\t\tconst percentage = item / fullData.reduce((accum, val) => accum + val.value, 0) * 100;\n\t\treturn percentage < 1 ? percentage.toPrecision(1) : Math.floor(percentage);\n\t}\n\n\t/**************************************\n\t * Object/array related checks *\n\t *************************************/\n\t/**\n\t * Get the difference between two arrays' items\n\t *\n\t * @export\n\t * @param {any[]} oldArray\n\t * @param {any[]} newArray\n\t * @returns The items missing in newArray from oldArray, and items added to newArray compared to oldArray\n\t */\n\texport function arrayDifferences(oldArray: any[], newArray: any[]) {\n\t\tconst difference = {\n\t\t\tmissing: [],\n\t\t\tadded: []\n\t\t};\n\n\t\toldArray.forEach(element => {\n\t\t\tif (newArray.indexOf(element) === -1) {\n\t\t\t\tdifference.missing.push(element);\n\t\t\t}\n\t\t});\n\n\t\tnewArray.forEach(element => {\n\t\t\tif (oldArray.indexOf(element) === -1) {\n\t\t\t\tdifference.added.push(element);\n\t\t\t}\n\t\t});\n\n\t\treturn difference;\n\t}\n\n\t/**\n\t * Lists out the duplicated keys in an array of data\n\t *\n\t * @export\n\t * @param {*} data - array of data\n\t * @returns A list of the duplicated keys in data\n\t */\n\texport function getDuplicateValues(arr: any) {\n\t\tconst values = [];\n\t\tconst duplicateValues = [];\n\n\t\tarr.forEach(value => {\n\t\t\tif (values.indexOf(value) !== -1 && duplicateValues.indexOf(value) === -1) {\n\t\t\t\tduplicateValues.push(value);\n\t\t\t}\n\n\t\t\tvalues.push(value);\n\t\t});\n\n\t\treturn duplicateValues;\n\t}\n\n\t// ================================================================================\n\t// D3 Extensions\n\t// ================================================================================\n\t/**\n\t * In D3, moves an element to the front of the canvas\n\t *\n\t * @export\n\t * @param {any} element\n\t * @returns The function to be used by D3 to push element to the top of the canvas\n\t */\n\texport function moveToFront(element) {\n\t\treturn element.each(function() {\n\t\t\tthis.parentNode.appendChild(this);\n\t\t});\n\t}\n\n\t// ================================================================================\n\t// Style Helpers\n\t// ================================================================================\n\n\texport const getProperty = (object, ...propPath) => {\n\t\tlet position = object;\n\t\tif (position) {\n\t\t\tfor (const prop of propPath) {\n\t\t\t\tif (position[prop] !== null && position[prop] !== undefined) {\n\t\t\t\t\tposition = position[prop];\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn position;\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tinterface SVGPathCoordinates {\n\t\tx0: number;\n\t\tx1: number;\n\t\ty0: number;\n\t\ty1: number;\n\t}\n\n\texport const flipSVGCoordinatesBasedOnOrientation = (verticalCoordinates: SVGPathCoordinates, orientation?: CartesianOrientations) => {\n\t\tif (orientation === CartesianOrientations.HORIZONTAL) {\n\t\t\treturn {\n\t\t\t\ty0: verticalCoordinates.x0,\n\t\t\t\ty1: verticalCoordinates.x1,\n\t\t\t\tx0: verticalCoordinates.y0,\n\t\t\t\tx1: verticalCoordinates.y1\n\t\t\t};\n\t\t}\n\n\t\treturn verticalCoordinates;\n\t};\n\n\texport const generateSVGPathString = (verticalCoordinates: SVGPathCoordinates, orientation?: CartesianOrientations) => {\n\t\tconst { x0, x1, y0, y1 } = flipSVGCoordinatesBasedOnOrientation(verticalCoordinates, orientation);\n\n\t\treturn `M${x0},${y0}L${x0},${y1}L${x1},${y1}L${x1},${y0}L${x0},${y0}`;\n\t};\n}\n"]}
|