@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,487 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { graphProps, xy } from '../../../__tests__/utils';
4
-
5
- import { buildLines, RawBaseComponent, swap } from '../component';
6
-
7
- const xyLabel = (x, y, index, label) => ({
8
- ...xy(x, y, index),
9
- label,
10
- });
11
-
12
- // Pure function tests - keep as-is
13
- describe('buildLines', () => {
14
- const defaultPoints = [xy(0, 0), xy(1, 1), xy(1, 0)];
15
-
16
- const assertBuildLines = (points, closed, expected) => {
17
- it(`builds points and lines for ${points} = ${expected}`, () => {
18
- const result = buildLines(points);
19
- expect(result).toMatchObject([
20
- { from: xy(0, 0, 0), to: xy(1, 1, 1) },
21
- { from: xy(1, 1, 1), to: xy(1, 0, 2) },
22
- ]);
23
- });
24
- };
25
-
26
- assertBuildLines(defaultPoints, true, []);
27
- });
28
-
29
- describe('swap', () => {
30
- it('swaps pairs', () => {
31
- const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(0, 0, 0), xy(3, 3, 0));
32
- expect(result).toEqual([xy(3, 3, 0), xy(1, 1, 1), xy(2, 2, 2)]);
33
- });
34
-
35
- it('swaps first element', () => {
36
- const result = swap([xy(0, 0, 0), xy(1, 1, 1)], xy(0, 0, 0), xy(5, 5, 0));
37
- expect(result).toEqual([xy(5, 5, 0), xy(1, 1, 1)]);
38
- });
39
-
40
- it('swaps last element', () => {
41
- const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(2, 2, 2), xy(3, 3, 2));
42
- expect(result).toEqual([xy(0, 0, 0), xy(1, 1, 1), xy(3, 3, 2)]);
43
- });
44
-
45
- it('swaps middle element', () => {
46
- const result = swap([xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)], xy(1, 1, 1), xy(3, 3, 1));
47
- expect(result).toEqual([xy(0, 0, 0), xy(3, 3, 1), xy(2, 2, 2)]);
48
- });
49
- });
50
-
51
- // Note: Instance method tests have been removed. Component behavior should be tested
52
- // through user interactions and integration tests.
53
- describe('RawBaseComponent', () => {
54
- let onChange;
55
- let onChangeProps;
56
- let onClosePolygon;
57
-
58
- beforeEach(() => {
59
- onChange = jest.fn();
60
- onChangeProps = jest.fn();
61
- onClosePolygon = jest.fn();
62
- });
63
-
64
- const renderComponent = (extras) => {
65
- const defaults = {
66
- className: 'className',
67
- onChange,
68
- onChangeProps,
69
- onClosePolygon,
70
- graphProps: graphProps(),
71
- points: [],
72
- };
73
- const props = { ...defaults, ...extras };
74
- return render(<RawBaseComponent {...props} />);
75
- };
76
-
77
- // used to test items that have labels attached to points
78
- const labelNode = document.createElement('foreignObject');
79
- const points = [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B'), xyLabel(0, 2, 2, 'C')];
80
- const renderWithLabels = (extras) =>
81
- renderComponent({
82
- labelNode: labelNode,
83
- points: points,
84
- ...extras,
85
- });
86
-
87
- describe('rendering', () => {
88
- it('renders without crashing', () => {
89
- const { container } = renderComponent();
90
- expect(container.firstChild).toBeInTheDocument();
91
- });
92
-
93
- it('renders with labels', () => {
94
- const { container } = renderWithLabels();
95
- expect(container.firstChild).toBeInTheDocument();
96
- });
97
-
98
- it('renders with multiple points', () => {
99
- const { container } = renderComponent({
100
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
101
- });
102
- expect(container.firstChild).toBeInTheDocument();
103
- });
104
-
105
- it('renders with closed polygon', () => {
106
- const { container } = renderComponent({
107
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
108
- closed: true,
109
- });
110
- expect(container.firstChild).toBeInTheDocument();
111
- });
112
-
113
- it('renders with single point', () => {
114
- const { container } = renderComponent({
115
- points: [xy(0, 0, 0)],
116
- });
117
- expect(container.firstChild).toBeInTheDocument();
118
- });
119
-
120
- it('renders with two points', () => {
121
- const { container } = renderComponent({
122
- points: [xy(0, 0, 0), xy(1, 1, 1)],
123
- });
124
- expect(container.firstChild).toBeInTheDocument();
125
- });
126
-
127
- it('renders empty polygon', () => {
128
- const { container } = renderComponent({ points: [] });
129
- expect(container.firstChild).toBeInTheDocument();
130
- });
131
-
132
- it('renders with negative coordinates', () => {
133
- const { container } = renderComponent({
134
- points: [xy(-5, -5, 0), xy(-1, -1, 1), xy(-3, -2, 2)],
135
- });
136
- expect(container.firstChild).toBeInTheDocument();
137
- });
138
-
139
- it('renders with decimal coordinates', () => {
140
- const { container } = renderComponent({
141
- points: [xy(0.5, 0.5, 0), xy(1.5, 1.5, 1), xy(2.5, 0.5, 2)],
142
- });
143
- expect(container.firstChild).toBeInTheDocument();
144
- });
145
-
146
- it('renders with large coordinate values', () => {
147
- const { container } = renderComponent({
148
- points: [xy(100, 100, 0), xy(200, 200, 1), xy(150, 250, 2)],
149
- });
150
- expect(container.firstChild).toBeInTheDocument();
151
- });
152
- });
153
-
154
- describe('states', () => {
155
- it('renders in disabled state', () => {
156
- const { container } = renderComponent({
157
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
158
- disabled: true,
159
- });
160
- expect(container.firstChild).toBeInTheDocument();
161
- });
162
-
163
- it('renders in enabled state', () => {
164
- const { container } = renderComponent({
165
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
166
- disabled: false,
167
- });
168
- expect(container.firstChild).toBeInTheDocument();
169
- });
170
-
171
- it('renders with correctness correct', () => {
172
- const { container } = renderComponent({
173
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
174
- correctness: 'correct',
175
- });
176
- expect(container.firstChild).toBeInTheDocument();
177
- });
178
-
179
- it('renders with correctness incorrect', () => {
180
- const { container } = renderComponent({
181
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
182
- correctness: 'incorrect',
183
- });
184
- expect(container.firstChild).toBeInTheDocument();
185
- });
186
-
187
- it('renders with building state', () => {
188
- const { container } = renderComponent({
189
- points: [xy(0, 0, 0), xy(1, 1, 1)],
190
- building: true,
191
- });
192
- expect(container.firstChild).toBeInTheDocument();
193
- });
194
-
195
- it('renders with fill property', () => {
196
- const { container } = renderComponent({
197
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
198
- fill: '#ff0000',
199
- });
200
- expect(container.firstChild).toBeInTheDocument();
201
- });
202
- });
203
-
204
- describe('labels', () => {
205
- it('renders with all points labeled', () => {
206
- const { container } = renderWithLabels();
207
- expect(container.firstChild).toBeInTheDocument();
208
- });
209
-
210
- it('renders with partial labels', () => {
211
- const partialLabels = [xyLabel(0, 0, 0, 'A'), xy(2, 2, 1), xyLabel(0, 2, 2, 'C')];
212
- const { container } = renderComponent({
213
- labelNode,
214
- points: partialLabels,
215
- });
216
- expect(container.firstChild).toBeInTheDocument();
217
- });
218
-
219
- it('renders with empty string labels', () => {
220
- const emptyLabels = [xyLabel(0, 0, 0, ''), xyLabel(2, 2, 1, ''), xyLabel(0, 2, 2, '')];
221
- const { container } = renderComponent({
222
- labelNode,
223
- points: emptyLabels,
224
- });
225
- expect(container.firstChild).toBeInTheDocument();
226
- });
227
-
228
- it('renders without labelNode', () => {
229
- const { container } = renderComponent({
230
- points: [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B')],
231
- });
232
- expect(container.firstChild).toBeInTheDocument();
233
- });
234
-
235
- it('renders with labelModeEnabled', () => {
236
- const { container } = renderWithLabels({ labelModeEnabled: true });
237
- expect(container.firstChild).toBeInTheDocument();
238
- });
239
-
240
- it('renders with labelModeEnabled disabled', () => {
241
- const { container } = renderWithLabels({ labelModeEnabled: false });
242
- expect(container.firstChild).toBeInTheDocument();
243
- });
244
-
245
- it('renders with long labels', () => {
246
- const longLabels = [
247
- xyLabel(0, 0, 0, 'Very Long Label Text'),
248
- xyLabel(2, 2, 1, 'Another Long Label'),
249
- xyLabel(0, 2, 2, 'Yet Another Long Label'),
250
- ];
251
- const { container } = renderComponent({
252
- labelNode,
253
- points: longLabels,
254
- });
255
- expect(container.firstChild).toBeInTheDocument();
256
- });
257
- });
258
-
259
- describe('polygon shapes', () => {
260
- it('renders triangle', () => {
261
- const { container } = renderComponent({
262
- points: [xy(0, 0, 0), xy(2, 0, 1), xy(1, 2, 2)],
263
- closed: true,
264
- });
265
- expect(container.firstChild).toBeInTheDocument();
266
- });
267
-
268
- it('renders square', () => {
269
- const { container } = renderComponent({
270
- points: [xy(0, 0, 0), xy(2, 0, 1), xy(2, 2, 2), xy(0, 2, 3)],
271
- closed: true,
272
- });
273
- expect(container.firstChild).toBeInTheDocument();
274
- });
275
-
276
- it('renders pentagon', () => {
277
- const { container } = renderComponent({
278
- points: [xy(1, 0, 0), xy(2, 1, 1), xy(1.5, 2.5, 2), xy(0.5, 2.5, 3), xy(0, 1, 4)],
279
- closed: true,
280
- });
281
- expect(container.firstChild).toBeInTheDocument();
282
- });
283
-
284
- it('renders irregular polygon', () => {
285
- const { container } = renderComponent({
286
- points: [xy(0, 0, 0), xy(3, 1, 1), xy(2, 4, 2), xy(-1, 3, 3)],
287
- closed: true,
288
- });
289
- expect(container.firstChild).toBeInTheDocument();
290
- });
291
- });
292
-
293
- describe('props', () => {
294
- it('passes onChange callback', () => {
295
- const customOnChange = jest.fn();
296
- const { container } = renderComponent({
297
- onChange: customOnChange,
298
- points: [xy(0, 0, 0), xy(1, 1, 1)],
299
- });
300
- expect(container.firstChild).toBeInTheDocument();
301
- });
302
-
303
- it('passes onChangeProps callback', () => {
304
- const customOnChangeProps = jest.fn();
305
- const { container } = renderComponent({
306
- onChangeProps: customOnChangeProps,
307
- points: [xy(0, 0, 0), xy(1, 1, 1)],
308
- });
309
- expect(container.firstChild).toBeInTheDocument();
310
- });
311
-
312
- it('passes onClick callback', () => {
313
- const onClick = jest.fn();
314
- const { container } = renderComponent({
315
- onClick,
316
- points: [xy(0, 0, 0), xy(1, 1, 1)],
317
- });
318
- expect(container.firstChild).toBeInTheDocument();
319
- });
320
-
321
- it('passes onClosePolygon callback', () => {
322
- const customOnClosePolygon = jest.fn();
323
- const { container } = renderComponent({
324
- onClosePolygon: customOnClosePolygon,
325
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
326
- });
327
- expect(container.firstChild).toBeInTheDocument();
328
- });
329
-
330
- it('passes onDragStart callback', () => {
331
- const onDragStart = jest.fn();
332
- const { container } = renderComponent({
333
- onDragStart,
334
- points: [xy(0, 0, 0), xy(1, 1, 1)],
335
- });
336
- expect(container.firstChild).toBeInTheDocument();
337
- });
338
-
339
- it('passes onDragStop callback', () => {
340
- const onDragStop = jest.fn();
341
- const { container } = renderComponent({
342
- onDragStop,
343
- points: [xy(0, 0, 0), xy(1, 1, 1)],
344
- });
345
- expect(container.firstChild).toBeInTheDocument();
346
- });
347
-
348
- it('passes coordinatesOnHover', () => {
349
- const { container } = renderComponent({
350
- coordinatesOnHover: true,
351
- points: [xy(0, 0, 0), xy(1, 1, 1)],
352
- });
353
- expect(container.firstChild).toBeInTheDocument();
354
- });
355
-
356
- it('passes graphProps', () => {
357
- const customGraphProps = graphProps(0, 10, 0, 10);
358
- const { container } = renderComponent({
359
- graphProps: customGraphProps,
360
- points: [xy(5, 5, 0), xy(7, 7, 1)],
361
- });
362
- expect(container.firstChild).toBeInTheDocument();
363
- });
364
-
365
- it('passes gssLineData', () => {
366
- const gssLineData = { selectedTool: 'solutionSet' };
367
- const { container } = renderComponent({
368
- gssLineData,
369
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 0, 2)],
370
- });
371
- expect(container.firstChild).toBeInTheDocument();
372
- });
373
- });
374
-
375
- describe('edge cases', () => {
376
- it('handles points with same coordinates', () => {
377
- const { container } = renderComponent({
378
- points: [xy(1, 1, 0), xy(1, 1, 1), xy(1, 1, 2)],
379
- });
380
- expect(container.firstChild).toBeInTheDocument();
381
- });
382
-
383
- it('handles collinear points', () => {
384
- const { container } = renderComponent({
385
- points: [xy(0, 0, 0), xy(1, 1, 1), xy(2, 2, 2)],
386
- });
387
- expect(container.firstChild).toBeInTheDocument();
388
- });
389
-
390
- it('handles very close points', () => {
391
- const { container } = renderComponent({
392
- points: [xy(1, 1, 0), xy(1.001, 1.001, 1), xy(1.002, 1.002, 2)],
393
- });
394
- expect(container.firstChild).toBeInTheDocument();
395
- });
396
-
397
- it('handles mixed positive and negative coordinates', () => {
398
- const { container } = renderComponent({
399
- points: [xy(-5, 5, 0), xy(5, 5, 1), xy(5, -5, 2), xy(-5, -5, 3)],
400
- closed: true,
401
- });
402
- expect(container.firstChild).toBeInTheDocument();
403
- });
404
-
405
- it('handles points without explicit index', () => {
406
- const { container } = renderComponent({
407
- points: [
408
- { x: 0, y: 0 },
409
- { x: 1, y: 1 },
410
- { x: 2, y: 0 },
411
- ],
412
- });
413
- expect(container.firstChild).toBeInTheDocument();
414
- });
415
-
416
- it('handles undefined properties', () => {
417
- const { container } = renderComponent({
418
- points: [xy(0, 0, 0), xy(1, 1, 1)],
419
- disabled: undefined,
420
- correctness: undefined,
421
- building: undefined,
422
- fill: undefined,
423
- });
424
- expect(container.firstChild).toBeInTheDocument();
425
- });
426
- });
427
-
428
- describe('integration', () => {
429
- it('renders complete closed polygon with all features', () => {
430
- const { container } = renderComponent({
431
- points: points,
432
- closed: true,
433
- labelNode,
434
- labelModeEnabled: true,
435
- coordinatesOnHover: true,
436
- correctness: 'correct',
437
- disabled: false,
438
- fill: '#00ff00',
439
- gssLineData: { selectedTool: 'solutionSet' },
440
- onChange: jest.fn(),
441
- onChangeProps: jest.fn(),
442
- onClosePolygon: jest.fn(),
443
- onClick: jest.fn(),
444
- onDragStart: jest.fn(),
445
- onDragStop: jest.fn(),
446
- });
447
- expect(container.firstChild).toBeInTheDocument();
448
- });
449
-
450
- it('renders building polygon', () => {
451
- const { container } = renderComponent({
452
- points: [xy(0, 0, 0), xy(1, 1, 1)],
453
- building: true,
454
- closed: false,
455
- });
456
- expect(container.firstChild).toBeInTheDocument();
457
- });
458
-
459
- it('renders disabled polygon with labels', () => {
460
- const { container } = renderComponent({
461
- points: points,
462
- labelNode,
463
- disabled: true,
464
- closed: true,
465
- });
466
- expect(container.firstChild).toBeInTheDocument();
467
- });
468
-
469
- it('renders polygon in solution set mode', () => {
470
- const { container } = renderComponent({
471
- points: points,
472
- closed: true,
473
- gssLineData: { selectedTool: 'solutionSet' },
474
- });
475
- expect(container.firstChild).toBeInTheDocument();
476
- });
477
-
478
- it('renders polygon with incorrect correctness', () => {
479
- const { container } = renderComponent({
480
- points: points,
481
- closed: true,
482
- correctness: 'incorrect',
483
- });
484
- expect(container.firstChild).toBeInTheDocument();
485
- });
486
- });
487
- });
@@ -1,65 +0,0 @@
1
- import { addPointToArray, tool } from '../index';
2
-
3
- const xy = (x, y) => ({ x, y });
4
-
5
- describe('polygon', () => {
6
- describe('addPointToArray', () => {
7
- const assertAddPoint = (point, arr, expected) => {
8
- it(`returns ${expected} when adding ${point} to ${arr}`, () => {
9
- const result = addPointToArray(point, arr);
10
- expect(result).toEqual(expected);
11
- });
12
- };
13
- assertAddPoint(xy(0, 0), [], { closed: false, points: [xy(0, 0)] });
14
- assertAddPoint(xy(0, 0), [xy(0, 0)], { closed: false, points: [xy(0, 0)] });
15
- assertAddPoint(xy(1, 1), [xy(0, 0)], {
16
- closed: false,
17
- points: [xy(0, 0), xy(1, 1)],
18
- });
19
- assertAddPoint(xy(1, 1), [xy(0, 0)], {
20
- closed: false,
21
- points: [xy(0, 0), xy(1, 1)],
22
- });
23
- });
24
- });
25
-
26
- describe('tool', () => {
27
- let t;
28
- beforeEach(() => {
29
- t = tool();
30
- });
31
-
32
- it('creates polygon type', () => {
33
- expect(t.type).toEqual('polygon');
34
- });
35
-
36
- describe('complete', () => {
37
- it('closes polygon', () => {
38
- expect(t.complete()).toEqual({ building: false, closed: true });
39
- });
40
- });
41
-
42
- describe('addPoint', () => {
43
- it('creates new point', () => {
44
- const mark = t.addPoint({ x: 0, y: 0 });
45
- expect(mark).toEqual({
46
- type: 'polygon',
47
- points: [{ x: 0, y: 0 }],
48
- closed: false,
49
- building: true,
50
- });
51
- });
52
-
53
- it('adds the point', () => {
54
- const mark = t.addPoint({ x: 0, y: 0 }, { points: [{ x: 1, y: 1 }] });
55
- expect(mark).toEqual({
56
- building: true,
57
- closed: false,
58
- points: [
59
- { x: 1, y: 1 },
60
- { x: 0, y: 0 },
61
- ],
62
- });
63
- });
64
- });
65
- });
@@ -1,23 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { Line } from '../line';
4
- import { graphProps } from '../../../__tests__/utils';
5
-
6
- describe('Line', () => {
7
- let onChange = jest.fn();
8
- const renderComponent = (extras) => {
9
- const defaults = {
10
- classes: {},
11
- className: 'className',
12
- graphProps: graphProps(),
13
- };
14
- const props = { ...defaults, ...extras };
15
- return render(<Line {...props} />);
16
- };
17
- describe('rendering', () => {
18
- it('renders without crashing', () => {
19
- const { container } = renderComponent();
20
- expect(container.firstChild).toBeInTheDocument();
21
- });
22
- });
23
- });
@@ -1,44 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { getPointString, Polygon } from '../polygon';
4
- import { graphProps } from '../../../__tests__/utils';
5
-
6
- const xy = (x, y) => ({ x, y });
7
-
8
- describe('Polygon', () => {
9
- const renderComponent = (extras) => {
10
- const defaults = {
11
- classes: {},
12
- className: 'className',
13
- graphProps: graphProps(),
14
- closed: false,
15
- };
16
- const props = { ...defaults, ...extras };
17
- return render(<Polygon {...props} />);
18
- };
19
-
20
- describe('rendering', () => {
21
- it('renders without crashing', () => {
22
- const { container } = renderComponent({ points: [{ x: 1, y: 1 }] });
23
- expect(container.firstChild).toBeInTheDocument();
24
- });
25
- });
26
- });
27
-
28
- // Pure function tests - keep as-is
29
- describe('getPointString', () => {
30
- const assertString = (arr, expected) => {
31
- it('creates: ', () => {
32
- const result = getPointString(arr, {
33
- x: jest.fn((n) => n),
34
- y: jest.fn((n) => n),
35
- });
36
-
37
- expect(result).toEqual(expected);
38
- });
39
- };
40
-
41
- assertString([xy(1, 1)], '1,1');
42
- assertString([xy(1, 1), xy(2, 1)], '1,1 2,1');
43
- assertString([xy(1, 1), xy(2, 1), xy(4, 4)], '1,1 2,1 4,4');
44
- });