victory-core 36.5.0 → 36.5.3

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 (364) hide show
  1. package/dist/victory-core.js +13817 -10827
  2. package/dist/victory-core.min.js +1 -1
  3. package/es/index.d.ts +7 -27
  4. package/es/index.js +7 -53
  5. package/es/{types.d.ts → types/callbacks.d.ts} +12 -8
  6. package/es/types/callbacks.js +2 -0
  7. package/es/types/prop-types.d.ts +130 -0
  8. package/es/types/prop-types.js +2 -0
  9. package/es/victory-accessible-group/victory-accessible-group.d.ts +1 -0
  10. package/es/victory-accessible-group/victory-accessible-group.js +2 -1
  11. package/es/victory-animation/util.d.ts +2 -1
  12. package/es/victory-animation/util.js +6 -4
  13. package/es/victory-animation/victory-animation.d.ts +1 -0
  14. package/es/victory-animation/victory-animation.js +2 -1
  15. package/es/victory-clip-container/victory-clip-container.d.ts +6 -5
  16. package/es/victory-clip-container/victory-clip-container.js +2 -1
  17. package/es/victory-container/victory-container.d.ts +8 -7
  18. package/es/victory-container/victory-container.js +2 -1
  19. package/es/victory-label/victory-label.d.ts +3 -2
  20. package/es/victory-label/victory-label.js +4 -4
  21. package/es/victory-portal/portal-context.d.ts +1 -0
  22. package/es/victory-portal/portal-context.js +2 -1
  23. package/es/victory-portal/portal.d.ts +3 -2
  24. package/es/victory-portal/portal.js +2 -1
  25. package/es/victory-portal/victory-portal.d.ts +1 -0
  26. package/es/victory-portal/victory-portal.js +2 -1
  27. package/es/victory-primitives/arc.d.ts +31 -2
  28. package/es/victory-primitives/arc.js +3 -2
  29. package/es/victory-primitives/background.d.ts +31 -2
  30. package/es/victory-primitives/background.js +3 -2
  31. package/es/victory-primitives/border.d.ts +28 -2
  32. package/es/victory-primitives/border.js +3 -2
  33. package/es/victory-primitives/circle.d.ts +1 -0
  34. package/es/victory-primitives/circle.js +2 -1
  35. package/es/victory-primitives/clip-path.d.ts +2 -1
  36. package/es/victory-primitives/clip-path.js +2 -1
  37. package/es/victory-primitives/index.d.ts +1 -0
  38. package/es/victory-primitives/index.js +2 -1
  39. package/es/victory-primitives/line-segment.d.ts +29 -2
  40. package/es/victory-primitives/line-segment.js +3 -2
  41. package/es/victory-primitives/line.d.ts +1 -0
  42. package/es/victory-primitives/line.js +2 -1
  43. package/es/victory-primitives/path.d.ts +1 -0
  44. package/es/victory-primitives/path.js +2 -1
  45. package/es/victory-primitives/point.d.ts +30 -2
  46. package/es/victory-primitives/point.js +3 -2
  47. package/es/victory-primitives/rect.d.ts +1 -0
  48. package/es/victory-primitives/rect.js +2 -1
  49. package/es/victory-primitives/text.d.ts +2 -1
  50. package/es/victory-primitives/text.js +2 -1
  51. package/es/victory-primitives/tspan.d.ts +2 -1
  52. package/es/victory-primitives/tspan.js +2 -1
  53. package/es/victory-primitives/types.d.ts +2 -1
  54. package/es/victory-primitives/types.js +2 -1
  55. package/es/victory-primitives/whisker.d.ts +37 -2
  56. package/es/victory-primitives/whisker.js +3 -2
  57. package/es/victory-state/defaults.d.ts +3 -0
  58. package/es/victory-state/defaults.js +3 -0
  59. package/es/victory-state/helpers/get-axis-data.d.ts +3 -0
  60. package/es/victory-state/helpers/get-axis-data.js +15 -0
  61. package/es/victory-state/helpers/get-data.d.ts +15 -0
  62. package/es/victory-state/helpers/get-data.js +88 -0
  63. package/es/victory-state/helpers/get-domain.d.ts +6 -0
  64. package/es/victory-state/helpers/get-domain.js +68 -0
  65. package/es/victory-state/helpers/get-range.d.ts +6 -0
  66. package/es/victory-state/helpers/get-range.js +37 -0
  67. package/es/victory-state/helpers/get-scale.d.ts +6 -0
  68. package/es/victory-state/helpers/get-scale.js +59 -0
  69. package/es/victory-state/index.d.ts +3 -0
  70. package/es/victory-state/index.js +3 -0
  71. package/es/victory-state/types.d.ts +24 -0
  72. package/es/victory-state/types.js +2 -0
  73. package/es/victory-state/victory-provider.d.ts +19 -0
  74. package/es/victory-state/victory-provider.js +118 -0
  75. package/es/victory-theme/grayscale.d.ts +2 -1
  76. package/es/victory-theme/grayscale.js +2 -1
  77. package/es/victory-theme/material.d.ts +2 -1
  78. package/es/victory-theme/material.js +2 -1
  79. package/{lib/victory-theme/victory-theme-definition.d.ts → es/victory-theme/types.d.ts} +3 -8
  80. package/es/victory-theme/types.js +2 -0
  81. package/es/victory-theme/victory-theme.d.ts +4 -3
  82. package/es/victory-theme/victory-theme.js +3 -2
  83. package/es/victory-transition/victory-transition.d.ts +1 -0
  84. package/es/victory-transition/victory-transition.js +2 -1
  85. package/es/victory-util/add-events.d.ts +106 -0
  86. package/es/victory-util/add-events.js +40 -33
  87. package/es/victory-util/axis.d.ts +51 -0
  88. package/es/victory-util/axis.js +9 -7
  89. package/es/victory-util/collection.d.ts +9 -0
  90. package/es/victory-util/collection.js +6 -4
  91. package/es/victory-util/common-props.d.ts +84 -0
  92. package/es/victory-util/common-props.js +29 -12
  93. package/es/victory-util/data.d.ts +75 -0
  94. package/es/victory-util/data.js +2 -1
  95. package/es/victory-util/default-transitions.d.ts +5 -0
  96. package/es/victory-util/default-transitions.js +2 -1
  97. package/es/victory-util/domain.d.ts +91 -0
  98. package/es/victory-util/domain.js +6 -2
  99. package/es/victory-util/events.d.ts +65 -0
  100. package/es/victory-util/events.js +13 -8
  101. package/es/victory-util/helpers.d.ts +61 -0
  102. package/es/victory-util/helpers.js +8 -4
  103. package/es/victory-util/hooks/index.d.ts +3 -0
  104. package/es/victory-util/hooks/index.js +2 -1
  105. package/es/victory-util/hooks/use-animation-state.js +4 -3
  106. package/es/victory-util/hooks/use-previous-props.d.ts +2 -0
  107. package/es/victory-util/hooks/use-previous-props.js +4 -3
  108. package/es/victory-util/immutable.d.ts +12 -0
  109. package/es/victory-util/immutable.js +5 -4
  110. package/es/victory-util/index.d.ts +29 -0
  111. package/es/victory-util/index.js +48 -0
  112. package/es/victory-util/label-helpers.d.ts +27 -0
  113. package/es/victory-util/label-helpers.js +2 -1
  114. package/es/victory-util/line-helpers.d.ts +5 -0
  115. package/es/victory-util/line-helpers.js +24 -6
  116. package/es/victory-util/log.d.ts +2 -0
  117. package/es/victory-util/log.js +2 -1
  118. package/es/victory-util/point-path-helpers.d.ts +1 -0
  119. package/es/victory-util/point-path-helpers.js +2 -1
  120. package/es/victory-util/prop-types.d.ts +51 -0
  121. package/es/victory-util/prop-types.js +35 -44
  122. package/es/victory-util/scale.d.ts +10 -0
  123. package/es/victory-util/scale.js +14 -6
  124. package/es/victory-util/selection.d.ts +25 -23
  125. package/es/victory-util/selection.js +25 -14
  126. package/es/victory-util/style.d.ts +19 -0
  127. package/es/victory-util/style.js +2 -1
  128. package/es/victory-util/textsize.d.ts +37 -8
  129. package/es/victory-util/textsize.js +9 -6
  130. package/es/victory-util/timer-context.d.ts +1 -0
  131. package/es/victory-util/timer-context.js +2 -1
  132. package/es/victory-util/timer.d.ts +3 -2
  133. package/es/victory-util/timer.js +2 -1
  134. package/es/victory-util/transitions.d.ts +49 -0
  135. package/es/victory-util/transitions.js +5 -4
  136. package/es/victory-util/type-helpers.d.ts +10 -0
  137. package/es/victory-util/type-helpers.js +28 -0
  138. package/es/victory-util/user-props.d.ts +21 -0
  139. package/es/victory-util/user-props.js +6 -5
  140. package/es/victory-util/with-container.d.ts +5 -0
  141. package/es/victory-util/with-container.js +32 -0
  142. package/es/victory-util/wrapper.d.ts +38 -0
  143. package/es/victory-util/wrapper.js +4 -3
  144. package/lib/index.d.ts +7 -27
  145. package/lib/index.js +58 -147
  146. package/lib/{types.d.ts → types/callbacks.d.ts} +12 -8
  147. package/lib/types/callbacks.js +2 -0
  148. package/lib/types/prop-types.d.ts +130 -0
  149. package/lib/types/prop-types.js +2 -0
  150. package/lib/victory-accessible-group/victory-accessible-group.d.ts +1 -0
  151. package/lib/victory-accessible-group/victory-accessible-group.js +2 -1
  152. package/lib/victory-animation/util.d.ts +2 -1
  153. package/lib/victory-animation/util.js +6 -4
  154. package/lib/victory-animation/victory-animation.d.ts +1 -0
  155. package/lib/victory-animation/victory-animation.js +2 -1
  156. package/lib/victory-clip-container/victory-clip-container.d.ts +6 -5
  157. package/lib/victory-clip-container/victory-clip-container.js +2 -1
  158. package/lib/victory-container/victory-container.d.ts +8 -7
  159. package/lib/victory-container/victory-container.js +2 -1
  160. package/lib/victory-label/victory-label.d.ts +3 -2
  161. package/lib/victory-label/victory-label.js +4 -4
  162. package/lib/victory-portal/portal-context.d.ts +1 -0
  163. package/lib/victory-portal/portal-context.js +2 -1
  164. package/lib/victory-portal/portal.d.ts +3 -2
  165. package/lib/victory-portal/portal.js +2 -1
  166. package/lib/victory-portal/victory-portal.d.ts +1 -0
  167. package/lib/victory-portal/victory-portal.js +2 -1
  168. package/lib/victory-primitives/arc.d.ts +31 -2
  169. package/lib/victory-primitives/arc.js +4 -3
  170. package/lib/victory-primitives/background.d.ts +31 -2
  171. package/lib/victory-primitives/background.js +4 -3
  172. package/lib/victory-primitives/border.d.ts +28 -2
  173. package/lib/victory-primitives/border.js +4 -3
  174. package/lib/victory-primitives/circle.d.ts +1 -0
  175. package/lib/victory-primitives/circle.js +2 -1
  176. package/lib/victory-primitives/clip-path.d.ts +2 -1
  177. package/lib/victory-primitives/clip-path.js +2 -1
  178. package/lib/victory-primitives/index.d.ts +1 -0
  179. package/lib/victory-primitives/index.js +2 -1
  180. package/lib/victory-primitives/line-segment.d.ts +29 -2
  181. package/lib/victory-primitives/line-segment.js +4 -3
  182. package/lib/victory-primitives/line.d.ts +1 -0
  183. package/lib/victory-primitives/line.js +2 -1
  184. package/lib/victory-primitives/path.d.ts +1 -0
  185. package/lib/victory-primitives/path.js +2 -1
  186. package/lib/victory-primitives/point.d.ts +30 -2
  187. package/lib/victory-primitives/point.js +4 -3
  188. package/lib/victory-primitives/rect.d.ts +1 -0
  189. package/lib/victory-primitives/rect.js +2 -1
  190. package/lib/victory-primitives/text.d.ts +2 -1
  191. package/lib/victory-primitives/text.js +2 -1
  192. package/lib/victory-primitives/tspan.d.ts +2 -1
  193. package/lib/victory-primitives/tspan.js +2 -1
  194. package/lib/victory-primitives/types.d.ts +2 -1
  195. package/lib/victory-primitives/types.js +2 -1
  196. package/lib/victory-primitives/whisker.d.ts +37 -2
  197. package/lib/victory-primitives/whisker.js +4 -3
  198. package/lib/victory-state/defaults.d.ts +3 -0
  199. package/lib/victory-state/defaults.js +11 -0
  200. package/lib/victory-state/helpers/get-axis-data.d.ts +3 -0
  201. package/lib/victory-state/helpers/get-axis-data.js +23 -0
  202. package/lib/victory-state/helpers/get-data.d.ts +15 -0
  203. package/lib/victory-state/helpers/get-data.js +99 -0
  204. package/lib/victory-state/helpers/get-domain.d.ts +6 -0
  205. package/lib/victory-state/helpers/get-domain.js +82 -0
  206. package/lib/victory-state/helpers/get-range.d.ts +6 -0
  207. package/lib/victory-state/helpers/get-range.js +46 -0
  208. package/lib/victory-state/helpers/get-scale.d.ts +6 -0
  209. package/lib/victory-state/helpers/get-scale.js +74 -0
  210. package/lib/victory-state/index.d.ts +3 -0
  211. package/lib/victory-state/index.js +32 -0
  212. package/lib/victory-state/types.d.ts +24 -0
  213. package/lib/victory-state/types.js +2 -0
  214. package/lib/victory-state/victory-provider.d.ts +19 -0
  215. package/lib/victory-state/victory-provider.js +144 -0
  216. package/lib/victory-theme/grayscale.d.ts +2 -1
  217. package/lib/victory-theme/grayscale.js +2 -1
  218. package/lib/victory-theme/material.d.ts +2 -1
  219. package/lib/victory-theme/material.js +2 -1
  220. package/{es/victory-theme/victory-theme-definition.d.ts → lib/victory-theme/types.d.ts} +3 -8
  221. package/lib/victory-theme/types.js +2 -0
  222. package/lib/victory-theme/victory-theme.d.ts +4 -3
  223. package/lib/victory-theme/victory-theme.js +6 -5
  224. package/lib/victory-transition/victory-transition.d.ts +1 -0
  225. package/lib/victory-transition/victory-transition.js +2 -1
  226. package/lib/victory-util/add-events.d.ts +106 -0
  227. package/lib/victory-util/add-events.js +40 -36
  228. package/lib/victory-util/axis.d.ts +51 -0
  229. package/lib/victory-util/axis.js +8 -6
  230. package/lib/victory-util/collection.d.ts +9 -0
  231. package/lib/victory-util/collection.js +6 -4
  232. package/lib/victory-util/common-props.d.ts +84 -0
  233. package/lib/victory-util/common-props.js +27 -12
  234. package/lib/victory-util/data.d.ts +75 -0
  235. package/lib/victory-util/data.js +2 -1
  236. package/lib/victory-util/default-transitions.d.ts +5 -0
  237. package/lib/victory-util/default-transitions.js +2 -1
  238. package/lib/victory-util/domain.d.ts +91 -0
  239. package/lib/victory-util/domain.js +6 -2
  240. package/lib/victory-util/events.d.ts +65 -0
  241. package/lib/victory-util/events.js +13 -9
  242. package/lib/victory-util/helpers.d.ts +61 -0
  243. package/lib/victory-util/helpers.js +8 -4
  244. package/lib/victory-util/hooks/index.d.ts +3 -0
  245. package/lib/victory-util/hooks/index.js +2 -1
  246. package/lib/victory-util/hooks/use-animation-state.js +4 -3
  247. package/lib/victory-util/hooks/use-previous-props.d.ts +2 -0
  248. package/lib/victory-util/hooks/use-previous-props.js +5 -6
  249. package/lib/victory-util/immutable.d.ts +12 -0
  250. package/lib/victory-util/immutable.js +5 -4
  251. package/lib/victory-util/index.d.ts +29 -0
  252. package/lib/victory-util/index.js +181 -0
  253. package/lib/victory-util/label-helpers.d.ts +27 -0
  254. package/lib/victory-util/label-helpers.js +2 -1
  255. package/lib/victory-util/line-helpers.d.ts +5 -0
  256. package/lib/victory-util/line-helpers.js +28 -7
  257. package/lib/victory-util/log.d.ts +2 -0
  258. package/lib/victory-util/log.js +2 -1
  259. package/lib/victory-util/point-path-helpers.d.ts +1 -0
  260. package/lib/victory-util/point-path-helpers.js +2 -1
  261. package/lib/victory-util/prop-types.d.ts +51 -0
  262. package/lib/victory-util/prop-types.js +36 -44
  263. package/lib/victory-util/scale.d.ts +10 -0
  264. package/lib/victory-util/scale.js +14 -5
  265. package/lib/victory-util/selection.d.ts +25 -23
  266. package/lib/victory-util/selection.js +25 -19
  267. package/lib/victory-util/style.d.ts +19 -0
  268. package/lib/victory-util/style.js +2 -1
  269. package/lib/victory-util/textsize.d.ts +37 -8
  270. package/lib/victory-util/textsize.js +9 -6
  271. package/lib/victory-util/timer-context.d.ts +1 -0
  272. package/lib/victory-util/timer-context.js +2 -1
  273. package/lib/victory-util/timer.d.ts +3 -2
  274. package/lib/victory-util/timer.js +2 -1
  275. package/lib/victory-util/transitions.d.ts +49 -0
  276. package/lib/victory-util/transitions.js +5 -4
  277. package/lib/victory-util/type-helpers.d.ts +10 -0
  278. package/lib/victory-util/type-helpers.js +45 -0
  279. package/lib/victory-util/user-props.d.ts +21 -0
  280. package/lib/victory-util/user-props.js +6 -5
  281. package/lib/victory-util/with-container.d.ts +5 -0
  282. package/lib/victory-util/with-container.js +44 -0
  283. package/lib/victory-util/wrapper.d.ts +38 -0
  284. package/lib/victory-util/wrapper.js +4 -3
  285. package/package.json +3 -3
  286. package/src/index.ts +9 -31
  287. package/src/{types.ts → types/callbacks.ts} +21 -13
  288. package/src/types/prop-types.ts +195 -0
  289. package/src/victory-accessible-group/victory-accessible-group.tsx +3 -3
  290. package/src/victory-animation/util.ts +3 -2
  291. package/src/victory-animation/victory-animation.tsx +13 -13
  292. package/src/victory-clip-container/victory-clip-container.tsx +23 -23
  293. package/src/victory-container/victory-container.tsx +19 -19
  294. package/src/victory-label/victory-label.tsx +41 -39
  295. package/src/victory-portal/portal.tsx +1 -1
  296. package/src/victory-portal/victory-portal.tsx +3 -3
  297. package/src/victory-primitives/arc.tsx +8 -6
  298. package/src/victory-primitives/background.tsx +8 -6
  299. package/src/victory-primitives/border.tsx +8 -6
  300. package/src/victory-primitives/clip-path.tsx +3 -3
  301. package/src/victory-primitives/line-segment.tsx +8 -6
  302. package/src/victory-primitives/point.tsx +10 -8
  303. package/src/victory-primitives/text.tsx +2 -2
  304. package/src/victory-primitives/tspan.tsx +1 -1
  305. package/src/victory-primitives/types.ts +1 -1
  306. package/src/victory-primitives/whisker.tsx +15 -13
  307. package/src/victory-state/defaults.ts +2 -0
  308. package/src/victory-state/helpers/get-axis-data.ts +14 -0
  309. package/src/victory-state/helpers/get-data.ts +79 -0
  310. package/src/victory-state/helpers/get-domain.ts +62 -0
  311. package/src/victory-state/helpers/get-range.ts +39 -0
  312. package/src/victory-state/helpers/get-scale.ts +64 -0
  313. package/src/victory-state/index.ts +2 -0
  314. package/src/victory-state/types.ts +32 -0
  315. package/src/victory-state/victory-provider.tsx +116 -0
  316. package/src/victory-theme/grayscale.tsx +62 -62
  317. package/src/victory-theme/material.tsx +67 -67
  318. package/src/victory-theme/{victory-theme-definition.ts → types.ts} +10 -14
  319. package/src/victory-theme/victory-theme.tsx +1 -1
  320. package/src/victory-transition/victory-transition.tsx +19 -19
  321. package/src/victory-util/{add-events.js → add-events.tsx} +136 -59
  322. package/src/victory-util/{axis.js → axis.tsx} +17 -18
  323. package/src/victory-util/{collection.js → collection.tsx} +14 -10
  324. package/src/victory-util/common-props.tsx +307 -0
  325. package/src/victory-util/{data.js → data.ts} +14 -10
  326. package/src/victory-util/{default-transitions.js → default-transitions.ts} +20 -18
  327. package/src/victory-util/{domain.js → domain.ts} +26 -23
  328. package/src/victory-util/{events.js → events.ts} +82 -31
  329. package/src/victory-util/{helpers.js → helpers.ts} +41 -22
  330. package/src/victory-util/hooks/{index.js → index.ts} +0 -0
  331. package/src/victory-util/hooks/use-animation-state.js +12 -12
  332. package/src/victory-util/hooks/use-previous-props.ts +9 -0
  333. package/src/victory-util/{immutable.js → immutable.ts} +14 -10
  334. package/src/victory-util/index.ts +28 -0
  335. package/src/victory-util/{label-helpers.js → label-helpers.ts} +7 -7
  336. package/src/victory-util/line-helpers.ts +104 -0
  337. package/src/victory-util/{log.js → log.ts} +1 -1
  338. package/src/victory-util/{prop-types.js → prop-types.ts} +103 -101
  339. package/src/victory-util/{scale.js → scale.ts} +29 -16
  340. package/src/victory-util/selection.ts +158 -0
  341. package/src/victory-util/{style.js → style.ts} +3 -3
  342. package/src/victory-util/{textsize.js → textsize.ts} +32 -17
  343. package/src/victory-util/timer-context.ts +1 -1
  344. package/src/victory-util/timer.ts +5 -10
  345. package/src/victory-util/{transitions.js → transitions.ts} +50 -22
  346. package/src/victory-util/type-helpers.ts +50 -0
  347. package/src/victory-util/{user-props.js → user-props.ts} +16 -11
  348. package/src/victory-util/with-container.tsx +41 -0
  349. package/src/victory-util/{wrapper.js → wrapper.tsx} +38 -33
  350. package/es/types.js +0 -1
  351. package/es/victory-theme/victory-theme-definition.js +0 -1
  352. package/es/victory-util/types.d.ts +0 -188
  353. package/es/victory-util/types.js +0 -1
  354. package/lib/types.js +0 -1
  355. package/lib/victory-theme/victory-theme-definition.js +0 -1
  356. package/lib/victory-util/types.d.ts +0 -188
  357. package/lib/victory-util/types.js +0 -1
  358. package/src/victory-util/common-props.js +0 -197
  359. package/src/victory-util/hooks/use-previous-props.js +0 -9
  360. package/src/victory-util/line-helpers.js +0 -54
  361. package/src/victory-util/selection.d.ts +0 -23
  362. package/src/victory-util/selection.js +0 -98
  363. package/src/victory-util/textsize.d.ts +0 -8
  364. package/src/victory-util/types.ts +0 -247
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_HEIGHT = 300;
2
+ export const DEFAULT_WIDTH = 450;
@@ -0,0 +1,14 @@
1
+ import { AxisType, Datum, DomainValue } from "../../types/prop-types";
2
+ import { isKeyValueObject } from "../../victory-util/type-helpers";
3
+
4
+ export function getAxisData(data: Datum[], axis: AxisType) {
5
+ return data.reduce((acc, datum) => {
6
+ if (isKeyValueObject(datum)) {
7
+ const value = datum[axis];
8
+ if (value && typeof value !== "string") {
9
+ acc.push(value);
10
+ }
11
+ }
12
+ return acc;
13
+ }, [] as DomainValue[]);
14
+ }
@@ -0,0 +1,79 @@
1
+ import { get, isNil, orderBy } from "lodash";
2
+ import * as React from "react";
3
+ import { Datum, DatumValue } from "../../types/prop-types";
4
+ import { isKeyValueObject } from "../../victory-util/type-helpers";
5
+ import { VictoryProviderProps } from "../types";
6
+
7
+ type DataProps = Pick<
8
+ VictoryProviderProps,
9
+ "data" | "x" | "y" | "sortKey" | "sortOrder" | "samples"
10
+ >;
11
+
12
+ export interface FormattedDatum {
13
+ x: DatumValue;
14
+ y: DatumValue;
15
+ _x: number | Date;
16
+ _y: number | Date;
17
+ xName?: string;
18
+ yName?: string;
19
+ [key: string]: DatumValue;
20
+ }
21
+
22
+ function getValue(datum: Datum, key: string): DatumValue {
23
+ if (typeof datum === "object") {
24
+ return get(datum, key);
25
+ }
26
+ return datum;
27
+ }
28
+
29
+ function getNumericValue(value: DatumValue, fallback: number): number | Date {
30
+ if (typeof value === "number" || value instanceof Date) {
31
+ return value;
32
+ }
33
+ return fallback;
34
+ }
35
+
36
+ export function getData({
37
+ x: xAccessor = "x",
38
+ y: yAccessor = "y",
39
+ sortKey,
40
+ sortOrder = "ascending",
41
+ data = [],
42
+ }: DataProps = {}): FormattedDatum[] {
43
+ const formattedData = data.reduce((nonNullData, datum, index) => {
44
+ const x = getValue(datum, xAccessor);
45
+ const y = getValue(datum, yAccessor);
46
+ if (isNil(x) || isNil(y)) {
47
+ return nonNullData;
48
+ }
49
+ const _x = getNumericValue(x, index + 1);
50
+ const _y = getNumericValue(y, index + 1);
51
+
52
+ // TODO: Get this value if it is different
53
+ const xName = typeof x === "string" ? x : undefined;
54
+ const yName = typeof y === "string" ? y : undefined;
55
+
56
+ const additionalProperties = isKeyValueObject(datum) ? datum : {};
57
+
58
+ return [
59
+ ...nonNullData,
60
+ {
61
+ x,
62
+ y,
63
+ _x,
64
+ _y,
65
+ // Only set these properties if they exist
66
+ ...(xName ? { xName } : {}),
67
+ ...(yName ? { yName } : {}),
68
+ ...additionalProperties,
69
+ },
70
+ ];
71
+ }, [] as FormattedDatum[]);
72
+
73
+ if (sortKey) {
74
+ const order = sortOrder === "descending" ? "desc" : "asc";
75
+ return orderBy(formattedData, sortKey, order);
76
+ }
77
+
78
+ return formattedData;
79
+ }
@@ -0,0 +1,62 @@
1
+ import * as d3Array from "victory-vendor/d3-array";
2
+ import { getAxisData } from "./get-axis-data";
3
+ import {
4
+ getValueForAxis,
5
+ isDate,
6
+ isTuple,
7
+ } from "../../victory-util/type-helpers";
8
+ import { VictoryProviderProps } from "../types";
9
+ import {
10
+ Tuple,
11
+ AxisType,
12
+ DomainTuple,
13
+ DomainValue,
14
+ } from "../../types/prop-types";
15
+
16
+ type DomainProps = Pick<
17
+ VictoryProviderProps,
18
+ "data" | "domain" | "maxDomain" | "minDomain" | "includeZero"
19
+ >;
20
+
21
+ // TODO: What should this default value be?
22
+ const DEFAULT_MIN = 0;
23
+ const DEFAULT_MAX = 1;
24
+
25
+ function getDomainFromMinMax(
26
+ min: number = DEFAULT_MIN,
27
+ max: number = DEFAULT_MAX,
28
+ ): Tuple<number> {
29
+ // TODO: Victoy currently has some really specific logic in getDomainFromMinMax
30
+ // that adds or subtracts a very small number from each domain to avoid the min
31
+ // and max being the same value. This has resulted in some weird behavior in the
32
+ // past, so we should revisit this.
33
+ return [min, max];
34
+ }
35
+
36
+ export function getDomain(
37
+ { data = [], includeZero, ...props }: DomainProps,
38
+ axis: AxisType,
39
+ ): DomainTuple {
40
+ const domainFromProps = getValueForAxis<DomainTuple>(props.domain, axis);
41
+ const axisData = getAxisData(data, axis);
42
+
43
+ if (includeZero && axis === "y") {
44
+ axisData.push(0);
45
+ }
46
+
47
+ if (isTuple(domainFromProps)) {
48
+ return domainFromProps;
49
+ }
50
+
51
+ const [min, max] = d3Array.extent(axisData) as DomainTuple | Tuple<undefined>;
52
+
53
+ const minDomain = getValueForAxis<DomainValue>(props.minDomain, axis) || min;
54
+ const maxDomain = getValueForAxis<DomainValue>(props.maxDomain, axis) || max;
55
+
56
+ if (isDate(minDomain) && isDate(maxDomain)) {
57
+ return [min, max] as Tuple<Date>;
58
+ }
59
+
60
+ // TODO: There might be an edge case here where we have mixed types
61
+ return getDomainFromMinMax(minDomain as number, maxDomain as number);
62
+ }
@@ -0,0 +1,39 @@
1
+ import { AxisType, Padding, RangeTuple } from "../../types/prop-types";
2
+ import { getPadding } from "../../victory-util/helpers";
3
+ import { getValueForAxis, isTuple } from "../../victory-util/type-helpers";
4
+ import { VictoryProviderProps } from "../types";
5
+
6
+ type RangeProps = Pick<
7
+ VictoryProviderProps,
8
+ "range" | "padding" | "height" | "width"
9
+ >;
10
+
11
+ // TODO: Should we store these defaults somewhere?
12
+ const DEFAULT_HEIGHT = 300;
13
+ const DEFAULT_WIDTH = 450;
14
+
15
+ // TODO: This does not include polar range
16
+ export function getRange(
17
+ {
18
+ range,
19
+ height = DEFAULT_HEIGHT,
20
+ width = DEFAULT_WIDTH,
21
+ ...props
22
+ }: RangeProps,
23
+ axis: AxisType,
24
+ ) {
25
+ const rangeFromProps = getValueForAxis<RangeTuple>(range, axis);
26
+
27
+ if (isTuple(rangeFromProps)) {
28
+ return rangeFromProps;
29
+ }
30
+
31
+ // TODO: Convert this to TS
32
+ const padding = getPadding({ padding: props.padding }) as Padding;
33
+ const rangeForAxis = {
34
+ x: [padding.left, width - padding.right],
35
+ y: [height - padding.top, padding.bottom],
36
+ };
37
+
38
+ return rangeForAxis[axis];
39
+ }
@@ -0,0 +1,64 @@
1
+ import {
2
+ scaleLinear,
3
+ scaleTime,
4
+ scaleLog,
5
+ scaleSqrt,
6
+ } from "victory-vendor/d3-scale";
7
+ import { AxisType, D3ScaleFn, ScalePropType } from "../../types/prop-types";
8
+ import * as Collection from "../../victory-util/collection";
9
+ import { getValueForAxis, isFunction } from "../../victory-util/type-helpers";
10
+ import { VictoryProviderProps } from "../types";
11
+ import { getAxisData } from "./get-axis-data";
12
+
13
+ type Scale = ScalePropType | D3ScaleFn;
14
+
15
+ type ScaleProps = Pick<VictoryProviderProps, "data" | "scale">;
16
+
17
+ const DEFAULT_SCALE = scaleLinear;
18
+
19
+ function isD3Scale(scale?: unknown): scale is D3ScaleFn {
20
+ return (
21
+ isFunction(scale) &&
22
+ isFunction(scale().copy) &&
23
+ isFunction(scale().domain) &&
24
+ isFunction(scale().range)
25
+ );
26
+ }
27
+
28
+ function getD3ScaleFromString(scale: ScalePropType): D3ScaleFn {
29
+ switch (scale) {
30
+ case "linear":
31
+ return scaleLinear;
32
+ case "time":
33
+ return scaleTime;
34
+ case "log":
35
+ return scaleLog;
36
+ case "sqrt":
37
+ return scaleSqrt;
38
+ default:
39
+ return DEFAULT_SCALE;
40
+ }
41
+ }
42
+
43
+ export function getScale(
44
+ { data = [], ...props }: ScaleProps,
45
+ axis: AxisType,
46
+ ): D3ScaleFn {
47
+ const scale = getValueForAxis<Scale>(props.scale, axis);
48
+
49
+ if (isD3Scale(scale)) {
50
+ return scale;
51
+ }
52
+
53
+ if (typeof scale === "string") {
54
+ return getD3ScaleFromString(scale);
55
+ }
56
+
57
+ const axisData = getAxisData(data, axis);
58
+
59
+ if (Collection.containsDates(axisData)) {
60
+ return scaleTime;
61
+ }
62
+
63
+ return DEFAULT_SCALE;
64
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./victory-provider";
2
+ export * from "./types";
@@ -0,0 +1,32 @@
1
+ import {
2
+ D3ScaleFn,
3
+ Datum,
4
+ DomainTuple,
5
+ RangeTuple,
6
+ ScalePropType,
7
+ ValueOrAxes,
8
+ } from "../types/prop-types";
9
+ import { PaddingProps } from "../victory-theme/types";
10
+
11
+ // These are all the props that are used to calculate data, domain, range, and scale
12
+ export interface VictoryCalculatedStateProps {
13
+ data?: Datum[];
14
+ domain?: ValueOrAxes<DomainTuple>;
15
+ height?: number;
16
+ includeZero?: boolean;
17
+ maxDomain?: ValueOrAxes<number>;
18
+ minDomain?: ValueOrAxes<number>;
19
+ padding?: PaddingProps;
20
+ range?: ValueOrAxes<RangeTuple>;
21
+ samples?: number;
22
+ scale?: ValueOrAxes<ScalePropType | D3ScaleFn>;
23
+ sortKey?: string;
24
+ sortOrder?: "ascending" | "descending";
25
+ width?: number;
26
+ x?: string;
27
+ y?: string;
28
+ }
29
+
30
+ export interface VictoryProviderProps extends VictoryCalculatedStateProps {
31
+ children?: React.ReactNode;
32
+ }
@@ -0,0 +1,116 @@
1
+ import * as React from "react";
2
+ import { createContext, useContext } from "react";
3
+ import { D3ScaleFn, DomainTuple, ForAxes } from "../types/prop-types";
4
+ import { FormattedDatum, getData } from "./helpers/get-data";
5
+ import { getDomain } from "./helpers/get-domain";
6
+ import { getRange } from "./helpers/get-range";
7
+ import { getScale } from "./helpers/get-scale";
8
+ import { VictoryCalculatedStateProps, VictoryProviderProps } from "./types";
9
+
10
+ type ScaleType = Required<ForAxes<D3ScaleFn>>;
11
+ type DomainType = Required<ForAxes<DomainTuple>>;
12
+
13
+ export interface ContextType {
14
+ data: FormattedDatum[];
15
+ scale: ScaleType;
16
+ domain: DomainType;
17
+ setChildProps: (id: string, props: VictoryProviderProps) => void;
18
+ }
19
+
20
+ const VictoryContext = createContext<ContextType | null>(null);
21
+
22
+ export function VictoryProvider({
23
+ children,
24
+ ...initialProps
25
+ }: VictoryProviderProps) {
26
+ // We need to store the props in state so they can be overwritten by child components
27
+ const [props, setProps] = React.useState(initialProps);
28
+
29
+ const setChildProps = React.useCallback(
30
+ (id: string, newProps: VictoryCalculatedStateProps) => {
31
+ setProps((prevProps) => {
32
+ return { ...prevProps, ...newProps };
33
+ });
34
+ },
35
+ [],
36
+ );
37
+
38
+ const data = React.useMemo(() => {
39
+ return getData(props);
40
+ }, [props]);
41
+
42
+ const domain = React.useMemo(() => {
43
+ return {
44
+ x: getDomain(props, "x"),
45
+ y: getDomain(props, "y"),
46
+ };
47
+ }, [props]);
48
+
49
+ const range = React.useMemo(
50
+ () => ({
51
+ x: getRange(props, "x"),
52
+ y: getRange(props, "y"),
53
+ }),
54
+ [props],
55
+ );
56
+
57
+ const scale = React.useMemo(() => {
58
+ const xBaseScaleFn = getScale(props, "x");
59
+ const yBaseScaleFn = getScale(props, "y");
60
+
61
+ // @ts-expect-error: This is a valid scale function
62
+ const xScaleFn = xBaseScaleFn().domain(domain.x).range(range.x);
63
+ // @ts-expect-error: This is a valid scale function
64
+ const yScaleFn = yBaseScaleFn().domain(domain.y).range(range.y);
65
+
66
+ return {
67
+ x: xScaleFn,
68
+ y: yScaleFn,
69
+ };
70
+ }, [props, domain, range]);
71
+
72
+ const value = {
73
+ scale,
74
+ data,
75
+ domain,
76
+ setChildProps,
77
+ };
78
+
79
+ return (
80
+ <VictoryContext.Provider value={value}>{children}</VictoryContext.Provider>
81
+ );
82
+ }
83
+
84
+ export function useVictoryContext<T>(selector: (value: ContextType) => T): T {
85
+ const context = useContext(VictoryContext);
86
+ if (!context) {
87
+ throw new Error("useVictoryContext must be used within a VictoryProvider");
88
+ }
89
+ return selector(context);
90
+ }
91
+
92
+ export function useScale() {
93
+ return useVictoryContext<ScaleType>((value) => value.scale);
94
+ }
95
+
96
+ export function useData() {
97
+ return useVictoryContext<FormattedDatum[]>((value) => value.data);
98
+ }
99
+
100
+ export function useDomain() {
101
+ return useVictoryContext<DomainType>((value) => value.domain);
102
+ }
103
+
104
+ // This function keeps props in sync betwen the VictoryProvider and child components
105
+ export function useVictoryProviderSync(
106
+ id: string,
107
+ props: VictoryCalculatedStateProps,
108
+ ) {
109
+ const setChildProps = useVictoryContext((value) => value.setChildProps);
110
+
111
+ React.useEffect(() => {
112
+ setChildProps(id, props);
113
+ }, []);
114
+
115
+ return props;
116
+ }