@pie-lib/charting 5.16.1-beta.0 → 5.18.0

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.
Files changed (76) hide show
  1. package/CHANGELOG.json +1 -581
  2. package/CHANGELOG.md +145 -1
  3. package/lib/actions-button.js +174 -0
  4. package/lib/actions-button.js.map +1 -0
  5. package/lib/axes.js +614 -0
  6. package/lib/axes.js.map +1 -0
  7. package/lib/bars/bar.js +86 -0
  8. package/lib/bars/bar.js.map +1 -0
  9. package/lib/bars/common/bars.js +299 -0
  10. package/lib/bars/common/bars.js.map +1 -0
  11. package/lib/bars/histogram.js +87 -0
  12. package/lib/bars/histogram.js.map +1 -0
  13. package/lib/chart-setup.js +458 -0
  14. package/lib/chart-setup.js.map +1 -0
  15. package/lib/chart-type.js +71 -0
  16. package/lib/chart-type.js.map +1 -0
  17. package/lib/chart-types.js +31 -0
  18. package/lib/chart-types.js.map +1 -0
  19. package/lib/chart.js +447 -0
  20. package/lib/chart.js.map +1 -0
  21. package/lib/common/drag-handle.js +175 -0
  22. package/lib/common/drag-handle.js.map +1 -0
  23. package/lib/common/drag-icon.js +52 -0
  24. package/lib/common/drag-icon.js.map +1 -0
  25. package/lib/common/styles.js +40 -0
  26. package/lib/common/styles.js.map +1 -0
  27. package/lib/grid.js +141 -0
  28. package/lib/grid.js.map +1 -0
  29. package/lib/index.js +48 -0
  30. package/lib/index.js.map +1 -0
  31. package/lib/key-legend.js +111 -0
  32. package/lib/key-legend.js.map +1 -0
  33. package/lib/line/common/drag-handle.js +151 -0
  34. package/lib/line/common/drag-handle.js.map +1 -0
  35. package/lib/line/common/line.js +257 -0
  36. package/lib/line/common/line.js.map +1 -0
  37. package/lib/line/line-cross.js +203 -0
  38. package/lib/line/line-cross.js.map +1 -0
  39. package/lib/line/line-dot.js +156 -0
  40. package/lib/line/line-dot.js.map +1 -0
  41. package/lib/mark-label.js +260 -0
  42. package/lib/mark-label.js.map +1 -0
  43. package/lib/plot/common/plot.js +281 -0
  44. package/lib/plot/common/plot.js.map +1 -0
  45. package/lib/plot/dot.js +123 -0
  46. package/lib/plot/dot.js.map +1 -0
  47. package/lib/plot/line.js +152 -0
  48. package/lib/plot/line.js.map +1 -0
  49. package/lib/shared/index.js +136 -0
  50. package/lib/tool-menu.js +142 -0
  51. package/lib/tool-menu.js.map +1 -0
  52. package/lib/utils.js +244 -0
  53. package/lib/utils.js.map +1 -0
  54. package/package.json +5 -38
  55. package/src/__tests__/__snapshots__/axes.test.jsx.snap +1 -0
  56. package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -18
  57. package/src/__tests__/__snapshots__/grid.test.jsx.snap +61 -17
  58. package/src/__tests__/axes.test.jsx +0 -5
  59. package/src/__tests__/chart.test.jsx +8 -0
  60. package/src/actions-button.jsx +109 -0
  61. package/src/axes.jsx +4 -30
  62. package/src/bars/common/bars.jsx +8 -10
  63. package/src/chart-setup.jsx +1 -1
  64. package/src/chart.jsx +31 -26
  65. package/src/common/drag-handle.jsx +3 -3
  66. package/src/common/styles.js +1 -1
  67. package/src/grid.jsx +38 -13
  68. package/src/index.js +2 -1
  69. package/src/key-legend.jsx +75 -0
  70. package/src/line/common/drag-handle.jsx +3 -9
  71. package/src/line/common/line.jsx +2 -6
  72. package/src/line/line-cross.js +29 -2
  73. package/src/line/line-dot.js +36 -19
  74. package/src/mark-label.jsx +7 -2
  75. package/src/plot/common/plot.jsx +8 -5
  76. package/src/tool-menu.jsx +1 -1
package/lib/utils.js ADDED
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.tickCount = exports.point = exports.getTopPadding = exports.getTickValues = exports.getScale = exports.getRotateAngle = exports.getGridLinesAndAxisByChartType = exports.getDomainAndRangeByChartType = exports.getAdjustedX = exports.dataToXBand = exports.bounds = exports.bandKey = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _scale = require("@vx/scale");
13
+
14
+ var _plot = require("@pie-lib/plot");
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
+
20
+ var tickCount = _plot.utils.tickCount;
21
+ exports.tickCount = tickCount;
22
+ var bounds = _plot.utils.bounds;
23
+ exports.bounds = bounds;
24
+ var point = _plot.utils.point;
25
+ exports.point = point;
26
+
27
+ var bandKey = function bandKey(d, index) {
28
+ return "".concat(index, "-").concat(d.label || '-');
29
+ };
30
+
31
+ exports.bandKey = bandKey;
32
+
33
+ var dataToXBand = function dataToXBand(scaleX, data, width, type) {
34
+ switch (type) {
35
+ case 'bar':
36
+ case 'dotPlot':
37
+ case 'linePlot':
38
+ return (0, _scale.scaleBand)({
39
+ rangeRound: [0, width],
40
+ domain: data && data.map(bandKey),
41
+ padding: 0.2
42
+ });
43
+
44
+ case 'histogram':
45
+ return (0, _scale.scaleBand)({
46
+ rangeRound: [0, width],
47
+ domain: data && data.map(bandKey),
48
+ padding: 0
49
+ });
50
+
51
+ case 'lineCross':
52
+ case 'lineDot':
53
+ return (0, _scale.scalePoint)({
54
+ domain: data && data.map(bandKey),
55
+ rangeRound: [0, width]
56
+ });
57
+
58
+ default:
59
+ return (0, _scale.scaleBand)({
60
+ range: [0, width],
61
+ domain: data && data.map(bandKey),
62
+ padding: 0
63
+ });
64
+ }
65
+ };
66
+
67
+ exports.dataToXBand = dataToXBand;
68
+
69
+ var getTickValues = function getTickValues() {
70
+ var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
71
+ var tickValues = [];
72
+ var tickVal = prop.min;
73
+
74
+ while (tickVal <= prop.max) {
75
+ tickValues.push(tickVal);
76
+ tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;
77
+ }
78
+
79
+ return tickValues;
80
+ };
81
+
82
+ exports.getTickValues = getTickValues;
83
+
84
+ var getDomainAndRangeByChartType = function getDomainAndRangeByChartType(domain, range, chartType) {
85
+ var _ref = range || {},
86
+ step = _ref.step,
87
+ labelStep = _ref.labelStep,
88
+ min = _ref.min,
89
+ max = _ref.max;
90
+
91
+ if (!min) {
92
+ min = 0;
93
+ }
94
+
95
+ if (!max || max < 0) {
96
+ max = range.min + 1;
97
+ }
98
+
99
+ if (!step) {
100
+ step = labelStep || 1;
101
+ }
102
+
103
+ if (!labelStep || isNaN(labelStep) && step) {
104
+ labelStep = step || 1;
105
+ }
106
+
107
+ range.max = max;
108
+
109
+ switch (chartType) {
110
+ // if chart is dot plot or line plot, we should ignore step and make sure that min & max are integer values
111
+ case 'dotPlot':
112
+ case 'linePlot':
113
+ {
114
+ var intMin = Math.round(min);
115
+ var intMax = Math.round(max);
116
+ return {
117
+ domain: _objectSpread(_objectSpread({}, domain), {}, {
118
+ step: 1,
119
+ labelStep: 1,
120
+ min: 0,
121
+ max: 1
122
+ }),
123
+ range: _objectSpread(_objectSpread({}, range), {}, {
124
+ min: intMin,
125
+ max: intMin === intMax ? intMin + 1 : intMax,
126
+ labelStep: labelStep,
127
+ step: 1
128
+ })
129
+ };
130
+ }
131
+
132
+ default:
133
+ return {
134
+ domain: _objectSpread(_objectSpread({}, domain), {}, {
135
+ step: 1,
136
+ labelStep: 1,
137
+ min: 0,
138
+ max: 1
139
+ }),
140
+ range: _objectSpread(_objectSpread({}, range), {}, {
141
+ labelStep: labelStep,
142
+ step: step
143
+ })
144
+ };
145
+ }
146
+ };
147
+
148
+ exports.getDomainAndRangeByChartType = getDomainAndRangeByChartType;
149
+
150
+ var getGridLinesAndAxisByChartType = function getGridLinesAndAxisByChartType(range, chartType) {
151
+ switch (chartType) {
152
+ case 'lineDot':
153
+ case 'lineCross':
154
+ return {
155
+ verticalLines: undefined,
156
+ horizontalLines: getTickValues(range),
157
+ leftAxis: true
158
+ };
159
+
160
+ case 'dotPlot':
161
+ case 'linePlot':
162
+ return {
163
+ verticalLines: [],
164
+ horizontalLines: [],
165
+ leftAxis: false
166
+ };
167
+
168
+ default:
169
+ return {
170
+ verticalLines: [],
171
+ horizontalLines: getTickValues(range),
172
+ leftAxis: true
173
+ };
174
+ }
175
+ };
176
+
177
+ exports.getGridLinesAndAxisByChartType = getGridLinesAndAxisByChartType;
178
+
179
+ var getRotateAngle = function getRotateAngle(fontSize, height) {
180
+ if (height >= fontSize * 2) {
181
+ return 25;
182
+ }
183
+
184
+ return 0;
185
+ };
186
+
187
+ exports.getRotateAngle = getRotateAngle;
188
+
189
+ var getTopPadding = function getTopPadding(barWidth) {
190
+ if (barWidth < 30) {
191
+ return 50;
192
+ }
193
+
194
+ if (barWidth < 40) {
195
+ return 30;
196
+ }
197
+
198
+ if (barWidth < 60) {
199
+ return 15;
200
+ }
201
+
202
+ return 0;
203
+ }; // This function calculates the transformation scale for SVG and the icon's vertical distance from its category
204
+
205
+
206
+ exports.getTopPadding = getTopPadding;
207
+
208
+ var getScale = function getScale(width) {
209
+ var scale, deltay;
210
+
211
+ if (width > 91) {
212
+ scale = 1.3;
213
+ deltay = -55;
214
+ } else if (width > 45) {
215
+ scale = 1.1;
216
+ deltay = -45;
217
+ } else if (width > 40) {
218
+ scale = 0.5 + (width - 34) * 0.02;
219
+ deltay = -25;
220
+ } else if (width > 30) {
221
+ scale = 0.5 + (width - 34) * 0.02;
222
+ deltay = -20;
223
+ } else {
224
+ scale = 0.5 * Math.pow(0.98, 34 - width); // 0.98 is the reduction factor. Adjust to control scaling.
225
+
226
+ deltay = -15;
227
+ }
228
+
229
+ return {
230
+ scale: scale,
231
+ deltay: deltay
232
+ };
233
+ };
234
+
235
+ exports.getScale = getScale;
236
+
237
+ var getAdjustedX = function getAdjustedX(width, scaleValue) {
238
+ var innerWidthOriginal = 57;
239
+ var effectiveInnerWidth = innerWidthOriginal * scaleValue;
240
+ return (width - effectiveInnerWidth) / 2;
241
+ };
242
+
243
+ exports.getAdjustedX = getAdjustedX;
244
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.js"],"names":["tickCount","utils","bounds","point","bandKey","d","index","label","dataToXBand","scaleX","data","width","type","rangeRound","domain","map","padding","range","getTickValues","prop","tickValues","tickVal","min","max","push","Math","round","step","getDomainAndRangeByChartType","chartType","labelStep","isNaN","intMin","intMax","getGridLinesAndAxisByChartType","verticalLines","undefined","horizontalLines","leftAxis","getRotateAngle","fontSize","height","getTopPadding","barWidth","getScale","scale","deltay","pow","getAdjustedX","scaleValue","innerWidthOriginal","effectiveInnerWidth"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAEO,IAAMA,SAAS,GAAGC,YAAMD,SAAxB;;AACA,IAAME,MAAM,GAAGD,YAAMC,MAArB;;AACA,IAAMC,KAAK,GAAGF,YAAME,KAApB;;;AAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAACC,CAAD,EAAIC,KAAJ;AAAA,mBAAiBA,KAAjB,cAA0BD,CAAC,CAACE,KAAF,IAAW,GAArC;AAAA,CAAhB;;;;AAEA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,MAAD,EAASC,IAAT,EAAeC,KAAf,EAAsBC,IAAtB,EAA+B;AACxD,UAAQA,IAAR;AACE,SAAK,KAAL;AACA,SAAK,SAAL;AACA,SAAK,UAAL;AACE,aAAO,sBAAU;AACfC,QAAAA,UAAU,EAAE,CAAC,CAAD,EAAIF,KAAJ,CADG;AAEfG,QAAAA,MAAM,EAAEJ,IAAI,IAAIA,IAAI,CAACK,GAAL,CAASX,OAAT,CAFD;AAGfY,QAAAA,OAAO,EAAE;AAHM,OAAV,CAAP;;AAMF,SAAK,WAAL;AACE,aAAO,sBAAU;AACfH,QAAAA,UAAU,EAAE,CAAC,CAAD,EAAIF,KAAJ,CADG;AAEfG,QAAAA,MAAM,EAAEJ,IAAI,IAAIA,IAAI,CAACK,GAAL,CAASX,OAAT,CAFD;AAGfY,QAAAA,OAAO,EAAE;AAHM,OAAV,CAAP;;AAMF,SAAK,WAAL;AACA,SAAK,SAAL;AACE,aAAO,uBAAW;AAChBF,QAAAA,MAAM,EAAEJ,IAAI,IAAIA,IAAI,CAACK,GAAL,CAASX,OAAT,CADA;AAEhBS,QAAAA,UAAU,EAAE,CAAC,CAAD,EAAIF,KAAJ;AAFI,OAAX,CAAP;;AAKF;AACE,aAAO,sBAAU;AACfM,QAAAA,KAAK,EAAE,CAAC,CAAD,EAAIN,KAAJ,CADQ;AAEfG,QAAAA,MAAM,EAAEJ,IAAI,IAAIA,IAAI,CAACK,GAAL,CAASX,OAAT,CAFD;AAGfY,QAAAA,OAAO,EAAE;AAHM,OAAV,CAAP;AAzBJ;AA+BD,CAhCM;;;;AAkCA,IAAME,aAAa,GAAG,SAAhBA,aAAgB,GAAe;AAAA,MAAdC,IAAc,uEAAP,EAAO;AAC1C,MAAMC,UAAU,GAAG,EAAnB;AACA,MAAIC,OAAO,GAAGF,IAAI,CAACG,GAAnB;;AAEA,SAAOD,OAAO,IAAIF,IAAI,CAACI,GAAvB,EAA4B;AAC1BH,IAAAA,UAAU,CAACI,IAAX,CAAgBH,OAAhB;AACAA,IAAAA,OAAO,GAAGI,IAAI,CAACC,KAAL,CAAW,CAACL,OAAO,GAAGF,IAAI,CAACQ,IAAhB,IAAwB,KAAnC,IAA4C,KAAtD;AACD;;AAED,SAAOP,UAAP;AACD,CAVM;;;;AAYA,IAAMQ,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACd,MAAD,EAASG,KAAT,EAAgBY,SAAhB,EAA8B;AACxE,aAAoCZ,KAAK,IAAI,EAA7C;AAAA,MAAMU,IAAN,QAAMA,IAAN;AAAA,MAAYG,SAAZ,QAAYA,SAAZ;AAAA,MAAuBR,GAAvB,QAAuBA,GAAvB;AAAA,MAA4BC,GAA5B,QAA4BA,GAA5B;;AAEA,MAAI,CAACD,GAAL,EAAU;AACRA,IAAAA,GAAG,GAAG,CAAN;AACD;;AAED,MAAI,CAACC,GAAD,IAAQA,GAAG,GAAG,CAAlB,EAAqB;AACnBA,IAAAA,GAAG,GAAGN,KAAK,CAACK,GAAN,GAAY,CAAlB;AACD;;AAED,MAAI,CAACK,IAAL,EAAW;AACTA,IAAAA,IAAI,GAAGG,SAAS,IAAI,CAApB;AACD;;AACD,MAAI,CAACA,SAAD,IAAeC,KAAK,CAACD,SAAD,CAAL,IAAoBH,IAAvC,EAA8C;AAC5CG,IAAAA,SAAS,GAAGH,IAAI,IAAI,CAApB;AACD;;AAEDV,EAAAA,KAAK,CAACM,GAAN,GAAYA,GAAZ;;AAEA,UAAQM,SAAR;AACE;AACA,SAAK,SAAL;AACA,SAAK,UAAL;AAAiB;AACf,YAAMG,MAAM,GAAGP,IAAI,CAACC,KAAL,CAAWJ,GAAX,CAAf;AACA,YAAMW,MAAM,GAAGR,IAAI,CAACC,KAAL,CAAWH,GAAX,CAAf;AAEA,eAAO;AACLT,UAAAA,MAAM,kCACDA,MADC;AAEJa,YAAAA,IAAI,EAAE,CAFF;AAGJG,YAAAA,SAAS,EAAE,CAHP;AAIJR,YAAAA,GAAG,EAAE,CAJD;AAKJC,YAAAA,GAAG,EAAE;AALD,YADD;AAQLN,UAAAA,KAAK,kCACAA,KADA;AAEHK,YAAAA,GAAG,EAAEU,MAFF;AAGHT,YAAAA,GAAG,EAAES,MAAM,KAAKC,MAAX,GAAoBD,MAAM,GAAG,CAA7B,GAAiCC,MAHnC;AAIHH,YAAAA,SAAS,EAATA,SAJG;AAKHH,YAAAA,IAAI,EAAE;AALH;AARA,SAAP;AAgBD;;AAED;AACE,aAAO;AACLb,QAAAA,MAAM,kCACDA,MADC;AAEJa,UAAAA,IAAI,EAAE,CAFF;AAGJG,UAAAA,SAAS,EAAE,CAHP;AAIJR,UAAAA,GAAG,EAAE,CAJD;AAKJC,UAAAA,GAAG,EAAE;AALD,UADD;AAQLN,QAAAA,KAAK,kCACAA,KADA;AAEHa,UAAAA,SAAS,EAATA,SAFG;AAGHH,UAAAA,IAAI,EAAJA;AAHG;AARA,OAAP;AA1BJ;AAyCD,CA7DM;;;;AA+DA,IAAMO,8BAA8B,GAAG,SAAjCA,8BAAiC,CAACjB,KAAD,EAAQY,SAAR,EAAsB;AAClE,UAAQA,SAAR;AACE,SAAK,SAAL;AACA,SAAK,WAAL;AACE,aAAO;AACLM,QAAAA,aAAa,EAAEC,SADV;AAELC,QAAAA,eAAe,EAAEnB,aAAa,CAACD,KAAD,CAFzB;AAGLqB,QAAAA,QAAQ,EAAE;AAHL,OAAP;;AAMF,SAAK,SAAL;AACA,SAAK,UAAL;AACE,aAAO;AACLH,QAAAA,aAAa,EAAE,EADV;AAELE,QAAAA,eAAe,EAAE,EAFZ;AAGLC,QAAAA,QAAQ,EAAE;AAHL,OAAP;;AAMF;AACE,aAAO;AACLH,QAAAA,aAAa,EAAE,EADV;AAELE,QAAAA,eAAe,EAAEnB,aAAa,CAACD,KAAD,CAFzB;AAGLqB,QAAAA,QAAQ,EAAE;AAHL,OAAP;AAlBJ;AAwBD,CAzBM;;;;AA2BA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,QAAD,EAAWC,MAAX,EAAsB;AAClD,MAAIA,MAAM,IAAID,QAAQ,GAAG,CAAzB,EAA4B;AAC1B,WAAO,EAAP;AACD;;AAED,SAAO,CAAP;AACD,CANM;;;;AAQA,IAAME,aAAa,GAAG,SAAhBA,aAAgB,CAACC,QAAD,EAAc;AACzC,MAAIA,QAAQ,GAAG,EAAf,EAAmB;AACjB,WAAO,EAAP;AACD;;AAED,MAAIA,QAAQ,GAAG,EAAf,EAAmB;AACjB,WAAO,EAAP;AACD;;AAED,MAAIA,QAAQ,GAAG,EAAf,EAAmB;AACjB,WAAO,EAAP;AACD;;AAED,SAAO,CAAP;AACD,CAdM,C,CAgBP;;;;;AACO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAACjC,KAAD,EAAW;AACjC,MAAIkC,KAAJ,EAAWC,MAAX;;AAEA,MAAInC,KAAK,GAAG,EAAZ,EAAgB;AACdkC,IAAAA,KAAK,GAAG,GAAR;AACAC,IAAAA,MAAM,GAAG,CAAC,EAAV;AACD,GAHD,MAGO,IAAInC,KAAK,GAAG,EAAZ,EAAgB;AACrBkC,IAAAA,KAAK,GAAG,GAAR;AACAC,IAAAA,MAAM,GAAG,CAAC,EAAV;AACD,GAHM,MAGA,IAAInC,KAAK,GAAG,EAAZ,EAAgB;AACrBkC,IAAAA,KAAK,GAAG,MAAM,CAAClC,KAAK,GAAG,EAAT,IAAe,IAA7B;AACAmC,IAAAA,MAAM,GAAG,CAAC,EAAV;AACD,GAHM,MAGA,IAAInC,KAAK,GAAG,EAAZ,EAAgB;AACrBkC,IAAAA,KAAK,GAAG,MAAM,CAAClC,KAAK,GAAG,EAAT,IAAe,IAA7B;AACAmC,IAAAA,MAAM,GAAG,CAAC,EAAV;AACD,GAHM,MAGA;AACLD,IAAAA,KAAK,GAAG,MAAMpB,IAAI,CAACsB,GAAL,CAAS,IAAT,EAAe,KAAKpC,KAApB,CAAd,CADK,CACqC;;AAC1CmC,IAAAA,MAAM,GAAG,CAAC,EAAV;AACD;;AAED,SAAO;AAAED,IAAAA,KAAK,EAALA,KAAF;AAASC,IAAAA,MAAM,EAANA;AAAT,GAAP;AACD,CArBM;;;;AAuBA,IAAME,YAAY,GAAG,SAAfA,YAAe,CAACrC,KAAD,EAAQsC,UAAR,EAAuB;AACjD,MAAMC,kBAAkB,GAAG,EAA3B;AACA,MAAMC,mBAAmB,GAAGD,kBAAkB,GAAGD,UAAjD;AACA,SAAO,CAACtC,KAAK,GAAGwC,mBAAT,IAAgC,CAAvC;AACD,CAJM","sourcesContent":["import { scaleBand, scalePoint } from '@vx/scale';\nimport { utils } from '@pie-lib/plot';\n\nexport const tickCount = utils.tickCount;\nexport const bounds = utils.bounds;\nexport const point = utils.point;\n\nexport const bandKey = (d, index) => `${index}-${d.label || '-'}`;\n\nexport const dataToXBand = (scaleX, data, width, type) => {\n switch (type) {\n case 'bar':\n case 'dotPlot':\n case 'linePlot':\n return scaleBand({\n rangeRound: [0, width],\n domain: data && data.map(bandKey),\n padding: 0.2,\n });\n\n case 'histogram':\n return scaleBand({\n rangeRound: [0, width],\n domain: data && data.map(bandKey),\n padding: 0,\n });\n\n case 'lineCross':\n case 'lineDot':\n return scalePoint({\n domain: data && data.map(bandKey),\n rangeRound: [0, width],\n });\n\n default:\n return scaleBand({\n range: [0, width],\n domain: data && data.map(bandKey),\n padding: 0,\n });\n }\n};\n\nexport const getTickValues = (prop = {}) => {\n const tickValues = [];\n let tickVal = prop.min;\n\n while (tickVal <= prop.max) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;\n }\n\n return tickValues;\n};\n\nexport const getDomainAndRangeByChartType = (domain, range, chartType) => {\n let { step, labelStep, min, max } = range || {};\n\n if (!min) {\n min = 0;\n }\n\n if (!max || max < 0) {\n max = range.min + 1;\n }\n\n if (!step) {\n step = labelStep || 1;\n }\n if (!labelStep || (isNaN(labelStep) && step)) {\n labelStep = step || 1;\n }\n\n range.max = max;\n\n switch (chartType) {\n // if chart is dot plot or line plot, we should ignore step and make sure that min & max are integer values\n case 'dotPlot':\n case 'linePlot': {\n const intMin = Math.round(min);\n const intMax = Math.round(max);\n\n return {\n domain: {\n ...domain,\n step: 1,\n labelStep: 1,\n min: 0,\n max: 1,\n },\n range: {\n ...range,\n min: intMin,\n max: intMin === intMax ? intMin + 1 : intMax,\n labelStep,\n step: 1,\n },\n };\n }\n\n default:\n return {\n domain: {\n ...domain,\n step: 1,\n labelStep: 1,\n min: 0,\n max: 1,\n },\n range: {\n ...range,\n labelStep,\n step,\n },\n };\n }\n};\n\nexport const getGridLinesAndAxisByChartType = (range, chartType) => {\n switch (chartType) {\n case 'lineDot':\n case 'lineCross':\n return {\n verticalLines: undefined,\n horizontalLines: getTickValues(range),\n leftAxis: true,\n };\n\n case 'dotPlot':\n case 'linePlot':\n return {\n verticalLines: [],\n horizontalLines: [],\n leftAxis: false,\n };\n\n default:\n return {\n verticalLines: [],\n horizontalLines: getTickValues(range),\n leftAxis: true,\n };\n }\n};\n\nexport const getRotateAngle = (fontSize, height) => {\n if (height >= fontSize * 2) {\n return 25;\n }\n\n return 0;\n};\n\nexport const getTopPadding = (barWidth) => {\n if (barWidth < 30) {\n return 50;\n }\n\n if (barWidth < 40) {\n return 30;\n }\n\n if (barWidth < 60) {\n return 15;\n }\n\n return 0;\n};\n\n// This function calculates the transformation scale for SVG and the icon's vertical distance from its category\nexport const getScale = (width) => {\n let scale, deltay;\n\n if (width > 91) {\n scale = 1.3;\n deltay = -55;\n } else if (width > 45) {\n scale = 1.1;\n deltay = -45;\n } else if (width > 40) {\n scale = 0.5 + (width - 34) * 0.02;\n deltay = -25;\n } else if (width > 30) {\n scale = 0.5 + (width - 34) * 0.02;\n deltay = -20;\n } else {\n scale = 0.5 * Math.pow(0.98, 34 - width); // 0.98 is the reduction factor. Adjust to control scaling.\n deltay = -15;\n }\n\n return { scale, deltay };\n};\n\nexport const getAdjustedX = (width, scaleValue) => {\n const innerWidthOriginal = 57;\n const effectiveInnerWidth = innerWidthOriginal * scaleValue;\n return (width - effectiveInnerWidth) / 2;\n};\n"],"file":"utils.js"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "5.16.1-beta.0",
6
+ "version": "5.18.0",
7
7
  "description": "charting",
8
8
  "keywords": [
9
9
  "react",
@@ -19,20 +19,8 @@
19
19
  "dependencies": {
20
20
  "@mapbox/point-geometry": "^0.1.0",
21
21
  "@material-ui/core": "^3.8.3",
22
- "@material-ui/icons": "^3.0.2",
23
- "@pie-framework/mathml-to-latex": "1.4.4",
24
- "@pie-framework/mathquill": "1.1.4",
25
- "@pie-lib/config-ui": "beta",
26
- "@pie-lib/drag": "beta",
27
- "@pie-lib/editable-html": "beta",
28
- "@pie-lib/icons": "beta",
29
- "@pie-lib/math-input": "beta",
30
- "@pie-lib/math-rendering": "beta",
31
- "@pie-lib/math-toolbar": "beta",
32
- "@pie-lib/plot": "^2.8.1-beta.0",
33
- "@pie-lib/render-ui": "beta",
34
- "@pie-lib/test-utils": "beta",
35
- "@pie-lib/translator": "^2.4.1-beta.0",
22
+ "@pie-lib/plot": "beta",
23
+ "@pie-lib/translator": "beta",
36
24
  "@vx/axis": "^0.0.183",
37
25
  "@vx/event": "^0.0.182",
38
26
  "@vx/grid": "^0.0.183",
@@ -44,38 +32,17 @@
44
32
  "d3-scale": "^2.1.2",
45
33
  "d3-selection": "^1.3.2",
46
34
  "debug": "^4.1.1",
47
- "immutable": "^4.0.0-rc.12",
48
35
  "invariant": "^2.2.4",
49
36
  "lodash": "^4.17.11",
50
- "mathjax-full": "3.2.2",
51
- "mathjs": "^7.0.1",
52
- "prop-types": "^15.7.2",
53
37
  "react": "^16.8.1",
54
- "react-attr-converter": "^0.3.1",
55
- "react-dnd": "^14.0.5",
56
- "react-dnd-html5-backend": "^14.0.2",
57
- "react-dnd-multi-backend": "^6.0.2",
58
- "react-dnd-touch-backend": "^12.0.0",
59
- "react-dom": "^16.9.0",
60
38
  "react-draggable": "^3.1.1",
61
39
  "react-input-autosize": "^2.2.1",
62
- "react-measure": "^2.2.2",
63
40
  "react-redux": "^6.0.0",
64
- "react-transition-group": "^2.5.2",
65
41
  "redux": "^4.0.1",
66
- "redux-undo": "beta",
67
- "slate": "^0.36.2",
68
- "slate-edit-list": "^0.12.1",
69
- "slate-edit-table": "^0.17.0",
70
- "slate-html-serializer": "^0.6.12",
71
- "slate-plain-serializer": "^0.5.26",
72
- "slate-prop-types": "^0.4.38",
73
- "slate-react": "^0.14.3",
74
- "slate-soft-break": "^0.8.1",
75
- "to-style": "^1.3.3"
42
+ "redux-undo": "latest"
76
43
  },
77
44
  "peerDependencies": {
78
45
  "react": "^16.8.1"
79
46
  },
80
- "gitHead": "e2aa3ddac60f49bcb8c2562370f496323642f453"
47
+ "gitHead": "ecb1ca31aa1c24d23af00d5ad04ce73ed8871057"
81
48
  }
@@ -536,6 +536,7 @@ exports[`TickComponent snapshot1 renders 1`] = `
536
536
  }
537
537
  }
538
538
  inputRef={[Function]}
539
+ limitCharacters={true}
539
540
  mark={
540
541
  Object {
541
542
  "label": "test",
@@ -4,12 +4,6 @@ exports[`ChartAxes snapshot renders 1`] = `
4
4
  <div
5
5
  className="className"
6
6
  >
7
- <div>
8
- <ToolMenu
9
- addCategory={[Function]}
10
- disabled={true}
11
- />
12
- </div>
13
7
  <WithStyles(Root)
14
8
  defineChart={false}
15
9
  disabledLabels={true}
@@ -205,12 +199,6 @@ exports[`ChartAxes snapshot renders if size is not defined 1`] = `
205
199
  <div
206
200
  className="className"
207
201
  >
208
- <div>
209
- <ToolMenu
210
- addCategory={[Function]}
211
- disabled={true}
212
- />
213
- </div>
214
202
  <WithStyles(Root)
215
203
  defineChart={false}
216
204
  disabledLabels={true}
@@ -410,12 +398,6 @@ exports[`ChartAxes snapshot renders without chartType property 1`] = `
410
398
  <div
411
399
  className="className"
412
400
  >
413
- <div>
414
- <ToolMenu
415
- addCategory={[Function]}
416
- disabled={true}
417
- />
418
- </div>
419
401
  <WithStyles(Root)
420
402
  defineChart={false}
421
403
  disabledLabels={true}
@@ -1,28 +1,72 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Grid snapshot renders 1`] = `
4
- <r
4
+ <g
5
5
  className="className"
6
- height={400}
7
- width={400}
8
- xOffset={NaN}
9
- xScale={
10
- Object {
11
- "bandwidth": [Function],
6
+ >
7
+ <q
8
+ lineStyle={
9
+ Object {
10
+ "stroke": "var(--pie-faded-primary, #DCDAFB)",
11
+ "strokeWidth": 1,
12
+ }
12
13
  }
13
- }
14
- yScale={[MockFunction]}
15
- />
14
+ scale={[MockFunction]}
15
+ tickValues={Array []}
16
+ width={400}
17
+ />
18
+ <q
19
+ lineStyle={
20
+ Object {
21
+ "stroke": "#8E88EA",
22
+ "strokeWidth": 1,
23
+ }
24
+ }
25
+ scale={[MockFunction]}
26
+ tickValues={Array []}
27
+ width={400}
28
+ />
29
+ <V
30
+ height={400}
31
+ offset={NaN}
32
+ scale={
33
+ Object {
34
+ "bandwidth": [Function],
35
+ }
36
+ }
37
+ />
38
+ </g>
16
39
  `;
17
40
 
18
41
  exports[`Grid snapshot renders if graphProps is not defined 1`] = `
19
- <r
42
+ <g
20
43
  className="className"
21
- xOffset={NaN}
22
- xScale={
23
- Object {
24
- "bandwidth": [Function],
44
+ >
45
+ <q
46
+ lineStyle={
47
+ Object {
48
+ "stroke": "var(--pie-faded-primary, #DCDAFB)",
49
+ "strokeWidth": 1,
50
+ }
51
+ }
52
+ tickValues={Array []}
53
+ />
54
+ <q
55
+ lineStyle={
56
+ Object {
57
+ "stroke": "#8E88EA",
58
+ "strokeWidth": 1,
59
+ }
60
+ }
61
+ tickValues={Array []}
62
+ />
63
+ <V
64
+ offset={NaN}
65
+ scale={
66
+ Object {
67
+ "bandwidth": [Function],
68
+ }
25
69
  }
26
- }
27
- />
70
+ />
71
+ </g>
28
72
  `;
@@ -137,10 +137,5 @@ describe('TickComponent', () => {
137
137
  w.instance().changeCategory(0, 'new label');
138
138
  expect(onChangeCategory).toHaveBeenCalledWith(0, { value: 1, label: 'new label' });
139
139
  });
140
-
141
- it('calls onChange', () => {
142
- w.instance().deleteCategory(0);
143
- expect(onChange).toHaveBeenCalledWith([]);
144
- });
145
140
  });
146
141
  });
@@ -83,5 +83,13 @@ describe('ChartAxes', () => {
83
83
 
84
84
  expect(chart.type).toEqual('bar');
85
85
  });
86
+
87
+ it('deleteCategory', () => {
88
+ const w = wrapper();
89
+
90
+ w.instance().deleteCategory(0);
91
+
92
+ expect(onDataChange).toHaveBeenCalled();
93
+ });
86
94
  });
87
95
  });
@@ -0,0 +1,109 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { withStyles } from '@material-ui/core/styles';
4
+ import Button from '@material-ui/core/Button';
5
+ import Popover from '@material-ui/core/Popover';
6
+ import Paper from '@material-ui/core/Paper';
7
+
8
+ import { color } from '../../render-ui/src/index';
9
+ import Translator from '@pie-lib/translator';
10
+
11
+ const { translator } = Translator;
12
+
13
+ export class ActionsButton extends React.Component {
14
+ constructor(props) {
15
+ super(props);
16
+ this.state = {
17
+ actionsAnchorEl: null,
18
+ };
19
+ }
20
+
21
+ static propTypes = {
22
+ classes: PropTypes.object.isRequired,
23
+ categories: PropTypes.array,
24
+ addCategory: PropTypes.func.isRequired,
25
+ deleteCategory: PropTypes.func.isRequired,
26
+ language: PropTypes.string.isRequired,
27
+ };
28
+
29
+ handleActionsClick = (event) => {
30
+ this.setState({ actionsAnchorEl: event.currentTarget });
31
+ };
32
+
33
+ handleActionsClose = () => {
34
+ this.setState({ actionsAnchorEl: null });
35
+ };
36
+
37
+ handleAddCategory = () => {
38
+ const { addCategory } = this.props;
39
+ addCategory();
40
+ this.handleActionsClose();
41
+ };
42
+
43
+ handleDeleteCategory = (index) => {
44
+ const { deleteCategory } = this.props;
45
+ deleteCategory(index);
46
+ this.handleActionsClose();
47
+ };
48
+
49
+ render() {
50
+ const { classes, categories, language } = this.props;
51
+
52
+ return (
53
+ <div className={classes.actions}>
54
+ <div role="button" tabIndex={0} className={classes.trigger} onClick={this.handleActionsClick}>
55
+ Actions
56
+ </div>
57
+ <Popover
58
+ open={Boolean(this.state.actionsAnchorEl)}
59
+ anchorEl={this.state.actionsAnchorEl}
60
+ onClose={this.handleActionsClose}
61
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
62
+ transformOrigin={{ vertical: 'top', horizontal: 'left' }}
63
+ >
64
+ <Paper className={classes.actionsPaper}>
65
+ <Button onClick={() => this.handleAddCategory()}>
66
+ + {translator.t('charting.add', { lng: language })}
67
+ </Button>
68
+ {categories.length > 0 &&
69
+ categories.map(
70
+ (category, index) =>
71
+ category.deletable &&
72
+ !category.correctness && (
73
+ <Button key={index} onClick={() => this.handleDeleteCategory(index)}>
74
+ {`${translator.t('charting.delete', { lng: language })} <${category.label ||
75
+ translator.t('charting.newLabel', { lng: language })}>`}
76
+ </Button>
77
+ ),
78
+ )}
79
+ </Paper>
80
+ </Popover>
81
+ </div>
82
+ );
83
+ }
84
+ }
85
+
86
+ const styles = (theme) => ({
87
+ actions: {
88
+ alignSelf: 'flex-end',
89
+ },
90
+ trigger: {
91
+ cursor: 'pointer',
92
+ fontSize: theme.typography.fontSize,
93
+ color: color.tertiary(),
94
+ },
95
+ actionsPaper: {
96
+ padding: theme.spacing.unit,
97
+ display: 'flex',
98
+ flexDirection: 'column',
99
+ gap: theme.spacing.unit,
100
+ '& button': {
101
+ textTransform: 'none',
102
+ fontSize: theme.typography.fontSize,
103
+ color: color.text(),
104
+ justifyContent: 'flex-start',
105
+ },
106
+ },
107
+ });
108
+
109
+ export default withStyles(styles)(ActionsButton);
package/src/axes.jsx CHANGED
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { withStyles } from '@material-ui/core/styles';
4
4
  import { types } from '@pie-lib/plot';
5
- import { color } from '@pie-lib/render-ui';
5
+ import { color } from '../../render-ui/src/index';
6
6
  import { AlertDialog } from '@pie-lib/config-ui';
7
7
  import { AxisLeft, AxisBottom } from '@vx/axis';
8
8
  import { bandKey, getTickValues, getRotateAngle } from './utils';
@@ -45,14 +45,6 @@ export class TickComponent extends React.Component {
45
45
  onChangeCategory(index, { ...category, label: newLabel });
46
46
  };
47
47
 
48
- deleteCategory = (index) => {
49
- const { categories, onChange } = this.props;
50
-
51
- if (index >= 0 && categories[index]) {
52
- onChange([...categories.slice(0, index), ...categories.slice(index + 1)]);
53
- }
54
- };
55
-
56
48
  changeInteractive = (index, value) => {
57
49
  const { categories, onChangeCategory } = this.props;
58
50
  const category = categories[index];
@@ -144,7 +136,7 @@ export class TickComponent extends React.Component {
144
136
  const { changeEditable, changeInteractive } = chartingOptions || {};
145
137
  const index = parseInt(formattedValue.split('-')[0], 10);
146
138
  const category = categories[index];
147
- const { deletable, editable, interactive, label, correctness } = category || {};
139
+ const { editable, interactive, label, correctness } = category || {};
148
140
  const barX = xBand(bandKey({ label }, index));
149
141
  const longestCategory = (categories || []).reduce((a, b) => {
150
142
  const lengthA = a && a.label ? a.label.length : 0;
@@ -185,6 +177,7 @@ export class TickComponent extends React.Component {
185
177
  rotate={rotate}
186
178
  correctness={correctness}
187
179
  error={error && error[index]}
180
+ limitCharacters
188
181
  />
189
182
  </foreignObject>
190
183
 
@@ -194,24 +187,6 @@ export class TickComponent extends React.Component {
194
187
  </text>
195
188
  )}
196
189
 
197
- {deletable && !correctness && (
198
- <line x1={x} y1={0} x2={x} y2={y + 4 + top} className={classes.dottedLine} strokeDasharray="4 2" />
199
- )}
200
-
201
- {deletable && !correctness && (
202
- <svg
203
- xmlns="http://www.w3.org/2000/svg"
204
- x={x - 8}
205
- y={y + 60 + top}
206
- width={16}
207
- height={16}
208
- viewBox="0 0 512 512"
209
- onClick={() => this.deleteCategory(index)}
210
- >
211
- <path d="M128 405.429C128 428.846 147.198 448 170.667 448h170.667C364.802 448 384 428.846 384 405.429V160H128v245.429zM416 96h-80l-26.785-32H202.786L176 96H96v32h320V96z" />
212
- </svg>
213
- )}
214
-
215
190
  {defineChart && index === 0 && (
216
191
  <svg
217
192
  x={-55}
@@ -493,7 +468,7 @@ const ChartAxes = withStyles(
493
468
  strokeWidth: 2,
494
469
  },
495
470
  axisLine: {
496
- stroke: color.primaryDark(),
471
+ stroke: color.visualElementsColors.AXIS_LINE_COLOR,
497
472
  strokeWidth: 2,
498
473
  },
499
474
  tick: {
@@ -501,7 +476,6 @@ const ChartAxes = withStyles(
501
476
  stroke: color.primaryDark(),
502
477
  strokeWidth: 2,
503
478
  },
504
- fill: color.primaryDark(),
505
479
  fontFamily: theme.typography.body1.fontFamily,
506
480
  fontSize: theme.typography.fontSize,
507
481
  textAnchor: 'middle',