victory-core 36.4.1 → 36.5.2

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 (368) hide show
  1. package/dist/victory-core.js +14463 -11478
  2. package/dist/victory-core.min.js +1 -1
  3. package/dist/victory-core.min.js.LICENSE.txt +19 -0
  4. package/es/index.d.ts +18 -941
  5. package/es/index.js +18 -73
  6. package/es/types/callbacks.d.ts +37 -0
  7. package/es/types/callbacks.js +2 -0
  8. package/es/types/prop-types.d.ts +130 -0
  9. package/es/types/prop-types.js +2 -0
  10. package/es/victory-accessible-group/victory-accessible-group.d.ts +26 -0
  11. package/es/victory-accessible-group/victory-accessible-group.js +9 -16
  12. package/es/victory-animation/util.d.ts +67 -0
  13. package/es/victory-animation/util.js +7 -4
  14. package/es/victory-animation/victory-animation.d.ts +70 -0
  15. package/es/victory-animation/victory-animation.js +60 -67
  16. package/es/victory-clip-container/victory-clip-container.d.ts +77 -0
  17. package/es/victory-clip-container/victory-clip-container.js +16 -21
  18. package/es/victory-container/victory-container.d.ts +100 -0
  19. package/es/victory-container/victory-container.js +32 -31
  20. package/es/victory-label/victory-label.d.ts +62 -0
  21. package/es/victory-label/victory-label.js +14 -9
  22. package/es/victory-portal/portal-context.d.ts +12 -0
  23. package/es/victory-portal/portal-context.js +3 -3
  24. package/es/victory-portal/portal.d.ts +29 -0
  25. package/es/victory-portal/portal.js +26 -33
  26. package/es/victory-portal/victory-portal.d.ts +32 -0
  27. package/es/victory-portal/victory-portal.js +24 -22
  28. package/es/victory-primitives/arc.d.ts +50 -0
  29. package/es/victory-primitives/arc.js +4 -5
  30. package/es/victory-primitives/background.d.ts +51 -0
  31. package/es/victory-primitives/background.js +5 -6
  32. package/es/victory-primitives/border.d.ts +44 -0
  33. package/es/victory-primitives/border.js +4 -5
  34. package/es/victory-primitives/circle.d.ts +3 -0
  35. package/es/victory-primitives/circle.js +11 -7
  36. package/es/victory-primitives/clip-path.d.ts +15 -0
  37. package/es/victory-primitives/clip-path.js +6 -5
  38. package/es/victory-primitives/index.d.ts +15 -0
  39. package/es/victory-primitives/index.js +15 -0
  40. package/es/victory-primitives/line-segment.d.ts +46 -0
  41. package/es/victory-primitives/line-segment.js +4 -5
  42. package/es/victory-primitives/line.d.ts +3 -0
  43. package/es/victory-primitives/line.js +11 -7
  44. package/es/victory-primitives/path.d.ts +3 -0
  45. package/es/victory-primitives/path.js +9 -5
  46. package/es/victory-primitives/point.d.ts +49 -0
  47. package/es/victory-primitives/point.js +10 -19
  48. package/es/victory-primitives/rect.d.ts +3 -0
  49. package/es/victory-primitives/rect.js +11 -7
  50. package/es/victory-primitives/text.d.ts +17 -0
  51. package/es/victory-primitives/text.js +7 -5
  52. package/es/victory-primitives/tspan.d.ts +3 -0
  53. package/es/victory-primitives/tspan.js +7 -5
  54. package/es/victory-primitives/types.d.ts +8 -0
  55. package/es/victory-primitives/types.js +2 -0
  56. package/es/victory-primitives/whisker.d.ts +59 -0
  57. package/es/victory-primitives/whisker.js +4 -5
  58. package/es/victory-state/defaults.d.ts +3 -0
  59. package/es/victory-state/defaults.js +3 -0
  60. package/es/victory-state/helpers/get-axis-data.d.ts +3 -0
  61. package/es/victory-state/helpers/get-axis-data.js +15 -0
  62. package/es/victory-state/helpers/get-data.d.ts +15 -0
  63. package/es/victory-state/helpers/get-data.js +88 -0
  64. package/es/victory-state/helpers/get-domain.d.ts +6 -0
  65. package/es/victory-state/helpers/get-domain.js +68 -0
  66. package/es/victory-state/helpers/get-range.d.ts +6 -0
  67. package/es/victory-state/helpers/get-range.js +37 -0
  68. package/es/victory-state/helpers/get-scale.d.ts +6 -0
  69. package/es/victory-state/helpers/get-scale.js +59 -0
  70. package/es/victory-state/index.d.ts +3 -0
  71. package/es/victory-state/index.js +3 -0
  72. package/es/victory-state/types.d.ts +24 -0
  73. package/es/victory-state/types.js +2 -0
  74. package/es/victory-state/victory-provider.d.ts +19 -0
  75. package/es/victory-state/victory-provider.js +118 -0
  76. package/es/victory-theme/grayscale.d.ts +3 -0
  77. package/es/victory-theme/grayscale.js +3 -2
  78. package/es/victory-theme/material.d.ts +3 -0
  79. package/es/victory-theme/material.js +3 -2
  80. package/es/victory-theme/types.d.ts +239 -0
  81. package/es/victory-theme/types.js +2 -0
  82. package/es/victory-theme/victory-theme.d.ts +6 -0
  83. package/es/victory-theme/victory-theme.js +8 -6
  84. package/es/victory-transition/victory-transition.d.ts +60 -0
  85. package/es/victory-transition/victory-transition.js +20 -23
  86. package/es/victory-util/add-events.d.ts +106 -0
  87. package/es/victory-util/add-events.js +44 -34
  88. package/es/victory-util/axis.d.ts +51 -0
  89. package/es/victory-util/axis.js +9 -8
  90. package/es/victory-util/collection.d.ts +9 -0
  91. package/es/victory-util/collection.js +6 -6
  92. package/es/victory-util/common-props.d.ts +84 -0
  93. package/es/victory-util/common-props.js +29 -12
  94. package/es/victory-util/data.d.ts +75 -0
  95. package/es/victory-util/data.js +2 -3
  96. package/es/victory-util/default-transitions.d.ts +5 -0
  97. package/es/victory-util/default-transitions.js +2 -2
  98. package/es/victory-util/domain.d.ts +91 -0
  99. package/es/victory-util/domain.js +6 -4
  100. package/es/victory-util/events.d.ts +65 -0
  101. package/es/victory-util/events.js +13 -8
  102. package/es/victory-util/helpers.d.ts +61 -0
  103. package/es/victory-util/helpers.js +8 -6
  104. package/es/victory-util/hooks/index.d.ts +3 -0
  105. package/es/victory-util/hooks/index.js +2 -1
  106. package/es/victory-util/hooks/use-animation-state.js +2 -1
  107. package/es/victory-util/hooks/use-previous-props.d.ts +2 -0
  108. package/es/victory-util/hooks/use-previous-props.js +4 -3
  109. package/es/victory-util/immutable.d.ts +12 -0
  110. package/es/victory-util/immutable.js +5 -5
  111. package/es/victory-util/index.d.ts +29 -0
  112. package/es/victory-util/index.js +48 -0
  113. package/es/victory-util/label-helpers.d.ts +27 -0
  114. package/es/victory-util/label-helpers.js +2 -3
  115. package/es/victory-util/line-helpers.d.ts +5 -0
  116. package/es/victory-util/line-helpers.js +24 -6
  117. package/es/victory-util/log.d.ts +2 -0
  118. package/es/victory-util/log.js +2 -2
  119. package/es/victory-util/point-path-helpers.d.ts +10 -0
  120. package/es/victory-util/point-path-helpers.js +60 -61
  121. package/es/victory-util/prop-types.d.ts +51 -0
  122. package/es/victory-util/prop-types.js +35 -44
  123. package/es/victory-util/scale.d.ts +10 -0
  124. package/es/victory-util/scale.js +14 -6
  125. package/es/victory-util/selection.d.ts +25 -0
  126. package/es/victory-util/selection.js +25 -16
  127. package/es/victory-util/style.d.ts +19 -0
  128. package/es/victory-util/style.js +2 -3
  129. package/es/victory-util/textsize.d.ts +37 -0
  130. package/es/victory-util/textsize.js +9 -6
  131. package/es/victory-util/timer-context.d.ts +12 -0
  132. package/es/victory-util/timer-context.js +2 -1
  133. package/es/victory-util/timer.d.ts +17 -0
  134. package/es/victory-util/timer.js +15 -9
  135. package/es/victory-util/transitions.d.ts +49 -0
  136. package/es/victory-util/transitions.js +5 -4
  137. package/es/victory-util/type-helpers.d.ts +10 -0
  138. package/es/victory-util/type-helpers.js +28 -0
  139. package/es/victory-util/user-props.d.ts +21 -0
  140. package/es/victory-util/user-props.js +6 -5
  141. package/es/victory-util/with-container.d.ts +5 -0
  142. package/es/victory-util/with-container.js +32 -0
  143. package/es/victory-util/wrapper.d.ts +38 -0
  144. package/es/victory-util/wrapper.js +4 -3
  145. package/lib/index.d.ts +18 -941
  146. package/lib/index.js +224 -311
  147. package/lib/types/callbacks.d.ts +37 -0
  148. package/lib/types/callbacks.js +2 -0
  149. package/lib/types/prop-types.d.ts +130 -0
  150. package/lib/types/prop-types.js +2 -0
  151. package/lib/victory-accessible-group/victory-accessible-group.d.ts +26 -0
  152. package/lib/victory-accessible-group/victory-accessible-group.js +10 -15
  153. package/lib/victory-animation/util.d.ts +67 -0
  154. package/lib/victory-animation/util.js +7 -4
  155. package/lib/victory-animation/victory-animation.d.ts +70 -0
  156. package/lib/victory-animation/victory-animation.js +61 -65
  157. package/lib/victory-clip-container/victory-clip-container.d.ts +77 -0
  158. package/lib/victory-clip-container/victory-clip-container.js +20 -22
  159. package/lib/victory-container/victory-container.d.ts +100 -0
  160. package/lib/victory-container/victory-container.js +35 -31
  161. package/lib/victory-label/victory-label.d.ts +62 -0
  162. package/lib/victory-label/victory-label.js +20 -14
  163. package/lib/victory-portal/portal-context.d.ts +12 -0
  164. package/lib/victory-portal/portal-context.js +3 -3
  165. package/lib/victory-portal/portal.d.ts +29 -0
  166. package/lib/victory-portal/portal.js +27 -31
  167. package/lib/victory-portal/victory-portal.d.ts +32 -0
  168. package/lib/victory-portal/victory-portal.js +25 -20
  169. package/lib/victory-primitives/arc.d.ts +50 -0
  170. package/lib/victory-primitives/arc.js +7 -7
  171. package/lib/victory-primitives/background.d.ts +51 -0
  172. package/lib/victory-primitives/background.js +9 -9
  173. package/lib/victory-primitives/border.d.ts +44 -0
  174. package/lib/victory-primitives/border.js +7 -7
  175. package/lib/victory-primitives/circle.d.ts +3 -0
  176. package/lib/victory-primitives/circle.js +12 -6
  177. package/lib/victory-primitives/clip-path.d.ts +15 -0
  178. package/lib/victory-primitives/clip-path.js +7 -4
  179. package/lib/victory-primitives/index.d.ts +15 -0
  180. package/lib/victory-primitives/index.js +188 -0
  181. package/lib/victory-primitives/line-segment.d.ts +46 -0
  182. package/lib/victory-primitives/line-segment.js +7 -7
  183. package/lib/victory-primitives/line.d.ts +3 -0
  184. package/lib/victory-primitives/line.js +12 -6
  185. package/lib/victory-primitives/path.d.ts +3 -0
  186. package/lib/victory-primitives/path.js +10 -4
  187. package/lib/victory-primitives/point.d.ts +49 -0
  188. package/lib/victory-primitives/point.js +15 -22
  189. package/lib/victory-primitives/rect.d.ts +3 -0
  190. package/lib/victory-primitives/rect.js +12 -6
  191. package/lib/victory-primitives/text.d.ts +17 -0
  192. package/lib/victory-primitives/text.js +8 -4
  193. package/lib/victory-primitives/tspan.d.ts +3 -0
  194. package/lib/victory-primitives/tspan.js +8 -4
  195. package/lib/victory-primitives/types.d.ts +8 -0
  196. package/lib/victory-primitives/types.js +2 -0
  197. package/lib/victory-primitives/whisker.d.ts +59 -0
  198. package/lib/victory-primitives/whisker.js +7 -7
  199. package/lib/victory-state/defaults.d.ts +3 -0
  200. package/lib/victory-state/defaults.js +11 -0
  201. package/lib/victory-state/helpers/get-axis-data.d.ts +3 -0
  202. package/lib/victory-state/helpers/get-axis-data.js +23 -0
  203. package/lib/victory-state/helpers/get-data.d.ts +15 -0
  204. package/lib/victory-state/helpers/get-data.js +99 -0
  205. package/lib/victory-state/helpers/get-domain.d.ts +6 -0
  206. package/lib/victory-state/helpers/get-domain.js +82 -0
  207. package/lib/victory-state/helpers/get-range.d.ts +6 -0
  208. package/lib/victory-state/helpers/get-range.js +46 -0
  209. package/lib/victory-state/helpers/get-scale.d.ts +6 -0
  210. package/lib/victory-state/helpers/get-scale.js +74 -0
  211. package/lib/victory-state/index.d.ts +3 -0
  212. package/lib/victory-state/index.js +32 -0
  213. package/lib/victory-state/types.d.ts +24 -0
  214. package/lib/victory-state/types.js +2 -0
  215. package/lib/victory-state/victory-provider.d.ts +19 -0
  216. package/lib/victory-state/victory-provider.js +144 -0
  217. package/lib/victory-theme/grayscale.d.ts +3 -0
  218. package/lib/victory-theme/grayscale.js +4 -3
  219. package/lib/victory-theme/material.d.ts +3 -0
  220. package/lib/victory-theme/material.js +4 -3
  221. package/lib/victory-theme/types.d.ts +239 -0
  222. package/lib/victory-theme/types.js +2 -0
  223. package/lib/victory-theme/victory-theme.d.ts +6 -0
  224. package/lib/victory-theme/victory-theme.js +23 -8
  225. package/lib/victory-transition/victory-transition.d.ts +60 -0
  226. package/lib/victory-transition/victory-transition.js +22 -23
  227. package/lib/victory-util/add-events.d.ts +106 -0
  228. package/lib/victory-util/add-events.js +48 -40
  229. package/lib/victory-util/axis.d.ts +51 -0
  230. package/lib/victory-util/axis.js +8 -6
  231. package/lib/victory-util/collection.d.ts +9 -0
  232. package/lib/victory-util/collection.js +6 -6
  233. package/lib/victory-util/common-props.d.ts +84 -0
  234. package/lib/victory-util/common-props.js +27 -12
  235. package/lib/victory-util/data.d.ts +75 -0
  236. package/lib/victory-util/data.js +2 -1
  237. package/lib/victory-util/default-transitions.d.ts +5 -0
  238. package/lib/victory-util/default-transitions.js +2 -2
  239. package/lib/victory-util/domain.d.ts +91 -0
  240. package/lib/victory-util/domain.js +6 -2
  241. package/lib/victory-util/events.d.ts +65 -0
  242. package/lib/victory-util/events.js +13 -9
  243. package/lib/victory-util/helpers.d.ts +61 -0
  244. package/lib/victory-util/helpers.js +8 -6
  245. package/lib/victory-util/hooks/index.d.ts +3 -0
  246. package/lib/victory-util/hooks/index.js +2 -1
  247. package/lib/victory-util/hooks/use-animation-state.js +2 -1
  248. package/lib/victory-util/hooks/use-previous-props.d.ts +2 -0
  249. package/lib/victory-util/hooks/use-previous-props.js +5 -6
  250. package/lib/victory-util/immutable.d.ts +12 -0
  251. package/lib/victory-util/immutable.js +5 -6
  252. package/lib/victory-util/index.d.ts +29 -0
  253. package/lib/victory-util/index.js +181 -0
  254. package/lib/victory-util/label-helpers.d.ts +27 -0
  255. package/lib/victory-util/label-helpers.js +2 -3
  256. package/lib/victory-util/line-helpers.d.ts +5 -0
  257. package/lib/victory-util/line-helpers.js +28 -7
  258. package/lib/victory-util/log.d.ts +2 -0
  259. package/lib/victory-util/log.js +2 -2
  260. package/lib/victory-util/point-path-helpers.d.ts +10 -0
  261. package/lib/victory-util/point-path-helpers.js +87 -73
  262. package/lib/victory-util/prop-types.d.ts +51 -0
  263. package/lib/victory-util/prop-types.js +36 -44
  264. package/lib/victory-util/scale.d.ts +10 -0
  265. package/lib/victory-util/scale.js +14 -5
  266. package/lib/victory-util/selection.d.ts +25 -0
  267. package/lib/victory-util/selection.js +25 -21
  268. package/lib/victory-util/style.d.ts +19 -0
  269. package/lib/victory-util/style.js +2 -3
  270. package/lib/victory-util/textsize.d.ts +37 -0
  271. package/lib/victory-util/textsize.js +9 -6
  272. package/lib/victory-util/timer-context.d.ts +12 -0
  273. package/lib/victory-util/timer-context.js +2 -1
  274. package/lib/victory-util/timer.d.ts +17 -0
  275. package/lib/victory-util/timer.js +15 -9
  276. package/lib/victory-util/transitions.d.ts +49 -0
  277. package/lib/victory-util/transitions.js +5 -4
  278. package/lib/victory-util/type-helpers.d.ts +10 -0
  279. package/lib/victory-util/type-helpers.js +45 -0
  280. package/lib/victory-util/user-props.d.ts +21 -0
  281. package/lib/victory-util/user-props.js +6 -5
  282. package/lib/victory-util/with-container.d.ts +5 -0
  283. package/lib/victory-util/with-container.js +44 -0
  284. package/lib/victory-util/wrapper.d.ts +38 -0
  285. package/lib/victory-util/wrapper.js +4 -3
  286. package/package.json +4 -4
  287. package/src/index.ts +17 -0
  288. package/src/types/callbacks.ts +53 -0
  289. package/src/types/prop-types.ts +195 -0
  290. package/src/victory-accessible-group/{victory-accessible-group.js → victory-accessible-group.tsx} +13 -6
  291. package/src/victory-animation/{util.js → util.ts} +6 -4
  292. package/src/victory-animation/{victory-animation.js → victory-animation.tsx} +100 -23
  293. package/src/victory-clip-container/{victory-clip-container.js → victory-clip-container.tsx} +52 -28
  294. package/src/victory-container/{victory-container.js → victory-container.tsx} +86 -42
  295. package/src/victory-label/{victory-label.js → victory-label.tsx} +108 -49
  296. package/src/victory-portal/portal-context.ts +14 -0
  297. package/src/victory-portal/{portal.js → portal.tsx} +24 -13
  298. package/src/victory-portal/{victory-portal.js → victory-portal.tsx} +24 -9
  299. package/src/victory-primitives/{arc.js → arc.tsx} +22 -10
  300. package/src/victory-primitives/{background.js → background.tsx} +24 -12
  301. package/src/victory-primitives/{border.js → border.tsx} +19 -10
  302. package/src/victory-primitives/{circle.js → circle.tsx} +4 -3
  303. package/src/victory-primitives/clip-path.tsx +25 -0
  304. package/src/victory-primitives/index.ts +14 -0
  305. package/src/victory-primitives/{line-segment.js → line-segment.tsx} +20 -10
  306. package/src/victory-primitives/{line.js → line.tsx} +4 -3
  307. package/src/victory-primitives/{path.js → path.tsx} +4 -3
  308. package/src/victory-primitives/{point.js → point.tsx} +33 -26
  309. package/src/victory-primitives/{rect.js → rect.tsx} +4 -2
  310. package/src/victory-primitives/{text.js → text.tsx} +10 -4
  311. package/src/victory-primitives/tspan.tsx +7 -0
  312. package/src/victory-primitives/types.ts +19 -0
  313. package/src/victory-primitives/{whisker.js → whisker.tsx} +34 -19
  314. package/src/victory-state/defaults.ts +2 -0
  315. package/src/victory-state/helpers/get-axis-data.ts +14 -0
  316. package/src/victory-state/helpers/get-data.ts +79 -0
  317. package/src/victory-state/helpers/get-domain.ts +62 -0
  318. package/src/victory-state/helpers/get-range.ts +39 -0
  319. package/src/victory-state/helpers/get-scale.ts +64 -0
  320. package/src/victory-state/index.ts +2 -0
  321. package/src/victory-state/types.ts +32 -0
  322. package/src/victory-state/victory-provider.tsx +116 -0
  323. package/src/victory-theme/{grayscale.js → grayscale.tsx} +63 -62
  324. package/src/victory-theme/{material.js → material.tsx} +68 -67
  325. package/src/victory-theme/types.ts +257 -0
  326. package/src/victory-theme/victory-theme.tsx +5 -0
  327. package/src/victory-transition/{victory-transition.js → victory-transition.tsx} +82 -33
  328. package/src/victory-util/{add-events.js → add-events.tsx} +142 -60
  329. package/src/victory-util/{axis.js → axis.tsx} +17 -19
  330. package/src/victory-util/{collection.js → collection.tsx} +14 -11
  331. package/src/victory-util/common-props.tsx +307 -0
  332. package/src/victory-util/{data.js → data.ts} +14 -11
  333. package/src/victory-util/{default-transitions.js → default-transitions.ts} +20 -19
  334. package/src/victory-util/{domain.js → domain.ts} +26 -24
  335. package/src/victory-util/{events.js → events.ts} +83 -32
  336. package/src/victory-util/{helpers.js → helpers.ts} +41 -23
  337. package/src/victory-util/hooks/{index.js → index.ts} +0 -0
  338. package/src/victory-util/hooks/use-animation-state.js +10 -10
  339. package/src/victory-util/hooks/use-previous-props.ts +9 -0
  340. package/src/victory-util/{immutable.js → immutable.ts} +14 -11
  341. package/src/victory-util/index.ts +28 -0
  342. package/src/victory-util/{label-helpers.js → label-helpers.ts} +7 -8
  343. package/src/victory-util/line-helpers.ts +104 -0
  344. package/src/victory-util/{log.js → log.ts} +1 -2
  345. package/src/victory-util/point-path-helpers.ts +119 -0
  346. package/src/victory-util/{prop-types.js → prop-types.ts} +103 -102
  347. package/src/victory-util/{scale.js → scale.ts} +29 -17
  348. package/src/victory-util/selection.ts +158 -0
  349. package/src/victory-util/{style.js → style.ts} +3 -4
  350. package/src/victory-util/{textsize.js → textsize.ts} +32 -17
  351. package/src/victory-util/{timer-context.js → timer-context.ts} +1 -1
  352. package/src/victory-util/{timer.js → timer.ts} +16 -6
  353. package/src/victory-util/{transitions.js → transitions.ts} +50 -23
  354. package/src/victory-util/type-helpers.ts +50 -0
  355. package/src/victory-util/{user-props.js → user-props.ts} +16 -11
  356. package/src/victory-util/with-container.tsx +41 -0
  357. package/src/victory-util/{wrapper.js → wrapper.tsx} +38 -34
  358. package/src/index.d.ts +0 -941
  359. package/src/index.js +0 -51
  360. package/src/victory-portal/portal-context.js +0 -10
  361. package/src/victory-primitives/clip-path.js +0 -18
  362. package/src/victory-primitives/tspan.js +0 -5
  363. package/src/victory-theme/victory-theme.js +0 -7
  364. package/src/victory-util/common-props.js +0 -197
  365. package/src/victory-util/hooks/use-previous-props.js +0 -9
  366. package/src/victory-util/line-helpers.js +0 -54
  367. package/src/victory-util/point-path-helpers.js +0 -121
  368. package/src/victory-util/selection.js +0 -99
@@ -5,8 +5,85 @@ import * as d3Ease from "victory-vendor/d3-ease";
5
5
  import { victoryInterpolator } from "./util";
6
6
  import TimerContext from "../victory-util/timer-context";
7
7
  import isEqual from "react-fast-compare";
8
+ import type Timer from "../victory-util/timer";
8
9
 
9
- export default class VictoryAnimation extends React.Component {
10
+ /**
11
+ * Single animation object to interpolate
12
+ */
13
+ export type AnimationStyle = { [key: string]: string | number };
14
+ /**
15
+ * Animation styles to interpolate
16
+ */
17
+
18
+ export type AnimationData = AnimationStyle | AnimationStyle[];
19
+ export type AnimationEasing =
20
+ | "back"
21
+ | "backIn"
22
+ | "backOut"
23
+ | "backInOut"
24
+ | "bounce"
25
+ | "bounceIn"
26
+ | "bounceOut"
27
+ | "bounceInOut"
28
+ | "circle"
29
+ | "circleIn"
30
+ | "circleOut"
31
+ | "circleInOut"
32
+ | "linear"
33
+ | "linearIn"
34
+ | "linearOut"
35
+ | "linearInOut"
36
+ | "cubic"
37
+ | "cubicIn"
38
+ | "cubicOut"
39
+ | "cubicInOut"
40
+ | "elastic"
41
+ | "elasticIn"
42
+ | "elasticOut"
43
+ | "elasticInOut"
44
+ | "exp"
45
+ | "expIn"
46
+ | "expOut"
47
+ | "expInOut"
48
+ | "poly"
49
+ | "polyIn"
50
+ | "polyOut"
51
+ | "polyInOut"
52
+ | "quad"
53
+ | "quadIn"
54
+ | "quadOut"
55
+ | "quadInOut"
56
+ | "sin"
57
+ | "sinIn"
58
+ | "sinOut"
59
+ | "sinInOut";
60
+
61
+ export interface VictoryAnimationProps {
62
+ children: (style: AnimationStyle, info: AnimationInfo) => React.ReactNode;
63
+ duration?: number;
64
+ easing?: AnimationEasing;
65
+ delay?: number;
66
+ onEnd?: () => void;
67
+ data: AnimationData;
68
+ }
69
+ export interface VictoryAnimationState {
70
+ data: AnimationStyle;
71
+ animationInfo: AnimationInfo;
72
+ }
73
+ export interface AnimationInfo {
74
+ progress: number;
75
+ animating: boolean;
76
+ terminating?: boolean;
77
+ }
78
+
79
+ export interface VictoryAnimation {
80
+ context: React.ContextType<typeof TimerContext>;
81
+ }
82
+
83
+ export class VictoryAnimation extends React.Component<
84
+ VictoryAnimationProps,
85
+ VictoryAnimationState
86
+ > {
10
87
  static displayName = "VictoryAnimation";
11
88
 
12
89
  static propTypes = {
@@ -54,19 +131,24 @@ export default class VictoryAnimation extends React.Component {
54
131
  "sin",
55
132
  "sinIn",
56
133
  "sinOut",
57
- "sinInOut"
134
+ "sinInOut",
58
135
  ]),
59
- onEnd: PropTypes.func
136
+ onEnd: PropTypes.func,
60
137
  };
61
138
 
62
139
  static defaultProps = {
63
140
  data: {},
64
141
  delay: 0,
65
142
  duration: 1000,
66
- easing: "quadInOut"
143
+ easing: "quadInOut",
67
144
  };
68
145
 
69
146
  static contextType = TimerContext;
147
+ private interpolator: null | ((value: number) => AnimationStyle);
148
+ private queue: AnimationStyle[];
149
+ private ease: any;
150
+ private timer: Timer;
151
+ private loopID?: number;
70
152
 
71
153
  constructor(props, context) {
72
154
  super(props, context);
@@ -77,18 +159,13 @@ export default class VictoryAnimation extends React.Component {
77
159
  : this.props.data,
78
160
  animationInfo: {
79
161
  progress: 0,
80
- animating: false
81
- }
162
+ animating: false,
163
+ },
82
164
  };
83
165
  this.interpolator = null;
84
166
  this.queue = Array.isArray(this.props.data) ? this.props.data.slice(1) : [];
85
167
  /* build easing function */
86
168
  this.ease = d3Ease[this.toNewName(this.props.easing)];
87
- /*
88
- There is no autobinding of this in ES6 classes
89
- so we bind functionToBeRunEachFrame to current instance of victory animation class
90
- */
91
- this.functionToBeRunEachFrame = this.functionToBeRunEachFrame.bind(this);
92
169
  this.timer = this.context.animationTimer;
93
170
  }
94
171
 
@@ -114,8 +191,8 @@ export default class VictoryAnimation extends React.Component {
114
191
  animationInfo: {
115
192
  progress: 1,
116
193
  animating: false,
117
- terminating: true
118
- }
194
+ terminating: true,
195
+ },
119
196
  });
120
197
  } else {
121
198
  /* cancel existing loop if it exists */
@@ -163,13 +240,13 @@ export default class VictoryAnimation extends React.Component {
163
240
  setTimeout(() => {
164
241
  this.loopID = this.timer.subscribe(
165
242
  this.functionToBeRunEachFrame,
166
- this.props.duration
243
+ this.props.duration!,
167
244
  );
168
245
  }, this.props.delay);
169
246
  } else {
170
247
  this.loopID = this.timer.subscribe(
171
248
  this.functionToBeRunEachFrame,
172
- this.props.duration
249
+ this.props.duration!,
173
250
  );
174
251
  }
175
252
  } else if (this.props.onEnd) {
@@ -177,7 +254,7 @@ export default class VictoryAnimation extends React.Component {
177
254
  }
178
255
  }
179
256
  /* every frame we... */
180
- functionToBeRunEachFrame(elapsed, duration) {
257
+ functionToBeRunEachFrame = (elapsed, duration) => {
181
258
  /*
182
259
  step can generate imprecise values, sometimes greater than 1
183
260
  if this happens set the state to 1 and return, cancelling the timer
@@ -186,12 +263,12 @@ export default class VictoryAnimation extends React.Component {
186
263
  const step = duration ? elapsed / duration : 1;
187
264
  if (step >= 1) {
188
265
  this.setState({
189
- data: this.interpolator(1),
266
+ data: this.interpolator!(1),
190
267
  animationInfo: {
191
268
  progress: 1,
192
269
  animating: false,
193
- terminating: true
194
- }
270
+ terminating: true,
271
+ },
195
272
  });
196
273
  if (this.loopID) {
197
274
  this.timer.unsubscribe(this.loopID);
@@ -206,13 +283,13 @@ export default class VictoryAnimation extends React.Component {
206
283
  interpolator, which is cached for performance whenever props are received
207
284
  */
208
285
  this.setState({
209
- data: this.interpolator(this.ease(step)),
286
+ data: this.interpolator!(this.ease(step)),
210
287
  animationInfo: {
211
288
  progress: step,
212
- animating: step < 1
213
- }
289
+ animating: step < 1,
290
+ },
214
291
  });
215
- }
292
+ };
216
293
 
217
294
  render() {
218
295
  return this.props.children(this.state.data, this.state.animationInfo);
@@ -4,18 +4,41 @@ import * as CustomPropTypes from "../victory-util/prop-types";
4
4
  import * as Helpers from "../victory-util/helpers";
5
5
  import * as UserProps from "../victory-util/user-props";
6
6
  import { assign, defaults, isObject, uniqueId } from "lodash";
7
- import ClipPath from "../victory-primitives/clip-path";
8
- import Circle from "../victory-primitives/circle";
9
- import Rect from "../victory-primitives/rect";
7
+ import { ClipPath } from "../victory-primitives/clip-path";
8
+ import { Circle } from "../victory-primitives/circle";
9
+ import { Rect } from "../victory-primitives/rect";
10
10
 
11
- export default class VictoryClipContainer extends React.Component {
11
+ import { BlockProps } from "../victory-theme/victory-theme";
12
+ import { OriginType } from "../victory-label/victory-label";
13
+
14
+ export interface VictoryClipContainerProps {
15
+ "aria-label"?: string;
16
+ children?: React.ReactElement | React.ReactElement[];
17
+ circleComponent?: React.ReactElement;
18
+ className?: string;
19
+ clipHeight?: number;
20
+ clipId?: number | string;
21
+ clipPadding?: BlockProps;
22
+ clipPathComponent?: React.ReactElement;
23
+ clipWidth?: number;
24
+ events?: React.DOMAttributes<any>;
25
+ groupComponent?: React.ReactElement;
26
+ origin?: OriginType;
27
+ polar?: boolean;
28
+ radius?: number;
29
+ rectComponent?: React.ReactElement;
30
+ translateX?: number;
31
+ translateY?: number;
32
+ }
33
+
34
+ export class VictoryClipContainer extends React.Component<VictoryClipContainerProps> {
12
35
  static displayName = "VictoryClipContainer";
13
36
  static role = "container";
14
37
  static propTypes = {
15
38
  "aria-label": PropTypes.string,
16
39
  children: PropTypes.oneOfType([
17
40
  PropTypes.arrayOf(PropTypes.node),
18
- PropTypes.node
41
+ PropTypes.node,
19
42
  ]),
20
43
  circleComponent: PropTypes.element,
21
44
  className: PropTypes.string,
@@ -25,7 +48,7 @@ export default class VictoryClipContainer extends React.Component {
25
48
  top: PropTypes.number,
26
49
  bottom: PropTypes.number,
27
50
  left: PropTypes.number,
28
- right: PropTypes.number
51
+ right: PropTypes.number,
29
52
  }),
30
53
  clipPathComponent: PropTypes.element,
31
54
  clipWidth: CustomPropTypes.nonNegative,
@@ -33,7 +56,7 @@ export default class VictoryClipContainer extends React.Component {
33
56
  groupComponent: PropTypes.element,
34
57
  origin: PropTypes.shape({
35
58
  x: CustomPropTypes.nonNegative,
36
- y: CustomPropTypes.nonNegative
59
+ y: CustomPropTypes.nonNegative,
37
60
  }),
38
61
  polar: PropTypes.bool,
39
62
  radius: CustomPropTypes.nonNegative,
@@ -41,17 +64,18 @@ export default class VictoryClipContainer extends React.Component {
41
64
  tabIndex: PropTypes.number,
42
65
  transform: PropTypes.string,
43
66
  translateX: PropTypes.number,
44
- translateY: PropTypes.number
67
+ translateY: PropTypes.number,
45
68
  };
46
69
 
47
70
  static defaultProps = {
48
71
  circleComponent: <Circle />,
49
72
  rectComponent: <Rect />,
50
73
  clipPathComponent: <ClipPath />,
51
- groupComponent: <g />
74
+ groupComponent: <g />,
52
75
  };
76
+ private clipId: VictoryClipContainerProps["clipId"];
53
77
 
54
- constructor(props) {
78
+ constructor(props: VictoryClipContainerProps) {
55
79
  super(props);
56
80
  this.clipId =
57
81
  !isObject(props) || props.clipId === undefined
@@ -66,7 +90,7 @@ export default class VictoryClipContainer extends React.Component {
66
90
  clipWidth = 0,
67
91
  clipHeight = 0,
68
92
  translateX = 0,
69
- translateY = 0
93
+ translateY = 0,
70
94
  } = props;
71
95
  const clipPadding = Helpers.getPadding({ padding: props.clipPadding });
72
96
  const radius = props.radius || Helpers.getRadius(props);
@@ -75,12 +99,12 @@ export default class VictoryClipContainer extends React.Component {
75
99
  y: (polar ? origin.y : translateY) - clipPadding.top,
76
100
  width: Math.max(
77
101
  (polar ? radius : clipWidth) + clipPadding.left + clipPadding.right,
78
- 0
102
+ 0,
79
103
  ),
80
104
  height: Math.max(
81
105
  (polar ? radius : clipHeight) + clipPadding.top + clipPadding.bottom,
82
- 0
83
- )
106
+ 0,
107
+ ),
84
108
  };
85
109
  }
86
110
 
@@ -93,7 +117,7 @@ export default class VictoryClipContainer extends React.Component {
93
117
  children,
94
118
  className,
95
119
  groupComponent,
96
- tabIndex
120
+ tabIndex,
97
121
  } = props;
98
122
  const clipComponent = this.renderClipComponent(props, clipId);
99
123
  const groupProps = assign(
@@ -102,14 +126,14 @@ export default class VictoryClipContainer extends React.Component {
102
126
  style,
103
127
  transform,
104
128
  key: `clipped-group-${clipId}`,
105
- clipPath: `url(#${clipId})`
129
+ clipPath: `url(#${clipId})`,
106
130
  },
107
- events
131
+ events,
108
132
  );
109
133
  return React.cloneElement(
110
134
  groupComponent,
111
135
  { ...groupProps, tabIndex, ...userProps },
112
- [clipComponent, ...React.Children.toArray(children)]
136
+ [clipComponent, ...React.Children.toArray(children)],
113
137
  );
114
138
  }
115
139
 
@@ -121,7 +145,7 @@ export default class VictoryClipContainer extends React.Component {
121
145
  children,
122
146
  className,
123
147
  groupComponent,
124
- tabIndex
148
+ tabIndex,
125
149
  } = props;
126
150
  return React.cloneElement(
127
151
  groupComponent,
@@ -131,11 +155,11 @@ export default class VictoryClipContainer extends React.Component {
131
155
  style,
132
156
  transform,
133
157
  "aria-label": props["aria-label"],
134
- tabIndex
158
+ tabIndex,
135
159
  },
136
- events
160
+ events,
137
161
  ),
138
- children
162
+ children,
139
163
  );
140
164
  }
141
165
 
@@ -149,10 +173,10 @@ export default class VictoryClipContainer extends React.Component {
149
173
  translateY = 0,
150
174
  circleComponent,
151
175
  rectComponent,
152
- clipPathComponent
176
+ clipPathComponent,
153
177
  } = props;
154
178
  const { top, bottom, left, right } = Helpers.getPadding({
155
- padding: props.clipPadding
179
+ padding: props.clipPadding,
156
180
  });
157
181
  let child;
158
182
  if (polar) {
@@ -160,7 +184,7 @@ export default class VictoryClipContainer extends React.Component {
160
184
  const circleProps = {
161
185
  r: Math.max(radius + left + right, radius + top + bottom, 0),
162
186
  cx: origin.x - left,
163
- cy: origin.y - top
187
+ cy: origin.y - top,
164
188
  };
165
189
  child = React.cloneElement(circleComponent, circleProps);
166
190
  } else {
@@ -168,7 +192,7 @@ export default class VictoryClipContainer extends React.Component {
168
192
  x: translateX - left,
169
193
  y: translateY - top,
170
194
  width: Math.max(clipWidth + left + right, 0),
171
- height: Math.max(clipHeight + top + bottom, 0)
195
+ height: Math.max(clipHeight + top + bottom, 0),
172
196
  };
173
197
  child = React.cloneElement(rectComponent, rectProps);
174
198
  }
@@ -176,7 +200,7 @@ export default class VictoryClipContainer extends React.Component {
176
200
  return React.cloneElement(
177
201
  clipPathComponent,
178
202
  assign({ key: `clip-path-${clipId}` }, props, { clipId }),
179
- child
203
+ child,
180
204
  );
181
205
  }
182
206
 
@@ -209,7 +233,7 @@ export default class VictoryClipContainer extends React.Component {
209
233
  clipHeight,
210
234
  clipWidth,
211
235
  translateX,
212
- translateY
236
+ translateY,
213
237
  });
214
238
  return this.renderClippedGroup(clipProps, this.clipId);
215
239
  }
@@ -2,13 +2,48 @@ import React from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import * as CustomPropTypes from "../victory-util/prop-types";
4
4
  import { assign, defaults, uniqueId, isObject, isFunction } from "lodash";
5
- import Portal from "../victory-portal/portal";
6
- import PortalContext from "../victory-portal/portal-context";
5
+ import { Portal } from "../victory-portal/portal";
6
+ import { PortalContext } from "../victory-portal/portal-context";
7
7
  import TimerContext from "../victory-util/timer-context";
8
8
  import * as Helpers from "../victory-util/helpers";
9
9
  import * as UserProps from "../victory-util/user-props";
10
+ import { OriginType } from "../victory-label/victory-label";
11
+ import { D3Scale } from "../types/prop-types";
12
+ import { VictoryThemeDefinition } from "../victory-theme/types";
10
13
 
11
- export default class VictoryContainer extends React.Component {
14
+ export interface VictoryContainerProps {
15
+ "aria-describedby"?: string;
16
+ "aria-labelledby"?: string;
17
+ children?: React.ReactElement | React.ReactElement[];
18
+ className?: string;
19
+ containerId?: number | string;
20
+ containerRef?: React.Ref<HTMLElement>;
21
+ desc?: string;
22
+ events?: React.DOMAttributes<any>;
23
+ height?: number;
24
+ name?: string;
25
+ origin?: OriginType;
26
+ ouiaId?: number | string;
27
+ ouiaSafe?: boolean;
28
+ ouiaType?: string;
29
+ polar?: boolean;
30
+ portalComponent?: React.ReactElement;
31
+ portalZIndex?: number;
32
+ preserveAspectRatio?: string;
33
+ responsive?: boolean;
34
+ role?: string;
35
+ scale?: {
36
+ x?: D3Scale;
37
+ y?: D3Scale;
38
+ };
39
+ style?: React.CSSProperties;
40
+ tabIndex?: number;
41
+ theme?: VictoryThemeDefinition;
42
+ title?: string;
43
+ width?: number;
44
+ }
45
+
46
+ export class VictoryContainer extends React.Component<VictoryContainerProps> {
12
47
  static displayName = "VictoryContainer";
13
48
  static role = "container";
14
49
  static propTypes = {
@@ -16,7 +51,7 @@ export default class VictoryContainer extends React.Component {
16
51
  "aria-labelledby": PropTypes.string,
17
52
  children: PropTypes.oneOfType([
18
53
  PropTypes.arrayOf(PropTypes.node),
19
- PropTypes.node
54
+ PropTypes.node,
20
55
  ]),
21
56
  className: PropTypes.string,
22
57
  containerId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -27,7 +62,7 @@ export default class VictoryContainer extends React.Component {
27
62
  name: PropTypes.string,
28
63
  origin: PropTypes.shape({
29
64
  x: CustomPropTypes.nonNegative,
30
- y: CustomPropTypes.nonNegative
65
+ y: CustomPropTypes.nonNegative,
31
66
  }),
32
67
  ouiaId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
33
68
  ouiaSafe: PropTypes.bool,
@@ -42,7 +77,7 @@ export default class VictoryContainer extends React.Component {
42
77
  tabIndex: PropTypes.number,
43
78
  theme: PropTypes.object,
44
79
  title: PropTypes.string,
45
- width: CustomPropTypes.nonNegative
80
+ width: CustomPropTypes.nonNegative,
46
81
  };
47
82
 
48
83
  static defaultProps = {
@@ -50,38 +85,43 @@ export default class VictoryContainer extends React.Component {
50
85
  portalComponent: <Portal />,
51
86
  portalZIndex: 99,
52
87
  responsive: true,
53
- role: "img"
88
+ role: "img",
54
89
  };
55
90
 
56
91
  static contextType = TimerContext;
92
+ private containerId: VictoryContainerProps["containerId"];
93
+ // @ts-expect-error Ref will be initialized on mount
94
+ private portalRef: Portal;
95
+ // @ts-expect-error Ref will be initialized on mount
96
+ private containerRef: HTMLElement;
97
+ private shouldHandleWheel: boolean;
57
98
 
58
- constructor(props) {
99
+ constructor(props: VictoryContainerProps) {
59
100
  super(props);
60
101
  this.containerId =
61
102
  !isObject(props) || props.containerId === undefined
62
103
  ? uniqueId("victory-container-")
63
104
  : props.containerId;
64
- this.savePortalRef = (portal) => {
65
- this.portalRef = portal;
66
- return portal;
67
- };
68
- this.portalUpdate = (key, el) => this.portalRef.portalUpdate(key, el);
69
- this.portalRegister = () => this.portalRef.portalRegister();
70
- this.portalDeregister = (key) => this.portalRef.portalDeregister(key);
71
-
72
- this.saveContainerRef =
73
- props && isFunction(props.containerRef)
74
- ? props.containerRef
75
- : (container) => {
76
- this.containerRef = container;
77
- return container;
78
- };
79
-
80
- this.shouldHandleWheel = props && props.events && props.events.onWheel;
81
- if (this.shouldHandleWheel) {
82
- this.handleWheel = (e) => e.preventDefault();
83
- }
105
+
106
+ this.shouldHandleWheel = !!(props && props.events && props.events.onWheel);
84
107
  }
108
+ savePortalRef = (portal) => {
109
+ this.portalRef = portal;
110
+ return portal;
111
+ };
112
+ portalUpdate = (key, el) => this.portalRef.portalUpdate(key, el);
113
+ portalRegister = () => this.portalRef.portalRegister();
114
+ portalDeregister = (key) => this.portalRef.portalDeregister(key);
115
+
116
+ saveContainerRef = (container: HTMLElement) => {
117
+ if (isFunction(this.props.containerRef)) {
118
+ this.props.containerRef(container);
119
+ }
120
+ this.containerRef = container;
121
+ return container;
122
+ };
123
+
124
+ handleWheel = (e) => e.preventDefault();
85
125
 
86
126
  componentDidMount() {
87
127
  if (this.shouldHandleWheel && this.containerRef) {
@@ -111,7 +151,7 @@ export default class VictoryContainer extends React.Component {
111
151
  return {
112
152
  ...(ouiaId && { "data-ouia-component-id": ouiaId }),
113
153
  ...(ouiaType && { "data-ouia-component-type": ouiaType }),
114
- ...(ouiaSafe !== undefined && { "data-ouia-safe": ouiaSafe })
154
+ ...(ouiaSafe !== undefined && { "data-ouia-safe": ouiaSafe }),
115
155
  };
116
156
  }
117
157
 
@@ -124,19 +164,23 @@ export default class VictoryContainer extends React.Component {
124
164
  width,
125
165
  height,
126
166
  portalZIndex,
127
- responsive
167
+ responsive,
128
168
  } = props;
129
169
  const children = this.getChildren(props);
130
170
  const dimensions = responsive
131
171
  ? { width: "100%", height: "100%" }
132
172
  : { width, height };
133
173
  const divStyle = assign(
134
- { pointerEvents: "none", touchAction: "none", position: "relative" },
135
- dimensions
174
+ {
175
+ pointerEvents: "none",
176
+ touchAction: "none",
177
+ position: "relative",
178
+ } as const,
179
+ dimensions,
136
180
  );
137
181
  const portalDivStyle = assign(
138
- { zIndex: portalZIndex, position: "absolute", top: 0, left: 0 },
139
- dimensions
182
+ { zIndex: portalZIndex, position: "absolute", top: 0, left: 0 } as const,
183
+ dimensions,
140
184
  );
141
185
  const svgStyle = assign({ pointerEvents: "all" }, dimensions);
142
186
  const portalSvgStyle = assign({ overflow: "visible" }, dimensions);
@@ -145,14 +189,14 @@ export default class VictoryContainer extends React.Component {
145
189
  height,
146
190
  viewBox: svgProps.viewBox,
147
191
  preserveAspectRatio: svgProps.preserveAspectRatio,
148
- style: portalSvgStyle
192
+ style: portalSvgStyle,
149
193
  };
150
194
  return (
151
195
  <PortalContext.Provider
152
196
  value={{
153
197
  portalUpdate: this.portalUpdate,
154
198
  portalRegister: this.portalRegister,
155
- portalDeregister: this.portalDeregister
199
+ portalDeregister: this.portalDeregister,
156
200
  }}
157
201
  >
158
202
  <div
@@ -173,7 +217,7 @@ export default class VictoryContainer extends React.Component {
173
217
  <div style={portalDivStyle}>
174
218
  {React.cloneElement(portalComponent, {
175
219
  ...portalProps,
176
- ref: this.savePortalRef
220
+ ref: this.savePortalRef,
177
221
  })}
178
222
  </div>
179
223
  </div>
@@ -191,12 +235,12 @@ export default class VictoryContainer extends React.Component {
191
235
  desc,
192
236
  tabIndex,
193
237
  preserveAspectRatio,
194
- role
238
+ role,
195
239
  } = this.props;
196
240
 
197
241
  const style = responsive
198
242
  ? this.props.style
199
- : Helpers.omit(this.props.style, ["height", "width"]);
243
+ : Helpers.omit(this.props.style!, ["height", "width"]);
200
244
 
201
245
  const userProps = UserProps.getSafeUserProps(this.props);
202
246
 
@@ -209,7 +253,7 @@ export default class VictoryContainer extends React.Component {
209
253
  "aria-labelledby":
210
254
  [
211
255
  title && this.getIdForElement("title"),
212
- this.props["aria-labelledby"]
256
+ this.props["aria-labelledby"],
213
257
  ]
214
258
  .filter(Boolean)
215
259
  .join(" ") || undefined,
@@ -219,9 +263,9 @@ export default class VictoryContainer extends React.Component {
219
263
  .join(" ") || undefined,
220
264
  viewBox: responsive ? `0 0 ${width} ${height}` : undefined,
221
265
  preserveAspectRatio: responsive ? preserveAspectRatio : undefined,
222
- ...userProps
266
+ ...userProps,
223
267
  },
224
- events
268
+ events,
225
269
  );
226
270
  return this.renderContainer(this.props, svgProps, style);
227
271
  }