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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +20 -0
  2. package/dist/autosize-input.d.ts +10 -0
  3. package/dist/autosize-input.js +66 -0
  4. package/dist/axis/arrow.d.ts +13 -0
  5. package/dist/axis/arrow.js +34 -0
  6. package/dist/axis/axes.d.ts +132 -0
  7. package/dist/axis/axes.js +214 -0
  8. package/dist/axis/index.d.ts +10 -0
  9. package/dist/bg.d.ts +51 -0
  10. package/dist/bg.js +44 -0
  11. package/dist/container/actions.d.ts +15 -0
  12. package/dist/container/actions.js +7 -0
  13. package/dist/container/index.d.ts +58 -0
  14. package/dist/container/index.js +48 -0
  15. package/dist/container/marks.d.ts +10 -0
  16. package/dist/container/marks.js +11 -0
  17. package/dist/container/middleware.d.ts +10 -0
  18. package/dist/container/middleware.js +4 -0
  19. package/dist/container/reducer.d.ts +14 -0
  20. package/dist/container/reducer.js +7 -0
  21. package/dist/coordinates-label.d.ts +50 -0
  22. package/dist/coordinates-label.js +46 -0
  23. package/dist/graph-with-controls.d.ts +88 -0
  24. package/dist/graph-with-controls.js +156 -0
  25. package/dist/graph.d.ts +126 -0
  26. package/dist/graph.js +209 -0
  27. package/dist/grid-setup.d.ts +27 -0
  28. package/dist/grid-setup.js +307 -0
  29. package/dist/grid.d.ts +43 -0
  30. package/dist/grid.js +59 -0
  31. package/dist/index.d.ts +15 -0
  32. package/dist/index.js +7 -0
  33. package/dist/key-legend.d.ts +21 -0
  34. package/dist/key-legend.js +231 -0
  35. package/dist/label-svg-icon.d.ts +18 -0
  36. package/dist/label-svg-icon.js +42 -0
  37. package/dist/labels.d.ts +37 -0
  38. package/dist/labels.js +152 -0
  39. package/dist/mark-label.d.ts +60 -0
  40. package/dist/mark-label.js +222 -0
  41. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Axis.js +67 -0
  42. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisRenderer.js +66 -0
  43. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Ticks.js +39 -0
  44. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/constants/orientation.js +9 -0
  45. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/createPoint.js +14 -0
  46. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js +13 -0
  47. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getLabelTransform.js +16 -0
  48. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickFormatter.js +8 -0
  49. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickPosition.js +14 -0
  50. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/Grid.js +43 -0
  51. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridColumns.js +46 -0
  52. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridRows.js +46 -0
  53. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/utils/getScaleBandwidth.js +6 -0
  54. package/dist/node_modules/.bun/@visx_group@4.0.0_d84c32d47042070f/node_modules/@visx/group/esm/Group.js +17 -0
  55. package/dist/node_modules/.bun/@visx_point@4.0.0/node_modules/@visx/point/esm/Point.js +20 -0
  56. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/coerceNumber.js +10 -0
  57. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/getTicks.js +7 -0
  58. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/toString.js +6 -0
  59. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Line.js +27 -0
  60. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/LinePath.js +24 -0
  61. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/util/D3ShapeFactories.js +9 -0
  62. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/util/setNumberOrNumberAccessor.js +6 -0
  63. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/Text.js +27 -0
  64. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/hooks/useText.js +68 -0
  65. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/getStringWidth.js +19 -0
  66. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/memoize.js +13 -0
  67. package/dist/node_modules/.bun/@visx_vendor@4.0.0/node_modules/@visx/vendor/esm/d3-shape.js +8 -0
  68. package/dist/node_modules/.bun/balanced-match@0.4.2/node_modules/balanced-match/index.js +32 -0
  69. package/dist/node_modules/.bun/balanced-match@1.0.2/node_modules/balanced-match/index.js +33 -0
  70. package/dist/node_modules/.bun/classnames@2.5.1/node_modules/classnames/index.js +32 -0
  71. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +16 -0
  72. package/dist/node_modules/.bun/invariant@2.2.4/node_modules/invariant/browser.js +28 -0
  73. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/formula_evaluator.js +37 -0
  74. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/lexer.js +509 -0
  75. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/math_function.js +108 -0
  76. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix.js +31 -0
  77. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix_evaluator.js +45 -0
  78. package/dist/node_modules/.bun/reduce-css-calc@1.3.0/node_modules/reduce-css-calc/index.js +49 -0
  79. package/dist/node_modules/.bun/reduce-function-call@1.0.3/node_modules/reduce-function-call/index.js +34 -0
  80. package/dist/node_modules/.bun/redux-undo@1.1.0/node_modules/redux-undo/dist/redux-undo.js +185 -0
  81. package/dist/node_modules/.bun/redux@5.0.1/node_modules/redux/dist/redux.js +198 -0
  82. package/dist/toggle-bar.d.ts +40 -0
  83. package/dist/toggle-bar.js +155 -0
  84. package/dist/tool-menu.d.ts +29 -0
  85. package/dist/tool-menu.js +41 -0
  86. package/dist/tools/absolute/component.d.ts +16 -0
  87. package/dist/tools/absolute/component.js +15 -0
  88. package/dist/tools/absolute/index.d.ts +20 -0
  89. package/dist/tools/absolute/index.js +32 -0
  90. package/dist/tools/circle/bg-circle.d.ts +116 -0
  91. package/dist/tools/circle/bg-circle.js +72 -0
  92. package/dist/tools/circle/component.d.ts +88 -0
  93. package/dist/tools/circle/component.js +208 -0
  94. package/dist/tools/circle/index.d.ts +20 -0
  95. package/dist/tools/circle/index.js +22 -0
  96. package/dist/tools/exponential/component.d.ts +16 -0
  97. package/dist/tools/exponential/component.js +14 -0
  98. package/dist/tools/exponential/index.d.ts +20 -0
  99. package/dist/tools/exponential/index.js +32 -0
  100. package/dist/tools/index.d.ts +27 -0
  101. package/dist/tools/index.js +55 -0
  102. package/dist/tools/line/component.d.ts +124 -0
  103. package/dist/tools/line/component.js +72 -0
  104. package/dist/tools/line/index.d.ts +13 -0
  105. package/dist/tools/line/index.js +6 -0
  106. package/dist/tools/parabola/component.d.ts +16 -0
  107. package/dist/tools/parabola/component.js +14 -0
  108. package/dist/tools/parabola/index.d.ts +20 -0
  109. package/dist/tools/parabola/index.js +32 -0
  110. package/dist/tools/point/component.d.ts +52 -0
  111. package/dist/tools/point/component.js +91 -0
  112. package/dist/tools/point/index.d.ts +15 -0
  113. package/dist/tools/point/index.js +13 -0
  114. package/dist/tools/polygon/component.d.ts +125 -0
  115. package/dist/tools/polygon/component.js +271 -0
  116. package/dist/tools/polygon/index.d.ts +19 -0
  117. package/dist/tools/polygon/index.js +55 -0
  118. package/dist/tools/polygon/line.d.ts +125 -0
  119. package/dist/tools/polygon/line.js +63 -0
  120. package/dist/tools/polygon/polygon.d.ts +122 -0
  121. package/dist/tools/polygon/polygon.js +74 -0
  122. package/dist/tools/ray/component.d.ts +101 -0
  123. package/dist/tools/ray/component.js +71 -0
  124. package/dist/tools/ray/index.d.ts +13 -0
  125. package/dist/tools/ray/index.js +6 -0
  126. package/dist/tools/segment/component.d.ts +100 -0
  127. package/dist/tools/segment/component.js +52 -0
  128. package/dist/tools/segment/index.d.ts +13 -0
  129. package/dist/tools/segment/index.js +6 -0
  130. package/dist/tools/shared/arrow-head.d.ts +51 -0
  131. package/dist/tools/shared/arrow-head.js +63 -0
  132. package/dist/tools/shared/icons/CorrectSVG.d.ts +26 -0
  133. package/dist/tools/shared/icons/CorrectSVG.js +29 -0
  134. package/dist/tools/shared/icons/IncorrectSVG.d.ts +26 -0
  135. package/dist/tools/shared/icons/IncorrectSVG.js +27 -0
  136. package/dist/tools/shared/icons/MissingSVG.d.ts +26 -0
  137. package/dist/tools/shared/icons/MissingSVG.js +28 -0
  138. package/dist/tools/shared/line/index.d.ts +251 -0
  139. package/dist/tools/shared/line/index.js +332 -0
  140. package/dist/tools/shared/line/line-path.d.ts +57 -0
  141. package/dist/tools/shared/line/line-path.js +71 -0
  142. package/dist/tools/shared/line/with-root-edge.d.ts +148 -0
  143. package/dist/tools/shared/line/with-root-edge.js +73 -0
  144. package/dist/tools/shared/point/arrow-point.d.ts +56 -0
  145. package/dist/tools/shared/point/arrow-point.js +41 -0
  146. package/dist/tools/shared/point/arrow.d.ts +45 -0
  147. package/dist/tools/shared/point/arrow.js +35 -0
  148. package/dist/tools/shared/point/base-point.d.ts +52 -0
  149. package/dist/tools/shared/point/base-point.js +103 -0
  150. package/dist/tools/shared/point/index.d.ts +216 -0
  151. package/dist/tools/shared/point/index.js +45 -0
  152. package/dist/tools/shared/styles.d.ts +29 -0
  153. package/dist/tools/shared/styles.js +20 -0
  154. package/dist/tools/shared/types.d.ts +21 -0
  155. package/dist/tools/shared/types.js +11 -0
  156. package/dist/tools/sine/component.d.ts +16 -0
  157. package/dist/tools/sine/component.js +22 -0
  158. package/dist/tools/sine/index.d.ts +20 -0
  159. package/dist/tools/sine/index.js +32 -0
  160. package/dist/tools/vector/component.d.ts +100 -0
  161. package/dist/tools/vector/component.js +44 -0
  162. package/dist/tools/vector/index.d.ts +13 -0
  163. package/dist/tools/vector/index.js +6 -0
  164. package/dist/undo-redo.d.ts +22 -0
  165. package/dist/undo-redo.js +47 -0
  166. package/dist/use-debounce.d.ts +9 -0
  167. package/dist/use-debounce.js +13 -0
  168. package/dist/utils.d.ts +61 -0
  169. package/dist/utils.js +75 -0
  170. package/package.json +51 -41
  171. package/CHANGELOG.json +0 -1
  172. package/CHANGELOG.md +0 -1469
  173. package/lib/axis/arrow.js +0 -79
  174. package/lib/axis/arrow.js.map +0 -1
  175. package/lib/axis/axes.js +0 -329
  176. package/lib/axis/axes.js.map +0 -1
  177. package/lib/axis/index.js +0 -21
  178. package/lib/axis/index.js.map +0 -1
  179. package/lib/bg.js +0 -114
  180. package/lib/bg.js.map +0 -1
  181. package/lib/container/actions.js +0 -18
  182. package/lib/container/actions.js.map +0 -1
  183. package/lib/container/index.js +0 -127
  184. package/lib/container/index.js.map +0 -1
  185. package/lib/container/marks.js +0 -22
  186. package/lib/container/marks.js.map +0 -1
  187. package/lib/container/middleware.js +0 -19
  188. package/lib/container/middleware.js.map +0 -1
  189. package/lib/container/reducer.js +0 -18
  190. package/lib/container/reducer.js.map +0 -1
  191. package/lib/coordinates-label.js +0 -79
  192. package/lib/coordinates-label.js.map +0 -1
  193. package/lib/graph-with-controls.js +0 -294
  194. package/lib/graph-with-controls.js.map +0 -1
  195. package/lib/graph.js +0 -327
  196. package/lib/graph.js.map +0 -1
  197. package/lib/grid-setup.js +0 -414
  198. package/lib/grid-setup.js.map +0 -1
  199. package/lib/grid.js +0 -131
  200. package/lib/grid.js.map +0 -1
  201. package/lib/index.js +0 -47
  202. package/lib/index.js.map +0 -1
  203. package/lib/key-legend.js +0 -201
  204. package/lib/key-legend.js.map +0 -1
  205. package/lib/label-svg-icon.js +0 -50
  206. package/lib/label-svg-icon.js.map +0 -1
  207. package/lib/labels.js +0 -243
  208. package/lib/labels.js.map +0 -1
  209. package/lib/mark-label.js +0 -285
  210. package/lib/mark-label.js.map +0 -1
  211. package/lib/toggle-bar.js +0 -252
  212. package/lib/toggle-bar.js.map +0 -1
  213. package/lib/tool-menu.js +0 -78
  214. package/lib/tool-menu.js.map +0 -1
  215. package/lib/tools/absolute/component.js +0 -29
  216. package/lib/tools/absolute/component.js.map +0 -1
  217. package/lib/tools/absolute/index.js +0 -50
  218. package/lib/tools/absolute/index.js.map +0 -1
  219. package/lib/tools/circle/bg-circle.js +0 -123
  220. package/lib/tools/circle/bg-circle.js.map +0 -1
  221. package/lib/tools/circle/component.js +0 -321
  222. package/lib/tools/circle/component.js.map +0 -1
  223. package/lib/tools/circle/index.js +0 -41
  224. package/lib/tools/circle/index.js.map +0 -1
  225. package/lib/tools/exponential/component.js +0 -28
  226. package/lib/tools/exponential/component.js.map +0 -1
  227. package/lib/tools/exponential/index.js +0 -56
  228. package/lib/tools/exponential/index.js.map +0 -1
  229. package/lib/tools/index.js +0 -86
  230. package/lib/tools/index.js.map +0 -1
  231. package/lib/tools/line/component.js +0 -97
  232. package/lib/tools/line/component.js.map +0 -1
  233. package/lib/tools/line/index.js +0 -11
  234. package/lib/tools/line/index.js.map +0 -1
  235. package/lib/tools/parabola/component.js +0 -28
  236. package/lib/tools/parabola/component.js.map +0 -1
  237. package/lib/tools/parabola/index.js +0 -50
  238. package/lib/tools/parabola/index.js.map +0 -1
  239. package/lib/tools/point/component.js +0 -148
  240. package/lib/tools/point/component.js.map +0 -1
  241. package/lib/tools/point/index.js +0 -24
  242. package/lib/tools/point/index.js.map +0 -1
  243. package/lib/tools/polygon/component.js +0 -437
  244. package/lib/tools/polygon/component.js.map +0 -1
  245. package/lib/tools/polygon/index.js +0 -89
  246. package/lib/tools/polygon/index.js.map +0 -1
  247. package/lib/tools/polygon/line.js +0 -112
  248. package/lib/tools/polygon/line.js.map +0 -1
  249. package/lib/tools/polygon/polygon.js +0 -130
  250. package/lib/tools/polygon/polygon.js.map +0 -1
  251. package/lib/tools/ray/component.js +0 -95
  252. package/lib/tools/ray/component.js.map +0 -1
  253. package/lib/tools/ray/index.js +0 -11
  254. package/lib/tools/ray/index.js.map +0 -1
  255. package/lib/tools/segment/component.js +0 -71
  256. package/lib/tools/segment/component.js.map +0 -1
  257. package/lib/tools/segment/index.js +0 -11
  258. package/lib/tools/segment/index.js.map +0 -1
  259. package/lib/tools/shared/arrow-head.js +0 -111
  260. package/lib/tools/shared/arrow-head.js.map +0 -1
  261. package/lib/tools/shared/icons/CorrectSVG.js +0 -40
  262. package/lib/tools/shared/icons/CorrectSVG.js.map +0 -1
  263. package/lib/tools/shared/icons/IncorrectSVG.js +0 -40
  264. package/lib/tools/shared/icons/IncorrectSVG.js.map +0 -1
  265. package/lib/tools/shared/icons/MissingSVG.js +0 -39
  266. package/lib/tools/shared/icons/MissingSVG.js.map +0 -1
  267. package/lib/tools/shared/line/index.js +0 -550
  268. package/lib/tools/shared/line/index.js.map +0 -1
  269. package/lib/tools/shared/line/line-path.js +0 -118
  270. package/lib/tools/shared/line/line-path.js.map +0 -1
  271. package/lib/tools/shared/line/with-root-edge.js +0 -121
  272. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  273. package/lib/tools/shared/point/arrow-point.js +0 -72
  274. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  275. package/lib/tools/shared/point/arrow.js +0 -67
  276. package/lib/tools/shared/point/arrow.js.map +0 -1
  277. package/lib/tools/shared/point/base-point.js +0 -157
  278. package/lib/tools/shared/point/base-point.js.map +0 -1
  279. package/lib/tools/shared/point/index.js +0 -68
  280. package/lib/tools/shared/point/index.js.map +0 -1
  281. package/lib/tools/shared/styles.js +0 -33
  282. package/lib/tools/shared/styles.js.map +0 -1
  283. package/lib/tools/shared/types.js +0 -16
  284. package/lib/tools/shared/types.js.map +0 -1
  285. package/lib/tools/sine/component.js +0 -40
  286. package/lib/tools/sine/component.js.map +0 -1
  287. package/lib/tools/sine/index.js +0 -50
  288. package/lib/tools/sine/index.js.map +0 -1
  289. package/lib/tools/vector/component.js +0 -68
  290. package/lib/tools/vector/component.js.map +0 -1
  291. package/lib/tools/vector/index.js +0 -11
  292. package/lib/tools/vector/index.js.map +0 -1
  293. package/lib/undo-redo.js +0 -86
  294. package/lib/undo-redo.js.map +0 -1
  295. package/lib/use-debounce.js +0 -25
  296. package/lib/use-debounce.js.map +0 -1
  297. package/lib/utils.js +0 -229
  298. package/lib/utils.js.map +0 -1
  299. package/src/__tests__/bg.test.jsx +0 -250
  300. package/src/__tests__/coordinates-label.test.jsx +0 -243
  301. package/src/__tests__/graph-with-controls.test.jsx +0 -198
  302. package/src/__tests__/graph.test.jsx +0 -721
  303. package/src/__tests__/grid-setup.test.jsx +0 -645
  304. package/src/__tests__/grid.test.jsx +0 -22
  305. package/src/__tests__/key-legend.test.jsx +0 -260
  306. package/src/__tests__/label-svg-icon.test.jsx +0 -278
  307. package/src/__tests__/labels.test.jsx +0 -55
  308. package/src/__tests__/mark-label.test.jsx +0 -63
  309. package/src/__tests__/toggle-bar.test.jsx +0 -146
  310. package/src/__tests__/tool-menu.test.jsx +0 -115
  311. package/src/__tests__/undo-redo.test.jsx +0 -24
  312. package/src/__tests__/use-debounce.test.js +0 -21
  313. package/src/__tests__/utils.js +0 -41
  314. package/src/__tests__/utils.test.js +0 -105
  315. package/src/axis/__tests__/arrow.test.jsx +0 -38
  316. package/src/axis/__tests__/axes.test.jsx +0 -216
  317. package/src/axis/arrow.jsx +0 -57
  318. package/src/axis/axes.jsx +0 -285
  319. package/src/axis/index.js +0 -3
  320. package/src/bg.jsx +0 -96
  321. package/src/container/__tests__/actions.test.js +0 -105
  322. package/src/container/__tests__/index.test.jsx +0 -319
  323. package/src/container/__tests__/marks.test.js +0 -172
  324. package/src/container/__tests__/middleware.test.js +0 -235
  325. package/src/container/__tests__/reducer.test.js +0 -324
  326. package/src/container/actions.js +0 -8
  327. package/src/container/index.jsx +0 -91
  328. package/src/container/marks.js +0 -14
  329. package/src/container/middleware.js +0 -7
  330. package/src/container/reducer.js +0 -5
  331. package/src/coordinates-label.jsx +0 -63
  332. package/src/graph-with-controls.jsx +0 -239
  333. package/src/graph.jsx +0 -303
  334. package/src/grid-setup.jsx +0 -432
  335. package/src/grid.jsx +0 -133
  336. package/src/index.js +0 -7
  337. package/src/key-legend.jsx +0 -142
  338. package/src/label-svg-icon.jsx +0 -39
  339. package/src/labels.jsx +0 -207
  340. package/src/mark-label.jsx +0 -244
  341. package/src/toggle-bar.jsx +0 -224
  342. package/src/tool-menu.jsx +0 -49
  343. package/src/tools/absolute/__tests__/component.test.jsx +0 -53
  344. package/src/tools/absolute/component.jsx +0 -23
  345. package/src/tools/absolute/index.js +0 -31
  346. package/src/tools/circle/__tests__/bg-circle.test.jsx +0 -26
  347. package/src/tools/circle/__tests__/component.test.jsx +0 -494
  348. package/src/tools/circle/__tests__/index.test.js +0 -480
  349. package/src/tools/circle/bg-circle.jsx +0 -81
  350. package/src/tools/circle/component.jsx +0 -264
  351. package/src/tools/circle/index.js +0 -25
  352. package/src/tools/exponential/__tests__/component.test.jsx +0 -53
  353. package/src/tools/exponential/__tests__/index.test.js +0 -729
  354. package/src/tools/exponential/component.jsx +0 -23
  355. package/src/tools/exponential/index.js +0 -39
  356. package/src/tools/index.js +0 -48
  357. package/src/tools/line/__tests__/component.test.jsx +0 -37
  358. package/src/tools/line/component.jsx +0 -93
  359. package/src/tools/line/index.js +0 -4
  360. package/src/tools/parabola/__tests__/component.test.jsx +0 -48
  361. package/src/tools/parabola/__tests__/index.test.js +0 -470
  362. package/src/tools/parabola/component.jsx +0 -23
  363. package/src/tools/parabola/index.js +0 -31
  364. package/src/tools/point/__tests__/component.test.jsx +0 -349
  365. package/src/tools/point/__tests__/index.test.js +0 -241
  366. package/src/tools/point/component.jsx +0 -126
  367. package/src/tools/point/index.js +0 -11
  368. package/src/tools/polygon/__tests__/component.test.jsx +0 -471
  369. package/src/tools/polygon/__tests__/index.test.js +0 -294
  370. package/src/tools/polygon/__tests__/line.test.jsx +0 -35
  371. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -61
  372. package/src/tools/polygon/component.jsx +0 -409
  373. package/src/tools/polygon/index.js +0 -52
  374. package/src/tools/polygon/line.jsx +0 -74
  375. package/src/tools/polygon/polygon.jsx +0 -110
  376. package/src/tools/ray/__tests__/component.test.jsx +0 -29
  377. package/src/tools/ray/component.jsx +0 -92
  378. package/src/tools/ray/index.js +0 -4
  379. package/src/tools/segment/__tests__/component.test.jsx +0 -28
  380. package/src/tools/segment/component.jsx +0 -65
  381. package/src/tools/segment/index.js +0 -4
  382. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -31
  383. package/src/tools/shared/arrow-head.jsx +0 -102
  384. package/src/tools/shared/icons/CorrectSVG.jsx +0 -32
  385. package/src/tools/shared/icons/IncorrectSVG.jsx +0 -30
  386. package/src/tools/shared/icons/MissingSVG.jsx +0 -31
  387. package/src/tools/shared/line/__tests__/index.test.jsx +0 -109
  388. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -53
  389. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -73
  390. package/src/tools/shared/line/index.jsx +0 -487
  391. package/src/tools/shared/line/line-path.jsx +0 -80
  392. package/src/tools/shared/line/with-root-edge.jsx +0 -97
  393. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  394. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  395. package/src/tools/shared/point/arrow-point.jsx +0 -46
  396. package/src/tools/shared/point/arrow.jsx +0 -37
  397. package/src/tools/shared/point/base-point.jsx +0 -121
  398. package/src/tools/shared/point/index.jsx +0 -54
  399. package/src/tools/shared/styles.js +0 -27
  400. package/src/tools/shared/types.js +0 -10
  401. package/src/tools/sine/__tests__/component.test.jsx +0 -51
  402. package/src/tools/sine/component.jsx +0 -32
  403. package/src/tools/sine/index.js +0 -33
  404. package/src/tools/vector/__tests__/component.test.jsx +0 -25
  405. package/src/tools/vector/component.jsx +0 -56
  406. package/src/tools/vector/index.js +0 -4
  407. package/src/undo-redo.jsx +0 -45
  408. package/src/use-debounce.js +0 -13
  409. package/src/utils.js +0 -224
@@ -1,349 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import { graphProps, xy } from '../../../__tests__/utils';
4
-
5
- import Component from '../component';
6
-
7
- describe('Component', () => {
8
- let onChange;
9
- let onClick;
10
-
11
- beforeEach(() => {
12
- onChange = jest.fn();
13
- onClick = jest.fn();
14
- });
15
-
16
- const renderComponent = (extras) => {
17
- const defaults = {
18
- classes: {},
19
- className: 'className',
20
- onChange,
21
- onClick,
22
- graphProps: graphProps(),
23
- mark: xy(0, 0),
24
- };
25
- const props = { ...defaults, ...extras };
26
- return render(<Component {...props} />);
27
- };
28
-
29
- describe('rendering', () => {
30
- it('renders without crashing', () => {
31
- const { container } = renderComponent();
32
- expect(container.firstChild).toBeInTheDocument();
33
- });
34
-
35
- it('renders with mark', () => {
36
- const { container } = renderComponent({ mark: { ...xy(0, 0) } });
37
- expect(container.firstChild).toBeInTheDocument();
38
- });
39
-
40
- it('renders with label', () => {
41
- const { container } = renderComponent({ mark: { label: 'foo', ...xy(0, 0) } });
42
- expect(container.firstChild).toBeInTheDocument();
43
- });
44
-
45
- it('renders with different coordinates', () => {
46
- const { container } = renderComponent({ mark: { ...xy(5, -3) } });
47
- expect(container.firstChild).toBeInTheDocument();
48
- });
49
-
50
- it('renders with empty label', () => {
51
- const { container } = renderComponent({ mark: { label: '', ...xy(1, 1) } });
52
- expect(container.firstChild).toBeInTheDocument();
53
- });
54
-
55
- it('renders with negative coordinates', () => {
56
- const { container } = renderComponent({ mark: { ...xy(-5, -5) } });
57
- expect(container.firstChild).toBeInTheDocument();
58
- });
59
-
60
- it('renders with decimal coordinates', () => {
61
- const { container } = renderComponent({ mark: { ...xy(1.5, 2.5) } });
62
- expect(container.firstChild).toBeInTheDocument();
63
- });
64
-
65
- it('renders with zero coordinates', () => {
66
- const { container } = renderComponent({ mark: { ...xy(0, 0) } });
67
- expect(container.firstChild).toBeInTheDocument();
68
- });
69
-
70
- it('renders with large coordinate values', () => {
71
- const { container } = renderComponent({ mark: { ...xy(1000, 1000) } });
72
- expect(container.firstChild).toBeInTheDocument();
73
- });
74
- });
75
-
76
- describe('state properties', () => {
77
- it('renders with disabled state', () => {
78
- const { container } = renderComponent({ mark: { ...xy(1, 1), disabled: true } });
79
- expect(container.firstChild).toBeInTheDocument();
80
- });
81
-
82
- it('renders with correctness state - correct', () => {
83
- const { container } = renderComponent({ mark: { ...xy(1, 1), correctness: 'correct' } });
84
- expect(container.firstChild).toBeInTheDocument();
85
- });
86
-
87
- it('renders with correctness state - incorrect', () => {
88
- const { container } = renderComponent({ mark: { ...xy(1, 1), correctness: 'incorrect' } });
89
- expect(container.firstChild).toBeInTheDocument();
90
- });
91
-
92
- it('renders with correctness state - missing', () => {
93
- const { container } = renderComponent({ mark: { ...xy(1, 1), correctness: 'missing' } });
94
- expect(container.firstChild).toBeInTheDocument();
95
- });
96
-
97
- it('renders with fill color', () => {
98
- const { container } = renderComponent({ mark: { ...xy(1, 1), fill: '#ff0000' } });
99
- expect(container.firstChild).toBeInTheDocument();
100
- });
101
- });
102
-
103
- describe('label functionality', () => {
104
- it('renders label portal when labelNode is provided', () => {
105
- const labelNode = document.createElement('foreignObject');
106
- const { container } = renderComponent({
107
- mark: { ...xy(1, 1), label: 'Test' },
108
- labelNode,
109
- });
110
- expect(container.firstChild).toBeInTheDocument();
111
- });
112
-
113
- it('renders without label portal when labelNode is not provided', () => {
114
- const { container } = renderComponent({
115
- mark: { ...xy(1, 1), label: 'Test' },
116
- });
117
- expect(container.firstChild).toBeInTheDocument();
118
- });
119
-
120
- it('does not render label portal when mark has no label property', () => {
121
- const labelNode = document.createElement('foreignObject');
122
- const { container } = renderComponent({
123
- mark: { ...xy(1, 1) },
124
- labelNode,
125
- });
126
- expect(container.firstChild).toBeInTheDocument();
127
- });
128
-
129
- it('renders with labelModeEnabled', () => {
130
- const labelNode = document.createElement('foreignObject');
131
- const { container } = renderComponent({
132
- mark: { ...xy(1, 1), label: 'Test' },
133
- labelNode,
134
- labelModeEnabled: true,
135
- });
136
- expect(container.firstChild).toBeInTheDocument();
137
- });
138
-
139
- it('renders with labelModeEnabled disabled', () => {
140
- const labelNode = document.createElement('foreignObject');
141
- const { container } = renderComponent({
142
- mark: { ...xy(1, 1), label: 'Test' },
143
- labelNode,
144
- labelModeEnabled: false,
145
- });
146
- expect(container.firstChild).toBeInTheDocument();
147
- });
148
-
149
- it('handles empty string label', () => {
150
- const labelNode = document.createElement('foreignObject');
151
- const { container } = renderComponent({
152
- mark: { ...xy(1, 1), label: '' },
153
- labelNode,
154
- labelModeEnabled: true,
155
- });
156
- expect(container.firstChild).toBeInTheDocument();
157
- });
158
-
159
- it('handles long label text', () => {
160
- const labelNode = document.createElement('foreignObject');
161
- const { container } = renderComponent({
162
- mark: { ...xy(1, 1), label: 'This is a very long label text for testing' },
163
- labelNode,
164
- });
165
- expect(container.firstChild).toBeInTheDocument();
166
- });
167
-
168
- it('handles label with special characters', () => {
169
- const labelNode = document.createElement('foreignObject');
170
- const { container } = renderComponent({
171
- mark: { ...xy(1, 1), label: 'Test@#$%' },
172
- labelNode,
173
- });
174
- expect(container.firstChild).toBeInTheDocument();
175
- });
176
- });
177
-
178
- describe('coordinates on hover', () => {
179
- it('renders with coordinatesOnHover enabled', () => {
180
- const { container } = renderComponent({
181
- mark: { ...xy(1, 1) },
182
- coordinatesOnHover: true,
183
- });
184
- expect(container.firstChild).toBeInTheDocument();
185
- });
186
-
187
- it('renders with coordinatesOnHover disabled', () => {
188
- const { container } = renderComponent({
189
- mark: { ...xy(1, 1) },
190
- coordinatesOnHover: false,
191
- });
192
- expect(container.firstChild).toBeInTheDocument();
193
- });
194
- });
195
-
196
- describe('interaction modes', () => {
197
- it('renders in label mode', () => {
198
- const labelNode = document.createElement('foreignObject');
199
- const { container } = renderComponent({
200
- mark: { ...xy(1, 1), label: 'A' },
201
- labelModeEnabled: true,
202
- labelNode,
203
- });
204
- expect(container.firstChild).toBeInTheDocument();
205
- });
206
-
207
- it('renders in normal mode', () => {
208
- const { container } = renderComponent({
209
- mark: { ...xy(1, 1) },
210
- labelModeEnabled: false,
211
- });
212
- expect(container.firstChild).toBeInTheDocument();
213
- });
214
-
215
- it('handles disabled point in label mode', () => {
216
- const labelNode = document.createElement('foreignObject');
217
- const { container } = renderComponent({
218
- mark: { ...xy(1, 1), label: 'A', disabled: true },
219
- labelModeEnabled: true,
220
- labelNode,
221
- });
222
- expect(container.firstChild).toBeInTheDocument();
223
- });
224
- });
225
-
226
- describe('edge cases', () => {
227
- it('handles mark updates', () => {
228
- const { rerender, container } = renderComponent({ mark: xy(1, 1) });
229
- expect(container.firstChild).toBeInTheDocument();
230
-
231
- rerender(<Component mark={xy(2, 2)} onChange={onChange} onClick={onClick} graphProps={graphProps()} />);
232
- expect(container.firstChild).toBeInTheDocument();
233
- });
234
-
235
- it('handles mark with all properties', () => {
236
- const labelNode = document.createElement('foreignObject');
237
- const { container } = renderComponent({
238
- mark: {
239
- ...xy(3, 4),
240
- label: 'Complete',
241
- disabled: false,
242
- correctness: 'correct',
243
- fill: '#00ff00',
244
- },
245
- labelNode,
246
- labelModeEnabled: true,
247
- coordinatesOnHover: true,
248
- });
249
- expect(container.firstChild).toBeInTheDocument();
250
- });
251
-
252
- it('handles mark without any optional properties', () => {
253
- const { container } = renderComponent({ mark: xy(1, 1) });
254
- expect(container.firstChild).toBeInTheDocument();
255
- });
256
-
257
- it('handles rapid mark position changes', () => {
258
- const { rerender, container } = renderComponent({ mark: xy(0, 0) });
259
-
260
- for (let i = 1; i <= 5; i++) {
261
- rerender(<Component mark={xy(i, i)} onChange={onChange} onClick={onClick} graphProps={graphProps()} />);
262
- }
263
-
264
- expect(container.firstChild).toBeInTheDocument();
265
- });
266
- });
267
-
268
- describe('component lifecycle', () => {
269
- it('initializes with empty state', () => {
270
- const { container } = renderComponent({ mark: xy(1, 1) });
271
- expect(container.firstChild).toBeInTheDocument();
272
- });
273
-
274
- it('updates when mark prop changes', () => {
275
- const { container, rerender } = renderComponent({ mark: xy(1, 1) });
276
- expect(container.firstChild).toBeInTheDocument();
277
-
278
- rerender(<Component mark={xy(5, 5)} onChange={onChange} onClick={onClick} graphProps={graphProps()} />);
279
- expect(container.firstChild).toBeInTheDocument();
280
- });
281
-
282
- it('handles label addition', () => {
283
- const labelNode = document.createElement('foreignObject');
284
- const { container, rerender } = renderComponent({
285
- mark: xy(1, 1),
286
- labelNode,
287
- });
288
-
289
- rerender(
290
- <Component
291
- mark={{ ...xy(1, 1), label: 'New' }}
292
- onChange={onChange}
293
- onClick={onClick}
294
- graphProps={graphProps()}
295
- labelNode={labelNode}
296
- />,
297
- );
298
- expect(container.firstChild).toBeInTheDocument();
299
- });
300
-
301
- it('handles label removal', () => {
302
- const labelNode = document.createElement('foreignObject');
303
- const { container, rerender } = renderComponent({
304
- mark: { ...xy(1, 1), label: 'Remove' },
305
- labelNode,
306
- });
307
-
308
- rerender(
309
- <Component
310
- mark={xy(1, 1)}
311
- onChange={onChange}
312
- onClick={onClick}
313
- graphProps={graphProps()}
314
- labelNode={labelNode}
315
- />,
316
- );
317
- expect(container.firstChild).toBeInTheDocument();
318
- });
319
- });
320
-
321
- describe('graphProps variations', () => {
322
- it('handles different domain and range', () => {
323
- const customGraphProps = graphProps(0, 10, 0, 10);
324
- const { container } = renderComponent({
325
- mark: xy(5, 5),
326
- graphProps: customGraphProps,
327
- });
328
- expect(container.firstChild).toBeInTheDocument();
329
- });
330
-
331
- it('handles negative domain and range', () => {
332
- const customGraphProps = graphProps(-10, 0, -10, 0);
333
- const { container } = renderComponent({
334
- mark: xy(-5, -5),
335
- graphProps: customGraphProps,
336
- });
337
- expect(container.firstChild).toBeInTheDocument();
338
- });
339
-
340
- it('handles large domain and range', () => {
341
- const customGraphProps = graphProps(-100, 100, -100, 100);
342
- const { container } = renderComponent({
343
- mark: xy(50, 50),
344
- graphProps: customGraphProps,
345
- });
346
- expect(container.firstChild).toBeInTheDocument();
347
- });
348
- });
349
- });
@@ -1,241 +0,0 @@
1
- import { tool } from '../index';
2
- import Point from '../component';
3
-
4
- describe('point tool', () => {
5
- let pointTool;
6
-
7
- beforeEach(() => {
8
- pointTool = tool();
9
- });
10
-
11
- describe('tool structure', () => {
12
- it('returns an object with required properties', () => {
13
- expect(pointTool).toHaveProperty('label', 'Point');
14
- expect(pointTool).toHaveProperty('type', 'point');
15
- expect(pointTool).toHaveProperty('Component', Point);
16
- expect(pointTool).toHaveProperty('addPoint');
17
- });
18
-
19
- it('has correct label', () => {
20
- expect(pointTool.label).toBe('Point');
21
- });
22
-
23
- it('has correct type', () => {
24
- expect(pointTool.type).toBe('point');
25
- });
26
-
27
- it('uses Point component', () => {
28
- expect(pointTool.Component).toBe(Point);
29
- });
30
-
31
- it('does not have complete method', () => {
32
- expect(pointTool.complete).toBeUndefined();
33
- });
34
- });
35
-
36
- describe('addPoint', () => {
37
- it('creates a point mark from coordinates', () => {
38
- const point = { x: 1, y: 2 };
39
- const result = pointTool.addPoint(point);
40
-
41
- expect(result).toEqual({
42
- type: 'point',
43
- x: 1,
44
- y: 2,
45
- });
46
- });
47
-
48
- it('creates point with integer coordinates', () => {
49
- const point = { x: 5, y: 10 };
50
- const result = pointTool.addPoint(point);
51
-
52
- expect(result).toEqual({
53
- type: 'point',
54
- x: 5,
55
- y: 10,
56
- });
57
- });
58
-
59
- it('creates point with decimal coordinates', () => {
60
- const point = { x: 1.5, y: 2.75 };
61
- const result = pointTool.addPoint(point);
62
-
63
- expect(result).toEqual({
64
- type: 'point',
65
- x: 1.5,
66
- y: 2.75,
67
- });
68
- });
69
-
70
- it('creates point with negative coordinates', () => {
71
- const point = { x: -3, y: -7 };
72
- const result = pointTool.addPoint(point);
73
-
74
- expect(result).toEqual({
75
- type: 'point',
76
- x: -3,
77
- y: -7,
78
- });
79
- });
80
-
81
- it('creates point with zero coordinates', () => {
82
- const point = { x: 0, y: 0 };
83
- const result = pointTool.addPoint(point);
84
-
85
- expect(result).toEqual({
86
- type: 'point',
87
- x: 0,
88
- y: 0,
89
- });
90
- });
91
-
92
- it('creates point at origin', () => {
93
- const result = pointTool.addPoint({ x: 0, y: 0 });
94
-
95
- expect(result.x).toBe(0);
96
- expect(result.y).toBe(0);
97
- });
98
-
99
- it('spreads all point properties', () => {
100
- const point = { x: 1, y: 2, label: 'A', color: 'red' };
101
- const result = pointTool.addPoint(point);
102
-
103
- expect(result).toEqual({
104
- type: 'point',
105
- x: 1,
106
- y: 2,
107
- label: 'A',
108
- color: 'red',
109
- });
110
- });
111
-
112
- it('preserves additional properties from point object', () => {
113
- const point = {
114
- x: 3,
115
- y: 4,
116
- id: 'point-1',
117
- fill: 'blue',
118
- stroke: 'black',
119
- };
120
- const result = pointTool.addPoint(point);
121
-
122
- expect(result.type).toBe('point');
123
- expect(result.x).toBe(3);
124
- expect(result.y).toBe(4);
125
- expect(result.id).toBe('point-1');
126
- expect(result.fill).toBe('blue');
127
- expect(result.stroke).toBe('black');
128
- });
129
-
130
- it('ignores existing mark parameter', () => {
131
- const point = { x: 1, y: 2 };
132
- const existingMark = { type: 'point', x: 5, y: 5 };
133
- const result = pointTool.addPoint(point, existingMark);
134
-
135
- // Point tool always creates new mark, ignoring existing
136
- expect(result).toEqual({
137
- type: 'point',
138
- x: 1,
139
- y: 2,
140
- });
141
- });
142
-
143
- it('creates new point even with same coordinates', () => {
144
- const point = { x: 1, y: 2 };
145
- const result1 = pointTool.addPoint(point);
146
- const result2 = pointTool.addPoint(point);
147
-
148
- expect(result1).toEqual(result2);
149
- expect(result1).not.toBe(result2); // Different object references
150
- });
151
-
152
- it('handles very large coordinates', () => {
153
- const point = { x: 1000000, y: -1000000 };
154
- const result = pointTool.addPoint(point);
155
-
156
- expect(result.x).toBe(1000000);
157
- expect(result.y).toBe(-1000000);
158
- });
159
-
160
- it('handles very small coordinates', () => {
161
- const point = { x: 0.0001, y: 0.0002 };
162
- const result = pointTool.addPoint(point);
163
-
164
- expect(result.x).toBe(0.0001);
165
- expect(result.y).toBe(0.0002);
166
- });
167
- });
168
-
169
- describe('edge cases', () => {
170
- it('handles point with only x coordinate', () => {
171
- const point = { x: 5 };
172
- const result = pointTool.addPoint(point);
173
-
174
- expect(result.type).toBe('point');
175
- expect(result.x).toBe(5);
176
- expect(result.y).toBeUndefined();
177
- });
178
-
179
- it('handles point with only y coordinate', () => {
180
- const point = { y: 5 };
181
- const result = pointTool.addPoint(point);
182
-
183
- expect(result.type).toBe('point');
184
- expect(result.x).toBeUndefined();
185
- expect(result.y).toBe(5);
186
- });
187
-
188
- it('handles empty point object', () => {
189
- const point = {};
190
- const result = pointTool.addPoint(point);
191
-
192
- expect(result).toEqual({
193
- type: 'point',
194
- });
195
- });
196
-
197
- it('handles NaN coordinates', () => {
198
- const point = { x: NaN, y: NaN };
199
- const result = pointTool.addPoint(point);
200
-
201
- expect(result.type).toBe('point');
202
- expect(Number.isNaN(result.x)).toBe(true);
203
- expect(Number.isNaN(result.y)).toBe(true);
204
- });
205
-
206
- it('handles Infinity coordinates', () => {
207
- const point = { x: Infinity, y: -Infinity };
208
- const result = pointTool.addPoint(point);
209
-
210
- expect(result.x).toBe(Infinity);
211
- expect(result.y).toBe(-Infinity);
212
- });
213
- });
214
-
215
- describe('multiple points', () => {
216
- it('creates multiple distinct points', () => {
217
- const points = [
218
- { x: 1, y: 1 },
219
- { x: 2, y: 2 },
220
- { x: 3, y: 3 },
221
- ];
222
-
223
- const results = points.map((p) => pointTool.addPoint(p));
224
-
225
- expect(results).toHaveLength(3);
226
- results.forEach((result, i) => {
227
- expect(result.type).toBe('point');
228
- expect(result.x).toBe(points[i].x);
229
- expect(result.y).toBe(points[i].y);
230
- });
231
- });
232
-
233
- it('each point is independent', () => {
234
- const point1 = pointTool.addPoint({ x: 1, y: 1 });
235
- const point2 = pointTool.addPoint({ x: 2, y: 2 });
236
-
237
- point1.label = 'A';
238
- expect(point2.label).toBeUndefined();
239
- });
240
- });
241
- });
@@ -1,126 +0,0 @@
1
- import React from 'react';
2
- import { BasePoint } from '../shared/point';
3
- import { ToolPropTypeFields } from '../shared/types';
4
- import { types } from '@pie-lib/plot';
5
- import ReactDOM from 'react-dom';
6
- import MarkLabel from '../../mark-label';
7
- import { isEmpty, isEqual } from 'lodash-es';
8
-
9
- export class Point extends React.Component {
10
- static propTypes = {
11
- graphProps: types.GraphPropsType.isRequired,
12
- ...ToolPropTypeFields,
13
- };
14
-
15
- static defaultProps = {};
16
-
17
- constructor(props) {
18
- super(props);
19
- this.state = {};
20
- }
21
-
22
- move = (p) => {
23
- const mark = { ...this.state.mark, ...p };
24
- this.setState({ mark });
25
- };
26
-
27
- startDrag = () => {
28
- const { onDragStart } = this.props;
29
- const update = { ...this.props.mark };
30
-
31
- if (update.label === '') {
32
- delete update.label;
33
- }
34
- this.setState({ mark: update });
35
- if (onDragStart) onDragStart();
36
- };
37
-
38
- stopDrag = () => {
39
- const { onChange, onDragStop } = this.props;
40
- const mark = { ...this.state.mark };
41
- this.setState({ mark: undefined }, () => {
42
- if (!isEqual(this.props.mark, mark)) {
43
- onChange(this.props.mark, mark);
44
- }
45
- if (onDragStop) onDragStop();
46
- });
47
- };
48
-
49
- labelChange = (label) => {
50
- const { onChange } = this.props;
51
- const update = { ...this.props.mark, label };
52
-
53
- if (!label || isEmpty(label)) {
54
- delete update.label;
55
- }
56
-
57
- this.setState({ mark: update }, () => {
58
- onChange(this.props.mark, update);
59
- });
60
- };
61
-
62
- clickPoint = () => {
63
- const { labelModeEnabled, onChange, onClick, mark } = this.props;
64
-
65
- if (!labelModeEnabled) {
66
- onClick(mark);
67
- return;
68
- }
69
-
70
- if (mark.disabled) {
71
- return;
72
- }
73
-
74
- onChange(mark, { label: '', ...mark });
75
-
76
- // MarkLabel is only rendered after the parent re-renders with the new label prop,
77
- // so we defer focus until after that render cycle completes.
78
- setTimeout(() => {
79
- if (this.input) {
80
- this.input.focus();
81
- }
82
- }, 0);
83
- };
84
-
85
- render() {
86
- const { coordinatesOnHover, graphProps, labelNode, labelModeEnabled } = this.props;
87
- const mark = this.state.mark ? this.state.mark : this.props.mark;
88
-
89
- return (
90
- <React.Fragment>
91
- <BasePoint
92
- {...mark}
93
- coordinatesOnHover={coordinatesOnHover}
94
- graphProps={graphProps}
95
- labelNode={labelNode}
96
- onDrag={this.move}
97
- onDragStart={this.startDrag}
98
- onDragStop={this.stopDrag}
99
- onClick={this.clickPoint}
100
- onTouchStart={(e) => {
101
- e.stopPropagation();
102
- this.clickPoint();
103
- }}
104
- onTouchEnd={(e) => {
105
- e.stopPropagation();
106
- this.clickPoint();
107
- }}
108
- />
109
- {labelNode &&
110
- Object.prototype.hasOwnProperty.call(mark, 'label') &&
111
- ReactDOM.createPortal(
112
- <MarkLabel
113
- inputRef={(r) => (this.input = r)}
114
- disabled={!labelModeEnabled}
115
- mark={mark}
116
- graphProps={graphProps}
117
- onChange={this.labelChange}
118
- />,
119
- labelNode,
120
- )}
121
- </React.Fragment>
122
- );
123
- }
124
- }
125
-
126
- export default Point;