@pie-lib/graphing 4.1.0-beta.7 → 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 (505) 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/__tests__/bg.test.js +0 -282
  174. package/lib/__tests__/bg.test.js.map +0 -1
  175. package/lib/__tests__/coordinates-label.test.js +0 -276
  176. package/lib/__tests__/coordinates-label.test.js.map +0 -1
  177. package/lib/__tests__/graph-with-controls.test.js +0 -275
  178. package/lib/__tests__/graph-with-controls.test.js.map +0 -1
  179. package/lib/__tests__/graph.test.js +0 -927
  180. package/lib/__tests__/graph.test.js.map +0 -1
  181. package/lib/__tests__/grid-setup.test.js +0 -729
  182. package/lib/__tests__/grid-setup.test.js.map +0 -1
  183. package/lib/__tests__/grid.test.js +0 -29
  184. package/lib/__tests__/grid.test.js.map +0 -1
  185. package/lib/__tests__/key-legend.test.js +0 -321
  186. package/lib/__tests__/key-legend.test.js.map +0 -1
  187. package/lib/__tests__/label-svg-icon.test.js +0 -373
  188. package/lib/__tests__/label-svg-icon.test.js.map +0 -1
  189. package/lib/__tests__/labels.test.js +0 -61
  190. package/lib/__tests__/labels.test.js.map +0 -1
  191. package/lib/__tests__/mark-label.test.js +0 -133
  192. package/lib/__tests__/mark-label.test.js.map +0 -1
  193. package/lib/__tests__/toggle-bar.test.js +0 -197
  194. package/lib/__tests__/toggle-bar.test.js.map +0 -1
  195. package/lib/__tests__/tool-menu.test.js +0 -151
  196. package/lib/__tests__/tool-menu.test.js.map +0 -1
  197. package/lib/__tests__/undo-redo.test.js +0 -31
  198. package/lib/__tests__/undo-redo.test.js.map +0 -1
  199. package/lib/__tests__/use-debounce.test.js +0 -24
  200. package/lib/__tests__/use-debounce.test.js.map +0 -1
  201. package/lib/__tests__/utils.js +0 -70
  202. package/lib/__tests__/utils.js.map +0 -1
  203. package/lib/__tests__/utils.test.js +0 -123
  204. package/lib/__tests__/utils.test.js.map +0 -1
  205. package/lib/axis/__tests__/arrow.test.js +0 -60
  206. package/lib/axis/__tests__/arrow.test.js.map +0 -1
  207. package/lib/axis/__tests__/axes.test.js +0 -195
  208. package/lib/axis/__tests__/axes.test.js.map +0 -1
  209. package/lib/axis/arrow.js +0 -79
  210. package/lib/axis/arrow.js.map +0 -1
  211. package/lib/axis/axes.js +0 -329
  212. package/lib/axis/axes.js.map +0 -1
  213. package/lib/axis/index.js +0 -21
  214. package/lib/axis/index.js.map +0 -1
  215. package/lib/bg.js +0 -114
  216. package/lib/bg.js.map +0 -1
  217. package/lib/container/__tests__/actions.test.js +0 -108
  218. package/lib/container/__tests__/actions.test.js.map +0 -1
  219. package/lib/container/__tests__/index.test.js +0 -503
  220. package/lib/container/__tests__/index.test.js.map +0 -1
  221. package/lib/container/__tests__/marks.test.js +0 -259
  222. package/lib/container/__tests__/marks.test.js.map +0 -1
  223. package/lib/container/__tests__/middleware.test.js +0 -244
  224. package/lib/container/__tests__/middleware.test.js.map +0 -1
  225. package/lib/container/__tests__/reducer.test.js +0 -450
  226. package/lib/container/__tests__/reducer.test.js.map +0 -1
  227. package/lib/container/actions.js +0 -18
  228. package/lib/container/actions.js.map +0 -1
  229. package/lib/container/index.js +0 -127
  230. package/lib/container/index.js.map +0 -1
  231. package/lib/container/marks.js +0 -22
  232. package/lib/container/marks.js.map +0 -1
  233. package/lib/container/middleware.js +0 -19
  234. package/lib/container/middleware.js.map +0 -1
  235. package/lib/container/reducer.js +0 -18
  236. package/lib/container/reducer.js.map +0 -1
  237. package/lib/coordinates-label.js +0 -79
  238. package/lib/coordinates-label.js.map +0 -1
  239. package/lib/graph-with-controls.js +0 -294
  240. package/lib/graph-with-controls.js.map +0 -1
  241. package/lib/graph.js +0 -327
  242. package/lib/graph.js.map +0 -1
  243. package/lib/grid-setup.js +0 -414
  244. package/lib/grid-setup.js.map +0 -1
  245. package/lib/grid.js +0 -131
  246. package/lib/grid.js.map +0 -1
  247. package/lib/index.js +0 -47
  248. package/lib/index.js.map +0 -1
  249. package/lib/key-legend.js +0 -201
  250. package/lib/key-legend.js.map +0 -1
  251. package/lib/label-svg-icon.js +0 -50
  252. package/lib/label-svg-icon.js.map +0 -1
  253. package/lib/labels.js +0 -243
  254. package/lib/labels.js.map +0 -1
  255. package/lib/mark-label.js +0 -285
  256. package/lib/mark-label.js.map +0 -1
  257. package/lib/toggle-bar.js +0 -252
  258. package/lib/toggle-bar.js.map +0 -1
  259. package/lib/tool-menu.js +0 -78
  260. package/lib/tool-menu.js.map +0 -1
  261. package/lib/tools/absolute/__tests__/component.test.js +0 -65
  262. package/lib/tools/absolute/__tests__/component.test.js.map +0 -1
  263. package/lib/tools/absolute/component.js +0 -29
  264. package/lib/tools/absolute/component.js.map +0 -1
  265. package/lib/tools/absolute/index.js +0 -50
  266. package/lib/tools/absolute/index.js.map +0 -1
  267. package/lib/tools/circle/__tests__/bg-circle.test.js +0 -33
  268. package/lib/tools/circle/__tests__/bg-circle.test.js.map +0 -1
  269. package/lib/tools/circle/__tests__/component.test.js +0 -615
  270. package/lib/tools/circle/__tests__/component.test.js.map +0 -1
  271. package/lib/tools/circle/__tests__/index.test.js +0 -576
  272. package/lib/tools/circle/__tests__/index.test.js.map +0 -1
  273. package/lib/tools/circle/bg-circle.js +0 -123
  274. package/lib/tools/circle/bg-circle.js.map +0 -1
  275. package/lib/tools/circle/component.js +0 -321
  276. package/lib/tools/circle/component.js.map +0 -1
  277. package/lib/tools/circle/index.js +0 -41
  278. package/lib/tools/circle/index.js.map +0 -1
  279. package/lib/tools/exponential/__tests__/component.test.js +0 -64
  280. package/lib/tools/exponential/__tests__/component.test.js.map +0 -1
  281. package/lib/tools/exponential/__tests__/index.test.js +0 -828
  282. package/lib/tools/exponential/__tests__/index.test.js.map +0 -1
  283. package/lib/tools/exponential/component.js +0 -28
  284. package/lib/tools/exponential/component.js.map +0 -1
  285. package/lib/tools/exponential/index.js +0 -56
  286. package/lib/tools/exponential/index.js.map +0 -1
  287. package/lib/tools/index.js +0 -86
  288. package/lib/tools/index.js.map +0 -1
  289. package/lib/tools/line/__tests__/component.test.js +0 -45
  290. package/lib/tools/line/__tests__/component.test.js.map +0 -1
  291. package/lib/tools/line/component.js +0 -97
  292. package/lib/tools/line/component.js.map +0 -1
  293. package/lib/tools/line/index.js +0 -11
  294. package/lib/tools/line/index.js.map +0 -1
  295. package/lib/tools/parabola/__tests__/component.test.js +0 -64
  296. package/lib/tools/parabola/__tests__/component.test.js.map +0 -1
  297. package/lib/tools/parabola/__tests__/index.test.js +0 -564
  298. package/lib/tools/parabola/__tests__/index.test.js.map +0 -1
  299. package/lib/tools/parabola/component.js +0 -28
  300. package/lib/tools/parabola/component.js.map +0 -1
  301. package/lib/tools/parabola/index.js +0 -50
  302. package/lib/tools/parabola/index.js.map +0 -1
  303. package/lib/tools/point/__tests__/component.test.js +0 -434
  304. package/lib/tools/point/__tests__/component.test.js.map +0 -1
  305. package/lib/tools/point/__tests__/index.test.js +0 -262
  306. package/lib/tools/point/__tests__/index.test.js.map +0 -1
  307. package/lib/tools/point/component.js +0 -148
  308. package/lib/tools/point/component.js.map +0 -1
  309. package/lib/tools/point/index.js +0 -24
  310. package/lib/tools/point/index.js.map +0 -1
  311. package/lib/tools/polygon/__tests__/component.test.js +0 -485
  312. package/lib/tools/polygon/__tests__/component.test.js.map +0 -1
  313. package/lib/tools/polygon/__tests__/index.test.js +0 -303
  314. package/lib/tools/polygon/__tests__/index.test.js.map +0 -1
  315. package/lib/tools/polygon/__tests__/line.test.js +0 -50
  316. package/lib/tools/polygon/__tests__/line.test.js.map +0 -1
  317. package/lib/tools/polygon/__tests__/polygon.test.js +0 -85
  318. package/lib/tools/polygon/__tests__/polygon.test.js.map +0 -1
  319. package/lib/tools/polygon/component.js +0 -437
  320. package/lib/tools/polygon/component.js.map +0 -1
  321. package/lib/tools/polygon/index.js +0 -89
  322. package/lib/tools/polygon/index.js.map +0 -1
  323. package/lib/tools/polygon/line.js +0 -112
  324. package/lib/tools/polygon/line.js.map +0 -1
  325. package/lib/tools/polygon/polygon.js +0 -130
  326. package/lib/tools/polygon/polygon.js.map +0 -1
  327. package/lib/tools/ray/__tests__/component.test.js +0 -35
  328. package/lib/tools/ray/__tests__/component.test.js.map +0 -1
  329. package/lib/tools/ray/component.js +0 -95
  330. package/lib/tools/ray/component.js.map +0 -1
  331. package/lib/tools/ray/index.js +0 -11
  332. package/lib/tools/ray/index.js.map +0 -1
  333. package/lib/tools/segment/__tests__/component.test.js +0 -35
  334. package/lib/tools/segment/__tests__/component.test.js.map +0 -1
  335. package/lib/tools/segment/component.js +0 -71
  336. package/lib/tools/segment/component.js.map +0 -1
  337. package/lib/tools/segment/index.js +0 -11
  338. package/lib/tools/segment/index.js.map +0 -1
  339. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
  340. package/lib/tools/shared/__tests__/arrow-head.test.js.map +0 -1
  341. package/lib/tools/shared/arrow-head.js +0 -111
  342. package/lib/tools/shared/arrow-head.js.map +0 -1
  343. package/lib/tools/shared/icons/CorrectSVG.js +0 -40
  344. package/lib/tools/shared/icons/CorrectSVG.js.map +0 -1
  345. package/lib/tools/shared/icons/IncorrectSVG.js +0 -40
  346. package/lib/tools/shared/icons/IncorrectSVG.js.map +0 -1
  347. package/lib/tools/shared/icons/MissingSVG.js +0 -39
  348. package/lib/tools/shared/icons/MissingSVG.js.map +0 -1
  349. package/lib/tools/shared/line/__tests__/index.test.js +0 -124
  350. package/lib/tools/shared/line/__tests__/index.test.js.map +0 -1
  351. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -62
  352. package/lib/tools/shared/line/__tests__/line-path.test.js.map +0 -1
  353. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -90
  354. package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +0 -1
  355. package/lib/tools/shared/line/index.js +0 -550
  356. package/lib/tools/shared/line/index.js.map +0 -1
  357. package/lib/tools/shared/line/line-path.js +0 -118
  358. package/lib/tools/shared/line/line-path.js.map +0 -1
  359. package/lib/tools/shared/line/with-root-edge.js +0 -121
  360. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  361. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
  362. package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +0 -1
  363. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
  364. package/lib/tools/shared/point/__tests__/base-point.test.js.map +0 -1
  365. package/lib/tools/shared/point/arrow-point.js +0 -72
  366. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  367. package/lib/tools/shared/point/arrow.js +0 -67
  368. package/lib/tools/shared/point/arrow.js.map +0 -1
  369. package/lib/tools/shared/point/base-point.js +0 -157
  370. package/lib/tools/shared/point/base-point.js.map +0 -1
  371. package/lib/tools/shared/point/index.js +0 -68
  372. package/lib/tools/shared/point/index.js.map +0 -1
  373. package/lib/tools/shared/styles.js +0 -33
  374. package/lib/tools/shared/styles.js.map +0 -1
  375. package/lib/tools/shared/types.js +0 -16
  376. package/lib/tools/shared/types.js.map +0 -1
  377. package/lib/tools/sine/__tests__/component.test.js +0 -72
  378. package/lib/tools/sine/__tests__/component.test.js.map +0 -1
  379. package/lib/tools/sine/component.js +0 -40
  380. package/lib/tools/sine/component.js.map +0 -1
  381. package/lib/tools/sine/index.js +0 -50
  382. package/lib/tools/sine/index.js.map +0 -1
  383. package/lib/tools/vector/__tests__/component.test.js +0 -32
  384. package/lib/tools/vector/__tests__/component.test.js.map +0 -1
  385. package/lib/tools/vector/component.js +0 -68
  386. package/lib/tools/vector/component.js.map +0 -1
  387. package/lib/tools/vector/index.js +0 -11
  388. package/lib/tools/vector/index.js.map +0 -1
  389. package/lib/undo-redo.js +0 -86
  390. package/lib/undo-redo.js.map +0 -1
  391. package/lib/use-debounce.js +0 -25
  392. package/lib/use-debounce.js.map +0 -1
  393. package/lib/utils.js +0 -229
  394. package/lib/utils.js.map +0 -1
  395. package/src/__tests__/bg.test.jsx +0 -250
  396. package/src/__tests__/coordinates-label.test.jsx +0 -243
  397. package/src/__tests__/graph-with-controls.test.jsx +0 -198
  398. package/src/__tests__/graph.test.jsx +0 -721
  399. package/src/__tests__/grid-setup.test.jsx +0 -645
  400. package/src/__tests__/grid.test.jsx +0 -22
  401. package/src/__tests__/key-legend.test.jsx +0 -260
  402. package/src/__tests__/label-svg-icon.test.jsx +0 -278
  403. package/src/__tests__/labels.test.jsx +0 -55
  404. package/src/__tests__/mark-label.test.jsx +0 -63
  405. package/src/__tests__/toggle-bar.test.jsx +0 -146
  406. package/src/__tests__/tool-menu.test.jsx +0 -115
  407. package/src/__tests__/undo-redo.test.jsx +0 -24
  408. package/src/__tests__/use-debounce.test.js +0 -21
  409. package/src/__tests__/utils.js +0 -41
  410. package/src/__tests__/utils.test.js +0 -105
  411. package/src/axis/__tests__/arrow.test.jsx +0 -38
  412. package/src/axis/__tests__/axes.test.jsx +0 -216
  413. package/src/axis/arrow.jsx +0 -57
  414. package/src/axis/axes.jsx +0 -285
  415. package/src/axis/index.js +0 -3
  416. package/src/bg.jsx +0 -96
  417. package/src/container/__tests__/actions.test.js +0 -105
  418. package/src/container/__tests__/index.test.jsx +0 -319
  419. package/src/container/__tests__/marks.test.js +0 -172
  420. package/src/container/__tests__/middleware.test.js +0 -235
  421. package/src/container/__tests__/reducer.test.js +0 -324
  422. package/src/container/actions.js +0 -8
  423. package/src/container/index.jsx +0 -91
  424. package/src/container/marks.js +0 -14
  425. package/src/container/middleware.js +0 -7
  426. package/src/container/reducer.js +0 -5
  427. package/src/coordinates-label.jsx +0 -63
  428. package/src/graph-with-controls.jsx +0 -239
  429. package/src/graph.jsx +0 -303
  430. package/src/grid-setup.jsx +0 -432
  431. package/src/grid.jsx +0 -133
  432. package/src/index.js +0 -7
  433. package/src/key-legend.jsx +0 -142
  434. package/src/label-svg-icon.jsx +0 -39
  435. package/src/labels.jsx +0 -207
  436. package/src/mark-label.jsx +0 -244
  437. package/src/toggle-bar.jsx +0 -224
  438. package/src/tool-menu.jsx +0 -49
  439. package/src/tools/absolute/__tests__/component.test.jsx +0 -53
  440. package/src/tools/absolute/component.jsx +0 -23
  441. package/src/tools/absolute/index.js +0 -31
  442. package/src/tools/circle/__tests__/bg-circle.test.jsx +0 -26
  443. package/src/tools/circle/__tests__/component.test.jsx +0 -494
  444. package/src/tools/circle/__tests__/index.test.js +0 -480
  445. package/src/tools/circle/bg-circle.jsx +0 -81
  446. package/src/tools/circle/component.jsx +0 -264
  447. package/src/tools/circle/index.js +0 -25
  448. package/src/tools/exponential/__tests__/component.test.jsx +0 -53
  449. package/src/tools/exponential/__tests__/index.test.js +0 -729
  450. package/src/tools/exponential/component.jsx +0 -23
  451. package/src/tools/exponential/index.js +0 -39
  452. package/src/tools/index.js +0 -48
  453. package/src/tools/line/__tests__/component.test.jsx +0 -37
  454. package/src/tools/line/component.jsx +0 -93
  455. package/src/tools/line/index.js +0 -4
  456. package/src/tools/parabola/__tests__/component.test.jsx +0 -48
  457. package/src/tools/parabola/__tests__/index.test.js +0 -470
  458. package/src/tools/parabola/component.jsx +0 -23
  459. package/src/tools/parabola/index.js +0 -31
  460. package/src/tools/point/__tests__/component.test.jsx +0 -349
  461. package/src/tools/point/__tests__/index.test.js +0 -241
  462. package/src/tools/point/component.jsx +0 -126
  463. package/src/tools/point/index.js +0 -11
  464. package/src/tools/polygon/__tests__/component.test.jsx +0 -471
  465. package/src/tools/polygon/__tests__/index.test.js +0 -294
  466. package/src/tools/polygon/__tests__/line.test.jsx +0 -35
  467. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -61
  468. package/src/tools/polygon/component.jsx +0 -409
  469. package/src/tools/polygon/index.js +0 -52
  470. package/src/tools/polygon/line.jsx +0 -74
  471. package/src/tools/polygon/polygon.jsx +0 -110
  472. package/src/tools/ray/__tests__/component.test.jsx +0 -29
  473. package/src/tools/ray/component.jsx +0 -92
  474. package/src/tools/ray/index.js +0 -4
  475. package/src/tools/segment/__tests__/component.test.jsx +0 -28
  476. package/src/tools/segment/component.jsx +0 -65
  477. package/src/tools/segment/index.js +0 -4
  478. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -31
  479. package/src/tools/shared/arrow-head.jsx +0 -102
  480. package/src/tools/shared/icons/CorrectSVG.jsx +0 -32
  481. package/src/tools/shared/icons/IncorrectSVG.jsx +0 -30
  482. package/src/tools/shared/icons/MissingSVG.jsx +0 -31
  483. package/src/tools/shared/line/__tests__/index.test.jsx +0 -109
  484. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -53
  485. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -73
  486. package/src/tools/shared/line/index.jsx +0 -487
  487. package/src/tools/shared/line/line-path.jsx +0 -80
  488. package/src/tools/shared/line/with-root-edge.jsx +0 -97
  489. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  490. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  491. package/src/tools/shared/point/arrow-point.jsx +0 -46
  492. package/src/tools/shared/point/arrow.jsx +0 -37
  493. package/src/tools/shared/point/base-point.jsx +0 -121
  494. package/src/tools/shared/point/index.jsx +0 -54
  495. package/src/tools/shared/styles.js +0 -27
  496. package/src/tools/shared/types.js +0 -10
  497. package/src/tools/sine/__tests__/component.test.jsx +0 -51
  498. package/src/tools/sine/component.jsx +0 -32
  499. package/src/tools/sine/index.js +0 -33
  500. package/src/tools/vector/__tests__/component.test.jsx +0 -25
  501. package/src/tools/vector/component.jsx +0 -56
  502. package/src/tools/vector/index.js +0 -4
  503. package/src/undo-redo.jsx +0 -45
  504. package/src/use-debounce.js +0 -13
  505. 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
- });