@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,553 +0,0 @@
1
- import { lineBase, lineTool, lineToolComponent } from '../index';
2
- import { utils } from '@pie-lib/plot';
3
- import { render } from '@pie-lib/test-utils';
4
- import React from 'react';
5
- import { graphProps as getGraphProps } from '../../../../__tests__/utils';
6
-
7
- const { xy } = utils;
8
- const xyLabel = (x, y, label) => ({ x, y, label });
9
-
10
- describe('lineTool', () => {
11
- describe('addPoint', () => {
12
- let toolbar;
13
-
14
- beforeEach(() => {
15
- toolbar = lineTool('lineType', () => <div />)();
16
- });
17
-
18
- it('returns a building mark when no existing mark', () => {
19
- const result = toolbar.addPoint(xy(1, 1));
20
- expect(result).toEqual({
21
- type: 'lineType',
22
- building: true,
23
- from: xy(1, 1),
24
- });
25
- });
26
-
27
- it('returns a complete mark when adding second point', () => {
28
- const result = toolbar.addPoint(xy(1, 1), { from: xy(0, 0) });
29
- expect(result).toEqual({
30
- building: false,
31
- from: xy(0, 0),
32
- to: xy(1, 1),
33
- });
34
- });
35
-
36
- it('returns same mark if point equals existing from point', () => {
37
- const existingMark = { from: xy(1, 1), building: true };
38
- const result = toolbar.addPoint(xy(1, 1), existingMark);
39
- expect(result).toEqual(existingMark);
40
- });
41
-
42
- it('handles adding point with root property', () => {
43
- const existingMark = { root: xy(1, 1), building: true };
44
- const result = toolbar.addPoint(xy(1, 1), existingMark);
45
- expect(result).toEqual(existingMark);
46
- });
47
-
48
- it('creates different types correctly', () => {
49
- const lineA = lineTool('lineA', () => <div />)();
50
- const lineB = lineTool('lineB', () => <div />)();
51
-
52
- const resultA = lineA.addPoint(xy(1, 1));
53
- const resultB = lineB.addPoint(xy(1, 1));
54
-
55
- expect(resultA.type).toBe('lineA');
56
- expect(resultB.type).toBe('lineB');
57
- });
58
-
59
- it('preserves building state correctly', () => {
60
- const building = toolbar.addPoint(xy(1, 1));
61
- expect(building.building).toBe(true);
62
-
63
- const complete = toolbar.addPoint(xy(2, 2), building);
64
- expect(complete.building).toBe(false);
65
- });
66
- });
67
-
68
- describe('Component property', () => {
69
- it('stores the provided Component', () => {
70
- const TestComp = () => <div>Test</div>;
71
- const tool = lineTool('test', TestComp)();
72
- expect(tool.Component).toBe(TestComp);
73
- });
74
-
75
- it('stores the correct type', () => {
76
- const tool = lineTool('customType', () => <div />)();
77
- expect(tool.type).toBe('customType');
78
- });
79
- });
80
- });
81
-
82
- describe('lineToolComponent', () => {
83
- let Comp;
84
- let mark;
85
- let onChange;
86
-
87
- beforeEach(() => {
88
- onChange = jest.fn();
89
- Comp = lineToolComponent(() => <text data-testid="line-component" />);
90
- mark = { from: xy(0, 0), to: xy(1, 1), type: 'line' };
91
- });
92
-
93
- const renderComponent = (extras) => {
94
- const defaults = {
95
- mark,
96
- onChange,
97
- graphProps: getGraphProps(),
98
- };
99
- const props = { ...defaults, ...extras };
100
- return render(<Comp {...props} />);
101
- };
102
-
103
- describe('rendering', () => {
104
- it('renders without crashing', () => {
105
- const { container } = renderComponent();
106
- expect(container.firstChild).toBeInTheDocument();
107
- });
108
-
109
- it('renders with building mark', () => {
110
- const buildingMark = { from: xy(0, 0), building: true, type: 'line' };
111
- const { container } = renderComponent({ mark: buildingMark });
112
- expect(container.firstChild).toBeInTheDocument();
113
- });
114
-
115
- it('renders with background mark', () => {
116
- const bgMark = { from: xy(0, 0), to: xy(1, 1), isBackground: true, type: 'line' };
117
- const { container } = renderComponent({ mark: bgMark });
118
- expect(container.firstChild).toBeInTheDocument();
119
- });
120
-
121
- it('renders with disabled mark', () => {
122
- const disabledMark = { from: xy(0, 0), to: xy(1, 1), disabled: true, type: 'line' };
123
- const { container } = renderComponent({ mark: disabledMark });
124
- expect(container.firstChild).toBeInTheDocument();
125
- });
126
-
127
- it('renders with correctness states', () => {
128
- const correctMark = { from: xy(0, 0), to: xy(1, 1), correctness: 'correct', type: 'line' };
129
- const { container } = renderComponent({ mark: correctMark });
130
- expect(container.firstChild).toBeInTheDocument();
131
- });
132
-
133
- it('renders with middle point', () => {
134
- const markWithMiddle = { from: xy(0, 0), to: xy(1, 1), middle: xy(0.5, 0.5), type: 'line' };
135
- const { container } = renderComponent({ mark: markWithMiddle });
136
- expect(container.firstChild).toBeInTheDocument();
137
- });
138
-
139
- it('renders with fill color', () => {
140
- const coloredMark = { from: xy(0, 0), to: xy(1, 1), fill: '#ff0000', type: 'line' };
141
- const { container } = renderComponent({ mark: coloredMark });
142
- expect(container.firstChild).toBeInTheDocument();
143
- });
144
-
145
- it('renders with gssLineData', () => {
146
- const gssLineData = { selectedTool: 'lineA' };
147
- const { container } = renderComponent({ gssLineData });
148
- expect(container.firstChild).toBeInTheDocument();
149
- });
150
-
151
- it('renders with labelNode', () => {
152
- const labelNode = document.createElement('foreignObject');
153
- const { container } = renderComponent({ labelNode });
154
- expect(container.firstChild).toBeInTheDocument();
155
- });
156
-
157
- it('renders with coordinatesOnHover enabled', () => {
158
- const { container } = renderComponent({ coordinatesOnHover: true });
159
- expect(container.firstChild).toBeInTheDocument();
160
- });
161
-
162
- it('renders with labelModeEnabled', () => {
163
- const { container } = renderComponent({ labelModeEnabled: true });
164
- expect(container.firstChild).toBeInTheDocument();
165
- });
166
- });
167
-
168
- describe('state management', () => {
169
- it('initializes with empty state', () => {
170
- const { container } = renderComponent();
171
- expect(container.firstChild).toBeInTheDocument();
172
- // State should be empty initially
173
- });
174
-
175
- it('handles mark updates through props', () => {
176
- const { rerender, container } = renderComponent();
177
- const updatedMark = { from: xy(1, 1), to: xy(2, 2), type: 'line' };
178
-
179
- rerender(<Comp mark={updatedMark} onChange={onChange} graphProps={getGraphProps()} />);
180
- expect(container.firstChild).toBeInTheDocument();
181
- });
182
- });
183
-
184
- describe('background mark handling', () => {
185
- it('disables from point when mark is background', () => {
186
- const bgMark = {
187
- from: xy(0, 0),
188
- to: xy(1, 1),
189
- isBackground: true,
190
- type: 'line',
191
- };
192
- const { container } = renderComponent({ mark: bgMark });
193
- expect(container.firstChild).toBeInTheDocument();
194
- // from.disabled should be true
195
- });
196
-
197
- it('disables to point when mark is background', () => {
198
- const bgMark = {
199
- from: xy(0, 0),
200
- to: xy(1, 1),
201
- isBackground: true,
202
- type: 'line',
203
- };
204
- const { container } = renderComponent({ mark: bgMark });
205
- expect(container.firstChild).toBeInTheDocument();
206
- // to.disabled should be true
207
- });
208
-
209
- it('disables middle point when mark is background', () => {
210
- const bgMark = {
211
- from: xy(0, 0),
212
- to: xy(1, 1),
213
- middle: xy(0.5, 0.5),
214
- isBackground: true,
215
- type: 'line',
216
- };
217
- const { container } = renderComponent({ mark: bgMark });
218
- expect(container.firstChild).toBeInTheDocument();
219
- // middle.disabled should be true
220
- });
221
- });
222
-
223
- describe('edge cases', () => {
224
- it('handles mark without to point', () => {
225
- const incompleteMark = { from: xy(0, 0), type: 'line' };
226
- const { container } = renderComponent({ mark: incompleteMark });
227
- expect(container.firstChild).toBeInTheDocument();
228
- });
229
-
230
- it('handles mark with only from point', () => {
231
- const singlePointMark = { from: xy(0, 0), building: true, type: 'line' };
232
- const { container } = renderComponent({ mark: singlePointMark });
233
- expect(container.firstChild).toBeInTheDocument();
234
- });
235
-
236
- it('handles different line types', () => {
237
- const parabola = { from: xy(0, 0), to: xy(1, 1), type: 'parabola' };
238
- const sine = { from: xy(0, 0), to: xy(1, 1), type: 'sine' };
239
- const absolute = { from: xy(0, 0), to: xy(1, 1), type: 'absolute' };
240
- const exponential = { from: xy(0, 0), to: xy(1, 1), type: 'exponential' };
241
-
242
- render(<Comp mark={parabola} onChange={onChange} graphProps={getGraphProps()} />);
243
- render(<Comp mark={sine} onChange={onChange} graphProps={getGraphProps()} />);
244
- render(<Comp mark={absolute} onChange={onChange} graphProps={getGraphProps()} />);
245
- render(<Comp mark={exponential} onChange={onChange} graphProps={getGraphProps()} />);
246
- });
247
- });
248
- });
249
-
250
- describe('lineBase', () => {
251
- let Comp;
252
- let onChange;
253
- let changeMarkProps;
254
- let onClick;
255
-
256
- beforeEach(() => {
257
- onChange = jest.fn();
258
- changeMarkProps = jest.fn();
259
- onClick = jest.fn();
260
- Comp = lineBase(() => <text data-testid="line-base" />);
261
- });
262
-
263
- const renderComponent = (extras) => {
264
- const defaults = {
265
- onChange,
266
- changeMarkProps,
267
- onClick,
268
- graphProps: getGraphProps(),
269
- from: xy(0, 0),
270
- to: xy(1, 1),
271
- };
272
- const props = { ...defaults, ...extras };
273
- return render(<Comp {...props} />);
274
- };
275
-
276
- const labelNode = document.createElement('foreignObject');
277
- const renderWithLabels = (extras = {}) =>
278
- renderComponent({
279
- ...extras,
280
- labelNode: labelNode,
281
- from: xyLabel(0, 0, 'A'),
282
- to: xyLabel(1, 1, 'B'),
283
- });
284
-
285
- describe('rendering', () => {
286
- it('renders without crashing', () => {
287
- const { container } = renderComponent();
288
- expect(container.firstChild).toBeInTheDocument();
289
- });
290
-
291
- it('renders with labels', () => {
292
- const { container } = renderWithLabels();
293
- expect(container.firstChild).toBeInTheDocument();
294
- });
295
-
296
- it('renders with middle point label', () => {
297
- const { container } = renderComponent({
298
- labelNode,
299
- middle: xyLabel(0.5, 0.5, 'M'),
300
- });
301
- expect(container.firstChild).toBeInTheDocument();
302
- });
303
-
304
- it('renders with only from label', () => {
305
- const { container } = renderComponent({
306
- labelNode,
307
- from: xyLabel(0, 0, 'Start'),
308
- to: xy(1, 1),
309
- });
310
- expect(container.firstChild).toBeInTheDocument();
311
- });
312
-
313
- it('renders with only to label', () => {
314
- const { container } = renderComponent({
315
- labelNode,
316
- from: xy(0, 0),
317
- to: xyLabel(1, 1, 'End'),
318
- });
319
- expect(container.firstChild).toBeInTheDocument();
320
- });
321
-
322
- it('renders with all three labels', () => {
323
- const { container } = renderComponent({
324
- labelNode,
325
- from: xyLabel(0, 0, 'A'),
326
- to: xyLabel(1, 1, 'B'),
327
- middle: xyLabel(0.5, 0.5, 'M'),
328
- });
329
- expect(container.firstChild).toBeInTheDocument();
330
- });
331
- });
332
-
333
- describe('gssLineData handling', () => {
334
- it('renders normally without gssLineData', () => {
335
- const { container } = renderComponent();
336
- expect(container.firstChild).toBeInTheDocument();
337
- });
338
-
339
- it('renders with gssLineData when solutionSet is selected', () => {
340
- const gssLineData = { selectedTool: 'solutionSet' };
341
- const { container } = renderComponent({ gssLineData });
342
- expect(container.firstChild).toBeInTheDocument();
343
- });
344
-
345
- it('renders with gssLineData when lineA is selected', () => {
346
- const gssLineData = { selectedTool: 'lineA' };
347
- const { container } = renderComponent({ gssLineData });
348
- expect(container.firstChild).toBeInTheDocument();
349
- });
350
-
351
- it('renders with gssLineData when lineB is selected', () => {
352
- const gssLineData = { selectedTool: 'lineB' };
353
- const { container } = renderComponent({ gssLineData });
354
- expect(container.firstChild).toBeInTheDocument();
355
- });
356
- });
357
-
358
- describe('disabled state', () => {
359
- it('renders when disabled', () => {
360
- const { container } = renderComponent({ disabled: true });
361
- expect(container.firstChild).toBeInTheDocument();
362
- });
363
-
364
- it('renders when not disabled', () => {
365
- const { container } = renderComponent({ disabled: false });
366
- expect(container.firstChild).toBeInTheDocument();
367
- });
368
- });
369
-
370
- describe('correctness states', () => {
371
- it('renders with correct state', () => {
372
- const { container } = renderComponent({ correctness: 'correct' });
373
- expect(container.firstChild).toBeInTheDocument();
374
- });
375
-
376
- it('renders with incorrect state', () => {
377
- const { container } = renderComponent({ correctness: 'incorrect' });
378
- expect(container.firstChild).toBeInTheDocument();
379
- });
380
-
381
- it('renders with missing state', () => {
382
- const { container } = renderComponent({ correctness: 'missing' });
383
- expect(container.firstChild).toBeInTheDocument();
384
- });
385
-
386
- it('renders without correctness', () => {
387
- const { container } = renderComponent({ correctness: undefined });
388
- expect(container.firstChild).toBeInTheDocument();
389
- });
390
- });
391
-
392
- describe('fill color', () => {
393
- it('renders with custom fill color', () => {
394
- const { container } = renderComponent({ fill: '#ff0000' });
395
- expect(container.firstChild).toBeInTheDocument();
396
- });
397
-
398
- it('renders without fill color', () => {
399
- const { container } = renderComponent({ fill: undefined });
400
- expect(container.firstChild).toBeInTheDocument();
401
- });
402
- });
403
-
404
- describe('coordinates on hover', () => {
405
- it('renders with coordinatesOnHover enabled', () => {
406
- const { container } = renderComponent({ coordinatesOnHover: true });
407
- expect(container.firstChild).toBeInTheDocument();
408
- });
409
-
410
- it('renders with coordinatesOnHover disabled', () => {
411
- const { container } = renderComponent({ coordinatesOnHover: false });
412
- expect(container.firstChild).toBeInTheDocument();
413
- });
414
- });
415
-
416
- describe('label mode', () => {
417
- it('renders with labelModeEnabled', () => {
418
- const { container } = renderComponent({
419
- labelModeEnabled: true,
420
- labelNode,
421
- });
422
- expect(container.firstChild).toBeInTheDocument();
423
- });
424
-
425
- it('renders without labelModeEnabled', () => {
426
- const { container } = renderComponent({
427
- labelModeEnabled: false,
428
- labelNode,
429
- });
430
- expect(container.firstChild).toBeInTheDocument();
431
- });
432
- });
433
-
434
- describe('drag callbacks', () => {
435
- it('renders with onDragStart callback', () => {
436
- const onDragStart = jest.fn();
437
- const { container } = renderComponent({ onDragStart });
438
- expect(container.firstChild).toBeInTheDocument();
439
- });
440
-
441
- it('renders with onDragStop callback', () => {
442
- const onDragStop = jest.fn();
443
- const { container } = renderComponent({ onDragStop });
444
- expect(container.firstChild).toBeInTheDocument();
445
- });
446
-
447
- it('renders with both drag callbacks', () => {
448
- const onDragStart = jest.fn();
449
- const onDragStop = jest.fn();
450
- const { container } = renderComponent({ onDragStart, onDragStop });
451
- expect(container.firstChild).toBeInTheDocument();
452
- });
453
- });
454
-
455
- describe('edge cases', () => {
456
- it('handles equal from and to points', () => {
457
- const { container } = renderComponent({
458
- from: xy(1, 1),
459
- to: xy(1, 1),
460
- });
461
- expect(container.firstChild).toBeInTheDocument();
462
- });
463
-
464
- it('handles negative coordinates', () => {
465
- const { container } = renderComponent({
466
- from: xy(-5, -5),
467
- to: xy(-1, -1),
468
- });
469
- expect(container.firstChild).toBeInTheDocument();
470
- });
471
-
472
- it('handles large coordinate values', () => {
473
- const { container } = renderComponent({
474
- from: xy(100, 100),
475
- to: xy(200, 200),
476
- });
477
- expect(container.firstChild).toBeInTheDocument();
478
- });
479
-
480
- it('handles decimal coordinates', () => {
481
- const { container } = renderComponent({
482
- from: xy(0.5, 0.5),
483
- to: xy(1.5, 1.5),
484
- });
485
- expect(container.firstChild).toBeInTheDocument();
486
- });
487
-
488
- it('handles vertical lines', () => {
489
- const { container } = renderComponent({
490
- from: xy(1, 0),
491
- to: xy(1, 5),
492
- });
493
- expect(container.firstChild).toBeInTheDocument();
494
- });
495
-
496
- it('handles horizontal lines', () => {
497
- const { container } = renderComponent({
498
- from: xy(0, 1),
499
- to: xy(5, 1),
500
- });
501
- expect(container.firstChild).toBeInTheDocument();
502
- });
503
-
504
- it('handles empty label strings', () => {
505
- const { container } = renderComponent({
506
- labelNode,
507
- from: xyLabel(0, 0, ''),
508
- to: xyLabel(1, 1, ''),
509
- });
510
- expect(container.firstChild).toBeInTheDocument();
511
- });
512
- });
513
-
514
- describe('integration scenarios', () => {
515
- it('renders complete line with all features', () => {
516
- const { container } = renderComponent({
517
- from: xyLabel(0, 0, 'Start'),
518
- to: xyLabel(5, 5, 'End'),
519
- middle: xyLabel(2.5, 2.5, 'Middle'),
520
- labelNode,
521
- coordinatesOnHover: true,
522
- labelModeEnabled: true,
523
- disabled: false,
524
- correctness: 'correct',
525
- fill: '#00ff00',
526
- gssLineData: { selectedTool: 'lineA' },
527
- onDragStart: jest.fn(),
528
- onDragStop: jest.fn(),
529
- });
530
- expect(container.firstChild).toBeInTheDocument();
531
- });
532
-
533
- it('renders disabled background line', () => {
534
- const { container } = renderComponent({
535
- from: xy(0, 0),
536
- to: xy(1, 1),
537
- disabled: true,
538
- correctness: 'incorrect',
539
- });
540
- expect(container.firstChild).toBeInTheDocument();
541
- });
542
-
543
- it('renders solution set mode', () => {
544
- const { container } = renderComponent({
545
- from: xy(0, 0),
546
- to: xy(1, 1),
547
- gssLineData: { selectedTool: 'solutionSet' },
548
- labelNode,
549
- });
550
- expect(container.firstChild).toBeInTheDocument();
551
- });
552
- });
553
- });
@@ -1,56 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { graphProps as getGraphProps } from '../../../../__tests__/utils';
4
- import { utils } from '@pie-lib/plot';
5
- import * as lineUtils from '../../../../utils';
6
-
7
- const { xy } = utils;
8
-
9
- const { bounds, pointsToArea } = lineUtils;
10
- jest.mock('../../../../utils', () => {
11
- const a = jest.requireActual('../../../../utils');
12
- return {
13
- pointsToArea: jest.fn().mockReturnValue({}),
14
- bounds: jest.fn().mockReturnValue({}),
15
- point: a.point,
16
- };
17
- });
18
-
19
- jest.mock('@pie-lib/plot', () => {
20
- const a = jest.requireActual('@pie-lib/plot');
21
- return {
22
- gridDraggable: jest.fn((opts) => (Comp) => Comp),
23
- types: a.types,
24
- utils: a.utils,
25
- };
26
- });
27
-
28
- describe('LinePath', () => {
29
- let LinePath;
30
- let onChange = jest.fn();
31
- beforeEach(() => {
32
- LinePath = require('../line-path').LinePath;
33
- });
34
- const renderComponent = (extras) => {
35
- const defaults = {
36
- classes: {},
37
- className: 'className',
38
- onChange,
39
- graphProps: getGraphProps(),
40
- from: xy(0, 0, 0),
41
- to: xy(1, 1, 0),
42
- data: [
43
- [0, 0],
44
- [1, 1],
45
- ],
46
- };
47
- const props = { ...defaults, ...extras };
48
- return render(<LinePath {...props} />);
49
- };
50
- describe('rendering', () => {
51
- it('renders without crashing', () => {
52
- const { container } = renderComponent();
53
- expect(container.firstChild).toBeInTheDocument();
54
- });
55
- });
56
- });