@pie-lib/graphing-solution-set 4.1.0-beta.7 → 5.0.0-next.35

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 (332) 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 +85 -0
  24. package/dist/graph-with-controls.js +155 -0
  25. package/dist/graph.d.ts +119 -0
  26. package/dist/graph.js +221 -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 +14 -0
  32. package/dist/index.js +6 -0
  33. package/dist/labels.d.ts +73 -0
  34. package/dist/labels.js +134 -0
  35. package/dist/mark-label.d.ts +50 -0
  36. package/dist/mark-label.js +84 -0
  37. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Axis.js +67 -0
  38. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/AxisRenderer.js +66 -0
  39. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/axis/Ticks.js +39 -0
  40. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/constants/orientation.js +9 -0
  41. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/createPoint.js +14 -0
  42. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js +13 -0
  43. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getLabelTransform.js +16 -0
  44. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickFormatter.js +8 -0
  45. package/dist/node_modules/.bun/@visx_axis@4.0.0_d84c32d47042070f/node_modules/@visx/axis/esm/utils/getTickPosition.js +14 -0
  46. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/Grid.js +43 -0
  47. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridColumns.js +46 -0
  48. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/grids/GridRows.js +46 -0
  49. package/dist/node_modules/.bun/@visx_grid@4.0.0_d84c32d47042070f/node_modules/@visx/grid/esm/utils/getScaleBandwidth.js +6 -0
  50. package/dist/node_modules/.bun/@visx_group@4.0.0_d84c32d47042070f/node_modules/@visx/group/esm/Group.js +17 -0
  51. package/dist/node_modules/.bun/@visx_point@4.0.0/node_modules/@visx/point/esm/Point.js +20 -0
  52. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/coerceNumber.js +10 -0
  53. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/getTicks.js +7 -0
  54. package/dist/node_modules/.bun/@visx_scale@4.0.0/node_modules/@visx/scale/esm/utils/toString.js +6 -0
  55. package/dist/node_modules/.bun/@visx_shape@4.0.0_d84c32d47042070f/node_modules/@visx/shape/esm/shapes/Line.js +27 -0
  56. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/Text.js +27 -0
  57. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/hooks/useText.js +68 -0
  58. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/getStringWidth.js +19 -0
  59. package/dist/node_modules/.bun/@visx_text@4.0.0_d84c32d47042070f/node_modules/@visx/text/esm/util/memoize.js +13 -0
  60. package/dist/node_modules/.bun/balanced-match@0.4.2/node_modules/balanced-match/index.js +32 -0
  61. package/dist/node_modules/.bun/balanced-match@1.0.2/node_modules/balanced-match/index.js +33 -0
  62. package/dist/node_modules/.bun/classnames@2.5.1/node_modules/classnames/index.js +32 -0
  63. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +16 -0
  64. package/dist/node_modules/.bun/invariant@2.2.4/node_modules/invariant/browser.js +28 -0
  65. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/formula_evaluator.js +37 -0
  66. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/lexer.js +509 -0
  67. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/math_function.js +108 -0
  68. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix.js +31 -0
  69. package/dist/node_modules/.bun/math-expression-evaluator@1.4.0/node_modules/math-expression-evaluator/src/postfix_evaluator.js +45 -0
  70. package/dist/node_modules/.bun/reduce-css-calc@1.3.0/node_modules/reduce-css-calc/index.js +49 -0
  71. package/dist/node_modules/.bun/reduce-function-call@1.0.3/node_modules/reduce-function-call/index.js +34 -0
  72. package/dist/node_modules/.bun/redux-undo@1.1.0/node_modules/redux-undo/dist/redux-undo.js +185 -0
  73. package/dist/node_modules/.bun/redux@5.0.1/node_modules/redux/dist/redux.js +198 -0
  74. package/dist/toggle-bar.d.ts +40 -0
  75. package/dist/tool-menu.d.ts +21 -0
  76. package/dist/tool-menu.js +188 -0
  77. package/dist/tools/index.d.ts +17 -0
  78. package/dist/tools/index.js +12 -0
  79. package/dist/tools/line/component.d.ts +113 -0
  80. package/dist/tools/line/component.js +58 -0
  81. package/dist/tools/line/index.d.ts +13 -0
  82. package/dist/tools/line/index.js +6 -0
  83. package/dist/tools/polygon/component.d.ts +117 -0
  84. package/dist/tools/polygon/component.js +194 -0
  85. package/dist/tools/polygon/index.d.ts +19 -0
  86. package/dist/tools/polygon/index.js +55 -0
  87. package/dist/tools/polygon/line.d.ts +125 -0
  88. package/dist/tools/polygon/polygon.d.ts +122 -0
  89. package/dist/tools/polygon/polygon.js +62 -0
  90. package/dist/tools/shared/arrow-head.d.ts +43 -0
  91. package/dist/tools/shared/arrow-head.js +37 -0
  92. package/dist/tools/shared/line/index.d.ts +240 -0
  93. package/dist/tools/shared/line/index.js +320 -0
  94. package/dist/tools/shared/line/line-path.d.ts +57 -0
  95. package/dist/tools/shared/line/with-root-edge.d.ts +143 -0
  96. package/dist/tools/shared/point/arrow-point.d.ts +57 -0
  97. package/dist/tools/shared/point/arrow-point.js +47 -0
  98. package/dist/tools/shared/point/arrow.d.ts +46 -0
  99. package/dist/tools/shared/point/arrow.js +36 -0
  100. package/dist/tools/shared/point/base-point.d.ts +50 -0
  101. package/dist/tools/shared/point/base-point.js +88 -0
  102. package/dist/tools/shared/point/index.d.ts +217 -0
  103. package/dist/tools/shared/point/index.js +51 -0
  104. package/dist/tools/shared/styles.d.ts +24 -0
  105. package/dist/tools/shared/styles.js +17 -0
  106. package/dist/tools/shared/types.d.ts +15 -0
  107. package/dist/tools/shared/types.js +10 -0
  108. package/dist/undo-redo.d.ts +20 -0
  109. package/dist/undo-redo.js +33 -0
  110. package/dist/use-debounce.d.ts +9 -0
  111. package/dist/use-debounce.js +13 -0
  112. package/dist/utils.d.ts +58 -0
  113. package/dist/utils.js +72 -0
  114. package/package.json +52 -42
  115. package/CHANGELOG.json +0 -1
  116. package/CHANGELOG.md +0 -449
  117. package/lib/__tests__/bg.test.js +0 -282
  118. package/lib/__tests__/bg.test.js.map +0 -1
  119. package/lib/__tests__/coordinates-label.test.js +0 -276
  120. package/lib/__tests__/coordinates-label.test.js.map +0 -1
  121. package/lib/__tests__/graph-with-controls.test.js +0 -256
  122. package/lib/__tests__/graph-with-controls.test.js.map +0 -1
  123. package/lib/__tests__/graph.test.js +0 -113
  124. package/lib/__tests__/graph.test.js.map +0 -1
  125. package/lib/__tests__/grid-setup.test.js +0 -729
  126. package/lib/__tests__/grid-setup.test.js.map +0 -1
  127. package/lib/__tests__/grid.test.js +0 -29
  128. package/lib/__tests__/grid.test.js.map +0 -1
  129. package/lib/__tests__/labels.test.js +0 -45
  130. package/lib/__tests__/labels.test.js.map +0 -1
  131. package/lib/__tests__/mark-label.test.js +0 -133
  132. package/lib/__tests__/mark-label.test.js.map +0 -1
  133. package/lib/__tests__/toggle-bar.test.js +0 -146
  134. package/lib/__tests__/toggle-bar.test.js.map +0 -1
  135. package/lib/__tests__/tool-menu.test.js +0 -540
  136. package/lib/__tests__/tool-menu.test.js.map +0 -1
  137. package/lib/__tests__/undo-redo.test.js +0 -31
  138. package/lib/__tests__/undo-redo.test.js.map +0 -1
  139. package/lib/__tests__/use-debounce.test.js +0 -24
  140. package/lib/__tests__/use-debounce.test.js.map +0 -1
  141. package/lib/__tests__/utils.js +0 -70
  142. package/lib/__tests__/utils.js.map +0 -1
  143. package/lib/__tests__/utils.test.js +0 -123
  144. package/lib/__tests__/utils.test.js.map +0 -1
  145. package/lib/axis/__tests__/arrow.test.js +0 -60
  146. package/lib/axis/__tests__/arrow.test.js.map +0 -1
  147. package/lib/axis/__tests__/axes.test.js +0 -160
  148. package/lib/axis/__tests__/axes.test.js.map +0 -1
  149. package/lib/axis/arrow.js +0 -79
  150. package/lib/axis/arrow.js.map +0 -1
  151. package/lib/axis/axes.js +0 -327
  152. package/lib/axis/axes.js.map +0 -1
  153. package/lib/axis/index.js +0 -21
  154. package/lib/axis/index.js.map +0 -1
  155. package/lib/bg.js +0 -114
  156. package/lib/bg.js.map +0 -1
  157. package/lib/container/__tests__/actions.test.js +0 -108
  158. package/lib/container/__tests__/actions.test.js.map +0 -1
  159. package/lib/container/__tests__/index.test.js +0 -346
  160. package/lib/container/__tests__/index.test.js.map +0 -1
  161. package/lib/container/__tests__/marks.test.js +0 -259
  162. package/lib/container/__tests__/marks.test.js.map +0 -1
  163. package/lib/container/__tests__/middleware.test.js +0 -244
  164. package/lib/container/__tests__/middleware.test.js.map +0 -1
  165. package/lib/container/__tests__/reducer.test.js +0 -450
  166. package/lib/container/__tests__/reducer.test.js.map +0 -1
  167. package/lib/container/actions.js +0 -18
  168. package/lib/container/actions.js.map +0 -1
  169. package/lib/container/index.js +0 -129
  170. package/lib/container/index.js.map +0 -1
  171. package/lib/container/marks.js +0 -22
  172. package/lib/container/marks.js.map +0 -1
  173. package/lib/container/middleware.js +0 -19
  174. package/lib/container/middleware.js.map +0 -1
  175. package/lib/container/reducer.js +0 -18
  176. package/lib/container/reducer.js.map +0 -1
  177. package/lib/coordinates-label.js +0 -77
  178. package/lib/coordinates-label.js.map +0 -1
  179. package/lib/graph-with-controls.js +0 -297
  180. package/lib/graph-with-controls.js.map +0 -1
  181. package/lib/graph.js +0 -353
  182. package/lib/graph.js.map +0 -1
  183. package/lib/grid-setup.js +0 -414
  184. package/lib/grid-setup.js.map +0 -1
  185. package/lib/grid.js +0 -131
  186. package/lib/grid.js.map +0 -1
  187. package/lib/index.js +0 -40
  188. package/lib/index.js.map +0 -1
  189. package/lib/labels.js +0 -199
  190. package/lib/labels.js.map +0 -1
  191. package/lib/mark-label.js +0 -159
  192. package/lib/mark-label.js.map +0 -1
  193. package/lib/toggle-bar.js +0 -248
  194. package/lib/toggle-bar.js.map +0 -1
  195. package/lib/tool-menu.js +0 -218
  196. package/lib/tool-menu.js.map +0 -1
  197. package/lib/tools/index.js +0 -24
  198. package/lib/tools/index.js.map +0 -1
  199. package/lib/tools/line/__tests__/component.test.js +0 -45
  200. package/lib/tools/line/__tests__/component.test.js.map +0 -1
  201. package/lib/tools/line/component.js +0 -92
  202. package/lib/tools/line/component.js.map +0 -1
  203. package/lib/tools/line/index.js +0 -11
  204. package/lib/tools/line/index.js.map +0 -1
  205. package/lib/tools/polygon/__tests__/component.test.js +0 -501
  206. package/lib/tools/polygon/__tests__/component.test.js.map +0 -1
  207. package/lib/tools/polygon/__tests__/index.test.js +0 -92
  208. package/lib/tools/polygon/__tests__/index.test.js.map +0 -1
  209. package/lib/tools/polygon/__tests__/line.test.js +0 -30
  210. package/lib/tools/polygon/__tests__/line.test.js.map +0 -1
  211. package/lib/tools/polygon/__tests__/polygon.test.js +0 -61
  212. package/lib/tools/polygon/__tests__/polygon.test.js.map +0 -1
  213. package/lib/tools/polygon/component.js +0 -358
  214. package/lib/tools/polygon/component.js.map +0 -1
  215. package/lib/tools/polygon/index.js +0 -89
  216. package/lib/tools/polygon/index.js.map +0 -1
  217. package/lib/tools/polygon/line.js +0 -114
  218. package/lib/tools/polygon/line.js.map +0 -1
  219. package/lib/tools/polygon/polygon.js +0 -128
  220. package/lib/tools/polygon/polygon.js.map +0 -1
  221. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
  222. package/lib/tools/shared/__tests__/arrow-head.test.js.map +0 -1
  223. package/lib/tools/shared/arrow-head.js +0 -62
  224. package/lib/tools/shared/arrow-head.js.map +0 -1
  225. package/lib/tools/shared/line/__tests__/index.test.js +0 -725
  226. package/lib/tools/shared/line/__tests__/index.test.js.map +0 -1
  227. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -64
  228. package/lib/tools/shared/line/__tests__/line-path.test.js.map +0 -1
  229. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -618
  230. package/lib/tools/shared/line/__tests__/with-root-edge.test.js.map +0 -1
  231. package/lib/tools/shared/line/index.js +0 -539
  232. package/lib/tools/shared/line/index.js.map +0 -1
  233. package/lib/tools/shared/line/line-path.js +0 -121
  234. package/lib/tools/shared/line/line-path.js.map +0 -1
  235. package/lib/tools/shared/line/with-root-edge.js +0 -121
  236. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  237. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
  238. package/lib/tools/shared/point/__tests__/arrow-point.test.js.map +0 -1
  239. package/lib/tools/shared/point/__tests__/arrow.test.js +0 -619
  240. package/lib/tools/shared/point/__tests__/arrow.test.js.map +0 -1
  241. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
  242. package/lib/tools/shared/point/__tests__/base-point.test.js.map +0 -1
  243. package/lib/tools/shared/point/arrow-point.js +0 -86
  244. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  245. package/lib/tools/shared/point/arrow.js +0 -70
  246. package/lib/tools/shared/point/arrow.js.map +0 -1
  247. package/lib/tools/shared/point/base-point.js +0 -137
  248. package/lib/tools/shared/point/base-point.js.map +0 -1
  249. package/lib/tools/shared/point/index.js +0 -80
  250. package/lib/tools/shared/point/index.js.map +0 -1
  251. package/lib/tools/shared/styles.js +0 -26
  252. package/lib/tools/shared/styles.js.map +0 -1
  253. package/lib/tools/shared/types.js +0 -15
  254. package/lib/tools/shared/types.js.map +0 -1
  255. package/lib/undo-redo.js +0 -67
  256. package/lib/undo-redo.js.map +0 -1
  257. package/lib/use-debounce.js +0 -25
  258. package/lib/use-debounce.js.map +0 -1
  259. package/lib/utils.js +0 -235
  260. package/lib/utils.js.map +0 -1
  261. package/src/__tests__/bg.test.jsx +0 -250
  262. package/src/__tests__/coordinates-label.test.jsx +0 -243
  263. package/src/__tests__/graph-with-controls.test.jsx +0 -184
  264. package/src/__tests__/graph.test.jsx +0 -93
  265. package/src/__tests__/grid-setup.test.jsx +0 -645
  266. package/src/__tests__/grid.test.jsx +0 -23
  267. package/src/__tests__/labels.test.jsx +0 -41
  268. package/src/__tests__/mark-label.test.jsx +0 -66
  269. package/src/__tests__/toggle-bar.test.jsx +0 -106
  270. package/src/__tests__/tool-menu.test.jsx +0 -453
  271. package/src/__tests__/undo-redo.test.jsx +0 -26
  272. package/src/__tests__/use-debounce.test.js +0 -21
  273. package/src/__tests__/utils.js +0 -41
  274. package/src/__tests__/utils.test.js +0 -105
  275. package/src/axis/__tests__/arrow.test.jsx +0 -43
  276. package/src/axis/__tests__/axes.test.jsx +0 -182
  277. package/src/axis/arrow.jsx +0 -57
  278. package/src/axis/axes.jsx +0 -284
  279. package/src/axis/index.js +0 -3
  280. package/src/bg.jsx +0 -96
  281. package/src/container/__tests__/actions.test.js +0 -105
  282. package/src/container/__tests__/index.test.jsx +0 -227
  283. package/src/container/__tests__/marks.test.js +0 -172
  284. package/src/container/__tests__/middleware.test.js +0 -235
  285. package/src/container/__tests__/reducer.test.js +0 -324
  286. package/src/container/actions.js +0 -8
  287. package/src/container/index.jsx +0 -93
  288. package/src/container/marks.js +0 -14
  289. package/src/container/middleware.js +0 -7
  290. package/src/container/reducer.js +0 -5
  291. package/src/coordinates-label.jsx +0 -62
  292. package/src/graph-with-controls.jsx +0 -242
  293. package/src/graph.jsx +0 -333
  294. package/src/grid-setup.jsx +0 -432
  295. package/src/grid.jsx +0 -133
  296. package/src/index.js +0 -7
  297. package/src/labels.jsx +0 -173
  298. package/src/mark-label.jsx +0 -125
  299. package/src/toggle-bar.jsx +0 -221
  300. package/src/tool-menu.jsx +0 -235
  301. package/src/tools/index.js +0 -8
  302. package/src/tools/line/__tests__/component.test.jsx +0 -37
  303. package/src/tools/line/component.jsx +0 -77
  304. package/src/tools/line/index.js +0 -4
  305. package/src/tools/polygon/__tests__/component.test.jsx +0 -487
  306. package/src/tools/polygon/__tests__/index.test.js +0 -65
  307. package/src/tools/polygon/__tests__/line.test.jsx +0 -23
  308. package/src/tools/polygon/__tests__/polygon.test.jsx +0 -44
  309. package/src/tools/polygon/component.jsx +0 -324
  310. package/src/tools/polygon/index.js +0 -52
  311. package/src/tools/polygon/line.jsx +0 -80
  312. package/src/tools/polygon/polygon.jsx +0 -93
  313. package/src/tools/shared/__tests__/arrow-head.test.jsx +0 -33
  314. package/src/tools/shared/arrow-head.jsx +0 -46
  315. package/src/tools/shared/line/__tests__/index.test.jsx +0 -553
  316. package/src/tools/shared/line/__tests__/line-path.test.jsx +0 -56
  317. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +0 -488
  318. package/src/tools/shared/line/index.jsx +0 -471
  319. package/src/tools/shared/line/line-path.jsx +0 -85
  320. package/src/tools/shared/line/with-root-edge.jsx +0 -97
  321. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +0 -91
  322. package/src/tools/shared/point/__tests__/arrow.test.jsx +0 -469
  323. package/src/tools/shared/point/__tests__/base-point.test.jsx +0 -87
  324. package/src/tools/shared/point/arrow-point.jsx +0 -60
  325. package/src/tools/shared/point/arrow.jsx +0 -40
  326. package/src/tools/shared/point/base-point.jsx +0 -113
  327. package/src/tools/shared/point/index.jsx +0 -58
  328. package/src/tools/shared/styles.js +0 -20
  329. package/src/tools/shared/types.js +0 -8
  330. package/src/undo-redo.jsx +0 -37
  331. package/src/use-debounce.js +0 -13
  332. package/src/utils.js +0 -230
@@ -1,250 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@pie-lib/test-utils';
3
- import { select } from 'd3-selection';
4
- import Bg from '../bg';
5
-
6
- jest.mock('d3-selection', () => ({
7
- select: jest.fn(),
8
- pointer: jest.fn(() => [50, 50]),
9
- }));
10
-
11
- describe('Bg', () => {
12
- let defaultProps;
13
- let mockRect;
14
- let clickHandler;
15
-
16
- beforeEach(() => {
17
- clickHandler = null;
18
- mockRect = {
19
- on: jest.fn((event, handler) => {
20
- if (event === 'click') {
21
- clickHandler = handler;
22
- }
23
- }),
24
- node: jest.fn(() => ({})),
25
- };
26
-
27
- select.mockReturnValue(mockRect);
28
-
29
- defaultProps = {
30
- width: 500,
31
- height: 400,
32
- onClick: jest.fn(),
33
- graphProps: {
34
- domain: { min: -10, max: 10, step: 1, label: 'x', axisLabel: 'X' },
35
- range: { min: -10, max: 10, step: 1, label: 'y', axisLabel: 'Y' },
36
- size: { width: 500, height: 400 },
37
- scale: {
38
- x: {
39
- invert: jest.fn((val) => val / 10),
40
- },
41
- y: {
42
- invert: jest.fn((val) => val / 10),
43
- },
44
- },
45
- },
46
- };
47
- });
48
-
49
- describe('rendering', () => {
50
- it('renders without crashing', () => {
51
- const { container } = render(<Bg {...defaultProps} />);
52
- expect(container).toBeTruthy();
53
- });
54
-
55
- it('renders a rect element', () => {
56
- const { container } = render(<Bg {...defaultProps} />);
57
- const rect = container.querySelector('rect');
58
- expect(rect).toBeTruthy();
59
- });
60
-
61
- it('applies correct dimensions', () => {
62
- const { container } = render(<Bg {...defaultProps} />);
63
- const rect = container.querySelector('rect');
64
-
65
- // Width and height should be expanded by padding * 2
66
- const padding = 10; // default padding
67
- expect(rect.getAttribute('width')).toBe(String(defaultProps.width + padding * 2));
68
- expect(rect.getAttribute('height')).toBe(String(defaultProps.height + padding * 2));
69
- });
70
-
71
- it('applies correct transform', () => {
72
- const { container } = render(<Bg {...defaultProps} />);
73
- const rect = container.querySelector('rect');
74
- const padding = 10;
75
-
76
- expect(rect.getAttribute('transform')).toBe(`translate(-${padding}, -${padding})`);
77
- });
78
-
79
- it('sets fill opacity to make it invisible', () => {
80
- const { container } = render(<Bg {...defaultProps} />);
81
- const rect = container.querySelector('rect');
82
-
83
- expect(rect.getAttribute('fill-opacity')).toBe('0.0');
84
- });
85
- });
86
-
87
- describe('componentDidMount', () => {
88
- it('attaches click handler to rect', () => {
89
- render(<Bg {...defaultProps} />);
90
-
91
- expect(select).toHaveBeenCalled();
92
- expect(mockRect.on).toHaveBeenCalledWith('click', expect.any(Function));
93
- });
94
- });
95
-
96
- describe('getRectPadding', () => {
97
- it('returns 10 for normal graphs', () => {
98
- const { container } = render(<Bg {...defaultProps} />);
99
- const rect = container.querySelector('rect');
100
- const padding = 10;
101
-
102
- expect(rect.getAttribute('width')).toBe(String(defaultProps.width + padding * 2));
103
- });
104
-
105
- it('returns 6 for graphs with thinner shapes', () => {
106
- const props = {
107
- ...defaultProps,
108
- graphProps: {
109
- ...defaultProps.graphProps,
110
- domain: { min: -100, max: 100, step: 1, label: 'x', axisLabel: 'X' },
111
- },
112
- };
113
-
114
- const { container } = render(<Bg {...props} />);
115
- const rect = container.querySelector('rect');
116
- const padding = 6;
117
-
118
- expect(rect.getAttribute('width')).toBe(String(props.width + padding * 2));
119
- });
120
- });
121
-
122
- describe('onRectClick', () => {
123
- it('calls onClick with snapped coordinates', () => {
124
- const { pointer } = require('d3-selection');
125
- pointer.mockReturnValue([100, 100]);
126
-
127
- render(<Bg {...defaultProps} />);
128
-
129
- const event = new MouseEvent('click');
130
- clickHandler(event);
131
-
132
- expect(defaultProps.onClick).toHaveBeenCalled();
133
- const calledWith = defaultProps.onClick.mock.calls[0][0];
134
- expect(calledWith).toHaveProperty('x');
135
- expect(calledWith).toHaveProperty('y');
136
- });
137
-
138
- it('snaps coordinates to nearest tick', () => {
139
- const { pointer } = require('d3-selection');
140
-
141
- render(<Bg {...defaultProps} />);
142
-
143
- const event = new MouseEvent('click');
144
- clickHandler(event);
145
-
146
- expect(defaultProps.onClick).toHaveBeenCalled();
147
- const { x, y } = defaultProps.onClick.mock.calls[0][0];
148
-
149
- expect(Number.isInteger(x) || x.toString().length <= 4).toBe(true);
150
- expect(Number.isInteger(y) || y.toString().length <= 4).toBe(true);
151
- });
152
-
153
- it('accounts for padding when converting coordinates', () => {
154
- const { pointer } = require('d3-selection');
155
- const coords = [50, 50];
156
- pointer.mockReturnValue(coords);
157
-
158
- render(<Bg {...defaultProps} />);
159
-
160
- const event = new MouseEvent('click');
161
- clickHandler(event);
162
-
163
- expect(defaultProps.graphProps.scale.x.invert).toHaveBeenCalled();
164
- expect(defaultProps.graphProps.scale.y.invert).toHaveBeenCalled();
165
- });
166
- });
167
-
168
- describe('shouldComponentUpdate', () => {
169
- it('returns true when width changes', () => {
170
- const { rerender } = render(<Bg {...defaultProps} />);
171
- const newProps = {
172
- ...defaultProps,
173
- width: 600,
174
- graphProps: {
175
- ...defaultProps.graphProps,
176
- size: { width: 600, height: defaultProps.height },
177
- },
178
- };
179
-
180
- expect(() => {
181
- rerender(<Bg {...newProps} />);
182
- }).not.toThrow();
183
- });
184
-
185
- it('returns true when height changes', () => {
186
- const { rerender } = render(<Bg {...defaultProps} />);
187
- const newProps = {
188
- ...defaultProps,
189
- height: 500,
190
- graphProps: {
191
- ...defaultProps.graphProps,
192
- size: { width: defaultProps.width, height: 500 },
193
- },
194
- };
195
-
196
- expect(() => {
197
- rerender(<Bg {...newProps} />);
198
- }).not.toThrow();
199
- });
200
-
201
- it('returns true when graphProps domain/range changes', () => {
202
- const { rerender } = render(<Bg {...defaultProps} />);
203
- const newProps = {
204
- ...defaultProps,
205
- graphProps: {
206
- ...defaultProps.graphProps,
207
- domain: { min: -5, max: 5, step: 1, label: 'x', axisLabel: 'X' },
208
- },
209
- };
210
-
211
- expect(() => {
212
- rerender(<Bg {...newProps} />);
213
- }).not.toThrow();
214
- });
215
- });
216
-
217
- describe('edge cases', () => {
218
- it('handles zero dimensions', () => {
219
- const props = { ...defaultProps, width: 0, height: 0 };
220
- const { container } = render(<Bg {...props} />);
221
- const rect = container.querySelector('rect');
222
-
223
- expect(rect).toBeTruthy();
224
- });
225
-
226
- it('handles large dimensions', () => {
227
- const props = { ...defaultProps, width: 10000, height: 10000 };
228
- const { container } = render(<Bg {...props} />);
229
- const rect = container.querySelector('rect');
230
-
231
- expect(rect).toBeTruthy();
232
- expect(rect.getAttribute('width')).toBe('10020');
233
- expect(rect.getAttribute('height')).toBe('10020');
234
- });
235
-
236
- it('handles negative coordinates in domain/range', () => {
237
- const props = {
238
- ...defaultProps,
239
- graphProps: {
240
- ...defaultProps.graphProps,
241
- domain: { min: -100, max: -10, step: 1, label: 'x', axisLabel: 'X' },
242
- range: { min: -100, max: -10, step: 1, label: 'y', axisLabel: 'Y' },
243
- },
244
- };
245
-
246
- const { container } = render(<Bg {...props} />);
247
- expect(container.querySelector('rect')).toBeTruthy();
248
- });
249
- });
250
- });
@@ -1,243 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@pie-lib/test-utils';
3
- import { CoordinatesLabel, getLabelPosition } from '../coordinates-label';
4
-
5
- describe('CoordinatesLabel', () => {
6
- let defaultProps;
7
- let graphProps;
8
-
9
- beforeEach(() => {
10
- graphProps = {
11
- domain: { min: -10, max: 10, step: 1, label: 'x', axisLabel: 'X' },
12
- range: { min: -10, max: 10, step: 1, label: 'y', axisLabel: 'Y' },
13
- scale: {
14
- x: jest.fn((val) => (val + 10) * 20),
15
- y: jest.fn((val) => (10 - val) * 20),
16
- },
17
- };
18
-
19
- defaultProps = {
20
- x: 5,
21
- y: 5,
22
- graphProps,
23
- };
24
- });
25
-
26
- describe('rendering', () => {
27
- it('renders without crashing', () => {
28
- const { container } = render(<CoordinatesLabel {...defaultProps} />);
29
- expect(container).toBeTruthy();
30
- });
31
-
32
- it('displays formatted coordinates', () => {
33
- const { container } = render(<CoordinatesLabel {...defaultProps} />);
34
- const input = container.querySelector('input');
35
-
36
- expect(input.value).toBe('(5, 5)');
37
- });
38
-
39
- it('rounds coordinates to 4 decimal places', () => {
40
- const props = { ...defaultProps, x: 1.123456, y: 2.987654 };
41
- const { container } = render(<CoordinatesLabel {...props} />);
42
- const input = container.querySelector('input');
43
-
44
- expect(input.value).toBe('(1.1235, 2.9877)');
45
- });
46
-
47
- it('handles integer coordinates', () => {
48
- const props = { ...defaultProps, x: 0, y: 0 };
49
- const { container } = render(<CoordinatesLabel {...props} />);
50
- const input = container.querySelector('input');
51
-
52
- expect(input.value).toBe('(0, 0)');
53
- });
54
-
55
- it('handles negative coordinates', () => {
56
- const props = { ...defaultProps, x: -3, y: -7 };
57
- const { container } = render(<CoordinatesLabel {...props} />);
58
- const input = container.querySelector('input');
59
-
60
- expect(input.value).toBe('(-3, -7)');
61
- });
62
-
63
- it('renders as an input element', () => {
64
- const { container } = render(<CoordinatesLabel {...defaultProps} />);
65
- const input = container.querySelector('input');
66
-
67
- expect(input).toBeTruthy();
68
- expect(input.tagName).toBe('INPUT');
69
- });
70
-
71
- it('applies correct styles', () => {
72
- const { container } = render(<CoordinatesLabel {...defaultProps} />);
73
- const wrapper = container.firstChild;
74
-
75
- expect(wrapper).toHaveStyle({ position: 'absolute' });
76
- expect(wrapper).toHaveStyle({ pointerEvents: 'auto' });
77
- });
78
- });
79
-
80
- describe('getLabelPosition', () => {
81
- it('positions label to the right by default', () => {
82
- const position = getLabelPosition(graphProps, 0, 0, 60);
83
-
84
- expect(position.left).toBeGreaterThan(graphProps.scale.x(0));
85
- expect(position.top).toBeDefined();
86
- });
87
-
88
- it('positions label to the left when near right edge', () => {
89
- const x = 9; // Near max
90
- const labelLength = 100;
91
- const position = getLabelPosition(graphProps, x, 0, labelLength);
92
-
93
- expect(position.left).toBeLessThan(graphProps.scale.x(x));
94
- });
95
-
96
- it('adjusts top position for minimum y value', () => {
97
- const position = getLabelPosition(graphProps, 0, -10, 60);
98
-
99
- expect(position.top).toBe(graphProps.scale.y(-10) - 16);
100
- });
101
-
102
- it('adjusts top position for maximum y value', () => {
103
- const position = getLabelPosition(graphProps, 0, 10, 60);
104
-
105
- expect(position.top).toBe(graphProps.scale.y(10) - 0);
106
- });
107
-
108
- it('centers label vertically for middle values', () => {
109
- const position = getLabelPosition(graphProps, 0, 0, 60);
110
-
111
- expect(position.top).toBe(graphProps.scale.y(0) - 8);
112
- });
113
-
114
- it('applies left shift consistently', () => {
115
- const leftShift = 10;
116
- const labelLength = 60;
117
-
118
- const rightPos = getLabelPosition(graphProps, 0, 0, labelLength);
119
- expect(rightPos.left).toBe(graphProps.scale.x(0) + leftShift);
120
-
121
- const leftPos = getLabelPosition(graphProps, 9, 0, labelLength);
122
- expect(leftPos.left).toBe(graphProps.scale.x(9) - leftShift - labelLength);
123
- });
124
- });
125
-
126
- describe('label width calculation', () => {
127
- it('calculates width based on label length', () => {
128
- const props = { ...defaultProps, x: 1, y: 2 };
129
- const { container } = render(<CoordinatesLabel {...props} />);
130
- const wrapper = container.firstChild;
131
-
132
- const expectedWidth = 6 * 6;
133
- expect(wrapper).toHaveStyle({ width: `${expectedWidth}px` });
134
- });
135
-
136
- it('adjusts width for longer coordinates', () => {
137
- const props = { ...defaultProps, x: -10.123, y: 10.456 };
138
- const { container } = render(<CoordinatesLabel {...props} />);
139
- const wrapper = container.firstChild;
140
-
141
- const style = window.getComputedStyle(wrapper);
142
- expect(parseInt(style.width)).toBeGreaterThan(42);
143
- });
144
- });
145
-
146
- describe('edge cases', () => {
147
- it('handles very small coordinates', () => {
148
- const props = { ...defaultProps, x: 0.0001, y: 0.0002 };
149
- const { container } = render(<CoordinatesLabel {...props} />);
150
- const input = container.querySelector('input');
151
-
152
- expect(input.value).toContain('(');
153
- expect(input.value).toContain(')');
154
- expect(input.value).toContain(',');
155
- });
156
-
157
- it('handles very large coordinates', () => {
158
- const props = { ...defaultProps, x: 999999, y: 888888 };
159
- const { container } = render(<CoordinatesLabel {...props} />);
160
- const input = container.querySelector('input');
161
-
162
- expect(input.value).toBe('(999999, 888888)');
163
- });
164
-
165
- it('handles zero coordinates', () => {
166
- const props = { ...defaultProps, x: 0, y: 0 };
167
- const { container } = render(<CoordinatesLabel {...props} />);
168
- const input = container.querySelector('input');
169
-
170
- expect(input.value).toBe('(0, 0)');
171
- });
172
-
173
- it('handles coordinates at domain/range boundaries', () => {
174
- const props = { ...defaultProps, x: 10, y: 10 };
175
- const { container } = render(<CoordinatesLabel {...props} />);
176
- const input = container.querySelector('input');
177
-
178
- expect(input.value).toBe('(10, 10)');
179
- });
180
-
181
- it('handles negative boundaries', () => {
182
- const props = { ...defaultProps, x: -10, y: -10 };
183
- const { container } = render(<CoordinatesLabel {...props} />);
184
- const input = container.querySelector('input');
185
-
186
- expect(input.value).toBe('(-10, -10)');
187
- });
188
- });
189
-
190
- describe('prop types and validation', () => {
191
- it('accepts required props', () => {
192
- expect(() => {
193
- render(<CoordinatesLabel {...defaultProps} />);
194
- }).not.toThrow();
195
- });
196
-
197
- it('renders with missing optional props', () => {
198
- const props = {
199
- x: 1,
200
- y: 2,
201
- graphProps,
202
- };
203
-
204
- expect(() => {
205
- render(<CoordinatesLabel {...props} />);
206
- }).not.toThrow();
207
- });
208
- });
209
-
210
- describe('updates', () => {
211
- it('updates when x coordinate changes', () => {
212
- const { container, rerender } = render(<CoordinatesLabel {...defaultProps} />);
213
- let input = container.querySelector('input');
214
- expect(input.value).toBe('(5, 5)');
215
-
216
- rerender(<CoordinatesLabel {...defaultProps} x={7} />);
217
- input = container.querySelector('input');
218
- expect(input.value).toBe('(7, 5)');
219
- });
220
-
221
- it('updates when y coordinate changes', () => {
222
- const { container, rerender } = render(<CoordinatesLabel {...defaultProps} />);
223
- let input = container.querySelector('input');
224
- expect(input.value).toBe('(5, 5)');
225
-
226
- rerender(<CoordinatesLabel {...defaultProps} y={3} />);
227
- input = container.querySelector('input');
228
- expect(input.value).toBe('(5, 3)');
229
- });
230
-
231
- it('updates position when coordinates change', () => {
232
- const { container, rerender } = render(<CoordinatesLabel {...defaultProps} />);
233
- const initialStyle = window.getComputedStyle(container.firstChild);
234
- const initialLeft = initialStyle.left;
235
-
236
- rerender(<CoordinatesLabel {...defaultProps} x={8} />);
237
- const newStyle = window.getComputedStyle(container.firstChild);
238
- const newLeft = newStyle.left;
239
-
240
- expect(newLeft).not.toBe(initialLeft);
241
- });
242
- });
243
- });
@@ -1,184 +0,0 @@
1
- import { render } from '@pie-lib/test-utils';
2
- import React from 'react';
3
- import {
4
- filterByValidToolTypes,
5
- filterByVisibleToolTypes,
6
- getAvailableTool,
7
- GraphWithControls,
8
- setToolbarAvailability,
9
- toolIsAvailable,
10
- } from '../graph-with-controls';
11
- import { allTools, line as lineTool, toolsArr } from '../tools';
12
-
13
- // Mock DragProvider to avoid @dnd-kit React version conflicts
14
- jest.mock('@pie-lib/drag', () => ({
15
- DragProvider: ({ children }) => <div data-testid="drag-provider">{children}</div>,
16
- }));
17
-
18
- // Mock @dnd-kit/core hooks to avoid DndContext requirement
19
- jest.mock('@dnd-kit/core', () => ({
20
- useDraggable: jest.fn(() => ({
21
- attributes: {
22
- role: 'button',
23
- tabIndex: 0,
24
- },
25
- listeners: {
26
- onPointerDown: jest.fn(),
27
- },
28
- setNodeRef: jest.fn(),
29
- transform: null,
30
- transition: null,
31
- isDragging: false,
32
- })),
33
- useDroppable: jest.fn(() => ({
34
- setNodeRef: jest.fn(),
35
- isOver: false,
36
- active: null,
37
- })),
38
- }));
39
-
40
- // Mock @dnd-kit/utilities for CSS transform
41
- jest.mock('@dnd-kit/utilities', () => ({
42
- CSS: {
43
- Transform: {
44
- toString: jest.fn((transform) => (transform ? 'translate3d(0, 0, 0)' : '')),
45
- },
46
- },
47
- }));
48
-
49
- // Mock @dnd-kit/sortable for arrayMove
50
- jest.mock('@dnd-kit/sortable', () => ({
51
- arrayMove: jest.fn((array, from, to) => {
52
- const newArray = [...array];
53
- const [removed] = newArray.splice(from, 1);
54
- newArray.splice(to, 0, removed);
55
- return newArray;
56
- }),
57
- }));
58
-
59
- const line = {
60
- type: 'line',
61
- from: { x: 0, y: 0 },
62
- to: { x: 1, y: 1 },
63
- label: 'Line',
64
- building: true,
65
- };
66
-
67
- const polygon = {
68
- type: 'polygon',
69
- points: [
70
- { x: 0, y: 0 },
71
- { x: 1, y: 1 },
72
- { x: 2, y: 2 },
73
- ],
74
- };
75
-
76
- const marks = [line, polygon];
77
-
78
- // Pure function tests - keep as-is
79
- describe('setToolbarAvailability', () => {
80
- it('sets `toolbar: true` if tool should be displayed in toolbar - all tools', () => {
81
- const result = setToolbarAvailability(allTools);
82
- const allTrue = new Array(toolsArr.length).fill(true);
83
-
84
- expect(result.map((r) => r.toolbar)).toEqual(allTrue);
85
- });
86
-
87
- it('sets `toolbar: true` if tool should be displayed in toolbar - few tools', () => {
88
- const result = setToolbarAvailability(['line', 'polygon']);
89
- const allOthersFalse = new Array(toolsArr.length - 2).fill(false);
90
-
91
- expect(result.filter((r) => r.type === 'line' || r.type === 'polygon').map((r) => r.toolbar)).toEqual([true, true]);
92
- expect(result.filter((r) => r.type !== 'line' && r.type !== 'polygon').map((r) => r.toolbar)).toEqual(
93
- allOthersFalse,
94
- );
95
- });
96
- });
97
-
98
- describe('toolIsAvailable', () => {
99
- const tools = setToolbarAvailability(['line', 'polygon']);
100
-
101
- it('returns true if tool is available', () => {
102
- expect(toolIsAvailable(tools, lineTool())).toEqual(true);
103
- });
104
- });
105
-
106
- describe('getAvailableTool', () => {
107
- it('returns the first available tool in list if there is any', () => {
108
- const tools = setToolbarAvailability(['line', 'polygon']);
109
-
110
- expect(getAvailableTool(tools).toolbar).toEqual(true);
111
- });
112
-
113
- it('returns undefined list if there is no available tool', () => {
114
- const tools = setToolbarAvailability([]);
115
-
116
- expect(getAvailableTool(tools)).toEqual(undefined);
117
- });
118
- });
119
-
120
- describe('filterByValidToolTypes', () => {
121
- it('filters marks by valid types', () => {
122
- const marks = [{ type: 'polygon' }, { type: 'a' }, { type: 'b' }, { type: 'line' }, { type: 'c' }];
123
-
124
- expect(filterByValidToolTypes(marks)).toEqual([{ type: 'polygon' }, { type: 'line' }]);
125
- });
126
- });
127
-
128
- describe('filterByVisibleToolTypes', () => {
129
- it('filters marks by the types that should be visible', () => {
130
- expect(
131
- filterByVisibleToolTypes(['line', 'polygon'], [{ type: 'point' }, { type: 'line' }, { type: 'polygon' }]),
132
- ).toEqual([{ type: 'line' }, { type: 'polygon' }]);
133
-
134
- expect(filterByVisibleToolTypes(['line'], [{ type: 'point' }, { type: 'line' }, { type: 'circle' }])).toEqual([
135
- { type: 'line' },
136
- ]);
137
-
138
- expect(filterByVisibleToolTypes(['segment'], [{ type: 'point' }, { type: 'line' }, { type: 'circle' }])).toEqual(
139
- [],
140
- );
141
- });
142
- });
143
-
144
- describe('GraphWithControls', () => {
145
- let onChangeMarks = jest.fn();
146
-
147
- beforeEach(() => {
148
- onChangeMarks.mockClear();
149
- });
150
-
151
- const defaultProps = () => ({
152
- axesSettings: { includeArrows: true },
153
- className: '',
154
- coordinatesOnHover: false,
155
- domain: { min: 0, max: 10, step: 1 },
156
- labels: { top: 'a', left: 'b', right: 'c', bottom: 'd' },
157
- labelModeEnabled: true,
158
- marks,
159
- onChangeMarks,
160
- range: { min: 0, max: 10, step: 1 },
161
- size: { width: 500, height: 500 },
162
- title: 'Title',
163
- toolbarTools: allTools,
164
- language: 'en',
165
- });
166
- const initialProps = defaultProps();
167
-
168
- const renderComponent = (extras) => {
169
- const props = { ...initialProps, ...extras };
170
- return render(<GraphWithControls {...props} />);
171
- };
172
-
173
- describe('rendering', () => {
174
- it('renders without crashing', () => {
175
- const { container } = renderComponent();
176
- expect(container.firstChild).toBeInTheDocument();
177
- });
178
-
179
- it('renders Graph component', () => {
180
- const { container } = renderComponent();
181
- expect(container.querySelector('svg')).toBeInTheDocument();
182
- });
183
- });
184
- });