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

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 (233) 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 +138 -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/__tests__/actions-button.test.jsx +0 -280
  178. package/src/__tests__/axes.test.jsx +0 -667
  179. package/src/__tests__/chart-setup.test.jsx +0 -532
  180. package/src/__tests__/chart-type.test.jsx +0 -23
  181. package/src/__tests__/chart.test.jsx +0 -86
  182. package/src/__tests__/grid.test.jsx +0 -37
  183. package/src/__tests__/key-legend.test.jsx +0 -223
  184. package/src/__tests__/mark-label.test.jsx +0 -33
  185. package/src/__tests__/tool-menu.test.jsx +0 -522
  186. package/src/__tests__/utils.js +0 -36
  187. package/src/__tests__/utils.test.js +0 -100
  188. package/src/actions-button.jsx +0 -115
  189. package/src/axes.jsx +0 -594
  190. package/src/bars/__tests__/bar.test.jsx +0 -45
  191. package/src/bars/__tests__/histogram.test.jsx +0 -45
  192. package/src/bars/__tests__/utils.js +0 -30
  193. package/src/bars/bar.js +0 -28
  194. package/src/bars/common/__tests__/bars.test.jsx +0 -68
  195. package/src/bars/common/__tests__/utils.js +0 -30
  196. package/src/bars/common/bars.jsx +0 -249
  197. package/src/bars/common/correct-check-icon.jsx +0 -25
  198. package/src/bars/histogram.js +0 -28
  199. package/src/chart-setup.jsx +0 -356
  200. package/src/chart-type.js +0 -59
  201. package/src/chart-types.js +0 -8
  202. package/src/chart.jsx +0 -357
  203. package/src/common/__tests__/correctness-indicators.test.jsx +0 -720
  204. package/src/common/__tests__/drag-handle.test.jsx +0 -58
  205. package/src/common/__tests__/utils.js +0 -30
  206. package/src/common/correctness-indicators.jsx +0 -128
  207. package/src/common/drag-handle.jsx +0 -125
  208. package/src/common/drag-icon.jsx +0 -36
  209. package/src/common/styles.js +0 -19
  210. package/src/grid.jsx +0 -80
  211. package/src/index.js +0 -7
  212. package/src/key-legend.jsx +0 -77
  213. package/src/line/__tests__/line-cross.test.jsx +0 -463
  214. package/src/line/__tests__/line-dot.test.jsx +0 -41
  215. package/src/line/__tests__/utils.js +0 -36
  216. package/src/line/common/__tests__/drag-handle.test.jsx +0 -62
  217. package/src/line/common/__tests__/line.test.jsx +0 -79
  218. package/src/line/common/__tests__/utils.js +0 -30
  219. package/src/line/common/drag-handle.jsx +0 -114
  220. package/src/line/common/line.jsx +0 -171
  221. package/src/line/line-cross.js +0 -144
  222. package/src/line/line-dot.js +0 -111
  223. package/src/mark-label.jsx +0 -238
  224. package/src/plot/__tests__/dot.test.jsx +0 -344
  225. package/src/plot/__tests__/line.test.jsx +0 -375
  226. package/src/plot/__tests__/utils.js +0 -30
  227. package/src/plot/common/__tests__/plot.test.jsx +0 -69
  228. package/src/plot/common/__tests__/utils.js +0 -30
  229. package/src/plot/common/plot.jsx +0 -358
  230. package/src/plot/dot.js +0 -74
  231. package/src/plot/line.js +0 -98
  232. package/src/tool-menu.jsx +0 -85
  233. package/src/utils.js +0 -201
@@ -1,522 +0,0 @@
1
- import React from 'react';
2
- import { fireEvent, render } from '@testing-library/react';
3
- import { createTheme, ThemeProvider } from '@mui/material/styles';
4
- import { MiniButton, ToolMenu } from '../tool-menu';
5
-
6
- jest.mock('@pie-lib/translator', () => ({
7
- __esModule: true,
8
- default: {
9
- translator: {
10
- t: jest.fn((key, options) => {
11
- const translations = {
12
- 'charting.addCategory': 'Add Category',
13
- };
14
- return translations[key] || key;
15
- }),
16
- },
17
- },
18
- }));
19
-
20
- jest.mock('@pie-lib/render-ui', () => ({
21
- color: {
22
- text: () => '#000000',
23
- secondary: () => '#cccccc',
24
- background: () => '#ffffff',
25
- primary: () => '#0000ff',
26
- primaryDark: () => '#000080',
27
- disabled: () => '#f0f0f0',
28
- },
29
- }));
30
-
31
- let theme;
32
-
33
- beforeAll(() => {
34
- theme = createTheme();
35
- });
36
-
37
- describe('MiniButton', () => {
38
- const onClick = jest.fn();
39
-
40
- beforeEach(() => {
41
- jest.clearAllMocks();
42
- });
43
-
44
- const renderComponent = (extras = {}) => {
45
- const defaults = {
46
- value: 'Test Button',
47
- onClick,
48
- disabled: false,
49
- selected: false,
50
- };
51
- const props = { ...defaults, ...extras };
52
- return render(
53
- <ThemeProvider theme={theme}>
54
- <MiniButton {...props} />
55
- </ThemeProvider>,
56
- );
57
- };
58
-
59
- describe('rendering', () => {
60
- it('should render with value text', () => {
61
- const { getByText } = renderComponent({ value: 'Click Me' });
62
- expect(getByText('Click Me')).toBeInTheDocument();
63
- });
64
-
65
- it('should render as a button element', () => {
66
- const { getByRole } = renderComponent();
67
- expect(getByRole('button')).toBeInTheDocument();
68
- });
69
-
70
- it('should have correct button attributes', () => {
71
- const { getByRole } = renderComponent({ value: 'Test' });
72
- const button = getByRole('button');
73
- expect(button).toHaveAttribute('value', 'Test');
74
- });
75
-
76
- it('should render with variant outlined', () => {
77
- const { getByRole } = renderComponent();
78
- const button = getByRole('button');
79
- expect(button).toHaveClass('MuiButton-outlined');
80
- });
81
-
82
- it('should render with size small', () => {
83
- const { getByRole } = renderComponent();
84
- const button = getByRole('button');
85
- expect(button).toHaveClass('MuiButton-sizeSmall');
86
- });
87
- });
88
-
89
- describe('disabled state', () => {
90
- it('should render as disabled when disabled prop is true', () => {
91
- const { getByRole } = renderComponent({ disabled: true });
92
- expect(getByRole('button')).toBeDisabled();
93
- });
94
-
95
- it('should not render as disabled when disabled prop is false', () => {
96
- const { getByRole } = renderComponent({ disabled: false });
97
- expect(getByRole('button')).not.toBeDisabled();
98
- });
99
-
100
- it('should not trigger onClick when disabled', () => {
101
- const { getByRole } = renderComponent({ disabled: true });
102
- fireEvent.click(getByRole('button'));
103
- expect(onClick).not.toHaveBeenCalled();
104
- });
105
- });
106
-
107
- describe('selected state', () => {
108
- it('should apply selected styling when selected is true', () => {
109
- const { getByRole } = renderComponent({ selected: true });
110
- const button = getByRole('button');
111
- expect(button.className).toContain('MuiButton-colorSecondary');
112
- });
113
-
114
- it('should apply default color when selected is false', () => {
115
- const { getByRole } = renderComponent({ selected: false });
116
- const button = getByRole('button');
117
- expect(button.className).toContain('MuiButton-colorDefault');
118
- });
119
-
120
- it('should render correctly with both selected and disabled', () => {
121
- const { getByRole } = renderComponent({ selected: true, disabled: true });
122
- const button = getByRole('button');
123
- expect(button).toBeDisabled();
124
- expect(button.className).toContain('MuiButton-colorSecondary');
125
- });
126
- });
127
-
128
- describe('interactions', () => {
129
- it('should call onClick when clicked', () => {
130
- const { getByRole } = renderComponent();
131
- fireEvent.click(getByRole('button'));
132
- expect(onClick).toHaveBeenCalledTimes(1);
133
- });
134
-
135
- it('should call onClick with correct event when clicked', () => {
136
- const { getByRole } = renderComponent();
137
- const button = getByRole('button');
138
- fireEvent.click(button);
139
- expect(onClick).toHaveBeenCalled();
140
- expect(onClick.mock.calls[0][0]).toBeTruthy();
141
- });
142
-
143
- it('should handle multiple clicks', () => {
144
- const { getByRole } = renderComponent();
145
- const button = getByRole('button');
146
- fireEvent.click(button);
147
- fireEvent.click(button);
148
- fireEvent.click(button);
149
- expect(onClick).toHaveBeenCalledTimes(3);
150
- });
151
-
152
- it('should handle rapid clicks', () => {
153
- const { getByRole } = renderComponent();
154
- const button = getByRole('button');
155
- for (let i = 0; i < 10; i++) {
156
- fireEvent.click(button);
157
- }
158
- expect(onClick).toHaveBeenCalledTimes(10);
159
- });
160
- });
161
-
162
- describe('edge cases', () => {
163
- it('should render with empty string value', () => {
164
- const { getByRole } = renderComponent({ value: '' });
165
- expect(getByRole('button')).toBeInTheDocument();
166
- });
167
-
168
- it('should render with undefined onClick', () => {
169
- const { getByRole } = render(
170
- <ThemeProvider theme={theme}>
171
- <MiniButton value="Test" onClick={undefined} />
172
- </ThemeProvider>,
173
- );
174
- expect(getByRole('button')).toBeInTheDocument();
175
- });
176
-
177
- it('should render with null onClick', () => {
178
- const { getByRole } = render(
179
- <ThemeProvider theme={theme}>
180
- <MiniButton value="Test" onClick={null} />
181
- </ThemeProvider>,
182
- );
183
- expect(getByRole('button')).toBeInTheDocument();
184
- });
185
-
186
- it('should render with very long value text', () => {
187
- const longText = 'This is a very long button text that might cause layout issues';
188
- const { getByText } = renderComponent({ value: longText });
189
- expect(getByText(longText)).toBeInTheDocument();
190
- });
191
-
192
- it('should render with special characters in value', () => {
193
- const specialText = 'Test <>&"\'';
194
- const { getByText } = renderComponent({ value: specialText });
195
- expect(getByText(specialText)).toBeInTheDocument();
196
- });
197
-
198
- it('should render with unicode characters in value', () => {
199
- const unicodeText = 'Test 你好 🎉';
200
- const { getByText } = renderComponent({ value: unicodeText });
201
- expect(getByText(unicodeText)).toBeInTheDocument();
202
- });
203
- });
204
-
205
- describe('className prop', () => {
206
- it('should accept className prop without error', () => {
207
- const { getByRole } = render(
208
- <ThemeProvider theme={theme}>
209
- <MiniButton value="Test" onClick={onClick} className="custom-class" />
210
- </ThemeProvider>,
211
- );
212
- expect(getByRole('button')).toBeInTheDocument();
213
- });
214
- });
215
- });
216
-
217
- describe('ToolMenu', () => {
218
- const addCategory = jest.fn();
219
-
220
- beforeEach(() => {
221
- jest.clearAllMocks();
222
- });
223
-
224
- const renderComponent = (extras = {}) => {
225
- const defaults = {
226
- addCategory,
227
- disabled: false,
228
- language: 'en',
229
- };
230
- const props = { ...defaults, ...extras };
231
- return render(
232
- <ThemeProvider theme={theme}>
233
- <ToolMenu {...props} />
234
- </ThemeProvider>,
235
- );
236
- };
237
-
238
- describe('rendering', () => {
239
- it('should render without crashing', () => {
240
- const { container } = renderComponent();
241
- expect(container).toBeInTheDocument();
242
- });
243
-
244
- it('should render a div container', () => {
245
- const { container } = renderComponent();
246
- expect(container.firstChild).toBeInstanceOf(HTMLDivElement);
247
- });
248
-
249
- it('should render MiniButton when not disabled', () => {
250
- const { getByRole } = renderComponent({ disabled: false });
251
- expect(getByRole('button')).toBeInTheDocument();
252
- });
253
-
254
- it('should not render MiniButton when disabled', () => {
255
- const { queryByRole } = renderComponent({ disabled: true });
256
- expect(queryByRole('button')).not.toBeInTheDocument();
257
- });
258
-
259
- it('should render translated button text', () => {
260
- const { getByText } = renderComponent();
261
- expect(getByText('Add Category')).toBeInTheDocument();
262
- });
263
-
264
- it('should use language prop for translation', () => {
265
- const Translator = require('@pie-lib/translator').default;
266
- const { getByRole } = renderComponent({ language: 'es' });
267
- expect(getByRole('button')).toBeInTheDocument();
268
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: 'es' });
269
- });
270
- });
271
-
272
- describe('className prop', () => {
273
- it('should apply custom className to container', () => {
274
- const { container } = renderComponent({ className: 'custom-tool-menu' });
275
- expect(container.firstChild).toHaveClass('custom-tool-menu');
276
- });
277
-
278
- it('should render without className', () => {
279
- const { container } = renderComponent({ className: undefined });
280
- expect(container.firstChild).toBeInTheDocument();
281
- });
282
-
283
- it('should handle empty string className', () => {
284
- const { container } = renderComponent({ className: '' });
285
- expect(container.firstChild).toBeInTheDocument();
286
- });
287
- });
288
-
289
- describe('disabled state', () => {
290
- it('should hide button when disabled is true', () => {
291
- const { queryByRole } = renderComponent({ disabled: true });
292
- expect(queryByRole('button')).not.toBeInTheDocument();
293
- });
294
-
295
- it('should show button when disabled is false', () => {
296
- const { getByRole } = renderComponent({ disabled: false });
297
- expect(getByRole('button')).toBeInTheDocument();
298
- });
299
-
300
- it('should show button when disabled is undefined', () => {
301
- const { getByRole } = renderComponent({ disabled: undefined });
302
- expect(getByRole('button')).toBeInTheDocument();
303
- });
304
-
305
- it('should hide button when disabled is explicitly true', () => {
306
- const { queryByRole } = renderComponent({ disabled: true });
307
- expect(queryByRole('button')).toBeNull();
308
- });
309
- });
310
-
311
- describe('addCategory functionality', () => {
312
- it('should call addCategory when button is clicked', () => {
313
- const { getByRole } = renderComponent();
314
- fireEvent.click(getByRole('button'));
315
- expect(addCategory).toHaveBeenCalledTimes(1);
316
- });
317
-
318
- it('should not call addCategory when disabled', () => {
319
- const { queryByRole } = renderComponent({ disabled: true });
320
- expect(queryByRole('button')).not.toBeInTheDocument();
321
- expect(addCategory).not.toHaveBeenCalled();
322
- });
323
-
324
- it('should handle multiple clicks on add category button', () => {
325
- const { getByRole } = renderComponent();
326
- const button = getByRole('button');
327
- fireEvent.click(button);
328
- fireEvent.click(button);
329
- fireEvent.click(button);
330
- expect(addCategory).toHaveBeenCalledTimes(3);
331
- });
332
-
333
- it('should render with undefined addCategory without crashing', () => {
334
- const { container } = render(
335
- <ThemeProvider theme={theme}>
336
- <ToolMenu addCategory={undefined} language="en" />
337
- </ThemeProvider>,
338
- );
339
- expect(container).toBeInTheDocument();
340
- });
341
- });
342
-
343
- describe('language prop', () => {
344
- it('should pass language to translator', () => {
345
- const Translator = require('@pie-lib/translator').default;
346
- renderComponent({ language: 'fr' });
347
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: 'fr' });
348
- });
349
-
350
- it('should handle default english language', () => {
351
- const Translator = require('@pie-lib/translator').default;
352
- renderComponent({ language: 'en' });
353
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: 'en' });
354
- });
355
-
356
- it('should handle undefined language', () => {
357
- const Translator = require('@pie-lib/translator').default;
358
- renderComponent({ language: undefined });
359
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: undefined });
360
- });
361
-
362
- it('should handle empty string language', () => {
363
- const Translator = require('@pie-lib/translator').default;
364
- renderComponent({ language: '' });
365
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: '' });
366
- });
367
-
368
- it('should handle non-standard language codes', () => {
369
- const Translator = require('@pie-lib/translator').default;
370
- renderComponent({ language: 'zh-CN' });
371
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: 'zh-CN' });
372
- });
373
- });
374
-
375
- describe('edge cases', () => {
376
- it('should render with all props undefined', () => {
377
- const { container } = render(
378
- <ThemeProvider theme={theme}>
379
- <ToolMenu />
380
- </ThemeProvider>,
381
- );
382
- expect(container).toBeInTheDocument();
383
- });
384
-
385
- it('should render with null props', () => {
386
- const { container } = render(
387
- <ThemeProvider theme={theme}>
388
- <ToolMenu addCategory={null} disabled={null} language={null} />
389
- </ThemeProvider>,
390
- );
391
- expect(container).toBeInTheDocument();
392
- });
393
-
394
- it('should handle component unmounting', () => {
395
- const { unmount } = renderComponent();
396
- expect(() => unmount()).not.toThrow();
397
- });
398
-
399
- it('should handle re-rendering with different props', () => {
400
- const { rerender, getByRole, queryByRole } = renderComponent({ disabled: false });
401
- expect(getByRole('button')).toBeInTheDocument();
402
-
403
- rerender(
404
- <ThemeProvider theme={theme}>
405
- <ToolMenu addCategory={addCategory} disabled={true} language="en" />
406
- </ThemeProvider>,
407
- );
408
- expect(queryByRole('button')).not.toBeInTheDocument();
409
-
410
- rerender(
411
- <ThemeProvider theme={theme}>
412
- <ToolMenu addCategory={addCategory} disabled={false} language="es" />
413
- </ThemeProvider>,
414
- );
415
- expect(getByRole('button')).toBeInTheDocument();
416
- });
417
-
418
- it('should handle rapid prop changes', () => {
419
- const { rerender, getByRole } = renderComponent({ disabled: false });
420
-
421
- expect(getByRole('button')).toBeInTheDocument();
422
-
423
- for (let i = 0; i < 10; i++) {
424
- rerender(
425
- <ThemeProvider theme={theme}>
426
- <ToolMenu addCategory={addCategory} disabled={i % 2 === 0} language="en" />
427
- </ThemeProvider>,
428
- );
429
- }
430
-
431
- expect(getByRole('button')).toBeInTheDocument();
432
- });
433
- });
434
-
435
- describe('component lifecycle', () => {
436
- it('should render as class component', () => {
437
- const { container } = renderComponent();
438
- expect(container).toBeInTheDocument();
439
- });
440
-
441
- it('should handle updates correctly', () => {
442
- const { rerender, getByRole } = renderComponent({ language: 'en' });
443
- expect(getByRole('button')).toBeInTheDocument();
444
-
445
- rerender(
446
- <ThemeProvider theme={theme}>
447
- <ToolMenu addCategory={addCategory} disabled={false} language="fr" />
448
- </ThemeProvider>,
449
- );
450
- expect(getByRole('button')).toBeInTheDocument();
451
- });
452
-
453
- it('should cleanup properly on unmount', () => {
454
- const { unmount } = renderComponent();
455
- expect(() => unmount()).not.toThrow();
456
- });
457
- });
458
-
459
- describe('accessibility', () => {
460
- it('should have accessible button element', () => {
461
- const { getByRole } = renderComponent();
462
- const button = getByRole('button');
463
- expect(button).toBeInTheDocument();
464
- });
465
-
466
- it('should have button with text content', () => {
467
- const { getByRole } = renderComponent();
468
- const button = getByRole('button');
469
- expect(button).toHaveTextContent('Add Category');
470
- });
471
-
472
- it('should maintain button accessibility when enabled', () => {
473
- const { getByRole } = renderComponent({ disabled: false });
474
- const button = getByRole('button');
475
- expect(button).not.toBeDisabled();
476
- expect(button).toHaveTextContent('Add Category');
477
- });
478
- });
479
-
480
- describe('integration', () => {
481
- it('should work correctly with all props provided', () => {
482
- const customAddCategory = jest.fn();
483
- const { getByRole } = renderComponent({
484
- addCategory: customAddCategory,
485
- disabled: false,
486
- language: 'de',
487
- className: 'test-class',
488
- });
489
-
490
- const button = getByRole('button');
491
- expect(button).toBeInTheDocument();
492
-
493
- fireEvent.click(button);
494
- expect(customAddCategory).toHaveBeenCalledTimes(1);
495
- });
496
-
497
- it('should toggle between enabled and disabled states', () => {
498
- const { rerender, getByRole, queryByRole } = renderComponent({ disabled: false });
499
- expect(getByRole('button')).toBeInTheDocument();
500
-
501
- rerender(
502
- <ThemeProvider theme={theme}>
503
- <ToolMenu addCategory={addCategory} disabled={true} language="en" />
504
- </ThemeProvider>,
505
- );
506
- expect(queryByRole('button')).not.toBeInTheDocument();
507
- });
508
-
509
- it('should handle language switching', () => {
510
- const Translator = require('@pie-lib/translator').default;
511
- const { rerender } = renderComponent({ language: 'en' });
512
-
513
- rerender(
514
- <ThemeProvider theme={theme}>
515
- <ToolMenu addCategory={addCategory} disabled={false} language="es" />
516
- </ThemeProvider>,
517
- );
518
-
519
- expect(Translator.translator.t).toHaveBeenCalledWith('charting.addCategory', { lng: 'es' });
520
- });
521
- });
522
- });
@@ -1,36 +0,0 @@
1
- import { scaleBand, scaleLinear } from 'd3-scale';
2
-
3
- export const scaleMock = () => {
4
- const fn = jest.fn((n) => n);
5
- fn.invert = jest.fn((n) => n);
6
- return fn;
7
- };
8
-
9
- export const createBandScale = (domain = [], range = [0, 400]) => {
10
- return scaleBand().domain(domain).range(range).padding(0.1);
11
- };
12
-
13
- export const graphProps = (dmin = 0, dmax = 1, rmin = 0, rmax = 1) => ({
14
- scale: {
15
- x: scaleLinear().domain([dmin, dmax]).range([0, 400]),
16
- y: scaleLinear().domain([rmin, rmax]).range([400, 0]),
17
- },
18
- snap: {
19
- x: jest.fn((n) => n),
20
- y: jest.fn((n) => n),
21
- },
22
- domain: {
23
- min: dmin,
24
- max: dmax,
25
- step: 1,
26
- },
27
- range: {
28
- min: rmin,
29
- max: rmax,
30
- step: 1,
31
- },
32
- size: {
33
- width: 400,
34
- height: 400,
35
- },
36
- });
@@ -1,100 +0,0 @@
1
- import * as utils from '../utils';
2
-
3
- const xy = (x, y) => ({ x, y });
4
-
5
- describe('utils', () => {
6
- describe('getTickValues', () => {
7
- const assertGetTickValues = (range, points) => {
8
- it(`converts ${range} -> ${points}`, () => {
9
- const result = utils.getTickValues(range);
10
- expect(result).toEqual(points);
11
- });
12
- };
13
-
14
- assertGetTickValues({ min: 0, max: 5, step: 1 }, [0, 1, 2, 3, 4, 5]);
15
- assertGetTickValues({ min: 0, max: 5, step: 0.5 }, [0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]);
16
- assertGetTickValues({ min: 0.4, max: 2, step: 0.3 }, [0.4, 0.7, 1, 1.3, 1.6, 1.9]);
17
- });
18
-
19
- describe('getDomainAndRangeByChartType', () => {
20
- const assertGetDomainAndRangeByChartType = (domain, range, chartType, correctValues) => {
21
- it('returns correct values for domain and range', () => {
22
- const result = utils.getDomainAndRangeByChartType(domain, range, chartType);
23
- expect(result).toEqual(correctValues);
24
- });
25
- };
26
-
27
- assertGetDomainAndRangeByChartType({ min: -1, max: 4 }, { min: 1, max: 2, step: 1 }, 'line', {
28
- domain: { min: 0, max: 1, step: 1, labelStep: 1 },
29
- range: { min: 1, max: 2, step: 1, labelStep: 1 },
30
- });
31
- assertGetDomainAndRangeByChartType({ min: -1, max: 4 }, { min: 0.1, max: 2, labelStep: 0.1 }, 'line', {
32
- domain: { min: 0, max: 1, step: 1, labelStep: 1 },
33
- range: { min: 0.1, max: 2, step: 0.1, labelStep: 0.1 },
34
- });
35
- assertGetDomainAndRangeByChartType({ min: -1, max: 4 }, { min: 0.2, max: 2.4, step: 0.1 }, 'dotPlot', {
36
- domain: { min: 0, max: 1, step: 1, labelStep: 1 },
37
- range: { min: 0, max: 2, step: 1, labelStep: 0.1 },
38
- });
39
- });
40
-
41
- describe('getGridLinesAndAxisByChartType', () => {
42
- const assertGetGridLinesAndAxisByChartType = (range, chartType, gridLines) => {
43
- it('returns proper grid values', () => {
44
- const result = utils.getGridLinesAndAxisByChartType(range, chartType);
45
- expect(result).toEqual(gridLines);
46
- });
47
- };
48
-
49
- assertGetGridLinesAndAxisByChartType({ min: 0, max: 1, step: 1 }, 'lineDot', {
50
- verticalLines: undefined,
51
- horizontalLines: [0, 1],
52
- leftAxis: true,
53
- });
54
-
55
- assertGetGridLinesAndAxisByChartType({ min: 0, max: 1, step: 1 }, 'lineCross', {
56
- verticalLines: undefined,
57
- horizontalLines: [0, 1],
58
- leftAxis: true,
59
- });
60
-
61
- assertGetGridLinesAndAxisByChartType({ min: 0, max: 1, step: 1 }, 'bar', {
62
- verticalLines: [],
63
- horizontalLines: [0, 1],
64
- leftAxis: true,
65
- });
66
-
67
- assertGetGridLinesAndAxisByChartType({ min: 0, max: 1, step: 1 }, 'dotPlot', {
68
- verticalLines: [],
69
- horizontalLines: [],
70
- leftAxis: false,
71
- });
72
- });
73
-
74
- describe('getTopPadding', () => {
75
- const assertGetTopPadding = (barWidth, topPadding) => {
76
- it('returns proper top padding', () => {
77
- const result = utils.getTopPadding(barWidth);
78
- expect(result).toEqual(topPadding);
79
- });
80
- };
81
-
82
- assertGetTopPadding(20, 50);
83
- assertGetTopPadding(35, 30);
84
- assertGetTopPadding(55, 15);
85
- assertGetTopPadding(65, 0);
86
- });
87
-
88
- describe('getRotateAngle', () => {
89
- const assertGetRotateAngle = ({ fontSize, height }, rotateAngle) => {
90
- it('returns proper rotate angle', () => {
91
- const result = utils.getRotateAngle(fontSize, height);
92
- expect(result).toEqual(rotateAngle);
93
- });
94
- };
95
-
96
- assertGetRotateAngle({ fontSize: 14, height: 14 }, 0);
97
- assertGetRotateAngle({ fontSize: 14, height: 28 }, 25);
98
- assertGetRotateAngle({ fontSize: 14, height: 42 }, 25);
99
- });
100
- });