@pie-lib/graphing 4.1.0-beta.8 → 5.0.0-next.36

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 (409) 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 +88 -0
  24. package/dist/graph-with-controls.js +156 -0
  25. package/dist/graph.d.ts +126 -0
  26. package/dist/graph.js +209 -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 +15 -0
  32. package/dist/index.js +7 -0
  33. package/dist/key-legend.d.ts +21 -0
  34. package/dist/key-legend.js +231 -0
  35. package/dist/label-svg-icon.d.ts +18 -0
  36. package/dist/label-svg-icon.js +42 -0
  37. package/dist/labels.d.ts +37 -0
  38. package/dist/labels.js +152 -0
  39. package/dist/mark-label.d.ts +60 -0
  40. package/dist/mark-label.js +222 -0
  41. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Axis.js +67 -0
  42. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisRenderer.js +66 -0
  43. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Ticks.js +39 -0
  44. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/constants/orientation.js +9 -0
  45. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/createPoint.js +14 -0
  46. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js +13 -0
  47. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getLabelTransform.js +16 -0
  48. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickFormatter.js +8 -0
  49. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickPosition.js +14 -0
  50. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/Grid.js +43 -0
  51. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridColumns.js +46 -0
  52. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridRows.js +46 -0
  53. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/utils/getScaleBandwidth.js +6 -0
  54. package/dist/node_modules/.bun/@visx_group@4.0.0_d84c32d47042070f/node_modules/@visx/group/esm/Group.js +17 -0
  55. package/dist/node_modules/.bun/@visx_point@4.0.0/node_modules/@visx/point/esm/Point.js +20 -0
  56. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/coerceNumber.js +10 -0
  57. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/getTicks.js +7 -0
  58. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/toString.js +6 -0
  59. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Line.js +27 -0
  60. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/LinePath.js +24 -0
  61. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/util/D3ShapeFactories.js +9 -0
  62. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/util/setNumberOrNumberAccessor.js +6 -0
  63. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/Text.js +27 -0
  64. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/hooks/useText.js +68 -0
  65. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/getStringWidth.js +19 -0
  66. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/memoize.js +13 -0
  67. package/dist/node_modules/.bun/@visx_vendor@4.0.0/node_modules/@visx/vendor/esm/d3-shape.js +8 -0
  68. package/dist/node_modules/.bun/balanced-match@0.4.2/node_modules/balanced-match/index.js +32 -0
  69. package/dist/node_modules/.bun/balanced-match@1.0.2/node_modules/balanced-match/index.js +33 -0
  70. package/dist/node_modules/.bun/classnames@2.5.1/node_modules/classnames/index.js +32 -0
  71. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +16 -0
  72. package/dist/node_modules/.bun/invariant@2.2.4/node_modules/invariant/browser.js +28 -0
  73. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/formula_evaluator.js +37 -0
  74. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/lexer.js +509 -0
  75. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/math_function.js +108 -0
  76. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix.js +31 -0
  77. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix_evaluator.js +45 -0
  78. package/dist/node_modules/.bun/reduce-css-calc@1.3.0/node_modules/reduce-css-calc/index.js +49 -0
  79. package/dist/node_modules/.bun/reduce-function-call@1.0.3/node_modules/reduce-function-call/index.js +34 -0
  80. package/dist/node_modules/.bun/redux-undo@1.1.0/node_modules/redux-undo/dist/redux-undo.js +185 -0
  81. package/dist/node_modules/.bun/redux@5.0.1/node_modules/redux/dist/redux.js +198 -0
  82. package/dist/toggle-bar.d.ts +40 -0
  83. package/dist/toggle-bar.js +155 -0
  84. package/dist/tool-menu.d.ts +29 -0
  85. package/dist/tool-menu.js +41 -0
  86. package/dist/tools/absolute/component.d.ts +16 -0
  87. package/dist/tools/absolute/component.js +15 -0
  88. package/dist/tools/absolute/index.d.ts +20 -0
  89. package/dist/tools/absolute/index.js +32 -0
  90. package/dist/tools/circle/bg-circle.d.ts +116 -0
  91. package/dist/tools/circle/bg-circle.js +72 -0
  92. package/dist/tools/circle/component.d.ts +88 -0
  93. package/dist/tools/circle/component.js +208 -0
  94. package/dist/tools/circle/index.d.ts +20 -0
  95. package/dist/tools/circle/index.js +22 -0
  96. package/dist/tools/exponential/component.d.ts +16 -0
  97. package/dist/tools/exponential/component.js +14 -0
  98. package/dist/tools/exponential/index.d.ts +20 -0
  99. package/dist/tools/exponential/index.js +32 -0
  100. package/dist/tools/index.d.ts +27 -0
  101. package/dist/tools/index.js +55 -0
  102. package/dist/tools/line/component.d.ts +124 -0
  103. package/dist/tools/line/component.js +72 -0
  104. package/dist/tools/line/index.d.ts +13 -0
  105. package/dist/tools/line/index.js +6 -0
  106. package/dist/tools/parabola/component.d.ts +16 -0
  107. package/dist/tools/parabola/component.js +14 -0
  108. package/dist/tools/parabola/index.d.ts +20 -0
  109. package/dist/tools/parabola/index.js +32 -0
  110. package/dist/tools/point/component.d.ts +52 -0
  111. package/dist/tools/point/component.js +91 -0
  112. package/dist/tools/point/index.d.ts +15 -0
  113. package/dist/tools/point/index.js +13 -0
  114. package/dist/tools/polygon/component.d.ts +125 -0
  115. package/dist/tools/polygon/component.js +271 -0
  116. package/dist/tools/polygon/index.d.ts +19 -0
  117. package/dist/tools/polygon/index.js +55 -0
  118. package/dist/tools/polygon/line.d.ts +125 -0
  119. package/dist/tools/polygon/line.js +63 -0
  120. package/dist/tools/polygon/polygon.d.ts +122 -0
  121. package/dist/tools/polygon/polygon.js +74 -0
  122. package/dist/tools/ray/component.d.ts +101 -0
  123. package/dist/tools/ray/component.js +71 -0
  124. package/dist/tools/ray/index.d.ts +13 -0
  125. package/dist/tools/ray/index.js +6 -0
  126. package/dist/tools/segment/component.d.ts +100 -0
  127. package/dist/tools/segment/component.js +52 -0
  128. package/dist/tools/segment/index.d.ts +13 -0
  129. package/dist/tools/segment/index.js +6 -0
  130. package/dist/tools/shared/arrow-head.d.ts +51 -0
  131. package/dist/tools/shared/arrow-head.js +63 -0
  132. package/dist/tools/shared/icons/CorrectSVG.d.ts +26 -0
  133. package/dist/tools/shared/icons/CorrectSVG.js +29 -0
  134. package/dist/tools/shared/icons/IncorrectSVG.d.ts +26 -0
  135. package/dist/tools/shared/icons/IncorrectSVG.js +27 -0
  136. package/dist/tools/shared/icons/MissingSVG.d.ts +26 -0
  137. package/dist/tools/shared/icons/MissingSVG.js +28 -0
  138. package/dist/tools/shared/line/index.d.ts +251 -0
  139. package/dist/tools/shared/line/index.js +332 -0
  140. package/dist/tools/shared/line/line-path.d.ts +57 -0
  141. package/dist/tools/shared/line/line-path.js +71 -0
  142. package/dist/tools/shared/line/with-root-edge.d.ts +148 -0
  143. package/dist/tools/shared/line/with-root-edge.js +73 -0
  144. package/dist/tools/shared/point/arrow-point.d.ts +56 -0
  145. package/dist/tools/shared/point/arrow-point.js +41 -0
  146. package/dist/tools/shared/point/arrow.d.ts +45 -0
  147. package/dist/tools/shared/point/arrow.js +35 -0
  148. package/dist/tools/shared/point/base-point.d.ts +52 -0
  149. package/dist/tools/shared/point/base-point.js +103 -0
  150. package/dist/tools/shared/point/index.d.ts +216 -0
  151. package/dist/tools/shared/point/index.js +45 -0
  152. package/dist/tools/shared/styles.d.ts +29 -0
  153. package/dist/tools/shared/styles.js +20 -0
  154. package/dist/tools/shared/types.d.ts +21 -0
  155. package/dist/tools/shared/types.js +11 -0
  156. package/dist/tools/sine/component.d.ts +16 -0
  157. package/dist/tools/sine/component.js +22 -0
  158. package/dist/tools/sine/index.d.ts +20 -0
  159. package/dist/tools/sine/index.js +32 -0
  160. package/dist/tools/vector/component.d.ts +100 -0
  161. package/dist/tools/vector/component.js +44 -0
  162. package/dist/tools/vector/index.d.ts +13 -0
  163. package/dist/tools/vector/index.js +6 -0
  164. package/dist/undo-redo.d.ts +22 -0
  165. package/dist/undo-redo.js +47 -0
  166. package/dist/use-debounce.d.ts +9 -0
  167. package/dist/use-debounce.js +13 -0
  168. package/dist/utils.d.ts +61 -0
  169. package/dist/utils.js +75 -0
  170. package/package.json +51 -41
  171. package/CHANGELOG.json +0 -1
  172. package/CHANGELOG.md +0 -1469
  173. package/lib/axis/arrow.js +0 -79
  174. package/lib/axis/arrow.js.map +0 -1
  175. package/lib/axis/axes.js +0 -329
  176. package/lib/axis/axes.js.map +0 -1
  177. package/lib/axis/index.js +0 -21
  178. package/lib/axis/index.js.map +0 -1
  179. package/lib/bg.js +0 -114
  180. package/lib/bg.js.map +0 -1
  181. package/lib/container/actions.js +0 -18
  182. package/lib/container/actions.js.map +0 -1
  183. package/lib/container/index.js +0 -127
  184. package/lib/container/index.js.map +0 -1
  185. package/lib/container/marks.js +0 -22
  186. package/lib/container/marks.js.map +0 -1
  187. package/lib/container/middleware.js +0 -19
  188. package/lib/container/middleware.js.map +0 -1
  189. package/lib/container/reducer.js +0 -18
  190. package/lib/container/reducer.js.map +0 -1
  191. package/lib/coordinates-label.js +0 -79
  192. package/lib/coordinates-label.js.map +0 -1
  193. package/lib/graph-with-controls.js +0 -294
  194. package/lib/graph-with-controls.js.map +0 -1
  195. package/lib/graph.js +0 -327
  196. package/lib/graph.js.map +0 -1
  197. package/lib/grid-setup.js +0 -414
  198. package/lib/grid-setup.js.map +0 -1
  199. package/lib/grid.js +0 -131
  200. package/lib/grid.js.map +0 -1
  201. package/lib/index.js +0 -47
  202. package/lib/index.js.map +0 -1
  203. package/lib/key-legend.js +0 -201
  204. package/lib/key-legend.js.map +0 -1
  205. package/lib/label-svg-icon.js +0 -50
  206. package/lib/label-svg-icon.js.map +0 -1
  207. package/lib/labels.js +0 -243
  208. package/lib/labels.js.map +0 -1
  209. package/lib/mark-label.js +0 -285
  210. package/lib/mark-label.js.map +0 -1
  211. package/lib/toggle-bar.js +0 -252
  212. package/lib/toggle-bar.js.map +0 -1
  213. package/lib/tool-menu.js +0 -78
  214. package/lib/tool-menu.js.map +0 -1
  215. package/lib/tools/absolute/component.js +0 -29
  216. package/lib/tools/absolute/component.js.map +0 -1
  217. package/lib/tools/absolute/index.js +0 -50
  218. package/lib/tools/absolute/index.js.map +0 -1
  219. package/lib/tools/circle/bg-circle.js +0 -123
  220. package/lib/tools/circle/bg-circle.js.map +0 -1
  221. package/lib/tools/circle/component.js +0 -321
  222. package/lib/tools/circle/component.js.map +0 -1
  223. package/lib/tools/circle/index.js +0 -41
  224. package/lib/tools/circle/index.js.map +0 -1
  225. package/lib/tools/exponential/component.js +0 -28
  226. package/lib/tools/exponential/component.js.map +0 -1
  227. package/lib/tools/exponential/index.js +0 -56
  228. package/lib/tools/exponential/index.js.map +0 -1
  229. package/lib/tools/index.js +0 -86
  230. package/lib/tools/index.js.map +0 -1
  231. package/lib/tools/line/component.js +0 -97
  232. package/lib/tools/line/component.js.map +0 -1
  233. package/lib/tools/line/index.js +0 -11
  234. package/lib/tools/line/index.js.map +0 -1
  235. package/lib/tools/parabola/component.js +0 -28
  236. package/lib/tools/parabola/component.js.map +0 -1
  237. package/lib/tools/parabola/index.js +0 -50
  238. package/lib/tools/parabola/index.js.map +0 -1
  239. package/lib/tools/point/component.js +0 -148
  240. package/lib/tools/point/component.js.map +0 -1
  241. package/lib/tools/point/index.js +0 -24
  242. package/lib/tools/point/index.js.map +0 -1
  243. package/lib/tools/polygon/component.js +0 -437
  244. package/lib/tools/polygon/component.js.map +0 -1
  245. package/lib/tools/polygon/index.js +0 -89
  246. package/lib/tools/polygon/index.js.map +0 -1
  247. package/lib/tools/polygon/line.js +0 -112
  248. package/lib/tools/polygon/line.js.map +0 -1
  249. package/lib/tools/polygon/polygon.js +0 -130
  250. package/lib/tools/polygon/polygon.js.map +0 -1
  251. package/lib/tools/ray/component.js +0 -95
  252. package/lib/tools/ray/component.js.map +0 -1
  253. package/lib/tools/ray/index.js +0 -11
  254. package/lib/tools/ray/index.js.map +0 -1
  255. package/lib/tools/segment/component.js +0 -71
  256. package/lib/tools/segment/component.js.map +0 -1
  257. package/lib/tools/segment/index.js +0 -11
  258. package/lib/tools/segment/index.js.map +0 -1
  259. package/lib/tools/shared/arrow-head.js +0 -111
  260. package/lib/tools/shared/arrow-head.js.map +0 -1
  261. package/lib/tools/shared/icons/CorrectSVG.js +0 -40
  262. package/lib/tools/shared/icons/CorrectSVG.js.map +0 -1
  263. package/lib/tools/shared/icons/IncorrectSVG.js +0 -40
  264. package/lib/tools/shared/icons/IncorrectSVG.js.map +0 -1
  265. package/lib/tools/shared/icons/MissingSVG.js +0 -39
  266. package/lib/tools/shared/icons/MissingSVG.js.map +0 -1
  267. package/lib/tools/shared/line/index.js +0 -550
  268. package/lib/tools/shared/line/index.js.map +0 -1
  269. package/lib/tools/shared/line/line-path.js +0 -118
  270. package/lib/tools/shared/line/line-path.js.map +0 -1
  271. package/lib/tools/shared/line/with-root-edge.js +0 -121
  272. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  273. package/lib/tools/shared/point/arrow-point.js +0 -72
  274. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  275. package/lib/tools/shared/point/arrow.js +0 -67
  276. package/lib/tools/shared/point/arrow.js.map +0 -1
  277. package/lib/tools/shared/point/base-point.js +0 -157
  278. package/lib/tools/shared/point/base-point.js.map +0 -1
  279. package/lib/tools/shared/point/index.js +0 -68
  280. package/lib/tools/shared/point/index.js.map +0 -1
  281. package/lib/tools/shared/styles.js +0 -33
  282. package/lib/tools/shared/styles.js.map +0 -1
  283. package/lib/tools/shared/types.js +0 -16
  284. package/lib/tools/shared/types.js.map +0 -1
  285. package/lib/tools/sine/component.js +0 -40
  286. package/lib/tools/sine/component.js.map +0 -1
  287. package/lib/tools/sine/index.js +0 -50
  288. package/lib/tools/sine/index.js.map +0 -1
  289. package/lib/tools/vector/component.js +0 -68
  290. package/lib/tools/vector/component.js.map +0 -1
  291. package/lib/tools/vector/index.js +0 -11
  292. package/lib/tools/vector/index.js.map +0 -1
  293. package/lib/undo-redo.js +0 -86
  294. package/lib/undo-redo.js.map +0 -1
  295. package/lib/use-debounce.js +0 -25
  296. package/lib/use-debounce.js.map +0 -1
  297. package/lib/utils.js +0 -229
  298. package/lib/utils.js.map +0 -1
  299. package/src/__tests__/bg.test.jsx +0 -250
  300. package/src/__tests__/coordinates-label.test.jsx +0 -243
  301. package/src/__tests__/graph-with-controls.test.jsx +0 -198
  302. package/src/__tests__/graph.test.jsx +0 -721
  303. package/src/__tests__/grid-setup.test.jsx +0 -645
  304. package/src/__tests__/grid.test.jsx +0 -22
  305. package/src/__tests__/key-legend.test.jsx +0 -260
  306. package/src/__tests__/label-svg-icon.test.jsx +0 -278
  307. package/src/__tests__/labels.test.jsx +0 -55
  308. package/src/__tests__/mark-label.test.jsx +0 -63
  309. package/src/__tests__/toggle-bar.test.jsx +0 -146
  310. package/src/__tests__/tool-menu.test.jsx +0 -115
  311. package/src/__tests__/undo-redo.test.jsx +0 -24
  312. package/src/__tests__/use-debounce.test.js +0 -21
  313. package/src/__tests__/utils.js +0 -41
  314. package/src/__tests__/utils.test.js +0 -105
  315. package/src/axis/__tests__/arrow.test.jsx +0 -38
  316. package/src/axis/__tests__/axes.test.jsx +0 -216
  317. package/src/axis/arrow.jsx +0 -57
  318. package/src/axis/axes.jsx +0 -285
  319. package/src/axis/index.js +0 -3
  320. package/src/bg.jsx +0 -96
  321. package/src/container/__tests__/actions.test.js +0 -105
  322. package/src/container/__tests__/index.test.jsx +0 -319
  323. package/src/container/__tests__/marks.test.js +0 -172
  324. package/src/container/__tests__/middleware.test.js +0 -235
  325. package/src/container/__tests__/reducer.test.js +0 -324
  326. package/src/container/actions.js +0 -8
  327. package/src/container/index.jsx +0 -91
  328. package/src/container/marks.js +0 -14
  329. package/src/container/middleware.js +0 -7
  330. package/src/container/reducer.js +0 -5
  331. package/src/coordinates-label.jsx +0 -63
  332. package/src/graph-with-controls.jsx +0 -239
  333. package/src/graph.jsx +0 -303
  334. package/src/grid-setup.jsx +0 -432
  335. package/src/grid.jsx +0 -133
  336. package/src/index.js +0 -7
  337. package/src/key-legend.jsx +0 -142
  338. package/src/label-svg-icon.jsx +0 -39
  339. package/src/labels.jsx +0 -207
  340. package/src/mark-label.jsx +0 -244
  341. package/src/toggle-bar.jsx +0 -224
  342. package/src/tool-menu.jsx +0 -49
  343. package/src/tools/absolute/__tests__/component.test.jsx +0 -53
  344. package/src/tools/absolute/component.jsx +0 -23
  345. package/src/tools/absolute/index.js +0 -31
  346. package/src/tools/circle/__tests__/bg-circle.test.jsx +0 -26
  347. package/src/tools/circle/__tests__/component.test.jsx +0 -494
  348. package/src/tools/circle/__tests__/index.test.js +0 -480
  349. package/src/tools/circle/bg-circle.jsx +0 -81
  350. package/src/tools/circle/component.jsx +0 -264
  351. package/src/tools/circle/index.js +0 -25
  352. package/src/tools/exponential/__tests__/component.test.jsx +0 -53
  353. package/src/tools/exponential/__tests__/index.test.js +0 -729
  354. package/src/tools/exponential/component.jsx +0 -23
  355. package/src/tools/exponential/index.js +0 -39
  356. package/src/tools/index.js +0 -48
  357. package/src/tools/line/__tests__/component.test.jsx +0 -37
  358. package/src/tools/line/component.jsx +0 -93
  359. package/src/tools/line/index.js +0 -4
  360. package/src/tools/parabola/__tests__/component.test.jsx +0 -48
  361. package/src/tools/parabola/__tests__/index.test.js +0 -470
  362. package/src/tools/parabola/component.jsx +0 -23
  363. package/src/tools/parabola/index.js +0 -31
  364. package/src/tools/point/__tests__/component.test.jsx +0 -349
  365. package/src/tools/point/__tests__/index.test.js +0 -241
  366. package/src/tools/point/component.jsx +0 -126
  367. package/src/tools/point/index.js +0 -11
  368. package/src/tools/polygon/__tests__/component.test.jsx +0 -471
  369. package/src/tools/polygon/__tests__/index.test.js +0 -294
  370. package/src/tools/polygon/__tests__/line.test.jsx +0 -35
  371. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -61
  372. package/src/tools/polygon/component.jsx +0 -409
  373. package/src/tools/polygon/index.js +0 -52
  374. package/src/tools/polygon/line.jsx +0 -74
  375. package/src/tools/polygon/polygon.jsx +0 -110
  376. package/src/tools/ray/__tests__/component.test.jsx +0 -29
  377. package/src/tools/ray/component.jsx +0 -92
  378. package/src/tools/ray/index.js +0 -4
  379. package/src/tools/segment/__tests__/component.test.jsx +0 -28
  380. package/src/tools/segment/component.jsx +0 -65
  381. package/src/tools/segment/index.js +0 -4
  382. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -31
  383. package/src/tools/shared/arrow-head.jsx +0 -102
  384. package/src/tools/shared/icons/CorrectSVG.jsx +0 -32
  385. package/src/tools/shared/icons/IncorrectSVG.jsx +0 -30
  386. package/src/tools/shared/icons/MissingSVG.jsx +0 -31
  387. package/src/tools/shared/line/__tests__/index.test.jsx +0 -109
  388. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -53
  389. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -73
  390. package/src/tools/shared/line/index.jsx +0 -487
  391. package/src/tools/shared/line/line-path.jsx +0 -80
  392. package/src/tools/shared/line/with-root-edge.jsx +0 -97
  393. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  394. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  395. package/src/tools/shared/point/arrow-point.jsx +0 -46
  396. package/src/tools/shared/point/arrow.jsx +0 -37
  397. package/src/tools/shared/point/base-point.jsx +0 -121
  398. package/src/tools/shared/point/index.jsx +0 -54
  399. package/src/tools/shared/styles.js +0 -27
  400. package/src/tools/shared/types.js +0 -10
  401. package/src/tools/sine/__tests__/component.test.jsx +0 -51
  402. package/src/tools/sine/component.jsx +0 -32
  403. package/src/tools/sine/index.js +0 -33
  404. package/src/tools/vector/__tests__/component.test.jsx +0 -25
  405. package/src/tools/vector/component.jsx +0 -56
  406. package/src/tools/vector/index.js +0 -4
  407. package/src/undo-redo.jsx +0 -45
  408. package/src/use-debounce.js +0 -13
  409. package/src/utils.js +0 -224
@@ -1,729 +0,0 @@
1
- import { tool } from '../index';
2
- import { equalPoints, sameAxes } from '../../../utils';
3
-
4
- jest.mock('../../../utils', () => ({
5
- equalPoints: jest.fn(),
6
- sameAxes: jest.fn(),
7
- }));
8
-
9
- jest.mock('debug', () => {
10
- return jest.fn(() => jest.fn());
11
- });
12
-
13
- describe('exponential tool', () => {
14
- let exponentialTool;
15
-
16
- beforeEach(() => {
17
- jest.clearAllMocks();
18
- exponentialTool = tool();
19
- });
20
-
21
- describe('tool configuration', () => {
22
- it('creates a tool object', () => {
23
- expect(exponentialTool).toBeDefined();
24
- expect(typeof exponentialTool).toBe('object');
25
- });
26
-
27
- it('has type exponential', () => {
28
- expect(exponentialTool.type).toBe('exponential');
29
- });
30
-
31
- it('has a Component', () => {
32
- expect(exponentialTool.Component).toBeDefined();
33
- });
34
-
35
- it('has complete function', () => {
36
- expect(typeof exponentialTool.complete).toBe('function');
37
- });
38
-
39
- it('has addPoint function', () => {
40
- expect(typeof exponentialTool.addPoint).toBe('function');
41
- });
42
-
43
- it('does not have hover function', () => {
44
- expect(exponentialTool.hover).toBeUndefined();
45
- });
46
- });
47
-
48
- describe('complete', () => {
49
- it('marks exponential as complete', () => {
50
- const data = { x: 5, y: 10 };
51
- const mark = {
52
- type: 'exponential',
53
- root: { x: 0, y: 1 },
54
- edge: { x: 5, y: 10 },
55
- building: true,
56
- closed: false,
57
- };
58
-
59
- const result = exponentialTool.complete(data, mark);
60
-
61
- expect(result).toEqual({
62
- ...mark,
63
- building: false,
64
- closed: true,
65
- });
66
- });
67
-
68
- it('sets building to false', () => {
69
- const mark = {
70
- type: 'exponential',
71
- root: { x: 0, y: 1 },
72
- building: true,
73
- };
74
-
75
- const result = exponentialTool.complete({}, mark);
76
-
77
- expect(result.building).toBe(false);
78
- });
79
-
80
- it('sets closed to true', () => {
81
- const mark = {
82
- type: 'exponential',
83
- root: { x: 0, y: 1 },
84
- closed: false,
85
- };
86
-
87
- const result = exponentialTool.complete({}, mark);
88
-
89
- expect(result.closed).toBe(true);
90
- });
91
-
92
- it('preserves mark properties', () => {
93
- const mark = {
94
- type: 'exponential',
95
- root: { x: 0, y: 1 },
96
- edge: { x: 5, y: 10 },
97
- label: 'Exp A',
98
- correctness: { value: 'correct' },
99
- };
100
-
101
- const result = exponentialTool.complete({}, mark);
102
-
103
- expect(result.label).toBe('Exp A');
104
- expect(result.correctness).toEqual({ value: 'correct' });
105
- expect(result.root).toEqual(mark.root);
106
- expect(result.edge).toEqual(mark.edge);
107
- });
108
-
109
- it('does not mutate original mark', () => {
110
- const mark = {
111
- type: 'exponential',
112
- root: { x: 0, y: 1 },
113
- building: true,
114
- closed: false,
115
- };
116
- const originalMark = { ...mark };
117
-
118
- exponentialTool.complete({}, mark);
119
-
120
- expect(mark).toEqual(originalMark);
121
- });
122
- });
123
-
124
- describe('addPoint', () => {
125
- describe('first point (creating root)', () => {
126
- it('creates new exponential mark when no mark exists', () => {
127
- const point = { x: 0, y: 5 };
128
- const mark = null;
129
- equalPoints.mockReturnValue(false);
130
- sameAxes.mockReturnValue(false);
131
-
132
- const result = exponentialTool.addPoint(point, mark);
133
-
134
- expect(result).toEqual({
135
- type: 'exponential',
136
- root: point,
137
- edge: undefined,
138
- closed: false,
139
- building: true,
140
- });
141
- });
142
-
143
- it('creates mark with building true', () => {
144
- const point = { x: 2, y: 3 };
145
- equalPoints.mockReturnValue(false);
146
- sameAxes.mockReturnValue(false);
147
-
148
- const result = exponentialTool.addPoint(point, null);
149
-
150
- expect(result.building).toBe(true);
151
- });
152
-
153
- it('creates mark with closed false', () => {
154
- const point = { x: 2, y: 3 };
155
- equalPoints.mockReturnValue(false);
156
- sameAxes.mockReturnValue(false);
157
-
158
- const result = exponentialTool.addPoint(point, null);
159
-
160
- expect(result.closed).toBe(false);
161
- });
162
-
163
- it('creates mark with undefined edge', () => {
164
- const point = { x: 2, y: 3 };
165
- equalPoints.mockReturnValue(false);
166
- sameAxes.mockReturnValue(false);
167
-
168
- const result = exponentialTool.addPoint(point, null);
169
-
170
- expect(result.edge).toBeUndefined();
171
- });
172
-
173
- it('works with positive coordinates', () => {
174
- const point = { x: 5, y: 10 };
175
- equalPoints.mockReturnValue(false);
176
- sameAxes.mockReturnValue(false);
177
-
178
- const result = exponentialTool.addPoint(point, null);
179
-
180
- expect(result.root).toEqual(point);
181
- });
182
-
183
- it('works with negative y coordinate', () => {
184
- const point = { x: 5, y: -10 };
185
- equalPoints.mockReturnValue(false);
186
- sameAxes.mockReturnValue(false);
187
-
188
- const result = exponentialTool.addPoint(point, null);
189
-
190
- expect(result.root).toEqual(point);
191
- });
192
-
193
- it('works with decimal coordinates', () => {
194
- const point = { x: 3.5, y: 7.25 };
195
- equalPoints.mockReturnValue(false);
196
- sameAxes.mockReturnValue(false);
197
-
198
- const result = exponentialTool.addPoint(point, null);
199
-
200
- expect(result.root).toEqual(point);
201
- });
202
- });
203
-
204
- describe('second point (completing exponential)', () => {
205
- it('completes exponential when adding edge point', () => {
206
- const root = { x: 0, y: 1 };
207
- const edge = { x: 5, y: 10 };
208
- const mark = {
209
- type: 'exponential',
210
- root,
211
- edge: undefined,
212
- closed: false,
213
- building: true,
214
- };
215
- equalPoints.mockReturnValue(false);
216
- sameAxes.mockReturnValue(false);
217
-
218
- const result = exponentialTool.addPoint(edge, mark);
219
-
220
- expect(result).toEqual({
221
- ...mark,
222
- edge,
223
- closed: true,
224
- building: false,
225
- });
226
- });
227
-
228
- it('sets building to false', () => {
229
- const mark = {
230
- type: 'exponential',
231
- root: { x: 0, y: 1 },
232
- building: true,
233
- };
234
- const point = { x: 5, y: 10 };
235
- equalPoints.mockReturnValue(false);
236
- sameAxes.mockReturnValue(false);
237
-
238
- const result = exponentialTool.addPoint(point, mark);
239
-
240
- expect(result.building).toBe(false);
241
- });
242
-
243
- it('sets closed to true', () => {
244
- const mark = {
245
- type: 'exponential',
246
- root: { x: 0, y: 1 },
247
- closed: false,
248
- };
249
- const point = { x: 5, y: 10 };
250
- equalPoints.mockReturnValue(false);
251
- sameAxes.mockReturnValue(false);
252
-
253
- const result = exponentialTool.addPoint(point, mark);
254
-
255
- expect(result.closed).toBe(true);
256
- });
257
-
258
- it('preserves root when adding edge', () => {
259
- const root = { x: 1, y: 2 };
260
- const mark = {
261
- type: 'exponential',
262
- root,
263
- building: true,
264
- };
265
- const edge = { x: 5, y: 8 };
266
- equalPoints.mockReturnValue(false);
267
- sameAxes.mockReturnValue(false);
268
-
269
- const result = exponentialTool.addPoint(edge, mark);
270
-
271
- expect(result.root).toEqual(root);
272
- expect(result.edge).toEqual(edge);
273
- });
274
-
275
- it('preserves mark properties', () => {
276
- const mark = {
277
- type: 'exponential',
278
- root: { x: 0, y: 1 },
279
- label: 'Exp 1',
280
- correctness: { value: 'correct' },
281
- };
282
- const point = { x: 5, y: 10 };
283
- equalPoints.mockReturnValue(false);
284
- sameAxes.mockReturnValue(false);
285
-
286
- const result = exponentialTool.addPoint(point, mark);
287
-
288
- expect(result.label).toBe('Exp 1');
289
- expect(result.correctness).toEqual({ value: 'correct' });
290
- });
291
- });
292
-
293
- describe('same point handling', () => {
294
- it('returns same mark when clicking equal point', () => {
295
- const point = { x: 5, y: 10 };
296
- const mark = {
297
- type: 'exponential',
298
- root: point,
299
- building: true,
300
- };
301
- equalPoints.mockReturnValue(true);
302
- sameAxes.mockReturnValue(false);
303
-
304
- const result = exponentialTool.addPoint(point, mark);
305
-
306
- expect(result).toBe(mark);
307
- });
308
-
309
- it('returns same mark when clicking point on same axis', () => {
310
- const mark = {
311
- type: 'exponential',
312
- root: { x: 5, y: 10 },
313
- building: true,
314
- };
315
- const point = { x: 8, y: 10 }; // same y
316
- equalPoints.mockReturnValue(false);
317
- sameAxes.mockReturnValue(true);
318
-
319
- const result = exponentialTool.addPoint(point, mark);
320
-
321
- expect(result).toBe(mark);
322
- });
323
-
324
- it('calls equalPoints with correct arguments', () => {
325
- const point = { x: 5, y: 10 };
326
- const mark = {
327
- type: 'exponential',
328
- root: { x: 5, y: 10 },
329
- building: true,
330
- };
331
- equalPoints.mockReturnValue(true);
332
-
333
- exponentialTool.addPoint(point, mark);
334
-
335
- expect(equalPoints).toHaveBeenCalledWith(mark.root, point);
336
- });
337
-
338
- it('calls sameAxes with correct arguments', () => {
339
- const point = { x: 8, y: 10 };
340
- const mark = {
341
- type: 'exponential',
342
- root: { x: 5, y: 10 },
343
- building: true,
344
- };
345
- equalPoints.mockReturnValue(false);
346
- sameAxes.mockReturnValue(true);
347
-
348
- exponentialTool.addPoint(point, mark);
349
-
350
- expect(sameAxes).toHaveBeenCalledWith(mark.root, point);
351
- });
352
- });
353
-
354
- describe('opposite sign y-coordinates', () => {
355
- it('returns same mark when root and point have opposite sign y', () => {
356
- const mark = {
357
- type: 'exponential',
358
- root: { x: 0, y: 5 }, // positive y
359
- building: true,
360
- };
361
- const point = { x: 5, y: -10 }; // negative y
362
- equalPoints.mockReturnValue(false);
363
- sameAxes.mockReturnValue(false);
364
-
365
- const result = exponentialTool.addPoint(point, mark);
366
-
367
- expect(result).toBe(mark);
368
- });
369
-
370
- it('returns same mark when root is negative and point is positive', () => {
371
- const mark = {
372
- type: 'exponential',
373
- root: { x: 0, y: -5 }, // negative y
374
- building: true,
375
- };
376
- const point = { x: 5, y: 10 }; // positive y
377
- equalPoints.mockReturnValue(false);
378
- sameAxes.mockReturnValue(false);
379
-
380
- const result = exponentialTool.addPoint(point, mark);
381
-
382
- expect(result).toBe(mark);
383
- });
384
-
385
- it('allows points with same sign y (both positive)', () => {
386
- const mark = {
387
- type: 'exponential',
388
- root: { x: 0, y: 5 },
389
- building: true,
390
- };
391
- const point = { x: 5, y: 10 };
392
- equalPoints.mockReturnValue(false);
393
- sameAxes.mockReturnValue(false);
394
-
395
- const result = exponentialTool.addPoint(point, mark);
396
-
397
- expect(result.edge).toEqual(point);
398
- expect(result.building).toBe(false);
399
- });
400
-
401
- it('allows points with same sign y (both negative)', () => {
402
- const mark = {
403
- type: 'exponential',
404
- root: { x: 0, y: -5 },
405
- building: true,
406
- };
407
- const point = { x: 5, y: -10 };
408
- equalPoints.mockReturnValue(false);
409
- sameAxes.mockReturnValue(false);
410
-
411
- const result = exponentialTool.addPoint(point, mark);
412
-
413
- expect(result.edge).toEqual(point);
414
- expect(result.building).toBe(false);
415
- });
416
- });
417
-
418
- describe('zero y-coordinate handling', () => {
419
- it('returns same mark when point has y = 0', () => {
420
- const mark = {
421
- type: 'exponential',
422
- root: { x: 0, y: 5 },
423
- building: true,
424
- };
425
- const point = { x: 5, y: 0 };
426
- equalPoints.mockReturnValue(false);
427
- sameAxes.mockReturnValue(false);
428
-
429
- const result = exponentialTool.addPoint(point, mark);
430
-
431
- expect(result).toBe(mark);
432
- });
433
-
434
- it('prevents adding point with zero y', () => {
435
- const point = { x: 5, y: 0 };
436
- const mark = {
437
- type: 'exponential',
438
- root: { x: 1, y: 2 },
439
- building: true,
440
- };
441
- equalPoints.mockReturnValue(false);
442
- sameAxes.mockReturnValue(false);
443
-
444
- const result = exponentialTool.addPoint(point, mark);
445
-
446
- expect(result).toBe(mark);
447
- expect(result.edge).toBeUndefined();
448
- });
449
-
450
- it('prevents creating root with zero y', () => {
451
- const point = { x: 5, y: 0 };
452
- equalPoints.mockReturnValue(false);
453
- sameAxes.mockReturnValue(false);
454
-
455
- const result = exponentialTool.addPoint(point, null);
456
-
457
- expect(result).toBeNull();
458
- });
459
-
460
- it('allows positive y values close to zero', () => {
461
- const point = { x: 5, y: 0.001 };
462
- equalPoints.mockReturnValue(false);
463
- sameAxes.mockReturnValue(false);
464
-
465
- const result = exponentialTool.addPoint(point, null);
466
-
467
- expect(result.root).toEqual(point);
468
- });
469
-
470
- it('allows negative y values close to zero', () => {
471
- const point = { x: 5, y: -0.001 };
472
- equalPoints.mockReturnValue(false);
473
- sameAxes.mockReturnValue(false);
474
-
475
- const result = exponentialTool.addPoint(point, null);
476
-
477
- expect(result.root).toEqual(point);
478
- });
479
- });
480
-
481
- describe('error handling', () => {
482
- it('throws error when mark has no root', () => {
483
- const mark = {
484
- type: 'exponential',
485
- building: true,
486
- // root is missing
487
- };
488
- const point = { x: 5, y: 10 };
489
- equalPoints.mockReturnValue(false);
490
- sameAxes.mockReturnValue(false);
491
-
492
- expect(() => {
493
- exponentialTool.addPoint(point, mark);
494
- }).toThrow(); // Will throw TypeError when accessing undefined.y
495
- });
496
-
497
- it('throws error when mark root is null', () => {
498
- const mark = {
499
- type: 'exponential',
500
- root: null,
501
- building: true,
502
- };
503
- const point = { x: 5, y: 10 };
504
- equalPoints.mockReturnValue(false);
505
- sameAxes.mockReturnValue(false);
506
-
507
- expect(() => {
508
- exponentialTool.addPoint(point, mark);
509
- }).toThrow(); // Will throw TypeError when accessing null.y
510
- });
511
-
512
- it('throws error when mark root is undefined', () => {
513
- const mark = {
514
- type: 'exponential',
515
- root: undefined,
516
- building: true,
517
- };
518
- const point = { x: 5, y: 10 };
519
- equalPoints.mockReturnValue(false);
520
- sameAxes.mockReturnValue(false);
521
-
522
- expect(() => {
523
- exponentialTool.addPoint(point, mark);
524
- }).toThrow(); // Will throw TypeError when accessing undefined.y
525
- });
526
- });
527
-
528
- describe('edge cases', () => {
529
- it('handles undefined mark on first click', () => {
530
- const point = { x: 5, y: 10 };
531
- equalPoints.mockReturnValue(false);
532
- sameAxes.mockReturnValue(false);
533
-
534
- const result = exponentialTool.addPoint(point, undefined);
535
-
536
- expect(result.type).toBe('exponential');
537
- expect(result.root).toEqual(point);
538
- expect(result.building).toBe(true);
539
- });
540
-
541
- it('handles very large positive y', () => {
542
- const point = { x: 5, y: 10000 };
543
- equalPoints.mockReturnValue(false);
544
- sameAxes.mockReturnValue(false);
545
-
546
- const result = exponentialTool.addPoint(point, null);
547
-
548
- expect(result.root).toEqual(point);
549
- });
550
-
551
- it('handles very large negative y', () => {
552
- const point = { x: 5, y: -10000 };
553
- equalPoints.mockReturnValue(false);
554
- sameAxes.mockReturnValue(false);
555
-
556
- const result = exponentialTool.addPoint(point, null);
557
-
558
- expect(result.root).toEqual(point);
559
- });
560
-
561
- it('handles negative x coordinates', () => {
562
- const point = { x: -5, y: 10 };
563
- equalPoints.mockReturnValue(false);
564
- sameAxes.mockReturnValue(false);
565
-
566
- const result = exponentialTool.addPoint(point, null);
567
-
568
- expect(result.root).toEqual(point);
569
- });
570
-
571
- it('handles mark with existing edge', () => {
572
- const mark = {
573
- type: 'exponential',
574
- root: { x: 0, y: 1 },
575
- edge: { x: 3, y: 3 },
576
- building: false,
577
- closed: true,
578
- };
579
- const newEdge = { x: 5, y: 5 };
580
- equalPoints.mockReturnValue(false);
581
- sameAxes.mockReturnValue(false);
582
-
583
- const result = exponentialTool.addPoint(newEdge, mark);
584
-
585
- expect(result.edge).toEqual(newEdge);
586
- expect(result.closed).toBe(true);
587
- expect(result.building).toBe(false);
588
- });
589
- });
590
-
591
- describe('immutability', () => {
592
- it('does not mutate original mark when adding edge', () => {
593
- const mark = {
594
- type: 'exponential',
595
- root: { x: 0, y: 1 },
596
- building: true,
597
- };
598
- const originalMark = { ...mark };
599
- const point = { x: 5, y: 10 };
600
- equalPoints.mockReturnValue(false);
601
- sameAxes.mockReturnValue(false);
602
-
603
- const result = exponentialTool.addPoint(point, mark);
604
-
605
- expect(mark).toEqual(originalMark);
606
- expect(result).not.toBe(mark);
607
- });
608
-
609
- it('does not mutate original mark when returning same', () => {
610
- const mark = {
611
- type: 'exponential',
612
- root: { x: 5, y: 10 },
613
- building: true,
614
- };
615
- const point = { x: 5, y: 10 };
616
- equalPoints.mockReturnValue(true);
617
-
618
- const result = exponentialTool.addPoint(point, mark);
619
-
620
- expect(result).toBe(mark);
621
- });
622
- });
623
- });
624
-
625
- describe('integration scenarios', () => {
626
- it('handles full exponential creation flow', () => {
627
- equalPoints.mockReturnValue(false);
628
- sameAxes.mockReturnValue(false);
629
-
630
- // First click - create root
631
- const firstPoint = { x: 0, y: 1 };
632
- const mark1 = exponentialTool.addPoint(firstPoint, null);
633
- expect(mark1.root).toEqual(firstPoint);
634
- expect(mark1.building).toBe(true);
635
- expect(mark1.closed).toBe(false);
636
-
637
- // Second click - complete exponential
638
- const secondPoint = { x: 5, y: 10 };
639
- const mark2 = exponentialTool.addPoint(secondPoint, mark1);
640
- expect(mark2.root).toEqual(firstPoint);
641
- expect(mark2.edge).toEqual(secondPoint);
642
- expect(mark2.building).toBe(false);
643
- expect(mark2.closed).toBe(true);
644
-
645
- // Complete
646
- const mark3 = exponentialTool.complete({}, mark2);
647
- expect(mark3.building).toBe(false);
648
- expect(mark3.closed).toBe(true);
649
- });
650
-
651
- it('handles rejected second point (zero y)', () => {
652
- equalPoints.mockReturnValue(false);
653
- sameAxes.mockReturnValue(false);
654
-
655
- const firstPoint = { x: 0, y: 1 };
656
- const mark1 = exponentialTool.addPoint(firstPoint, null);
657
-
658
- const secondPoint = { x: 5, y: 0 };
659
- const mark2 = exponentialTool.addPoint(secondPoint, mark1);
660
-
661
- // Should return unchanged mark
662
- expect(mark2).toBe(mark1);
663
- expect(mark2.edge).toBeUndefined();
664
- });
665
-
666
- it('handles rejected second point (opposite sign)', () => {
667
- equalPoints.mockReturnValue(false);
668
- sameAxes.mockReturnValue(false);
669
-
670
- const firstPoint = { x: 0, y: 5 };
671
- const mark1 = exponentialTool.addPoint(firstPoint, null);
672
-
673
- const secondPoint = { x: 5, y: -10 };
674
- const mark2 = exponentialTool.addPoint(secondPoint, mark1);
675
-
676
- // Should return unchanged mark
677
- expect(mark2).toBe(mark1);
678
- expect(mark2.edge).toBeUndefined();
679
- });
680
-
681
- it('handles rejected second point (same axes)', () => {
682
- equalPoints.mockReturnValue(false);
683
- sameAxes.mockReturnValue(true);
684
-
685
- const firstPoint = { x: 0, y: 5 };
686
- const mark1 = exponentialTool.addPoint(firstPoint, null);
687
-
688
- const secondPoint = { x: 10, y: 5 }; // same y
689
- const mark2 = exponentialTool.addPoint(secondPoint, mark1);
690
-
691
- // Should return unchanged mark
692
- expect(mark2).toBe(mark1);
693
- });
694
-
695
- it('handles exponential with negative y values', () => {
696
- equalPoints.mockReturnValue(false);
697
- sameAxes.mockReturnValue(false);
698
-
699
- const firstPoint = { x: 0, y: -1 };
700
- const mark1 = exponentialTool.addPoint(firstPoint, null);
701
-
702
- const secondPoint = { x: 5, y: -10 };
703
- const mark2 = exponentialTool.addPoint(secondPoint, mark1);
704
-
705
- expect(mark2.root).toEqual(firstPoint);
706
- expect(mark2.edge).toEqual(secondPoint);
707
- expect(mark2.building).toBe(false);
708
- expect(mark2.closed).toBe(true);
709
- });
710
-
711
- it('handles exponential with properties', () => {
712
- equalPoints.mockReturnValue(false);
713
- sameAxes.mockReturnValue(false);
714
-
715
- const firstPoint = { x: 0, y: 1, label: 'Start' };
716
- const mark1 = exponentialTool.addPoint(firstPoint, null);
717
-
718
- // Add properties
719
- mark1.label = 'Exp A';
720
- mark1.correctness = { value: 'correct' };
721
-
722
- const secondPoint = { x: 5, y: 10 };
723
- const mark2 = exponentialTool.addPoint(secondPoint, mark1);
724
-
725
- expect(mark2.label).toBe('Exp A');
726
- expect(mark2.correctness).toEqual({ value: 'correct' });
727
- });
728
- });
729
- });