@wordpress/components 22.0.0 → 22.1.0

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 (356) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/build/angle-picker-control/index.js +3 -1
  3. package/build/angle-picker-control/index.js.map +1 -1
  4. package/build/autocomplete/index.js +7 -3
  5. package/build/autocomplete/index.js.map +1 -1
  6. package/build/border-box-control/border-box-control/component.js +1 -1
  7. package/build/border-box-control/border-box-control/component.js.map +1 -1
  8. package/build/border-box-control/border-box-control/hook.js +13 -1
  9. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  10. package/build/border-box-control/border-box-control-split-controls/hook.js +11 -1
  11. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  12. package/build/border-control/border-control/component.js +2 -2
  13. package/build/border-control/border-control/component.js.map +1 -1
  14. package/build/border-control/border-control/hook.js +11 -1
  15. package/build/border-control/border-control/hook.js.map +1 -1
  16. package/build/border-control/border-control-dropdown/component.js +1 -1
  17. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  18. package/build/border-control/border-control-dropdown/hook.js +10 -2
  19. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  20. package/build/color-palette/index.js +1 -1
  21. package/build/color-palette/index.js.map +1 -1
  22. package/build/color-picker/input-with-slider.js +17 -3
  23. package/build/color-picker/input-with-slider.js.map +1 -1
  24. package/build/custom-select-control/index.js +5 -2
  25. package/build/custom-select-control/index.js.map +1 -1
  26. package/build/dashicon/index.js +17 -2
  27. package/build/dashicon/index.js.map +1 -1
  28. package/build/draggable/index.js +58 -38
  29. package/build/draggable/index.js.map +1 -1
  30. package/build/draggable/types.js +6 -0
  31. package/build/draggable/types.js.map +1 -0
  32. package/build/flex/flex/hook.js +2 -3
  33. package/build/flex/flex/hook.js.map +1 -1
  34. package/build/focal-point-picker/focal-point.js +2 -12
  35. package/build/focal-point-picker/focal-point.js.map +1 -1
  36. package/build/focal-point-picker/styles/focal-point-style.js +11 -51
  37. package/build/focal-point-picker/styles/focal-point-style.js.map +1 -1
  38. package/build/font-size-picker/constants.js +41 -0
  39. package/build/font-size-picker/constants.js.map +1 -0
  40. package/build/font-size-picker/font-size-picker-select.js +97 -0
  41. package/build/font-size-picker/font-size-picker-select.js.map +1 -0
  42. package/build/font-size-picker/font-size-picker-toggle-group.js +50 -0
  43. package/build/font-size-picker/font-size-picker-toggle-group.js.map +1 -0
  44. package/build/font-size-picker/index.js +39 -76
  45. package/build/font-size-picker/index.js.map +1 -1
  46. package/build/font-size-picker/utils.js +17 -89
  47. package/build/font-size-picker/utils.js.map +1 -1
  48. package/build/form-token-field/index.js +9 -6
  49. package/build/form-token-field/index.js.map +1 -1
  50. package/build/higher-order/navigate-regions/index.js +3 -0
  51. package/build/higher-order/navigate-regions/index.js.map +1 -1
  52. package/build/icon/index.js +3 -2
  53. package/build/icon/index.js.map +1 -1
  54. package/build/index.js +8 -0
  55. package/build/index.js.map +1 -1
  56. package/build/menu-group/index.js +17 -3
  57. package/build/menu-group/index.js.map +1 -1
  58. package/build/menu-group/types.js +6 -0
  59. package/build/menu-group/types.js.map +1 -0
  60. package/build/navigator/navigator-screen/component.js +9 -5
  61. package/build/navigator/navigator-screen/component.js.map +1 -1
  62. package/build/palette-edit/index.js +3 -1
  63. package/build/palette-edit/index.js.map +1 -1
  64. package/build/popover/index.js +8 -4
  65. package/build/popover/index.js.map +1 -1
  66. package/build/range-control/styles/range-control-styles.js +47 -57
  67. package/build/range-control/styles/range-control-styles.js.map +1 -1
  68. package/build/spinner/styles.js +4 -4
  69. package/build/spinner/styles.js.map +1 -1
  70. package/build/tab-panel/index.js +3 -4
  71. package/build/tab-panel/index.js.map +1 -1
  72. package/build/toggle-group-control/toggle-group-control/component.js +1 -0
  73. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  74. package/build/toggle-group-control/toggle-group-control/styles.js +11 -6
  75. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  76. package/build/tools-panel/styles.js +14 -14
  77. package/build/tools-panel/styles.js.map +1 -1
  78. package/build/tools-panel/tools-panel-item/hook.js +9 -5
  79. package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
  80. package/build/utils/colors-values.js +3 -2
  81. package/build/utils/colors-values.js.map +1 -1
  82. package/build/utils/input/base.js +2 -2
  83. package/build/utils/input/base.js.map +1 -1
  84. package/build/view/index.js.map +1 -1
  85. package/build-module/angle-picker-control/index.js +2 -1
  86. package/build-module/angle-picker-control/index.js.map +1 -1
  87. package/build-module/autocomplete/index.js +7 -3
  88. package/build-module/autocomplete/index.js.map +1 -1
  89. package/build-module/border-box-control/border-box-control/component.js +1 -1
  90. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  91. package/build-module/border-box-control/border-box-control/hook.js +13 -1
  92. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  93. package/build-module/border-box-control/border-box-control-split-controls/hook.js +11 -1
  94. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  95. package/build-module/border-control/border-control/component.js +2 -2
  96. package/build-module/border-control/border-control/component.js.map +1 -1
  97. package/build-module/border-control/border-control/hook.js +11 -1
  98. package/build-module/border-control/border-control/hook.js.map +1 -1
  99. package/build-module/border-control/border-control-dropdown/component.js +1 -1
  100. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  101. package/build-module/border-control/border-control-dropdown/hook.js +10 -2
  102. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  103. package/build-module/color-palette/index.js +1 -1
  104. package/build-module/color-palette/index.js.map +1 -1
  105. package/build-module/color-picker/input-with-slider.js +17 -3
  106. package/build-module/color-picker/input-with-slider.js.map +1 -1
  107. package/build-module/custom-select-control/index.js +5 -2
  108. package/build-module/custom-select-control/index.js.map +1 -1
  109. package/build-module/dashicon/index.js +17 -2
  110. package/build-module/dashicon/index.js.map +1 -1
  111. package/build-module/draggable/index.js +59 -38
  112. package/build-module/draggable/index.js.map +1 -1
  113. package/build-module/draggable/types.js +2 -0
  114. package/build-module/draggable/types.js.map +1 -0
  115. package/build-module/flex/flex/hook.js +2 -3
  116. package/build-module/flex/flex/hook.js.map +1 -1
  117. package/build-module/focal-point-picker/focal-point.js +3 -13
  118. package/build-module/focal-point-picker/focal-point.js.map +1 -1
  119. package/build-module/focal-point-picker/styles/focal-point-style.js +6 -52
  120. package/build-module/focal-point-picker/styles/focal-point-style.js.map +1 -1
  121. package/build-module/font-size-picker/constants.js +31 -0
  122. package/build-module/font-size-picker/constants.js.map +1 -0
  123. package/build-module/font-size-picker/font-size-picker-select.js +83 -0
  124. package/build-module/font-size-picker/font-size-picker-select.js.map +1 -0
  125. package/build-module/font-size-picker/font-size-picker-toggle-group.js +40 -0
  126. package/build-module/font-size-picker/font-size-picker-toggle-group.js.map +1 -0
  127. package/build-module/font-size-picker/index.js +38 -76
  128. package/build-module/font-size-picker/index.js.map +1 -1
  129. package/build-module/font-size-picker/utils.js +15 -86
  130. package/build-module/font-size-picker/utils.js.map +1 -1
  131. package/build-module/form-token-field/index.js +9 -6
  132. package/build-module/form-token-field/index.js.map +1 -1
  133. package/build-module/higher-order/navigate-regions/index.js +3 -0
  134. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  135. package/build-module/icon/index.js +3 -2
  136. package/build-module/icon/index.js.map +1 -1
  137. package/build-module/index.js +1 -0
  138. package/build-module/index.js.map +1 -1
  139. package/build-module/menu-group/index.js +20 -2
  140. package/build-module/menu-group/index.js.map +1 -1
  141. package/build-module/menu-group/types.js +2 -0
  142. package/build-module/menu-group/types.js.map +1 -0
  143. package/build-module/navigator/navigator-screen/component.js +9 -5
  144. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  145. package/build-module/palette-edit/index.js +3 -1
  146. package/build-module/palette-edit/index.js.map +1 -1
  147. package/build-module/popover/index.js +8 -4
  148. package/build-module/popover/index.js.map +1 -1
  149. package/build-module/range-control/styles/range-control-styles.js +47 -57
  150. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  151. package/build-module/spinner/styles.js +4 -4
  152. package/build-module/spinner/styles.js.map +1 -1
  153. package/build-module/tab-panel/index.js +4 -5
  154. package/build-module/tab-panel/index.js.map +1 -1
  155. package/build-module/toggle-group-control/toggle-group-control/component.js +1 -0
  156. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  157. package/build-module/toggle-group-control/toggle-group-control/styles.js +12 -6
  158. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  159. package/build-module/tools-panel/styles.js +14 -14
  160. package/build-module/tools-panel/styles.js.map +1 -1
  161. package/build-module/tools-panel/tools-panel-item/hook.js +9 -5
  162. package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
  163. package/build-module/utils/colors-values.js +3 -2
  164. package/build-module/utils/colors-values.js.map +1 -1
  165. package/build-module/utils/input/base.js +2 -2
  166. package/build-module/utils/input/base.js.map +1 -1
  167. package/build-module/view/index.js.map +1 -1
  168. package/build-style/style-rtl.css +72 -44
  169. package/build-style/style.css +72 -44
  170. package/build-types/border-box-control/border-box-control/component.d.ts +4 -4
  171. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  172. package/build-types/border-box-control/border-box-control/hook.d.ts +6 -6
  173. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  174. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -2
  175. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -1
  176. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +3 -3
  177. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +5 -5
  178. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  179. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +3 -2
  180. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -1
  181. package/build-types/border-box-control/stories/index.d.ts +3 -3
  182. package/build-types/border-box-control/types.d.ts +5 -38
  183. package/build-types/border-box-control/types.d.ts.map +1 -1
  184. package/build-types/border-control/border-control/component.d.ts +4 -2
  185. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  186. package/build-types/border-control/border-control/hook.d.ts +5 -5
  187. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  188. package/build-types/border-control/border-control-dropdown/component.d.ts +3 -3
  189. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  190. package/build-types/border-control/border-control-dropdown/hook.d.ts +5 -5
  191. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  192. package/build-types/border-control/stories/index.d.ts +24 -12
  193. package/build-types/border-control/stories/index.d.ts.map +1 -1
  194. package/build-types/border-control/types.d.ts +10 -51
  195. package/build-types/border-control/types.d.ts.map +1 -1
  196. package/build-types/color-palette/index.d.ts +16 -2
  197. package/build-types/color-palette/index.d.ts.map +1 -1
  198. package/build-types/color-palette/stories/index.d.ts +31 -2
  199. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  200. package/build-types/color-palette/types.d.ts +14 -10
  201. package/build-types/color-palette/types.d.ts.map +1 -1
  202. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  203. package/build-types/custom-select-control/index.d.ts.map +1 -1
  204. package/build-types/dashicon/index.d.ts +6 -1
  205. package/build-types/dashicon/index.d.ts.map +1 -1
  206. package/build-types/date-time/types.d.ts +0 -16
  207. package/build-types/date-time/types.d.ts.map +1 -1
  208. package/build-types/draggable/index.d.ts +42 -66
  209. package/build-types/draggable/index.d.ts.map +1 -1
  210. package/build-types/draggable/stories/index.d.ts +12 -0
  211. package/build-types/draggable/stories/index.d.ts.map +1 -0
  212. package/build-types/draggable/types.d.ts +58 -0
  213. package/build-types/draggable/types.d.ts.map +1 -0
  214. package/build-types/flex/flex/hook.d.ts.map +1 -1
  215. package/build-types/focal-point-picker/focal-point.d.ts.map +1 -1
  216. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  217. package/build-types/focal-point-picker/styles/focal-point-style.d.ts +1 -12
  218. package/build-types/focal-point-picker/styles/focal-point-style.d.ts.map +1 -1
  219. package/build-types/font-size-picker/constants.d.ts +15 -0
  220. package/build-types/font-size-picker/constants.d.ts.map +1 -0
  221. package/build-types/font-size-picker/font-size-picker-select.d.ts +5 -0
  222. package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -0
  223. package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts +5 -0
  224. package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -0
  225. package/build-types/font-size-picker/index.d.ts.map +1 -1
  226. package/build-types/font-size-picker/types.d.ts +13 -13
  227. package/build-types/font-size-picker/types.d.ts.map +1 -1
  228. package/build-types/font-size-picker/utils.d.ts +6 -18
  229. package/build-types/font-size-picker/utils.d.ts.map +1 -1
  230. package/build-types/form-token-field/index.d.ts.map +1 -1
  231. package/build-types/icon/index.d.ts +1 -1
  232. package/build-types/icon/index.d.ts.map +1 -1
  233. package/build-types/menu-group/index.d.ts +21 -1
  234. package/build-types/menu-group/index.d.ts.map +1 -1
  235. package/build-types/menu-group/test/index.d.ts +2 -0
  236. package/build-types/menu-group/test/index.d.ts.map +1 -0
  237. package/build-types/menu-group/types.d.ts +23 -0
  238. package/build-types/menu-group/types.d.ts.map +1 -0
  239. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  240. package/build-types/popover/index.d.ts.map +1 -1
  241. package/build-types/tab-panel/index.d.ts.map +1 -1
  242. package/build-types/toggle-group-control/stories/index.d.ts.map +1 -1
  243. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -2
  244. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  245. package/build-types/toggle-group-control/types.d.ts +2 -1
  246. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  247. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  248. package/build-types/unit-control/index.d.ts +1 -1
  249. package/build-types/utils/colors-values.d.ts +1 -0
  250. package/build-types/utils/colors-values.d.ts.map +1 -1
  251. package/build-types/view/index.d.ts +1 -1
  252. package/build-types/view/index.d.ts.map +1 -1
  253. package/package.json +17 -17
  254. package/src/angle-picker-control/index.js +2 -1
  255. package/src/autocomplete/index.js +12 -3
  256. package/src/autocomplete/style.scss +1 -1
  257. package/src/base-field/test/__snapshots__/index.js.snap +9 -7
  258. package/src/base-field/test/index.js +27 -15
  259. package/src/border-box-control/border-box-control/README.md +5 -17
  260. package/src/border-box-control/border-box-control/component.tsx +1 -1
  261. package/src/border-box-control/border-box-control/hook.ts +18 -4
  262. package/src/border-box-control/border-box-control-split-controls/hook.ts +10 -0
  263. package/src/border-box-control/types.ts +32 -58
  264. package/src/border-control/border-control/README.md +4 -17
  265. package/src/border-control/border-control/component.tsx +2 -2
  266. package/src/border-control/border-control/hook.ts +10 -0
  267. package/src/border-control/border-control-dropdown/component.tsx +7 -6
  268. package/src/border-control/border-control-dropdown/hook.ts +9 -1
  269. package/src/border-control/types.ts +43 -80
  270. package/src/card/test/__snapshots__/index.tsx.snap +64 -368
  271. package/src/card/test/index.tsx +2 -2
  272. package/src/checkbox-control/style.scss +3 -3
  273. package/src/color-palette/README.md +12 -16
  274. package/src/color-palette/index.tsx +1 -1
  275. package/src/color-palette/style.scss +1 -1
  276. package/src/color-palette/types.ts +14 -10
  277. package/src/color-picker/input-with-slider.tsx +13 -2
  278. package/src/custom-select-control/index.js +7 -0
  279. package/src/custom-select-control/stories/index.js +1 -0
  280. package/src/custom-select-control/style.scss +6 -1
  281. package/src/custom-select-control/test/index.js +39 -0
  282. package/src/dashicon/index.js +21 -2
  283. package/src/date-time/date/test/index.tsx +2 -2
  284. package/src/date-time/types.ts +0 -19
  285. package/src/divider/test/index.tsx +4 -4
  286. package/src/draggable/README.md +13 -18
  287. package/src/draggable/{index.js → index.tsx} +71 -47
  288. package/src/draggable/stories/index.tsx +83 -0
  289. package/src/draggable/types.ts +58 -0
  290. package/src/drop-zone/style.scss +1 -1
  291. package/src/flex/flex/hook.ts +0 -3
  292. package/src/flex/test/index.tsx +29 -3
  293. package/src/focal-point-picker/focal-point.tsx +2 -24
  294. package/src/focal-point-picker/styles/focal-point-style.ts +8 -32
  295. package/src/font-size-picker/constants.ts +37 -0
  296. package/src/font-size-picker/font-size-picker-select.tsx +98 -0
  297. package/src/font-size-picker/font-size-picker-toggle-group.tsx +41 -0
  298. package/src/font-size-picker/index.tsx +55 -118
  299. package/src/font-size-picker/test/index.tsx +253 -44
  300. package/src/font-size-picker/test/utils.ts +58 -98
  301. package/src/font-size-picker/types.ts +25 -16
  302. package/src/font-size-picker/utils.ts +16 -102
  303. package/src/form-toggle/style.scss +3 -3
  304. package/src/form-token-field/index.tsx +13 -5
  305. package/src/form-token-field/style.scss +2 -2
  306. package/src/form-token-field/test/index.tsx +6 -6
  307. package/src/higher-order/navigate-regions/index.js +4 -0
  308. package/src/higher-order/navigate-regions/style.scss +72 -20
  309. package/src/higher-order/with-notices/test/index.js +1 -1
  310. package/src/icon/index.tsx +3 -2
  311. package/src/icon/test/index.js +10 -0
  312. package/src/index.js +1 -0
  313. package/src/item-group/stories/index.js +1 -1
  314. package/src/menu-group/{index.js → index.tsx} +22 -3
  315. package/src/menu-group/test/{index.js → index.tsx} +0 -0
  316. package/src/menu-group/types.ts +23 -0
  317. package/src/menu-item/style.scss +1 -1
  318. package/src/mobile/bottom-sheet/test/range-cell.native.js +4 -4
  319. package/src/mobile/html-text-input/test/index.native.js +2 -2
  320. package/src/mobile/link-settings/test/edit.native.js +29 -29
  321. package/src/mobile/link-settings/test/link-settings-navigation.native.js +5 -5
  322. package/src/navigator/navigator-screen/component.tsx +8 -3
  323. package/src/notice/README.md +2 -1
  324. package/src/notice/style.scss +1 -1
  325. package/src/palette-edit/index.js +3 -0
  326. package/src/panel/style.scss +1 -1
  327. package/src/popover/index.tsx +18 -7
  328. package/src/range-control/styles/range-control-styles.ts +2 -2
  329. package/src/resizable-box/style.scss +2 -2
  330. package/src/scrollable/test/index.tsx +7 -3
  331. package/src/search-control/style.scss +1 -1
  332. package/src/snackbar/style.scss +2 -2
  333. package/src/spacer/test/index.tsx +33 -3
  334. package/src/spinner/styles.ts +1 -1
  335. package/src/surface/test/index.tsx +12 -12
  336. package/src/tab-panel/index.tsx +9 -6
  337. package/src/tab-panel/style.scss +4 -5
  338. package/src/text/test/index.tsx +4 -4
  339. package/src/toggle-group-control/stories/index.tsx +2 -0
  340. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +6 -8
  341. package/src/toggle-group-control/test/index.tsx +29 -17
  342. package/src/toggle-group-control/toggle-group-control/README.md +8 -1
  343. package/src/toggle-group-control/toggle-group-control/component.tsx +1 -1
  344. package/src/toggle-group-control/toggle-group-control/styles.ts +22 -16
  345. package/src/toggle-group-control/types.ts +2 -1
  346. package/src/tools-panel/styles.ts +1 -1
  347. package/src/tools-panel/tools-panel-item/hook.ts +6 -1
  348. package/src/tree-grid/test/index.js +12 -12
  349. package/src/truncate/test/index.tsx +9 -9
  350. package/src/ui/form-group/test/index.js +16 -17
  351. package/src/utils/colors-values.js +4 -2
  352. package/src/utils/hooks/stories/use-cx.js +1 -1
  353. package/src/utils/input/base.js +2 -2
  354. package/src/view/{index.js → index.ts} +0 -0
  355. package/tsconfig.tsbuildinfo +1 -1
  356. package/src/draggable/stories/index.js +0 -72
@@ -67,7 +67,7 @@ describe( 'FontSizePicker', () => {
67
67
  }
68
68
  );
69
69
 
70
- describe( 'with > 5 font sizes', () => {
70
+ describe( 'with > 5 homogeneous font sizes', () => {
71
71
  const fontSizes = [
72
72
  {
73
73
  slug: 'tiny',
@@ -77,17 +77,17 @@ describe( 'FontSizePicker', () => {
77
77
  {
78
78
  slug: 'small',
79
79
  name: 'Small',
80
- size: '1em',
80
+ size: '12px',
81
81
  },
82
82
  {
83
83
  slug: 'medium',
84
84
  name: 'Medium',
85
- size: '2rem',
85
+ size: '16px',
86
86
  },
87
87
  {
88
88
  slug: 'large',
89
89
  name: 'Large',
90
- size: 'clamp(1.75rem, 3vw, 2.25rem)',
90
+ size: '20px',
91
91
  },
92
92
  {
93
93
  slug: 'x-large',
@@ -118,21 +118,18 @@ describe( 'FontSizePicker', () => {
118
118
  expect( options ).toHaveLength( 8 );
119
119
  expect( options[ 0 ] ).toHaveAccessibleName( 'Default' );
120
120
  expect( options[ 1 ] ).toHaveAccessibleName( 'Tiny 8' );
121
- expect( options[ 2 ] ).toHaveAccessibleName( 'Small 1' );
122
- expect( options[ 3 ] ).toHaveAccessibleName( 'Medium 2' );
123
- expect( options[ 4 ] ).toHaveAccessibleName( 'Large' );
121
+ expect( options[ 2 ] ).toHaveAccessibleName( 'Small 12' );
122
+ expect( options[ 3 ] ).toHaveAccessibleName( 'Medium 16' );
123
+ expect( options[ 4 ] ).toHaveAccessibleName( 'Large 20' );
124
124
  expect( options[ 5 ] ).toHaveAccessibleName( 'Extra Large 30' );
125
125
  expect( options[ 6 ] ).toHaveAccessibleName( 'xx-large 40' );
126
126
  expect( options[ 7 ] ).toHaveAccessibleName( 'Custom' );
127
127
  } );
128
128
 
129
129
  test.each( [
130
- { value: undefined, expectedLabel: 'Size' },
131
- { value: '8px', expectedLabel: 'Size (8px)' },
132
- { value: '1em', expectedLabel: 'Size (1em)' },
133
- { value: '2rem', expectedLabel: 'Size (2rem)' },
134
- { value: 'clamp(1.75rem, 3vw, 2.25rem)', expectedLabel: 'Size' },
135
- { value: '3px', expectedLabel: 'Size (Custom)' },
130
+ { value: undefined, expectedLabel: 'Size (px)' },
131
+ { value: '8px', expectedLabel: 'Size (px)' },
132
+ { value: '3px', expectedLabel: 'Size Custom' },
136
133
  ] )(
137
134
  'displays $expectedLabel as label when value is $value',
138
135
  ( { value, expectedLabel } ) => {
@@ -150,18 +147,19 @@ describe( 'FontSizePicker', () => {
150
147
  );
151
148
 
152
149
  test.each( [
153
- { option: 'Default', value: '8px', expectedValue: undefined },
154
- { option: 'Tiny 8', value: undefined, expectedValue: '8px' },
155
- { option: 'Small 1', value: '8px', expectedValue: '1em' },
156
- { option: 'Medium 2', value: '8px', expectedValue: '2rem' },
157
150
  {
158
- option: 'Large',
151
+ option: 'Default',
159
152
  value: '8px',
160
- expectedValue: 'clamp(1.75rem, 3vw, 2.25rem)',
153
+ expectedArguments: [ undefined ],
154
+ },
155
+ {
156
+ option: 'Tiny 8',
157
+ value: undefined,
158
+ expectedArguments: [ '8px', fontSizes[ 0 ] ],
161
159
  },
162
160
  ] )(
163
- 'calls onChange( $expectedValue ) when $option is selected',
164
- async ( { option, value, expectedValue } ) => {
161
+ 'calls onChange( $expectedArguments ) when $option is selected',
162
+ async ( { option, value, expectedArguments } ) => {
165
163
  const user = userEvent.setup( {
166
164
  advanceTimers: jest.advanceTimersByTime,
167
165
  } );
@@ -181,33 +179,172 @@ describe( 'FontSizePicker', () => {
181
179
  screen.getByRole( 'option', { name: option } )
182
180
  );
183
181
  expect( onChange ).toHaveBeenCalledTimes( 1 );
184
- expect( onChange ).toHaveBeenCalledWith( expectedValue );
182
+ expect( onChange ).toHaveBeenCalledWith( ...expectedArguments );
185
183
  }
186
184
  );
187
185
 
188
- it( 'shows custom input when Custom is selected', async () => {
186
+ commonSelectTests( fontSizes );
187
+ commonTests( fontSizes );
188
+ } );
189
+
190
+ describe( 'with > 5 heterogeneous font sizes', () => {
191
+ const fontSizes = [
192
+ {
193
+ slug: 'tiny',
194
+ name: 'Tiny',
195
+ size: '8px',
196
+ },
197
+ {
198
+ slug: 'small',
199
+ name: 'Small',
200
+ size: '1em',
201
+ },
202
+ {
203
+ slug: 'medium',
204
+ name: 'Medium',
205
+ size: '2rem',
206
+ },
207
+ {
208
+ slug: 'large',
209
+ name: 'Large',
210
+ size: 'clamp(1.75rem, 3vw, 2.25rem)',
211
+ },
212
+ {
213
+ slug: 'x-large',
214
+ name: 'Extra Large',
215
+ size: '30px',
216
+ },
217
+ {
218
+ slug: 'xx-large',
219
+ // no name
220
+ size: '40px',
221
+ },
222
+ ];
223
+
224
+ it( 'displays a select control', async () => {
189
225
  const user = userEvent.setup( {
190
226
  advanceTimers: jest.advanceTimersByTime,
191
227
  } );
192
- const onChange = jest.fn();
193
228
  render(
194
229
  <FontSizePicker
195
230
  __nextHasNoMarginBottom
196
231
  fontSizes={ fontSizes }
197
- onChange={ onChange }
198
232
  />
199
233
  );
200
234
  await user.click(
201
235
  screen.getByRole( 'button', { name: 'Font size' } )
202
236
  );
203
- await user.click(
204
- screen.getByRole( 'option', { name: 'Custom' } )
205
- );
206
- expect( screen.getByLabelText( 'Custom' ) ).toBeInTheDocument();
207
- // TODO: onChange() shouldn't be called.
208
- //expect( onChange ).not.toHaveBeenCalled();
237
+ const options = screen.getAllByRole( 'option' );
238
+ expect( options ).toHaveLength( 8 );
239
+ expect( options[ 0 ] ).toHaveAccessibleName( 'Default' );
240
+ expect( options[ 1 ] ).toHaveAccessibleName( 'Tiny 8px' );
241
+ expect( options[ 2 ] ).toHaveAccessibleName( 'Small 1em' );
242
+ expect( options[ 3 ] ).toHaveAccessibleName( 'Medium 2rem' );
243
+ expect( options[ 4 ] ).toHaveAccessibleName( 'Large' );
244
+ expect( options[ 5 ] ).toHaveAccessibleName( 'Extra Large 30px' );
245
+ expect( options[ 6 ] ).toHaveAccessibleName( 'xx-large 40px' );
246
+ expect( options[ 7 ] ).toHaveAccessibleName( 'Custom' );
209
247
  } );
210
248
 
249
+ test.each( [
250
+ { value: undefined, option: 'Default' },
251
+ { value: '', option: 'Default' },
252
+ { value: '8px', option: 'Tiny' },
253
+ ] )(
254
+ 'defaults to $option when value is $value',
255
+ ( { value, option } ) => {
256
+ render(
257
+ <FontSizePicker
258
+ __nextHasNoMarginBottom
259
+ fontSizes={ fontSizes }
260
+ value={ value }
261
+ />
262
+ );
263
+ expect(
264
+ screen.getByRole( 'button', { name: 'Font size' } )
265
+ ).toHaveTextContent( option );
266
+ }
267
+ );
268
+
269
+ test.each( [
270
+ { value: undefined, expectedLabel: 'Size' },
271
+ { value: '8px', expectedLabel: 'Size' },
272
+ { value: '1em', expectedLabel: 'Size' },
273
+ { value: '2rem', expectedLabel: 'Size' },
274
+ { value: 'clamp(1.75rem, 3vw, 2.25rem)', expectedLabel: 'Size' },
275
+ { value: '3px', expectedLabel: 'Size Custom' },
276
+ ] )(
277
+ 'displays $expectedLabel as label when value is $value',
278
+ ( { value, expectedLabel } ) => {
279
+ render(
280
+ <FontSizePicker
281
+ __nextHasNoMarginBottom
282
+ fontSizes={ fontSizes }
283
+ value={ value }
284
+ />
285
+ );
286
+ expect(
287
+ screen.getByLabelText( expectedLabel )
288
+ ).toBeInTheDocument();
289
+ }
290
+ );
291
+
292
+ test.each( [
293
+ {
294
+ option: 'Default',
295
+ value: '8px',
296
+ expectedArguments: [ undefined ],
297
+ },
298
+ {
299
+ option: 'Tiny 8px',
300
+ value: undefined,
301
+ expectedArguments: [ '8px', fontSizes[ 0 ] ],
302
+ },
303
+ {
304
+ option: 'Small 1em',
305
+ value: '8px',
306
+ expectedArguments: [ '1em', fontSizes[ 1 ] ],
307
+ },
308
+ {
309
+ option: 'Medium 2rem',
310
+ value: '8px',
311
+ expectedArguments: [ '2rem', fontSizes[ 2 ] ],
312
+ },
313
+ {
314
+ option: 'Large',
315
+ value: '8px',
316
+ expectedArguments: [
317
+ 'clamp(1.75rem, 3vw, 2.25rem)',
318
+ fontSizes[ 3 ],
319
+ ],
320
+ },
321
+ ] )(
322
+ 'calls onChange( $expectedValue ) when $option is selected',
323
+ async ( { option, value, expectedArguments } ) => {
324
+ const user = userEvent.setup( {
325
+ advanceTimers: jest.advanceTimersByTime,
326
+ } );
327
+ const onChange = jest.fn();
328
+ render(
329
+ <FontSizePicker
330
+ __nextHasNoMarginBottom
331
+ fontSizes={ fontSizes }
332
+ value={ value }
333
+ onChange={ onChange }
334
+ />
335
+ );
336
+ await user.click(
337
+ screen.getByRole( 'button', { name: 'Font size' } )
338
+ );
339
+ await user.click(
340
+ screen.getByRole( 'option', { name: option } )
341
+ );
342
+ expect( onChange ).toHaveBeenCalledTimes( 1 );
343
+ expect( onChange ).toHaveBeenCalledWith( ...expectedArguments );
344
+ }
345
+ );
346
+
347
+ commonSelectTests( fontSizes );
211
348
  commonTests( fontSizes );
212
349
  } );
213
350
 
@@ -250,7 +387,7 @@ describe( 'FontSizePicker', () => {
250
387
  const options = screen.getAllByRole( 'radio' );
251
388
  expect( options ).toHaveLength( 5 );
252
389
  expect( options[ 0 ] ).toHaveTextContent( 'S' );
253
- expect( options[ 0 ] ).toHaveAccessibleName( 'S' );
390
+ expect( options[ 0 ] ).toHaveAccessibleName( 'Small' );
254
391
  expect( options[ 1 ] ).toHaveTextContent( 'M' );
255
392
  expect( options[ 1 ] ).toHaveAccessibleName( 'Medium' );
256
393
  expect( options[ 2 ] ).toHaveTextContent( 'L' );
@@ -262,9 +399,9 @@ describe( 'FontSizePicker', () => {
262
399
  } );
263
400
 
264
401
  test.each( [
265
- { value: undefined, expectedLabel: 'Size Default' },
266
- { value: '12px', expectedLabel: 'Size small(px)' },
267
- { value: '40px', expectedLabel: 'Size Gigantosaurus(px)' },
402
+ { value: undefined, expectedLabel: 'Size' },
403
+ { value: '12px', expectedLabel: 'Size Small' },
404
+ { value: '40px', expectedLabel: 'Size Gigantosaurus' },
268
405
  ] )(
269
406
  'displays $expectedLabel as label when value is $value',
270
407
  ( { value, expectedLabel } ) => {
@@ -295,9 +432,10 @@ describe( 'FontSizePicker', () => {
295
432
  );
296
433
  await user.click( screen.getByRole( 'radio', { name: 'Medium' } ) );
297
434
  expect( onChange ).toHaveBeenCalledTimes( 1 );
298
- expect( onChange ).toHaveBeenCalledWith( '16px' );
435
+ expect( onChange ).toHaveBeenCalledWith( '16px', fontSizes[ 1 ] );
299
436
  } );
300
437
 
438
+ commonToggleGroupTests( fontSizes );
301
439
  commonTests( fontSizes );
302
440
  } );
303
441
 
@@ -345,7 +483,7 @@ describe( 'FontSizePicker', () => {
345
483
  } );
346
484
 
347
485
  test.each( [
348
- { value: undefined, expectedLabel: 'Size Default' },
486
+ { value: undefined, expectedLabel: 'Size' },
349
487
  { value: '12px', expectedLabel: 'Size Small' },
350
488
  { value: '1em', expectedLabel: 'Size Medium' },
351
489
  { value: '2rem', expectedLabel: 'Size Large' },
@@ -370,16 +508,19 @@ describe( 'FontSizePicker', () => {
370
508
  );
371
509
 
372
510
  test.each( [
373
- { radio: 'Small', expectedValue: '12px' },
374
- { radio: 'Medium', expectedValue: '1em' },
375
- { radio: 'Large', expectedValue: '2rem' },
511
+ { radio: 'Small', expectedArguments: [ '12px', fontSizes[ 0 ] ] },
512
+ { radio: 'Medium', expectedArguments: [ '1em', fontSizes[ 1 ] ] },
513
+ { radio: 'Large', expectedArguments: [ '2rem', fontSizes[ 2 ] ] },
376
514
  {
377
515
  radio: 'Extra Large',
378
- expectedValue: 'clamp(1.75rem, 3vw, 2.25rem)',
516
+ expectedArguments: [
517
+ 'clamp(1.75rem, 3vw, 2.25rem)',
518
+ fontSizes[ 3 ],
519
+ ],
379
520
  },
380
521
  ] )(
381
- 'calls onChange( $expectedValue ) when $radio is selected',
382
- async ( { radio, expectedValue } ) => {
522
+ 'calls onChange( $expectedArguments ) when $radio is selected',
523
+ async ( { radio, expectedArguments } ) => {
383
524
  const user = userEvent.setup( {
384
525
  advanceTimers: jest.advanceTimersByTime,
385
526
  } );
@@ -395,14 +536,82 @@ describe( 'FontSizePicker', () => {
395
536
  screen.getByRole( 'radio', { name: radio } )
396
537
  );
397
538
  expect( onChange ).toHaveBeenCalledTimes( 1 );
398
- expect( onChange ).toHaveBeenCalledWith( expectedValue );
539
+ expect( onChange ).toHaveBeenCalledWith( ...expectedArguments );
399
540
  }
400
541
  );
401
542
 
543
+ commonToggleGroupTests( fontSizes );
402
544
  commonTests( fontSizes );
403
545
  } );
404
546
 
547
+ function commonToggleGroupTests( fontSizes: FontSize[] ) {
548
+ it( 'defaults to M when value is 16px', () => {
549
+ render(
550
+ <FontSizePicker
551
+ __nextHasNoMarginBottom
552
+ fontSizes={ fontSizes }
553
+ value={ fontSizes[ 0 ].size }
554
+ />
555
+ );
556
+ expect(
557
+ screen.getByRole( 'radio', { checked: true } )
558
+ ).toHaveTextContent( 'S' );
559
+ } );
560
+
561
+ test.each( [ undefined, '' ] )(
562
+ 'has no selection when value is %p',
563
+ ( value ) => {
564
+ render(
565
+ <FontSizePicker
566
+ __nextHasNoMarginBottom
567
+ fontSizes={ fontSizes }
568
+ value={ value }
569
+ />
570
+ );
571
+ expect( screen.getByRole( 'radiogroup' ) ).toBeInTheDocument();
572
+ expect(
573
+ screen.queryByRole( 'radio', { checked: true } )
574
+ ).not.toBeInTheDocument();
575
+ }
576
+ );
577
+ }
578
+
579
+ function commonSelectTests( fontSizes: FontSize[] ) {
580
+ it( 'shows custom input when Custom is selected', async () => {
581
+ const user = userEvent.setup( {
582
+ advanceTimers: jest.advanceTimersByTime,
583
+ } );
584
+ const onChange = jest.fn();
585
+ render(
586
+ <FontSizePicker
587
+ __nextHasNoMarginBottom
588
+ fontSizes={ fontSizes }
589
+ onChange={ onChange }
590
+ />
591
+ );
592
+ await user.click(
593
+ screen.getByRole( 'button', { name: 'Font size' } )
594
+ );
595
+ await user.click(
596
+ screen.getByRole( 'option', { name: 'Custom' } )
597
+ );
598
+ expect( screen.getByLabelText( 'Custom' ) ).toBeInTheDocument();
599
+ expect( onChange ).not.toHaveBeenCalled();
600
+ } );
601
+ }
602
+
405
603
  function commonTests( fontSizes: FontSize[] ) {
604
+ it( 'shows custom input when value is unknown', () => {
605
+ render(
606
+ <FontSizePicker
607
+ __nextHasNoMarginBottom
608
+ fontSizes={ fontSizes }
609
+ value="3px"
610
+ />
611
+ );
612
+ expect( screen.getByLabelText( 'Custom' ) ).toBeInTheDocument();
613
+ } );
614
+
406
615
  it( 'allows custom values by default', async () => {
407
616
  const user = userEvent.setup( {
408
617
  advanceTimers: jest.advanceTimersByTime,
@@ -1,109 +1,69 @@
1
1
  /**
2
2
  * Internal dependencies
3
3
  */
4
- import { isSimpleCssValue, getToggleGroupOptions } from '../utils';
5
-
6
- const simpleCSSCases: [ number | string, boolean ][] = [
7
- // Test integers and non-integers.
8
- [ 1, true ],
9
- [ 1.25, true ],
10
- [ '123', true ],
11
- [ '1.5', true ],
12
- [ '0.75', true ],
13
- // CSS unit tests.
14
- [ '20px', true ],
15
- [ '0.8em', true ],
16
- [ '2rem', true ],
17
- [ '1.4vw', true ],
18
- [ '0.4vh', true ],
19
- // Invalid negative values,
20
- [ '-5px', false ],
21
- // Complex CSS values that should fail.
22
- [ 'abs(-10px)', false ],
23
- [ 'calc(10px + 1)', false ],
24
- [ 'clamp(2.5rem, 4vw, 3rem)', false ],
25
- [ 'max(4.5em, 3vh)', false ],
26
- [ 'min(10px, 1rem)', false ],
27
- [ 'minmax(30px, auto)', false ],
28
- [ 'var(--wp--font-size)', false ],
29
- ];
4
+ import { isSimpleCssValue, getCommonSizeUnit } from '../utils';
30
5
 
31
6
  describe( 'isSimpleCssValue', () => {
32
- test.each( simpleCSSCases )(
33
- 'given %p as argument, returns %p',
34
- ( cssValue, result ) => {
35
- expect( isSimpleCssValue( cssValue ) ).toBe( result );
36
- }
37
- );
7
+ test.each( [
8
+ // Test integers and non-integers.
9
+ [ 1, true ],
10
+ [ 1.25, true ],
11
+ [ '123', true ],
12
+ [ '1.5', true ],
13
+ [ '0.75', true ],
14
+ // CSS unit tests.
15
+ [ '20px', true ],
16
+ [ '0.8em', true ],
17
+ [ '2rem', true ],
18
+ [ '1.4vw', true ],
19
+ [ '0.4vh', true ],
20
+ // Invalid negative values,
21
+ [ '-5px', false ],
22
+ // Complex CSS values that should fail.
23
+ [ 'abs(-10px)', false ],
24
+ [ 'calc(10px + 1)', false ],
25
+ [ 'clamp(2.5rem, 4vw, 3rem)', false ],
26
+ [ 'max(4.5em, 3vh)', false ],
27
+ [ 'min(10px, 1rem)', false ],
28
+ [ 'minmax(30px, auto)', false ],
29
+ [ 'var(--wp--font-size)', false ],
30
+ ] )( 'given %p as argument, returns %p', ( cssValue, result ) => {
31
+ expect( isSimpleCssValue( cssValue ) ).toBe( result );
32
+ } );
38
33
  } );
39
34
 
40
- describe( 'getToggleGroupOptions', () => {
41
- test( 'should assign t-shirt sizes by default up until the aliases length', () => {
42
- const optionsArray = [
43
- {
44
- slug: '1',
45
- size: '1',
46
- name: '1',
47
- },
48
- {
49
- slug: '2',
50
- size: '2',
51
- name: '2',
52
- },
53
- {
54
- slug: '3',
55
- size: '3',
56
- name: '3',
57
- },
58
- {
59
- slug: '4',
60
- size: '4',
61
- name: '4',
62
- },
63
- {
64
- slug: '5',
65
- size: '5',
66
- },
67
- ];
35
+ describe( 'getCommonSizeUnit', () => {
36
+ it( 'returns null when fontSizes is empty', () => {
37
+ expect( getCommonSizeUnit( [] ) ).toBe( null );
38
+ } );
39
+
40
+ it( 'returns px when all sizes are px', () => {
41
+ expect(
42
+ getCommonSizeUnit( [
43
+ { slug: 'small', size: '10px' },
44
+ { slug: 'medium', size: '20px' },
45
+ { slug: 'large', size: '30px' },
46
+ ] )
47
+ ).toBe( 'px' );
48
+ } );
49
+
50
+ it( 'returns em when all sizes are em', () => {
51
+ expect(
52
+ getCommonSizeUnit( [
53
+ { slug: 'small', size: '1em' },
54
+ { slug: 'medium', size: '2em' },
55
+ { slug: 'large', size: '3em' },
56
+ ] )
57
+ ).toBe( 'em' );
58
+ } );
59
+
60
+ it( 'returns null when sizes are heterogeneous', () => {
68
61
  expect(
69
- getToggleGroupOptions( optionsArray, [
70
- 'S',
71
- 'M',
72
- 'L',
73
- 'XL',
74
- 'XXL',
62
+ getCommonSizeUnit( [
63
+ { slug: 'small', size: '10px' },
64
+ { slug: 'medium', size: '2em' },
65
+ { slug: 'large', size: '3rem' },
75
66
  ] )
76
- ).toEqual( [
77
- {
78
- key: '1',
79
- label: 'S',
80
- name: '1',
81
- value: '1',
82
- },
83
- {
84
- key: '2',
85
- label: 'M',
86
- name: '2',
87
- value: '2',
88
- },
89
- {
90
- key: '3',
91
- label: 'L',
92
- name: '3',
93
- value: '3',
94
- },
95
- {
96
- key: '4',
97
- label: 'XL',
98
- name: '4',
99
- value: '4',
100
- },
101
- {
102
- key: '5',
103
- label: 'XXL',
104
- name: 'XXL',
105
- value: '5',
106
- },
107
- ] );
67
+ ).toBe( null );
108
68
  } );
109
69
  } );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import type { ReactNode } from 'react';
5
-
6
1
  export type FontSizePickerProps = {
7
2
  /**
8
3
  * If `true`, it will not be possible to choose a custom fontSize. The user
@@ -27,7 +22,10 @@ export type FontSizePickerProps = {
27
22
  * attending to what reset means in that context, e.g., set the font size to
28
23
  * undefined or set the font size a starting value.
29
24
  */
30
- onChange?: ( value: number | string | undefined ) => void;
25
+ onChange?: (
26
+ value: number | string | undefined,
27
+ selectedItem?: FontSize
28
+ ) => void;
31
29
  /**
32
30
  * The current font size value.
33
31
  */
@@ -81,18 +79,29 @@ export type FontSize = {
81
79
  slug: string;
82
80
  };
83
81
 
84
- export type FontSizeOption = Omit< FontSize, 'size' > &
85
- Partial< Pick< FontSize, 'size' > >;
86
-
87
- export type FontSizeSelectOption = Pick< FontSizeOption, 'size' > & {
88
- key: string;
89
- name?: string;
90
- __experimentalHint: ReactNode;
82
+ export type FontSizePickerSelectProps = Pick<
83
+ FontSizePickerProps,
84
+ 'value' | 'size'
85
+ > & {
86
+ fontSizes: NonNullable< FontSizePickerProps[ 'fontSizes' ] >;
87
+ disableCustomFontSizes: NonNullable<
88
+ FontSizePickerProps[ 'disableCustomFontSizes' ]
89
+ >;
90
+ onChange: NonNullable< FontSizePickerProps[ 'onChange' ] >;
91
+ onSelectCustom: () => void;
91
92
  };
92
93
 
93
- export type FontSizeToggleGroupOption = {
94
+ export type FontSizePickerSelectOption = {
94
95
  key: string;
95
- value: number | string;
96
- label: string;
97
96
  name: string;
97
+ value?: FontSize[ 'size' ];
98
+ __experimentalHint?: string;
99
+ };
100
+
101
+ export type FontSizePickerToggleGroupProps = Pick<
102
+ FontSizePickerProps,
103
+ 'value' | 'size' | '__nextHasNoMarginBottom'
104
+ > & {
105
+ fontSizes: NonNullable< FontSizePickerProps[ 'fontSizes' ] >;
106
+ onChange: NonNullable< FontSizePickerProps[ 'onChange' ] >;
98
107
  };