@pie-lib/graphing-solution-set 4.1.0-beta.8 → 5.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 (262) 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/tool-menu.d.ts +21 -0
  75. package/dist/tool-menu.js +188 -0
  76. package/dist/tools/index.d.ts +17 -0
  77. package/dist/tools/index.js +12 -0
  78. package/dist/tools/line/component.d.ts +113 -0
  79. package/dist/tools/line/component.js +58 -0
  80. package/dist/tools/line/index.d.ts +13 -0
  81. package/dist/tools/line/index.js +6 -0
  82. package/dist/tools/polygon/component.d.ts +117 -0
  83. package/dist/tools/polygon/component.js +194 -0
  84. package/dist/tools/polygon/index.d.ts +19 -0
  85. package/dist/tools/polygon/index.js +55 -0
  86. package/dist/tools/polygon/polygon.d.ts +122 -0
  87. package/dist/tools/polygon/polygon.js +62 -0
  88. package/dist/tools/shared/arrow-head.d.ts +43 -0
  89. package/dist/tools/shared/arrow-head.js +37 -0
  90. package/dist/tools/shared/line/index.d.ts +240 -0
  91. package/dist/tools/shared/line/index.js +320 -0
  92. package/dist/tools/shared/point/arrow-point.d.ts +57 -0
  93. package/dist/tools/shared/point/arrow-point.js +47 -0
  94. package/dist/tools/shared/point/arrow.d.ts +46 -0
  95. package/dist/tools/shared/point/arrow.js +36 -0
  96. package/dist/tools/shared/point/base-point.d.ts +50 -0
  97. package/dist/tools/shared/point/base-point.js +88 -0
  98. package/dist/tools/shared/point/index.d.ts +217 -0
  99. package/dist/tools/shared/point/index.js +51 -0
  100. package/dist/tools/shared/styles.d.ts +24 -0
  101. package/dist/tools/shared/styles.js +17 -0
  102. package/dist/tools/shared/types.d.ts +15 -0
  103. package/dist/tools/shared/types.js +10 -0
  104. package/dist/undo-redo.d.ts +20 -0
  105. package/dist/undo-redo.js +33 -0
  106. package/dist/use-debounce.d.ts +9 -0
  107. package/dist/use-debounce.js +13 -0
  108. package/dist/utils.d.ts +58 -0
  109. package/dist/utils.js +72 -0
  110. package/package.json +52 -42
  111. package/CHANGELOG.json +0 -1
  112. package/CHANGELOG.md +0 -449
  113. package/lib/axis/arrow.js +0 -79
  114. package/lib/axis/arrow.js.map +0 -1
  115. package/lib/axis/axes.js +0 -327
  116. package/lib/axis/axes.js.map +0 -1
  117. package/lib/axis/index.js +0 -21
  118. package/lib/axis/index.js.map +0 -1
  119. package/lib/bg.js +0 -114
  120. package/lib/bg.js.map +0 -1
  121. package/lib/container/actions.js +0 -18
  122. package/lib/container/actions.js.map +0 -1
  123. package/lib/container/index.js +0 -129
  124. package/lib/container/index.js.map +0 -1
  125. package/lib/container/marks.js +0 -22
  126. package/lib/container/marks.js.map +0 -1
  127. package/lib/container/middleware.js +0 -19
  128. package/lib/container/middleware.js.map +0 -1
  129. package/lib/container/reducer.js +0 -18
  130. package/lib/container/reducer.js.map +0 -1
  131. package/lib/coordinates-label.js +0 -77
  132. package/lib/coordinates-label.js.map +0 -1
  133. package/lib/graph-with-controls.js +0 -297
  134. package/lib/graph-with-controls.js.map +0 -1
  135. package/lib/graph.js +0 -353
  136. package/lib/graph.js.map +0 -1
  137. package/lib/grid-setup.js +0 -414
  138. package/lib/grid-setup.js.map +0 -1
  139. package/lib/grid.js +0 -131
  140. package/lib/grid.js.map +0 -1
  141. package/lib/index.js +0 -40
  142. package/lib/index.js.map +0 -1
  143. package/lib/labels.js +0 -199
  144. package/lib/labels.js.map +0 -1
  145. package/lib/mark-label.js +0 -159
  146. package/lib/mark-label.js.map +0 -1
  147. package/lib/toggle-bar.js +0 -248
  148. package/lib/toggle-bar.js.map +0 -1
  149. package/lib/tool-menu.js +0 -218
  150. package/lib/tool-menu.js.map +0 -1
  151. package/lib/tools/index.js +0 -24
  152. package/lib/tools/index.js.map +0 -1
  153. package/lib/tools/line/component.js +0 -92
  154. package/lib/tools/line/component.js.map +0 -1
  155. package/lib/tools/line/index.js +0 -11
  156. package/lib/tools/line/index.js.map +0 -1
  157. package/lib/tools/polygon/component.js +0 -358
  158. package/lib/tools/polygon/component.js.map +0 -1
  159. package/lib/tools/polygon/index.js +0 -89
  160. package/lib/tools/polygon/index.js.map +0 -1
  161. package/lib/tools/polygon/line.js +0 -114
  162. package/lib/tools/polygon/line.js.map +0 -1
  163. package/lib/tools/polygon/polygon.js +0 -128
  164. package/lib/tools/polygon/polygon.js.map +0 -1
  165. package/lib/tools/shared/arrow-head.js +0 -62
  166. package/lib/tools/shared/arrow-head.js.map +0 -1
  167. package/lib/tools/shared/line/index.js +0 -539
  168. package/lib/tools/shared/line/index.js.map +0 -1
  169. package/lib/tools/shared/line/line-path.js +0 -121
  170. package/lib/tools/shared/line/line-path.js.map +0 -1
  171. package/lib/tools/shared/line/with-root-edge.js +0 -121
  172. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  173. package/lib/tools/shared/point/arrow-point.js +0 -86
  174. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  175. package/lib/tools/shared/point/arrow.js +0 -70
  176. package/lib/tools/shared/point/arrow.js.map +0 -1
  177. package/lib/tools/shared/point/base-point.js +0 -137
  178. package/lib/tools/shared/point/base-point.js.map +0 -1
  179. package/lib/tools/shared/point/index.js +0 -80
  180. package/lib/tools/shared/point/index.js.map +0 -1
  181. package/lib/tools/shared/styles.js +0 -26
  182. package/lib/tools/shared/styles.js.map +0 -1
  183. package/lib/tools/shared/types.js +0 -15
  184. package/lib/tools/shared/types.js.map +0 -1
  185. package/lib/undo-redo.js +0 -67
  186. package/lib/undo-redo.js.map +0 -1
  187. package/lib/use-debounce.js +0 -25
  188. package/lib/use-debounce.js.map +0 -1
  189. package/lib/utils.js +0 -235
  190. package/lib/utils.js.map +0 -1
  191. package/src/__tests__/bg.test.jsx +0 -250
  192. package/src/__tests__/coordinates-label.test.jsx +0 -243
  193. package/src/__tests__/graph-with-controls.test.jsx +0 -184
  194. package/src/__tests__/graph.test.jsx +0 -93
  195. package/src/__tests__/grid-setup.test.jsx +0 -645
  196. package/src/__tests__/grid.test.jsx +0 -23
  197. package/src/__tests__/labels.test.jsx +0 -41
  198. package/src/__tests__/mark-label.test.jsx +0 -66
  199. package/src/__tests__/toggle-bar.test.jsx +0 -106
  200. package/src/__tests__/tool-menu.test.jsx +0 -453
  201. package/src/__tests__/undo-redo.test.jsx +0 -26
  202. package/src/__tests__/use-debounce.test.js +0 -21
  203. package/src/__tests__/utils.js +0 -41
  204. package/src/__tests__/utils.test.js +0 -105
  205. package/src/axis/__tests__/arrow.test.jsx +0 -43
  206. package/src/axis/__tests__/axes.test.jsx +0 -182
  207. package/src/axis/arrow.jsx +0 -57
  208. package/src/axis/axes.jsx +0 -284
  209. package/src/axis/index.js +0 -3
  210. package/src/bg.jsx +0 -96
  211. package/src/container/__tests__/actions.test.js +0 -105
  212. package/src/container/__tests__/index.test.jsx +0 -227
  213. package/src/container/__tests__/marks.test.js +0 -172
  214. package/src/container/__tests__/middleware.test.js +0 -235
  215. package/src/container/__tests__/reducer.test.js +0 -324
  216. package/src/container/actions.js +0 -8
  217. package/src/container/index.jsx +0 -93
  218. package/src/container/marks.js +0 -14
  219. package/src/container/middleware.js +0 -7
  220. package/src/container/reducer.js +0 -5
  221. package/src/coordinates-label.jsx +0 -62
  222. package/src/graph-with-controls.jsx +0 -242
  223. package/src/graph.jsx +0 -333
  224. package/src/grid-setup.jsx +0 -432
  225. package/src/grid.jsx +0 -133
  226. package/src/index.js +0 -7
  227. package/src/labels.jsx +0 -173
  228. package/src/mark-label.jsx +0 -125
  229. package/src/toggle-bar.jsx +0 -221
  230. package/src/tool-menu.jsx +0 -235
  231. package/src/tools/index.js +0 -8
  232. package/src/tools/line/__tests__/component.test.jsx +0 -37
  233. package/src/tools/line/component.jsx +0 -77
  234. package/src/tools/line/index.js +0 -4
  235. package/src/tools/polygon/__tests__/component.test.jsx +0 -487
  236. package/src/tools/polygon/__tests__/index.test.js +0 -65
  237. package/src/tools/polygon/__tests__/line.test.jsx +0 -23
  238. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -44
  239. package/src/tools/polygon/component.jsx +0 -324
  240. package/src/tools/polygon/index.js +0 -52
  241. package/src/tools/polygon/line.jsx +0 -80
  242. package/src/tools/polygon/polygon.jsx +0 -93
  243. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -33
  244. package/src/tools/shared/arrow-head.jsx +0 -46
  245. package/src/tools/shared/line/__tests__/index.test.jsx +0 -553
  246. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -56
  247. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -488
  248. package/src/tools/shared/line/index.jsx +0 -471
  249. package/src/tools/shared/line/line-path.jsx +0 -85
  250. package/src/tools/shared/line/with-root-edge.jsx +0 -97
  251. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  252. package/src/tools/shared/point/__tests__/arrow.test.jsx +0 -469
  253. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  254. package/src/tools/shared/point/arrow-point.jsx +0 -60
  255. package/src/tools/shared/point/arrow.jsx +0 -40
  256. package/src/tools/shared/point/base-point.jsx +0 -113
  257. package/src/tools/shared/point/index.jsx +0 -58
  258. package/src/tools/shared/styles.js +0 -20
  259. package/src/tools/shared/types.js +0 -8
  260. package/src/undo-redo.jsx +0 -37
  261. package/src/use-debounce.js +0 -13
  262. 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
- });