@wordpress/components 23.2.0 → 23.3.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 (377) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/CONTRIBUTING.md +1 -1
  3. package/build/alignment-matrix-control/utils.js +2 -2
  4. package/build/alignment-matrix-control/utils.js.map +1 -1
  5. package/build/autocomplete/autocompleter-ui.js +1 -3
  6. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  7. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  8. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  9. package/build/border-control/border-control-dropdown/component.js +8 -4
  10. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  11. package/build/button/deprecated.js +8 -6
  12. package/build/button/deprecated.js.map +1 -1
  13. package/build/button/index.js +52 -23
  14. package/build/button/index.js.map +1 -1
  15. package/build/button/types.js +6 -0
  16. package/build/button/types.js.map +1 -0
  17. package/build/color-list-picker/index.js.map +1 -1
  18. package/build/color-list-picker/types.js +6 -0
  19. package/build/color-list-picker/types.js.map +1 -0
  20. package/build/color-palette/index.js +9 -61
  21. package/build/color-palette/index.js.map +1 -1
  22. package/build/color-palette/index.native.js +24 -9
  23. package/build/color-palette/index.native.js.map +1 -1
  24. package/build/color-palette/utils.js +103 -0
  25. package/build/color-palette/utils.js.map +1 -0
  26. package/build/custom-gradient-picker/gradient-bar/utils.js +1 -1
  27. package/build/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  28. package/build/date-time/date/index.js.map +1 -1
  29. package/build/dropdown/index.js +20 -8
  30. package/build/dropdown/index.js.map +1 -1
  31. package/build/form-token-field/token.js +1 -1
  32. package/build/form-token-field/token.js.map +1 -1
  33. package/build/gradient-picker/index.js +9 -1
  34. package/build/gradient-picker/index.js.map +1 -1
  35. package/build/h-stack/component.js +0 -1
  36. package/build/h-stack/component.js.map +1 -1
  37. package/build/input-control/input-field.js +4 -2
  38. package/build/input-control/input-field.js.map +1 -1
  39. package/build/keyboard-shortcuts/index.js +44 -16
  40. package/build/keyboard-shortcuts/index.js.map +1 -1
  41. package/build/keyboard-shortcuts/types.js +6 -0
  42. package/build/keyboard-shortcuts/types.js.map +1 -0
  43. package/build/modal/index.js +1 -1
  44. package/build/modal/index.js.map +1 -1
  45. package/build/notice/index.js +16 -18
  46. package/build/notice/index.js.map +1 -1
  47. package/build/notice/list.js +23 -8
  48. package/build/notice/list.js.map +1 -1
  49. package/build/notice/types.js +6 -0
  50. package/build/notice/types.js.map +1 -0
  51. package/build/number-control/index.js +1 -1
  52. package/build/number-control/index.js.map +1 -1
  53. package/build/query-controls/author-select.js +7 -3
  54. package/build/query-controls/author-select.js.map +1 -1
  55. package/build/query-controls/category-select.js +7 -3
  56. package/build/query-controls/category-select.js.map +1 -1
  57. package/build/query-controls/index.js +68 -20
  58. package/build/query-controls/index.js.map +1 -1
  59. package/build/query-controls/terms.js +4 -3
  60. package/build/query-controls/terms.js.map +1 -1
  61. package/build/query-controls/types.js +6 -0
  62. package/build/query-controls/types.js.map +1 -0
  63. package/build/slot-fill/bubbles-virtually/fill.js +1 -0
  64. package/build/slot-fill/bubbles-virtually/fill.js.map +1 -1
  65. package/build/slot-fill/slot.js +1 -0
  66. package/build/slot-fill/slot.js.map +1 -1
  67. package/build/slot-fill/use-slot.js +1 -11
  68. package/build/slot-fill/use-slot.js.map +1 -1
  69. package/build/snackbar/index.js.map +1 -1
  70. package/build/snackbar/list.js.map +1 -1
  71. package/build/tab-panel/index.js +36 -8
  72. package/build/tab-panel/index.js.map +1 -1
  73. package/build/tree-grid/index.js +1 -1
  74. package/build/tree-grid/index.js.map +1 -1
  75. package/build/tree-select/index.js +2 -6
  76. package/build/tree-select/index.js.map +1 -1
  77. package/build-module/alignment-matrix-control/utils.js +2 -2
  78. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  79. package/build-module/autocomplete/autocompleter-ui.js +1 -2
  80. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  81. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  82. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  83. package/build-module/border-control/border-control-dropdown/component.js +7 -4
  84. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  85. package/build-module/button/deprecated.js +8 -5
  86. package/build-module/button/deprecated.js.map +1 -1
  87. package/build-module/button/index.js +51 -22
  88. package/build-module/button/index.js.map +1 -1
  89. package/build-module/button/types.js +2 -0
  90. package/build-module/button/types.js.map +1 -0
  91. package/build-module/color-list-picker/index.js.map +1 -1
  92. package/build-module/color-list-picker/types.js +2 -0
  93. package/build-module/color-list-picker/types.js.map +1 -0
  94. package/build-module/color-palette/index.js +7 -54
  95. package/build-module/color-palette/index.js.map +1 -1
  96. package/build-module/color-palette/index.native.js +24 -8
  97. package/build-module/color-palette/index.native.js.map +1 -1
  98. package/build-module/color-palette/utils.js +79 -0
  99. package/build-module/color-palette/utils.js.map +1 -0
  100. package/build-module/custom-gradient-picker/gradient-bar/utils.js +1 -1
  101. package/build-module/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  102. package/build-module/date-time/date/index.js +1 -1
  103. package/build-module/date-time/date/index.js.map +1 -1
  104. package/build-module/dropdown/index.js +19 -8
  105. package/build-module/dropdown/index.js.map +1 -1
  106. package/build-module/form-token-field/token.js +1 -1
  107. package/build-module/form-token-field/token.js.map +1 -1
  108. package/build-module/gradient-picker/index.js +9 -2
  109. package/build-module/gradient-picker/index.js.map +1 -1
  110. package/build-module/h-stack/component.js +0 -1
  111. package/build-module/h-stack/component.js.map +1 -1
  112. package/build-module/input-control/input-field.js +4 -2
  113. package/build-module/input-control/input-field.js.map +1 -1
  114. package/build-module/keyboard-shortcuts/index.js +48 -16
  115. package/build-module/keyboard-shortcuts/index.js.map +1 -1
  116. package/build-module/keyboard-shortcuts/types.js +2 -0
  117. package/build-module/keyboard-shortcuts/types.js.map +1 -0
  118. package/build-module/modal/index.js +1 -1
  119. package/build-module/modal/index.js.map +1 -1
  120. package/build-module/notice/index.js +14 -15
  121. package/build-module/notice/index.js.map +1 -1
  122. package/build-module/notice/list.js +23 -8
  123. package/build-module/notice/list.js.map +1 -1
  124. package/build-module/notice/types.js +2 -0
  125. package/build-module/notice/types.js.map +1 -0
  126. package/build-module/number-control/index.js +1 -1
  127. package/build-module/number-control/index.js.map +1 -1
  128. package/build-module/query-controls/author-select.js +7 -3
  129. package/build-module/query-controls/author-select.js.map +1 -1
  130. package/build-module/query-controls/category-select.js +8 -4
  131. package/build-module/query-controls/category-select.js.map +1 -1
  132. package/build-module/query-controls/index.js +64 -20
  133. package/build-module/query-controls/index.js.map +1 -1
  134. package/build-module/query-controls/terms.js +8 -4
  135. package/build-module/query-controls/terms.js.map +1 -1
  136. package/build-module/query-controls/types.js +2 -0
  137. package/build-module/query-controls/types.js.map +1 -0
  138. package/build-module/slot-fill/bubbles-virtually/fill.js +1 -0
  139. package/build-module/slot-fill/bubbles-virtually/fill.js.map +1 -1
  140. package/build-module/slot-fill/slot.js +1 -0
  141. package/build-module/slot-fill/slot.js.map +1 -1
  142. package/build-module/slot-fill/use-slot.js +2 -12
  143. package/build-module/slot-fill/use-slot.js.map +1 -1
  144. package/build-module/snackbar/index.js.map +1 -1
  145. package/build-module/snackbar/list.js.map +1 -1
  146. package/build-module/tab-panel/index.js +36 -8
  147. package/build-module/tab-panel/index.js.map +1 -1
  148. package/build-module/tree-grid/index.js +1 -1
  149. package/build-module/tree-grid/index.js.map +1 -1
  150. package/build-module/tree-select/index.js +2 -6
  151. package/build-module/tree-select/index.js.map +1 -1
  152. package/build-style/style-rtl.css +5 -0
  153. package/build-style/style.css +5 -0
  154. package/build-types/border-box-control/border-box-control/hook.d.ts +1 -1
  155. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +1 -1
  156. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +171 -160
  157. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
  158. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -1
  159. package/build-types/border-control/border-control/hook.d.ts +1 -1
  160. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  161. package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -1
  162. package/build-types/button/deprecated.d.ts +143 -7
  163. package/build-types/button/deprecated.d.ts.map +1 -1
  164. package/build-types/button/index.d.ts +20 -3
  165. package/build-types/button/index.d.ts.map +1 -1
  166. package/build-types/button/stories/index.d.ts +20 -0
  167. package/build-types/button/stories/index.d.ts.map +1 -0
  168. package/build-types/button/test/index.d.ts +2 -0
  169. package/build-types/button/test/index.d.ts.map +1 -0
  170. package/build-types/button/types.d.ts +134 -0
  171. package/build-types/button/types.d.ts.map +1 -0
  172. package/build-types/color-list-picker/index.d.ts +5 -0
  173. package/build-types/color-list-picker/index.d.ts.map +1 -0
  174. package/build-types/color-list-picker/types.d.ts +42 -0
  175. package/build-types/color-list-picker/types.d.ts.map +1 -0
  176. package/build-types/color-palette/index.d.ts +2 -4
  177. package/build-types/color-palette/index.d.ts.map +1 -1
  178. package/build-types/color-palette/stories/index.d.ts +2 -2
  179. package/build-types/color-palette/styles.d.ts +1 -1
  180. package/build-types/color-palette/types.d.ts +1 -1
  181. package/build-types/color-palette/types.d.ts.map +1 -1
  182. package/build-types/color-palette/utils.d.ts +14 -0
  183. package/build-types/color-palette/utils.d.ts.map +1 -0
  184. package/build-types/color-picker/styles.d.ts +2 -2
  185. package/build-types/date-time/date/index.d.ts.map +1 -1
  186. package/build-types/date-time/date/styles.d.ts +3 -3
  187. package/build-types/dropdown/index.d.ts +4 -4
  188. package/build-types/dropdown/index.d.ts.map +1 -1
  189. package/build-types/dropdown/stories/index.d.ts.map +1 -1
  190. package/build-types/dropdown/types.d.ts +9 -10
  191. package/build-types/dropdown/types.d.ts.map +1 -1
  192. package/build-types/font-size-picker/styles.d.ts +2 -2
  193. package/build-types/h-stack/component.d.ts +0 -1
  194. package/build-types/h-stack/component.d.ts.map +1 -1
  195. package/build-types/input-control/input-field.d.ts.map +1 -1
  196. package/build-types/keyboard-shortcuts/index.d.ts +38 -0
  197. package/build-types/keyboard-shortcuts/index.d.ts.map +1 -0
  198. package/build-types/keyboard-shortcuts/stories/index.d.ts +12 -0
  199. package/build-types/keyboard-shortcuts/stories/index.d.ts.map +1 -0
  200. package/build-types/keyboard-shortcuts/test/index.d.ts +2 -0
  201. package/build-types/keyboard-shortcuts/test/index.d.ts.map +1 -0
  202. package/build-types/keyboard-shortcuts/types.d.ts +48 -0
  203. package/build-types/keyboard-shortcuts/types.d.ts.map +1 -0
  204. package/build-types/modal/index.d.ts.map +1 -1
  205. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  206. package/build-types/navigator/navigator-back-button/hook.d.ts +2 -2
  207. package/build-types/navigator/navigator-button/component.d.ts +1 -1
  208. package/build-types/navigator/navigator-button/hook.d.ts +2 -2
  209. package/build-types/notice/index.d.ts +16 -0
  210. package/build-types/notice/index.d.ts.map +1 -0
  211. package/build-types/notice/list.d.ts +32 -0
  212. package/build-types/notice/list.d.ts.map +1 -0
  213. package/build-types/notice/stories/index.d.ts +17 -0
  214. package/build-types/notice/stories/index.d.ts.map +1 -0
  215. package/build-types/notice/test/index.d.ts +2 -0
  216. package/build-types/notice/test/index.d.ts.map +1 -0
  217. package/build-types/notice/test/list.d.ts +2 -0
  218. package/build-types/notice/test/list.d.ts.map +1 -0
  219. package/build-types/notice/types.d.ts +128 -0
  220. package/build-types/notice/types.d.ts.map +1 -0
  221. package/build-types/number-control/styles/number-control-styles.d.ts +2 -2
  222. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  223. package/build-types/placeholder/stories/index.d.ts.map +1 -1
  224. package/build-types/query-controls/author-select.d.ts +4 -0
  225. package/build-types/query-controls/author-select.d.ts.map +1 -0
  226. package/build-types/query-controls/category-select.d.ts +4 -0
  227. package/build-types/query-controls/category-select.d.ts.map +1 -0
  228. package/build-types/query-controls/index.d.ts +30 -0
  229. package/build-types/query-controls/index.d.ts.map +1 -0
  230. package/build-types/query-controls/stories/index.d.ts +13 -0
  231. package/build-types/query-controls/stories/index.d.ts.map +1 -0
  232. package/build-types/query-controls/terms.d.ts +13 -0
  233. package/build-types/query-controls/terms.d.ts.map +1 -0
  234. package/build-types/query-controls/test/terms.d.ts +2 -0
  235. package/build-types/query-controls/test/terms.d.ts.map +1 -0
  236. package/build-types/query-controls/types.d.ts +131 -0
  237. package/build-types/query-controls/types.d.ts.map +1 -0
  238. package/build-types/range-control/index.d.ts +1 -1
  239. package/build-types/slot-fill/bubbles-virtually/fill.d.ts.map +1 -1
  240. package/build-types/slot-fill/use-slot.d.ts.map +1 -1
  241. package/build-types/snackbar/index.d.ts +9 -2
  242. package/build-types/snackbar/index.d.ts.map +1 -1
  243. package/build-types/snackbar/list.d.ts.map +1 -1
  244. package/build-types/snackbar/types.d.ts +15 -88
  245. package/build-types/snackbar/types.d.ts.map +1 -1
  246. package/build-types/tab-panel/index.d.ts.map +1 -1
  247. package/build-types/tab-panel/types.d.ts +1 -1
  248. package/build-types/tab-panel/types.d.ts.map +1 -1
  249. package/build-types/toggle-group-control/stories/index.d.ts.map +1 -1
  250. package/build-types/tree-select/index.d.ts.map +1 -1
  251. package/build-types/ui/form-group/form-group.d.ts +2 -2
  252. package/package.json +18 -17
  253. package/src/alignment-matrix-control/utils.tsx +2 -2
  254. package/src/autocomplete/autocompleter-ui.js +1 -2
  255. package/src/autocomplete/test/index.js +1 -5
  256. package/src/border-box-control/border-box-control-linked-button/component.tsx +1 -1
  257. package/src/border-box-control/border-box-control-linked-button/hook.ts +1 -1
  258. package/src/border-control/border-control-dropdown/component.tsx +9 -8
  259. package/src/box-control/test/index.js +11 -35
  260. package/src/button/README.md +49 -55
  261. package/src/button/{deprecated.js → deprecated.tsx} +19 -4
  262. package/src/button/{index.js → index.tsx} +95 -34
  263. package/src/button/stories/index.tsx +106 -0
  264. package/src/button/style.scss +3 -2
  265. package/src/button/test/{index.js → index.tsx} +30 -7
  266. package/src/button/types.ts +138 -0
  267. package/src/checkbox-control/test/index.tsx +1 -5
  268. package/src/color-list-picker/{index.js → index.tsx} +3 -2
  269. package/src/color-list-picker/types.ts +46 -0
  270. package/src/color-palette/README.md +1 -1
  271. package/src/color-palette/index.native.js +11 -4
  272. package/src/color-palette/index.tsx +11 -67
  273. package/src/color-palette/test/index.tsx +4 -14
  274. package/src/color-palette/test/utils.ts +1 -1
  275. package/src/color-palette/types.ts +1 -1
  276. package/src/color-palette/utils.ts +98 -0
  277. package/src/color-picker/test/index.js +6 -15
  278. package/src/combobox-control/test/index.js +1 -6
  279. package/src/confirm-dialog/test/index.js +9 -29
  280. package/src/custom-gradient-picker/gradient-bar/utils.js +1 -1
  281. package/src/date-time/date/index.tsx +2 -1
  282. package/src/date-time/date/test/index.tsx +2 -8
  283. package/src/date-time/time/test/index.tsx +9 -29
  284. package/src/dimension-control/test/index.test.js +2 -8
  285. package/src/disabled/test/index.tsx +1 -5
  286. package/src/draggable/test/index.native.js +4 -4
  287. package/src/dropdown/README.md +1 -8
  288. package/src/dropdown/index.tsx +17 -6
  289. package/src/dropdown/stories/index.tsx +3 -3
  290. package/src/dropdown/test/index.tsx +2 -8
  291. package/src/dropdown/types.ts +9 -10
  292. package/src/dropdown-menu/README.md +1 -1
  293. package/src/dropdown-menu/stories/index.js +96 -27
  294. package/src/dropdown-menu/test/index.js +2 -8
  295. package/src/external-link/test/index.tsx +1 -6
  296. package/src/focal-point-picker/test/index.js +3 -11
  297. package/src/font-size-picker/test/index.tsx +14 -44
  298. package/src/form-file-upload/test/index.tsx +2 -17
  299. package/src/form-toggle/test/index.tsx +1 -5
  300. package/src/form-token-field/test/index.tsx +80 -163
  301. package/src/form-token-field/token.tsx +1 -1
  302. package/src/gradient-picker/index.js +15 -4
  303. package/src/guide/test/index.js +5 -17
  304. package/src/h-stack/component.tsx +0 -1
  305. package/src/higher-order/with-filters/test/index.js +24 -24
  306. package/src/higher-order/with-focus-outside/test/index.js +11 -25
  307. package/src/higher-order/with-focus-return/test/index.js +1 -5
  308. package/src/input-control/input-field.tsx +3 -1
  309. package/src/input-control/test/index.js +1 -6
  310. package/src/isolated-event-container/test/index.js +2 -8
  311. package/src/keyboard-shortcuts/README.md +1 -1
  312. package/src/keyboard-shortcuts/index.tsx +93 -0
  313. package/src/keyboard-shortcuts/stories/index.tsx +60 -0
  314. package/src/keyboard-shortcuts/test/{index.js → index.tsx} +16 -6
  315. package/src/keyboard-shortcuts/types.ts +51 -0
  316. package/src/modal/index.tsx +1 -2
  317. package/src/navigable-container/test/navigable-menu.js +5 -17
  318. package/src/navigable-container/test/tababble-container.js +3 -11
  319. package/src/navigation/test/index.js +3 -11
  320. package/src/navigator/test/index.tsx +6 -20
  321. package/src/notice/README.md +89 -42
  322. package/src/notice/{index.js → index.tsx} +28 -20
  323. package/src/notice/list.tsx +72 -0
  324. package/src/notice/stories/index.tsx +119 -0
  325. package/src/notice/test/__snapshots__/{index.js.snap → index.tsx.snap} +0 -0
  326. package/src/notice/test/{index.js → index.tsx} +7 -4
  327. package/src/notice/test/{list.js → list.tsx} +0 -0
  328. package/src/notice/types.ts +136 -0
  329. package/src/number-control/index.tsx +1 -1
  330. package/src/number-control/test/index.tsx +28 -86
  331. package/src/panel/test/body.js +2 -8
  332. package/src/placeholder/stories/index.tsx +1 -0
  333. package/src/query-controls/README.md +56 -56
  334. package/src/query-controls/author-select.tsx +37 -0
  335. package/src/query-controls/category-select.tsx +46 -0
  336. package/src/query-controls/index.tsx +192 -0
  337. package/src/query-controls/stories/index.tsx +205 -0
  338. package/src/query-controls/terms.ts +57 -0
  339. package/src/query-controls/test/{terms.js → terms.ts} +36 -20
  340. package/src/query-controls/types.ts +150 -0
  341. package/src/select-control/test/select-control.tsx +1 -6
  342. package/src/slot-fill/bubbles-virtually/fill.js +1 -0
  343. package/src/slot-fill/slot.js +1 -1
  344. package/src/slot-fill/use-slot.js +6 -16
  345. package/src/snackbar/index.tsx +6 -5
  346. package/src/snackbar/list.tsx +4 -2
  347. package/src/snackbar/types.ts +18 -92
  348. package/src/tab-panel/index.tsx +38 -16
  349. package/src/tab-panel/style.scss +8 -0
  350. package/src/tab-panel/test/index.tsx +35 -7
  351. package/src/tab-panel/types.ts +1 -1
  352. package/src/theme/test/index.tsx +4 -4
  353. package/src/toggle-group-control/stories/index.tsx +1 -0
  354. package/src/toggle-group-control/test/index.tsx +7 -23
  355. package/src/toolbar/stories/index.js +75 -72
  356. package/src/tools-panel/stories/index.js +3 -0
  357. package/src/tools-panel/test/index.js +1 -1
  358. package/src/tree-grid/index.js +1 -1
  359. package/src/tree-select/index.tsx +3 -6
  360. package/src/ui/context/test/context-connect.tsx +2 -0
  361. package/src/ui/context/test/wordpress-component.tsx +2 -0
  362. package/src/unit-control/test/index.tsx +21 -74
  363. package/src/utils/hooks/test/use-latest-ref.js +15 -18
  364. package/tsconfig.json +1 -4
  365. package/tsconfig.tsbuildinfo +1 -1
  366. package/build-types/radio-context/index.d.ts +0 -6
  367. package/build-types/radio-context/index.d.ts.map +0 -1
  368. package/src/button/stories/index.js +0 -179
  369. package/src/keyboard-shortcuts/index.js +0 -56
  370. package/src/notice/list.js +0 -48
  371. package/src/notice/stories/index.js +0 -46
  372. package/src/query-controls/author-select.js +0 -23
  373. package/src/query-controls/category-select.js +0 -31
  374. package/src/query-controls/index.js +0 -122
  375. package/src/query-controls/terms.js +0 -40
  376. package/src/toolbar/stories/toolbar-button.js +0 -32
  377. package/src/toolbar/stories/toolbar-group.js +0 -33
@@ -1,15 +1,13 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, fireEvent } from '@testing-library/react';
4
+ import { render, fireEvent, waitFor } from '@testing-library/react';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
9
  import { ColorPicker } from '..';
10
10
 
11
- jest.useFakeTimers();
12
-
13
11
  /**
14
12
  * Ordinarily we'd try to select the compnoent by role but the silder role appears
15
13
  * on several elements and we'd end up encoding assumptions about order when
@@ -43,12 +41,6 @@ function moveReactColorfulSlider( sliderElement, from, to ) {
43
41
  fireEvent( sliderElement, new FakeMouseEvent( 'mousemove', to ) );
44
42
  }
45
43
 
46
- const sleep = ( ms ) => {
47
- const promise = new Promise( ( resolve ) => setTimeout( resolve, ms ) );
48
- jest.advanceTimersByTime( ms + 1 );
49
- return promise;
50
- };
51
-
52
44
  const hslaMatcher = expect.objectContaining( {
53
45
  h: expect.any( Number ),
54
46
  s: expect.any( Number ),
@@ -95,8 +87,9 @@ describe( 'ColorPicker', () => {
95
87
  { pageX: 10, pageY: 10 }
96
88
  );
97
89
 
98
- // `onChange` is debounced so we need to sleep for at least 1ms before checking that onChange was called
99
- await sleep( 1 );
90
+ await waitFor( () =>
91
+ expect( onChangeComplete ).toHaveBeenCalled()
92
+ );
100
93
 
101
94
  expect( onChangeComplete ).toHaveBeenCalledWith(
102
95
  legacyColorMatcher
@@ -119,8 +112,7 @@ describe( 'ColorPicker', () => {
119
112
  { pageX: 10, pageY: 10 }
120
113
  );
121
114
 
122
- // `onChange` is debounced so we need to sleep for at least 1ms before checking that onChange was called
123
- await sleep( 1 );
115
+ await waitFor( () => expect( onChange ).toHaveBeenCalled() );
124
116
 
125
117
  expect( onChange ).toHaveBeenCalledWith(
126
118
  expect.stringMatching( /^#([a-fA-F0-9]{8})$/ )
@@ -152,8 +144,7 @@ describe( 'ColorPicker', () => {
152
144
  { pageX: 10, pageY: 10 }
153
145
  );
154
146
 
155
- // `onChange` is debounced so we need to sleep for at least 1ms before checking that onChange was called
156
- await sleep( 1 );
147
+ await waitFor( () => expect( onChange ).toHaveBeenCalled() );
157
148
 
158
149
  expect( onChange ).toHaveBeenCalledWith(
159
150
  expect.stringMatching( /^#([a-fA-F0-9]{6})$/ )
@@ -14,8 +14,6 @@ import { useState } from '@wordpress/element';
14
14
  */
15
15
  import ComboboxControl from '../';
16
16
 
17
- jest.useFakeTimers();
18
-
19
17
  const timezones = [
20
18
  { label: 'Greenwich Mean Time', value: 'GMT' },
21
19
  { label: 'Universal Coordinated Time', value: 'UTC' },
@@ -56,10 +54,7 @@ const getInput = ( name ) => screen.getByRole( 'combobox', { name } );
56
54
  const getOption = ( name ) => screen.getByRole( 'option', { name } );
57
55
  const getAllOptions = () => screen.getAllByRole( 'option' );
58
56
  const getOptionSearchString = ( option ) => option.label.substring( 0, 11 );
59
- const setupUser = () =>
60
- userEvent.setup( {
61
- advanceTimers: jest.advanceTimersByTime,
62
- } );
57
+ const setupUser = () => userEvent.setup();
63
58
 
64
59
  const ControlledComboboxControl = ( {
65
60
  value: valueProp,
@@ -15,8 +15,6 @@ import userEvent from '@testing-library/user-event';
15
15
  */
16
16
  import { ConfirmDialog } from '..';
17
17
 
18
- jest.useFakeTimers();
19
-
20
18
  const noop = () => {};
21
19
 
22
20
  describe( 'Confirm', () => {
@@ -82,9 +80,7 @@ describe( 'Confirm', () => {
82
80
  } );
83
81
 
84
82
  it( 'should not render if closed by clicking `OK`, and the `onConfirm` callback should be called', async () => {
85
- const user = userEvent.setup( {
86
- advanceTimers: jest.advanceTimersByTime,
87
- } );
83
+ const user = userEvent.setup();
88
84
 
89
85
  const onConfirm = jest.fn().mockName( 'onConfirm()' );
90
86
 
@@ -104,9 +100,7 @@ describe( 'Confirm', () => {
104
100
  } );
105
101
 
106
102
  it( 'should not render if closed by clicking `Cancel`, and the `onCancel` callback should be called', async () => {
107
- const user = userEvent.setup( {
108
- advanceTimers: jest.advanceTimersByTime,
109
- } );
103
+ const user = userEvent.setup();
110
104
 
111
105
  const onCancel = jest.fn().mockName( 'onCancel()' );
112
106
 
@@ -126,9 +120,7 @@ describe( 'Confirm', () => {
126
120
  } );
127
121
 
128
122
  it( 'should be dismissable even if an `onCancel` callback is not provided', async () => {
129
- const user = userEvent.setup( {
130
- advanceTimers: jest.advanceTimersByTime,
131
- } );
123
+ const user = userEvent.setup();
132
124
 
133
125
  render(
134
126
  <ConfirmDialog onConfirm={ noop }>
@@ -166,9 +158,7 @@ describe( 'Confirm', () => {
166
158
  } );
167
159
 
168
160
  it( 'should not render if dialog is closed by pressing `Escape`, and the `onCancel` callback should be called', async () => {
169
- const user = userEvent.setup( {
170
- advanceTimers: jest.advanceTimersByTime,
171
- } );
161
+ const user = userEvent.setup();
172
162
 
173
163
  const onCancel = jest.fn().mockName( 'onCancel()' );
174
164
 
@@ -187,9 +177,7 @@ describe( 'Confirm', () => {
187
177
  } );
188
178
 
189
179
  it( 'should not render if dialog is closed by pressing `Enter`, and the `onConfirm` callback should be called', async () => {
190
- const user = userEvent.setup( {
191
- advanceTimers: jest.advanceTimersByTime,
192
- } );
180
+ const user = userEvent.setup();
193
181
 
194
182
  const onConfirm = jest.fn().mockName( 'onConfirm()' );
195
183
 
@@ -245,9 +233,7 @@ describe( 'Confirm', () => {
245
233
  } );
246
234
 
247
235
  it( 'should call the `onConfirm` callback if `OK`', async () => {
248
- const user = userEvent.setup( {
249
- advanceTimers: jest.advanceTimersByTime,
250
- } );
236
+ const user = userEvent.setup();
251
237
 
252
238
  const onConfirm = jest.fn().mockName( 'onConfirm()' );
253
239
 
@@ -265,9 +251,7 @@ describe( 'Confirm', () => {
265
251
  } );
266
252
 
267
253
  it( 'should call the `onCancel` callback if `Cancel` is clicked', async () => {
268
- const user = userEvent.setup( {
269
- advanceTimers: jest.advanceTimersByTime,
270
- } );
254
+ const user = userEvent.setup();
271
255
 
272
256
  const onCancel = jest.fn().mockName( 'onCancel()' );
273
257
 
@@ -313,9 +297,7 @@ describe( 'Confirm', () => {
313
297
  } );
314
298
 
315
299
  it( 'should call the `onCancel` callback if the `Escape` key is pressed', async () => {
316
- const user = userEvent.setup( {
317
- advanceTimers: jest.advanceTimersByTime,
318
- } );
300
+ const user = userEvent.setup();
319
301
 
320
302
  const onCancel = jest.fn().mockName( 'onCancel()' );
321
303
 
@@ -331,9 +313,7 @@ describe( 'Confirm', () => {
331
313
  } );
332
314
 
333
315
  it( 'should call the `onConfirm` callback if the `Enter` key is pressed', async () => {
334
- const user = userEvent.setup( {
335
- advanceTimers: jest.advanceTimersByTime,
336
- } );
316
+ const user = userEvent.setup();
337
317
 
338
318
  const onConfirm = jest.fn().mockName( 'onConfirm()' );
339
319
 
@@ -170,7 +170,7 @@ export function updateControlPointColorByPosition(
170
170
  * @param {number} mouseXCoordinate Horizontal coordinate of the mouse position.
171
171
  * @param {Element} containerElement Container for the gradient picker.
172
172
  *
173
- * @return {number} Whole number percentage from the left.
173
+ * @return {number | undefined} Whole number percentage from the left.
174
174
  */
175
175
  export function getHorizontalRelativeGradientPosition(
176
176
  mouseXCoordinate,
@@ -16,6 +16,7 @@ import {
16
16
  startOfWeek,
17
17
  endOfWeek,
18
18
  } from 'date-fns';
19
+ import type { KeyboardEventHandler } from 'react';
19
20
 
20
21
  /**
21
22
  * WordPress dependencies
@@ -273,7 +274,7 @@ type DayProps = {
273
274
  numEvents: number;
274
275
  isInvalid: boolean;
275
276
  onClick: () => void;
276
- onKeyDown: ( event: KeyboardEvent ) => void;
277
+ onKeyDown: KeyboardEventHandler;
277
278
  };
278
279
 
279
280
  function Day( {
@@ -10,8 +10,6 @@ import userEvent from '@testing-library/user-event';
10
10
  */
11
11
  import DatePicker from '..';
12
12
 
13
- jest.useFakeTimers();
14
-
15
13
  describe( 'DatePicker', () => {
16
14
  it( 'should highlight the current date', () => {
17
15
  render( <DatePicker currentDate="2022-05-02T11:00:00" /> );
@@ -33,9 +31,7 @@ describe( 'DatePicker', () => {
33
31
  } );
34
32
 
35
33
  it( 'should call onChange when a day is selected', async () => {
36
- const user = userEvent.setup( {
37
- advanceTimers: jest.advanceTimersByTime,
38
- } );
34
+ const user = userEvent.setup();
39
35
 
40
36
  const onChange = jest.fn();
41
37
 
@@ -54,9 +50,7 @@ describe( 'DatePicker', () => {
54
50
  } );
55
51
 
56
52
  it( 'should call onMonthPreviewed and onChange when a day in a different month is selected', async () => {
57
- const user = userEvent.setup( {
58
- advanceTimers: jest.advanceTimersByTime,
59
- } );
53
+ const user = userEvent.setup();
60
54
 
61
55
  const onMonthPreviewed = jest.fn();
62
56
  const onChange = jest.fn();
@@ -9,13 +9,9 @@ import userEvent from '@testing-library/user-event';
9
9
  */
10
10
  import TimePicker from '..';
11
11
 
12
- jest.useFakeTimers();
13
-
14
12
  describe( 'TimePicker', () => {
15
13
  it( 'should call onChange with updated date values', async () => {
16
- const user = userEvent.setup( {
17
- advanceTimers: jest.advanceTimersByTime,
18
- } );
14
+ const user = userEvent.setup();
19
15
 
20
16
  const onChangeSpy = jest.fn();
21
17
 
@@ -69,9 +65,7 @@ describe( 'TimePicker', () => {
69
65
  } );
70
66
 
71
67
  it( 'should call onChange with an updated hour (12-hour clock)', async () => {
72
- const user = userEvent.setup( {
73
- advanceTimers: jest.advanceTimersByTime,
74
- } );
68
+ const user = userEvent.setup();
75
69
 
76
70
  const onChangeSpy = jest.fn();
77
71
 
@@ -93,9 +87,7 @@ describe( 'TimePicker', () => {
93
87
  } );
94
88
 
95
89
  it( 'should call onChange with a bounded hour (12-hour clock) if the hour is out of bounds', async () => {
96
- const user = userEvent.setup( {
97
- advanceTimers: jest.advanceTimersByTime,
98
- } );
90
+ const user = userEvent.setup();
99
91
 
100
92
  const onChangeSpy = jest.fn();
101
93
 
@@ -117,9 +109,7 @@ describe( 'TimePicker', () => {
117
109
  } );
118
110
 
119
111
  it( 'should call onChange with an updated hour (24-hour clock)', async () => {
120
- const user = userEvent.setup( {
121
- advanceTimers: jest.advanceTimersByTime,
122
- } );
112
+ const user = userEvent.setup();
123
113
 
124
114
  const onChangeSpy = jest.fn();
125
115
 
@@ -141,9 +131,7 @@ describe( 'TimePicker', () => {
141
131
  } );
142
132
 
143
133
  it( 'should call onChange with a bounded minute if out of bounds', async () => {
144
- const user = userEvent.setup( {
145
- advanceTimers: jest.advanceTimersByTime,
146
- } );
134
+ const user = userEvent.setup();
147
135
 
148
136
  const onChangeSpy = jest.fn();
149
137
 
@@ -165,9 +153,7 @@ describe( 'TimePicker', () => {
165
153
  } );
166
154
 
167
155
  it( 'should switch to PM correctly', async () => {
168
- const user = userEvent.setup( {
169
- advanceTimers: jest.advanceTimersByTime,
170
- } );
156
+ const user = userEvent.setup();
171
157
 
172
158
  const onChangeSpy = jest.fn();
173
159
 
@@ -187,9 +173,7 @@ describe( 'TimePicker', () => {
187
173
  } );
188
174
 
189
175
  it( 'should switch to AM correctly', async () => {
190
- const user = userEvent.setup( {
191
- advanceTimers: jest.advanceTimersByTime,
192
- } );
176
+ const user = userEvent.setup();
193
177
 
194
178
  const onChangeSpy = jest.fn();
195
179
 
@@ -209,9 +193,7 @@ describe( 'TimePicker', () => {
209
193
  } );
210
194
 
211
195
  it( 'should allow to set the time correctly when the PM period is selected', async () => {
212
- const user = userEvent.setup( {
213
- advanceTimers: jest.advanceTimersByTime,
214
- } );
196
+ const user = userEvent.setup();
215
197
 
216
198
  const onChangeSpy = jest.fn();
217
199
 
@@ -244,9 +226,7 @@ describe( 'TimePicker', () => {
244
226
  } );
245
227
 
246
228
  it( 'should truncate at the minutes on change', async () => {
247
- const user = userEvent.setup( {
248
- advanceTimers: jest.advanceTimersByTime,
249
- } );
229
+ const user = userEvent.setup();
250
230
 
251
231
  const onChangeSpy = jest.fn();
252
232
 
@@ -14,8 +14,6 @@ import { plus } from '@wordpress/icons';
14
14
  */
15
15
  import { DimensionControl } from '../';
16
16
 
17
- jest.useFakeTimers();
18
-
19
17
  describe( 'DimensionControl', () => {
20
18
  const onChangeHandler = jest.fn();
21
19
  const instanceId = 1;
@@ -90,9 +88,7 @@ describe( 'DimensionControl', () => {
90
88
 
91
89
  describe( 'callbacks', () => {
92
90
  it( 'should call onChange handler with correct args on size change', async () => {
93
- const user = userEvent.setup( {
94
- advanceTimers: jest.advanceTimersByTime,
95
- } );
91
+ const user = userEvent.setup();
96
92
 
97
93
  render(
98
94
  <DimensionControl
@@ -114,9 +110,7 @@ describe( 'DimensionControl', () => {
114
110
  } );
115
111
 
116
112
  it( 'should call onChange handler with undefined value when no size is provided on change', async () => {
117
- const user = userEvent.setup( {
118
- advanceTimers: jest.advanceTimersByTime,
119
- } );
113
+ const user = userEvent.setup();
120
114
 
121
115
  render(
122
116
  <DimensionControl
@@ -9,8 +9,6 @@ import { render, screen } from '@testing-library/react';
9
9
  import Disabled from '../';
10
10
  import userEvent from '@testing-library/user-event';
11
11
 
12
- jest.useFakeTimers();
13
-
14
12
  describe( 'Disabled', () => {
15
13
  const Form = () => (
16
14
  <form title="form">
@@ -75,9 +73,7 @@ describe( 'Disabled', () => {
75
73
  } );
76
74
 
77
75
  it( 'should preserve input values when toggling the isDisabled prop', async () => {
78
- const user = userEvent.setup( {
79
- advanceTimers: jest.advanceTimersByTime,
80
- } );
76
+ const user = userEvent.setup();
81
77
 
82
78
  const MaybeDisable = ( { isDisabled = true } ) => (
83
79
  <Disabled isDisabled={ isDisabled }>
@@ -59,7 +59,7 @@ describe( 'Draggable', () => {
59
59
  { state: State.ACTIVE },
60
60
  ] );
61
61
 
62
- expect( onLongPress ).toBeCalledTimes( 1 );
62
+ expect( onLongPress ).toHaveBeenCalledTimes( 1 );
63
63
  expect( onLongPress ).toHaveBeenCalledWith( triggerId );
64
64
  } );
65
65
 
@@ -111,16 +111,16 @@ describe( 'Draggable', () => {
111
111
  { state: State.END },
112
112
  ] );
113
113
 
114
- expect( onDragStart ).toBeCalledTimes( 1 );
114
+ expect( onDragStart ).toHaveBeenCalledTimes( 1 );
115
115
  expect( onDragStart ).toHaveBeenCalledWith( {
116
116
  id: triggerId,
117
117
  x: touchEvents[ 0 ].x,
118
118
  y: touchEvents[ 0 ].y,
119
119
  } );
120
- expect( onDragOver ).toBeCalledTimes( 2 );
120
+ expect( onDragOver ).toHaveBeenCalledTimes( 2 );
121
121
  expect( onDragOver ).toHaveBeenNthCalledWith( 1, touchEvents[ 1 ] );
122
122
  expect( onDragOver ).toHaveBeenNthCalledWith( 2, touchEvents[ 2 ] );
123
- expect( onDragEnd ).toBeCalledTimes( 1 );
123
+ expect( onDragEnd ).toHaveBeenCalledTimes( 1 );
124
124
  expect( onDragEnd ).toHaveBeenCalledWith( {
125
125
  id: triggerId,
126
126
  x: touchEvents[ 2 ].x,
@@ -13,7 +13,7 @@ const MyDropdown = () => (
13
13
  <Dropdown
14
14
  className="my-container-class-name"
15
15
  contentClassName="my-popover-content-classname"
16
- position="bottom right"
16
+ popoverProps={ { placement: 'bottom-start' } }
17
17
  renderToggle={ ( { isOpen, onToggle } ) => (
18
18
  <Button
19
19
  variant="primary"
@@ -90,13 +90,6 @@ Use this object to access properties/features of the `Popover` component that ar
90
90
 
91
91
  - Required: No
92
92
 
93
- ### `position`: `PopoverProps[ 'position' ]`
94
-
95
- The direction in which the popover should open relative to its parent node. Specify a y- and an x-axis as a space-separated string. Supports `"top"`, `"bottom"` y-axis, and `"left"`, `"center"`, `"right"` x-axis.
96
-
97
- - Required: No
98
- - Default: `"top center"`
99
-
100
93
  ### `renderContent`: `( props: CallbackProps ) => ReactNode`
101
94
 
102
95
  A callback invoked to render the content of the dropdown menu.
@@ -9,6 +9,7 @@ import type { ForwardedRef } from 'react';
9
9
  */
10
10
  import { forwardRef, useEffect, useRef, useState } from '@wordpress/element';
11
11
  import { useMergeRefs } from '@wordpress/compose';
12
+ import deprecated from '@wordpress/deprecated';
12
13
 
13
14
  /**
14
15
  * Internal dependencies
@@ -41,14 +42,24 @@ function UnforwardedDropdown(
41
42
  expandOnMobile,
42
43
  headerTitle,
43
44
  focusOnMount,
44
- position,
45
45
  popoverProps,
46
46
  onClose,
47
47
  onToggle,
48
48
  style,
49
+
50
+ // Deprecated props
51
+ position,
49
52
  }: DropdownProps,
50
53
  forwardedRef: ForwardedRef< any >
51
54
  ) {
55
+ if ( position !== undefined ) {
56
+ deprecated( '`position` prop in wp.components.Dropdown', {
57
+ since: '6.2',
58
+ alternative: '`popoverProps.placement` prop',
59
+ hint: 'Note that the `position` prop will override any values passed through the `popoverProps.placement` prop.',
60
+ } );
61
+ }
62
+
52
63
  // Use internal state instead of a ref to make sure that the component
53
64
  // re-renders when the popover's anchor updates.
54
65
  const [ fallbackPopoverAnchor, setFallbackPopoverAnchor ] =
@@ -141,7 +152,7 @@ function UnforwardedDropdown(
141
152
  { ...popoverProps }
142
153
  className={ classnames(
143
154
  'components-dropdown__content',
144
- popoverProps ? popoverProps.className : undefined,
155
+ popoverProps?.className,
145
156
  contentClassName
146
157
  ) }
147
158
  >
@@ -161,18 +172,18 @@ function UnforwardedDropdown(
161
172
  * const MyDropdown = () => (
162
173
  * <Dropdown
163
174
  * className="my-container-class-name"
164
- * contentClassName="my-popover-content-classname"
165
- * position="bottom right"
175
+ * contentClassName="my-dropdown-content-classname"
176
+ * popoverProps={ { placement: 'bottom-start' } }
166
177
  * renderToggle={ ( { isOpen, onToggle } ) => (
167
178
  * <Button
168
179
  * variant="primary"
169
180
  * onClick={ onToggle }
170
181
  * aria-expanded={ isOpen }
171
182
  * >
172
- * Toggle Popover!
183
+ * Toggle Dropdown!
173
184
  * </Button>
174
185
  * ) }
175
- * renderContent={ () => <div>This is the content of the popover.</div> }
186
+ * renderContent={ () => <div>This is the content of the dropdown.</div> }
176
187
  * />
177
188
  * );
178
189
  * ```
@@ -16,11 +16,12 @@ const meta: ComponentMeta< typeof Dropdown > = {
16
16
  subcomponents: { DropdownContentWrapper },
17
17
  argTypes: {
18
18
  focusOnMount: {
19
+ options: [ 'firstElement', true, false ],
19
20
  control: {
20
21
  type: 'radio',
21
- options: [ 'firstElement', true, false ],
22
22
  },
23
23
  },
24
+ position: { control: { type: null } },
24
25
  renderContent: { control: { type: null } },
25
26
  renderToggle: { control: { type: null } },
26
27
  },
@@ -42,9 +43,8 @@ const Template: ComponentStory< typeof Dropdown > = ( args ) => {
42
43
 
43
44
  export const Default: ComponentStory< typeof Dropdown > = Template.bind( {} );
44
45
  Default.args = {
45
- position: 'bottom right',
46
46
  renderToggle: ( { isOpen, onToggle } ) => (
47
- <Button onClick={ onToggle } aria-expanded={ isOpen } isPrimary>
47
+ <Button onClick={ onToggle } aria-expanded={ isOpen } variant="primary">
48
48
  Open dropdown
49
49
  </Button>
50
50
  ),
@@ -9,13 +9,9 @@ import userEvent from '@testing-library/user-event';
9
9
  */
10
10
  import Dropdown from '..';
11
11
 
12
- jest.useFakeTimers();
13
-
14
12
  describe( 'Dropdown', () => {
15
13
  it( 'should toggle the dropdown properly', async () => {
16
- const user = userEvent.setup( {
17
- advanceTimers: jest.advanceTimersByTime,
18
- } );
14
+ const user = userEvent.setup();
19
15
  const { unmount } = render(
20
16
  <Dropdown
21
17
  className="container"
@@ -49,9 +45,7 @@ describe( 'Dropdown', () => {
49
45
  } );
50
46
 
51
47
  it( 'should close the dropdown when calling onClose', async () => {
52
- const user = userEvent.setup( {
53
- advanceTimers: jest.advanceTimersByTime,
54
- } );
48
+ const user = userEvent.setup();
55
49
  render(
56
50
  <Dropdown
57
51
  className="container"
@@ -81,16 +81,6 @@ export type DropdownProps = {
81
81
  ComponentPropsWithoutRef< typeof Popover >,
82
82
  'children'
83
83
  >;
84
- /**
85
- * The direction in which the popover should open
86
- * relative to its parent node.
87
- * Specify a y- and an x-axis as a space-separated string.
88
- * Supports "top", "bottom" y-axis,
89
- * and "left", "center", "right" x-axis.
90
- *
91
- * @default 'top center'
92
- */
93
- position?: PopoverProps[ 'position' ];
94
84
  /**
95
85
  * A callback invoked to render the content of the dropdown menu.
96
86
  * Its first argument is the same as the renderToggle prop.
@@ -112,4 +102,13 @@ export type DropdownProps = {
112
102
  * The style of the global container.
113
103
  */
114
104
  style?: CSSProperties;
105
+ /**
106
+ * Legacy way to specify the popover's position with respect to its anchor.
107
+ * For details about the possible values, see the `Popover` component's docs.
108
+ * _Note: this prop is deprecated. Use the `popoverProps.placement` prop
109
+ * instead._
110
+ *
111
+ * @deprecated
112
+ */
113
+ position?: PopoverProps[ 'position' ];
115
114
  };
@@ -205,6 +205,6 @@ Use this object to modify props available for the `NavigableMenu` component that
205
205
 
206
206
  In some contexts, the arrow down key used to open the dropdown menu might need to be disabled—for example when that key is used to perform another action.
207
207
 
208
- - Type: `Object`
208
+ - Type: `boolean`
209
209
  - Required: No
210
210
  - Default: `false`