@pie-lib/charting 7.1.0-beta.8 → 8.0.0-next.20261002094057

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 (232) 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/utils.d.ts +39 -0
  118. package/dist/utils.js +101 -0
  119. package/package.json +45 -36
  120. package/CHANGELOG.json +0 -17
  121. package/CHANGELOG.md +0 -1116
  122. package/lib/actions-button.js +0 -145
  123. package/lib/actions-button.js.map +0 -1
  124. package/lib/axes.js +0 -643
  125. package/lib/axes.js.map +0 -1
  126. package/lib/bars/bar.js +0 -58
  127. package/lib/bars/bar.js.map +0 -1
  128. package/lib/bars/common/bars.js +0 -277
  129. package/lib/bars/common/bars.js.map +0 -1
  130. package/lib/bars/common/correct-check-icon.js +0 -54
  131. package/lib/bars/common/correct-check-icon.js.map +0 -1
  132. package/lib/bars/histogram.js +0 -59
  133. package/lib/bars/histogram.js.map +0 -1
  134. package/lib/chart-setup.js +0 -382
  135. package/lib/chart-setup.js.map +0 -1
  136. package/lib/chart-type.js +0 -80
  137. package/lib/chart-type.js.map +0 -1
  138. package/lib/chart-types.js +0 -22
  139. package/lib/chart-types.js.map +0 -1
  140. package/lib/chart.js +0 -384
  141. package/lib/chart.js.map +0 -1
  142. package/lib/common/correctness-indicators.js +0 -156
  143. package/lib/common/correctness-indicators.js.map +0 -1
  144. package/lib/common/drag-handle.js +0 -160
  145. package/lib/common/drag-handle.js.map +0 -1
  146. package/lib/common/drag-icon.js +0 -52
  147. package/lib/common/drag-icon.js.map +0 -1
  148. package/lib/common/styles.js +0 -22
  149. package/lib/common/styles.js.map +0 -1
  150. package/lib/grid.js +0 -112
  151. package/lib/grid.js.map +0 -1
  152. package/lib/index.js +0 -42
  153. package/lib/index.js.map +0 -1
  154. package/lib/key-legend.js +0 -87
  155. package/lib/key-legend.js.map +0 -1
  156. package/lib/line/common/drag-handle.js +0 -146
  157. package/lib/line/common/drag-handle.js.map +0 -1
  158. package/lib/line/common/line.js +0 -214
  159. package/lib/line/common/line.js.map +0 -1
  160. package/lib/line/line-cross.js +0 -214
  161. package/lib/line/line-cross.js.map +0 -1
  162. package/lib/line/line-dot.js +0 -158
  163. package/lib/line/line-dot.js.map +0 -1
  164. package/lib/mark-label.js +0 -237
  165. package/lib/mark-label.js.map +0 -1
  166. package/lib/plot/common/plot.js +0 -349
  167. package/lib/plot/common/plot.js.map +0 -1
  168. package/lib/plot/dot.js +0 -110
  169. package/lib/plot/dot.js.map +0 -1
  170. package/lib/plot/line.js +0 -140
  171. package/lib/plot/line.js.map +0 -1
  172. package/lib/tool-menu.js +0 -106
  173. package/lib/tool-menu.js.map +0 -1
  174. package/lib/utils.js +0 -189
  175. package/lib/utils.js.map +0 -1
  176. package/src/__tests__/actions-button.test.jsx +0 -280
  177. package/src/__tests__/axes.test.jsx +0 -667
  178. package/src/__tests__/chart-setup.test.jsx +0 -532
  179. package/src/__tests__/chart-type.test.jsx +0 -23
  180. package/src/__tests__/chart.test.jsx +0 -86
  181. package/src/__tests__/grid.test.jsx +0 -37
  182. package/src/__tests__/key-legend.test.jsx +0 -223
  183. package/src/__tests__/mark-label.test.jsx +0 -33
  184. package/src/__tests__/tool-menu.test.jsx +0 -522
  185. package/src/__tests__/utils.js +0 -36
  186. package/src/__tests__/utils.test.js +0 -100
  187. package/src/actions-button.jsx +0 -115
  188. package/src/axes.jsx +0 -594
  189. package/src/bars/__tests__/bar.test.jsx +0 -45
  190. package/src/bars/__tests__/histogram.test.jsx +0 -45
  191. package/src/bars/__tests__/utils.js +0 -30
  192. package/src/bars/bar.js +0 -28
  193. package/src/bars/common/__tests__/bars.test.jsx +0 -68
  194. package/src/bars/common/__tests__/utils.js +0 -30
  195. package/src/bars/common/bars.jsx +0 -249
  196. package/src/bars/common/correct-check-icon.jsx +0 -25
  197. package/src/bars/histogram.js +0 -28
  198. package/src/chart-setup.jsx +0 -356
  199. package/src/chart-type.js +0 -59
  200. package/src/chart-types.js +0 -8
  201. package/src/chart.jsx +0 -357
  202. package/src/common/__tests__/correctness-indicators.test.jsx +0 -720
  203. package/src/common/__tests__/drag-handle.test.jsx +0 -58
  204. package/src/common/__tests__/utils.js +0 -30
  205. package/src/common/correctness-indicators.jsx +0 -128
  206. package/src/common/drag-handle.jsx +0 -125
  207. package/src/common/drag-icon.jsx +0 -36
  208. package/src/common/styles.js +0 -19
  209. package/src/grid.jsx +0 -80
  210. package/src/index.js +0 -7
  211. package/src/key-legend.jsx +0 -77
  212. package/src/line/__tests__/line-cross.test.jsx +0 -463
  213. package/src/line/__tests__/line-dot.test.jsx +0 -41
  214. package/src/line/__tests__/utils.js +0 -36
  215. package/src/line/common/__tests__/drag-handle.test.jsx +0 -62
  216. package/src/line/common/__tests__/line.test.jsx +0 -79
  217. package/src/line/common/__tests__/utils.js +0 -30
  218. package/src/line/common/drag-handle.jsx +0 -114
  219. package/src/line/common/line.jsx +0 -171
  220. package/src/line/line-cross.js +0 -144
  221. package/src/line/line-dot.js +0 -111
  222. package/src/mark-label.jsx +0 -238
  223. package/src/plot/__tests__/dot.test.jsx +0 -344
  224. package/src/plot/__tests__/line.test.jsx +0 -375
  225. package/src/plot/__tests__/utils.js +0 -30
  226. package/src/plot/common/__tests__/plot.test.jsx +0 -69
  227. package/src/plot/common/__tests__/utils.js +0 -30
  228. package/src/plot/common/plot.jsx +0 -358
  229. package/src/plot/dot.js +0 -74
  230. package/src/plot/line.js +0 -98
  231. package/src/tool-menu.jsx +0 -85
  232. package/src/utils.js +0 -201
@@ -1,238 +0,0 @@
1
- import React, { useCallback, useEffect, useRef, useState } from 'react';
2
- import classNames from 'classnames';
3
- import { styled } from '@mui/material/styles';
4
- import AutosizeInput from 'react-input-autosize';
5
- import PropTypes from 'prop-types';
6
-
7
- import { types } from '@pie-lib/plot';
8
- import { correct, disabled, incorrect } from './common/styles';
9
- import { color } from '@pie-lib/render-ui';
10
- import { renderMath } from '@pie-lib/math-rendering';
11
-
12
- const StyledContainer = styled('div')({
13
- display: 'flex',
14
- flexDirection: 'column',
15
- alignItems: 'center',
16
- });
17
-
18
- // eslint-disable-next-line no-unused-vars
19
- const StyledInput = styled('input')(({ theme }) => ({
20
- float: 'right',
21
- fontFamily: theme.typography.fontFamily,
22
- fontSize: theme.typography.fontSize,
23
- border: 'none',
24
- '&.correct': correct('color'),
25
- '&.incorrect': incorrect('color'),
26
- '&.disabledMarkLabel': {
27
- backgroundColor: 'transparent !important',
28
- },
29
- '&.error': { border: `2px solid ${theme.palette.error.main}` },
30
- }));
31
-
32
- const StyledMathInput = styled('div')(({ theme }) => ({
33
- pointerEvents: 'auto',
34
- textAlign: 'center',
35
- fontSize: theme.typography.fontSize + 2,
36
- fontFamily: theme.typography.fontFamily,
37
- color: color.primaryDark(),
38
- paddingTop: theme.typography.fontSize / 2,
39
- '&.disabledMarkLabel': {
40
- ...disabled('color'),
41
- backgroundColor: 'transparent !important',
42
- },
43
- '&.error': {
44
- border: `2px solid ${theme.palette.error.main}`,
45
- },
46
- '&.correct': {
47
- ...correct('color'),
48
- },
49
- '&.incorrect': {
50
- ...incorrect('color'),
51
- },
52
- }));
53
-
54
- function isFractionFormat(label) {
55
- const trimmedLabel = label?.trim() || '';
56
- const fracRegex = new RegExp(/^[1-9]*[0-9]*\s?[1-9][0-9]*\/[1-9][0-9]*$/);
57
- return fracRegex.test(trimmedLabel);
58
- }
59
-
60
- function getLabelMathFormat(label) {
61
- const trimmedLabel = label?.trim() || '';
62
- let fraction;
63
- let mixedNr = '';
64
- let improperFraction = trimmedLabel.split(' ');
65
- if (improperFraction[1] && improperFraction[1].includes('/')) {
66
- fraction = improperFraction[1].split('/') || '';
67
- } else {
68
- fraction = trimmedLabel?.split('/') || '';
69
- }
70
-
71
- let formattedLLabel;
72
- if (isFractionFormat(label)) {
73
- if (improperFraction[0] && improperFraction[1]) {
74
- mixedNr = improperFraction[0];
75
- }
76
- formattedLLabel = `\\(${mixedNr}\\frac{${fraction[0]}}{${fraction[1]}}\\)`;
77
- return formattedLLabel;
78
- }
79
- return undefined;
80
- }
81
-
82
- export const MarkLabel = (props) => {
83
- // eslint-disable-next-line no-unused-vars
84
- const [input, setInput] = useState(null);
85
- const _ref = useCallback((node) => setInput(node), null);
86
-
87
- const {
88
- mark = {},
89
- disabled,
90
- inputRef: externalInputRef,
91
- barWidth,
92
- rotate,
93
- correctness,
94
- autoFocus,
95
- error,
96
- isHiddenLabel,
97
- limitCharacters,
98
- correctnessIndicator,
99
- } = props;
100
-
101
- const [label, setLabel] = useState(mark.label);
102
- const [mathLabel, setMathLabel] = useState(getLabelMathFormat(mark.label));
103
- const [isEditing, setIsEditing] = useState(false);
104
- const rootRef = useRef(null);
105
-
106
- const onChange = (e) => {
107
- if (limitCharacters && e.target.value && e.target.value.length > 20) {
108
- return;
109
- }
110
-
111
- setLabel(e.target.value);
112
- };
113
-
114
- const isMathRendering = () => {
115
- return isEditing === false && mathLabel !== undefined;
116
- };
117
-
118
- const onChangeProp = (e) => {
119
- setMathLabel(getLabelMathFormat(mark.label));
120
- setIsEditing(false);
121
- props.onChange(e.target.value);
122
- };
123
- let extraStyle = {};
124
-
125
- if (rotate) {
126
- extraStyle = {
127
- width: 'unset',
128
- textAlign: 'left',
129
- };
130
- }
131
-
132
- // useState only sets the value once, to synch props to state need useEffect
133
- useEffect(() => {
134
- setLabel(mark.label);
135
- }, [mark.label]);
136
-
137
- useEffect(() => {
138
- const el = rootRef.current;
139
-
140
- if (el && mathLabel) {
141
- el.innerHTML = mathLabel;
142
- renderMath(el);
143
- }
144
- }, [label, mathLabel]);
145
-
146
- return (
147
- <StyledContainer>
148
- {correctnessIndicator}
149
- {isMathRendering() ? (
150
- <StyledMathInput
151
- ref={(r) => {
152
- rootRef.current = r;
153
- if (typeof externalInputRef === 'function') {
154
- externalInputRef(r);
155
- }
156
- }}
157
- className={classNames({
158
- disabledMarkLabel: disabled,
159
- error: error,
160
- correct: mark.editable && correctness?.label === 'correct',
161
- incorrect: mark.editable && correctness?.label === 'incorrect',
162
- })}
163
- onClick={() => setIsEditing(true)}
164
- style={{
165
- minWidth: barWidth,
166
- position: 'fixed',
167
- transformOrigin: 'left',
168
- transform: `rotate(${rotate}deg)`,
169
- visibility: isHiddenLabel ? 'hidden' : 'unset',
170
- marginTop: correctnessIndicator ? '24px' : '0',
171
- }}
172
- ></StyledMathInput>
173
- ) : (
174
- <AutosizeInput
175
- inputRef={(r) => {
176
- _ref(r);
177
- if (typeof externalInputRef === 'function') {
178
- externalInputRef(r);
179
- }
180
- }}
181
- name="mark-label-input"
182
- autoFocus={isEditing || autoFocus}
183
- disabled={disabled}
184
- inputClassName={classNames(
185
- correctness && mark.editable ? correctness.label : null,
186
- disabled && 'disabledMarkLabel',
187
- error && 'error',
188
- )}
189
- inputStyle={{
190
- minWidth: barWidth,
191
- textAlign: 'center',
192
- background: 'transparent',
193
- boxSizing: 'border-box',
194
- paddingLeft: 0,
195
- paddingRight: 0,
196
- border: 'none',
197
- ...extraStyle,
198
- }}
199
- value={label}
200
- style={{
201
- position: 'fixed',
202
- pointerEvents: 'auto',
203
- top: 0,
204
- left: 0,
205
- minWidth: barWidth,
206
- transformOrigin: 'left',
207
- transform: `rotate(${rotate}deg)`,
208
- visibility: isHiddenLabel ? 'hidden' : 'unset',
209
- marginTop: correctnessIndicator ? '24px' : '0',
210
- }}
211
- onChange={onChange}
212
- onBlur={onChangeProp}
213
- />
214
- )}
215
- </StyledContainer>
216
- );
217
- };
218
-
219
- MarkLabel.propTypes = {
220
- autoFocus: PropTypes.bool,
221
- disabled: PropTypes.bool,
222
- error: PropTypes.any,
223
- onChange: PropTypes.func,
224
- graphProps: types.GraphPropsType,
225
- inputRef: PropTypes.func,
226
- mark: PropTypes.object,
227
- barWidth: PropTypes.number,
228
- rotate: PropTypes.number,
229
- correctness: PropTypes.shape({
230
- value: PropTypes.string,
231
- label: PropTypes.string,
232
- }),
233
- isHiddenLabel: PropTypes.bool,
234
- limitCharacters: PropTypes.bool,
235
- correctnessIndicator: PropTypes.node,
236
- };
237
-
238
- export default MarkLabel;
@@ -1,344 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@pie-lib/test-utils';
3
- import { createTheme, ThemeProvider } from '@mui/material/styles';
4
- import Dot, { DotPlot } from '../dot';
5
- import { graphProps } from './utils';
6
-
7
- jest.mock('@mui/icons-material/Check', () => {
8
- return function Check(props) {
9
- return <div data-testid="check-icon" {...props} />;
10
- };
11
- });
12
-
13
- jest.mock('@visx/shape', () => ({
14
- Circle: ({ cx, cy, r, ...rest }) => <circle cx={cx} cy={cy} r={r} {...rest} />,
15
- }));
16
-
17
- let theme;
18
-
19
- beforeAll(() => {
20
- theme = createTheme();
21
- });
22
-
23
- describe('DotPlot', () => {
24
- const renderComponent = (extras) => {
25
- const defaults = {
26
- classes: {},
27
- className: 'className',
28
- graphProps: graphProps(),
29
- xBand: () => {
30
- return {
31
- bandwidth: () => {},
32
- };
33
- },
34
- };
35
- const props = { ...defaults, ...extras };
36
- return render(
37
- <ThemeProvider theme={theme}>
38
- <svg>
39
- <DotPlot {...props} />
40
- </svg>
41
- </ThemeProvider>,
42
- );
43
- };
44
-
45
- describe('rendering', () => {
46
- it('renders dot plot', () => {
47
- const { container } = renderComponent();
48
- expect(container.firstChild).toBeInTheDocument();
49
- });
50
-
51
- it('renders without graphProps', () => {
52
- const { container } = renderComponent({ graphProps: undefined });
53
- expect(container.firstChild).toBeInTheDocument();
54
- });
55
-
56
- it('renders with data array', () => {
57
- const data = [
58
- { value: 1, label: 'A' },
59
- { value: 2, label: 'B' },
60
- { value: 3, label: 'C' },
61
- ];
62
- const { container } = renderComponent({ data });
63
- expect(container.firstChild).toBeInTheDocument();
64
- });
65
-
66
- it('renders with empty data array', () => {
67
- const { container } = renderComponent({ data: [] });
68
- expect(container.firstChild).toBeInTheDocument();
69
- });
70
-
71
- it('renders with null data', () => {
72
- const { container } = renderComponent({ data: null });
73
- expect(container.firstChild).toBeInTheDocument();
74
- });
75
-
76
- it('renders with undefined data', () => {
77
- const { container } = renderComponent({ data: undefined });
78
- expect(container.firstChild).toBeInTheDocument();
79
- });
80
-
81
- it('renders with custom className', () => {
82
- const { container } = renderComponent({ className: 'custom-dot-plot' });
83
- expect(container.firstChild).toBeInTheDocument();
84
- });
85
-
86
- it('renders with onChange handler', () => {
87
- const onChange = jest.fn();
88
- const { container } = renderComponent({ onChange });
89
- expect(container.firstChild).toBeInTheDocument();
90
- });
91
-
92
- it('renders in defineChart mode', () => {
93
- const { container } = renderComponent({ defineChart: true });
94
- expect(container.firstChild).toBeInTheDocument();
95
- });
96
-
97
- it('renders with correctData', () => {
98
- const data = [{ value: 2, label: 'A' }];
99
- const correctData = [{ value: 3, label: 'A' }];
100
- const { container } = renderComponent({ data, correctData });
101
- expect(container.firstChild).toBeInTheDocument();
102
- });
103
- });
104
-
105
- describe('graphProps handling', () => {
106
- it('handles graphProps with missing scale', () => {
107
- const props = graphProps();
108
- delete props.scale;
109
- const { container } = renderComponent({ graphProps: props });
110
- expect(container.firstChild).toBeInTheDocument();
111
- });
112
-
113
- it('handles graphProps with missing size', () => {
114
- const props = graphProps();
115
- delete props.size;
116
- const { container } = renderComponent({ graphProps: props });
117
- expect(container.firstChild).toBeInTheDocument();
118
- });
119
-
120
- it('handles graphProps with empty scale object', () => {
121
- const props = graphProps();
122
- props.scale = {};
123
- const { container } = renderComponent({ graphProps: props });
124
- expect(container.firstChild).toBeInTheDocument();
125
- });
126
-
127
- it('handles graphProps with empty size object', () => {
128
- const props = graphProps();
129
- props.size = {};
130
- const { container } = renderComponent({ graphProps: props });
131
- expect(container.firstChild).toBeInTheDocument();
132
- });
133
- });
134
-
135
- describe('data variations', () => {
136
- it('renders with single data point', () => {
137
- const data = [{ value: 1, label: 'A' }];
138
- const { container } = renderComponent({ data });
139
- expect(container.firstChild).toBeInTheDocument();
140
- });
141
-
142
- it('renders with multiple data points', () => {
143
- const data = [
144
- { value: 1, label: 'A' },
145
- { value: 2, label: 'B' },
146
- { value: 3, label: 'C' },
147
- { value: 4, label: 'D' },
148
- ];
149
- const { container } = renderComponent({ data });
150
- expect(container.firstChild).toBeInTheDocument();
151
- });
152
-
153
- it('renders with zero values', () => {
154
- const data = [
155
- { value: 0, label: 'A' },
156
- { value: 0, label: 'B' },
157
- ];
158
- const { container } = renderComponent({ data });
159
- expect(container.firstChild).toBeInTheDocument();
160
- });
161
-
162
- it('renders with mixed values', () => {
163
- const data = [
164
- { value: 0, label: 'A' },
165
- { value: 5, label: 'B' },
166
- { value: 1, label: 'C' },
167
- ];
168
- const { container } = renderComponent({ data });
169
- expect(container.firstChild).toBeInTheDocument();
170
- });
171
-
172
- it('renders with large values', () => {
173
- const data = [
174
- { value: 100, label: 'A' },
175
- { value: 200, label: 'B' },
176
- ];
177
- const { container } = renderComponent({ data });
178
- expect(container.firstChild).toBeInTheDocument();
179
- });
180
-
181
- it('renders with correctness data', () => {
182
- const data = [
183
- { value: 2, label: 'A', correctness: { value: 'correct', label: 'Correct' } },
184
- { value: 3, label: 'B', correctness: { value: 'correct', label: 'Correct' } },
185
- ];
186
- const { container } = renderComponent({ data });
187
- expect(container.firstChild).toBeInTheDocument();
188
- });
189
-
190
- it('renders with incorrect correctness and correctData', () => {
191
- const data = [
192
- { value: 2, label: 'A', correctness: { value: 'incorrect', label: 'Incorrect' } },
193
- { value: 3, label: 'B', correctness: { value: 'incorrect', label: 'Incorrect' } },
194
- ];
195
- const correctData = [
196
- { value: 3, label: 'A' },
197
- { value: 4, label: 'B' },
198
- ];
199
- const { container } = renderComponent({ data, correctData });
200
- expect(container.firstChild).toBeInTheDocument();
201
- });
202
-
203
- it('renders with interactive data points', () => {
204
- const data = [
205
- { value: 2, label: 'A', interactive: true },
206
- { value: 3, label: 'B', interactive: false },
207
- ];
208
- const { container } = renderComponent({ data });
209
- expect(container.firstChild).toBeInTheDocument();
210
- });
211
- });
212
-
213
- describe('callbacks', () => {
214
- it('passes onChange handler to Plot component', () => {
215
- const onChange = jest.fn();
216
- const data = [{ value: 1, label: 'A' }];
217
- const { container } = renderComponent({ data, onChange });
218
- expect(container.firstChild).toBeInTheDocument();
219
- });
220
-
221
- it('handles onChangeCategory callback', () => {
222
- const onChangeCategory = jest.fn();
223
- const data = [{ value: 1, label: 'A' }];
224
- const { container } = renderComponent({ data, onChangeCategory });
225
- expect(container.firstChild).toBeInTheDocument();
226
- });
227
- });
228
-
229
- describe('component', () => {
230
- it('returns correct chart object', () => {
231
- const chart = Dot();
232
-
233
- expect(chart).toEqual({
234
- type: 'dotPlot',
235
- Component: DotPlot,
236
- name: 'Dot Plot',
237
- });
238
- });
239
-
240
- it('returns object with Component that can be rendered', () => {
241
- const chart = Dot();
242
- const { Component } = chart;
243
-
244
- const { container } = render(<Component graphProps={graphProps()} />);
245
- expect(container.firstChild).toBeInTheDocument();
246
- });
247
- });
248
- });
249
-
250
- describe('CustomBarElement (Dot)', () => {
251
- const mockScale = {
252
- y: jest.fn((n) => n * 10),
253
- };
254
-
255
- it('renders a circle element', () => {
256
- const data = [{ value: 1, label: 'A' }];
257
- const { container } = render(
258
- <ThemeProvider theme={theme}>
259
- <svg>
260
- <DotPlot data={data} graphProps={graphProps()} />
261
- </svg>
262
- </ThemeProvider>,
263
- );
264
- expect(container).toBeInTheDocument();
265
- });
266
-
267
- it('renders with dottedOverline prop', () => {
268
- const data = [{ value: 2, label: 'A', correctness: { value: 'incorrect' } }];
269
- const correctData = [{ value: 3, label: 'A' }];
270
- const { container } = render(
271
- <ThemeProvider theme={theme}>
272
- <svg>
273
- <DotPlot data={data} graphProps={graphProps()} correctData={correctData} />
274
- </svg>
275
- </ThemeProvider>,
276
- );
277
- expect(container).toBeInTheDocument();
278
- });
279
-
280
- it('renders without dottedOverline prop', () => {
281
- const data = [{ value: 2, label: 'A' }];
282
- const { container } = render(
283
- <ThemeProvider theme={theme}>
284
- <svg>
285
- <DotPlot data={data} graphProps={graphProps()} />
286
- </svg>
287
- </ThemeProvider>,
288
- );
289
- expect(container).toBeInTheDocument();
290
- });
291
-
292
- it('calculates correct circle position', () => {
293
- const data = [{ value: 3, label: 'A' }];
294
- const { container } = render(
295
- <ThemeProvider theme={theme}>
296
- <svg>
297
- <DotPlot data={data} graphProps={graphProps()} />
298
- </svg>
299
- </ThemeProvider>,
300
- );
301
- expect(container).toBeInTheDocument();
302
- });
303
-
304
- it('handles zero pointDiameter', () => {
305
- const props = graphProps();
306
- props.size = { width: 0, height: 0 };
307
- const data = [{ value: 1, label: 'A' }];
308
- const { container } = render(
309
- <ThemeProvider theme={theme}>
310
- <svg>
311
- <DotPlot data={data} graphProps={props} />
312
- </svg>
313
- </ThemeProvider>,
314
- );
315
- expect(container).toBeInTheDocument();
316
- });
317
-
318
- it('handles large pointDiameter values', () => {
319
- const props = graphProps();
320
- props.size = { width: 1000, height: 1000 };
321
- const data = [{ value: 1, label: 'A' }];
322
- const { container } = render(
323
- <ThemeProvider theme={theme}>
324
- <svg>
325
- <DotPlot data={data} graphProps={props} />
326
- </svg>
327
- </ThemeProvider>,
328
- );
329
- expect(container).toBeInTheDocument();
330
- });
331
-
332
- it('renders dotted circle with correct styling when dottedOverline is true', () => {
333
- const data = [{ value: 2, label: 'A', correctness: { value: 'incorrect' } }];
334
- const correctData = [{ value: 3, label: 'A' }];
335
- const { container } = render(
336
- <ThemeProvider theme={theme}>
337
- <svg>
338
- <DotPlot data={data} graphProps={graphProps()} correctData={correctData} />
339
- </svg>
340
- </ThemeProvider>,
341
- );
342
- expect(container).toBeInTheDocument();
343
- });
344
- });