@pie-lib/graphing-solution-set 4.0.4-next.30 → 4.0.4-next.34

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 (310) hide show
  1. package/CHANGELOG.json +1 -0
  2. package/CHANGELOG.md +449 -0
  3. package/LICENSE.md +5 -0
  4. package/lib/axis/arrow.js +79 -0
  5. package/lib/axis/arrow.js.map +1 -0
  6. package/lib/axis/axes.js +327 -0
  7. package/lib/axis/axes.js.map +1 -0
  8. package/lib/axis/index.js +21 -0
  9. package/lib/axis/index.js.map +1 -0
  10. package/lib/bg.js +114 -0
  11. package/lib/bg.js.map +1 -0
  12. package/lib/container/actions.js +18 -0
  13. package/lib/container/actions.js.map +1 -0
  14. package/lib/container/index.js +129 -0
  15. package/lib/container/index.js.map +1 -0
  16. package/lib/container/marks.js +22 -0
  17. package/lib/container/marks.js.map +1 -0
  18. package/lib/container/middleware.js +19 -0
  19. package/lib/container/middleware.js.map +1 -0
  20. package/lib/container/reducer.js +18 -0
  21. package/lib/container/reducer.js.map +1 -0
  22. package/lib/coordinates-label.js +77 -0
  23. package/lib/coordinates-label.js.map +1 -0
  24. package/lib/graph-with-controls.js +297 -0
  25. package/lib/graph-with-controls.js.map +1 -0
  26. package/lib/graph.js +353 -0
  27. package/lib/graph.js.map +1 -0
  28. package/lib/grid-setup.js +414 -0
  29. package/lib/grid-setup.js.map +1 -0
  30. package/lib/grid.js +131 -0
  31. package/lib/grid.js.map +1 -0
  32. package/lib/index.js +40 -0
  33. package/lib/index.js.map +1 -0
  34. package/lib/labels.js +199 -0
  35. package/lib/labels.js.map +1 -0
  36. package/lib/mark-label.js +159 -0
  37. package/lib/mark-label.js.map +1 -0
  38. package/lib/toggle-bar.js +248 -0
  39. package/lib/toggle-bar.js.map +1 -0
  40. package/lib/tool-menu.js +218 -0
  41. package/lib/tool-menu.js.map +1 -0
  42. package/lib/tools/index.js +24 -0
  43. package/lib/tools/index.js.map +1 -0
  44. package/lib/tools/line/component.js +92 -0
  45. package/lib/tools/line/component.js.map +1 -0
  46. package/lib/tools/line/index.js +11 -0
  47. package/lib/tools/line/index.js.map +1 -0
  48. package/lib/tools/polygon/component.js +358 -0
  49. package/lib/tools/polygon/component.js.map +1 -0
  50. package/lib/tools/polygon/index.js +89 -0
  51. package/lib/tools/polygon/index.js.map +1 -0
  52. package/lib/tools/polygon/line.js +114 -0
  53. package/lib/tools/polygon/line.js.map +1 -0
  54. package/lib/tools/polygon/polygon.js +128 -0
  55. package/lib/tools/polygon/polygon.js.map +1 -0
  56. package/lib/tools/shared/arrow-head.js +62 -0
  57. package/lib/tools/shared/arrow-head.js.map +1 -0
  58. package/lib/tools/shared/line/index.js +539 -0
  59. package/lib/tools/shared/line/index.js.map +1 -0
  60. package/lib/tools/shared/line/line-path.js +121 -0
  61. package/lib/tools/shared/line/line-path.js.map +1 -0
  62. package/lib/tools/shared/line/with-root-edge.js +121 -0
  63. package/lib/tools/shared/line/with-root-edge.js.map +1 -0
  64. package/lib/tools/shared/point/arrow-point.js +86 -0
  65. package/lib/tools/shared/point/arrow-point.js.map +1 -0
  66. package/lib/tools/shared/point/arrow.js +70 -0
  67. package/lib/tools/shared/point/arrow.js.map +1 -0
  68. package/lib/tools/shared/point/base-point.js +137 -0
  69. package/lib/tools/shared/point/base-point.js.map +1 -0
  70. package/lib/tools/shared/point/index.js +80 -0
  71. package/lib/tools/shared/point/index.js.map +1 -0
  72. package/lib/tools/shared/styles.js +26 -0
  73. package/lib/tools/shared/styles.js.map +1 -0
  74. package/lib/tools/shared/types.js +15 -0
  75. package/lib/tools/shared/types.js.map +1 -0
  76. package/lib/undo-redo.js +67 -0
  77. package/lib/undo-redo.js.map +1 -0
  78. package/lib/use-debounce.js +25 -0
  79. package/lib/use-debounce.js.map +1 -0
  80. package/lib/utils.js +235 -0
  81. package/lib/utils.js.map +1 -0
  82. package/package.json +34 -46
  83. package/src/__tests__/bg.test.jsx +250 -0
  84. package/src/__tests__/coordinates-label.test.jsx +243 -0
  85. package/src/__tests__/graph-with-controls.test.jsx +184 -0
  86. package/src/__tests__/graph.test.jsx +93 -0
  87. package/src/__tests__/grid-setup.test.jsx +645 -0
  88. package/src/__tests__/grid.test.jsx +23 -0
  89. package/src/__tests__/labels.test.jsx +41 -0
  90. package/src/__tests__/mark-label.test.jsx +66 -0
  91. package/src/__tests__/toggle-bar.test.jsx +106 -0
  92. package/src/__tests__/tool-menu.test.jsx +453 -0
  93. package/src/__tests__/undo-redo.test.jsx +26 -0
  94. package/src/__tests__/use-debounce.test.js +21 -0
  95. package/src/__tests__/utils.js +41 -0
  96. package/src/__tests__/utils.test.js +105 -0
  97. package/src/axis/__tests__/arrow.test.jsx +43 -0
  98. package/src/axis/__tests__/axes.test.jsx +182 -0
  99. package/src/axis/arrow.jsx +57 -0
  100. package/src/axis/axes.jsx +284 -0
  101. package/src/axis/index.js +3 -0
  102. package/src/bg.jsx +96 -0
  103. package/src/container/__tests__/actions.test.js +105 -0
  104. package/src/container/__tests__/index.test.jsx +227 -0
  105. package/src/container/__tests__/marks.test.js +172 -0
  106. package/src/container/__tests__/middleware.test.js +235 -0
  107. package/src/container/__tests__/reducer.test.js +324 -0
  108. package/src/container/actions.js +8 -0
  109. package/src/container/index.jsx +93 -0
  110. package/src/container/marks.js +14 -0
  111. package/src/container/middleware.js +7 -0
  112. package/src/container/reducer.js +5 -0
  113. package/src/coordinates-label.jsx +62 -0
  114. package/src/graph-with-controls.jsx +242 -0
  115. package/src/graph.jsx +333 -0
  116. package/src/grid-setup.jsx +432 -0
  117. package/src/grid.jsx +133 -0
  118. package/src/index.js +7 -0
  119. package/src/labels.jsx +173 -0
  120. package/src/mark-label.jsx +125 -0
  121. package/src/toggle-bar.jsx +221 -0
  122. package/src/tool-menu.jsx +235 -0
  123. package/src/tools/index.js +8 -0
  124. package/src/tools/line/__tests__/component.test.jsx +37 -0
  125. package/src/tools/line/component.jsx +77 -0
  126. package/src/tools/line/index.js +4 -0
  127. package/src/tools/polygon/__tests__/component.test.jsx +487 -0
  128. package/src/tools/polygon/__tests__/index.test.js +65 -0
  129. package/src/tools/polygon/__tests__/line.test.jsx +23 -0
  130. package/src/tools/polygon/__tests__/polygon.test.jsx +44 -0
  131. package/src/tools/polygon/component.jsx +324 -0
  132. package/src/tools/polygon/index.js +52 -0
  133. package/src/tools/polygon/line.jsx +80 -0
  134. package/src/tools/polygon/polygon.jsx +93 -0
  135. package/src/tools/shared/__tests__/arrow-head.test.jsx +33 -0
  136. package/src/tools/shared/arrow-head.jsx +46 -0
  137. package/src/tools/shared/line/__tests__/index.test.jsx +553 -0
  138. package/src/tools/shared/line/__tests__/line-path.test.jsx +56 -0
  139. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +488 -0
  140. package/src/tools/shared/line/index.jsx +471 -0
  141. package/src/tools/shared/line/line-path.jsx +85 -0
  142. package/src/tools/shared/line/with-root-edge.jsx +97 -0
  143. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +91 -0
  144. package/src/tools/shared/point/__tests__/arrow.test.jsx +469 -0
  145. package/src/tools/shared/point/__tests__/base-point.test.jsx +87 -0
  146. package/src/tools/shared/point/arrow-point.jsx +60 -0
  147. package/src/tools/shared/point/arrow.jsx +40 -0
  148. package/src/tools/shared/point/base-point.jsx +113 -0
  149. package/src/tools/shared/point/index.jsx +58 -0
  150. package/src/tools/shared/styles.js +20 -0
  151. package/src/tools/shared/types.js +8 -0
  152. package/src/undo-redo.jsx +37 -0
  153. package/src/use-debounce.js +13 -0
  154. package/src/utils.js +230 -0
  155. package/dist/_virtual/_rolldown/runtime.js +0 -23
  156. package/dist/autosize-input.d.ts +0 -10
  157. package/dist/autosize-input.js +0 -66
  158. package/dist/axis/arrow.d.ts +0 -13
  159. package/dist/axis/arrow.js +0 -34
  160. package/dist/axis/axes.d.ts +0 -132
  161. package/dist/axis/axes.js +0 -214
  162. package/dist/axis/index.d.ts +0 -10
  163. package/dist/bg.d.ts +0 -51
  164. package/dist/bg.js +0 -44
  165. package/dist/container/actions.d.ts +0 -15
  166. package/dist/container/actions.js +0 -7
  167. package/dist/container/index.d.ts +0 -58
  168. package/dist/container/index.js +0 -48
  169. package/dist/container/marks.d.ts +0 -10
  170. package/dist/container/marks.js +0 -11
  171. package/dist/container/middleware.d.ts +0 -10
  172. package/dist/container/middleware.js +0 -4
  173. package/dist/container/reducer.d.ts +0 -14
  174. package/dist/container/reducer.js +0 -7
  175. package/dist/coordinates-label.d.ts +0 -50
  176. package/dist/coordinates-label.js +0 -46
  177. package/dist/graph-with-controls.d.ts +0 -85
  178. package/dist/graph-with-controls.js +0 -155
  179. package/dist/graph.d.ts +0 -119
  180. package/dist/graph.js +0 -221
  181. package/dist/grid-setup.d.ts +0 -27
  182. package/dist/grid-setup.js +0 -307
  183. package/dist/grid.d.ts +0 -43
  184. package/dist/grid.js +0 -59
  185. package/dist/index.d.ts +0 -14
  186. package/dist/index.js +0 -6
  187. package/dist/labels.d.ts +0 -73
  188. package/dist/labels.js +0 -134
  189. package/dist/mark-label.d.ts +0 -50
  190. package/dist/mark-label.js +0 -84
  191. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/axis/Axis.js +0 -101
  192. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/axis/AxisRenderer.js +0 -63
  193. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/axis/Ticks.js +0 -44
  194. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/constants/orientation.js +0 -9
  195. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/utils/createPoint.js +0 -14
  196. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js +0 -21
  197. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/utils/getLabelTransform.js +0 -16
  198. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/utils/getTickFormatter.js +0 -8
  199. package/dist/node_modules/.bun/@visx_axis@3.12.0_f4eacebf2041cd4f/node_modules/@visx/axis/esm/utils/getTickPosition.js +0 -15
  200. package/dist/node_modules/.bun/@visx_grid@3.12.0_f4eacebf2041cd4f/node_modules/@visx/grid/esm/grids/Grid.js +0 -79
  201. package/dist/node_modules/.bun/@visx_grid@3.12.0_f4eacebf2041cd4f/node_modules/@visx/grid/esm/grids/GridColumns.js +0 -79
  202. package/dist/node_modules/.bun/@visx_grid@3.12.0_f4eacebf2041cd4f/node_modules/@visx/grid/esm/grids/GridRows.js +0 -79
  203. package/dist/node_modules/.bun/@visx_grid@3.12.0_f4eacebf2041cd4f/node_modules/@visx/grid/esm/utils/getScaleBandwidth.js +0 -6
  204. package/dist/node_modules/.bun/@visx_group@3.12.0_f4eacebf2041cd4f/node_modules/@visx/group/esm/Group.js +0 -50
  205. package/dist/node_modules/.bun/@visx_point@3.12.0/node_modules/@visx/point/esm/Point.js +0 -18
  206. package/dist/node_modules/.bun/@visx_scale@3.12.0/node_modules/@visx/scale/esm/utils/coerceNumber.js +0 -10
  207. package/dist/node_modules/.bun/@visx_scale@3.12.0/node_modules/@visx/scale/esm/utils/getTicks.js +0 -9
  208. package/dist/node_modules/.bun/@visx_scale@3.12.0/node_modules/@visx/scale/esm/utils/toString.js +0 -6
  209. package/dist/node_modules/.bun/@visx_shape@3.12.0_f4eacebf2041cd4f/node_modules/@visx/shape/esm/shapes/Line.js +0 -47
  210. package/dist/node_modules/.bun/@visx_shape@3.12.0_f4eacebf2041cd4f/node_modules/@visx/shape/lib/shapes/Line.js +0 -53
  211. package/dist/node_modules/.bun/@visx_text@3.12.0_f4eacebf2041cd4f/node_modules/@visx/text/esm/Text.js +0 -57
  212. package/dist/node_modules/.bun/@visx_text@3.12.0_f4eacebf2041cd4f/node_modules/@visx/text/esm/hooks/useText.js +0 -91
  213. package/dist/node_modules/.bun/@visx_text@3.12.0_f4eacebf2041cd4f/node_modules/@visx/text/esm/util/getStringWidth.js +0 -21
  214. package/dist/node_modules/.bun/balanced-match@0.4.2/node_modules/balanced-match/index.js +0 -32
  215. package/dist/node_modules/.bun/balanced-match@1.0.2/node_modules/balanced-match/index.js +0 -33
  216. package/dist/node_modules/.bun/classnames@2.5.1/node_modules/classnames/index.js +0 -32
  217. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -16
  218. package/dist/node_modules/.bun/invariant@2.2.4/node_modules/invariant/browser.js +0 -28
  219. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_Hash.js +0 -21
  220. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_ListCache.js +0 -21
  221. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_Map.js +0 -10
  222. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_MapCache.js +0 -21
  223. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_Symbol.js +0 -9
  224. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_assocIndexOf.js +0 -14
  225. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_baseGetTag.js +0 -15
  226. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_baseIsNative.js +0 -16
  227. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_coreJsData.js +0 -9
  228. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_freeGlobal.js +0 -8
  229. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_getMapData.js +0 -14
  230. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_getNative.js +0 -15
  231. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_getRawTag.js +0 -19
  232. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_getValue.js +0 -11
  233. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_hashClear.js +0 -13
  234. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_hashDelete.js +0 -12
  235. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_hashGet.js +0 -18
  236. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_hashHas.js +0 -14
  237. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_hashSet.js +0 -14
  238. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_isKeyable.js +0 -12
  239. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_isMasked.js +0 -16
  240. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_listCacheClear.js +0 -11
  241. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_listCacheDelete.js +0 -14
  242. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_listCacheGet.js +0 -14
  243. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_listCacheHas.js +0 -13
  244. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_listCacheSet.js +0 -14
  245. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_mapCacheClear.js +0 -19
  246. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_mapCacheDelete.js +0 -14
  247. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_mapCacheGet.js +0 -13
  248. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_mapCacheHas.js +0 -13
  249. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_mapCacheSet.js +0 -14
  250. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_nativeCreate.js +0 -9
  251. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_objectToString.js +0 -12
  252. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_root.js +0 -10
  253. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/_toSource.js +0 -20
  254. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/eq.js +0 -11
  255. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/isFunction.js +0 -16
  256. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/isObject.js +0 -12
  257. package/dist/node_modules/.bun/lodash@4.18.1/node_modules/lodash/memoize.js +0 -20
  258. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/formula_evaluator.js +0 -37
  259. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/lexer.js +0 -509
  260. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/math_function.js +0 -108
  261. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix.js +0 -31
  262. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix_evaluator.js +0 -45
  263. package/dist/node_modules/.bun/react-redux@9.3.0_9e2203c65d1d5fa1/node_modules/react-redux/dist/react-redux.js +0 -471
  264. package/dist/node_modules/.bun/reduce-css-calc@1.3.0/node_modules/reduce-css-calc/index.js +0 -49
  265. package/dist/node_modules/.bun/reduce-function-call@1.0.3/node_modules/reduce-function-call/index.js +0 -34
  266. package/dist/node_modules/.bun/redux-undo@1.1.0/node_modules/redux-undo/dist/redux-undo.js +0 -185
  267. package/dist/node_modules/.bun/redux@5.0.1/node_modules/redux/dist/redux.js +0 -198
  268. package/dist/node_modules/.bun/use-sync-external-store@1.6.0_f4eacebf2041cd4f/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js +0 -53
  269. package/dist/node_modules/.bun/use-sync-external-store@1.6.0_f4eacebf2041cd4f/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js +0 -51
  270. package/dist/node_modules/.bun/use-sync-external-store@1.6.0_f4eacebf2041cd4f/node_modules/use-sync-external-store/with-selector.js +0 -10
  271. package/dist/toggle-bar.d.ts +0 -40
  272. package/dist/tool-menu.d.ts +0 -21
  273. package/dist/tool-menu.js +0 -188
  274. package/dist/tools/index.d.ts +0 -17
  275. package/dist/tools/index.js +0 -12
  276. package/dist/tools/line/component.d.ts +0 -113
  277. package/dist/tools/line/component.js +0 -58
  278. package/dist/tools/line/index.d.ts +0 -13
  279. package/dist/tools/line/index.js +0 -6
  280. package/dist/tools/polygon/component.d.ts +0 -117
  281. package/dist/tools/polygon/component.js +0 -194
  282. package/dist/tools/polygon/index.d.ts +0 -19
  283. package/dist/tools/polygon/index.js +0 -55
  284. package/dist/tools/polygon/line.d.ts +0 -125
  285. package/dist/tools/polygon/polygon.d.ts +0 -122
  286. package/dist/tools/polygon/polygon.js +0 -62
  287. package/dist/tools/shared/arrow-head.d.ts +0 -43
  288. package/dist/tools/shared/arrow-head.js +0 -37
  289. package/dist/tools/shared/line/index.d.ts +0 -240
  290. package/dist/tools/shared/line/index.js +0 -320
  291. package/dist/tools/shared/line/line-path.d.ts +0 -57
  292. package/dist/tools/shared/line/with-root-edge.d.ts +0 -143
  293. package/dist/tools/shared/point/arrow-point.d.ts +0 -57
  294. package/dist/tools/shared/point/arrow-point.js +0 -47
  295. package/dist/tools/shared/point/arrow.d.ts +0 -46
  296. package/dist/tools/shared/point/arrow.js +0 -36
  297. package/dist/tools/shared/point/base-point.d.ts +0 -50
  298. package/dist/tools/shared/point/base-point.js +0 -88
  299. package/dist/tools/shared/point/index.d.ts +0 -217
  300. package/dist/tools/shared/point/index.js +0 -51
  301. package/dist/tools/shared/styles.d.ts +0 -24
  302. package/dist/tools/shared/styles.js +0 -17
  303. package/dist/tools/shared/types.d.ts +0 -15
  304. package/dist/tools/shared/types.js +0 -10
  305. package/dist/undo-redo.d.ts +0 -20
  306. package/dist/undo-redo.js +0 -33
  307. package/dist/use-debounce.d.ts +0 -9
  308. package/dist/use-debounce.js +0 -13
  309. package/dist/utils.d.ts +0 -58
  310. package/dist/utils.js +0 -72
@@ -0,0 +1,91 @@
1
+ import { render } from '@pie-lib/test-utils';
2
+ import React from 'react';
3
+ import { ArrowPoint } from '../index';
4
+ import { graphProps } from '../../../../__tests__/utils';
5
+ import { bounds } from '../../../../utils';
6
+ import { gridDraggable, utils } from '@pie-lib/plot';
7
+
8
+ const { xy } = utils;
9
+ jest.mock('../../../../utils', () => {
10
+ const { point, getAngleDeg, arrowDimensions } = jest.requireActual('../../../../utils');
11
+ return {
12
+ bounds: jest.fn(),
13
+ point,
14
+ getAngleDeg,
15
+ arrowDimensions,
16
+ };
17
+ });
18
+
19
+ jest.mock('@pie-lib/plot', () => {
20
+ const { types, utils } = jest.requireActual('@pie-lib/plot');
21
+ return {
22
+ gridDraggable: jest.fn((opts) => (Comp) => Comp),
23
+ types,
24
+ utils,
25
+ };
26
+ });
27
+
28
+ describe('ArrowPoint', () => {
29
+ let onChange = jest.fn();
30
+
31
+ const renderComponent = (extras) => {
32
+ const defaults = {
33
+ classes: {},
34
+ className: 'className',
35
+ onChange,
36
+ graphProps: graphProps(),
37
+ from: xy(0, 0),
38
+ to: xy(1, 1),
39
+ x: 0,
40
+ y: 0,
41
+ };
42
+ const props = { ...defaults, ...extras };
43
+ return render(<ArrowPoint {...props} />);
44
+ };
45
+
46
+ describe('rendering', () => {
47
+ it('renders without crashing', () => {
48
+ const { container } = renderComponent();
49
+ expect(container.firstChild).toBeInTheDocument();
50
+ });
51
+ });
52
+ describe('gridDraggable options', () => {
53
+ let opts;
54
+ let domain;
55
+ let range;
56
+ beforeEach(() => {
57
+ domain = {
58
+ min: 0,
59
+ max: 1,
60
+ step: 1,
61
+ };
62
+ range = {
63
+ min: 0,
64
+ max: 1,
65
+ step: 1,
66
+ };
67
+ renderComponent();
68
+ opts = gridDraggable.mock.calls[gridDraggable.mock.calls.length - 1][0];
69
+ });
70
+
71
+ describe('bounds', () => {
72
+ it('calls utils.bounds with area', () => {
73
+ const result = opts.bounds({ x: 0, y: 0 }, { domain, range });
74
+ expect(bounds).toHaveBeenCalledWith({ left: 0, top: 0, bottom: 0, right: 0 }, domain, range);
75
+ });
76
+ });
77
+ describe('anchorPoint', () => {
78
+ it('returns x/y', () => {
79
+ const result = opts.anchorPoint({ x: 0, y: 0 });
80
+ expect(result).toEqual({ x: 0, y: 0 });
81
+ });
82
+ });
83
+
84
+ describe('fromDelta', () => {
85
+ it('returns a new point from the x/y + delta', () => {
86
+ const result = opts.fromDelta({ x: -1, y: 0 }, { x: 1, y: 3 });
87
+ expect(result).toEqual({ x: 0, y: 3 });
88
+ });
89
+ });
90
+ });
91
+ });
@@ -0,0 +1,469 @@
1
+ import { render } from '@pie-lib/test-utils';
2
+ import React from 'react';
3
+ import Arrow from '../arrow';
4
+ import { graphProps } from '../../../../__tests__/utils';
5
+ import { thinnerShapesNeeded } from '../../../../utils';
6
+
7
+ jest.mock('../../../../utils', () => ({
8
+ ...jest.requireActual('../../../../utils'),
9
+ thinnerShapesNeeded: jest.fn(() => false),
10
+ }));
11
+
12
+ describe('Arrow', () => {
13
+ let onChange = jest.fn();
14
+
15
+ const renderComponent = (extras) => {
16
+ const defaults = {
17
+ classes: {},
18
+ className: 'arrow-class',
19
+ onChange,
20
+ graphProps: graphProps(),
21
+ x: 5,
22
+ y: 10,
23
+ angle: 45,
24
+ };
25
+ const props = { ...defaults, ...extras };
26
+ return render(<Arrow {...props} />);
27
+ };
28
+
29
+ beforeEach(() => {
30
+ onChange = jest.fn();
31
+ thinnerShapesNeeded.mockReturnValue(false);
32
+ });
33
+
34
+ describe('rendering', () => {
35
+ it('renders without crashing', () => {
36
+ const { container } = renderComponent();
37
+ expect(container.firstChild).toBeInTheDocument();
38
+ });
39
+
40
+ it('renders a g element with correct class names', () => {
41
+ const { container } = renderComponent({
42
+ classes: { point: 'point-class' },
43
+ className: 'custom-class',
44
+ });
45
+ const gElement = container.querySelector('g');
46
+ expect(gElement).toBeInTheDocument();
47
+ expect(gElement).toHaveClass('point-class');
48
+ expect(gElement).toHaveClass('custom-class');
49
+ });
50
+
51
+ it('renders ArrowHead component', () => {
52
+ const { container } = renderComponent();
53
+ const polygon = container.querySelector('polygon');
54
+ expect(polygon).toBeInTheDocument();
55
+ });
56
+
57
+ it('applies disabled class when disabled is true', () => {
58
+ const { container } = renderComponent({
59
+ classes: { point: 'point-class', disabled: 'disabled-class' },
60
+ disabled: true,
61
+ });
62
+ const gElement = container.querySelector('g');
63
+ expect(gElement).toHaveClass('disabled-class');
64
+ });
65
+
66
+ it('does not apply disabled class when disabled is false', () => {
67
+ const { container } = renderComponent({
68
+ classes: { point: 'point-class', disabled: 'disabled-class' },
69
+ disabled: false,
70
+ });
71
+ const gElement = container.querySelector('g');
72
+ expect(gElement).not.toHaveClass('disabled-class');
73
+ });
74
+
75
+ it('applies correctness class when provided', () => {
76
+ const { container } = renderComponent({
77
+ classes: { point: 'point-class', correct: 'correct-class' },
78
+ correctness: 'correct',
79
+ });
80
+ const gElement = container.querySelector('g');
81
+ expect(gElement).toHaveClass('correct-class');
82
+ });
83
+
84
+ it('applies incorrect correctness class', () => {
85
+ const { container } = renderComponent({
86
+ classes: { point: 'point-class', incorrect: 'incorrect-class' },
87
+ correctness: 'incorrect',
88
+ });
89
+ const gElement = container.querySelector('g');
90
+ expect(gElement).toHaveClass('incorrect-class');
91
+ });
92
+ });
93
+
94
+ describe('size calculation', () => {
95
+ it('uses size 14 when thinnerShapesNeeded returns false', () => {
96
+ thinnerShapesNeeded.mockReturnValue(false);
97
+ const { container } = renderComponent({ x: 0, y: 0 });
98
+ const polygon = container.querySelector('polygon');
99
+
100
+ // Expected points: "0,0 -14,-7 -14,7"
101
+ expect(polygon).toHaveAttribute('points');
102
+ const points = polygon.getAttribute('points');
103
+ expect(points).toContain('-14');
104
+ });
105
+
106
+ it('uses size 12 when thinnerShapesNeeded returns true', () => {
107
+ thinnerShapesNeeded.mockReturnValue(true);
108
+ const { container } = renderComponent({ x: 0, y: 0 });
109
+ const polygon = container.querySelector('polygon');
110
+
111
+ // Expected points: "0,0 -12,-6 -12,6"
112
+ expect(polygon).toHaveAttribute('points');
113
+ const points = polygon.getAttribute('points');
114
+ expect(points).toContain('-12');
115
+ });
116
+
117
+ it('calls thinnerShapesNeeded with graphProps', () => {
118
+ const gp = graphProps();
119
+ renderComponent({ graphProps: gp });
120
+ expect(thinnerShapesNeeded).toHaveBeenCalledWith(gp);
121
+ });
122
+ });
123
+
124
+ describe('coordinate scaling', () => {
125
+ it('scales x and y coordinates using graphProps.scale', () => {
126
+ const mockScale = {
127
+ x: jest.fn((n) => n * 10),
128
+ y: jest.fn((n) => n * 20),
129
+ };
130
+ const gp = {
131
+ ...graphProps(),
132
+ scale: mockScale,
133
+ };
134
+
135
+ renderComponent({ x: 5, y: 10, graphProps: gp });
136
+
137
+ expect(mockScale.x).toHaveBeenCalledWith(5);
138
+ expect(mockScale.y).toHaveBeenCalledWith(10);
139
+ });
140
+
141
+ it('renders arrow with scaled coordinates', () => {
142
+ const mockScale = {
143
+ x: jest.fn((n) => n * 2),
144
+ y: jest.fn((n) => n * 3),
145
+ };
146
+ const gp = {
147
+ ...graphProps(),
148
+ scale: mockScale,
149
+ };
150
+
151
+ const { container } = renderComponent({ x: 5, y: 10, graphProps: gp, angle: 0 });
152
+ const polygon = container.querySelector('polygon');
153
+
154
+ // scaledX = 5 * 2 = 10, scaledY = 10 * 3 = 30
155
+ // Expected points: "10,30 -4,23 -4,37" (with size 14)
156
+ const points = polygon.getAttribute('points');
157
+ expect(points).toContain('10');
158
+ expect(points).toContain('30');
159
+ });
160
+ });
161
+
162
+ describe('angle rotation', () => {
163
+ it('applies rotation transform with negative angle', () => {
164
+ const { container } = renderComponent({ x: 5, y: 10, angle: 45 });
165
+ const polygon = container.querySelector('polygon');
166
+ const transform = polygon.getAttribute('transform');
167
+
168
+ // Angle should be negated: rotate(-45, 5, 10)
169
+ expect(transform).toContain('rotate(-45');
170
+ expect(transform).toContain('5');
171
+ expect(transform).toContain('10');
172
+ });
173
+
174
+ it('handles zero angle', () => {
175
+ const { container } = renderComponent({ x: 3, y: 7, angle: 0 });
176
+ const polygon = container.querySelector('polygon');
177
+ const transform = polygon.getAttribute('transform');
178
+
179
+ // will convert -0 to 0
180
+ expect(transform).toMatch(/rotate\((-)?0/);
181
+ expect(transform).toContain('3');
182
+ expect(transform).toContain('7');
183
+ });
184
+
185
+ it('handles negative angle', () => {
186
+ const { container } = renderComponent({ x: 2, y: 4, angle: -30 });
187
+ const polygon = container.querySelector('polygon');
188
+ const transform = polygon.getAttribute('transform');
189
+
190
+ // -(-30) = 30
191
+ expect(transform).toContain('rotate(30');
192
+ expect(transform).toContain('2');
193
+ expect(transform).toContain('4');
194
+ });
195
+
196
+ it('handles 360 degree angle', () => {
197
+ const { container } = renderComponent({ x: 1, y: 1, angle: 360 });
198
+ const polygon = container.querySelector('polygon');
199
+ const transform = polygon.getAttribute('transform');
200
+
201
+ expect(transform).toContain('rotate(-360');
202
+ });
203
+ });
204
+
205
+ describe('arrow points calculation', () => {
206
+ it('calculates correct points for arrow head', () => {
207
+ thinnerShapesNeeded.mockReturnValue(false);
208
+ const { container } = renderComponent({ x: 0, y: 0, angle: 0 });
209
+ const polygon = container.querySelector('polygon');
210
+
211
+ // size = 14
212
+ // points = "0,0 -14,-7 -14, 7" (note the space after comma in the template literal)
213
+ const points = polygon.getAttribute('points');
214
+ expect(points).toContain('0,0');
215
+ expect(points).toContain('-14,-7');
216
+ expect(points).toMatch(/-14,\s*7/);
217
+ });
218
+
219
+ it('calculates points with scaled coordinates', () => {
220
+ thinnerShapesNeeded.mockReturnValue(false);
221
+ const mockScale = {
222
+ x: jest.fn((n) => n),
223
+ y: jest.fn((n) => n),
224
+ };
225
+ const gp = {
226
+ ...graphProps(),
227
+ scale: mockScale,
228
+ };
229
+
230
+ const { container } = renderComponent({ x: 10, y: 20, graphProps: gp });
231
+ const polygon = container.querySelector('polygon');
232
+
233
+ // scaledX = 10, scaledY = 20, size = 14
234
+ // points = "10,20 -4,13 -4, 27" (note the space after comma in the template literal)
235
+ const points = polygon.getAttribute('points');
236
+ expect(points).toContain('10,20');
237
+ expect(points).toContain('-4,13');
238
+ expect(points).toMatch(/-4,\s*27/);
239
+ });
240
+ });
241
+
242
+ describe('props handling', () => {
243
+ it('passes through additional props to g element', () => {
244
+ const { container } = renderComponent({
245
+ 'data-test': 'arrow-test',
246
+ role: 'graphics-symbol',
247
+ });
248
+ const gElement = container.querySelector('g');
249
+ expect(gElement).toHaveAttribute('data-test', 'arrow-test');
250
+ expect(gElement).toHaveAttribute('role', 'graphics-symbol');
251
+ });
252
+
253
+ it('excludes filtered props from g element', () => {
254
+ const { container } = renderComponent({
255
+ x: 5,
256
+ y: 10,
257
+ angle: 45,
258
+ disabled: false,
259
+ correctness: 'correct',
260
+ graphProps: graphProps(),
261
+ });
262
+ const gElement = container.querySelector('g');
263
+
264
+ // These props should not be passed to the g element
265
+ expect(gElement).not.toHaveAttribute('x');
266
+ expect(gElement).not.toHaveAttribute('y');
267
+ expect(gElement).not.toHaveAttribute('angle');
268
+ expect(gElement).not.toHaveAttribute('disabled');
269
+ expect(gElement).not.toHaveAttribute('correctness');
270
+ expect(gElement).not.toHaveAttribute('graphProps');
271
+ });
272
+ });
273
+
274
+ describe('edge cases', () => {
275
+ it('handles zero coordinates', () => {
276
+ const { container } = renderComponent({ x: 0, y: 0, angle: 0 });
277
+ const polygon = container.querySelector('polygon');
278
+ expect(polygon).toBeInTheDocument();
279
+ expect(polygon.getAttribute('points')).toBeTruthy();
280
+ expect(polygon.getAttribute('transform')).toBeTruthy();
281
+ });
282
+
283
+ it('handles negative coordinates', () => {
284
+ const { container } = renderComponent({ x: -5, y: -10, angle: 0 });
285
+ const polygon = container.querySelector('polygon');
286
+ expect(polygon).toBeInTheDocument();
287
+ expect(polygon.getAttribute('points')).toBeTruthy();
288
+ expect(polygon.getAttribute('transform')).toBeTruthy();
289
+ });
290
+
291
+ it('handles large coordinates', () => {
292
+ const { container } = renderComponent({ x: 1000, y: 2000, angle: 0 });
293
+ const polygon = container.querySelector('polygon');
294
+ expect(polygon).toBeInTheDocument();
295
+ });
296
+
297
+ it('handles fractional coordinates', () => {
298
+ const { container } = renderComponent({ x: 3.5, y: 7.25, angle: 22.5 });
299
+ const polygon = container.querySelector('polygon');
300
+ expect(polygon).toBeInTheDocument();
301
+ expect(polygon.getAttribute('transform')).toContain('rotate(-22.5');
302
+ });
303
+
304
+ it('renders with empty classes prop', () => {
305
+ const { container } = render(<Arrow x={5} y={10} angle={45} graphProps={graphProps()} classes={{}} />);
306
+ const gElement = container.querySelector('g');
307
+ expect(gElement).toBeInTheDocument();
308
+ });
309
+
310
+ it('renders without className prop', () => {
311
+ const { container } = render(<Arrow x={5} y={10} angle={45} graphProps={graphProps()} classes={{}} />);
312
+ const gElement = container.querySelector('g');
313
+ expect(gElement).toBeInTheDocument();
314
+ });
315
+ });
316
+
317
+ describe('graphProps integration', () => {
318
+ it('works with different domain and range values', () => {
319
+ const gp = graphProps(-10, 10, -20, 20);
320
+ const { container } = renderComponent({ graphProps: gp });
321
+ expect(container.querySelector('polygon')).toBeInTheDocument();
322
+ expect(thinnerShapesNeeded).toHaveBeenCalledWith(gp);
323
+ });
324
+
325
+ it('works with custom size in graphProps', () => {
326
+ const gp = {
327
+ ...graphProps(),
328
+ size: {
329
+ width: 800,
330
+ height: 600,
331
+ },
332
+ };
333
+ const { container } = renderComponent({ graphProps: gp });
334
+ expect(container.querySelector('polygon')).toBeInTheDocument();
335
+ });
336
+
337
+ it('handles graphProps with small step values', () => {
338
+ const gp = {
339
+ ...graphProps(),
340
+ domain: { min: 0, max: 10, step: 0.1 },
341
+ range: { min: 0, max: 10, step: 0.1 },
342
+ };
343
+ thinnerShapesNeeded.mockReturnValue(true);
344
+ const { container } = renderComponent({ graphProps: gp });
345
+ const polygon = container.querySelector('polygon');
346
+
347
+ // Should use size 12 for thinner shapes
348
+ expect(polygon).toBeInTheDocument();
349
+ expect(thinnerShapesNeeded).toHaveBeenCalledWith(gp);
350
+ });
351
+ });
352
+
353
+ describe('multiple correctness states', () => {
354
+ it('handles partial correctness', () => {
355
+ const { container } = renderComponent({
356
+ classes: { point: 'point-class', partial: 'partial-class' },
357
+ correctness: 'partial',
358
+ });
359
+ const gElement = container.querySelector('g');
360
+ expect(gElement).toHaveClass('partial-class');
361
+ });
362
+
363
+ it('handles undefined correctness', () => {
364
+ const { container } = renderComponent({
365
+ classes: { point: 'point-class' },
366
+ correctness: undefined,
367
+ });
368
+ const gElement = container.querySelector('g');
369
+ expect(gElement).toHaveClass('point-class');
370
+ });
371
+
372
+ it('handles null correctness', () => {
373
+ const { container } = renderComponent({
374
+ classes: { point: 'point-class' },
375
+ correctness: null,
376
+ });
377
+ const gElement = container.querySelector('g');
378
+ expect(gElement).toHaveClass('point-class');
379
+ });
380
+ });
381
+
382
+ describe('combined states', () => {
383
+ it('handles disabled and correct states together', () => {
384
+ const { container } = renderComponent({
385
+ classes: {
386
+ point: 'point-class',
387
+ disabled: 'disabled-class',
388
+ correct: 'correct-class',
389
+ },
390
+ disabled: true,
391
+ correctness: 'correct',
392
+ });
393
+ const gElement = container.querySelector('g');
394
+ expect(gElement).toHaveClass('point-class');
395
+ expect(gElement).toHaveClass('disabled-class');
396
+ expect(gElement).toHaveClass('correct-class');
397
+ });
398
+
399
+ it('handles disabled and incorrect states together', () => {
400
+ const { container } = renderComponent({
401
+ classes: {
402
+ point: 'point-class',
403
+ disabled: 'disabled-class',
404
+ incorrect: 'incorrect-class',
405
+ },
406
+ disabled: true,
407
+ correctness: 'incorrect',
408
+ });
409
+ const gElement = container.querySelector('g');
410
+ expect(gElement).toHaveClass('point-class');
411
+ expect(gElement).toHaveClass('disabled-class');
412
+ expect(gElement).toHaveClass('incorrect-class');
413
+ });
414
+ });
415
+
416
+ describe('re-rendering', () => {
417
+ it('updates when x coordinate changes', () => {
418
+ const { container, rerender } = renderComponent({ x: 5, y: 10, angle: 0 });
419
+ let polygon = container.querySelector('polygon');
420
+ const initialPoints = polygon.getAttribute('points');
421
+
422
+ rerender(<Arrow x={15} y={10} angle={0} graphProps={graphProps()} classes={{}} className="arrow-class" />);
423
+
424
+ polygon = container.querySelector('polygon');
425
+ const newPoints = polygon.getAttribute('points');
426
+ expect(newPoints).not.toBe(initialPoints);
427
+ });
428
+
429
+ it('updates when y coordinate changes', () => {
430
+ const { container, rerender } = renderComponent({ x: 5, y: 10, angle: 0 });
431
+ let polygon = container.querySelector('polygon');
432
+ const initialPoints = polygon.getAttribute('points');
433
+
434
+ rerender(<Arrow x={5} y={20} angle={0} graphProps={graphProps()} classes={{}} className="arrow-class" />);
435
+
436
+ polygon = container.querySelector('polygon');
437
+ const newPoints = polygon.getAttribute('points');
438
+ expect(newPoints).not.toBe(initialPoints);
439
+ });
440
+
441
+ it('updates when angle changes', () => {
442
+ const { container, rerender } = renderComponent({ x: 5, y: 10, angle: 0 });
443
+ let polygon = container.querySelector('polygon');
444
+ const initialTransform = polygon.getAttribute('transform');
445
+
446
+ rerender(<Arrow x={5} y={10} angle={90} graphProps={graphProps()} classes={{}} className="arrow-class" />);
447
+
448
+ polygon = container.querySelector('polygon');
449
+ const newTransform = polygon.getAttribute('transform');
450
+ expect(newTransform).not.toBe(initialTransform);
451
+ expect(newTransform).toContain('rotate(-90');
452
+ });
453
+
454
+ it('updates when thinnerShapesNeeded result changes', () => {
455
+ thinnerShapesNeeded.mockReturnValue(false);
456
+ const { container, rerender } = renderComponent({ x: 0, y: 0, angle: 0 });
457
+ let polygon = container.querySelector('polygon');
458
+ const initialPoints = polygon.getAttribute('points');
459
+
460
+ thinnerShapesNeeded.mockReturnValue(true);
461
+ rerender(<Arrow x={0} y={0} angle={0} graphProps={graphProps()} classes={{}} className="arrow-class" />);
462
+
463
+ polygon = container.querySelector('polygon');
464
+ const newPoints = polygon.getAttribute('points');
465
+ // Points should change due to size change (14 vs 12)
466
+ expect(newPoints).not.toBe(initialPoints);
467
+ });
468
+ });
469
+ });
@@ -0,0 +1,87 @@
1
+ import { render } from '@pie-lib/test-utils';
2
+ import React from 'react';
3
+ import { BasePoint } from '../index';
4
+ import { gridDraggable } from '@pie-lib/plot';
5
+ import { graphProps } from '../../../../__tests__/utils';
6
+ import { bounds } from '../../../../utils';
7
+
8
+ jest.mock('../../../../utils', () => {
9
+ const { point, thinnerShapesNeeded } = jest.requireActual('../../../../utils');
10
+ return {
11
+ bounds: jest.fn(),
12
+ point,
13
+ thinnerShapesNeeded,
14
+ };
15
+ });
16
+
17
+ jest.mock('@pie-lib/plot', () => {
18
+ const { types, utils } = jest.requireActual('@pie-lib/plot');
19
+ return {
20
+ gridDraggable: jest.fn((opts) => (Comp) => Comp),
21
+ types,
22
+ utils,
23
+ };
24
+ });
25
+
26
+ describe('BasePoint', () => {
27
+ let onChange = jest.fn();
28
+
29
+ const renderComponent = (extras) => {
30
+ const defaults = {
31
+ classes: {},
32
+ className: 'className',
33
+ onChange,
34
+ graphProps: graphProps(),
35
+ x: 0,
36
+ y: 0,
37
+ };
38
+ const props = { ...defaults, ...extras };
39
+ return render(<BasePoint {...props} />);
40
+ };
41
+
42
+ describe('rendering', () => {
43
+ it('renders without crashing', () => {
44
+ const { container } = renderComponent();
45
+ expect(container.firstChild).toBeInTheDocument();
46
+ });
47
+ });
48
+ describe('gridDraggable options', () => {
49
+ let opts;
50
+ let domain;
51
+ let range;
52
+ beforeEach(() => {
53
+ domain = {
54
+ min: 0,
55
+ max: 1,
56
+ step: 1,
57
+ };
58
+ range = {
59
+ min: 0,
60
+ max: 1,
61
+ step: 1,
62
+ };
63
+ renderComponent();
64
+ opts = gridDraggable.mock.calls[gridDraggable.mock.calls.length - 1][0];
65
+ });
66
+
67
+ describe('bounds', () => {
68
+ it('calls utils.bounds with area', () => {
69
+ const result = opts.bounds({ x: 0, y: 0 }, { domain, range });
70
+ expect(bounds).toHaveBeenCalledWith({ left: 0, top: 0, bottom: 0, right: 0 }, domain, range);
71
+ });
72
+ });
73
+ describe('anchorPoint', () => {
74
+ it('returns x/y', () => {
75
+ const result = opts.anchorPoint({ x: 0, y: 0 });
76
+ expect(result).toEqual({ x: 0, y: 0 });
77
+ });
78
+ });
79
+
80
+ describe('fromDelta', () => {
81
+ it('returns a new point from the x/y + delta', () => {
82
+ const result = opts.fromDelta({ x: -1, y: 0 }, { x: 1, y: 3 });
83
+ expect(result).toEqual({ x: 0, y: 3 });
84
+ });
85
+ });
86
+ });
87
+ });