@pie-lib/graphing-solution-set 4.1.0-beta.8 → 5.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 (266) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +20 -0
  2. package/dist/autosize-input.d.ts +10 -0
  3. package/dist/autosize-input.js +66 -0
  4. package/dist/axis/arrow.d.ts +13 -0
  5. package/dist/axis/arrow.js +34 -0
  6. package/dist/axis/axes.d.ts +132 -0
  7. package/dist/axis/axes.js +214 -0
  8. package/dist/axis/index.d.ts +10 -0
  9. package/dist/bg.d.ts +51 -0
  10. package/dist/bg.js +44 -0
  11. package/dist/container/actions.d.ts +15 -0
  12. package/dist/container/actions.js +7 -0
  13. package/dist/container/index.d.ts +58 -0
  14. package/dist/container/index.js +48 -0
  15. package/dist/container/marks.d.ts +10 -0
  16. package/dist/container/marks.js +11 -0
  17. package/dist/container/middleware.d.ts +10 -0
  18. package/dist/container/middleware.js +4 -0
  19. package/dist/container/reducer.d.ts +14 -0
  20. package/dist/container/reducer.js +7 -0
  21. package/dist/coordinates-label.d.ts +50 -0
  22. package/dist/coordinates-label.js +46 -0
  23. package/dist/graph-with-controls.d.ts +85 -0
  24. package/dist/graph-with-controls.js +155 -0
  25. package/dist/graph.d.ts +119 -0
  26. package/dist/graph.js +221 -0
  27. package/dist/grid-setup.d.ts +27 -0
  28. package/dist/grid-setup.js +307 -0
  29. package/dist/grid.d.ts +43 -0
  30. package/dist/grid.js +59 -0
  31. package/dist/index.d.ts +14 -0
  32. package/dist/index.js +6 -0
  33. package/dist/labels.d.ts +73 -0
  34. package/dist/labels.js +134 -0
  35. package/dist/mark-label.d.ts +50 -0
  36. package/dist/mark-label.js +84 -0
  37. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Axis.js +67 -0
  38. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisRenderer.js +66 -0
  39. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Ticks.js +39 -0
  40. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/constants/orientation.js +9 -0
  41. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/createPoint.js +14 -0
  42. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js +13 -0
  43. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getLabelTransform.js +16 -0
  44. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickFormatter.js +8 -0
  45. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickPosition.js +14 -0
  46. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/Grid.js +43 -0
  47. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridColumns.js +46 -0
  48. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridRows.js +46 -0
  49. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/utils/getScaleBandwidth.js +6 -0
  50. package/dist/node_modules/.bun/@visx_group@4.0.0_d84c32d47042070f/node_modules/@visx/group/esm/Group.js +17 -0
  51. package/dist/node_modules/.bun/@visx_point@4.0.0/node_modules/@visx/point/esm/Point.js +20 -0
  52. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/coerceNumber.js +10 -0
  53. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/getTicks.js +7 -0
  54. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/toString.js +6 -0
  55. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Line.js +27 -0
  56. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/Text.js +27 -0
  57. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/hooks/useText.js +68 -0
  58. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/getStringWidth.js +19 -0
  59. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/memoize.js +13 -0
  60. package/dist/node_modules/.bun/balanced-match@0.4.2/node_modules/balanced-match/index.js +32 -0
  61. package/dist/node_modules/.bun/balanced-match@1.0.2/node_modules/balanced-match/index.js +33 -0
  62. package/dist/node_modules/.bun/classnames@2.5.1/node_modules/classnames/index.js +32 -0
  63. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +16 -0
  64. package/dist/node_modules/.bun/invariant@2.2.4/node_modules/invariant/browser.js +28 -0
  65. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/formula_evaluator.js +37 -0
  66. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/lexer.js +509 -0
  67. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/math_function.js +108 -0
  68. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix.js +31 -0
  69. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix_evaluator.js +45 -0
  70. package/dist/node_modules/.bun/reduce-css-calc@1.3.0/node_modules/reduce-css-calc/index.js +49 -0
  71. package/dist/node_modules/.bun/reduce-function-call@1.0.3/node_modules/reduce-function-call/index.js +34 -0
  72. package/dist/node_modules/.bun/redux-undo@1.1.0/node_modules/redux-undo/dist/redux-undo.js +185 -0
  73. package/dist/node_modules/.bun/redux@5.0.1/node_modules/redux/dist/redux.js +198 -0
  74. package/dist/toggle-bar.d.ts +40 -0
  75. package/dist/tool-menu.d.ts +21 -0
  76. package/dist/tool-menu.js +188 -0
  77. package/dist/tools/index.d.ts +17 -0
  78. package/dist/tools/index.js +12 -0
  79. package/dist/tools/line/component.d.ts +113 -0
  80. package/dist/tools/line/component.js +58 -0
  81. package/dist/tools/line/index.d.ts +13 -0
  82. package/dist/tools/line/index.js +6 -0
  83. package/dist/tools/polygon/component.d.ts +117 -0
  84. package/dist/tools/polygon/component.js +194 -0
  85. package/dist/tools/polygon/index.d.ts +19 -0
  86. package/dist/tools/polygon/index.js +55 -0
  87. package/dist/tools/polygon/line.d.ts +125 -0
  88. package/dist/tools/polygon/polygon.d.ts +122 -0
  89. package/dist/tools/polygon/polygon.js +62 -0
  90. package/dist/tools/shared/arrow-head.d.ts +43 -0
  91. package/dist/tools/shared/arrow-head.js +37 -0
  92. package/dist/tools/shared/line/index.d.ts +240 -0
  93. package/dist/tools/shared/line/index.js +320 -0
  94. package/dist/tools/shared/line/line-path.d.ts +57 -0
  95. package/dist/tools/shared/line/with-root-edge.d.ts +143 -0
  96. package/dist/tools/shared/point/arrow-point.d.ts +57 -0
  97. package/dist/tools/shared/point/arrow-point.js +47 -0
  98. package/dist/tools/shared/point/arrow.d.ts +46 -0
  99. package/dist/tools/shared/point/arrow.js +36 -0
  100. package/dist/tools/shared/point/base-point.d.ts +50 -0
  101. package/dist/tools/shared/point/base-point.js +88 -0
  102. package/dist/tools/shared/point/index.d.ts +217 -0
  103. package/dist/tools/shared/point/index.js +51 -0
  104. package/dist/tools/shared/styles.d.ts +24 -0
  105. package/dist/tools/shared/styles.js +17 -0
  106. package/dist/tools/shared/types.d.ts +15 -0
  107. package/dist/tools/shared/types.js +10 -0
  108. package/dist/undo-redo.d.ts +20 -0
  109. package/dist/undo-redo.js +33 -0
  110. package/dist/use-debounce.d.ts +9 -0
  111. package/dist/use-debounce.js +13 -0
  112. package/dist/utils.d.ts +58 -0
  113. package/dist/utils.js +72 -0
  114. package/package.json +52 -42
  115. package/CHANGELOG.json +0 -1
  116. package/CHANGELOG.md +0 -449
  117. package/lib/axis/arrow.js +0 -79
  118. package/lib/axis/arrow.js.map +0 -1
  119. package/lib/axis/axes.js +0 -327
  120. package/lib/axis/axes.js.map +0 -1
  121. package/lib/axis/index.js +0 -21
  122. package/lib/axis/index.js.map +0 -1
  123. package/lib/bg.js +0 -114
  124. package/lib/bg.js.map +0 -1
  125. package/lib/container/actions.js +0 -18
  126. package/lib/container/actions.js.map +0 -1
  127. package/lib/container/index.js +0 -129
  128. package/lib/container/index.js.map +0 -1
  129. package/lib/container/marks.js +0 -22
  130. package/lib/container/marks.js.map +0 -1
  131. package/lib/container/middleware.js +0 -19
  132. package/lib/container/middleware.js.map +0 -1
  133. package/lib/container/reducer.js +0 -18
  134. package/lib/container/reducer.js.map +0 -1
  135. package/lib/coordinates-label.js +0 -77
  136. package/lib/coordinates-label.js.map +0 -1
  137. package/lib/graph-with-controls.js +0 -297
  138. package/lib/graph-with-controls.js.map +0 -1
  139. package/lib/graph.js +0 -353
  140. package/lib/graph.js.map +0 -1
  141. package/lib/grid-setup.js +0 -414
  142. package/lib/grid-setup.js.map +0 -1
  143. package/lib/grid.js +0 -131
  144. package/lib/grid.js.map +0 -1
  145. package/lib/index.js +0 -40
  146. package/lib/index.js.map +0 -1
  147. package/lib/labels.js +0 -199
  148. package/lib/labels.js.map +0 -1
  149. package/lib/mark-label.js +0 -159
  150. package/lib/mark-label.js.map +0 -1
  151. package/lib/toggle-bar.js +0 -248
  152. package/lib/toggle-bar.js.map +0 -1
  153. package/lib/tool-menu.js +0 -218
  154. package/lib/tool-menu.js.map +0 -1
  155. package/lib/tools/index.js +0 -24
  156. package/lib/tools/index.js.map +0 -1
  157. package/lib/tools/line/component.js +0 -92
  158. package/lib/tools/line/component.js.map +0 -1
  159. package/lib/tools/line/index.js +0 -11
  160. package/lib/tools/line/index.js.map +0 -1
  161. package/lib/tools/polygon/component.js +0 -358
  162. package/lib/tools/polygon/component.js.map +0 -1
  163. package/lib/tools/polygon/index.js +0 -89
  164. package/lib/tools/polygon/index.js.map +0 -1
  165. package/lib/tools/polygon/line.js +0 -114
  166. package/lib/tools/polygon/line.js.map +0 -1
  167. package/lib/tools/polygon/polygon.js +0 -128
  168. package/lib/tools/polygon/polygon.js.map +0 -1
  169. package/lib/tools/shared/arrow-head.js +0 -62
  170. package/lib/tools/shared/arrow-head.js.map +0 -1
  171. package/lib/tools/shared/line/index.js +0 -539
  172. package/lib/tools/shared/line/index.js.map +0 -1
  173. package/lib/tools/shared/line/line-path.js +0 -121
  174. package/lib/tools/shared/line/line-path.js.map +0 -1
  175. package/lib/tools/shared/line/with-root-edge.js +0 -121
  176. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  177. package/lib/tools/shared/point/arrow-point.js +0 -86
  178. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  179. package/lib/tools/shared/point/arrow.js +0 -70
  180. package/lib/tools/shared/point/arrow.js.map +0 -1
  181. package/lib/tools/shared/point/base-point.js +0 -137
  182. package/lib/tools/shared/point/base-point.js.map +0 -1
  183. package/lib/tools/shared/point/index.js +0 -80
  184. package/lib/tools/shared/point/index.js.map +0 -1
  185. package/lib/tools/shared/styles.js +0 -26
  186. package/lib/tools/shared/styles.js.map +0 -1
  187. package/lib/tools/shared/types.js +0 -15
  188. package/lib/tools/shared/types.js.map +0 -1
  189. package/lib/undo-redo.js +0 -67
  190. package/lib/undo-redo.js.map +0 -1
  191. package/lib/use-debounce.js +0 -25
  192. package/lib/use-debounce.js.map +0 -1
  193. package/lib/utils.js +0 -235
  194. package/lib/utils.js.map +0 -1
  195. package/src/__tests__/bg.test.jsx +0 -250
  196. package/src/__tests__/coordinates-label.test.jsx +0 -243
  197. package/src/__tests__/graph-with-controls.test.jsx +0 -184
  198. package/src/__tests__/graph.test.jsx +0 -93
  199. package/src/__tests__/grid-setup.test.jsx +0 -645
  200. package/src/__tests__/grid.test.jsx +0 -23
  201. package/src/__tests__/labels.test.jsx +0 -41
  202. package/src/__tests__/mark-label.test.jsx +0 -66
  203. package/src/__tests__/toggle-bar.test.jsx +0 -106
  204. package/src/__tests__/tool-menu.test.jsx +0 -453
  205. package/src/__tests__/undo-redo.test.jsx +0 -26
  206. package/src/__tests__/use-debounce.test.js +0 -21
  207. package/src/__tests__/utils.js +0 -41
  208. package/src/__tests__/utils.test.js +0 -105
  209. package/src/axis/__tests__/arrow.test.jsx +0 -43
  210. package/src/axis/__tests__/axes.test.jsx +0 -182
  211. package/src/axis/arrow.jsx +0 -57
  212. package/src/axis/axes.jsx +0 -284
  213. package/src/axis/index.js +0 -3
  214. package/src/bg.jsx +0 -96
  215. package/src/container/__tests__/actions.test.js +0 -105
  216. package/src/container/__tests__/index.test.jsx +0 -227
  217. package/src/container/__tests__/marks.test.js +0 -172
  218. package/src/container/__tests__/middleware.test.js +0 -235
  219. package/src/container/__tests__/reducer.test.js +0 -324
  220. package/src/container/actions.js +0 -8
  221. package/src/container/index.jsx +0 -93
  222. package/src/container/marks.js +0 -14
  223. package/src/container/middleware.js +0 -7
  224. package/src/container/reducer.js +0 -5
  225. package/src/coordinates-label.jsx +0 -62
  226. package/src/graph-with-controls.jsx +0 -242
  227. package/src/graph.jsx +0 -333
  228. package/src/grid-setup.jsx +0 -432
  229. package/src/grid.jsx +0 -133
  230. package/src/index.js +0 -7
  231. package/src/labels.jsx +0 -173
  232. package/src/mark-label.jsx +0 -125
  233. package/src/toggle-bar.jsx +0 -221
  234. package/src/tool-menu.jsx +0 -235
  235. package/src/tools/index.js +0 -8
  236. package/src/tools/line/__tests__/component.test.jsx +0 -37
  237. package/src/tools/line/component.jsx +0 -77
  238. package/src/tools/line/index.js +0 -4
  239. package/src/tools/polygon/__tests__/component.test.jsx +0 -487
  240. package/src/tools/polygon/__tests__/index.test.js +0 -65
  241. package/src/tools/polygon/__tests__/line.test.jsx +0 -23
  242. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -44
  243. package/src/tools/polygon/component.jsx +0 -324
  244. package/src/tools/polygon/index.js +0 -52
  245. package/src/tools/polygon/line.jsx +0 -80
  246. package/src/tools/polygon/polygon.jsx +0 -93
  247. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -33
  248. package/src/tools/shared/arrow-head.jsx +0 -46
  249. package/src/tools/shared/line/__tests__/index.test.jsx +0 -553
  250. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -56
  251. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -488
  252. package/src/tools/shared/line/index.jsx +0 -471
  253. package/src/tools/shared/line/line-path.jsx +0 -85
  254. package/src/tools/shared/line/with-root-edge.jsx +0 -97
  255. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  256. package/src/tools/shared/point/__tests__/arrow.test.jsx +0 -469
  257. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  258. package/src/tools/shared/point/arrow-point.jsx +0 -60
  259. package/src/tools/shared/point/arrow.jsx +0 -40
  260. package/src/tools/shared/point/base-point.jsx +0 -113
  261. package/src/tools/shared/point/index.jsx +0 -58
  262. package/src/tools/shared/styles.js +0 -20
  263. package/src/tools/shared/types.js +0 -8
  264. package/src/undo-redo.jsx +0 -37
  265. package/src/use-debounce.js +0 -13
  266. package/src/utils.js +0 -230
@@ -1,488 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { rootEdgeComponent, rootEdgeToFromToWrapper, withRootEdge } from '../with-root-edge';
4
- import { graphProps as getGraphProps } from '../../../../__tests__/utils';
5
- import { utils } from '@pie-lib/plot';
6
-
7
- const { xy } = utils;
8
-
9
- jest.mock('../index', () => {
10
- const React = require('react');
11
- const out = {
12
- lineBase: jest.fn((Component) => Component),
13
- lineToolComponent: jest.fn((Component) => {
14
- return (props) => <Component {...props} />;
15
- }),
16
- };
17
- return out;
18
- });
19
-
20
- describe('rootEdgeToFromToWrapper', () => {
21
- let Comp;
22
- let onChange;
23
-
24
- beforeEach(() => {
25
- onChange = jest.fn();
26
- Comp = rootEdgeToFromToWrapper((props) => <div data-testid="wrapped-component" {...props} />);
27
- });
28
-
29
- const renderComponent = (extras) => {
30
- const defaults = {
31
- mark: { root: xy(1, 1), edge: xy(2, 2) },
32
- onChange,
33
- };
34
- const props = { ...defaults, ...extras };
35
- return render(<Comp {...props} />);
36
- };
37
-
38
- describe('rendering', () => {
39
- it('renders without crashing', () => {
40
- const { container } = renderComponent();
41
- expect(container.firstChild).toBeInTheDocument();
42
- });
43
-
44
- it('renders with only root point', () => {
45
- const { container } = renderComponent({
46
- mark: { root: xy(1, 1) },
47
- });
48
- expect(container.firstChild).toBeInTheDocument();
49
- });
50
-
51
- it('renders with root and edge points', () => {
52
- const { container } = renderComponent({
53
- mark: { root: xy(0, 0), edge: xy(5, 5) },
54
- });
55
- expect(container.firstChild).toBeInTheDocument();
56
- });
57
-
58
- it('renders with negative coordinates', () => {
59
- const { container } = renderComponent({
60
- mark: { root: xy(-5, -5), edge: xy(-1, -1) },
61
- });
62
- expect(container.firstChild).toBeInTheDocument();
63
- });
64
-
65
- it('renders with decimal coordinates', () => {
66
- const { container } = renderComponent({
67
- mark: { root: xy(0.5, 0.5), edge: xy(1.5, 1.5) },
68
- });
69
- expect(container.firstChild).toBeInTheDocument();
70
- });
71
- });
72
-
73
- describe('coordinate transformation', () => {
74
- it('converts root/edge to from/to for wrapped component', () => {
75
- const { getByTestId } = renderComponent({
76
- mark: { root: xy(1, 1), edge: xy(2, 2) },
77
- });
78
-
79
- const wrappedComponent = getByTestId('wrapped-component');
80
- expect(wrappedComponent).toBeInTheDocument();
81
- });
82
-
83
- it('handles mark without edge', () => {
84
- const { container } = renderComponent({
85
- mark: { root: xy(1, 1) },
86
- });
87
- expect(container.firstChild).toBeInTheDocument();
88
- });
89
-
90
- it('handles mark with undefined edge', () => {
91
- const { container } = renderComponent({
92
- mark: { root: xy(1, 1), edge: undefined },
93
- });
94
- expect(container.firstChild).toBeInTheDocument();
95
- });
96
- });
97
-
98
- describe('onChange handling', () => {
99
- it('passes onChange handler to wrapped component', () => {
100
- const { container } = renderComponent();
101
- expect(container.firstChild).toBeInTheDocument();
102
- expect(onChange).not.toHaveBeenCalled();
103
- });
104
-
105
- it('provides onChange prop to wrapped component', () => {
106
- const { getByTestId } = renderComponent();
107
- const wrappedComponent = getByTestId('wrapped-component');
108
- expect(wrappedComponent).toBeInTheDocument();
109
- });
110
- });
111
-
112
- describe('prop forwarding', () => {
113
- it('forwards additional props to wrapped component', () => {
114
- const { getByTestId } = renderComponent({
115
- disabled: true,
116
- correctness: 'correct',
117
- });
118
-
119
- const wrappedComponent = getByTestId('wrapped-component');
120
- expect(wrappedComponent).toBeInTheDocument();
121
- });
122
-
123
- it('forwards graphProps', () => {
124
- const graphProps = getGraphProps();
125
- const { getByTestId } = renderComponent({
126
- graphProps,
127
- });
128
-
129
- const wrappedComponent = getByTestId('wrapped-component');
130
- expect(wrappedComponent).toBeInTheDocument();
131
- });
132
-
133
- it('forwards all standard props', () => {
134
- const { getByTestId } = renderComponent({
135
- disabled: false,
136
- correctness: 'incorrect',
137
- fill: '#ff0000',
138
- onClick: jest.fn(),
139
- onDragStart: jest.fn(),
140
- onDragStop: jest.fn(),
141
- });
142
-
143
- const wrappedComponent = getByTestId('wrapped-component');
144
- expect(wrappedComponent).toBeInTheDocument();
145
- });
146
- });
147
-
148
- describe('edge cases', () => {
149
- it('handles mark with same root and edge', () => {
150
- const { container } = renderComponent({
151
- mark: { root: xy(1, 1), edge: xy(1, 1) },
152
- });
153
- expect(container.firstChild).toBeInTheDocument();
154
- });
155
-
156
- it('handles mark with zero coordinates', () => {
157
- const { container } = renderComponent({
158
- mark: { root: xy(0, 0), edge: xy(0, 0) },
159
- });
160
- expect(container.firstChild).toBeInTheDocument();
161
- });
162
-
163
- it('handles mark with large coordinate values', () => {
164
- const { container } = renderComponent({
165
- mark: { root: xy(1000, 1000), edge: xy(2000, 2000) },
166
- });
167
- expect(container.firstChild).toBeInTheDocument();
168
- });
169
-
170
- it('handles mark with labels', () => {
171
- const { container } = renderComponent({
172
- mark: {
173
- root: { x: 1, y: 1, label: 'Root' },
174
- edge: { x: 2, y: 2, label: 'Edge' },
175
- },
176
- });
177
- expect(container.firstChild).toBeInTheDocument();
178
- });
179
- });
180
- });
181
-
182
- describe('rootEdgeComponent', () => {
183
- let onChange;
184
- let Comp;
185
- let mark;
186
-
187
- beforeEach(() => {
188
- onChange = jest.fn();
189
- mark = { root: xy(0, 0), edge: xy(1, 1) };
190
- Comp = rootEdgeComponent((props) => <text data-testid="root-edge-comp" {...props} />);
191
- });
192
-
193
- const renderComponent = (extras) => {
194
- const defaults = {
195
- mark,
196
- graphProps: getGraphProps(),
197
- onChange,
198
- };
199
- const props = { ...defaults, ...extras };
200
- return render(<Comp {...props} />);
201
- };
202
-
203
- describe('rendering', () => {
204
- it('renders without crashing', () => {
205
- const { container } = renderComponent();
206
- expect(container.firstChild).toBeInTheDocument();
207
- });
208
-
209
- it('renders with building mark', () => {
210
- const buildingMark = { root: xy(0, 0), building: true };
211
- const { container } = renderComponent({ mark: buildingMark });
212
- expect(container.firstChild).toBeInTheDocument();
213
- });
214
-
215
- it('renders with complete mark', () => {
216
- const completeMark = { root: xy(0, 0), edge: xy(5, 5), building: false };
217
- const { container } = renderComponent({ mark: completeMark });
218
- expect(container.firstChild).toBeInTheDocument();
219
- });
220
-
221
- it('renders with disabled mark', () => {
222
- const disabledMark = { root: xy(0, 0), edge: xy(1, 1), disabled: true };
223
- const { container } = renderComponent({ mark: disabledMark });
224
- expect(container.firstChild).toBeInTheDocument();
225
- });
226
-
227
- it('renders with correctness state', () => {
228
- const correctMark = { root: xy(0, 0), edge: xy(1, 1), correctness: 'correct' };
229
- const { container } = renderComponent({ mark: correctMark });
230
- expect(container.firstChild).toBeInTheDocument();
231
- });
232
- });
233
-
234
- describe('mark variations', () => {
235
- it('handles mark without edge', () => {
236
- const { container } = renderComponent({
237
- mark: { root: xy(1, 1) },
238
- });
239
- expect(container.firstChild).toBeInTheDocument();
240
- });
241
-
242
- it('handles mark with middle point', () => {
243
- const { container } = renderComponent({
244
- mark: { root: xy(0, 0), edge: xy(2, 2), middle: xy(1, 1) },
245
- });
246
- expect(container.firstChild).toBeInTheDocument();
247
- });
248
-
249
- it('handles mark with custom fill', () => {
250
- const { container } = renderComponent({
251
- mark: { root: xy(0, 0), edge: xy(1, 1), fill: '#00ff00' },
252
- });
253
- expect(container.firstChild).toBeInTheDocument();
254
- });
255
-
256
- it('handles mark with type property', () => {
257
- const { container } = renderComponent({
258
- mark: { root: xy(0, 0), edge: xy(1, 1), type: 'parabola' },
259
- });
260
- expect(container.firstChild).toBeInTheDocument();
261
- });
262
- });
263
-
264
- describe('prop forwarding', () => {
265
- it('forwards graphProps correctly', () => {
266
- const customGraphProps = getGraphProps(0, 10, 0, 10);
267
- const { container } = renderComponent({ graphProps: customGraphProps });
268
- expect(container.firstChild).toBeInTheDocument();
269
- });
270
-
271
- it('forwards onClick handler', () => {
272
- const onClick = jest.fn();
273
- const { container } = renderComponent({ onClick });
274
- expect(container.firstChild).toBeInTheDocument();
275
- });
276
-
277
- it('forwards labelNode', () => {
278
- const labelNode = document.createElement('foreignObject');
279
- const { container } = renderComponent({ labelNode });
280
- expect(container.firstChild).toBeInTheDocument();
281
- });
282
-
283
- it('forwards labelModeEnabled', () => {
284
- const { container } = renderComponent({ labelModeEnabled: true });
285
- expect(container.firstChild).toBeInTheDocument();
286
- });
287
-
288
- it('forwards coordinatesOnHover', () => {
289
- const { container } = renderComponent({ coordinatesOnHover: true });
290
- expect(container.firstChild).toBeInTheDocument();
291
- });
292
- });
293
-
294
- describe('edge cases', () => {
295
- it('handles vertical line (same x coordinates)', () => {
296
- const { container } = renderComponent({
297
- mark: { root: xy(1, 0), edge: xy(1, 5) },
298
- });
299
- expect(container.firstChild).toBeInTheDocument();
300
- });
301
-
302
- it('handles horizontal line (same y coordinates)', () => {
303
- const { container } = renderComponent({
304
- mark: { root: xy(0, 1), edge: xy(5, 1) },
305
- });
306
- expect(container.firstChild).toBeInTheDocument();
307
- });
308
-
309
- it('handles diagonal line', () => {
310
- const { container } = renderComponent({
311
- mark: { root: xy(0, 0), edge: xy(5, 5) },
312
- });
313
- expect(container.firstChild).toBeInTheDocument();
314
- });
315
-
316
- it('handles negative slope', () => {
317
- const { container } = renderComponent({
318
- mark: { root: xy(0, 5), edge: xy(5, 0) },
319
- });
320
- expect(container.firstChild).toBeInTheDocument();
321
- });
322
- });
323
- });
324
-
325
- describe('withRootEdge', () => {
326
- let getPoints;
327
- let Comp;
328
-
329
- beforeEach(() => {
330
- getPoints = jest.fn(() => ({
331
- dataPoints: [
332
- { x: 0, y: 0 },
333
- { x: 1, y: 1 },
334
- { x: 2, y: 4 },
335
- ],
336
- enableCurve: true,
337
- }));
338
- Comp = withRootEdge(getPoints);
339
- });
340
-
341
- const renderComponent = (extras) => {
342
- const defaults = {
343
- from: xy(0, 0),
344
- to: xy(2, 2),
345
- graphProps: getGraphProps(),
346
- onChange: jest.fn(),
347
- };
348
- const props = { ...defaults, ...extras };
349
- return render(<Comp {...props} />);
350
- };
351
-
352
- describe('rendering', () => {
353
- it('renders without crashing', () => {
354
- const { container } = renderComponent();
355
- expect(container.firstChild).toBeInTheDocument();
356
- });
357
-
358
- it('calls getPoints with correct parameters', () => {
359
- renderComponent();
360
- expect(getPoints).toHaveBeenCalled();
361
- });
362
-
363
- it('renders with curve enabled', () => {
364
- getPoints.mockReturnValue({
365
- dataPoints: [xy(0, 0), xy(1, 1), xy(2, 2)],
366
- enableCurve: true,
367
- });
368
- const { container } = renderComponent();
369
- expect(container.firstChild).toBeInTheDocument();
370
- });
371
-
372
- it('renders with curve disabled', () => {
373
- getPoints.mockReturnValue({
374
- dataPoints: [xy(0, 0), xy(1, 1), xy(2, 2)],
375
- enableCurve: false,
376
- });
377
- const { container } = renderComponent();
378
- expect(container.firstChild).toBeInTheDocument();
379
- });
380
- });
381
-
382
- describe('data points handling', () => {
383
- it('handles empty data points', () => {
384
- getPoints.mockReturnValue({
385
- dataPoints: [],
386
- enableCurve: true,
387
- });
388
- const { container } = renderComponent();
389
- expect(container.firstChild).toBeInTheDocument();
390
- });
391
-
392
- it('handles single data point', () => {
393
- getPoints.mockReturnValue({
394
- dataPoints: [xy(1, 1)],
395
- enableCurve: true,
396
- });
397
- const { container } = renderComponent();
398
- expect(container.firstChild).toBeInTheDocument();
399
- });
400
-
401
- it('handles many data points', () => {
402
- const points = Array.from({ length: 100 }, (_, i) => xy(i, i * i));
403
- getPoints.mockReturnValue({
404
- dataPoints: points,
405
- enableCurve: true,
406
- });
407
- const { container } = renderComponent();
408
- expect(container.firstChild).toBeInTheDocument();
409
- });
410
-
411
- it('handles negative coordinate data points', () => {
412
- getPoints.mockReturnValue({
413
- dataPoints: [xy(-5, -5), xy(-3, -3), xy(-1, -1)],
414
- enableCurve: true,
415
- });
416
- const { container } = renderComponent();
417
- expect(container.firstChild).toBeInTheDocument();
418
- });
419
- });
420
-
421
- describe('prop handling', () => {
422
- it('forwards onClick handler', () => {
423
- const onClick = jest.fn();
424
- const { container } = renderComponent({ onClick });
425
- expect(container.firstChild).toBeInTheDocument();
426
- });
427
-
428
- it('forwards onDragStart handler', () => {
429
- const onDragStart = jest.fn();
430
- const { container } = renderComponent({ onDragStart });
431
- expect(container.firstChild).toBeInTheDocument();
432
- });
433
-
434
- it('forwards onDragStop handler', () => {
435
- const onDragStop = jest.fn();
436
- const { container } = renderComponent({ onDragStop });
437
- expect(container.firstChild).toBeInTheDocument();
438
- });
439
-
440
- it('forwards disabled state', () => {
441
- const { container } = renderComponent({ disabled: true });
442
- expect(container.firstChild).toBeInTheDocument();
443
- });
444
-
445
- it('forwards correctness state', () => {
446
- const { container } = renderComponent({ correctness: 'correct' });
447
- expect(container.firstChild).toBeInTheDocument();
448
- });
449
-
450
- it('forwards custom props', () => {
451
- const { container } = renderComponent({
452
- fill: '#ff0000',
453
- strokeWidth: 5,
454
- });
455
- expect(container.firstChild).toBeInTheDocument();
456
- });
457
- });
458
-
459
- describe('edge cases', () => {
460
- it('handles undefined to point', () => {
461
- const { container } = renderComponent({ to: undefined });
462
- expect(container.firstChild).toBeInTheDocument();
463
- });
464
-
465
- it('handles same from and to points', () => {
466
- const { container } = renderComponent({
467
- from: xy(1, 1),
468
- to: xy(1, 1),
469
- });
470
- expect(container.firstChild).toBeInTheDocument();
471
- });
472
-
473
- it('handles different graph scales', () => {
474
- const customGraphProps = getGraphProps(-10, 10, -10, 10);
475
- const { container } = renderComponent({ graphProps: customGraphProps });
476
- expect(container.firstChild).toBeInTheDocument();
477
- });
478
-
479
- it('handles getPoints returning enableCurve as undefined', () => {
480
- getPoints.mockReturnValue({
481
- dataPoints: [xy(0, 0), xy(1, 1)],
482
- // enableCurve is undefined
483
- });
484
- const { container } = renderComponent();
485
- expect(container.firstChild).toBeInTheDocument();
486
- });
487
- });
488
- });