@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.
Files changed (83) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/lib/cjs/Bubble.js +20 -15
  3. package/lib/cjs/Bubble.js.map +1 -1
  4. package/lib/cjs/a11y/PlotA11yView.js +5 -5
  5. package/lib/cjs/a11y/PlotA11yView.js.map +1 -1
  6. package/lib/cjs/component/Chart/AbstractChart.js +5 -17
  7. package/lib/cjs/component/Chart/AbstractChart.js.map +1 -1
  8. package/lib/cjs/component/Chart/CigaretteChart.js +197 -57
  9. package/lib/cjs/component/Chart/CigaretteChart.js.map +1 -1
  10. package/lib/cjs/component/Chart/CigaretteChart.type.js.map +1 -1
  11. package/lib/cjs/style/bubble.shadow.css +4 -0
  12. package/lib/cjs/utils.js +3 -2
  13. package/lib/cjs/utils.js.map +1 -1
  14. package/lib/es6/Bubble.js +20 -15
  15. package/lib/es6/Bubble.js.map +1 -1
  16. package/lib/es6/a11y/PlotA11yView.js +4 -3
  17. package/lib/es6/a11y/PlotA11yView.js.map +1 -1
  18. package/lib/es6/component/Chart/AbstractChart.js +5 -17
  19. package/lib/es6/component/Chart/AbstractChart.js.map +1 -1
  20. package/lib/es6/component/Chart/CigaretteChart.js +199 -59
  21. package/lib/es6/component/Chart/CigaretteChart.js.map +1 -1
  22. package/lib/es6/component/Chart/CigaretteChart.type.js.map +1 -1
  23. package/lib/es6/style/bubble.shadow.css +4 -0
  24. package/lib/es6/utils.js +3 -2
  25. package/lib/es6/utils.js.map +1 -1
  26. package/lib/esm/AnimatedClipPath.mjs +1 -1
  27. package/lib/esm/Area.mjs +2 -3
  28. package/lib/esm/Axis.mjs +4 -7
  29. package/lib/esm/Bar.mjs +1 -2
  30. package/lib/esm/Bubble.mjs +24 -21
  31. package/lib/esm/CompactHorizontalBar.mjs +4 -4
  32. package/lib/esm/Donut.mjs +5 -4
  33. package/lib/esm/Dots.mjs +1 -2
  34. package/lib/esm/HorizontalBar.mjs +1 -2
  35. package/lib/esm/Hover.mjs +2 -3
  36. package/lib/esm/Line.mjs +2 -3
  37. package/lib/esm/Pattern.mjs +6 -7
  38. package/lib/esm/Plot.mjs +3 -5
  39. package/lib/esm/Radar.mjs +7 -10
  40. package/lib/esm/RadialTree.mjs +17 -63
  41. package/lib/esm/Reference.mjs +0 -1
  42. package/lib/esm/ResponsiveContainer.mjs +3 -5
  43. package/lib/esm/ScatterPlot.mjs +2 -2
  44. package/lib/esm/StackBar.mjs +2 -2
  45. package/lib/esm/StackedArea.mjs +2 -2
  46. package/lib/esm/Tooltip.mjs +5 -8
  47. package/lib/esm/Venn.mjs +3 -3
  48. package/lib/esm/a11y/DataAccessibilityTable.mjs +2 -4
  49. package/lib/esm/a11y/PlotA11yModule.mjs +2 -2
  50. package/lib/esm/a11y/PlotA11yView.mjs +11 -19
  51. package/lib/esm/a11y/focus.mjs +2 -2
  52. package/lib/esm/a11y/hints.mjs +3 -3
  53. package/lib/esm/a11y/insights.mjs +15 -20
  54. package/lib/esm/a11y/intl.mjs +1 -1
  55. package/lib/esm/a11y/locale.mjs +1 -2
  56. package/lib/esm/a11y/serialize.mjs +17 -17
  57. package/lib/esm/component/Chart/AbstractChart.mjs +20 -34
  58. package/lib/esm/component/Chart/AreaChart.mjs +5 -4
  59. package/lib/esm/component/Chart/BarChart.mjs +4 -3
  60. package/lib/esm/component/Chart/BubbleChart.mjs +8 -8
  61. package/lib/esm/component/Chart/CigaretteChart.mjs +204 -64
  62. package/lib/esm/component/Chart/CompactHorizontalBarChart.mjs +2 -1
  63. package/lib/esm/component/Chart/DonutChart.mjs +3 -2
  64. package/lib/esm/component/Chart/HistogramChart.mjs +5 -4
  65. package/lib/esm/component/Chart/LineChart.mjs +5 -4
  66. package/lib/esm/component/Chart/RadarChart.mjs +4 -5
  67. package/lib/esm/component/Chart/ScatterPlotChart.mjs +3 -2
  68. package/lib/esm/component/Chart/VennChart.mjs +3 -3
  69. package/lib/esm/component/ChartLegend/BaseLegend.mjs +9 -14
  70. package/lib/esm/component/ChartLegend/LegendFlex/LegendFlex.mjs +1 -2
  71. package/lib/esm/component/ChartLegend/LegendItem/LegendItem.mjs +1 -2
  72. package/lib/esm/component/ChartLegend/LegendTable/LegendTable.mjs +2 -4
  73. package/lib/esm/component/ChartLegend/index.mjs +2 -0
  74. package/lib/esm/component/Cigarette/Cigarette.mjs +1 -2
  75. package/lib/esm/component/StackGroupBar/StackGroupBar.mjs +2 -3
  76. package/lib/esm/createElement.mjs +1 -1
  77. package/lib/esm/index.mjs +1 -0
  78. package/lib/esm/style/bubble.shadow.css +4 -0
  79. package/lib/esm/utils.mjs +3 -3
  80. package/lib/types/a11y/PlotA11yView.d.ts +1 -1
  81. package/lib/types/component/Chart/AbstractChart.d.ts +4 -7
  82. package/lib/types/component/Chart/CigaretteChart.type.d.ts +7 -4
  83. 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 { scaleBand, scaleLinear } from 'd3-scale';
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 { interpolateValue, scaleToBand } from '../../utils';
22
+ import { eventToPoint, interpolateValue } from '../../utils';
22
23
  import Cigarette from '../Cigarette/Cigarette';
23
- const wMin = 2;
24
+ const DEFAULT_MINIMAL_BAR_WIDTH = 2;
25
+ const DEFAULT_GAP = 2;
24
26
  class CigaretteChartComponent extends AbstractChart {
25
- constructor(...args) {
26
- super(...args);
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
- invertAxis
158
+ plotWidth
49
159
  } = this.asProps;
50
- return invertAxis ? this.valueScale : this.categoryScale;
160
+ return scaleLinear([0, plotWidth]);
51
161
  }
52
162
  get yScale() {
53
163
  const {
54
- invertAxis
164
+ plotHeight
55
165
  } = this.asProps;
56
- return invertAxis ? this.categoryScale : this.valueScale;
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
- return /*#__PURE__*/React.createElement(React.Fragment, null, (invertAxis ? dataDefinitions : [...dataDefinitions].reverse()).map((item, index) => {
75
- const value = data[item.id];
76
- if (!item.checked || value === interpolateValue || value === null) {
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 absWidth = Math.abs(this.valueScale(value) - Math.max(this.valueScale(this.valueScale.domain()[0]), this.valueScale(0)));
80
- const height = scaleToBand(this.categoryScale).bandwidth() - 4;
81
- const width = value === 0 ? 0 : Math.max(absWidth, wMin * 2) - wMin;
82
- const y = 2;
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 = this.offset + width + wMin;
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(data) !== 0;
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 null;
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(dataItem);
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 selectedData() {
423
+ get visualScale() {
424
+ const cigaretteItems = this.computeCigaretteItems();
279
425
  const {
280
- data
281
- } = this.asProps;
282
- const {
283
- dataDefinitions
284
- } = this.state;
285
- const result = new Map();
286
- dataDefinitions.forEach(dataDefItem => {
287
- const value = data[dataDefItem.id];
288
- if (dataDefItem.checked && value !== interpolateValue) {
289
- result.set(dataDefItem.id, value);
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 result;
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\ntype DataKey = string;\n\nexport type CigaretteChartData = Record<DataKey, 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 /** 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: DataKey, event: React.SyntheticEvent) => void;\n};\n\nexport type CigaretteChartType = Intergalactic.Component<'div', CigaretteChartProps>;\n"],"mappings":"","ignoreList":[]}
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":[]}
@@ -18,6 +18,10 @@ g[visible='false'] {
18
18
  display: none;
19
19
  }
20
20
 
21
+ SBubble[clickable] {
22
+ cursor: pointer;
23
+ }
24
+
21
25
  SBubble[color] {
22
26
  fill: var(--color);
23
27
  }
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