@pie-lib/charting 7.1.0-beta.9 → 8.0.0-next.36

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 (203) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +20 -0
  2. package/dist/actions-button.d.ts +26 -0
  3. package/dist/actions-button.js +84 -0
  4. package/dist/autosize-input.d.ts +10 -0
  5. package/dist/autosize-input.js +66 -0
  6. package/dist/axes.d.ts +84 -0
  7. package/dist/axes.js +376 -0
  8. package/dist/bars/bar.d.ts +47 -0
  9. package/dist/bars/bar.js +27 -0
  10. package/dist/bars/common/bars.d.ts +98 -0
  11. package/dist/bars/common/bars.js +174 -0
  12. package/dist/bars/common/correct-check-icon.d.ts +18 -0
  13. package/dist/bars/common/correct-check-icon.js +50 -0
  14. package/dist/bars/histogram.d.ts +47 -0
  15. package/dist/bars/histogram.js +28 -0
  16. package/dist/chart-setup.d.ts +29 -0
  17. package/dist/chart-setup.js +231 -0
  18. package/dist/chart-type.d.ts +32 -0
  19. package/dist/chart-type.js +68 -0
  20. package/dist/chart-types.d.ts +41 -0
  21. package/dist/chart-types.js +17 -0
  22. package/dist/chart.d.ts +88 -0
  23. package/dist/chart.js +250 -0
  24. package/dist/common/correctness-indicators.d.ts +70 -0
  25. package/dist/common/correctness-indicators.js +106 -0
  26. package/dist/common/drag-handle.d.ts +129 -0
  27. package/dist/common/drag-handle.js +120 -0
  28. package/dist/common/drag-icon.d.ts +23 -0
  29. package/dist/common/drag-icon.js +45 -0
  30. package/dist/common/styles.d.ts +23 -0
  31. package/dist/common/styles.js +17 -0
  32. package/dist/grid.d.ts +45 -0
  33. package/dist/grid.js +56 -0
  34. package/dist/index.d.ts +14 -0
  35. package/dist/index.js +6 -0
  36. package/dist/key-legend.d.ts +19 -0
  37. package/dist/key-legend.js +46 -0
  38. package/dist/line/common/drag-handle.d.ts +120 -0
  39. package/dist/line/common/drag-handle.js +92 -0
  40. package/dist/line/common/line.d.ts +96 -0
  41. package/dist/line/common/line.js +114 -0
  42. package/dist/line/line-cross.d.ts +47 -0
  43. package/dist/line/line-cross.js +133 -0
  44. package/dist/line/line-dot.d.ts +47 -0
  45. package/dist/line/line-dot.js +101 -0
  46. package/dist/mark-label.d.ts +55 -0
  47. package/dist/mark-label.js +143 -0
  48. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Axis.js +67 -0
  49. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisBottom.js +29 -0
  50. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisLeft.js +30 -0
  51. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisRenderer.js +66 -0
  52. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Ticks.js +39 -0
  53. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/constants/orientation.js +9 -0
  54. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/createPoint.js +14 -0
  55. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js +13 -0
  56. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getLabelTransform.js +16 -0
  57. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickFormatter.js +8 -0
  58. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickPosition.js +14 -0
  59. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridColumns.js +46 -0
  60. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridRows.js +46 -0
  61. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/utils/getScaleBandwidth.js +6 -0
  62. package/dist/node_modules/.bun/@visx_group@4.0.0_d84c32d47042070f/node_modules/@visx/group/esm/Group.js +17 -0
  63. package/dist/node_modules/.bun/@visx_point@4.0.0/node_modules/@visx/point/esm/Point.js +20 -0
  64. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/align.js +6 -0
  65. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/base.js +6 -0
  66. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/clamp.js +6 -0
  67. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/constant.js +6 -0
  68. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/domain.js +6 -0
  69. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/exponent.js +6 -0
  70. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/interpolate.js +10 -0
  71. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/nice.js +37 -0
  72. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/padding.js +6 -0
  73. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/range.js +6 -0
  74. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/reverse.js +9 -0
  75. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/round.js +7 -0
  76. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/scaleOperator.js +56 -0
  77. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/unknown.js +6 -0
  78. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/operators/zero.js +9 -0
  79. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/scales/band.js +9 -0
  80. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/scales/point.js +9 -0
  81. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/coerceNumber.js +10 -0
  82. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/createColorInterpolator.js +29 -0
  83. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/getTicks.js +7 -0
  84. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/isUtcScale.js +7 -0
  85. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/toString.js +6 -0
  86. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Bar.js +15 -0
  87. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Circle.js +15 -0
  88. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Line.js +27 -0
  89. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/LinePath.js +24 -0
  90. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/util/D3ShapeFactories.js +9 -0
  91. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/util/setNumberOrNumberAccessor.js +6 -0
  92. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/Text.js +27 -0
  93. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/hooks/useText.js +68 -0
  94. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/getStringWidth.js +19 -0
  95. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/memoize.js +13 -0
  96. package/dist/node_modules/.bun/@visx_vendor@4.0.0/node_modules/@visx/vendor/esm/d3-interpolate.js +8 -0
  97. package/dist/node_modules/.bun/@visx_vendor@4.0.0/node_modules/@visx/vendor/esm/d3-scale.js +8 -0
  98. package/dist/node_modules/.bun/@visx_vendor@4.0.0/node_modules/@visx/vendor/esm/d3-shape.js +8 -0
  99. package/dist/node_modules/.bun/@visx_vendor@4.0.0/node_modules/@visx/vendor/esm/d3-time.js +8 -0
  100. package/dist/node_modules/.bun/balanced-match@0.4.2/node_modules/balanced-match/index.js +32 -0
  101. package/dist/node_modules/.bun/balanced-match@1.0.2/node_modules/balanced-match/index.js +33 -0
  102. package/dist/node_modules/.bun/classnames@2.5.1/node_modules/classnames/index.js +32 -0
  103. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +16 -0
  104. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/formula_evaluator.js +37 -0
  105. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/lexer.js +509 -0
  106. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/math_function.js +108 -0
  107. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix.js +31 -0
  108. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix_evaluator.js +45 -0
  109. package/dist/node_modules/.bun/reduce-css-calc@1.3.0/node_modules/reduce-css-calc/index.js +49 -0
  110. package/dist/node_modules/.bun/reduce-function-call@1.0.3/node_modules/reduce-function-call/index.js +34 -0
  111. package/dist/plot/common/plot.d.ts +103 -0
  112. package/dist/plot/common/plot.js +227 -0
  113. package/dist/plot/dot.d.ts +47 -0
  114. package/dist/plot/dot.js +62 -0
  115. package/dist/plot/line.d.ts +47 -0
  116. package/dist/plot/line.js +84 -0
  117. package/dist/tool-menu.d.ts +31 -0
  118. package/dist/utils.d.ts +39 -0
  119. package/dist/utils.js +101 -0
  120. package/package.json +45 -36
  121. package/CHANGELOG.json +0 -17
  122. package/CHANGELOG.md +0 -1116
  123. package/lib/actions-button.js +0 -145
  124. package/lib/actions-button.js.map +0 -1
  125. package/lib/axes.js +0 -643
  126. package/lib/axes.js.map +0 -1
  127. package/lib/bars/bar.js +0 -58
  128. package/lib/bars/bar.js.map +0 -1
  129. package/lib/bars/common/bars.js +0 -277
  130. package/lib/bars/common/bars.js.map +0 -1
  131. package/lib/bars/common/correct-check-icon.js +0 -54
  132. package/lib/bars/common/correct-check-icon.js.map +0 -1
  133. package/lib/bars/histogram.js +0 -59
  134. package/lib/bars/histogram.js.map +0 -1
  135. package/lib/chart-setup.js +0 -382
  136. package/lib/chart-setup.js.map +0 -1
  137. package/lib/chart-type.js +0 -80
  138. package/lib/chart-type.js.map +0 -1
  139. package/lib/chart-types.js +0 -22
  140. package/lib/chart-types.js.map +0 -1
  141. package/lib/chart.js +0 -384
  142. package/lib/chart.js.map +0 -1
  143. package/lib/common/correctness-indicators.js +0 -156
  144. package/lib/common/correctness-indicators.js.map +0 -1
  145. package/lib/common/drag-handle.js +0 -160
  146. package/lib/common/drag-handle.js.map +0 -1
  147. package/lib/common/drag-icon.js +0 -52
  148. package/lib/common/drag-icon.js.map +0 -1
  149. package/lib/common/styles.js +0 -22
  150. package/lib/common/styles.js.map +0 -1
  151. package/lib/grid.js +0 -112
  152. package/lib/grid.js.map +0 -1
  153. package/lib/index.js +0 -42
  154. package/lib/index.js.map +0 -1
  155. package/lib/key-legend.js +0 -87
  156. package/lib/key-legend.js.map +0 -1
  157. package/lib/line/common/drag-handle.js +0 -146
  158. package/lib/line/common/drag-handle.js.map +0 -1
  159. package/lib/line/common/line.js +0 -214
  160. package/lib/line/common/line.js.map +0 -1
  161. package/lib/line/line-cross.js +0 -214
  162. package/lib/line/line-cross.js.map +0 -1
  163. package/lib/line/line-dot.js +0 -158
  164. package/lib/line/line-dot.js.map +0 -1
  165. package/lib/mark-label.js +0 -237
  166. package/lib/mark-label.js.map +0 -1
  167. package/lib/plot/common/plot.js +0 -349
  168. package/lib/plot/common/plot.js.map +0 -1
  169. package/lib/plot/dot.js +0 -110
  170. package/lib/plot/dot.js.map +0 -1
  171. package/lib/plot/line.js +0 -140
  172. package/lib/plot/line.js.map +0 -1
  173. package/lib/tool-menu.js +0 -106
  174. package/lib/tool-menu.js.map +0 -1
  175. package/lib/utils.js +0 -189
  176. package/lib/utils.js.map +0 -1
  177. package/src/actions-button.jsx +0 -115
  178. package/src/axes.jsx +0 -594
  179. package/src/bars/bar.js +0 -28
  180. package/src/bars/common/bars.jsx +0 -249
  181. package/src/bars/common/correct-check-icon.jsx +0 -25
  182. package/src/bars/histogram.js +0 -28
  183. package/src/chart-setup.jsx +0 -356
  184. package/src/chart-type.js +0 -59
  185. package/src/chart-types.js +0 -8
  186. package/src/chart.jsx +0 -357
  187. package/src/common/correctness-indicators.jsx +0 -128
  188. package/src/common/drag-handle.jsx +0 -125
  189. package/src/common/drag-icon.jsx +0 -36
  190. package/src/common/styles.js +0 -19
  191. package/src/grid.jsx +0 -80
  192. package/src/index.js +0 -7
  193. package/src/key-legend.jsx +0 -77
  194. package/src/line/common/drag-handle.jsx +0 -114
  195. package/src/line/common/line.jsx +0 -171
  196. package/src/line/line-cross.js +0 -144
  197. package/src/line/line-dot.js +0 -111
  198. package/src/mark-label.jsx +0 -238
  199. package/src/plot/common/plot.jsx +0 -358
  200. package/src/plot/dot.js +0 -74
  201. package/src/plot/line.js +0 -98
  202. package/src/tool-menu.jsx +0 -85
  203. package/src/utils.js +0 -201
package/src/chart-type.js DELETED
@@ -1,59 +0,0 @@
1
- import React from 'react';
2
- import { styled } from '@mui/material/styles';
3
- import MenuItem from '@mui/material/MenuItem';
4
- import FormControl from '@mui/material/FormControl';
5
- import InputLabel from '@mui/material/InputLabel';
6
- import { Select } from '@mui/material';
7
- import PropTypes from 'prop-types';
8
-
9
- const StyledContainer = styled('div')(() => ({
10
- width: '160px',
11
- }));
12
-
13
- const StyledFormControl = styled(FormControl)(() => ({
14
- width: '160px',
15
- }));
16
-
17
- const StyledInputLabel = styled(InputLabel)(() => ({
18
- backgroundColor: 'transparent',
19
- }));
20
-
21
- const ChartType = ({ onChange, value, availableChartTypes, chartTypeLabel }) => (
22
- <StyledContainer>
23
- <StyledFormControl variant={'outlined'}>
24
- <StyledInputLabel id="type-helper-label">{chartTypeLabel}</StyledInputLabel>
25
- <Select
26
- labelId="type-helper-label"
27
- id="type-helper-label-select"
28
- name="chartType"
29
- value={value}
30
- onChange={onChange}
31
- label={chartTypeLabel}
32
- MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}
33
- >
34
- {availableChartTypes?.histogram && <MenuItem value={'histogram'}>{availableChartTypes.histogram}</MenuItem>}
35
- {availableChartTypes?.bar && <MenuItem value={'bar'}>{availableChartTypes.bar}</MenuItem>}
36
- {availableChartTypes?.lineDot && <MenuItem value={'lineDot'}>{availableChartTypes.lineDot}</MenuItem>}
37
- {availableChartTypes?.lineCross && <MenuItem value={'lineCross'}>{availableChartTypes.lineCross}</MenuItem>}
38
- {availableChartTypes?.dotPlot && <MenuItem value={'dotPlot'}>{availableChartTypes.dotPlot}</MenuItem>}
39
- {availableChartTypes?.linePlot && <MenuItem value={'linePlot'}>{availableChartTypes.linePlot}</MenuItem>}
40
- </Select>
41
- </StyledFormControl>
42
- </StyledContainer>
43
- );
44
-
45
- ChartType.propTypes = {
46
- onChange: PropTypes.func.isRequired,
47
- value: PropTypes.string.isRequired,
48
- availableChartTypes: PropTypes.shape({
49
- histogram: PropTypes.string,
50
- bar: PropTypes.string,
51
- lineDot: PropTypes.string,
52
- lineCross: PropTypes.string,
53
- dotPlot: PropTypes.string,
54
- linePlot: PropTypes.string,
55
- }),
56
- chartTypeLabel: PropTypes.string,
57
- };
58
-
59
- export default ChartType;
@@ -1,8 +0,0 @@
1
- import Bar from './bars/bar';
2
- import Histogram from './bars/histogram';
3
- import LineDot from './line/line-dot';
4
- import LineCross from './line/line-cross';
5
- import DotPlot from './plot/dot';
6
- import LinePlot from './plot/line';
7
-
8
- export default { Bar, Histogram, LineDot, DotPlot, LinePlot, LineCross };
package/src/chart.jsx DELETED
@@ -1,357 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { styled } from '@mui/material/styles';
4
- import debug from 'debug';
5
- import { cloneDeep } from 'lodash-es';
6
-
7
- import { createGraphProps, Root } from '@pie-lib/plot';
8
- import { AlertDialog } from '@pie-lib/config-ui';
9
- import ChartGrid from './grid';
10
- import ChartAxes from './axes';
11
- import { dataToXBand, getDomainAndRangeByChartType, getGridLinesAndAxisByChartType, getTopPadding } from './utils';
12
- import chartTypes from './chart-types';
13
- import ActionsButton from './actions-button';
14
- import Translator from '@pie-lib/translator';
15
-
16
- const { translator } = Translator;
17
-
18
- const log = debug('pie-lib:charts:chart');
19
-
20
- const StyledChartContainer = styled('div')(() => ({
21
- width: 'min-content',
22
- }));
23
-
24
- export class Chart extends React.Component {
25
- constructor(props) {
26
- super(props);
27
- this.state = {
28
- dialog: {
29
- open: false,
30
- },
31
- actionsAnchorEl: null,
32
- };
33
- this.maskUid = this.generateMaskId();
34
- }
35
-
36
- static propTypes = {
37
- className: PropTypes.string,
38
- chartType: PropTypes.string.isRequired,
39
- size: PropTypes.shape({
40
- width: PropTypes.number,
41
- height: PropTypes.number,
42
- }),
43
- domain: PropTypes.shape({
44
- label: PropTypes.string,
45
- min: PropTypes.number,
46
- max: PropTypes.number,
47
- axisLabel: PropTypes.string,
48
- }),
49
- data: PropTypes.arrayOf(PropTypes.shape({ label: PropTypes.string, value: PropTypes.number })),
50
- range: PropTypes.shape({
51
- label: PropTypes.string,
52
- min: PropTypes.number,
53
- max: PropTypes.number,
54
- step: PropTypes.number,
55
- labelStep: PropTypes.number,
56
- axisLabel: PropTypes.string,
57
- }),
58
- charts: PropTypes.array,
59
- labelsPlaceholders: PropTypes.object,
60
- title: PropTypes.string,
61
- titlePlaceholder: PropTypes.string,
62
- onDataChange: PropTypes.func,
63
- onChangeLabels: PropTypes.func,
64
- onChangeTitle: PropTypes.func,
65
- error: PropTypes.any,
66
- addCategoryEnabled: PropTypes.bool,
67
- showPixelGuides: PropTypes.bool,
68
- categoryDefaultLabel: PropTypes.string,
69
- categoryDefaults: PropTypes.object,
70
- defineChart: PropTypes.bool,
71
- theme: PropTypes.object,
72
- chartingOptions: PropTypes.object,
73
- changeInteractiveEnabled: PropTypes.bool,
74
- changeEditableEnabled: PropTypes.bool,
75
- language: PropTypes.string,
76
- mathMlOptions: PropTypes.object,
77
- labelsCharactersLimit: PropTypes.number,
78
- correctData: PropTypes.arrayOf(
79
- PropTypes.shape({
80
- label: PropTypes.string,
81
- value: PropTypes.number,
82
- }),
83
- ),
84
- };
85
-
86
- static defaultProps = {
87
- size: {
88
- width: 480,
89
- height: 480,
90
- },
91
- };
92
-
93
- state = {
94
- charts: [
95
- chartTypes.Bar(),
96
- chartTypes.Histogram(),
97
- chartTypes.LineDot(),
98
- chartTypes.LineCross(),
99
- chartTypes.DotPlot(),
100
- chartTypes.LinePlot(),
101
- ],
102
- autoFocus: false,
103
- };
104
-
105
- generateMaskId() {
106
- return 'chart-' + (Math.random() * 10000).toFixed();
107
- }
108
-
109
- handleAlertDialog = (open, callback) =>
110
- this.setState(
111
- {
112
- dialog: { open },
113
- },
114
- callback,
115
- );
116
-
117
- getChart = () => {
118
- const charts = this.props.charts || this.state.charts;
119
- let { chartType } = this.props;
120
- let ChartComponent = null;
121
- let chart = null;
122
-
123
- if (chartType) {
124
- chart = charts && charts.find((chart) => chart.type === chartType);
125
- ChartComponent = chart && chart.Component;
126
- } else {
127
- chart = charts && charts[0];
128
- ChartComponent = chart && chart.Component;
129
- chartType = chart && chart.type;
130
- }
131
-
132
- return {
133
- type: chartType,
134
- ChartComponent,
135
- };
136
- };
137
-
138
- changeData = (data) => {
139
- const { onDataChange } = this.props;
140
-
141
- onDataChange(data);
142
- };
143
-
144
- changeCategory = (index, newCategory) => {
145
- const integerIndex = parseInt(index, 10);
146
-
147
- if (integerIndex >= 0) {
148
- const { data, onDataChange } = this.props;
149
- data[integerIndex] = {
150
- ...data[integerIndex],
151
- ...newCategory,
152
- };
153
-
154
- onDataChange(data);
155
- }
156
- };
157
-
158
- addCategory = () => {
159
- const { onDataChange, data, categoryDefaultLabel, defineChart, categoryDefaults, language } = this.props;
160
-
161
- if ((data || []).length > 19) {
162
- this.setState({
163
- dialog: {
164
- open: true,
165
- title: translator.t('common:warning', { lng: language }),
166
- text: translator.t('charting.reachedLimit_other', { count: 20, lng: language }),
167
- onConfirm: () => this.handleAlertDialog(false),
168
- },
169
- });
170
- } else {
171
- this.setState({ autoFocus: true });
172
- onDataChange([
173
- ...data,
174
- {
175
- inDefineChart: defineChart,
176
- label: categoryDefaultLabel || translator.t('charting.newLabel', { lng: language }),
177
- value: 0,
178
- deletable: true,
179
- editable: categoryDefaults ? categoryDefaults?.editable : true,
180
- interactive: categoryDefaults ? categoryDefaults?.interactive : true,
181
- },
182
- ]);
183
- }
184
- };
185
-
186
- deleteCategory = (index) => {
187
- const { data, onDataChange } = this.props;
188
-
189
- if (typeof index !== 'number' || index < 0) {
190
- return;
191
- }
192
-
193
- if (data && data.length > 0) {
194
- onDataChange(data.filter((_, i) => i !== index));
195
- }
196
- };
197
-
198
- getFilteredCategories = () => {
199
- const { data, defineChart } = this.props;
200
-
201
- return data
202
- ? data.map((d) => ({
203
- ...d,
204
- deletable: defineChart || d.deletable,
205
- }))
206
- : [];
207
- };
208
-
209
- resetAutoFocus = () => {
210
- this.setState({ autoFocus: false });
211
- };
212
-
213
- render() {
214
- const {
215
- domain = {},
216
- range = {},
217
- chartingOptions,
218
- size,
219
- title,
220
- onChangeTitle,
221
- onChangeLabels,
222
- labelsPlaceholders,
223
- titlePlaceholder,
224
- addCategoryEnabled,
225
- changeInteractiveEnabled,
226
- changeEditableEnabled,
227
- showPixelGuides,
228
- error,
229
- mathMlOptions = {},
230
- language,
231
- labelsCharactersLimit,
232
- correctData,
233
- } = this.props;
234
- let { chartType } = this.props;
235
-
236
- const { dialog } = this.state;
237
- const defineChart = this.props.defineChart || false;
238
-
239
- const { width, height } = size || {};
240
- const labels = { left: range?.label || '', bottom: domain?.label || '' };
241
-
242
- const { ChartComponent } = this.getChart();
243
- const categories = this.getFilteredCategories();
244
-
245
- const correctValues = getDomainAndRangeByChartType(domain, range, chartType);
246
-
247
- const { verticalLines, horizontalLines, leftAxis } = getGridLinesAndAxisByChartType(correctValues.range, chartType);
248
- const common = {
249
- graphProps: createGraphProps(correctValues.domain, correctValues.range, size, () => this.rootNode),
250
- };
251
-
252
- log('[render] common:', common);
253
-
254
- const maskSize = { x: -10, y: -75, width: width + 20, height: height + 130 };
255
- const { scale } = common.graphProps;
256
- const xBand = dataToXBand(scale.x, categories, width, chartType);
257
-
258
- const bandWidth = xBand.bandwidth();
259
- // for chartType "line", bandWidth will be 0, so we have to calculate it
260
- const barWidth = bandWidth || scale.x(correctValues.domain.max) / categories.length;
261
- const increaseHeight = defineChart ? 160 : 60;
262
-
263
- // if there are many categories, we have to rotate their names in order to fit
264
- // and we have to add extra value on top of some items
265
- const top = getTopPadding(barWidth);
266
- const rootCommon = cloneDeep(common);
267
- rootCommon.graphProps.size.height += top + increaseHeight;
268
-
269
- // for plot evaluations we need extra space because we render correctness icon below x axis
270
- const isPlotEvaluation = (chartType === 'dotPlot' || chartType === 'linePlot') && correctData?.length;
271
- const needsExtraHeight = isPlotEvaluation && labels.bottom;
272
-
273
- if (needsExtraHeight) {
274
- rootCommon.graphProps.size.height += 25;
275
- }
276
-
277
- return (
278
- <StyledChartContainer>
279
- <Root
280
- title={title}
281
- onChangeTitle={onChangeTitle}
282
- disabledTitle={!defineChart}
283
- showTitle={true}
284
- showLabels={true}
285
- labels={labels}
286
- onChangeLabels={onChangeLabels}
287
- labelsPlaceholders={labelsPlaceholders}
288
- titlePlaceholder={titlePlaceholder}
289
- defineChart={defineChart}
290
- disabledLabels={!defineChart}
291
- isChart={true}
292
- showPixelGuides={showPixelGuides}
293
- rootRef={(r) => (this.rootNode = r)}
294
- mathMlOptions={mathMlOptions}
295
- labelsCharactersLimit={labelsCharactersLimit}
296
- {...rootCommon}
297
- >
298
- <ChartGrid {...common} xBand={xBand} rowTickValues={horizontalLines} columnTickValues={verticalLines} />
299
- <ChartAxes
300
- autoFocus={this.state.autoFocus}
301
- onAutoFocusUsed={this.resetAutoFocus}
302
- {...common}
303
- defineChart={defineChart}
304
- categories={categories}
305
- xBand={xBand}
306
- leftAxis={leftAxis}
307
- onChange={this.changeData}
308
- onChangeCategory={this.changeCategory}
309
- chartingOptions={chartingOptions}
310
- changeInteractiveEnabled={changeInteractiveEnabled}
311
- changeEditableEnabled={changeEditableEnabled}
312
- top={top}
313
- error={error}
314
- showCorrectness={chartType === 'linePlot' || chartType === 'dotPlot'}
315
- />
316
- {addCategoryEnabled ? (
317
- <foreignObject x={width} y={height - 16} width={width} height={height}>
318
- <div xmlns="http://www.w3.org/1999/xhtml" style={{ display: 'flex', justifyContent: 'flex-start' }}>
319
- <ActionsButton
320
- categories={categories}
321
- addCategory={this.addCategory}
322
- deleteCategory={this.deleteCategory}
323
- language={language}
324
- />
325
- </div>
326
- </foreignObject>
327
- ) : null}
328
- <mask id={`${this.maskUid}`}>
329
- <rect {...maskSize} fill="white" />
330
- </mask>
331
- <g id="marks" mask={`url('#${this.maskUid}')`}>
332
- {ChartComponent && (
333
- <ChartComponent
334
- {...common}
335
- data={categories}
336
- height={rootCommon.graphProps.size.height}
337
- defineChart={defineChart}
338
- onChange={this.changeData}
339
- onChangeCategory={this.changeCategory}
340
- correctData={correctData}
341
- />
342
- )}
343
- </g>
344
- </Root>
345
- <AlertDialog
346
- open={dialog.open}
347
- title={dialog.title}
348
- text={dialog.text}
349
- onClose={dialog.onClose}
350
- onConfirm={dialog.onConfirm}
351
- />
352
- </StyledChartContainer>
353
- );
354
- }
355
- }
356
-
357
- export default Chart;
@@ -1,128 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { styled } from '@mui/material/styles';
4
- import Check from '@mui/icons-material/Check';
5
- import Close from '@mui/icons-material/Close';
6
- import { color as enumColor } from '@pie-lib/render-ui';
7
-
8
- const StyledCorrectIcon = styled(Check)(({ theme }) => ({
9
- borderRadius: theme.spacing(2),
10
- color: enumColor.defaults.WHITE,
11
- fontSize: '16px',
12
- width: '16px',
13
- height: '16px',
14
- padding: '2px',
15
- border: `1px solid ${enumColor.defaults.WHITE}`,
16
- stroke: 'initial',
17
- boxSizing: 'unset', // to override the default border-box in IBX
18
- backgroundColor: enumColor.correct(),
19
- display: 'block',
20
- '&.small': {
21
- fontSize: '10px',
22
- width: '10px',
23
- height: '10px',
24
- },
25
- }));
26
-
27
- const StyledIncorrectIcon = styled(Close)(({ theme }) => ({
28
- borderRadius: theme.spacing(2),
29
- color: enumColor.defaults.WHITE,
30
- fontSize: '16px',
31
- width: '16px',
32
- height: '16px',
33
- padding: '2px',
34
- border: `1px solid ${enumColor.defaults.WHITE}`,
35
- stroke: 'initial',
36
- boxSizing: 'unset', // to override the default border-box in IBX
37
- backgroundColor: enumColor.incorrectWithIcon(),
38
- display: 'block',
39
- '&.small': {
40
- fontSize: '10px',
41
- width: '10px',
42
- height: '10px',
43
- },
44
- }));
45
-
46
- export const CorrectnessIndicator = ({ scale, x, y, correctness, interactive }) => {
47
- if (!correctness || !interactive) return null;
48
- const cx = scale ? scale.x(x) : x;
49
- const cy = scale ? scale.y(y) : y;
50
- const isCorrect = correctness.value === 'correct';
51
-
52
- // the icon is 16px + 2px padding + 1px border, so total size is 22px
53
- return (
54
- <foreignObject x={cx - 11} y={cy - 11} width={22} height={22}>
55
- {isCorrect ? <StyledCorrectIcon title={correctness.label} /> : <StyledIncorrectIcon title={correctness.label} />}
56
- </foreignObject>
57
- );
58
- };
59
-
60
- export const SmallCorrectPointIndicator = ({ scale, x, correctness, correctData, label }) => {
61
- if (correctness && correctness.value === 'incorrect') {
62
- const correctVal = parseFloat(correctData.find((d) => d.label === label)?.value);
63
- if (isNaN(correctVal)) return null;
64
- const correctPxY = scale.y(correctVal);
65
- const yToRender = correctPxY - 7.5;
66
- const xToRender = scale.x(x) - 7.5;
67
-
68
- // small circle has 10px font + 2px padding + 1px border, so total size is 15px
69
- return (
70
- <foreignObject x={xToRender} y={yToRender} width={15} height={15}>
71
- <StyledCorrectIcon className="small" title={correctness.label} />
72
- </foreignObject>
73
- );
74
- }
75
-
76
- return null;
77
- };
78
-
79
- export const TickCorrectnessIndicator = ({ correctness, interactive }) => {
80
- if (!correctness || !interactive) return null;
81
-
82
- return correctness.value === 'correct' ? (
83
- <StyledCorrectIcon title={correctness.label} />
84
- ) : (
85
- <StyledIncorrectIcon title={correctness.label} />
86
- );
87
- };
88
-
89
- CorrectnessIndicator.propTypes = {
90
- scale: PropTypes.shape({
91
- x: PropTypes.func,
92
- y: PropTypes.func,
93
- }),
94
- x: PropTypes.number.isRequired,
95
- y: PropTypes.number.isRequired,
96
- correctness: PropTypes.shape({
97
- value: PropTypes.string,
98
- label: PropTypes.string,
99
- }),
100
- interactive: PropTypes.bool,
101
- };
102
-
103
- SmallCorrectPointIndicator.propTypes = {
104
- scale: PropTypes.shape({
105
- x: PropTypes.func,
106
- y: PropTypes.func,
107
- }).isRequired,
108
- x: PropTypes.number.isRequired,
109
- correctness: PropTypes.shape({
110
- value: PropTypes.string,
111
- label: PropTypes.string,
112
- }),
113
- correctData: PropTypes.arrayOf(
114
- PropTypes.shape({
115
- label: PropTypes.string,
116
- value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
117
- }),
118
- ),
119
- label: PropTypes.string,
120
- };
121
-
122
- TickCorrectnessIndicator.propTypes = {
123
- correctness: PropTypes.shape({
124
- value: PropTypes.string,
125
- label: PropTypes.string,
126
- }),
127
- interactive: PropTypes.bool,
128
- };
@@ -1,125 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { styled } from '@mui/material/styles';
4
- import Check from '@mui/icons-material/Check';
5
- import Close from '@mui/icons-material/Close';
6
-
7
- import { gridDraggable, types, utils } from '@pie-lib/plot';
8
- import { color as enumColor } from '@pie-lib/render-ui';
9
- import { getScale } from '../utils';
10
- import DragIcon from './drag-icon';
11
-
12
- const StyledSvg = styled('svg')(() => ({
13
- overflow: 'visible !important',
14
- }));
15
-
16
- const StyledEllipse = styled('ellipse')(() => ({
17
- fill: 'transparent',
18
- clipPath: 'polygon(50% 0%, 100% 0%, 100% 50%, 0% 50%, 0% 0%)',
19
- }));
20
-
21
- const StyledCorrectIcon = styled(Check)(() => ({
22
- backgroundColor: enumColor.correct(),
23
- borderRadius: '16px', // equivalent to theme.spacing(2) for most themes
24
- color: enumColor.defaults.WHITE,
25
- fontSize: '16px',
26
- padding: '2px',
27
- border: `4px solid ${enumColor.defaults.WHITE}`,
28
- width: '16px',
29
- height: '16px',
30
- boxSizing: 'unset', // to override the default border-box in IBX
31
- }));
32
-
33
- const StyledIncorrectIcon = styled(Close)(() => ({
34
- backgroundColor: enumColor.incorrectWithIcon(),
35
- borderRadius: '16px', // equivalent to theme.spacing(2) for most themes
36
- color: enumColor.defaults.WHITE,
37
- fontSize: '16px',
38
- padding: '2px',
39
- border: `4px solid ${enumColor.defaults.WHITE}`,
40
- width: '16px',
41
- height: '16px',
42
- boxSizing: 'unset', // to override the default border-box in IBX
43
- }));
44
-
45
- const RawDragHandle = ({ x, y, width, graphProps, interactive, isHovered, correctness, isPlot, ...rest }) => {
46
- const { scale } = graphProps;
47
- const scaleValue = getScale(width)?.scale;
48
-
49
- return (
50
- <StyledSvg x={x} y={scale.y(y) - 10} width={width} overflow="visible">
51
- {isHovered && !correctness && interactive && (
52
- <DragIcon width={width} scaleValue={scaleValue} color={enumColor.defaults.BORDER_GRAY} />
53
- )}
54
- {interactive && !correctness && (
55
- <StyledEllipse
56
- cx={width / 2}
57
- cy={10}
58
- rx={width / 2}
59
- // the drag icon has a 22px fixed r value, so the ry value is 3 times that in order to cover all the area
60
- ry={66}
61
- {...rest}
62
- />
63
- )}
64
-
65
- <defs>
66
- <filter id="bottomShadow" x="0" y="0" width="140%" height="140%">
67
- <feGaussianBlur in="SourceAlpha" stdDeviation="3" />
68
- <feOffset dx="0" dy="5" result="offsetblur" />
69
- <feFlood floodColor="#00000033" />
70
- <feComposite in2="offsetblur" operator="in" />
71
- <feMerge>
72
- <feMergeNode />
73
- <feMergeNode in="SourceGraphic" />
74
- </feMerge>
75
- </filter>
76
- </defs>
77
-
78
- {correctness && interactive && !isPlot && (
79
- <foreignObject x={width / 2 - 14} y={0} width={40} height={40}>
80
- {correctness.value === 'correct' ? (
81
- <StyledCorrectIcon title={correctness.label} />
82
- ) : (
83
- <StyledIncorrectIcon title={correctness.label} />
84
- )}
85
- </foreignObject>
86
- )}
87
- </StyledSvg>
88
- );
89
- };
90
-
91
- RawDragHandle.propTypes = {
92
- x: PropTypes.number.isRequired,
93
- y: PropTypes.number.isRequired,
94
- width: PropTypes.number,
95
- graphProps: types.GraphPropsType.isRequired,
96
- interactive: PropTypes.bool,
97
- isHovered: PropTypes.bool,
98
- correctness: PropTypes.shape({
99
- value: PropTypes.string,
100
- label: PropTypes.string,
101
- }),
102
- isPlot: PropTypes.bool,
103
- };
104
-
105
- export const DragHandle = RawDragHandle;
106
-
107
- export const D = gridDraggable({
108
- axis: 'y',
109
- fromDelta: (props, delta) => {
110
- //TODO: should be in grid-draggable, if axis is y delta.x should always be 0.
111
- delta.x = 0;
112
- const newPoint = utils.point(props).add(utils.point(delta));
113
-
114
- return newPoint.y;
115
- },
116
- bounds: (props, { domain, range }) => {
117
- const area = { left: 0, top: props.y, bottom: props.y, right: 0 };
118
- return utils.bounds(area, domain, range);
119
- },
120
- anchorPoint: (props) => {
121
- return { x: props.x, y: props.y };
122
- },
123
- })(DragHandle);
124
-
125
- export default D;