@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,235 +0,0 @@
1
- import { getLastAction, lastActionMiddleware } from '../middleware';
2
-
3
- describe('lastActionMiddleware', () => {
4
- describe('middleware functionality', () => {
5
- it('creates middleware function', () => {
6
- const middleware = lastActionMiddleware();
7
- expect(typeof middleware).toBe('function');
8
- });
9
-
10
- it('middleware returns a function', () => {
11
- const middleware = lastActionMiddleware();
12
- const next = jest.fn();
13
- const result = middleware(next);
14
- expect(typeof result).toBe('function');
15
- });
16
-
17
- it('calls next with action', () => {
18
- const middleware = lastActionMiddleware();
19
- const next = jest.fn();
20
- const dispatch = middleware(next);
21
- const action = { type: 'TEST_ACTION' };
22
-
23
- dispatch(action);
24
- expect(next).toHaveBeenCalledWith(action);
25
- });
26
-
27
- it('returns result from next', () => {
28
- const middleware = lastActionMiddleware();
29
- const expectedResult = { status: 'success' };
30
- const next = jest.fn(() => expectedResult);
31
- const dispatch = middleware(next);
32
- const action = { type: 'TEST_ACTION' };
33
-
34
- const result = dispatch(action);
35
- expect(result).toBe(expectedResult);
36
- });
37
-
38
- it('stores action before calling next', () => {
39
- const middleware = lastActionMiddleware();
40
- const next = jest.fn(() => {
41
- const lastAction = getLastAction();
42
- expect(lastAction).toBeDefined();
43
- expect(lastAction.type).toBe('TEST_ACTION');
44
- });
45
- const dispatch = middleware(next);
46
- const action = { type: 'TEST_ACTION' };
47
-
48
- dispatch(action);
49
- expect(next).toHaveBeenCalled();
50
- });
51
- });
52
-
53
- describe('getLastAction', () => {
54
- it('returns null initially', () => {
55
- const lastAction = getLastAction();
56
- expect(lastAction).toBeDefined();
57
- });
58
-
59
- it('returns last dispatched action', () => {
60
- const middleware = lastActionMiddleware();
61
- const next = jest.fn();
62
- const dispatch = middleware(next);
63
- const action = { type: 'MY_ACTION', payload: 'test' };
64
-
65
- dispatch(action);
66
- const lastAction = getLastAction();
67
-
68
- expect(lastAction).toEqual(action);
69
- expect(lastAction.type).toBe('MY_ACTION');
70
- expect(lastAction.payload).toBe('test');
71
- });
72
-
73
- it('updates when new action is dispatched', () => {
74
- const middleware = lastActionMiddleware();
75
- const next = jest.fn();
76
- const dispatch = middleware(next);
77
-
78
- const action1 = { type: 'ACTION_1' };
79
- dispatch(action1);
80
- expect(getLastAction()).toEqual(action1);
81
-
82
- const action2 = { type: 'ACTION_2' };
83
- dispatch(action2);
84
- expect(getLastAction()).toEqual(action2);
85
- });
86
-
87
- it('stores action with payload', () => {
88
- const middleware = lastActionMiddleware();
89
- const next = jest.fn();
90
- const dispatch = middleware(next);
91
- const action = {
92
- type: 'CHANGE_MARKS',
93
- marks: [{ id: 1, type: 'point' }],
94
- };
95
-
96
- dispatch(action);
97
- const lastAction = getLastAction();
98
-
99
- expect(lastAction.marks).toEqual(action.marks);
100
- expect(lastAction.marks.length).toBe(1);
101
- });
102
-
103
- it('stores action with complex payload', () => {
104
- const middleware = lastActionMiddleware();
105
- const next = jest.fn();
106
- const dispatch = middleware(next);
107
- const action = {
108
- type: 'COMPLEX_ACTION',
109
- data: {
110
- nested: {
111
- value: 123,
112
- array: [1, 2, 3],
113
- },
114
- },
115
- };
116
-
117
- dispatch(action);
118
- const lastAction = getLastAction();
119
-
120
- expect(lastAction.data.nested.value).toBe(123);
121
- expect(lastAction.data.nested.array).toEqual([1, 2, 3]);
122
- });
123
- });
124
-
125
- describe('action storage', () => {
126
- it('overwrites previous action', () => {
127
- const middleware = lastActionMiddleware();
128
- const next = jest.fn();
129
- const dispatch = middleware(next);
130
-
131
- dispatch({ type: 'FIRST' });
132
- dispatch({ type: 'SECOND' });
133
- dispatch({ type: 'THIRD' });
134
-
135
- const lastAction = getLastAction();
136
- expect(lastAction.type).toBe('THIRD');
137
- });
138
-
139
- it('stores reference to action object', () => {
140
- const middleware = lastActionMiddleware();
141
- const next = jest.fn();
142
- const dispatch = middleware(next);
143
- const action = { type: 'TEST', data: { value: 1 } };
144
-
145
- dispatch(action);
146
- const lastAction = getLastAction();
147
-
148
- // Modify original action
149
- action.data.value = 2;
150
-
151
- // Last action should reflect the change (same reference)
152
- expect(lastAction.data.value).toBe(2);
153
- });
154
- });
155
-
156
- describe('integration scenarios', () => {
157
- it('works with multiple middleware calls', () => {
158
- const middleware = lastActionMiddleware();
159
- const next1 = jest.fn();
160
- const next2 = jest.fn();
161
-
162
- const dispatch1 = middleware(next1);
163
- const dispatch2 = middleware(next2);
164
-
165
- dispatch1({ type: 'ACTION_1' });
166
- expect(getLastAction().type).toBe('ACTION_1');
167
-
168
- dispatch2({ type: 'ACTION_2' });
169
- expect(getLastAction().type).toBe('ACTION_2');
170
- });
171
-
172
- it('preserves action types', () => {
173
- const middleware = lastActionMiddleware();
174
- const next = jest.fn();
175
- const dispatch = middleware(next);
176
-
177
- const actionTypes = ['ADD_MARK', 'CHANGE_MARKS', 'DELETE_MARK', 'UPDATE_MARK'];
178
-
179
- actionTypes.forEach((type) => {
180
- dispatch({ type });
181
- expect(getLastAction().type).toBe(type);
182
- });
183
- });
184
-
185
- it('handles actions without type', () => {
186
- const middleware = lastActionMiddleware();
187
- const next = jest.fn();
188
- const dispatch = middleware(next);
189
- const action = { payload: 'data' };
190
-
191
- dispatch(action);
192
- const lastAction = getLastAction();
193
-
194
- expect(lastAction).toEqual(action);
195
- expect(lastAction.type).toBeUndefined();
196
- });
197
-
198
- it('handles empty action object', () => {
199
- const middleware = lastActionMiddleware();
200
- const next = jest.fn();
201
- const dispatch = middleware(next);
202
- const action = {};
203
-
204
- dispatch(action);
205
- const lastAction = getLastAction();
206
-
207
- expect(lastAction).toEqual(action);
208
- });
209
- });
210
-
211
- describe('error handling', () => {
212
- it('stores action even if next throws error', () => {
213
- const middleware = lastActionMiddleware();
214
- const next = jest.fn(() => {
215
- throw new Error('Next error');
216
- });
217
- const dispatch = middleware(next);
218
- const action = { type: 'ERROR_ACTION' };
219
-
220
- expect(() => dispatch(action)).toThrow('Next error');
221
- expect(getLastAction()).toEqual(action);
222
- });
223
-
224
- it('propagates errors from next', () => {
225
- const middleware = lastActionMiddleware();
226
- const errorMessage = 'Test error';
227
- const next = jest.fn(() => {
228
- throw new Error(errorMessage);
229
- });
230
- const dispatch = middleware(next);
231
-
232
- expect(() => dispatch({ type: 'TEST' })).toThrow(errorMessage);
233
- });
234
- });
235
- });
@@ -1,324 +0,0 @@
1
- import reducer from '../reducer';
2
- import { changeMarks } from '../actions';
3
-
4
- describe('container reducer', () => {
5
- describe('reducer creation', () => {
6
- it('creates a reducer function', () => {
7
- const rootReducer = reducer();
8
- expect(typeof rootReducer).toBe('function');
9
- });
10
-
11
- it('returns an object with marks property', () => {
12
- const rootReducer = reducer();
13
- const state = rootReducer(undefined, { type: 'INIT' });
14
- expect(state).toHaveProperty('marks');
15
- });
16
-
17
- it('wraps marks reducer with undoable', () => {
18
- const rootReducer = reducer();
19
- const state = rootReducer(undefined, { type: 'INIT' });
20
-
21
- expect(state.marks).toHaveProperty('past');
22
- expect(state.marks).toHaveProperty('present');
23
- expect(state.marks).toHaveProperty('future');
24
- });
25
- });
26
-
27
- describe('initial state', () => {
28
- it('initializes with empty past', () => {
29
- const rootReducer = reducer();
30
- const state = rootReducer(undefined, { type: 'INIT' });
31
-
32
- expect(state.marks.past).toEqual([]);
33
- });
34
-
35
- it('initializes with empty present', () => {
36
- const rootReducer = reducer();
37
- const state = rootReducer(undefined, { type: 'INIT' });
38
-
39
- expect(state.marks.present).toEqual([]);
40
- });
41
-
42
- it('initializes with empty future', () => {
43
- const rootReducer = reducer();
44
- const state = rootReducer(undefined, { type: 'INIT' });
45
-
46
- expect(state.marks.future).toEqual([]);
47
- });
48
- });
49
-
50
- describe('CHANGE_MARKS action', () => {
51
- it('updates present with new marks', () => {
52
- const rootReducer = reducer();
53
- const newMarks = [{ id: 1, type: 'point', x: 5, y: 10 }];
54
- const action = changeMarks(newMarks);
55
-
56
- let state = rootReducer(undefined, { type: '@@INIT' });
57
- state = rootReducer(state, action);
58
-
59
- expect(state.marks.present).toEqual(newMarks);
60
- });
61
-
62
- it('adds previous state to past', () => {
63
- const rootReducer = reducer();
64
- const firstMarks = [{ id: 1, type: 'point' }];
65
- const secondMarks = [{ id: 2, type: 'line' }];
66
-
67
- let state = rootReducer(undefined, { type: '@@INIT' });
68
- state = rootReducer(state, changeMarks(firstMarks));
69
- state = rootReducer(state, changeMarks(secondMarks));
70
-
71
- expect(state.marks.past.length).toBeGreaterThan(0);
72
- expect(state.marks.present).toEqual(secondMarks);
73
- });
74
-
75
- it('clears future on new action', () => {
76
- const rootReducer = reducer();
77
- const firstMarks = [{ id: 1, type: 'point' }];
78
- const secondMarks = [{ id: 2, type: 'line' }];
79
- const thirdMarks = [{ id: 3, type: 'circle' }];
80
-
81
- let state = rootReducer(undefined, { type: '@@INIT' });
82
- state = rootReducer(state, changeMarks(firstMarks));
83
- state = rootReducer(state, changeMarks(secondMarks));
84
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
85
-
86
- expect(state.marks.future.length).toBeGreaterThan(0);
87
-
88
- state = rootReducer(state, changeMarks(thirdMarks));
89
- expect(state.marks.future).toEqual([]);
90
- });
91
-
92
- it('handles empty marks array', () => {
93
- const rootReducer = reducer();
94
- const action = changeMarks([]);
95
-
96
- let state = rootReducer(undefined, { type: '@@INIT' });
97
- state = rootReducer(state, action);
98
-
99
- expect(state.marks.present).toEqual([]);
100
- });
101
-
102
- it('handles multiple marks', () => {
103
- const rootReducer = reducer();
104
- const marks = [
105
- { id: 1, type: 'point', x: 1, y: 2 },
106
- { id: 2, type: 'line', from: { x: 0, y: 0 }, to: { x: 5, y: 5 } },
107
- { id: 3, type: 'circle', center: { x: 3, y: 3 }, radius: 2 },
108
- ];
109
- const action = changeMarks(marks);
110
-
111
- let state = rootReducer(undefined, { type: '@@INIT' });
112
- state = rootReducer(state, action);
113
-
114
- expect(state.marks.present).toEqual(marks);
115
- expect(state.marks.present.length).toBe(3);
116
- });
117
- });
118
-
119
- describe('undo functionality', () => {
120
- it('supports undo action', () => {
121
- const rootReducer = reducer();
122
- const firstMarks = [{ id: 1, type: 'point' }];
123
- const secondMarks = [{ id: 2, type: 'line' }];
124
-
125
- let state = rootReducer(undefined, { type: '@@INIT' });
126
- state = rootReducer(state, changeMarks(firstMarks));
127
- state = rootReducer(state, changeMarks(secondMarks));
128
-
129
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
130
-
131
- expect(state.marks.present).toEqual(firstMarks);
132
- });
133
-
134
- it('moves present to future on undo', () => {
135
- const rootReducer = reducer();
136
- const firstMarks = [{ id: 1, type: 'point' }];
137
- const secondMarks = [{ id: 2, type: 'line' }];
138
-
139
- let state = rootReducer(undefined, { type: '@@INIT' });
140
- state = rootReducer(state, changeMarks(firstMarks));
141
- state = rootReducer(state, changeMarks(secondMarks));
142
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
143
-
144
- expect(state.marks.future.length).toBeGreaterThan(0);
145
- });
146
-
147
- it('handles multiple undos', () => {
148
- const rootReducer = reducer();
149
- const marks1 = [{ id: 1 }];
150
- const marks2 = [{ id: 2 }];
151
- const marks3 = [{ id: 3 }];
152
-
153
- let state = rootReducer(undefined, { type: '@@INIT' });
154
- state = rootReducer(state, changeMarks(marks1));
155
- state = rootReducer(state, changeMarks(marks2));
156
- state = rootReducer(state, changeMarks(marks3));
157
-
158
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
159
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
160
-
161
- expect(state.marks.present).toEqual(marks1);
162
- });
163
-
164
- it('does not undo beyond initial state', () => {
165
- const rootReducer = reducer();
166
- const marks = [{ id: 1, type: 'point' }];
167
-
168
- let state = rootReducer(undefined, { type: '@@INIT' });
169
- state = rootReducer(state, changeMarks(marks));
170
-
171
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
172
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
173
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
174
-
175
- expect(state.marks.present).toEqual([]);
176
- expect(state.marks.past).toEqual([]);
177
- });
178
- });
179
-
180
- describe('redo functionality', () => {
181
- it('supports redo action', () => {
182
- const rootReducer = reducer();
183
- const firstMarks = [{ id: 1, type: 'point' }];
184
- const secondMarks = [{ id: 2, type: 'line' }];
185
-
186
- let state = rootReducer(undefined, { type: '@@INIT' });
187
- state = rootReducer(state, changeMarks(firstMarks));
188
- state = rootReducer(state, changeMarks(secondMarks));
189
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
190
-
191
- // Redo
192
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
193
-
194
- expect(state.marks.present).toEqual(secondMarks);
195
- });
196
-
197
- it('moves future to past on redo', () => {
198
- const rootReducer = reducer();
199
- const firstMarks = [{ id: 1, type: 'point' }];
200
- const secondMarks = [{ id: 2, type: 'line' }];
201
-
202
- let state = rootReducer(undefined, { type: '@@INIT' });
203
- state = rootReducer(state, changeMarks(firstMarks));
204
- state = rootReducer(state, changeMarks(secondMarks));
205
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
206
-
207
- const futureBeforeRedo = state.marks.future.length;
208
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
209
-
210
- expect(state.marks.future.length).toBe(futureBeforeRedo - 1);
211
- });
212
-
213
- it('handles multiple redos', () => {
214
- const rootReducer = reducer();
215
- const marks1 = [{ id: 1 }];
216
- const marks2 = [{ id: 2 }];
217
- const marks3 = [{ id: 3 }];
218
-
219
- let state = rootReducer(undefined, { type: '@@INIT' });
220
- state = rootReducer(state, changeMarks(marks1));
221
- state = rootReducer(state, changeMarks(marks2));
222
- state = rootReducer(state, changeMarks(marks3));
223
-
224
- // undo twice, then redo twice
225
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
226
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
227
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
228
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
229
-
230
- expect(state.marks.present).toEqual(marks3);
231
- });
232
-
233
- it('does not redo beyond last state', () => {
234
- const rootReducer = reducer();
235
- const marks = [{ id: 1, type: 'point' }];
236
-
237
- let state = rootReducer(undefined, { type: '@@INIT' });
238
- state = rootReducer(state, changeMarks(marks));
239
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
240
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
241
-
242
- // try to redo beyond the end
243
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
244
- state = rootReducer(state, { type: '@@redux-undo/REDO' });
245
-
246
- expect(state.marks.present).toEqual(marks);
247
- expect(state.marks.future).toEqual([]);
248
- });
249
- });
250
-
251
- describe('state structure', () => {
252
- it('maintains correct undoable structure', () => {
253
- const rootReducer = reducer();
254
- const state = rootReducer(undefined, { type: 'INIT' });
255
-
256
- expect(state.marks).toHaveProperty('past');
257
- expect(state.marks).toHaveProperty('present');
258
- expect(state.marks).toHaveProperty('future');
259
- expect(Array.isArray(state.marks.past)).toBe(true);
260
- expect(Array.isArray(state.marks.future)).toBe(true);
261
- });
262
-
263
- it('preserves mark properties through undo/redo', () => {
264
- const rootReducer = reducer();
265
- const marks = [
266
- {
267
- id: 1,
268
- type: 'point',
269
- x: 10,
270
- y: 20,
271
- label: 'A',
272
- correctness: { value: 'correct' },
273
- },
274
- ];
275
-
276
- let state = rootReducer(undefined, { type: 'INIT' });
277
- state = rootReducer(state, changeMarks(marks));
278
- state = rootReducer(state, changeMarks([]));
279
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
280
-
281
- expect(state.marks.present).toEqual(marks);
282
- expect(state.marks.present[0]).toBeDefined();
283
- if (state.marks.present[0]) {
284
- expect(state.marks.present[0]).toEqual(marks[0]);
285
- expect(state.marks.present[0].correctness).toBeDefined();
286
- }
287
- });
288
- });
289
-
290
- describe('integration', () => {
291
- it('handles complex undo/redo sequences', () => {
292
- const rootReducer = reducer();
293
- const marks1 = [{ id: 1 }];
294
- const marks2 = [{ id: 2 }];
295
- const marks3 = [{ id: 3 }];
296
- const marks4 = [{ id: 4 }];
297
-
298
- let state = rootReducer(undefined, { type: '@@INIT' });
299
- state = rootReducer(state, changeMarks(marks1));
300
- state = rootReducer(state, changeMarks(marks2));
301
- state = rootReducer(state, changeMarks(marks3));
302
- state = rootReducer(state, { type: '@@redux-undo/UNDO' }); // back to marks2
303
- state = rootReducer(state, { type: '@@redux-undo/UNDO' }); // back to marks1
304
- state = rootReducer(state, { type: '@@redux-undo/REDO' }); // forward to marks2
305
- state = rootReducer(state, changeMarks(marks4));
306
-
307
- expect(state.marks.present).toEqual(marks4);
308
- expect(state.marks.future).toEqual([]);
309
- });
310
-
311
- it('works with empty state transitions', () => {
312
- const rootReducer = reducer();
313
- const marks = [{ id: 1 }];
314
-
315
- let state = rootReducer(undefined, { type: '@@INIT' });
316
- state = rootReducer(state, changeMarks([]));
317
- state = rootReducer(state, changeMarks(marks));
318
- state = rootReducer(state, changeMarks([]));
319
- state = rootReducer(state, { type: '@@redux-undo/UNDO' });
320
-
321
- expect(state.marks.present).toEqual(marks);
322
- });
323
- });
324
- });
@@ -1,8 +0,0 @@
1
- export const addMark = () => ({
2
- type: 'ADD_MARK',
3
- });
4
-
5
- export const changeMarks = (marks) => ({
6
- type: 'CHANGE_MARKS',
7
- marks,
8
- });
@@ -1,91 +0,0 @@
1
- import { connect, Provider } from 'react-redux';
2
- import React from 'react';
3
- import { applyMiddleware, createStore } from 'redux';
4
- import reducer from './reducer';
5
- import { changeMarks } from './actions';
6
- import PropTypes from 'prop-types';
7
- import { isEqual } from 'lodash-es';
8
- import { ActionCreators } from 'redux-undo';
9
- import GraphWithControls from '../graph-with-controls';
10
- import { lastActionMiddleware } from './middleware';
11
-
12
- const mapStateToProps = (s) => ({
13
- marks: s.marks.present,
14
- });
15
-
16
- const mapDispatchToProps = (dispatch) => ({
17
- onChangeMarks: (m) => dispatch(changeMarks(m)),
18
- onUndo: () => dispatch(ActionCreators.undo()),
19
- onRedo: () => dispatch(ActionCreators.redo()),
20
- onReset: () => dispatch(changeMarks([])),
21
- });
22
-
23
- export const GraphContainer = connect(mapStateToProps, mapDispatchToProps)(GraphWithControls);
24
-
25
- /**
26
- * The graph component entry point with undo/redo
27
- * Redux is an implementation detail, hide it in the react component.
28
- */
29
- class Root extends React.Component {
30
- static propTypes = {
31
- onChangeMarks: PropTypes.func,
32
- marks: PropTypes.array,
33
- };
34
-
35
- constructor(props) {
36
- super(props);
37
-
38
- const r = reducer();
39
- this.store = createStore(r, { marks: props.marks }, applyMiddleware(lastActionMiddleware));
40
-
41
- this.store.subscribe(this.onStoreChange);
42
- }
43
-
44
- componentDidUpdate(prevProps) {
45
- const { marks } = this.props;
46
- const storeState = this.store.getState();
47
-
48
- if (isEqual(storeState.marks.present, marks)) {
49
- return;
50
- }
51
-
52
- if (!isEqual(prevProps.marks, marks)) {
53
- // Don't dispatch marks that have correctness (evaluate mode marks) into the undo history.
54
- // These marks are already handled in render() via the correctnessSet path and bypass the
55
- // Redux store entirely. Dispatching them would pollute the undo history and cause the graph
56
- // to show the correct answer when the user presses undo after returning to gather mode.
57
- const hasCorrectness = marks && marks.find((m) => m.correctness);
58
-
59
- if (!hasCorrectness) {
60
- this.store.dispatch(changeMarks(marks));
61
- }
62
- }
63
- }
64
-
65
- onStoreChange = () => {
66
- const { marks, onChangeMarks } = this.props;
67
- const storeState = this.store.getState();
68
-
69
- if (!isEqual(storeState.marks.present, marks)) {
70
- onChangeMarks(storeState.marks.present);
71
- }
72
- };
73
-
74
- render() {
75
- // eslint-disable-next-line no-unused-vars
76
- const { onChangeMarks, marks, ...rest } = this.props;
77
- const correctnessSet = marks && marks.find((m) => m.correctness);
78
-
79
- if (correctnessSet) {
80
- return <GraphWithControls {...rest} marks={marks} disabled={correctnessSet} />;
81
- }
82
-
83
- return (
84
- <Provider store={this.store}>
85
- <GraphContainer {...rest} />
86
- </Provider>
87
- );
88
- }
89
- }
90
-
91
- export default Root;
@@ -1,14 +0,0 @@
1
- const marks = (state = [], action) => {
2
- switch (action.type) {
3
- case 'CHANGE_MARKS':
4
- if (Array.isArray(action.marks)) {
5
- return action.marks;
6
- } else {
7
- throw new Error('marks must be an array');
8
- }
9
- default:
10
- return state;
11
- }
12
- };
13
-
14
- export default marks;
@@ -1,7 +0,0 @@
1
- let lastAction = null;
2
- export const getLastAction = () => lastAction;
3
-
4
- export const lastActionMiddleware = () => (next) => (action) => {
5
- lastAction = action;
6
- return next(action);
7
- };
@@ -1,5 +0,0 @@
1
- import { combineReducers } from 'redux';
2
- import marks from './marks';
3
- import undoable from 'redux-undo';
4
-
5
- export default () => combineReducers({ marks: undoable(marks, { debug: false }) });