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,104 @@
1
+ import * as d3Shape from "victory-vendor/d3-shape";
2
+
3
+ const defined = (d) => {
4
+ const y = d._y1 !== undefined ? d._y1 : d._y;
5
+ return y !== null && y !== undefined && d._y0 !== null;
6
+ };
7
+
8
+ const getXAccessor = (scale) => {
9
+ return (d) => scale.x(d._x1 !== undefined ? d._x1 : d._x);
10
+ };
11
+
12
+ const getYAccessor = (scale) => {
13
+ return (d) => scale.y(d._y1 !== undefined ? d._y1 : d._y);
14
+ };
15
+
16
+ const getAngleAccessor = (scale) => {
17
+ return (d) => {
18
+ const x = scale.x(d._x1 !== undefined ? d._x1 : d._x);
19
+ return -1 * x + Math.PI / 2;
20
+ };
21
+ };
22
+
23
+ export type CurveName =
24
+ | "basis"
25
+ | "cardinal"
26
+ | "bumpX"
27
+ | "bumpY"
28
+ | "bundle"
29
+ | "catmullRom"
30
+ | "linear"
31
+ | "monotoneX"
32
+ | "monotoneY"
33
+ | "step"
34
+ | "stepAfter"
35
+ | "stepBefore"
36
+ | "natural";
37
+
38
+ type ShapeMethod = keyof Pick<
39
+ typeof d3Shape,
40
+ | "curveBasis"
41
+ | "curveCardinal"
42
+ | "curveBumpX"
43
+ | "curveBumpY"
44
+ | "curveBundle"
45
+ | "curveCatmullRom"
46
+ | "curveLinear"
47
+ | "curveMonotoneX"
48
+ | "curveMonotoneY"
49
+ | "curveStep"
50
+ | "curveStepAfter"
51
+ | "curveStepBefore"
52
+ | "curveNatural"
53
+ >;
54
+ type ShapeMethodClosed = keyof Pick<
55
+ typeof d3Shape,
56
+ | "curveBasisClosed"
57
+ | "curveCardinalClosed"
58
+ | "curveLinearClosed"
59
+ | "curveCatmullRomClosed"
60
+ >;
61
+
62
+ const toNewName = (interpolation: CurveName) => {
63
+ // d3 shape changed the naming scheme for interpolators from "basis" -> "curveBasis" etc.
64
+ const capitalize = (s) => s && s[0].toUpperCase() + s.slice(1);
65
+ return `curve${capitalize(interpolation)}` as ShapeMethod;
66
+ };
67
+ const toNewNameClosed = (interpolation: CurveName) => {
68
+ return `${toNewName(interpolation)}Closed` as ShapeMethodClosed;
69
+ };
70
+
71
+ export const getInterpolationFunction = (props) => {
72
+ const { interpolation } = props;
73
+
74
+ if (typeof interpolation === "function") {
75
+ return interpolation;
76
+ }
77
+ if (typeof interpolation === "string") {
78
+ const { polar, openCurve = !polar } = props;
79
+ const interpolationName = !openCurve
80
+ ? toNewNameClosed(interpolation as CurveName)
81
+ : toNewName(interpolation as CurveName);
82
+
83
+ return d3Shape[interpolationName];
84
+ }
85
+
86
+ return d3Shape.curveLinear;
87
+ };
88
+
89
+ export const getLineFunction = (props) => {
90
+ const { polar, scale, horizontal } = props;
91
+ return polar
92
+ ? d3Shape
93
+ .lineRadial()
94
+ .defined(defined)
95
+ .curve(getInterpolationFunction(props))
96
+ .angle(getAngleAccessor(scale))
97
+ .radius(getYAccessor(scale))
98
+ : d3Shape
99
+ .line()
100
+ .defined(defined)
101
+ .curve(getInterpolationFunction(props))
102
+ .x(horizontal ? getYAccessor(scale) : getXAccessor(scale))
103
+ .y(horizontal ? getXAccessor(scale) : getYAccessor(scale));
104
+ };
@@ -2,7 +2,7 @@
2
2
  /* eslint-disable no-console */
3
3
 
4
4
  // TODO: Use "warning" npm module like React is switching to.
5
- export function warn(message) {
5
+ export function warn(message: string) {
6
6
  if (process.env.NODE_ENV !== "production") {
7
7
  if (console && console.warn) {
8
8
  console.warn(message);
@@ -1,7 +1,11 @@
1
- /*eslint no-magic-numbers: ["error", { "ignore": [-1, 0, 1, 2] }]*/
2
- import { isFunction, find, isRegExp } from "lodash";
1
+ /* eslint no-magic-numbers: ["error", { "ignore": [-1, 0, 1, 2] }] */
2
+ /* eslint-disable max-params */
3
+
4
+ import { find, isRegExp } from "lodash";
3
5
  import * as Log from "./log";
4
6
  import PropTypes from "prop-types";
7
+ import * as Scale from "./scale";
8
+ import { D3Scale, ScaleName } from "../types/prop-types";
5
9
 
6
10
  /**
7
11
  * Return a new validator based on `validator` but with the option to chain
@@ -10,29 +14,25 @@ import PropTypes from "prop-types";
10
14
  * @param {Function} validator Validation function.
11
15
  * @returns {Function} Validator with `isRequired` option.
12
16
  */
13
- const makeChainable = function (validator) {
14
- /* eslint-disable max-params */
15
- const _chainable = function (
16
- isRequired,
17
- props,
18
- propName,
19
- componentName,
20
- ...rest
21
- ) {
22
- const value = props[propName];
23
- if (value === undefined || value === null) {
24
- if (isRequired) {
25
- return new Error(
26
- `Required \`${propName}\` was not specified in \`${componentName}\`.`
27
- );
17
+ const makeChainable = function <T>(validator: PropTypes.Validator<T>) {
18
+ const createChainable =
19
+ (isRequired: boolean): PropTypes.Validator<T | undefined> =>
20
+ (props, propName, componentName, ...rest) => {
21
+ const value = props[propName];
22
+ if (value === undefined || value === null) {
23
+ if (isRequired) {
24
+ return new Error(
25
+ `Required \`${propName}\` was not specified in \`${componentName}\`.`,
26
+ );
27
+ }
28
+ return null;
28
29
  }
29
- return null;
30
- }
31
- return validator(props, propName, componentName, ...rest);
32
- };
33
- const chainable = _chainable.bind(null, false);
34
- chainable.isRequired = _chainable.bind(null, true);
35
- return chainable;
30
+ return validator(props, propName, componentName, ...rest);
31
+ };
32
+ const chainable = Object.assign(createChainable(false), {
33
+ isRequired: createChainable(true),
34
+ });
35
+ return chainable as PropTypes.Requireable<T | undefined>;
36
36
  };
37
37
 
38
38
  const nullConstructor = () => null;
@@ -56,7 +56,7 @@ const getConstructor = (value) => {
56
56
 
57
57
  /**
58
58
  * Get the name of the constructor used to create `value`, using
59
- * `Object.protoype.toString`. If the value is null or undefined, return
59
+ * `Object.prototype.toString`. If the value is null or undefined, return
60
60
  * "null" or "undefined", respectively.
61
61
  * @param {*} value Instance to return the constructor name of.
62
62
  * @returns {String} Name of the constructor.
@@ -77,20 +77,24 @@ const getConstructorName = (value) => {
77
77
  * @param {String} explanation The message to provide the user of the deprecated propType.
78
78
  * @returns {Function} Validator which logs usage of this propType
79
79
  */
80
- export function deprecated(propType, explanation) {
80
+ export function deprecated<T>(
81
+ propType: PropTypes.Validator<T>,
82
+ explanation: string,
83
+ ): PropTypes.Validator<T> {
81
84
  return (props, propName, componentName) => {
82
85
  const value = props[propName];
83
86
  if (value !== null && value !== undefined) {
84
87
  Log.warn(
85
- `"${propName}" property of "${componentName}" has been deprecated ${explanation}`
88
+ `"${propName}" property of "${componentName}" has been deprecated ${explanation}`,
86
89
  );
87
90
  }
88
- return PropTypes.checkPropTypes(
91
+ PropTypes.checkPropTypes(
89
92
  { [propName]: propType },
90
93
  props,
91
94
  propName,
92
- componentName
95
+ componentName,
93
96
  );
97
+ return null;
94
98
  };
95
99
  }
96
100
 
@@ -101,109 +105,105 @@ export function deprecated(propType, explanation) {
101
105
  * @param {Array} validators Validation functions.
102
106
  * @returns {Function} Combined validator function
103
107
  */
104
- export function allOfType(validators) {
105
- return makeChainable((props, propName, componentName, ...rest) =>
106
- validators.reduce(
108
+ export function allOfType<T>(validators: Array<PropTypes.Validator<T>>) {
109
+ return makeChainable<T>((props, propName, componentName, ...rest) => {
110
+ return validators.reduce<null | Error>(
107
111
  (result, validator) =>
108
112
  result || validator(props, propName, componentName, ...rest),
109
- undefined
110
- )
111
- );
113
+ null,
114
+ );
115
+ });
112
116
  }
113
117
 
114
118
  /**
115
119
  * Check that the value is a non-negative number.
116
120
  */
117
- export const nonNegative = makeChainable((props, propName, componentName) => {
118
- const value = props[propName];
119
- if (typeof value !== "number" || value < 0) {
120
- return new Error(
121
- `\`${propName}\` in \`${componentName}\` must be a non-negative number.`
122
- );
123
- }
124
- return undefined;
125
- });
121
+ export const nonNegative = makeChainable<number>(
122
+ (props, propName, componentName) => {
123
+ const value = props[propName];
124
+ if (typeof value !== "number" || value < 0) {
125
+ return new Error(
126
+ `\`${propName}\` in \`${componentName}\` must be a non-negative number.`,
127
+ );
128
+ }
129
+ return null;
130
+ },
131
+ );
126
132
 
127
133
  /**
128
134
  * Check that the value is an integer.
129
135
  */
130
- export const integer = makeChainable((props, propName, componentName) => {
131
- const value = props[propName];
132
- if (typeof value !== "number" || value % 1 !== 0) {
133
- return new Error(
134
- `\`${propName}\` in \`${componentName}\` must be an integer.`
135
- );
136
- }
137
- return undefined;
138
- });
136
+ export const integer = makeChainable<number>(
137
+ (props, propName, componentName) => {
138
+ const value = props[propName];
139
+ if (typeof value !== "number" || value % 1 !== 0) {
140
+ return new Error(
141
+ `\`${propName}\` in \`${componentName}\` must be an integer.`,
142
+ );
143
+ }
144
+ return null;
145
+ },
146
+ );
139
147
 
140
148
  /**
141
149
  * Check that the value is greater than zero.
142
150
  */
143
- export const greaterThanZero = makeChainable(
151
+ export const greaterThanZero = makeChainable<number>(
144
152
  (props, propName, componentName) => {
145
153
  const value = props[propName];
146
154
  if (typeof value !== "number" || value <= 0) {
147
155
  return new Error(
148
- `\`${propName}\` in \`${componentName}\` must be a number greater than zero.`
156
+ `\`${propName}\` in \`${componentName}\` must be a number greater than zero.`,
149
157
  );
150
158
  }
151
- return undefined;
152
- }
159
+ return null;
160
+ },
153
161
  );
154
162
 
155
163
  /**
156
164
  * Check that the value is an Array of two unique values.
157
165
  */
158
- export const domain = makeChainable((props, propName, componentName) => {
159
- const value = props[propName];
160
- if (!Array.isArray(value) || value.length !== 2 || value[1] === value[0]) {
161
- return new Error(
162
- `\`${propName}\` in \`${componentName}\` must be an array of two unique numeric values.`
163
- );
164
- }
165
- return undefined;
166
- });
166
+ export const domain = makeChainable<[number, number]>(
167
+ (props, propName, componentName) => {
168
+ const value = props[propName];
169
+ if (!Array.isArray(value) || value.length !== 2 || value[1] === value[0]) {
170
+ return new Error(
171
+ `\`${propName}\` in \`${componentName}\` must be an array of two unique numeric values.`,
172
+ );
173
+ }
174
+ return null;
175
+ },
176
+ );
167
177
 
168
178
  /**
169
179
  * Check that the value looks like a d3 `scale` function.
170
180
  */
171
- export const scale = makeChainable((props, propName, componentName) => {
172
- const supportedScaleStrings = ["linear", "time", "log", "sqrt"];
173
- const validScale = (scl) => {
174
- if (isFunction(scl)) {
175
- return (
176
- isFunction(scl.copy) && isFunction(scl.domain) && isFunction(scl.range)
181
+ export const scale = makeChainable<ScaleName | D3Scale>(
182
+ (props, propName, componentName) => {
183
+ const value = props[propName];
184
+ if (!Scale.validScale(value)) {
185
+ return new Error(
186
+ `\`${propName}\` in \`${componentName}\` must be a d3 scale.`,
177
187
  );
178
- } else if (typeof scl === "string") {
179
- return supportedScaleStrings.indexOf(scl) !== -1;
180
188
  }
181
- return false;
182
- };
183
-
184
- const value = props[propName];
185
- if (!validScale(value)) {
186
- return new Error(
187
- `\`${propName}\` in \`${componentName}\` must be a d3 scale.`
188
- );
189
- }
190
- return undefined;
191
- });
189
+ return null;
190
+ },
191
+ );
192
192
 
193
193
  /**
194
194
  * Check that an array contains items of the same type.
195
195
  */
196
- export const homogeneousArray = makeChainable(
196
+ export const homogeneousArray = makeChainable<unknown[]>(
197
197
  (props, propName, componentName) => {
198
198
  const values = props[propName];
199
199
  if (!Array.isArray(values)) {
200
200
  return new Error(
201
- `\`${propName}\` in \`${componentName}\` must be an array.`
201
+ `\`${propName}\` in \`${componentName}\` must be an array.`,
202
202
  );
203
203
  }
204
204
 
205
205
  if (values.length < 2) {
206
- return undefined;
206
+ return null;
207
207
  }
208
208
 
209
209
  const comparisonConstructor = getConstructor(values[0]);
@@ -219,17 +219,17 @@ export const homogeneousArray = makeChainable(
219
219
  return new Error(
220
220
  `Expected \`${propName}\` in \`${componentName}\` to be a ` +
221
221
  `homogeneous array, but found types \`${constructorName}\` and ` +
222
- `\`${otherConstructorName}\`.`
222
+ `\`${otherConstructorName}\`.`,
223
223
  );
224
224
  }
225
- return undefined;
226
- }
225
+ return null;
226
+ },
227
227
  );
228
228
 
229
229
  /**
230
230
  * Check that array prop length matches props.data.length
231
231
  */
232
- export const matchDataLength = makeChainable((props, propName) => {
232
+ export const matchDataLength = makeChainable<unknown[]>((props, propName) => {
233
233
  if (
234
234
  props[propName] &&
235
235
  Array.isArray(props[propName]) &&
@@ -237,17 +237,19 @@ export const matchDataLength = makeChainable((props, propName) => {
237
237
  ) {
238
238
  return new Error(`Length of data and ${propName} arrays must match.`);
239
239
  }
240
- return undefined;
240
+ return null;
241
241
  });
242
242
 
243
243
  /**
244
244
  * Check that the value is a regular expression
245
245
  */
246
- export const regExp = makeChainable((props, propName, componentName) => {
247
- if (props[propName] && !isRegExp(props[propName])) {
248
- return new Error(
249
- `\`${propName}\` in \`${componentName}\` must be a regular expression.`
250
- );
251
- }
252
- return undefined;
253
- });
246
+ export const regExp = makeChainable<RegExp>(
247
+ (props, propName, componentName) => {
248
+ if (props[propName] && !isRegExp(props[propName])) {
249
+ return new Error(
250
+ `\`${propName}\` in \`${componentName}\` must be a regular expression.`,
251
+ );
252
+ }
253
+ return null;
254
+ },
255
+ );
@@ -3,18 +3,26 @@ import { includes, isFunction, isPlainObject } from "lodash";
3
3
  import * as Helpers from "./helpers";
4
4
  import * as Collection from "./collection";
5
5
  import * as d3Scale from "victory-vendor/d3-scale";
6
+ import { D3Scale, ScaleName } from "../types/prop-types";
6
7
 
7
- const supportedScaleStrings = ["linear", "time", "log", "sqrt"];
8
+ const supportedScaleStrings = ["linear", "time", "log", "sqrt"] as const;
9
+
10
+ type D3ScaleMethods = Pick<
11
+ typeof d3Scale,
12
+ "scaleLinear" | "scaleTime" | "scaleLog" | "scaleSqrt"
13
+ >;
8
14
 
9
15
  // Private Functions
10
16
 
11
- function toNewName(scale) {
17
+ function toNewName(scale: ScaleName): keyof D3ScaleMethods {
12
18
  // d3 scale changed the naming scheme for scale from "linear" -> "scaleLinear" etc.
13
19
  const capitalize = (s) => s && s[0].toUpperCase() + s.slice(1);
14
- return `scale${capitalize(scale)}`;
20
+ return `scale${capitalize(scale)}` as keyof D3ScaleMethods;
15
21
  }
16
22
 
17
- function validScale(scale) {
23
+ export function validScale(
24
+ scale: string | D3Scale,
25
+ ): scale is ScaleName | D3Scale {
18
26
  if (typeof scale === "function") {
19
27
  return (
20
28
  isFunction(scale.copy) &&
@@ -27,7 +35,7 @@ function validScale(scale) {
27
35
  return false;
28
36
  }
29
37
 
30
- function isScaleDefined(props, axis) {
38
+ function isScaleDefined(props, axis: "x" | "y") {
31
39
  if (!props.scale) {
32
40
  return false;
33
41
  } else if (props.scale.x || props.scale.y) {
@@ -36,7 +44,7 @@ function isScaleDefined(props, axis) {
36
44
  return true;
37
45
  }
38
46
 
39
- function getScaleTypeFromProps(props, axis) {
47
+ function getScaleTypeFromProps(props, axis: "x" | "y"): string | undefined {
40
48
  if (!isScaleDefined(props, axis)) {
41
49
  return undefined;
42
50
  }
@@ -44,7 +52,7 @@ function getScaleTypeFromProps(props, axis) {
44
52
  return typeof scale === "string" ? scale : getType(scale);
45
53
  }
46
54
 
47
- function getScaleFromDomain(props, axis) {
55
+ function getScaleFromDomain(props, axis: "x" | "y"): ScaleName | undefined {
48
56
  let domain;
49
57
  if (props.domain && props.domain[axis]) {
50
58
  domain = props.domain[axis];
@@ -57,7 +65,7 @@ function getScaleFromDomain(props, axis) {
57
65
  return Collection.containsDates(domain) ? "time" : "linear";
58
66
  }
59
67
 
60
- function getScaleTypeFromData(props, axis) {
68
+ function getScaleTypeFromData(props, axis): ScaleName {
61
69
  if (!props.data) {
62
70
  return "linear";
63
71
  }
@@ -73,36 +81,41 @@ function getScaleTypeFromData(props, axis) {
73
81
 
74
82
  // Exported Functions
75
83
 
76
- export function getScaleFromName(name) {
77
- return validScale(name) ? d3Scale[toNewName(name)]() : d3Scale.scaleLinear();
84
+ export function getScaleFromName(name: ScaleName | string): D3Scale {
85
+ if (validScale(name)) {
86
+ const methodName = toNewName(name as ScaleName);
87
+ // @ts-expect-error scaleTime is not directly compatible with our D3Scale definition
88
+ return d3Scale[methodName]();
89
+ }
90
+ return d3Scale.scaleLinear();
78
91
  }
79
92
 
80
- export function getBaseScale(props, axis) {
93
+ export function getBaseScale(props, axis: "x" | "y") {
81
94
  const scale = getScaleFromProps(props, axis);
82
95
  if (scale) {
83
96
  return typeof scale === "string" ? getScaleFromName(scale) : scale;
84
97
  }
85
98
  const defaultScale =
86
99
  getScaleFromDomain(props, axis) || getScaleTypeFromData(props, axis);
87
- return d3Scale[toNewName(defaultScale)]();
100
+ return getScaleFromName(defaultScale);
88
101
  }
89
102
 
90
103
  export function getDefaultScale() {
91
104
  return d3Scale.scaleLinear();
92
105
  }
93
106
 
94
- export function getScaleFromProps(props, axis) {
107
+ export function getScaleFromProps(props, axis): D3Scale | undefined {
95
108
  if (!isScaleDefined(props, axis)) {
96
109
  return undefined;
97
110
  }
98
111
  const scale = props.scale[axis] || props.scale;
99
112
  if (validScale(scale)) {
100
- return isFunction(scale) ? scale : d3Scale[toNewName(scale)]();
113
+ return isFunction(scale) ? scale : getScaleFromName(scale);
101
114
  }
102
115
  return undefined;
103
116
  }
104
117
 
105
- export function getScaleType(props, axis) {
118
+ export function getScaleType(props, axis): string {
106
119
  // if the scale was not given in props, it will be set to linear or time depending on data
107
120
  return (
108
121
  getScaleTypeFromProps(props, axis) || getScaleTypeFromData(props, axis)
@@ -113,7 +126,7 @@ export function getScaleType(props, axis) {
113
126
  // **Note**: Brittle because reliant on d3 internals.
114
127
  const DUCK_TYPES = [
115
128
  { name: "quantile", method: "quantiles" },
116
- { name: "log", method: "base" }
129
+ { name: "log", method: "base" },
117
130
  // TODO(2214): Re-evaluate (1) duck typing approach, and (2) if duck typing,
118
131
  // do we need a different approach? (Multiple keys? Stringifying functions?)
119
132
  // https://github.com/FormidableLabs/victory/issues/2214