@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,91 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { ArrowPoint } from '../index';
4
- import { graphProps } from '../../../../__tests__/utils';
5
- import { bounds } from '../../../../utils';
6
- import { gridDraggable, utils } from '@pie-lib/plot';
7
-
8
- const { xy } = utils;
9
- jest.mock('../../../../utils', () => {
10
- const { point, getAngleDeg, arrowDimensions } = jest.requireActual('../../../../utils');
11
- return {
12
- bounds: jest.fn(),
13
- point,
14
- getAngleDeg,
15
- arrowDimensions,
16
- };
17
- });
18
-
19
- jest.mock('@pie-lib/plot', () => {
20
- const { types, utils } = jest.requireActual('@pie-lib/plot');
21
- return {
22
- gridDraggable: jest.fn((opts) => (Comp) => Comp),
23
- types,
24
- utils,
25
- };
26
- });
27
-
28
- describe('ArrowPoint', () => {
29
- let onChange = jest.fn();
30
-
31
- const renderComponent = (extras) => {
32
- const defaults = {
33
- classes: {},
34
- className: 'className',
35
- onChange,
36
- graphProps: graphProps(),
37
- from: xy(0, 0),
38
- to: xy(1, 1),
39
- x: 0,
40
- y: 0,
41
- };
42
- const props = { ...defaults, ...extras };
43
- return render(<ArrowPoint {...props} />);
44
- };
45
-
46
- describe('rendering', () => {
47
- it('renders without crashing', () => {
48
- const { container } = renderComponent();
49
- expect(container.firstChild).toBeInTheDocument();
50
- });
51
- });
52
- describe('gridDraggable options', () => {
53
- let opts;
54
- let domain;
55
- let range;
56
- beforeEach(() => {
57
- domain = {
58
- min: 0,
59
- max: 1,
60
- step: 1,
61
- };
62
- range = {
63
- min: 0,
64
- max: 1,
65
- step: 1,
66
- };
67
- renderComponent();
68
- opts = gridDraggable.mock.calls[gridDraggable.mock.calls.length - 1][0];
69
- });
70
-
71
- describe('bounds', () => {
72
- it('calls utils.bounds with area', () => {
73
- const result = opts.bounds({ x: 0, y: 0 }, { domain, range });
74
- expect(bounds).toHaveBeenCalledWith({ left: 0, top: 0, bottom: 0, right: 0 }, domain, range);
75
- });
76
- });
77
- describe('anchorPoint', () => {
78
- it('returns x/y', () => {
79
- const result = opts.anchorPoint({ x: 0, y: 0 });
80
- expect(result).toEqual({ x: 0, y: 0 });
81
- });
82
- });
83
-
84
- describe('fromDelta', () => {
85
- it('returns a new point from the x/y + delta', () => {
86
- const result = opts.fromDelta({ x: -1, y: 0 }, { x: 1, y: 3 });
87
- expect(result).toEqual({ x: 0, y: 3 });
88
- });
89
- });
90
- });
91
- });
@@ -1,469 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import Arrow from '../arrow';
4
- import { graphProps } from '../../../../__tests__/utils';
5
- import { thinnerShapesNeeded } from '../../../../utils';
6
-
7
- jest.mock('../../../../utils', () => ({
8
- ...jest.requireActual('../../../../utils'),
9
- thinnerShapesNeeded: jest.fn(() => false),
10
- }));
11
-
12
- describe('Arrow', () => {
13
- let onChange = jest.fn();
14
-
15
- const renderComponent = (extras) => {
16
- const defaults = {
17
- classes: {},
18
- className: 'arrow-class',
19
- onChange,
20
- graphProps: graphProps(),
21
- x: 5,
22
- y: 10,
23
- angle: 45,
24
- };
25
- const props = { ...defaults, ...extras };
26
- return render(<Arrow {...props} />);
27
- };
28
-
29
- beforeEach(() => {
30
- onChange = jest.fn();
31
- thinnerShapesNeeded.mockReturnValue(false);
32
- });
33
-
34
- describe('rendering', () => {
35
- it('renders without crashing', () => {
36
- const { container } = renderComponent();
37
- expect(container.firstChild).toBeInTheDocument();
38
- });
39
-
40
- it('renders a g element with correct class names', () => {
41
- const { container } = renderComponent({
42
- classes: { point: 'point-class' },
43
- className: 'custom-class',
44
- });
45
- const gElement = container.querySelector('g');
46
- expect(gElement).toBeInTheDocument();
47
- expect(gElement).toHaveClass('point-class');
48
- expect(gElement).toHaveClass('custom-class');
49
- });
50
-
51
- it('renders ArrowHead component', () => {
52
- const { container } = renderComponent();
53
- const polygon = container.querySelector('polygon');
54
- expect(polygon).toBeInTheDocument();
55
- });
56
-
57
- it('applies disabled class when disabled is true', () => {
58
- const { container } = renderComponent({
59
- classes: { point: 'point-class', disabled: 'disabled-class' },
60
- disabled: true,
61
- });
62
- const gElement = container.querySelector('g');
63
- expect(gElement).toHaveClass('disabled-class');
64
- });
65
-
66
- it('does not apply disabled class when disabled is false', () => {
67
- const { container } = renderComponent({
68
- classes: { point: 'point-class', disabled: 'disabled-class' },
69
- disabled: false,
70
- });
71
- const gElement = container.querySelector('g');
72
- expect(gElement).not.toHaveClass('disabled-class');
73
- });
74
-
75
- it('applies correctness class when provided', () => {
76
- const { container } = renderComponent({
77
- classes: { point: 'point-class', correct: 'correct-class' },
78
- correctness: 'correct',
79
- });
80
- const gElement = container.querySelector('g');
81
- expect(gElement).toHaveClass('correct-class');
82
- });
83
-
84
- it('applies incorrect correctness class', () => {
85
- const { container } = renderComponent({
86
- classes: { point: 'point-class', incorrect: 'incorrect-class' },
87
- correctness: 'incorrect',
88
- });
89
- const gElement = container.querySelector('g');
90
- expect(gElement).toHaveClass('incorrect-class');
91
- });
92
- });
93
-
94
- describe('size calculation', () => {
95
- it('uses size 14 when thinnerShapesNeeded returns false', () => {
96
- thinnerShapesNeeded.mockReturnValue(false);
97
- const { container } = renderComponent({ x: 0, y: 0 });
98
- const polygon = container.querySelector('polygon');
99
-
100
- // Expected points: "0,0 -14,-7 -14,7"
101
- expect(polygon).toHaveAttribute('points');
102
- const points = polygon.getAttribute('points');
103
- expect(points).toContain('-14');
104
- });
105
-
106
- it('uses size 12 when thinnerShapesNeeded returns true', () => {
107
- thinnerShapesNeeded.mockReturnValue(true);
108
- const { container } = renderComponent({ x: 0, y: 0 });
109
- const polygon = container.querySelector('polygon');
110
-
111
- // Expected points: "0,0 -12,-6 -12,6"
112
- expect(polygon).toHaveAttribute('points');
113
- const points = polygon.getAttribute('points');
114
- expect(points).toContain('-12');
115
- });
116
-
117
- it('calls thinnerShapesNeeded with graphProps', () => {
118
- const gp = graphProps();
119
- renderComponent({ graphProps: gp });
120
- expect(thinnerShapesNeeded).toHaveBeenCalledWith(gp);
121
- });
122
- });
123
-
124
- describe('coordinate scaling', () => {
125
- it('scales x and y coordinates using graphProps.scale', () => {
126
- const mockScale = {
127
- x: jest.fn((n) => n * 10),
128
- y: jest.fn((n) => n * 20),
129
- };
130
- const gp = {
131
- ...graphProps(),
132
- scale: mockScale,
133
- };
134
-
135
- renderComponent({ x: 5, y: 10, graphProps: gp });
136
-
137
- expect(mockScale.x).toHaveBeenCalledWith(5);
138
- expect(mockScale.y).toHaveBeenCalledWith(10);
139
- });
140
-
141
- it('renders arrow with scaled coordinates', () => {
142
- const mockScale = {
143
- x: jest.fn((n) => n * 2),
144
- y: jest.fn((n) => n * 3),
145
- };
146
- const gp = {
147
- ...graphProps(),
148
- scale: mockScale,
149
- };
150
-
151
- const { container } = renderComponent({ x: 5, y: 10, graphProps: gp, angle: 0 });
152
- const polygon = container.querySelector('polygon');
153
-
154
- // scaledX = 5 * 2 = 10, scaledY = 10 * 3 = 30
155
- // Expected points: "10,30 -4,23 -4,37" (with size 14)
156
- const points = polygon.getAttribute('points');
157
- expect(points).toContain('10');
158
- expect(points).toContain('30');
159
- });
160
- });
161
-
162
- describe('angle rotation', () => {
163
- it('applies rotation transform with negative angle', () => {
164
- const { container } = renderComponent({ x: 5, y: 10, angle: 45 });
165
- const polygon = container.querySelector('polygon');
166
- const transform = polygon.getAttribute('transform');
167
-
168
- // Angle should be negated: rotate(-45, 5, 10)
169
- expect(transform).toContain('rotate(-45');
170
- expect(transform).toContain('5');
171
- expect(transform).toContain('10');
172
- });
173
-
174
- it('handles zero angle', () => {
175
- const { container } = renderComponent({ x: 3, y: 7, angle: 0 });
176
- const polygon = container.querySelector('polygon');
177
- const transform = polygon.getAttribute('transform');
178
-
179
- // will convert -0 to 0
180
- expect(transform).toMatch(/rotate\((-)?0/);
181
- expect(transform).toContain('3');
182
- expect(transform).toContain('7');
183
- });
184
-
185
- it('handles negative angle', () => {
186
- const { container } = renderComponent({ x: 2, y: 4, angle: -30 });
187
- const polygon = container.querySelector('polygon');
188
- const transform = polygon.getAttribute('transform');
189
-
190
- // -(-30) = 30
191
- expect(transform).toContain('rotate(30');
192
- expect(transform).toContain('2');
193
- expect(transform).toContain('4');
194
- });
195
-
196
- it('handles 360 degree angle', () => {
197
- const { container } = renderComponent({ x: 1, y: 1, angle: 360 });
198
- const polygon = container.querySelector('polygon');
199
- const transform = polygon.getAttribute('transform');
200
-
201
- expect(transform).toContain('rotate(-360');
202
- });
203
- });
204
-
205
- describe('arrow points calculation', () => {
206
- it('calculates correct points for arrow head', () => {
207
- thinnerShapesNeeded.mockReturnValue(false);
208
- const { container } = renderComponent({ x: 0, y: 0, angle: 0 });
209
- const polygon = container.querySelector('polygon');
210
-
211
- // size = 14
212
- // points = "0,0 -14,-7 -14, 7" (note the space after comma in the template literal)
213
- const points = polygon.getAttribute('points');
214
- expect(points).toContain('0,0');
215
- expect(points).toContain('-14,-7');
216
- expect(points).toMatch(/-14,\s*7/);
217
- });
218
-
219
- it('calculates points with scaled coordinates', () => {
220
- thinnerShapesNeeded.mockReturnValue(false);
221
- const mockScale = {
222
- x: jest.fn((n) => n),
223
- y: jest.fn((n) => n),
224
- };
225
- const gp = {
226
- ...graphProps(),
227
- scale: mockScale,
228
- };
229
-
230
- const { container } = renderComponent({ x: 10, y: 20, graphProps: gp });
231
- const polygon = container.querySelector('polygon');
232
-
233
- // scaledX = 10, scaledY = 20, size = 14
234
- // points = "10,20 -4,13 -4, 27" (note the space after comma in the template literal)
235
- const points = polygon.getAttribute('points');
236
- expect(points).toContain('10,20');
237
- expect(points).toContain('-4,13');
238
- expect(points).toMatch(/-4,\s*27/);
239
- });
240
- });
241
-
242
- describe('props handling', () => {
243
- it('passes through additional props to g element', () => {
244
- const { container } = renderComponent({
245
- 'data-test': 'arrow-test',
246
- role: 'graphics-symbol',
247
- });
248
- const gElement = container.querySelector('g');
249
- expect(gElement).toHaveAttribute('data-test', 'arrow-test');
250
- expect(gElement).toHaveAttribute('role', 'graphics-symbol');
251
- });
252
-
253
- it('excludes filtered props from g element', () => {
254
- const { container } = renderComponent({
255
- x: 5,
256
- y: 10,
257
- angle: 45,
258
- disabled: false,
259
- correctness: 'correct',
260
- graphProps: graphProps(),
261
- });
262
- const gElement = container.querySelector('g');
263
-
264
- // These props should not be passed to the g element
265
- expect(gElement).not.toHaveAttribute('x');
266
- expect(gElement).not.toHaveAttribute('y');
267
- expect(gElement).not.toHaveAttribute('angle');
268
- expect(gElement).not.toHaveAttribute('disabled');
269
- expect(gElement).not.toHaveAttribute('correctness');
270
- expect(gElement).not.toHaveAttribute('graphProps');
271
- });
272
- });
273
-
274
- describe('edge cases', () => {
275
- it('handles zero coordinates', () => {
276
- const { container } = renderComponent({ x: 0, y: 0, angle: 0 });
277
- const polygon = container.querySelector('polygon');
278
- expect(polygon).toBeInTheDocument();
279
- expect(polygon.getAttribute('points')).toBeTruthy();
280
- expect(polygon.getAttribute('transform')).toBeTruthy();
281
- });
282
-
283
- it('handles negative coordinates', () => {
284
- const { container } = renderComponent({ x: -5, y: -10, angle: 0 });
285
- const polygon = container.querySelector('polygon');
286
- expect(polygon).toBeInTheDocument();
287
- expect(polygon.getAttribute('points')).toBeTruthy();
288
- expect(polygon.getAttribute('transform')).toBeTruthy();
289
- });
290
-
291
- it('handles large coordinates', () => {
292
- const { container } = renderComponent({ x: 1000, y: 2000, angle: 0 });
293
- const polygon = container.querySelector('polygon');
294
- expect(polygon).toBeInTheDocument();
295
- });
296
-
297
- it('handles fractional coordinates', () => {
298
- const { container } = renderComponent({ x: 3.5, y: 7.25, angle: 22.5 });
299
- const polygon = container.querySelector('polygon');
300
- expect(polygon).toBeInTheDocument();
301
- expect(polygon.getAttribute('transform')).toContain('rotate(-22.5');
302
- });
303
-
304
- it('renders with empty classes prop', () => {
305
- const { container } = render(<Arrow x={5} y={10} angle={45} graphProps={graphProps()} classes={{}} />);
306
- const gElement = container.querySelector('g');
307
- expect(gElement).toBeInTheDocument();
308
- });
309
-
310
- it('renders without className prop', () => {
311
- const { container } = render(<Arrow x={5} y={10} angle={45} graphProps={graphProps()} classes={{}} />);
312
- const gElement = container.querySelector('g');
313
- expect(gElement).toBeInTheDocument();
314
- });
315
- });
316
-
317
- describe('graphProps integration', () => {
318
- it('works with different domain and range values', () => {
319
- const gp = graphProps(-10, 10, -20, 20);
320
- const { container } = renderComponent({ graphProps: gp });
321
- expect(container.querySelector('polygon')).toBeInTheDocument();
322
- expect(thinnerShapesNeeded).toHaveBeenCalledWith(gp);
323
- });
324
-
325
- it('works with custom size in graphProps', () => {
326
- const gp = {
327
- ...graphProps(),
328
- size: {
329
- width: 800,
330
- height: 600,
331
- },
332
- };
333
- const { container } = renderComponent({ graphProps: gp });
334
- expect(container.querySelector('polygon')).toBeInTheDocument();
335
- });
336
-
337
- it('handles graphProps with small step values', () => {
338
- const gp = {
339
- ...graphProps(),
340
- domain: { min: 0, max: 10, step: 0.1 },
341
- range: { min: 0, max: 10, step: 0.1 },
342
- };
343
- thinnerShapesNeeded.mockReturnValue(true);
344
- const { container } = renderComponent({ graphProps: gp });
345
- const polygon = container.querySelector('polygon');
346
-
347
- // Should use size 12 for thinner shapes
348
- expect(polygon).toBeInTheDocument();
349
- expect(thinnerShapesNeeded).toHaveBeenCalledWith(gp);
350
- });
351
- });
352
-
353
- describe('multiple correctness states', () => {
354
- it('handles partial correctness', () => {
355
- const { container } = renderComponent({
356
- classes: { point: 'point-class', partial: 'partial-class' },
357
- correctness: 'partial',
358
- });
359
- const gElement = container.querySelector('g');
360
- expect(gElement).toHaveClass('partial-class');
361
- });
362
-
363
- it('handles undefined correctness', () => {
364
- const { container } = renderComponent({
365
- classes: { point: 'point-class' },
366
- correctness: undefined,
367
- });
368
- const gElement = container.querySelector('g');
369
- expect(gElement).toHaveClass('point-class');
370
- });
371
-
372
- it('handles null correctness', () => {
373
- const { container } = renderComponent({
374
- classes: { point: 'point-class' },
375
- correctness: null,
376
- });
377
- const gElement = container.querySelector('g');
378
- expect(gElement).toHaveClass('point-class');
379
- });
380
- });
381
-
382
- describe('combined states', () => {
383
- it('handles disabled and correct states together', () => {
384
- const { container } = renderComponent({
385
- classes: {
386
- point: 'point-class',
387
- disabled: 'disabled-class',
388
- correct: 'correct-class',
389
- },
390
- disabled: true,
391
- correctness: 'correct',
392
- });
393
- const gElement = container.querySelector('g');
394
- expect(gElement).toHaveClass('point-class');
395
- expect(gElement).toHaveClass('disabled-class');
396
- expect(gElement).toHaveClass('correct-class');
397
- });
398
-
399
- it('handles disabled and incorrect states together', () => {
400
- const { container } = renderComponent({
401
- classes: {
402
- point: 'point-class',
403
- disabled: 'disabled-class',
404
- incorrect: 'incorrect-class',
405
- },
406
- disabled: true,
407
- correctness: 'incorrect',
408
- });
409
- const gElement = container.querySelector('g');
410
- expect(gElement).toHaveClass('point-class');
411
- expect(gElement).toHaveClass('disabled-class');
412
- expect(gElement).toHaveClass('incorrect-class');
413
- });
414
- });
415
-
416
- describe('re-rendering', () => {
417
- it('updates when x coordinate changes', () => {
418
- const { container, rerender } = renderComponent({ x: 5, y: 10, angle: 0 });
419
- let polygon = container.querySelector('polygon');
420
- const initialPoints = polygon.getAttribute('points');
421
-
422
- rerender(<Arrow x={15} y={10} angle={0} graphProps={graphProps()} classes={{}} className="arrow-class" />);
423
-
424
- polygon = container.querySelector('polygon');
425
- const newPoints = polygon.getAttribute('points');
426
- expect(newPoints).not.toBe(initialPoints);
427
- });
428
-
429
- it('updates when y coordinate changes', () => {
430
- const { container, rerender } = renderComponent({ x: 5, y: 10, angle: 0 });
431
- let polygon = container.querySelector('polygon');
432
- const initialPoints = polygon.getAttribute('points');
433
-
434
- rerender(<Arrow x={5} y={20} angle={0} graphProps={graphProps()} classes={{}} className="arrow-class" />);
435
-
436
- polygon = container.querySelector('polygon');
437
- const newPoints = polygon.getAttribute('points');
438
- expect(newPoints).not.toBe(initialPoints);
439
- });
440
-
441
- it('updates when angle changes', () => {
442
- const { container, rerender } = renderComponent({ x: 5, y: 10, angle: 0 });
443
- let polygon = container.querySelector('polygon');
444
- const initialTransform = polygon.getAttribute('transform');
445
-
446
- rerender(<Arrow x={5} y={10} angle={90} graphProps={graphProps()} classes={{}} className="arrow-class" />);
447
-
448
- polygon = container.querySelector('polygon');
449
- const newTransform = polygon.getAttribute('transform');
450
- expect(newTransform).not.toBe(initialTransform);
451
- expect(newTransform).toContain('rotate(-90');
452
- });
453
-
454
- it('updates when thinnerShapesNeeded result changes', () => {
455
- thinnerShapesNeeded.mockReturnValue(false);
456
- const { container, rerender } = renderComponent({ x: 0, y: 0, angle: 0 });
457
- let polygon = container.querySelector('polygon');
458
- const initialPoints = polygon.getAttribute('points');
459
-
460
- thinnerShapesNeeded.mockReturnValue(true);
461
- rerender(<Arrow x={0} y={0} angle={0} graphProps={graphProps()} classes={{}} className="arrow-class" />);
462
-
463
- polygon = container.querySelector('polygon');
464
- const newPoints = polygon.getAttribute('points');
465
- // Points should change due to size change (14 vs 12)
466
- expect(newPoints).not.toBe(initialPoints);
467
- });
468
- });
469
- });
@@ -1,87 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { BasePoint } from '../index';
4
- import { gridDraggable } from '@pie-lib/plot';
5
- import { graphProps } from '../../../../__tests__/utils';
6
- import { bounds } from '../../../../utils';
7
-
8
- jest.mock('../../../../utils', () => {
9
- const { point, thinnerShapesNeeded } = jest.requireActual('../../../../utils');
10
- return {
11
- bounds: jest.fn(),
12
- point,
13
- thinnerShapesNeeded,
14
- };
15
- });
16
-
17
- jest.mock('@pie-lib/plot', () => {
18
- const { types, utils } = jest.requireActual('@pie-lib/plot');
19
- return {
20
- gridDraggable: jest.fn((opts) => (Comp) => Comp),
21
- types,
22
- utils,
23
- };
24
- });
25
-
26
- describe('BasePoint', () => {
27
- let onChange = jest.fn();
28
-
29
- const renderComponent = (extras) => {
30
- const defaults = {
31
- classes: {},
32
- className: 'className',
33
- onChange,
34
- graphProps: graphProps(),
35
- x: 0,
36
- y: 0,
37
- };
38
- const props = { ...defaults, ...extras };
39
- return render(<BasePoint {...props} />);
40
- };
41
-
42
- describe('rendering', () => {
43
- it('renders without crashing', () => {
44
- const { container } = renderComponent();
45
- expect(container.firstChild).toBeInTheDocument();
46
- });
47
- });
48
- describe('gridDraggable options', () => {
49
- let opts;
50
- let domain;
51
- let range;
52
- beforeEach(() => {
53
- domain = {
54
- min: 0,
55
- max: 1,
56
- step: 1,
57
- };
58
- range = {
59
- min: 0,
60
- max: 1,
61
- step: 1,
62
- };
63
- renderComponent();
64
- opts = gridDraggable.mock.calls[gridDraggable.mock.calls.length - 1][0];
65
- });
66
-
67
- describe('bounds', () => {
68
- it('calls utils.bounds with area', () => {
69
- const result = opts.bounds({ x: 0, y: 0 }, { domain, range });
70
- expect(bounds).toHaveBeenCalledWith({ left: 0, top: 0, bottom: 0, right: 0 }, domain, range);
71
- });
72
- });
73
- describe('anchorPoint', () => {
74
- it('returns x/y', () => {
75
- const result = opts.anchorPoint({ x: 0, y: 0 });
76
- expect(result).toEqual({ x: 0, y: 0 });
77
- });
78
- });
79
-
80
- describe('fromDelta', () => {
81
- it('returns a new point from the x/y + delta', () => {
82
- const result = opts.fromDelta({ x: -1, y: 0 }, { x: 1, y: 3 });
83
- expect(result).toEqual({ x: 0, y: 3 });
84
- });
85
- });
86
- });
87
- });