@semcore/d3-chart 17.0.0-prerelease.8 → 17.0.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.
- package/CHANGELOG.md +14 -1
- package/lib/cjs/Bubble.js +20 -15
- package/lib/cjs/Bubble.js.map +1 -1
- package/lib/cjs/a11y/PlotA11yView.js +5 -5
- package/lib/cjs/a11y/PlotA11yView.js.map +1 -1
- package/lib/cjs/component/Chart/AbstractChart.js +5 -17
- package/lib/cjs/component/Chart/AbstractChart.js.map +1 -1
- package/lib/cjs/component/Chart/CigaretteChart.js +197 -57
- package/lib/cjs/component/Chart/CigaretteChart.js.map +1 -1
- package/lib/cjs/component/Chart/CigaretteChart.type.js.map +1 -1
- package/lib/cjs/style/bubble.shadow.css +4 -0
- package/lib/cjs/utils.js +3 -2
- package/lib/cjs/utils.js.map +1 -1
- package/lib/es6/Bubble.js +20 -15
- package/lib/es6/Bubble.js.map +1 -1
- package/lib/es6/a11y/PlotA11yView.js +4 -3
- package/lib/es6/a11y/PlotA11yView.js.map +1 -1
- package/lib/es6/component/Chart/AbstractChart.js +5 -17
- package/lib/es6/component/Chart/AbstractChart.js.map +1 -1
- package/lib/es6/component/Chart/CigaretteChart.js +199 -59
- package/lib/es6/component/Chart/CigaretteChart.js.map +1 -1
- package/lib/es6/component/Chart/CigaretteChart.type.js.map +1 -1
- package/lib/es6/style/bubble.shadow.css +4 -0
- package/lib/es6/utils.js +3 -2
- package/lib/es6/utils.js.map +1 -1
- package/lib/esm/AnimatedClipPath.mjs +1 -1
- package/lib/esm/Area.mjs +2 -3
- package/lib/esm/Axis.mjs +4 -7
- package/lib/esm/Bar.mjs +1 -2
- package/lib/esm/Bubble.mjs +24 -21
- package/lib/esm/CompactHorizontalBar.mjs +4 -4
- package/lib/esm/Donut.mjs +5 -4
- package/lib/esm/Dots.mjs +1 -2
- package/lib/esm/HorizontalBar.mjs +1 -2
- package/lib/esm/Hover.mjs +2 -3
- package/lib/esm/Line.mjs +2 -3
- package/lib/esm/Pattern.mjs +6 -7
- package/lib/esm/Plot.mjs +3 -5
- package/lib/esm/Radar.mjs +7 -10
- package/lib/esm/RadialTree.mjs +17 -63
- package/lib/esm/Reference.mjs +0 -1
- package/lib/esm/ResponsiveContainer.mjs +3 -5
- package/lib/esm/ScatterPlot.mjs +2 -2
- package/lib/esm/StackBar.mjs +2 -2
- package/lib/esm/StackedArea.mjs +2 -2
- package/lib/esm/Tooltip.mjs +5 -8
- package/lib/esm/Venn.mjs +3 -3
- package/lib/esm/a11y/DataAccessibilityTable.mjs +2 -4
- package/lib/esm/a11y/PlotA11yModule.mjs +2 -2
- package/lib/esm/a11y/PlotA11yView.mjs +11 -19
- package/lib/esm/a11y/focus.mjs +2 -2
- package/lib/esm/a11y/hints.mjs +3 -3
- package/lib/esm/a11y/insights.mjs +15 -20
- package/lib/esm/a11y/intl.mjs +1 -1
- package/lib/esm/a11y/locale.mjs +1 -2
- package/lib/esm/a11y/serialize.mjs +17 -17
- package/lib/esm/component/Chart/AbstractChart.mjs +20 -34
- package/lib/esm/component/Chart/AreaChart.mjs +5 -4
- package/lib/esm/component/Chart/BarChart.mjs +4 -3
- package/lib/esm/component/Chart/BubbleChart.mjs +8 -8
- package/lib/esm/component/Chart/CigaretteChart.mjs +204 -64
- package/lib/esm/component/Chart/CompactHorizontalBarChart.mjs +2 -1
- package/lib/esm/component/Chart/DonutChart.mjs +3 -2
- package/lib/esm/component/Chart/HistogramChart.mjs +5 -4
- package/lib/esm/component/Chart/LineChart.mjs +5 -4
- package/lib/esm/component/Chart/RadarChart.mjs +4 -5
- package/lib/esm/component/Chart/ScatterPlotChart.mjs +3 -2
- package/lib/esm/component/Chart/VennChart.mjs +3 -3
- package/lib/esm/component/ChartLegend/BaseLegend.mjs +9 -14
- package/lib/esm/component/ChartLegend/LegendFlex/LegendFlex.mjs +1 -2
- package/lib/esm/component/ChartLegend/LegendItem/LegendItem.mjs +1 -2
- package/lib/esm/component/ChartLegend/LegendTable/LegendTable.mjs +2 -4
- package/lib/esm/component/ChartLegend/index.mjs +2 -0
- package/lib/esm/component/Cigarette/Cigarette.mjs +1 -2
- package/lib/esm/component/StackGroupBar/StackGroupBar.mjs +2 -3
- package/lib/esm/createElement.mjs +1 -1
- package/lib/esm/index.mjs +1 -0
- package/lib/esm/style/bubble.shadow.css +4 -0
- package/lib/esm/utils.mjs +3 -3
- package/lib/types/a11y/PlotA11yView.d.ts +1 -1
- package/lib/types/component/Chart/AbstractChart.d.ts +4 -7
- package/lib/types/component/Chart/CigaretteChart.type.d.ts +7 -4
- package/package.json +17 -17
|
@@ -7,10 +7,11 @@ import { Box, Flex } from '@semcore/base-components';
|
|
|
7
7
|
import { createComponent, Root, sstyled } from '@semcore/core';
|
|
8
8
|
import i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';
|
|
9
9
|
import resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';
|
|
10
|
+
import trottle from '@semcore/core/lib/utils/rafTrottle';
|
|
10
11
|
import uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';
|
|
11
12
|
import Divider from '@semcore/divider';
|
|
12
13
|
import { Text } from '@semcore/typography';
|
|
13
|
-
import {
|
|
14
|
+
import { scaleThreshold, scaleLinear } from 'd3-scale';
|
|
14
15
|
import React from 'react';
|
|
15
16
|
// @ts-ignore
|
|
16
17
|
import { HoverRect, Plot } from '../..';
|
|
@@ -18,14 +19,54 @@ import { AbstractChart, NOT_A_VALUE } from './AbstractChart';
|
|
|
18
19
|
// @ts-ignore
|
|
19
20
|
import AnimatedClipPath from '../../AnimatedClipPath';
|
|
20
21
|
import { localizedMessages } from '../../translations/__intergalactic-dynamic-locales';
|
|
21
|
-
import {
|
|
22
|
+
import { eventToPoint, interpolateValue } from '../../utils';
|
|
22
23
|
import Cigarette from '../Cigarette/Cigarette';
|
|
23
|
-
const
|
|
24
|
+
const DEFAULT_MINIMAL_BAR_WIDTH = 2;
|
|
25
|
+
const DEFAULT_GAP = 2;
|
|
24
26
|
class CigaretteChartComponent extends AbstractChart {
|
|
25
|
-
constructor(
|
|
26
|
-
super(
|
|
27
|
+
constructor(props) {
|
|
28
|
+
super(props);
|
|
29
|
+
_defineProperty(this, "plotRef", /*#__PURE__*/React.createRef());
|
|
27
30
|
_defineProperty(this, "plotPadding", 0);
|
|
28
31
|
_defineProperty(this, "offset", 0);
|
|
32
|
+
_defineProperty(this, "onPlotMouseMove", trottle(event => {
|
|
33
|
+
if (!this.plotRef.current) return;
|
|
34
|
+
const [pX, pY] = eventToPoint(event, this.plotRef.current);
|
|
35
|
+
this.setState(prevState => ({
|
|
36
|
+
pX,
|
|
37
|
+
pY
|
|
38
|
+
}));
|
|
39
|
+
}));
|
|
40
|
+
_defineProperty(this, "onPlotMouseLeave", trottle(() => {
|
|
41
|
+
this.setState(prevState => ({
|
|
42
|
+
pX: null,
|
|
43
|
+
pY: null
|
|
44
|
+
}));
|
|
45
|
+
}));
|
|
46
|
+
this.state = {
|
|
47
|
+
...this.state,
|
|
48
|
+
pX: null,
|
|
49
|
+
pY: null
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
get activeDataDefinitions() {
|
|
53
|
+
const {
|
|
54
|
+
dataDefinitions
|
|
55
|
+
} = this.state;
|
|
56
|
+
return dataDefinitions.filter(({
|
|
57
|
+
checked
|
|
58
|
+
}) => checked);
|
|
59
|
+
}
|
|
60
|
+
get activePositiveDataDefinitions() {
|
|
61
|
+
const {
|
|
62
|
+
data
|
|
63
|
+
} = this.asProps;
|
|
64
|
+
return this.activeDataDefinitions.filter(({
|
|
65
|
+
id
|
|
66
|
+
}) => {
|
|
67
|
+
const itemValue = data[id];
|
|
68
|
+
return typeof itemValue === 'number' && itemValue > 0;
|
|
69
|
+
});
|
|
29
70
|
}
|
|
30
71
|
resolveColor(id, index) {
|
|
31
72
|
return this.props.colorMap?.[id] ?? `blue-${5 - index}00`;
|
|
@@ -43,17 +84,86 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
43
84
|
w: 'fit-content'
|
|
44
85
|
};
|
|
45
86
|
}
|
|
87
|
+
totalValue() {
|
|
88
|
+
const {
|
|
89
|
+
data
|
|
90
|
+
} = this.asProps;
|
|
91
|
+
return this.activeDataDefinitions.reduce((acc, {
|
|
92
|
+
id
|
|
93
|
+
}) => {
|
|
94
|
+
const itemValue = data[id];
|
|
95
|
+
if (typeof itemValue === 'number') {
|
|
96
|
+
acc += itemValue;
|
|
97
|
+
}
|
|
98
|
+
return acc;
|
|
99
|
+
}, 0);
|
|
100
|
+
}
|
|
101
|
+
computeCigaretteItems() {
|
|
102
|
+
const {
|
|
103
|
+
plotWidth,
|
|
104
|
+
plotHeight,
|
|
105
|
+
data,
|
|
106
|
+
invertAxis,
|
|
107
|
+
minimalBarWidth
|
|
108
|
+
} = this.asProps;
|
|
109
|
+
const dataDefinitions = invertAxis ? this.activeDataDefinitions : [...this.activeDataDefinitions].reverse();
|
|
110
|
+
const count = this.activePositiveDataDefinitions.length;
|
|
111
|
+
const totalGapWidth = DEFAULT_GAP * Math.max(0, count - 1);
|
|
112
|
+
const availableSpace = Math.max(0, (invertAxis ? plotWidth : plotHeight) - totalGapWidth);
|
|
113
|
+
const totalValue = this.totalValue();
|
|
114
|
+
const dataDefinitionsItemSize = dataDefinitions.map(({
|
|
115
|
+
id
|
|
116
|
+
}) => {
|
|
117
|
+
if (totalValue === 0) {
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
const itemValue = data[id];
|
|
121
|
+
if (typeof itemValue !== 'number') return 0;
|
|
122
|
+
return itemValue / totalValue * availableSpace;
|
|
123
|
+
});
|
|
124
|
+
const result = dataDefinitions.map((dd, index) => ({
|
|
125
|
+
...dd,
|
|
126
|
+
value: data[dd.id],
|
|
127
|
+
dataWidth: dataDefinitionsItemSize[index],
|
|
128
|
+
visualWidth: dataDefinitionsItemSize[index],
|
|
129
|
+
isMinVisible: false
|
|
130
|
+
}));
|
|
131
|
+
const smallItems = result.filter(r => {
|
|
132
|
+
const {
|
|
133
|
+
value,
|
|
134
|
+
dataWidth
|
|
135
|
+
} = r;
|
|
136
|
+
if (typeof value !== 'number') return false;
|
|
137
|
+
return value > 0 && dataWidth < minimalBarWidth;
|
|
138
|
+
});
|
|
139
|
+
if (smallItems.length === 0) return result;
|
|
140
|
+
let extraNeeded = 0;
|
|
141
|
+
for (const smallItem of smallItems) {
|
|
142
|
+
extraNeeded += minimalBarWidth - smallItem.dataWidth;
|
|
143
|
+
smallItem.visualWidth = minimalBarWidth;
|
|
144
|
+
smallItem.isMinVisible = true;
|
|
145
|
+
}
|
|
146
|
+
const donors = result.filter(r => !r.isMinVisible && r.dataWidth > minimalBarWidth);
|
|
147
|
+
const donorCapacity = donors.reduce((s, d) => s + (d.dataWidth - minimalBarWidth), 0);
|
|
148
|
+
for (const donor of donors) {
|
|
149
|
+
const available = donor.dataWidth - minimalBarWidth;
|
|
150
|
+
const share = available / donorCapacity;
|
|
151
|
+
const taken = share * extraNeeded;
|
|
152
|
+
donor.visualWidth = donor.dataWidth - taken;
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
46
156
|
get xScale() {
|
|
47
157
|
const {
|
|
48
|
-
|
|
158
|
+
plotWidth
|
|
49
159
|
} = this.asProps;
|
|
50
|
-
return
|
|
160
|
+
return scaleLinear([0, plotWidth]);
|
|
51
161
|
}
|
|
52
162
|
get yScale() {
|
|
53
163
|
const {
|
|
54
|
-
|
|
164
|
+
plotHeight
|
|
55
165
|
} = this.asProps;
|
|
56
|
-
return
|
|
166
|
+
return scaleLinear([plotHeight, 0]);
|
|
57
167
|
}
|
|
58
168
|
renderChart() {
|
|
59
169
|
const {
|
|
@@ -71,18 +181,25 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
71
181
|
highlightedLine
|
|
72
182
|
} = this.state;
|
|
73
183
|
this.offset = 0;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
184
|
+
const items = this.computeCigaretteItems();
|
|
185
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, items.map((item, index) => {
|
|
186
|
+
const {
|
|
187
|
+
visualWidth,
|
|
188
|
+
id
|
|
189
|
+
} = item;
|
|
190
|
+
const value = data[id];
|
|
191
|
+
if (value === interpolateValue || value === null) {
|
|
77
192
|
return null;
|
|
78
193
|
}
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const x = index === 0 ? 0 : this.offset;
|
|
194
|
+
const height = invertAxis ? plotHeight - DEFAULT_GAP * 2 : plotWidth - DEFAULT_GAP * 2;
|
|
195
|
+
const width = visualWidth;
|
|
196
|
+
const y = DEFAULT_GAP;
|
|
197
|
+
const x = this.offset;
|
|
84
198
|
const r = height < 28 ? 2 : 4;
|
|
85
|
-
this.offset
|
|
199
|
+
this.offset += visualWidth;
|
|
200
|
+
if (index < items.length - 1) {
|
|
201
|
+
this.offset += DEFAULT_GAP;
|
|
202
|
+
}
|
|
86
203
|
return /*#__PURE__*/React.createElement(Cigarette, {
|
|
87
204
|
key: item.id,
|
|
88
205
|
dataKey: item.id,
|
|
@@ -123,7 +240,9 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
123
240
|
showTooltip
|
|
124
241
|
} = this.asProps;
|
|
125
242
|
const {
|
|
126
|
-
dataDefinitions
|
|
243
|
+
dataDefinitions,
|
|
244
|
+
pX,
|
|
245
|
+
pY
|
|
127
246
|
} = this.state;
|
|
128
247
|
const STooltipChildrenWrapper = Box;
|
|
129
248
|
if (!showTooltip) {
|
|
@@ -133,16 +252,20 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
133
252
|
x: invertAxis ? '' : undefined,
|
|
134
253
|
y: invertAxis ? undefined : '',
|
|
135
254
|
wMin: 100,
|
|
136
|
-
hideHoverLine: true
|
|
255
|
+
hideHoverLine: true,
|
|
256
|
+
xIndex: pX !== null ? this.visualScale(pX) : undefined,
|
|
257
|
+
yIndex: pY !== null ? this.visualScale(pY) : undefined
|
|
137
258
|
}, tooltipProps => {
|
|
138
259
|
var _ref4;
|
|
139
260
|
const dataKey = invertAxis ? tooltipProps.xIndex : tooltipProps.yIndex;
|
|
140
|
-
const showPercentColumn = showPercentValueInTooltip && this.totalValue(
|
|
261
|
+
const showPercentColumn = showPercentValueInTooltip && this.totalValue() !== 0;
|
|
141
262
|
if (tooltipViewType === 'single') {
|
|
142
263
|
var _ref3;
|
|
143
264
|
const item = dataDefinitions.find(dataDefItem => dataDefItem.id === dataKey);
|
|
144
265
|
if (!item) {
|
|
145
|
-
return
|
|
266
|
+
return {
|
|
267
|
+
children: null
|
|
268
|
+
};
|
|
146
269
|
}
|
|
147
270
|
return {
|
|
148
271
|
children: (_ref3 = sstyled(styles), /*#__PURE__*/React.createElement(STooltipChildrenWrapper, _ref3.cn("STooltipChildrenWrapper", {
|
|
@@ -193,6 +316,22 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
193
316
|
};
|
|
194
317
|
});
|
|
195
318
|
}
|
|
319
|
+
percentValue(data, key) {
|
|
320
|
+
const {
|
|
321
|
+
percentFormatter
|
|
322
|
+
} = this.asProps;
|
|
323
|
+
const total = this.totalValue();
|
|
324
|
+
const value = data[key];
|
|
325
|
+
if (typeof value === 'number' && total !== 0) {
|
|
326
|
+
const rawPercent = 100 * value / total;
|
|
327
|
+
const formattedPercent = percentFormatter ? percentFormatter(rawPercent) : Math.round(rawPercent);
|
|
328
|
+
return `${formattedPercent}%`;
|
|
329
|
+
}
|
|
330
|
+
if (value === null) {
|
|
331
|
+
return `0%`;
|
|
332
|
+
}
|
|
333
|
+
return NOT_A_VALUE;
|
|
334
|
+
}
|
|
196
335
|
renderTooltipTotalLine(dataItem) {
|
|
197
336
|
const {
|
|
198
337
|
showTotalInTooltip,
|
|
@@ -201,7 +340,7 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
201
340
|
if (!showTotalInTooltip) {
|
|
202
341
|
return null;
|
|
203
342
|
}
|
|
204
|
-
const total = this.totalValue(
|
|
343
|
+
const total = this.totalValue();
|
|
205
344
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
|
|
206
345
|
mt: 2,
|
|
207
346
|
mr: 2
|
|
@@ -243,13 +382,16 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
243
382
|
}), /*#__PURE__*/React.createElement(Flex, _ref5.cn("Flex", {
|
|
244
383
|
"direction": 'column'
|
|
245
384
|
}), header, /*#__PURE__*/React.createElement(Plot, _ref5.cn("Plot", {
|
|
385
|
+
"ref": this.plotRef,
|
|
246
386
|
"data": data,
|
|
247
387
|
"scale": [this.xScale, this.yScale],
|
|
248
388
|
"width": plotWidth,
|
|
249
389
|
"height": plotHeight,
|
|
250
390
|
"dataHints": this.dataHints,
|
|
251
391
|
"patterns": patterns,
|
|
252
|
-
"a11yAltTextConfig": a11yAltTextConfig
|
|
392
|
+
"a11yAltTextConfig": a11yAltTextConfig,
|
|
393
|
+
"onMouseMove": this.onPlotMouseMove,
|
|
394
|
+
"onMouseLeave": this.onPlotMouseLeave
|
|
253
395
|
}), this.renderTooltip(), this.renderChart())), this.renderLegend());
|
|
254
396
|
}
|
|
255
397
|
return _ref6 = sstyled(styles), /*#__PURE__*/React.createElement(SChart, _ref6.cn("SChart", {
|
|
@@ -258,13 +400,16 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
258
400
|
"__excludeProps": ['onClick', 'data']
|
|
259
401
|
}, _ref2)
|
|
260
402
|
}), /*#__PURE__*/React.createElement(Plot, _ref6.cn("Plot", {
|
|
403
|
+
"ref": this.plotRef,
|
|
261
404
|
"data": data,
|
|
262
405
|
"scale": [this.xScale, this.yScale],
|
|
263
406
|
"width": plotWidth,
|
|
264
407
|
"height": plotHeight,
|
|
265
408
|
"dataHints": this.dataHints,
|
|
266
409
|
"patterns": patterns,
|
|
267
|
-
"a11yAltTextConfig": a11yAltTextConfig
|
|
410
|
+
"a11yAltTextConfig": a11yAltTextConfig,
|
|
411
|
+
"onMouseMove": this.onPlotMouseMove,
|
|
412
|
+
"onMouseLeave": this.onPlotMouseLeave
|
|
268
413
|
}), this.renderTooltip(), this.renderChart()), /*#__PURE__*/React.createElement(Flex, _ref6.cn("Flex", {
|
|
269
414
|
"direction": 'column',
|
|
270
415
|
"gap": 2
|
|
@@ -275,42 +420,36 @@ class CigaretteChartComponent extends AbstractChart {
|
|
|
275
420
|
chartType: 'Cigarette'
|
|
276
421
|
});
|
|
277
422
|
}
|
|
278
|
-
get
|
|
423
|
+
get visualScale() {
|
|
424
|
+
const cigaretteItems = this.computeCigaretteItems();
|
|
279
425
|
const {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
426
|
+
range,
|
|
427
|
+
domain
|
|
428
|
+
} = cigaretteItems.reduce((acc, {
|
|
429
|
+
id,
|
|
430
|
+
visualWidth
|
|
431
|
+
}, index) => {
|
|
432
|
+
const {
|
|
433
|
+
range,
|
|
434
|
+
domain
|
|
435
|
+
} = acc;
|
|
436
|
+
if (visualWidth) {
|
|
437
|
+
range.push(id);
|
|
438
|
+
if (domain.length === 0) {
|
|
439
|
+
domain.push(visualWidth + DEFAULT_GAP);
|
|
440
|
+
return acc;
|
|
441
|
+
}
|
|
442
|
+
if (index !== cigaretteItems.length - 1) {
|
|
443
|
+
const lastAddedDomain = domain[domain.length - 1];
|
|
444
|
+
domain.push(lastAddedDomain + visualWidth + DEFAULT_GAP);
|
|
445
|
+
}
|
|
290
446
|
}
|
|
447
|
+
return acc;
|
|
448
|
+
}, {
|
|
449
|
+
range: [],
|
|
450
|
+
domain: []
|
|
291
451
|
});
|
|
292
|
-
return
|
|
293
|
-
}
|
|
294
|
-
get categoryScale() {
|
|
295
|
-
const {
|
|
296
|
-
plotWidth,
|
|
297
|
-
plotHeight,
|
|
298
|
-
invertAxis
|
|
299
|
-
} = this.asProps;
|
|
300
|
-
const range = invertAxis ? [plotHeight, 0] : [0, plotWidth];
|
|
301
|
-
return scaleBand([0], range);
|
|
302
|
-
}
|
|
303
|
-
get valueScale() {
|
|
304
|
-
const {
|
|
305
|
-
plotWidth,
|
|
306
|
-
plotHeight,
|
|
307
|
-
invertAxis
|
|
308
|
-
} = this.asProps;
|
|
309
|
-
let max = 0;
|
|
310
|
-
this.selectedData.forEach(value => {
|
|
311
|
-
max = max + value;
|
|
312
|
-
});
|
|
313
|
-
return scaleLinear().range(invertAxis ? [0, plotWidth] : [plotHeight, 0]).domain([0, max]);
|
|
452
|
+
return scaleThreshold(domain, range);
|
|
314
453
|
}
|
|
315
454
|
}
|
|
316
455
|
_defineProperty(CigaretteChartComponent, "displayName", 'Cigarette.Bar');
|
|
@@ -327,7 +466,8 @@ _defineProperty(CigaretteChartComponent, "defaultProps", props => {
|
|
|
327
466
|
duration: 500,
|
|
328
467
|
plotWidth: !invertAxis && !props.plotWidth ? 44 : props.plotWidth,
|
|
329
468
|
plotHeight: invertAxis && !props.plotHeight ? 28 : props.plotHeight,
|
|
330
|
-
showPercentValueInTooltip: false
|
|
469
|
+
showPercentValueInTooltip: false,
|
|
470
|
+
minimalBarWidth: DEFAULT_MINIMAL_BAR_WIDTH
|
|
331
471
|
};
|
|
332
472
|
});
|
|
333
473
|
_defineProperty(CigaretteChartComponent, "enhance", [resolveColorEnhance(), uniqueIDEnhancement(), i18nEnhance(localizedMessages)]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CigaretteChart.js","names":["Box","Flex","createComponent","Root","sstyled","i18nEnhance","resolveColorEnhance","uniqueIDEnhancement","Divider","Text","scaleBand","scaleLinear","React","HoverRect","Plot","AbstractChart","NOT_A_VALUE","AnimatedClipPath","localizedMessages","interpolateValue","scaleToBand","Cigarette","wMin","CigaretteChartComponent","constructor","args","_defineProperty","resolveColor","id","index","props","colorMap","getDefaultDataDefinitions","dataDefinitions","map","dataDef","columns","slice","defaultLegendProps","legendType","w","xScale","invertAxis","asProps","valueScale","categoryScale","yScale","renderChart","data","uid","duration","patterns","plotHeight","plotWidth","onClick","highlightedLine","state","offset","createElement","Fragment","reverse","item","value","checked","absWidth","Math","abs","max","domain","height","bandwidth","width","y","x","r","key","dataKey","hide","length","color","direction","hovered","undefined","renderTooltip","_ref","tooltipTitle","tooltipViewType","showPercentValueInTooltip","styles","showTooltip","STooltipChildrenWrapper","Tooltip","hideHoverLine","tooltipProps","_ref4","xIndex","yIndex","showPercentColumn","totalValue","_ref3","find","dataDefItem","children","cn","_assignProps","Dot","mr","label","percentValue","tooltipValueFormatter","Title","_assignProps2","style","opacity","textAlign","bold","renderTooltipTotalLine","dataItem","showTotalInTooltip","total","mt","Number","isNaN","renderHeader","header","render","_ref2","_ref6","SChart","a11yAltTextConfig","_ref5","_assignProps3","dataHints","renderLegend","_assignProps4","getLegendAriaLabel","getI18nText","chartType","selectedData","result","Map","forEach","set","range","showXAxis","showYAxis","showLegend","marginX","marginY","CigaretteChart"],"sources":["../../../../src/component/Chart/CigaretteChart.tsx"],"sourcesContent":["import { Box, Flex } from '@semcore/base-components';\nimport { createComponent, Root, sstyled } from '@semcore/core';\nimport i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';\nimport uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';\nimport Divider from '@semcore/divider';\nimport { Text } from '@semcore/typography';\nimport { scaleBand, scaleLinear } from 'd3-scale';\nimport React from 'react';\n\nimport type { CigaretteChartData, CigaretteChartProps, CigaretteChartType } from './CigaretteChart.type';\n// @ts-ignore\nimport { HoverRect, Plot } from '../..';\nimport { AbstractChart, NOT_A_VALUE } from './AbstractChart';\nimport type { ObjectData } from './AbstractChart.type';\n// @ts-ignore\nimport AnimatedClipPath from '../../AnimatedClipPath';\nimport { localizedMessages } from '../../translations/__intergalactic-dynamic-locales';\nimport { interpolateValue, scaleToBand } from '../../utils';\nimport type { LegendItem } from '../ChartLegend/LegendItem/LegendItem.type';\nimport Cigarette from '../Cigarette/Cigarette';\n\nconst wMin = 2;\n\nclass CigaretteChartComponent extends AbstractChart<\n CigaretteChartData,\n CigaretteChartProps,\n typeof CigaretteChartComponent.enhance\n> {\n static displayName = 'Cigarette.Bar';\n\n static defaultProps: any = (props: CigaretteChartProps) => {\n const invertAxis = props.invertAxis ?? true;\n return {\n invertAxis: invertAxis,\n showXAxis: false,\n showYAxis: false,\n showTooltip: true,\n showLegend: false,\n marginX: 0,\n marginY: 0,\n duration: 500,\n plotWidth: !invertAxis && !props.plotWidth ? 44 : props.plotWidth,\n plotHeight: invertAxis && !props.plotHeight ? 28 : props.plotHeight,\n showPercentValueInTooltip: false,\n };\n };\n\n static enhance = [\n resolveColorEnhance(),\n uniqueIDEnhancement(),\n i18nEnhance(localizedMessages),\n ] as const;\n\n protected override plotPadding = 0;\n\n private offset = 0;\n\n protected override resolveColor(id: string, index: number) {\n return this.props.colorMap?.[id] ?? `blue-${5 - index}00`;\n }\n\n protected override getDefaultDataDefinitions(): Array<\n LegendItem & { columns: React.ReactNode[] }\n > {\n const dataDefinitions = super.getDefaultDataDefinitions();\n\n return dataDefinitions.map((dataDef) => {\n dataDef.columns = dataDef.columns.slice(1);\n return dataDef;\n });\n }\n\n protected override defaultLegendProps() {\n return {\n legendType: 'Table' as const,\n w: 'fit-content',\n };\n }\n\n get xScale() {\n const { invertAxis } = this.asProps;\n\n return invertAxis ? this.valueScale : this.categoryScale;\n }\n\n get yScale() {\n const { invertAxis } = this.asProps;\n\n return invertAxis ? this.categoryScale : this.valueScale;\n }\n\n renderChart() {\n const { invertAxis, data, uid, duration, patterns, plotHeight, plotWidth, onClick } =\n this.asProps;\n const { dataDefinitions, highlightedLine } = this.state;\n\n this.offset = 0;\n\n return (\n <>\n {(invertAxis ? dataDefinitions : [...dataDefinitions].reverse()).map((item, index) => {\n const value = data[item.id];\n\n if (!item.checked || value === interpolateValue || value === null) {\n return null;\n }\n\n const absWidth = Math.abs(\n this.valueScale(value) -\n Math.max(this.valueScale(this.valueScale.domain()[0]), this.valueScale(0)),\n );\n const height = scaleToBand(this.categoryScale).bandwidth() - 4;\n const width = value === 0 ? 0 : Math.max(absWidth, wMin * 2) - wMin;\n const y = 2;\n const x = index === 0 ? 0 : this.offset;\n const r = height < 28 ? 2 : 4;\n\n this.offset = this.offset + width + wMin;\n\n return (\n <Cigarette\n key={item.id}\n dataKey={item.id}\n index={index}\n y={invertAxis ? y : x}\n x={invertAxis ? x : y}\n width={invertAxis ? width : height}\n height={invertAxis ? height : width}\n uid={uid}\n hide={!item.checked}\n duration={duration}\n r={index === 0 || index === dataDefinitions.length - 1 ? r : 0}\n color={item.color}\n patterns={patterns}\n direction={invertAxis ? 'horizontal' : 'vertical'}\n onClick={onClick}\n hovered={\n highlightedLine === index ? true : highlightedLine === -1 ? undefined : false\n }\n />\n );\n })}\n\n <AnimatedClipPath\n aria-hidden\n duration={duration}\n id={uid}\n x='0'\n y='0'\n width={invertAxis ? 0 : plotWidth}\n height={invertAxis ? plotHeight : 0}\n />\n </>\n );\n }\n\n renderTooltip(): React.ReactNode {\n const { data, invertAxis, tooltipTitle, tooltipViewType, showPercentValueInTooltip, styles, showTooltip } =\n this.asProps;\n const { dataDefinitions } = this.state;\n const STooltipChildrenWrapper = Root;\n\n if (!showTooltip) {\n return null;\n }\n\n return (\n <HoverRect.Tooltip\n x={invertAxis ? '' : undefined}\n y={invertAxis ? undefined : ''}\n wMin={100}\n hideHoverLine={true}\n >\n {(tooltipProps: any) => {\n const dataKey = invertAxis ? tooltipProps.xIndex : tooltipProps.yIndex;\n const showPercentColumn = showPercentValueInTooltip && this.totalValue(data) !== 0;\n\n if (tooltipViewType === 'single') {\n const item = dataDefinitions.find((dataDefItem) => dataDefItem.id === dataKey);\n if (!item) {\n return null;\n }\n\n return {\n children: sstyled(styles)(\n <STooltipChildrenWrapper render={Box} columnsCount={showPercentColumn ? '3' : '2'} __excludeProps={['data']}>\n <HoverRect.Tooltip.Dot mr={2} color={item.color}>\n {item.label}\n </HoverRect.Tooltip.Dot>\n { showPercentColumn && <Text textAlign='end' color='text-secondary'>{this.percentValue(data, item.id)}</Text> }\n <Text textAlign='end' bold>{this.tooltipValueFormatter(data[item.id])}</Text>\n </STooltipChildrenWrapper>,\n ),\n };\n }\n\n return {\n children: sstyled(styles)(\n <Flex direction='column'>\n {tooltipTitle && (\n <HoverRect.Tooltip.Title>Some tooltip title</HoverRect.Tooltip.Title>\n )}\n\n <STooltipChildrenWrapper render={Box} columnsCount={showPercentColumn ? '3' : '2'} __excludeProps={['data']}>\n {dataDefinitions.map((item) => {\n const style = { opacity: item.id === dataKey ? 1 : 0.3 };\n return (\n item.checked && (\n <React.Fragment key={item.id}>\n <HoverRect.Tooltip.Dot mr={2} color={item.color} style={style}>\n {item.label}\n </HoverRect.Tooltip.Dot>\n { showPercentColumn && <Text textAlign='end' color='text-secondary' style={style}>{this.percentValue(data, item.id)}</Text> }\n <Text textAlign='end' bold style={style}>{this.tooltipValueFormatter(data[item.id])}</Text>\n </React.Fragment>\n )\n );\n })}\n\n {this.renderTooltipTotalLine(data)}\n </STooltipChildrenWrapper>\n </Flex>,\n ),\n };\n }}\n </HoverRect.Tooltip>\n );\n }\n\n protected override renderTooltipTotalLine<D extends ObjectData>(dataItem: D) {\n const { showTotalInTooltip, showPercentValueInTooltip } = this.asProps;\n\n if (!showTotalInTooltip) {\n return null;\n }\n\n const total = this.totalValue(dataItem);\n\n return (\n <>\n <Box mt={2} mr={2}>Total</Box>\n { showPercentValueInTooltip && total !== 0 && <Text mt={2} textAlign='end' color='text-secondary'>{Number.isNaN(total) ? NOT_A_VALUE : '100%'}</Text> }\n <Text mt={2} textAlign='end' bold>{Number.isNaN(total) ? NOT_A_VALUE : total}</Text>\n </>\n );\n }\n\n renderHeader() {\n return this.asProps.header ?? null;\n }\n\n override render() {\n const SChart = Root;\n const { styles, plotWidth, plotHeight, data, patterns, invertAxis, a11yAltTextConfig } =\n this.asProps;\n\n const header = this.renderHeader();\n\n if (invertAxis) {\n return sstyled(styles)(\n <SChart render={Flex} gap={6} direction='column' __excludeProps={['onClick', 'data']}>\n <Flex direction='column'>\n {header}\n <Plot\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n patterns={patterns}\n a11yAltTextConfig={a11yAltTextConfig}\n >\n {this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n </Flex>\n {this.renderLegend()}\n </SChart>,\n );\n }\n\n return sstyled(styles)(\n <SChart render={Flex} gap={6} __excludeProps={['onClick', 'data']}>\n <Plot\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n patterns={patterns}\n a11yAltTextConfig={a11yAltTextConfig}\n >\n {this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n <Flex direction='column' gap={2}>\n {header && (\n <>\n <Box>{header}</Box>\n <Divider />\n </>\n )}\n {this.renderLegend()}\n </Flex>\n </SChart>,\n );\n }\n\n protected getLegendAriaLabel(): string {\n return this.asProps.getI18nText('legendForChart', { chartType: 'Cigarette' });\n }\n\n private get selectedData() {\n const { data } = this.asProps;\n const { dataDefinitions } = this.state;\n\n const result = new Map<string, number>();\n\n dataDefinitions.forEach((dataDefItem) => {\n const value = data[dataDefItem.id];\n if (dataDefItem.checked && value !== interpolateValue) {\n result.set(dataDefItem.id, value);\n }\n });\n\n return result;\n }\n\n private get categoryScale() {\n const { plotWidth, plotHeight, invertAxis } = this.asProps;\n\n const range = invertAxis ? [plotHeight, 0] : [0, plotWidth];\n\n return scaleBand<{}>([0], range);\n }\n\n private get valueScale() {\n const { plotWidth, plotHeight, invertAxis } = this.asProps;\n\n let max = 0;\n\n this.selectedData.forEach((value) => {\n max = max + value;\n });\n\n return scaleLinear()\n .range(invertAxis ? [0, plotWidth] : [plotHeight, 0])\n .domain([0, max]);\n }\n}\n\nexport const CigaretteChart: CigaretteChartType = createComponent(CigaretteChartComponent);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CigaretteChart.js","names":["Box","Flex","createComponent","Root","sstyled","i18nEnhance","resolveColorEnhance","trottle","uniqueIDEnhancement","Divider","Text","scaleThreshold","scaleLinear","React","HoverRect","Plot","AbstractChart","NOT_A_VALUE","AnimatedClipPath","localizedMessages","eventToPoint","interpolateValue","Cigarette","DEFAULT_MINIMAL_BAR_WIDTH","DEFAULT_GAP","CigaretteChartComponent","constructor","props","_defineProperty","createRef","event","plotRef","current","pX","pY","setState","prevState","state","activeDataDefinitions","dataDefinitions","filter","checked","activePositiveDataDefinitions","data","asProps","id","itemValue","resolveColor","index","colorMap","getDefaultDataDefinitions","map","dataDef","columns","slice","defaultLegendProps","legendType","w","totalValue","reduce","acc","computeCigaretteItems","plotWidth","plotHeight","invertAxis","minimalBarWidth","reverse","count","length","totalGapWidth","Math","max","availableSpace","dataDefinitionsItemSize","result","dd","value","dataWidth","visualWidth","isMinVisible","smallItems","r","extraNeeded","smallItem","donors","donorCapacity","s","d","donor","available","share","taken","xScale","yScale","renderChart","uid","duration","patterns","onClick","highlightedLine","offset","items","createElement","Fragment","item","height","width","y","x","key","dataKey","hide","color","direction","hovered","undefined","renderTooltip","_ref","tooltipTitle","tooltipViewType","showPercentValueInTooltip","styles","showTooltip","STooltipChildrenWrapper","Tooltip","wMin","hideHoverLine","xIndex","visualScale","yIndex","tooltipProps","_ref4","showPercentColumn","_ref3","find","dataDefItem","children","cn","_assignProps","Dot","mr","label","percentValue","tooltipValueFormatter","Title","_assignProps2","style","opacity","textAlign","bold","renderTooltipTotalLine","percentFormatter","total","rawPercent","formattedPercent","round","dataItem","showTotalInTooltip","mt","Number","isNaN","renderHeader","header","render","_ref2","_ref6","SChart","a11yAltTextConfig","_ref5","_assignProps3","dataHints","onPlotMouseMove","onPlotMouseLeave","renderLegend","_assignProps4","getLegendAriaLabel","getI18nText","chartType","cigaretteItems","range","domain","push","lastAddedDomain","showXAxis","showYAxis","showLegend","marginX","marginY","CigaretteChart"],"sources":["../../../../src/component/Chart/CigaretteChart.tsx"],"sourcesContent":["import { Box, Flex } from '@semcore/base-components';\nimport { createComponent, Root, sstyled } from '@semcore/core';\nimport i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport resolveColorEnhance from '@semcore/core/lib/utils/enhances/resolveColorEnhance';\nimport trottle from '@semcore/core/lib/utils/rafTrottle';\nimport uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';\nimport Divider from '@semcore/divider';\nimport { Text } from '@semcore/typography';\nimport { scaleThreshold, scaleLinear, scaleBand } from 'd3-scale';\nimport React from 'react';\n\nimport type { CigaretteChartData, CigaretteChartDataKey, CigaretteChartProps, CigaretteChartType } from './CigaretteChart.type';\n// @ts-ignore\nimport { HoverRect, Plot } from '../..';\nimport type { ChartState } from './AbstractChart';\nimport { AbstractChart, NOT_A_VALUE } from './AbstractChart';\nimport type { ObjectData } from './AbstractChart.type';\n// @ts-ignore\nimport AnimatedClipPath from '../../AnimatedClipPath';\nimport { localizedMessages } from '../../translations/__intergalactic-dynamic-locales';\nimport { eventToPoint, interpolateValue } from '../../utils';\nimport type { LegendItem } from '../ChartLegend/LegendItem/LegendItem.type';\nimport Cigarette from '../Cigarette/Cigarette';\n\nconst DEFAULT_MINIMAL_BAR_WIDTH = 2;\nconst DEFAULT_GAP = 2;\n\ntype ScaleThresholdConfig = { range: Array<CigaretteChartDataKey>; domain: Array<number> };\n\ntype CigaretteChartState = ChartState & {\n pX: number | null;\n pY: number | null;\n};\n\nclass CigaretteChartComponent extends AbstractChart<\n CigaretteChartData,\n CigaretteChartProps,\n typeof CigaretteChartComponent.enhance,\n typeof CigaretteChartComponent.defaultProps,\n CigaretteChartState\n> {\n static displayName = 'Cigarette.Bar';\n\n static defaultProps: any = (props: CigaretteChartProps) => {\n const invertAxis = props.invertAxis ?? true;\n return {\n invertAxis: invertAxis,\n showXAxis: false,\n showYAxis: false,\n showTooltip: true,\n showLegend: false,\n marginX: 0,\n marginY: 0,\n duration: 500,\n plotWidth: !invertAxis && !props.plotWidth ? 44 : props.plotWidth,\n plotHeight: invertAxis && !props.plotHeight ? 28 : props.plotHeight,\n showPercentValueInTooltip: false,\n minimalBarWidth: DEFAULT_MINIMAL_BAR_WIDTH,\n };\n };\n\n static enhance = [\n resolveColorEnhance(),\n uniqueIDEnhancement(),\n i18nEnhance(localizedMessages),\n ] as const;\n\n constructor(props: CigaretteChartProps) {\n super(props);\n\n this.state = {\n ...this.state,\n pX: null,\n pY: null,\n };\n }\n\n private plotRef = React.createRef<SVGElement>();\n\n protected override plotPadding = 0;\n\n private offset = 0;\n\n private get activeDataDefinitions() {\n const { dataDefinitions } = this.state;\n\n return dataDefinitions.filter(({ checked }) => checked);\n }\n\n private get activePositiveDataDefinitions() {\n const { data } = this.asProps;\n\n return this.activeDataDefinitions.filter(({ id }) => {\n const itemValue = data[id];\n\n return typeof itemValue === 'number' && itemValue > 0;\n });\n }\n\n protected override resolveColor(id: string, index: number) {\n return this.props.colorMap?.[id] ?? `blue-${5 - index}00`;\n }\n\n protected override getDefaultDataDefinitions(): Array<\n LegendItem & { columns: React.ReactNode[] }\n > {\n const dataDefinitions = super.getDefaultDataDefinitions();\n\n return dataDefinitions.map((dataDef) => {\n dataDef.columns = dataDef.columns.slice(1);\n return dataDef;\n });\n }\n\n protected override defaultLegendProps() {\n return {\n legendType: 'Table' as const,\n w: 'fit-content',\n };\n }\n\n private onPlotMouseMove = trottle((event: React.MouseEvent<HTMLElement>) => {\n if (!this.plotRef.current) return;\n\n const [pX, pY] = eventToPoint(event, this.plotRef.current);\n\n this.setState((prevState) => ({ pX, pY }));\n });\n\n private onPlotMouseLeave = trottle(() => {\n this.setState((prevState) => ({ pX: null, pY: null }));\n });\n\n protected override totalValue() {\n const { data } = this.asProps;\n\n return this.activeDataDefinitions.reduce((acc, { id }) => {\n const itemValue = data[id];\n\n if (typeof itemValue === 'number') {\n acc += itemValue;\n }\n\n return acc;\n }, 0);\n }\n\n private computeCigaretteItems() {\n const { plotWidth, plotHeight, data, invertAxis, minimalBarWidth } = this.asProps;\n\n const dataDefinitions = invertAxis\n ? this.activeDataDefinitions\n : [...this.activeDataDefinitions].reverse();\n\n const count = this.activePositiveDataDefinitions.length;\n const totalGapWidth = DEFAULT_GAP * Math.max(0, count - 1);\n const availableSpace = Math.max(0, (invertAxis ? plotWidth : plotHeight) - totalGapWidth);\n\n const totalValue = this.totalValue();\n\n const dataDefinitionsItemSize = dataDefinitions.map(({ id }) => {\n if (totalValue === 0) {\n return 0;\n }\n\n const itemValue = data[id];\n\n if (typeof itemValue !== 'number') return 0;\n\n return (itemValue / totalValue) * availableSpace;\n });\n\n const result = dataDefinitions.map((dd, index) => ({\n ...dd,\n value: data[dd.id],\n dataWidth: dataDefinitionsItemSize[index],\n visualWidth: dataDefinitionsItemSize[index],\n isMinVisible: false,\n }));\n\n const smallItems = result.filter((r) => {\n const { value, dataWidth } = r;\n\n if (typeof value !== 'number') return false;\n\n return value > 0 && dataWidth < minimalBarWidth;\n });\n\n if (smallItems.length === 0) return result;\n\n let extraNeeded = 0;\n\n for (const smallItem of smallItems) {\n extraNeeded += minimalBarWidth - smallItem.dataWidth;\n smallItem.visualWidth = minimalBarWidth;\n smallItem.isMinVisible = true;\n }\n\n const donors = result.filter((r) => !r.isMinVisible && r.dataWidth > minimalBarWidth);\n const donorCapacity = donors.reduce(\n (s, d) => s + (d.dataWidth - minimalBarWidth),\n 0,\n );\n\n for (const donor of donors) {\n const available = donor.dataWidth - minimalBarWidth;\n const share = available / donorCapacity;\n const taken = share * extraNeeded;\n donor.visualWidth = donor.dataWidth - taken;\n }\n\n return result;\n };\n\n get xScale() {\n const { plotWidth } = this.asProps;\n\n return scaleLinear([0, plotWidth]);\n }\n\n get yScale() {\n const { plotHeight } = this.asProps;\n\n return scaleLinear([plotHeight, 0]);\n }\n\n renderChart() {\n const { invertAxis, data, uid, duration, patterns, plotHeight, plotWidth, onClick } =\n this.asProps;\n const { dataDefinitions, highlightedLine } = this.state;\n\n this.offset = 0;\n\n const items = this.computeCigaretteItems();\n\n return (\n <>\n {items.map((item, index) => {\n const { visualWidth, id } = item;\n const value = data[id];\n\n if (value === interpolateValue || value === null) {\n return null;\n }\n\n const height = invertAxis ? plotHeight - DEFAULT_GAP * 2 : plotWidth - DEFAULT_GAP * 2;\n const width = visualWidth;\n const y = DEFAULT_GAP;\n const x = this.offset;\n const r = height < 28 ? 2 : 4;\n\n this.offset += visualWidth;\n\n if (index < items.length - 1) {\n this.offset += DEFAULT_GAP;\n }\n\n return (\n <Cigarette\n key={item.id}\n dataKey={item.id}\n index={index}\n y={invertAxis ? y : x}\n x={invertAxis ? x : y}\n width={invertAxis ? width : height}\n height={invertAxis ? height : width}\n uid={uid}\n hide={!item.checked}\n duration={duration}\n r={index === 0 || index === dataDefinitions.length - 1 ? r : 0}\n color={item.color}\n patterns={patterns}\n direction={invertAxis ? 'horizontal' : 'vertical'}\n onClick={onClick}\n hovered={\n highlightedLine === index ? true : highlightedLine === -1 ? undefined : false\n }\n />\n );\n })}\n\n <AnimatedClipPath\n aria-hidden\n duration={duration}\n id={uid}\n x='0'\n y='0'\n width={invertAxis ? 0 : plotWidth}\n height={invertAxis ? plotHeight : 0}\n />\n </>\n );\n }\n\n renderTooltip(): React.ReactNode {\n const { data, invertAxis, tooltipTitle, tooltipViewType, showPercentValueInTooltip, styles, showTooltip } =\n this.asProps;\n const { dataDefinitions, pX, pY } = this.state;\n const STooltipChildrenWrapper = Root;\n\n if (!showTooltip) {\n return null;\n }\n\n return (\n <HoverRect.Tooltip\n x={invertAxis ? '' : undefined}\n y={invertAxis ? undefined : ''}\n wMin={100}\n hideHoverLine={true}\n xIndex={pX !== null ? this.visualScale(pX) : undefined}\n yIndex={pY !== null ? this.visualScale(pY) : undefined}\n >\n {(tooltipProps: any) => {\n const dataKey = invertAxis ? tooltipProps.xIndex : tooltipProps.yIndex;\n const showPercentColumn = showPercentValueInTooltip && this.totalValue() !== 0;\n\n if (tooltipViewType === 'single') {\n const item = dataDefinitions.find((dataDefItem) => dataDefItem.id === dataKey);\n if (!item) {\n return {\n children: null,\n };\n }\n\n return {\n children: sstyled(styles)(\n <STooltipChildrenWrapper render={Box} columnsCount={showPercentColumn ? '3' : '2'} __excludeProps={['data']}>\n <HoverRect.Tooltip.Dot mr={2} color={item.color}>\n {item.label}\n </HoverRect.Tooltip.Dot>\n { showPercentColumn && <Text textAlign='end' color='text-secondary'>{this.percentValue(data, item.id)}</Text> }\n <Text textAlign='end' bold>{this.tooltipValueFormatter(data[item.id])}</Text>\n </STooltipChildrenWrapper>,\n ),\n };\n }\n\n return {\n children: sstyled(styles)(\n <Flex direction='column'>\n {tooltipTitle && (\n <HoverRect.Tooltip.Title>Some tooltip title</HoverRect.Tooltip.Title>\n )}\n\n <STooltipChildrenWrapper render={Box} columnsCount={showPercentColumn ? '3' : '2'} __excludeProps={['data']}>\n {dataDefinitions.map((item) => {\n const style = { opacity: item.id === dataKey ? 1 : 0.3 };\n return (\n item.checked && (\n <React.Fragment key={item.id}>\n <HoverRect.Tooltip.Dot mr={2} color={item.color} style={style}>\n {item.label}\n </HoverRect.Tooltip.Dot>\n { showPercentColumn && <Text textAlign='end' color='text-secondary' style={style}>{this.percentValue(data, item.id)}</Text> }\n <Text textAlign='end' bold style={style}>{this.tooltipValueFormatter(data[item.id])}</Text>\n </React.Fragment>\n )\n );\n })}\n\n {this.renderTooltipTotalLine(data)}\n </STooltipChildrenWrapper>\n </Flex>,\n ),\n };\n }}\n </HoverRect.Tooltip>\n );\n }\n\n protected percentValue(data: ObjectData, key: string): string {\n const { percentFormatter } = this.asProps;\n\n const total = this.totalValue();\n\n const value = data[key];\n\n if (typeof value === 'number' && total !== 0) {\n const rawPercent = (100 * value) / total;\n const formattedPercent = percentFormatter ? percentFormatter(rawPercent) : Math.round(rawPercent);\n\n return `${formattedPercent}%`;\n }\n\n if (value === null) {\n return `0%`;\n }\n\n return NOT_A_VALUE;\n }\n\n protected override renderTooltipTotalLine<D extends ObjectData>(dataItem: D) {\n const { showTotalInTooltip, showPercentValueInTooltip } = this.asProps;\n\n if (!showTotalInTooltip) {\n return null;\n }\n\n const total = this.totalValue();\n\n return (\n <>\n <Box mt={2} mr={2}>Total</Box>\n { showPercentValueInTooltip && total !== 0 && <Text mt={2} textAlign='end' color='text-secondary'>{Number.isNaN(total) ? NOT_A_VALUE : '100%'}</Text> }\n <Text mt={2} textAlign='end' bold>{Number.isNaN(total) ? NOT_A_VALUE : total}</Text>\n </>\n );\n }\n\n renderHeader() {\n return this.asProps.header ?? null;\n }\n\n override render() {\n const SChart = Root;\n const { styles, plotWidth, plotHeight, data, patterns, invertAxis, a11yAltTextConfig } = this.asProps;\n\n const header = this.renderHeader();\n\n if (invertAxis) {\n return sstyled(styles)(\n <SChart render={Flex} gap={6} direction='column' __excludeProps={['onClick', 'data']}>\n <Flex direction='column'>\n {header}\n <Plot\n ref={this.plotRef}\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n patterns={patterns}\n a11yAltTextConfig={a11yAltTextConfig}\n onMouseMove={this.onPlotMouseMove}\n onMouseLeave={this.onPlotMouseLeave}\n >\n {this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n </Flex>\n {this.renderLegend()}\n </SChart>,\n );\n }\n\n return sstyled(styles)(\n <SChart render={Flex} gap={6} __excludeProps={['onClick', 'data']}>\n <Plot\n ref={this.plotRef}\n data={data}\n scale={[this.xScale, this.yScale]}\n width={plotWidth}\n height={plotHeight}\n dataHints={this.dataHints}\n patterns={patterns}\n a11yAltTextConfig={a11yAltTextConfig}\n onMouseMove={this.onPlotMouseMove}\n onMouseLeave={this.onPlotMouseLeave}\n >\n {this.renderTooltip()}\n {this.renderChart()}\n </Plot>\n <Flex direction='column' gap={2}>\n {header && (\n <>\n <Box>{header}</Box>\n <Divider />\n </>\n )}\n {this.renderLegend()}\n </Flex>\n </SChart>,\n );\n }\n\n protected getLegendAriaLabel(): string {\n return this.asProps.getI18nText('legendForChart', { chartType: 'Cigarette' });\n }\n\n private get visualScale() {\n const cigaretteItems = this.computeCigaretteItems();\n\n const { range, domain } = cigaretteItems.reduce<ScaleThresholdConfig>((acc, { id, visualWidth }, index) => {\n const { range, domain } = acc;\n\n if (visualWidth) {\n range.push(id);\n\n if (domain.length === 0) {\n domain.push(visualWidth + DEFAULT_GAP);\n\n return acc;\n }\n\n if (index !== cigaretteItems.length - 1) {\n const lastAddedDomain = domain[domain.length - 1];\n domain.push(lastAddedDomain + visualWidth + DEFAULT_GAP);\n }\n }\n\n return acc;\n }, { range: [], domain: [] });\n\n return scaleThreshold(domain, range);\n }\n}\n\nexport const CigaretteChart: CigaretteChartType = createComponent(CigaretteChartComponent);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CigaretteChart.type.js","names":[],"sources":["../../../../src/component/Chart/CigaretteChart.type.ts"],"sourcesContent":["import type { Intergalactic } from '@semcore/core';\nimport type React from 'react';\n\nimport type { BaseChartProps } from './AbstractChart.type';\nimport type { interpolateValue } from '../../utils';\n\
|
|
1
|
+
{"version":3,"file":"CigaretteChart.type.js","names":[],"sources":["../../../../src/component/Chart/CigaretteChart.type.ts"],"sourcesContent":["import type { Intergalactic } from '@semcore/core';\nimport type React from 'react';\n\nimport type { BaseChartProps } from './AbstractChart.type';\nimport type { interpolateValue } from '../../utils';\n\nexport type CigaretteChartDataKey = string;\n\nexport type CigaretteChartData = Record<CigaretteChartDataKey, number | typeof interpolateValue>;\n\nexport type CigaretteChartProps = Intergalactic.InternalTypings.EfficientOmit<\n BaseChartProps<CigaretteChartData>,\n 'xScale' | 'yScale'\n> & {\n /** Title text displayed in the tooltip */\n tooltipTitle?: string;\n /** Controls whether the tooltip shows all data or single item data */\n tooltipViewType?: 'all' | 'single';\n /** Show percent value in tooltip */\n showPercentValueInTooltip?: boolean;\n /** Custom percent formatter. */\n percentFormatter?: (value: number) => number;\n /** Header content for the chart */\n header?: React.ReactNode;\n /** Animation duration in milliseconds */\n duration?: number;\n /** Click handler that receives the data key and event */\n onClick?: (key: CigaretteChartDataKey, event: React.SyntheticEvent) => void;\n /** Minimal bar width in pixels. Default is `2`. */\n minimalBarWidth?: number;\n};\n\nexport type CigaretteChartType = Intergalactic.Component<'div', CigaretteChartProps>;\n"],"mappings":"","ignoreList":[]}
|
package/lib/es6/utils.js
CHANGED
|
@@ -179,7 +179,8 @@ export const getChartDefaultColorName = index => {
|
|
|
179
179
|
return `chart-palette-order-${index}`;
|
|
180
180
|
};
|
|
181
181
|
export const getBubbleChartValueScale = (data, key) => {
|
|
182
|
-
const z = scaleSqrt().domain([0, Math.max(...data.map(el => el[key]))]).range([5.5, 50.5]);
|
|
182
|
+
const z = scaleSqrt().domain([0, Math.max(...data.map(el => el[key]))]).range([5.5, 50.5]); // min/max radius
|
|
183
|
+
|
|
183
184
|
return z;
|
|
184
185
|
};
|
|
185
186
|
export const getScatterPlotRadius = valueKey => {
|
|
@@ -213,7 +214,7 @@ export const calculateBubbleDomain = (data, key, range) => {
|
|
|
213
214
|
const maxValueShift = valueScale(maxestValue) * pixelRatio;
|
|
214
215
|
min -= minValueShift * 2;
|
|
215
216
|
max += maxValueShift * 2;
|
|
216
|
-
return [min, max];
|
|
217
|
+
return [Math.floor(min), Math.floor(max)];
|
|
217
218
|
};
|
|
218
219
|
export const PlotEventEmitter = EventEmitter;
|
|
219
220
|
//# sourceMappingURL=utils.js.map
|