@wordpress/components 28.1.0 → 28.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 (451) hide show
  1. package/CHANGELOG.md +179 -120
  2. package/build/animation/index.js.map +1 -1
  3. package/build/autocomplete/autocompleter-ui.js +1 -0
  4. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  5. package/build/autocomplete/index.js.map +1 -1
  6. package/build/base-control/index.js +14 -7
  7. package/build/base-control/index.js.map +1 -1
  8. package/build/border-box-control/border-box-control-visualizer/component.js +0 -4
  9. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -1
  10. package/build/button/index.js +5 -3
  11. package/build/button/index.js.map +1 -1
  12. package/build/button/types.js.map +1 -1
  13. package/build/combobox-control/index.js +4 -1
  14. package/build/combobox-control/index.js.map +1 -1
  15. package/build/composite/current/index.js.map +1 -1
  16. package/build/custom-select-control-v2/custom-select.js +58 -36
  17. package/build/custom-select-control-v2/custom-select.js.map +1 -1
  18. package/build/custom-select-control-v2/default-component/index.js +0 -1
  19. package/build/custom-select-control-v2/default-component/index.js.map +1 -1
  20. package/build/custom-select-control-v2/item.js +2 -0
  21. package/build/custom-select-control-v2/item.js.map +1 -1
  22. package/build/custom-select-control-v2/legacy-component/index.js +33 -15
  23. package/build/custom-select-control-v2/legacy-component/index.js.map +1 -1
  24. package/build/custom-select-control-v2/styles.js +92 -65
  25. package/build/custom-select-control-v2/styles.js.map +1 -1
  26. package/build/custom-select-control-v2/types.js.map +1 -1
  27. package/build/date-time/date-time/index.js +3 -1
  28. package/build/date-time/date-time/index.js.map +1 -1
  29. package/build/date-time/index.js +7 -0
  30. package/build/date-time/index.js.map +1 -1
  31. package/build/date-time/time/index.js +62 -145
  32. package/build/date-time/time/index.js.map +1 -1
  33. package/build/date-time/time-input/index.js +159 -0
  34. package/build/date-time/time-input/index.js.map +1 -0
  35. package/build/date-time/types.js.map +1 -1
  36. package/build/date-time/utils.js +64 -0
  37. package/build/date-time/utils.js.map +1 -1
  38. package/build/disclosure/index.js +0 -1
  39. package/build/disclosure/index.js.map +1 -1
  40. package/build/divider/component.js +0 -1
  41. package/build/divider/component.js.map +1 -1
  42. package/build/divider/types.js.map +1 -1
  43. package/build/drop-zone/index.js +16 -79
  44. package/build/drop-zone/index.js.map +1 -1
  45. package/build/dropdown-menu/index.js +1 -0
  46. package/build/dropdown-menu/index.js.map +1 -1
  47. package/build/dropdown-menu-v2/index.js +0 -1
  48. package/build/dropdown-menu-v2/index.js.map +1 -1
  49. package/build/dropdown-menu-v2/styles.js +15 -16
  50. package/build/dropdown-menu-v2/styles.js.map +1 -1
  51. package/build/dropdown-menu-v2/types.js.map +1 -1
  52. package/build/font-size-picker/font-size-picker-select.js +2 -2
  53. package/build/font-size-picker/font-size-picker-select.js.map +1 -1
  54. package/build/font-size-picker/index.js +1 -1
  55. package/build/font-size-picker/index.js.map +1 -1
  56. package/build/font-size-picker/utils.js +0 -4
  57. package/build/font-size-picker/utils.js.map +1 -1
  58. package/build/form-token-field/token.js +4 -1
  59. package/build/form-token-field/token.js.map +1 -1
  60. package/build/higher-order/with-spoken-messages/index.js +1 -2
  61. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  62. package/build/lock-unlock.js +1 -1
  63. package/build/lock-unlock.js.map +1 -1
  64. package/build/menu-items-choice/types.js.map +1 -1
  65. package/build/palette-edit/index.js +30 -38
  66. package/build/palette-edit/index.js.map +1 -1
  67. package/build/palette-edit/types.js.map +1 -1
  68. package/build/popover/index.js +0 -4
  69. package/build/popover/index.js.map +1 -1
  70. package/build/popover/utils.js +0 -1
  71. package/build/popover/utils.js.map +1 -1
  72. package/build/private-apis.js +2 -4
  73. package/build/private-apis.js.map +1 -1
  74. package/build/progress-bar/styles.js +19 -13
  75. package/build/progress-bar/styles.js.map +1 -1
  76. package/build/radio-group/context.js +0 -1
  77. package/build/radio-group/context.js.map +1 -1
  78. package/build/radio-group/index.js +0 -1
  79. package/build/radio-group/index.js.map +1 -1
  80. package/build/radio-group/radio.js +0 -1
  81. package/build/radio-group/radio.js.map +1 -1
  82. package/build/range-control/index.js +4 -1
  83. package/build/range-control/index.js.map +1 -1
  84. package/build/range-control/styles/range-control-styles.js +34 -28
  85. package/build/range-control/styles/range-control-styles.js.map +1 -1
  86. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  87. package/build/select-control/index.js +1 -2
  88. package/build/select-control/index.js.map +1 -1
  89. package/build/select-control/styles/select-control-styles.js +13 -8
  90. package/build/select-control/styles/select-control-styles.js.map +1 -1
  91. package/build/tab-panel/index.js +0 -1
  92. package/build/tab-panel/index.js.map +1 -1
  93. package/build/tabs/index.js +0 -1
  94. package/build/tabs/index.js.map +1 -1
  95. package/build/tabs/styles.js +3 -5
  96. package/build/tabs/styles.js.map +1 -1
  97. package/build/tabs/tablist.js +148 -37
  98. package/build/tabs/tablist.js.map +1 -1
  99. package/build/tabs/types.js.map +1 -1
  100. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +0 -2
  101. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  102. package/build/toggle-group-control/toggle-group-control/component.js +0 -2
  103. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  104. package/build/toggle-group-control/toggle-group-control-option-base/component.js +0 -4
  105. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  106. package/build/toolbar/toolbar/toolbar-container.js +0 -1
  107. package/build/toolbar/toolbar/toolbar-container.js.map +1 -1
  108. package/build/toolbar/toolbar/types.js.map +1 -1
  109. package/build/toolbar/toolbar-button/index.js +27 -19
  110. package/build/toolbar/toolbar-button/index.js.map +1 -1
  111. package/build/toolbar/toolbar-button/types.js.map +1 -1
  112. package/build/toolbar/toolbar-context/index.js +0 -1
  113. package/build/toolbar/toolbar-context/index.js.map +1 -1
  114. package/build/toolbar/toolbar-item/index.js +1 -1
  115. package/build/toolbar/toolbar-item/index.js.map +1 -1
  116. package/build/tooltip/index.js +3 -2
  117. package/build/tooltip/index.js.map +1 -1
  118. package/build/tooltip/types.js.map +1 -1
  119. package/build/unit-control/index.js +3 -3
  120. package/build/unit-control/index.js.map +1 -1
  121. package/build/unit-control/styles/unit-control-styles.js +7 -7
  122. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  123. package/build/utils/hooks/use-update-effect.js +4 -1
  124. package/build/utils/hooks/use-update-effect.js.map +1 -1
  125. package/build-module/animation/index.js +0 -1
  126. package/build-module/animation/index.js.map +1 -1
  127. package/build-module/autocomplete/autocompleter-ui.js +1 -0
  128. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  129. package/build-module/autocomplete/index.js.map +1 -1
  130. package/build-module/base-control/index.js +13 -6
  131. package/build-module/base-control/index.js.map +1 -1
  132. package/build-module/border-box-control/border-box-control-visualizer/component.js +0 -4
  133. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -1
  134. package/build-module/button/index.js +5 -3
  135. package/build-module/button/index.js.map +1 -1
  136. package/build-module/button/types.js.map +1 -1
  137. package/build-module/combobox-control/index.js +4 -1
  138. package/build-module/combobox-control/index.js.map +1 -1
  139. package/build-module/composite/current/index.js +0 -3
  140. package/build-module/composite/current/index.js.map +1 -1
  141. package/build-module/custom-select-control-v2/custom-select.js +59 -38
  142. package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
  143. package/build-module/custom-select-control-v2/default-component/index.js +0 -1
  144. package/build-module/custom-select-control-v2/default-component/index.js.map +1 -1
  145. package/build-module/custom-select-control-v2/item.js +2 -0
  146. package/build-module/custom-select-control-v2/item.js.map +1 -1
  147. package/build-module/custom-select-control-v2/legacy-component/index.js +33 -16
  148. package/build-module/custom-select-control-v2/legacy-component/index.js.map +1 -1
  149. package/build-module/custom-select-control-v2/styles.js +90 -63
  150. package/build-module/custom-select-control-v2/styles.js.map +1 -1
  151. package/build-module/custom-select-control-v2/types.js.map +1 -1
  152. package/build-module/date-time/date-time/index.js +4 -1
  153. package/build-module/date-time/date-time/index.js.map +1 -1
  154. package/build-module/date-time/index.js +2 -1
  155. package/build-module/date-time/index.js.map +1 -1
  156. package/build-module/date-time/time/index.js +65 -149
  157. package/build-module/date-time/time/index.js.map +1 -1
  158. package/build-module/date-time/time-input/index.js +151 -0
  159. package/build-module/date-time/time-input/index.js.map +1 -0
  160. package/build-module/date-time/types.js.map +1 -1
  161. package/build-module/date-time/utils.js +61 -0
  162. package/build-module/date-time/utils.js.map +1 -1
  163. package/build-module/disclosure/index.js +0 -1
  164. package/build-module/disclosure/index.js.map +1 -1
  165. package/build-module/divider/component.js +0 -1
  166. package/build-module/divider/component.js.map +1 -1
  167. package/build-module/divider/types.js.map +1 -1
  168. package/build-module/drop-zone/index.js +17 -80
  169. package/build-module/drop-zone/index.js.map +1 -1
  170. package/build-module/dropdown-menu/index.js +1 -0
  171. package/build-module/dropdown-menu/index.js.map +1 -1
  172. package/build-module/dropdown-menu-v2/index.js +0 -1
  173. package/build-module/dropdown-menu-v2/index.js.map +1 -1
  174. package/build-module/dropdown-menu-v2/styles.js +14 -15
  175. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  176. package/build-module/dropdown-menu-v2/types.js.map +1 -1
  177. package/build-module/font-size-picker/font-size-picker-select.js +1 -1
  178. package/build-module/font-size-picker/font-size-picker-select.js.map +1 -1
  179. package/build-module/font-size-picker/index.js +1 -1
  180. package/build-module/font-size-picker/index.js.map +1 -1
  181. package/build-module/font-size-picker/utils.js +0 -4
  182. package/build-module/font-size-picker/utils.js.map +1 -1
  183. package/build-module/form-token-field/token.js +4 -1
  184. package/build-module/form-token-field/token.js.map +1 -1
  185. package/build-module/higher-order/with-spoken-messages/index.js +1 -2
  186. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  187. package/build-module/lock-unlock.js +1 -1
  188. package/build-module/lock-unlock.js.map +1 -1
  189. package/build-module/menu-items-choice/types.js.map +1 -1
  190. package/build-module/palette-edit/index.js +31 -39
  191. package/build-module/palette-edit/index.js.map +1 -1
  192. package/build-module/palette-edit/types.js.map +1 -1
  193. package/build-module/popover/index.js +0 -3
  194. package/build-module/popover/index.js.map +1 -1
  195. package/build-module/popover/utils.js +0 -1
  196. package/build-module/popover/utils.js.map +1 -1
  197. package/build-module/private-apis.js +2 -4
  198. package/build-module/private-apis.js.map +1 -1
  199. package/build-module/progress-bar/styles.js +21 -13
  200. package/build-module/progress-bar/styles.js.map +1 -1
  201. package/build-module/radio-group/context.js +0 -1
  202. package/build-module/radio-group/context.js.map +1 -1
  203. package/build-module/radio-group/index.js +0 -1
  204. package/build-module/radio-group/index.js.map +1 -1
  205. package/build-module/radio-group/radio.js +0 -1
  206. package/build-module/radio-group/radio.js.map +1 -1
  207. package/build-module/range-control/index.js +4 -1
  208. package/build-module/range-control/index.js.map +1 -1
  209. package/build-module/range-control/styles/range-control-styles.js +34 -28
  210. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  211. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  212. package/build-module/select-control/index.js +2 -3
  213. package/build-module/select-control/index.js.map +1 -1
  214. package/build-module/select-control/styles/select-control-styles.js +12 -7
  215. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  216. package/build-module/tab-panel/index.js +0 -1
  217. package/build-module/tab-panel/index.js.map +1 -1
  218. package/build-module/tabs/index.js +0 -1
  219. package/build-module/tabs/index.js.map +1 -1
  220. package/build-module/tabs/styles.js +3 -4
  221. package/build-module/tabs/styles.js.map +1 -1
  222. package/build-module/tabs/tablist.js +149 -38
  223. package/build-module/tabs/tablist.js.map +1 -1
  224. package/build-module/tabs/types.js.map +1 -1
  225. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +0 -1
  226. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  227. package/build-module/toggle-group-control/toggle-group-control/component.js +0 -1
  228. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  229. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +0 -2
  230. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  231. package/build-module/toolbar/toolbar/toolbar-container.js +0 -1
  232. package/build-module/toolbar/toolbar/toolbar-container.js.map +1 -1
  233. package/build-module/toolbar/toolbar/types.js.map +1 -1
  234. package/build-module/toolbar/toolbar-button/index.js +27 -19
  235. package/build-module/toolbar/toolbar-button/index.js.map +1 -1
  236. package/build-module/toolbar/toolbar-button/types.js.map +1 -1
  237. package/build-module/toolbar/toolbar-context/index.js +0 -1
  238. package/build-module/toolbar/toolbar-context/index.js.map +1 -1
  239. package/build-module/toolbar/toolbar-item/index.js +1 -1
  240. package/build-module/toolbar/toolbar-item/index.js.map +1 -1
  241. package/build-module/tooltip/index.js +3 -2
  242. package/build-module/tooltip/index.js.map +1 -1
  243. package/build-module/tooltip/types.js.map +1 -1
  244. package/build-module/unit-control/index.js +3 -3
  245. package/build-module/unit-control/index.js.map +1 -1
  246. package/build-module/unit-control/styles/unit-control-styles.js +7 -7
  247. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  248. package/build-module/utils/hooks/use-update-effect.js +4 -1
  249. package/build-module/utils/hooks/use-update-effect.js.map +1 -1
  250. package/build-style/style-rtl.css +46 -6
  251. package/build-style/style.css +46 -6
  252. package/build-types/animation/index.d.ts.map +1 -1
  253. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  254. package/build-types/autocomplete/index.d.ts.map +1 -1
  255. package/build-types/base-control/index.d.ts +6 -20
  256. package/build-types/base-control/index.d.ts.map +1 -1
  257. package/build-types/base-control/stories/index.story.d.ts.map +1 -1
  258. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -1
  259. package/build-types/button/deprecated.d.ts +4 -4
  260. package/build-types/button/index.d.ts.map +1 -1
  261. package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
  262. package/build-types/button/types.d.ts +27 -10
  263. package/build-types/button/types.d.ts.map +1 -1
  264. package/build-types/combobox-control/index.d.ts.map +1 -1
  265. package/build-types/composite/current/index.d.ts.map +1 -1
  266. package/build-types/custom-select-control/stories/index.story.d.ts +15 -0
  267. package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
  268. package/build-types/custom-select-control-v2/custom-select.d.ts +2 -2
  269. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  270. package/build-types/custom-select-control-v2/default-component/index.d.ts.map +1 -1
  271. package/build-types/custom-select-control-v2/item.d.ts.map +1 -1
  272. package/build-types/custom-select-control-v2/legacy-component/index.d.ts.map +1 -1
  273. package/build-types/custom-select-control-v2/stories/default.story.d.ts +6 -3
  274. package/build-types/custom-select-control-v2/stories/default.story.d.ts.map +1 -1
  275. package/build-types/custom-select-control-v2/styles.d.ts +18 -22
  276. package/build-types/custom-select-control-v2/styles.d.ts.map +1 -1
  277. package/build-types/custom-select-control-v2/types.d.ts +13 -2
  278. package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
  279. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  280. package/build-types/date-time/index.d.ts +2 -1
  281. package/build-types/date-time/index.d.ts.map +1 -1
  282. package/build-types/date-time/stories/time-input.story.d.ts +12 -0
  283. package/build-types/date-time/stories/time-input.story.d.ts.map +1 -0
  284. package/build-types/date-time/time/index.d.ts +1 -1
  285. package/build-types/date-time/time/index.d.ts.map +1 -1
  286. package/build-types/date-time/time-input/index.d.ts +5 -0
  287. package/build-types/date-time/time-input/index.d.ts.map +1 -0
  288. package/build-types/date-time/time-input/test/index.d.ts +2 -0
  289. package/build-types/date-time/time-input/test/index.d.ts.map +1 -0
  290. package/build-types/date-time/types.d.ts +54 -0
  291. package/build-types/date-time/types.d.ts.map +1 -1
  292. package/build-types/date-time/utils.d.ts +40 -0
  293. package/build-types/date-time/utils.d.ts.map +1 -1
  294. package/build-types/disclosure/index.d.ts.map +1 -1
  295. package/build-types/divider/component.d.ts.map +1 -1
  296. package/build-types/divider/types.d.ts.map +1 -1
  297. package/build-types/drop-zone/index.d.ts +3 -0
  298. package/build-types/drop-zone/index.d.ts.map +1 -1
  299. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  300. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -1
  301. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
  302. package/build-types/dropdown-menu-v2/types.d.ts.map +1 -1
  303. package/build-types/font-size-picker/styles.d.ts +1 -1
  304. package/build-types/font-size-picker/utils.d.ts.map +1 -1
  305. package/build-types/form-token-field/token.d.ts.map +1 -1
  306. package/build-types/higher-order/with-spoken-messages/index.d.ts +1 -2
  307. package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
  308. package/build-types/menu-items-choice/types.d.ts +1 -1
  309. package/build-types/menu-items-choice/types.d.ts.map +1 -1
  310. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  311. package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
  312. package/build-types/navigator/navigator-button/component.d.ts +1 -1
  313. package/build-types/navigator/navigator-button/hook.d.ts +1 -1
  314. package/build-types/navigator/navigator-to-parent-button/component.d.ts +1 -1
  315. package/build-types/palette-edit/index.d.ts.map +1 -1
  316. package/build-types/palette-edit/types.d.ts +1 -3
  317. package/build-types/palette-edit/types.d.ts.map +1 -1
  318. package/build-types/popover/index.d.ts.map +1 -1
  319. package/build-types/popover/utils.d.ts.map +1 -1
  320. package/build-types/private-apis.d.ts.map +1 -1
  321. package/build-types/progress-bar/styles.d.ts.map +1 -1
  322. package/build-types/radio-group/context.d.ts.map +1 -1
  323. package/build-types/radio-group/index.d.ts.map +1 -1
  324. package/build-types/radio-group/radio.d.ts.map +1 -1
  325. package/build-types/range-control/index.d.ts.map +1 -1
  326. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  327. package/build-types/resizable-box/resize-tooltip/utils.d.ts +2 -2
  328. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  329. package/build-types/select-control/index.d.ts.map +1 -1
  330. package/build-types/select-control/styles/select-control-styles.d.ts +5 -0
  331. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  332. package/build-types/tab-panel/index.d.ts.map +1 -1
  333. package/build-types/tabs/index.d.ts.map +1 -1
  334. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  335. package/build-types/tabs/styles.d.ts.map +1 -1
  336. package/build-types/tabs/tablist.d.ts.map +1 -1
  337. package/build-types/tabs/types.d.ts.map +1 -1
  338. package/build-types/theme/stories/index.story.d.ts.map +1 -1
  339. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  340. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  341. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  342. package/build-types/toolbar/toolbar/toolbar-container.d.ts.map +1 -1
  343. package/build-types/toolbar/toolbar/types.d.ts +6 -0
  344. package/build-types/toolbar/toolbar/types.d.ts.map +1 -1
  345. package/build-types/toolbar/toolbar-button/index.d.ts +3 -96
  346. package/build-types/toolbar/toolbar-button/index.d.ts.map +1 -1
  347. package/build-types/toolbar/toolbar-button/types.d.ts +18 -0
  348. package/build-types/toolbar/toolbar-button/types.d.ts.map +1 -1
  349. package/build-types/toolbar/toolbar-context/index.d.ts.map +1 -1
  350. package/build-types/toolbar/toolbar-item/index.d.ts +1 -3
  351. package/build-types/toolbar/toolbar-item/index.d.ts.map +1 -1
  352. package/build-types/tooltip/index.d.ts.map +1 -1
  353. package/build-types/tooltip/types.d.ts +4 -0
  354. package/build-types/tooltip/types.d.ts.map +1 -1
  355. package/build-types/unit-control/index.d.ts.map +1 -1
  356. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  357. package/build-types/utils/hooks/use-update-effect.d.ts +1 -1
  358. package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
  359. package/package.json +19 -19
  360. package/src/animation/index.tsx +0 -1
  361. package/src/autocomplete/autocompleter-ui.tsx +1 -0
  362. package/src/autocomplete/index.tsx +0 -1
  363. package/src/base-control/index.tsx +16 -6
  364. package/src/base-control/stories/index.story.tsx +0 -1
  365. package/src/border-box-control/border-box-control-visualizer/component.tsx +0 -5
  366. package/src/button/README.md +13 -0
  367. package/src/button/index.tsx +6 -4
  368. package/src/button/stories/e2e/index.story.tsx +2 -1
  369. package/src/button/test/index.tsx +17 -2
  370. package/src/button/types.ts +27 -10
  371. package/src/combobox-control/index.tsx +2 -0
  372. package/src/composite/current/index.ts +0 -2
  373. package/src/custom-select-control/stories/index.story.tsx +32 -3
  374. package/src/custom-select-control/test/index.js +247 -28
  375. package/src/custom-select-control-v2/custom-select.tsx +58 -23
  376. package/src/custom-select-control-v2/default-component/index.tsx +0 -1
  377. package/src/custom-select-control-v2/item.tsx +5 -1
  378. package/src/custom-select-control-v2/legacy-component/index.tsx +45 -16
  379. package/src/custom-select-control-v2/legacy-component/test/index.tsx +261 -43
  380. package/src/custom-select-control-v2/styles.ts +156 -74
  381. package/src/custom-select-control-v2/test/index.tsx +35 -5
  382. package/src/custom-select-control-v2/types.ts +19 -6
  383. package/src/date-time/README.md +8 -0
  384. package/src/date-time/date-time/index.tsx +2 -1
  385. package/src/date-time/index.ts +2 -1
  386. package/src/date-time/stories/time-input.story.tsx +36 -0
  387. package/src/date-time/time/index.tsx +77 -194
  388. package/src/date-time/time/test/index.tsx +61 -0
  389. package/src/date-time/time-input/index.tsx +196 -0
  390. package/src/date-time/time-input/test/index.tsx +171 -0
  391. package/src/date-time/types.ts +63 -0
  392. package/src/date-time/utils.ts +69 -0
  393. package/src/dimension-control/test/__snapshots__/index.test.js.snap +116 -96
  394. package/src/disclosure/index.tsx +0 -1
  395. package/src/divider/component.tsx +0 -1
  396. package/src/divider/types.ts +0 -1
  397. package/src/drop-zone/index.tsx +17 -76
  398. package/src/drop-zone/style.scss +51 -16
  399. package/src/dropdown-menu/index.tsx +1 -0
  400. package/src/dropdown-menu-v2/index.tsx +0 -1
  401. package/src/dropdown-menu-v2/styles.ts +0 -1
  402. package/src/dropdown-menu-v2/types.ts +0 -1
  403. package/src/font-size-picker/font-size-picker-select.tsx +1 -1
  404. package/src/font-size-picker/index.tsx +1 -1
  405. package/src/font-size-picker/test/index.tsx +6 -6
  406. package/src/font-size-picker/utils.ts +0 -5
  407. package/src/form-token-field/token.tsx +2 -0
  408. package/src/higher-order/navigate-regions/style.scss +25 -13
  409. package/src/higher-order/with-spoken-messages/index.tsx +1 -2
  410. package/src/lock-unlock.js +1 -1
  411. package/src/menu-items-choice/types.ts +2 -1
  412. package/src/palette-edit/index.tsx +33 -45
  413. package/src/palette-edit/test/index.tsx +3 -4
  414. package/src/palette-edit/types.ts +1 -3
  415. package/src/popover/index.tsx +0 -2
  416. package/src/popover/utils.ts +0 -1
  417. package/src/private-apis.ts +2 -5
  418. package/src/progress-bar/styles.ts +18 -9
  419. package/src/radio-group/context.tsx +0 -1
  420. package/src/radio-group/index.tsx +0 -1
  421. package/src/radio-group/radio.tsx +0 -1
  422. package/src/range-control/index.tsx +2 -0
  423. package/src/range-control/styles/range-control-styles.ts +6 -2
  424. package/src/resizable-box/resize-tooltip/utils.ts +1 -1
  425. package/src/select-control/index.tsx +3 -4
  426. package/src/select-control/styles/select-control-styles.ts +17 -6
  427. package/src/tab-panel/index.tsx +0 -1
  428. package/src/tabs/index.tsx +0 -1
  429. package/src/tabs/stories/index.story.tsx +25 -18
  430. package/src/tabs/styles.ts +18 -14
  431. package/src/tabs/tablist.tsx +187 -43
  432. package/src/tabs/types.ts +0 -1
  433. package/src/theme/stories/index.story.tsx +2 -0
  434. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +0 -1
  435. package/src/toggle-group-control/toggle-group-control/component.tsx +0 -2
  436. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +0 -2
  437. package/src/toolbar/toolbar/README.md +9 -0
  438. package/src/toolbar/toolbar/style.scss +7 -0
  439. package/src/toolbar/toolbar/toolbar-container.tsx +0 -1
  440. package/src/toolbar/toolbar/types.ts +6 -0
  441. package/src/toolbar/toolbar-button/index.tsx +30 -17
  442. package/src/toolbar/toolbar-button/types.ts +19 -0
  443. package/src/toolbar/toolbar-context/index.ts +0 -1
  444. package/src/toolbar/toolbar-item/index.tsx +1 -1
  445. package/src/tooltip/index.tsx +3 -2
  446. package/src/tooltip/test/index.tsx +18 -0
  447. package/src/tooltip/types.ts +4 -0
  448. package/src/unit-control/index.tsx +3 -2
  449. package/src/unit-control/styles/unit-control-styles.ts +10 -4
  450. package/src/utils/hooks/use-update-effect.js +8 -1
  451. package/tsconfig.tsbuildinfo +1 -1
@@ -15,6 +15,10 @@ export type TooltipProps = {
15
15
  * **Note**: Accepts only one child element.
16
16
  */
17
17
  children: React.ReactElement;
18
+ /**
19
+ * Custom class name for the tooltip.
20
+ */
21
+ className?: string;
18
22
  /**
19
23
  * Option to hide the tooltip when the anchor is clicked.
20
24
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tooltip/types.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAE,UAAU,CAAE,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAE,UAAU,CAAE,CAAC;IACvC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,iBAAiB,EAAE,OAAO,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tooltip/types.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAE,UAAU,CAAE,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAE,UAAU,CAAE,CAAC;IACvC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,iBAAiB,EAAE,OAAO,CAAC;CAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/unit-control/index.tsx"],"names":[],"mappings":";AA2BA,OAAO,KAAK,EAAoB,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAiN7E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW;;;;;;;;8kLAAuC,CAAC;AAEhE,OAAO,EAAE,gCAAgC,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC3E,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/unit-control/index.tsx"],"names":[],"mappings":";AA2BA,OAAO,KAAK,EAAoB,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAkN7E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW;;;;;;;;8kLAAuC,CAAC;AAEhE,OAAO,EAAE,gCAAgC,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC3E,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unit-control-styles.d.ts","sourceRoot":"","sources":["../../../src/unit-control/styles/unit-control-styles.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAK3C,KAAK,WAAW,GAAG;IAClB,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAKF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;UAWtB,CAAC;AAmCF,eAAO,MAAM,SAAS;;;uHAQrB,CAAC;AAiDF,eAAO,MAAM,UAAU;;;mIAqBtB,CAAC"}
1
+ {"version":3,"file":"unit-control-styles.d.ts","sourceRoot":"","sources":["../../../src/unit-control/styles/unit-control-styles.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAK3C,KAAK,WAAW,GAAG;IAClB,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAKF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;UAWtB,CAAC;AA0CF,eAAO,MAAM,SAAS;;;uHAQrB,CAAC;AAgDF,eAAO,MAAM,UAAU;;;mIAqBtB,CAAC"}
@@ -2,7 +2,7 @@ export default useUpdateEffect;
2
2
  /**
3
3
  * A `React.useEffect` that will not run on the first render.
4
4
  * Source:
5
- * https://github.com/ariakit/ariakit/blob/reakit/packages/reakit-utils/src/useUpdateEffect.ts
5
+ * https://github.com/ariakit/ariakit/blob/main/packages/ariakit-react-core/src/utils/hooks.ts
6
6
  *
7
7
  * @param {import('react').EffectCallback} effect
8
8
  * @param {import('react').DependencyList} deps
@@ -1 +1 @@
1
- {"version":3,"file":"use-update-effect.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/use-update-effect.js"],"names":[],"mappings":";AAKA;;;;;;;GAOG;AACH,yCAHW,OAAO,OAAO,EAAE,cAAc,QAC9B,OAAO,OAAO,EAAE,cAAc,QAgBxC"}
1
+ {"version":3,"file":"use-update-effect.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/use-update-effect.js"],"names":[],"mappings":";AAKA;;;;;;;GAOG;AACH,yCAHW,OAAO,OAAO,EAAE,cAAc,QAC9B,OAAO,OAAO,EAAE,cAAc,QAuBxC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/components",
3
- "version": "28.1.0",
3
+ "version": "28.3.0",
4
4
  "description": "UI components for WordPress.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -43,23 +43,23 @@
43
43
  "@types/gradient-parser": "0.1.3",
44
44
  "@types/highlight-words-core": "1.2.1",
45
45
  "@use-gesture/react": "^10.3.1",
46
- "@wordpress/a11y": "^4.1.0",
47
- "@wordpress/compose": "^7.1.0",
48
- "@wordpress/date": "^5.1.0",
49
- "@wordpress/deprecated": "^4.1.0",
50
- "@wordpress/dom": "^4.1.0",
51
- "@wordpress/element": "^6.1.0",
52
- "@wordpress/escape-html": "^3.1.0",
53
- "@wordpress/hooks": "^4.1.0",
54
- "@wordpress/html-entities": "^4.1.0",
55
- "@wordpress/i18n": "^5.1.0",
56
- "@wordpress/icons": "^10.1.0",
57
- "@wordpress/is-shallow-equal": "^5.1.0",
58
- "@wordpress/keycodes": "^4.1.0",
59
- "@wordpress/primitives": "^4.1.0",
60
- "@wordpress/private-apis": "^1.1.0",
61
- "@wordpress/rich-text": "^7.1.0",
62
- "@wordpress/warning": "^3.1.0",
46
+ "@wordpress/a11y": "^4.3.0",
47
+ "@wordpress/compose": "^7.3.0",
48
+ "@wordpress/date": "^5.3.0",
49
+ "@wordpress/deprecated": "^4.3.0",
50
+ "@wordpress/dom": "^4.3.0",
51
+ "@wordpress/element": "^6.3.0",
52
+ "@wordpress/escape-html": "^3.3.0",
53
+ "@wordpress/hooks": "^4.3.0",
54
+ "@wordpress/html-entities": "^4.3.0",
55
+ "@wordpress/i18n": "^5.3.0",
56
+ "@wordpress/icons": "^10.3.0",
57
+ "@wordpress/is-shallow-equal": "^5.3.0",
58
+ "@wordpress/keycodes": "^4.3.0",
59
+ "@wordpress/primitives": "^4.3.0",
60
+ "@wordpress/private-apis": "^1.3.0",
61
+ "@wordpress/rich-text": "^7.3.0",
62
+ "@wordpress/warning": "^3.3.0",
63
63
  "change-case": "^4.1.2",
64
64
  "clsx": "^2.1.1",
65
65
  "colord": "^2.7.0",
@@ -86,5 +86,5 @@
86
86
  "publishConfig": {
87
87
  "access": "public"
88
88
  },
89
- "gitHead": "66d3bf12e67d16deddc4b4a9ec42e1d0bed3479a"
89
+ "gitHead": "122867d355ca4edc63d3a3bbd9411d3a2e1458df"
90
90
  }
@@ -6,7 +6,6 @@
6
6
  * @see https://www.framer.com/docs/animation/
7
7
  */
8
8
 
9
- // eslint-disable-next-line no-restricted-imports
10
9
  export {
11
10
  motion as __unstableMotion,
12
11
  AnimatePresence as __unstableAnimatePresence,
@@ -58,6 +58,7 @@ function ListBox( {
58
58
  id={ `components-autocomplete-item-${ instanceId }-${ option.key }` }
59
59
  role="option"
60
60
  aria-selected={ index === selectedIndex }
61
+ accessibleWhenDisabled
61
62
  disabled={ option.isDisabled }
62
63
  className={ clsx(
63
64
  'components-autocomplete__result',
@@ -13,7 +13,6 @@ import {
13
13
  useRef,
14
14
  useMemo,
15
15
  } from '@wordpress/element';
16
- import { __, _n } from '@wordpress/i18n';
17
16
  import { useInstanceId, useMergeRefs, useRefEffect } from '@wordpress/compose';
18
17
  import {
19
18
  create,
@@ -2,6 +2,12 @@
2
2
  * External dependencies
3
3
  */
4
4
  import clsx from 'clsx';
5
+ import type { ForwardedRef } from 'react';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { forwardRef } from '@wordpress/element';
5
11
 
6
12
  /**
7
13
  * Internal dependencies
@@ -116,14 +122,16 @@ const UnconnectedBaseControl = (
116
122
  * </BaseControl>
117
123
  * );
118
124
  */
119
- export const VisualLabel = ( {
120
- className,
121
- children,
122
- ...props
123
- }: WordPressComponentProps< BaseControlVisualLabelProps, 'span' > ) => {
125
+ const UnforwardedVisualLabel = (
126
+ props: WordPressComponentProps< BaseControlVisualLabelProps, 'span' >,
127
+ ref: ForwardedRef< any >
128
+ ) => {
129
+ const { className, children, ...restProps } = props;
130
+
124
131
  return (
125
132
  <StyledVisualLabel
126
- { ...props }
133
+ ref={ ref }
134
+ { ...restProps }
127
135
  className={ clsx( 'components-base-control__label', className ) }
128
136
  >
129
137
  { children }
@@ -131,6 +139,8 @@ export const VisualLabel = ( {
131
139
  );
132
140
  };
133
141
 
142
+ export const VisualLabel = forwardRef( UnforwardedVisualLabel );
143
+
134
144
  export const BaseControl = Object.assign(
135
145
  contextConnectWithoutRef( UnconnectedBaseControl, 'BaseControl' ),
136
146
  { VisualLabel }
@@ -55,7 +55,6 @@ WithHelpText.args = {
55
55
  * otherwise use if the `label` prop was passed.
56
56
  */
57
57
  export const WithVisualLabel: StoryFn< typeof BaseControl > = ( props ) => {
58
- // @ts-expect-error - Unclear how to fix, see also https://github.com/WordPress/gutenberg/pull/39468#discussion_r827150516
59
58
  BaseControl.VisualLabel.displayName = 'BaseControl.VisualLabel';
60
59
 
61
60
  return (
@@ -1,8 +1,3 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
1
  /**
7
2
  * Internal dependencies
8
3
  */
@@ -115,6 +115,17 @@ The presence of a `href` prop determines whether an `anchor` element is rendered
115
115
 
116
116
  Props not included in this set will be applied to the `a` or `button` element.
117
117
 
118
+ #### `accessibleWhenDisabled`: `boolean`
119
+
120
+ Whether to keep the button focusable when disabled.
121
+
122
+ In most cases, it is recommended to set this to `true`. Disabling a control without maintaining focusability can cause accessibility issues, by hiding their presence from screen reader users, or by preventing focus from returning to a trigger element.
123
+
124
+ Learn more about the [focusability of disabled controls](https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#focusabilityofdisabledcontrols) in the WAI-ARIA Authoring Practices Guide.
125
+
126
+ - Required: No
127
+ - Default: `false`
128
+
118
129
  #### `children`: `ReactNode`
119
130
 
120
131
  The button's children.
@@ -137,6 +148,8 @@ An accessible description for the button.
137
148
 
138
149
  Whether the button is disabled. If `true`, this will force a `button` element to be rendered, even when an `href` is given.
139
150
 
151
+ In most cases, it is recommended to also set the `accessibleWhenDisabled` prop to `true`.
152
+
140
153
  - Required: No
141
154
 
142
155
  #### `href`: `string`
@@ -29,6 +29,7 @@ import { positionToPlacement } from '../popover/utils';
29
29
  const disabledEventsOnDisabledButton = [ 'onMouseDown', 'onClick' ] as const;
30
30
 
31
31
  function useDeprecatedProps( {
32
+ __experimentalIsFocusable,
32
33
  isDefault,
33
34
  isPrimary,
34
35
  isSecondary,
@@ -43,7 +44,8 @@ function useDeprecatedProps( {
43
44
  let computedSize = size;
44
45
  let computedVariant = variant;
45
46
 
46
- const newProps: { 'aria-pressed'?: boolean } = {
47
+ const newProps = {
48
+ accessibleWhenDisabled: __experimentalIsFocusable,
47
49
  // @todo Mark `isPressed` as deprecated
48
50
  'aria-pressed': isPressed,
49
51
  };
@@ -91,6 +93,7 @@ export function UnforwardedButton(
91
93
  ) {
92
94
  const {
93
95
  __next40pxDefaultSize,
96
+ accessibleWhenDisabled,
94
97
  isBusy,
95
98
  isDestructive,
96
99
  className,
@@ -106,7 +109,6 @@ export function UnforwardedButton(
106
109
  size = 'default',
107
110
  text,
108
111
  variant,
109
- __experimentalIsFocusable: isFocusable,
110
112
  describedBy,
111
113
  ...buttonOrAnchorProps
112
114
  } = useDeprecatedProps( props );
@@ -159,7 +161,7 @@ export function UnforwardedButton(
159
161
  'has-icon': !! icon,
160
162
  } );
161
163
 
162
- const trulyDisabled = disabled && ! isFocusable;
164
+ const trulyDisabled = disabled && ! accessibleWhenDisabled;
163
165
  const Tag = href !== undefined && ! trulyDisabled ? 'a' : 'button';
164
166
  const buttonProps: ComponentPropsWithoutRef< 'button' > =
165
167
  Tag === 'button'
@@ -177,7 +179,7 @@ export function UnforwardedButton(
177
179
  const disableEventProps: {
178
180
  [ key: string ]: ( event: MouseEvent ) => void;
179
181
  } = {};
180
- if ( disabled && isFocusable ) {
182
+ if ( disabled && accessibleWhenDisabled ) {
181
183
  // In this case, the button will be disabled, but still focusable and
182
184
  // perceivable by screen reader users.
183
185
  buttonProps[ 'aria-disabled' ] = true;
@@ -39,12 +39,13 @@ export const VariantStates: StoryFn< typeof Button > = (
39
39
  key={ variant ?? 'undefined' }
40
40
  >
41
41
  <Button { ...props } variant={ variant } />
42
+ { /* eslint-disable-next-line no-restricted-syntax */ }
42
43
  <Button { ...props } variant={ variant } disabled />
43
44
  <Button
44
45
  { ...props }
45
46
  variant={ variant }
46
47
  disabled
47
- __experimentalIsFocusable
48
+ accessibleWhenDisabled
48
49
  />
49
50
  <Button { ...props } variant={ variant } isBusy />
50
51
  <Button { ...props } variant={ variant } isDestructive />
@@ -235,13 +235,14 @@ describe( 'Button', () => {
235
235
  } );
236
236
 
237
237
  it( 'should add a disabled prop to the button', () => {
238
+ // eslint-disable-next-line no-restricted-syntax
238
239
  render( <Button disabled /> );
239
240
 
240
241
  expect( screen.getByRole( 'button' ) ).toBeDisabled();
241
242
  } );
242
243
 
243
244
  it( 'should add only aria-disabled attribute when disabled and isFocusable are true', () => {
244
- render( <Button disabled __experimentalIsFocusable /> );
245
+ render( <Button disabled accessibleWhenDisabled /> );
245
246
  const button = screen.getByRole( 'button' );
246
247
 
247
248
  expect( button ).toBeEnabled();
@@ -536,6 +537,7 @@ describe( 'Button', () => {
536
537
 
537
538
  it( 'should become a button again when disabled is supplied', () => {
538
539
  // @ts-expect-error - a button should not have `href`
540
+ // eslint-disable-next-line no-restricted-syntax
539
541
  render( <Button href="https://wordpress.org/" disabled /> );
540
542
 
541
543
  expect( screen.getByRole( 'button' ) ).toBeVisible();
@@ -617,6 +619,15 @@ describe( 'Button', () => {
617
619
  'mixed'
618
620
  );
619
621
  } );
622
+
623
+ it( 'should not break when the legacy __experimentalIsFocusable prop is passed', () => {
624
+ // eslint-disable-next-line no-restricted-syntax
625
+ render( <Button disabled __experimentalIsFocusable /> );
626
+ const button = screen.getByRole( 'button' );
627
+
628
+ expect( button ).toBeEnabled();
629
+ expect( button ).toHaveAttribute( 'aria-disabled' );
630
+ } );
620
631
  } );
621
632
 
622
633
  describe( 'static typing', () => {
@@ -624,15 +635,19 @@ describe( 'Button', () => {
624
635
  <Button href="foo" />
625
636
  { /* @ts-expect-error - `target` requires `href` */ }
626
637
  <Button target="foo" />
638
+
639
+ { /* eslint-disable no-restricted-syntax */ }
627
640
  { /* @ts-expect-error - `disabled` is only for buttons */ }
628
641
  <Button href="foo" disabled />
642
+ { /* eslint-enable no-restricted-syntax */ }
643
+
629
644
  <Button href="foo" type="image/png" />
630
645
  { /* @ts-expect-error - if button, type must be submit/reset/button */ }
631
646
  <Button type="image/png" />
632
647
  { /* @ts-expect-error */ }
633
648
  <Button type="invalidtype" />
634
649
  { /* @ts-expect-error - although the runtime behavior will allow this to be an anchor, this is probably a mistake. */ }
635
- <Button disabled __experimentalIsFocusable href="foo" />
650
+ <Button disabled accessibleWhenDisabled href="foo" />
636
651
  </>;
637
652
  } );
638
653
  } );
@@ -25,6 +25,19 @@ type BaseButtonProps = {
25
25
  * @default false
26
26
  */
27
27
  __next40pxDefaultSize?: boolean;
28
+ /**
29
+ * Whether to keep the button focusable when disabled.
30
+ *
31
+ * In most cases, it is recommended to set this to `true`. Disabling a control without maintaining focusability
32
+ * can cause accessibility issues, by hiding their presence from screen reader users,
33
+ * or by preventing focus from returning to a trigger element.
34
+ *
35
+ * Learn more about the [focusability of disabled controls](https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#focusabilityofdisabledcontrols)
36
+ * in the WAI-ARIA Authoring Practices Guide.
37
+ *
38
+ * @default false
39
+ */
40
+ accessibleWhenDisabled?: boolean;
28
41
  /**
29
42
  * The button's children.
30
43
  */
@@ -105,28 +118,24 @@ type BaseButtonProps = {
105
118
  * 'link' (the link button styles)
106
119
  */
107
120
  variant?: 'primary' | 'secondary' | 'tertiary' | 'link';
108
- /**
109
- * Whether to keep the button focusable when disabled.
110
- *
111
- * @default false
112
- */
113
- __experimentalIsFocusable?: boolean;
114
121
  };
115
122
 
116
123
  type _ButtonProps = {
117
124
  /**
118
- * Whether the button is disabled.
125
+ * Whether the button is disabled. If `true`, this will force a `button` element
126
+ * to be rendered, even when an `href` is given.
119
127
  *
120
- * If `true`, this will force a `button` element to be rendered, even when an `href` is given.
128
+ * In most cases, it is recommended to also set the `accessibleWhenDisabled` prop to `true`.
121
129
  */
122
130
  disabled?: boolean;
123
131
  };
124
132
 
125
133
  type AnchorProps = {
126
134
  /**
127
- * Whether the button is disabled.
135
+ * Whether the button is disabled. If `true`, this will force a `button` element
136
+ * to be rendered, even when an `href` is given.
128
137
  *
129
- * If `true`, this will force a `button` element to be rendered, even when an `href` is given.
138
+ * In most cases, it is recommended to also set the `accessibleWhenDisabled` prop to `true`.
130
139
  */
131
140
  disabled?: false;
132
141
  /**
@@ -140,6 +149,14 @@ type AnchorProps = {
140
149
  };
141
150
 
142
151
  export type DeprecatedButtonProps = {
152
+ /**
153
+ * Whether to keep the button focusable when disabled.
154
+ *
155
+ * @default false
156
+ * @deprecated Use the `accessibleWhenDisabled` prop instead.
157
+ * @ignore
158
+ */
159
+ __experimentalIsFocusable?: boolean;
143
160
  /**
144
161
  * Gives the button a default style.
145
162
  *
@@ -346,6 +346,8 @@ function ComboboxControl( props: ComboboxControlProps ) {
346
346
  <Button
347
347
  className="components-combobox-control__reset"
348
348
  icon={ closeSmall }
349
+ // Disable reason: Focus returns to input field when reset is clicked.
350
+ // eslint-disable-next-line no-restricted-syntax
349
351
  disabled={ ! value }
350
352
  onClick={ handleOnReset }
351
353
  label={ __( 'Reset' ) }
@@ -8,7 +8,6 @@
8
8
  * @see https://ariakit.org/components/composite
9
9
  */
10
10
 
11
- /* eslint-disable-next-line no-restricted-imports */
12
11
  export {
13
12
  Composite,
14
13
  CompositeGroup,
@@ -18,5 +17,4 @@ export {
18
17
  useCompositeStore,
19
18
  } from '@ariakit/react';
20
19
 
21
- /* eslint-disable-next-line no-restricted-imports */
22
20
  export type { CompositeStore, CompositeStoreProps } from '@ariakit/react';
@@ -3,6 +3,11 @@
3
3
  */
4
4
  import type { StoryFn } from '@storybook/react';
5
5
 
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState } from '@wordpress/element';
10
+
6
11
  /**
7
12
  * Internal dependencies
8
13
  */
@@ -20,10 +25,34 @@ export default {
20
25
  type: 'radio',
21
26
  },
22
27
  },
28
+ onChange: { control: { type: null } },
29
+ value: { control: { type: null } },
30
+ },
31
+ parameters: {
32
+ actions: { argTypesRegex: '^on.*' },
23
33
  },
24
34
  };
25
35
 
26
- export const Default: StoryFn = CustomSelectControl.bind( {} );
36
+ const Template: StoryFn< typeof CustomSelectControl > = ( props ) => {
37
+ const [ value, setValue ] = useState( props.options[ 0 ] );
38
+
39
+ const onChange: React.ComponentProps<
40
+ typeof CustomSelectControl
41
+ >[ 'onChange' ] = ( changeObject: { selectedItem: any } ) => {
42
+ setValue( changeObject.selectedItem );
43
+ props.onChange?.( changeObject );
44
+ };
45
+
46
+ return (
47
+ <CustomSelectControl
48
+ { ...props }
49
+ onChange={ onChange }
50
+ value={ value }
51
+ />
52
+ );
53
+ };
54
+
55
+ export const Default: StoryFn = Template.bind( {} );
27
56
  Default.args = {
28
57
  label: 'Label',
29
58
  options: [
@@ -51,7 +80,7 @@ Default.args = {
51
80
  ],
52
81
  };
53
82
 
54
- export const WithLongLabels: StoryFn = CustomSelectControl.bind( {} );
83
+ export const WithLongLabels: StoryFn = Template.bind( {} );
55
84
  WithLongLabels.args = {
56
85
  ...Default.args,
57
86
  options: [
@@ -70,7 +99,7 @@ WithLongLabels.args = {
70
99
  ],
71
100
  };
72
101
 
73
- export const WithHints: StoryFn = CustomSelectControl.bind( {} );
102
+ export const WithHints: StoryFn = Template.bind( {} );
74
103
  WithHints.args = {
75
104
  ...Default.args,
76
105
  options: [