@wordpress/components 25.7.0 → 25.8.1

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 (630) hide show
  1. package/CHANGELOG.md +66 -1
  2. package/build/animation/index.js +6 -0
  3. package/build/animation/index.js.map +1 -1
  4. package/build/border-control/border-control-dropdown/component.js +1 -1
  5. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  6. package/build/border-control/styles.js +20 -20
  7. package/build/border-control/styles.js.map +1 -1
  8. package/build/box-control/unit-control.js +1 -1
  9. package/build/box-control/unit-control.js.map +1 -1
  10. package/build/button/index.js +9 -1
  11. package/build/button/index.js.map +1 -1
  12. package/build/button/types.js.map +1 -1
  13. package/build/circular-option-picker/circular-option-picker-actions.js +53 -0
  14. package/build/circular-option-picker/circular-option-picker-actions.js.map +1 -0
  15. package/build/circular-option-picker/circular-option-picker-context.js +14 -0
  16. package/build/circular-option-picker/circular-option-picker-context.js.map +1 -0
  17. package/build/circular-option-picker/circular-option-picker-option-group.js +26 -0
  18. package/build/circular-option-picker/circular-option-picker-option-group.js.map +1 -0
  19. package/build/circular-option-picker/circular-option-picker-option.js +122 -0
  20. package/build/circular-option-picker/circular-option-picker-option.js.map +1 -0
  21. package/build/circular-option-picker/circular-option-picker.js +172 -0
  22. package/build/circular-option-picker/circular-option-picker.js.map +1 -0
  23. package/build/circular-option-picker/index.js +29 -137
  24. package/build/circular-option-picker/index.js.map +1 -1
  25. package/build/circular-option-picker/types.js.map +1 -1
  26. package/build/color-palette/index.js +58 -19
  27. package/build/color-palette/index.js.map +1 -1
  28. package/build/color-palette/types.js.map +1 -1
  29. package/build/combobox-control/index.js +0 -3
  30. package/build/combobox-control/index.js.map +1 -1
  31. package/build/composite/index.js.map +1 -1
  32. package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  33. package/build/date-time/time/index.js +6 -1
  34. package/build/date-time/time/index.js.map +1 -1
  35. package/build/date-time/time/timezone.js +1 -1
  36. package/build/date-time/time/timezone.js.map +1 -1
  37. package/build/dropdown/index.js +11 -23
  38. package/build/dropdown/index.js.map +1 -1
  39. package/build/dropdown/types.js.map +1 -1
  40. package/build/dropdown-menu/index.js +7 -1
  41. package/build/dropdown-menu/index.js.map +1 -1
  42. package/build/dropdown-menu/types.js.map +1 -1
  43. package/build/dropdown-menu-v2/styles.js +16 -16
  44. package/build/dropdown-menu-v2/styles.js.map +1 -1
  45. package/build/duotone-picker/color-list-picker/index.js +18 -3
  46. package/build/duotone-picker/color-list-picker/index.js.map +1 -1
  47. package/build/duotone-picker/duotone-picker.js +33 -1
  48. package/build/duotone-picker/duotone-picker.js.map +1 -1
  49. package/build/duotone-picker/types.js.map +1 -1
  50. package/build/focusable-iframe/index.js +0 -4
  51. package/build/focusable-iframe/index.js.map +1 -1
  52. package/build/focusable-iframe/types.js +6 -0
  53. package/build/focusable-iframe/types.js.map +1 -0
  54. package/build/form-token-field/index.js +6 -2
  55. package/build/form-token-field/index.js.map +1 -1
  56. package/build/form-token-field/types.js.map +1 -1
  57. package/build/gradient-picker/index.js +57 -15
  58. package/build/gradient-picker/index.js.map +1 -1
  59. package/build/gradient-picker/types.js.map +1 -1
  60. package/build/higher-order/navigate-regions/index.js.map +1 -1
  61. package/build/higher-order/with-focus-outside/index.js +1 -2
  62. package/build/higher-order/with-focus-outside/index.js.map +1 -1
  63. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  64. package/build/index.js +6 -0
  65. package/build/index.js.map +1 -1
  66. package/build/input-control/styles/input-control-styles.js +22 -22
  67. package/build/input-control/styles/input-control-styles.js.map +1 -1
  68. package/build/mobile/bottom-sheet/index.native.js +1 -0
  69. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  70. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  71. package/build/modal/index.js +12 -3
  72. package/build/modal/index.js.map +1 -1
  73. package/build/modal/types.js.map +1 -1
  74. package/build/navigation/use-navigation-tree-nodes.js.map +1 -1
  75. package/build/notice/index.js +19 -7
  76. package/build/notice/index.js.map +1 -1
  77. package/build/palette-edit/styles.js +10 -10
  78. package/build/palette-edit/styles.js.map +1 -1
  79. package/build/placeholder/index.js +10 -4
  80. package/build/placeholder/index.js.map +1 -1
  81. package/build/popover/index.js +37 -83
  82. package/build/popover/index.js.map +1 -1
  83. package/build/popover/types.js.map +1 -1
  84. package/build/popover/utils.js +9 -41
  85. package/build/popover/utils.js.map +1 -1
  86. package/build/search-control/index.js +12 -3
  87. package/build/search-control/index.js.map +1 -1
  88. package/build/search-control/types.js.map +1 -1
  89. package/build/text/styles.js +7 -7
  90. package/build/text/styles.js.map +1 -1
  91. package/build/toggle-group-control/toggle-group-control/as-button-group.js +30 -45
  92. package/build/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -1
  93. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +40 -41
  94. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  95. package/build/toggle-group-control/toggle-group-control/component.js +10 -5
  96. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  97. package/build/toggle-group-control/toggle-group-control/styles.js +9 -16
  98. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  99. package/build/toggle-group-control/toggle-group-control/utils.js +44 -0
  100. package/build/toggle-group-control/toggle-group-control/utils.js.map +1 -0
  101. package/build/toggle-group-control/toggle-group-control-option-base/component.js +36 -17
  102. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  103. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +10 -8
  104. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  105. package/build/toggle-group-control/types.js.map +1 -1
  106. package/build/toolbar/toolbar/index.js +7 -1
  107. package/build/toolbar/toolbar/index.js.map +1 -1
  108. package/build/toolbar/toolbar-dropdown-menu/index.js +1 -3
  109. package/build/toolbar/toolbar-dropdown-menu/index.js.map +1 -1
  110. package/build/toolbar/toolbar-group/index.js +16 -12
  111. package/build/toolbar/toolbar-group/index.js.map +1 -1
  112. package/build/toolbar/toolbar-group/toolbar-group-collapsed.js +0 -2
  113. package/build/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -1
  114. package/build/toolbar/toolbar-group/toolbar-group-container.js +3 -1
  115. package/build/toolbar/toolbar-group/toolbar-group-container.js.map +1 -1
  116. package/build/toolbar/toolbar-group/types.js +6 -0
  117. package/build/toolbar/toolbar-group/types.js.map +1 -0
  118. package/build/toolbar/toolbar-item/index.js +1 -1
  119. package/build/toolbar/toolbar-item/index.js.map +1 -1
  120. package/build/tooltip/index.js +51 -225
  121. package/build/tooltip/index.js.map +1 -1
  122. package/build/tooltip/types.js +6 -0
  123. package/build/tooltip/types.js.map +1 -0
  124. package/build/ui/context/context-connect.js.map +1 -1
  125. package/build/ui/context/wordpress-component.js.map +1 -1
  126. package/build/unit-control/index.js.map +1 -1
  127. package/build/unit-control/styles/unit-control-styles.js +7 -7
  128. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  129. package/build/utils/colors-values.js +1 -1
  130. package/build/utils/colors-values.js.map +1 -1
  131. package/build/utils/use-deprecated-props.js.map +1 -1
  132. package/build-module/animation/index.js +1 -1
  133. package/build-module/animation/index.js.map +1 -1
  134. package/build-module/border-control/border-control-dropdown/component.js +1 -1
  135. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  136. package/build-module/border-control/styles.js +20 -20
  137. package/build-module/border-control/styles.js.map +1 -1
  138. package/build-module/box-control/unit-control.js +1 -1
  139. package/build-module/box-control/unit-control.js.map +1 -1
  140. package/build-module/button/index.js +9 -1
  141. package/build-module/button/index.js.map +1 -1
  142. package/build-module/button/types.js.map +1 -1
  143. package/build-module/circular-option-picker/circular-option-picker-actions.js +44 -0
  144. package/build-module/circular-option-picker/circular-option-picker-actions.js.map +1 -0
  145. package/build-module/circular-option-picker/circular-option-picker-context.js +11 -0
  146. package/build-module/circular-option-picker/circular-option-picker-context.js.map +1 -0
  147. package/build-module/circular-option-picker/circular-option-picker-option-group.js +23 -0
  148. package/build-module/circular-option-picker/circular-option-picker-option-group.js.map +1 -0
  149. package/build-module/circular-option-picker/circular-option-picker-option.js +114 -0
  150. package/build-module/circular-option-picker/circular-option-picker-option.js.map +1 -0
  151. package/build-module/circular-option-picker/circular-option-picker.js +165 -0
  152. package/build-module/circular-option-picker/circular-option-picker.js.map +1 -0
  153. package/build-module/circular-option-picker/index.js +4 -132
  154. package/build-module/circular-option-picker/index.js.map +1 -1
  155. package/build-module/circular-option-picker/types.js.map +1 -1
  156. package/build-module/color-palette/index.js +58 -19
  157. package/build-module/color-palette/index.js.map +1 -1
  158. package/build-module/color-palette/types.js.map +1 -1
  159. package/build-module/combobox-control/index.js +0 -3
  160. package/build-module/combobox-control/index.js.map +1 -1
  161. package/build-module/composite/index.js +2 -0
  162. package/build-module/composite/index.js.map +1 -1
  163. package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  164. package/build-module/date-time/time/index.js +6 -1
  165. package/build-module/date-time/time/index.js.map +1 -1
  166. package/build-module/date-time/time/timezone.js +1 -1
  167. package/build-module/date-time/time/timezone.js.map +1 -1
  168. package/build-module/dropdown/index.js +12 -24
  169. package/build-module/dropdown/index.js.map +1 -1
  170. package/build-module/dropdown/types.js.map +1 -1
  171. package/build-module/dropdown-menu/index.js +7 -1
  172. package/build-module/dropdown-menu/index.js.map +1 -1
  173. package/build-module/dropdown-menu/types.js.map +1 -1
  174. package/build-module/dropdown-menu-v2/styles.js +16 -16
  175. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  176. package/build-module/duotone-picker/color-list-picker/index.js +18 -3
  177. package/build-module/duotone-picker/color-list-picker/index.js.map +1 -1
  178. package/build-module/duotone-picker/duotone-picker.js +33 -1
  179. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  180. package/build-module/duotone-picker/types.js.map +1 -1
  181. package/build-module/focusable-iframe/index.js +2 -3
  182. package/build-module/focusable-iframe/index.js.map +1 -1
  183. package/build-module/focusable-iframe/types.js +2 -0
  184. package/build-module/focusable-iframe/types.js.map +1 -0
  185. package/build-module/form-token-field/index.js +6 -2
  186. package/build-module/form-token-field/index.js.map +1 -1
  187. package/build-module/form-token-field/types.js.map +1 -1
  188. package/build-module/gradient-picker/index.js +57 -15
  189. package/build-module/gradient-picker/index.js.map +1 -1
  190. package/build-module/gradient-picker/types.js.map +1 -1
  191. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  192. package/build-module/higher-order/with-focus-outside/index.js +1 -3
  193. package/build-module/higher-order/with-focus-outside/index.js.map +1 -1
  194. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  195. package/build-module/index.js +1 -1
  196. package/build-module/index.js.map +1 -1
  197. package/build-module/input-control/styles/input-control-styles.js +23 -23
  198. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  199. package/build-module/mobile/bottom-sheet/index.native.js +1 -0
  200. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  201. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  202. package/build-module/modal/index.js +12 -3
  203. package/build-module/modal/index.js.map +1 -1
  204. package/build-module/modal/types.js.map +1 -1
  205. package/build-module/navigation/use-navigation-tree-nodes.js.map +1 -1
  206. package/build-module/notice/index.js +19 -7
  207. package/build-module/notice/index.js.map +1 -1
  208. package/build-module/palette-edit/styles.js +10 -10
  209. package/build-module/palette-edit/styles.js.map +1 -1
  210. package/build-module/placeholder/index.js +11 -4
  211. package/build-module/placeholder/index.js.map +1 -1
  212. package/build-module/popover/index.js +38 -84
  213. package/build-module/popover/index.js.map +1 -1
  214. package/build-module/popover/types.js.map +1 -1
  215. package/build-module/popover/utils.js +8 -39
  216. package/build-module/popover/utils.js.map +1 -1
  217. package/build-module/search-control/index.js +12 -3
  218. package/build-module/search-control/index.js.map +1 -1
  219. package/build-module/search-control/types.js.map +1 -1
  220. package/build-module/text/styles.js +7 -7
  221. package/build-module/text/styles.js.map +1 -1
  222. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js +32 -47
  223. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -1
  224. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +41 -42
  225. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  226. package/build-module/toggle-group-control/toggle-group-control/component.js +10 -6
  227. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  228. package/build-module/toggle-group-control/toggle-group-control/styles.js +8 -14
  229. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  230. package/build-module/toggle-group-control/toggle-group-control/utils.js +42 -0
  231. package/build-module/toggle-group-control/toggle-group-control/utils.js.map +1 -0
  232. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +35 -16
  233. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  234. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +8 -7
  235. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  236. package/build-module/toggle-group-control/types.js.map +1 -1
  237. package/build-module/toolbar/toolbar/index.js +7 -1
  238. package/build-module/toolbar/toolbar/index.js.map +1 -1
  239. package/build-module/toolbar/toolbar-dropdown-menu/index.js +5 -3
  240. package/build-module/toolbar/toolbar-dropdown-menu/index.js.map +1 -1
  241. package/build-module/toolbar/toolbar-group/index.js +15 -12
  242. package/build-module/toolbar/toolbar-group/index.js.map +1 -1
  243. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.js +0 -2
  244. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -1
  245. package/build-module/toolbar/toolbar-group/toolbar-group-container.js +3 -1
  246. package/build-module/toolbar/toolbar-group/toolbar-group-container.js.map +1 -1
  247. package/build-module/toolbar/toolbar-group/types.js +2 -0
  248. package/build-module/toolbar/toolbar-group/types.js.map +1 -0
  249. package/build-module/toolbar/toolbar-item/index.js +1 -1
  250. package/build-module/toolbar/toolbar-item/index.js.map +1 -1
  251. package/build-module/tooltip/index.js +53 -224
  252. package/build-module/tooltip/index.js.map +1 -1
  253. package/build-module/tooltip/types.js +2 -0
  254. package/build-module/tooltip/types.js.map +1 -0
  255. package/build-module/ui/context/context-connect.js.map +1 -1
  256. package/build-module/ui/context/wordpress-component.js.map +1 -1
  257. package/build-module/unit-control/index.js.map +1 -1
  258. package/build-module/unit-control/styles/unit-control-styles.js +7 -7
  259. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  260. package/build-module/utils/colors-values.js +1 -1
  261. package/build-module/utils/colors-values.js.map +1 -1
  262. package/build-module/utils/use-deprecated-props.js.map +1 -1
  263. package/build-style/style-rtl.css +35 -73
  264. package/build-style/style.css +35 -73
  265. package/build-types/animation/index.d.ts +1 -1
  266. package/build-types/animation/index.d.ts.map +1 -1
  267. package/build-types/base-control/hooks.d.ts +1 -1
  268. package/build-types/border-box-control/border-box-control/component.d.ts +1 -1
  269. package/build-types/border-box-control/border-box-control/hook.d.ts +46 -46
  270. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +51 -51
  271. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +1 -1
  272. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +46 -46
  273. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +46 -46
  274. package/build-types/border-box-control/stories/index.story.d.ts +2 -2
  275. package/build-types/border-control/border-control/hook.d.ts +45 -45
  276. package/build-types/border-control/border-control-dropdown/hook.d.ts +45 -45
  277. package/build-types/border-control/border-control-style-picker/hook.d.ts +45 -45
  278. package/build-types/border-control/stories/index.story.d.ts +6 -6
  279. package/build-types/box-control/styles/box-control-styles.d.ts +1 -1
  280. package/build-types/button/deprecated.d.ts +16 -22
  281. package/build-types/button/deprecated.d.ts.map +1 -1
  282. package/build-types/button/index.d.ts.map +1 -1
  283. package/build-types/button/types.d.ts +0 -4
  284. package/build-types/button/types.d.ts.map +1 -1
  285. package/build-types/card/card/hook.d.ts +46 -46
  286. package/build-types/card/card-body/hook.d.ts +46 -46
  287. package/build-types/card/card-divider/hook.d.ts +47 -47
  288. package/build-types/card/card-footer/hook.d.ts +46 -46
  289. package/build-types/card/card-header/hook.d.ts +46 -46
  290. package/build-types/card/card-media/hook.d.ts +46 -46
  291. package/build-types/card/stories/index.story.d.ts +2 -2
  292. package/build-types/circular-option-picker/circular-option-picker-actions.d.ts +7 -0
  293. package/build-types/circular-option-picker/circular-option-picker-actions.d.ts.map +1 -0
  294. package/build-types/circular-option-picker/circular-option-picker-context.d.ts +7 -0
  295. package/build-types/circular-option-picker/circular-option-picker-context.d.ts.map +1 -0
  296. package/build-types/circular-option-picker/circular-option-picker-option-group.d.ts +7 -0
  297. package/build-types/circular-option-picker/circular-option-picker-option-group.d.ts.map +1 -0
  298. package/build-types/circular-option-picker/circular-option-picker-option.d.ts +4 -0
  299. package/build-types/circular-option-picker/circular-option-picker-option.d.ts.map +1 -0
  300. package/build-types/circular-option-picker/circular-option-picker.d.ts +11 -0
  301. package/build-types/circular-option-picker/circular-option-picker.d.ts.map +1 -0
  302. package/build-types/circular-option-picker/index.d.ts +5 -56
  303. package/build-types/circular-option-picker/index.d.ts.map +1 -1
  304. package/build-types/circular-option-picker/stories/index.story.d.ts +3 -1
  305. package/build-types/circular-option-picker/stories/index.story.d.ts.map +1 -1
  306. package/build-types/circular-option-picker/test/index.d.ts +2 -0
  307. package/build-types/circular-option-picker/test/index.d.ts.map +1 -0
  308. package/build-types/circular-option-picker/types.d.ts +53 -1
  309. package/build-types/circular-option-picker/types.d.ts.map +1 -1
  310. package/build-types/color-palette/index.d.ts +3 -19
  311. package/build-types/color-palette/index.d.ts.map +1 -1
  312. package/build-types/color-palette/stories/index.story.d.ts +3 -36
  313. package/build-types/color-palette/stories/index.story.d.ts.map +1 -1
  314. package/build-types/color-palette/styles.d.ts +1 -1
  315. package/build-types/color-palette/types.d.ts +31 -1
  316. package/build-types/color-palette/types.d.ts.map +1 -1
  317. package/build-types/color-picker/component.d.ts +1 -1
  318. package/build-types/color-picker/stories/index.story.d.ts +1 -1
  319. package/build-types/color-picker/styles.d.ts +6 -6
  320. package/build-types/combobox-control/index.d.ts.map +1 -1
  321. package/build-types/combobox-control/stories/index.story.d.ts +2 -2
  322. package/build-types/composite/index.d.ts +14 -1
  323. package/build-types/composite/index.d.ts.map +1 -1
  324. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +2 -2
  325. package/build-types/date-time/date/styles.d.ts +3 -3
  326. package/build-types/date-time/date-time/styles.d.ts +2 -2
  327. package/build-types/date-time/time/index.d.ts.map +1 -1
  328. package/build-types/date-time/time/styles.d.ts +12 -12
  329. package/build-types/dropdown/index.d.ts.map +1 -1
  330. package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
  331. package/build-types/dropdown/types.d.ts +12 -4
  332. package/build-types/dropdown/types.d.ts.map +1 -1
  333. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  334. package/build-types/dropdown-menu/stories/index.story.d.ts.map +1 -1
  335. package/build-types/dropdown-menu/types.d.ts +22 -5
  336. package/build-types/dropdown-menu/types.d.ts.map +1 -1
  337. package/build-types/duotone-picker/color-list-picker/index.d.ts.map +1 -1
  338. package/build-types/duotone-picker/duotone-picker.d.ts +1 -1
  339. package/build-types/duotone-picker/duotone-picker.d.ts.map +1 -1
  340. package/build-types/duotone-picker/types.d.ts +31 -1
  341. package/build-types/duotone-picker/types.d.ts.map +1 -1
  342. package/build-types/elevation/hook.d.ts +46 -46
  343. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  344. package/build-types/flex/flex/hook.d.ts +46 -46
  345. package/build-types/flex/flex-block/hook.d.ts +46 -46
  346. package/build-types/flex/flex-item/hook.d.ts +46 -46
  347. package/build-types/focal-point-picker/stories/index.story.d.ts +8 -8
  348. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  349. package/build-types/focusable-iframe/index.d.ts +4 -5
  350. package/build-types/focusable-iframe/index.d.ts.map +1 -1
  351. package/build-types/focusable-iframe/types.d.ts +8 -0
  352. package/build-types/focusable-iframe/types.d.ts.map +1 -0
  353. package/build-types/font-size-picker/styles.d.ts +2 -2
  354. package/build-types/form-token-field/index.d.ts.map +1 -1
  355. package/build-types/form-token-field/types.d.ts +6 -0
  356. package/build-types/form-token-field/types.d.ts.map +1 -1
  357. package/build-types/gradient-picker/index.d.ts +1 -1
  358. package/build-types/gradient-picker/index.d.ts.map +1 -1
  359. package/build-types/gradient-picker/stories/index.story.d.ts +3 -36
  360. package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
  361. package/build-types/gradient-picker/types.d.ts +31 -1
  362. package/build-types/gradient-picker/types.d.ts.map +1 -1
  363. package/build-types/grid/hook.d.ts +46 -46
  364. package/build-types/h-stack/component.d.ts +1 -1
  365. package/build-types/h-stack/hook.d.ts +46 -46
  366. package/build-types/heading/hook.d.ts +45 -45
  367. package/build-types/higher-order/navigate-regions/index.d.ts.map +1 -1
  368. package/build-types/higher-order/with-focus-outside/index.d.ts +1 -0
  369. package/build-types/higher-order/with-focus-outside/index.d.ts.map +1 -1
  370. package/build-types/higher-order/with-focus-outside/test/index.d.ts +2 -0
  371. package/build-types/higher-order/with-focus-outside/test/index.d.ts.map +1 -0
  372. package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
  373. package/build-types/index.d.ts +1 -1
  374. package/build-types/index.d.ts.map +1 -1
  375. package/build-types/isolated-event-container/test/index.d.ts +2 -0
  376. package/build-types/isolated-event-container/test/index.d.ts.map +1 -0
  377. package/build-types/item-group/item/hook.d.ts +46 -46
  378. package/build-types/item-group/item-group/hook.d.ts +46 -46
  379. package/build-types/menu-item/index.d.ts +1 -1
  380. package/build-types/menu-item/stories/index.story.d.ts +4 -4
  381. package/build-types/modal/index.d.ts.map +1 -1
  382. package/build-types/modal/stories/index.story.d.ts.map +1 -1
  383. package/build-types/modal/types.d.ts +1 -1
  384. package/build-types/modal/types.d.ts.map +1 -1
  385. package/build-types/navigable-container/menu.d.ts +1 -1
  386. package/build-types/navigation/back-button/index.d.ts +1 -1
  387. package/build-types/navigation/styles/navigation-styles.d.ts +5 -3
  388. package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -1
  389. package/build-types/navigator/navigator-back-button/component.d.ts +2 -3
  390. package/build-types/navigator/navigator-back-button/component.d.ts.map +1 -1
  391. package/build-types/navigator/navigator-back-button/hook.d.ts +53 -54
  392. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  393. package/build-types/navigator/navigator-button/component.d.ts +2 -3
  394. package/build-types/navigator/navigator-button/component.d.ts.map +1 -1
  395. package/build-types/navigator/navigator-button/hook.d.ts +53 -54
  396. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  397. package/build-types/navigator/navigator-to-parent-button/component.d.ts +2 -3
  398. package/build-types/navigator/navigator-to-parent-button/component.d.ts.map +1 -1
  399. package/build-types/notice/index.d.ts.map +1 -1
  400. package/build-types/number-control/index.d.ts +3 -3
  401. package/build-types/number-control/stories/index.story.d.ts +3 -3
  402. package/build-types/palette-edit/styles.d.ts +4 -4
  403. package/build-types/palette-edit/styles.d.ts.map +1 -1
  404. package/build-types/placeholder/index.d.ts.map +1 -1
  405. package/build-types/popover/index.d.ts +1 -1
  406. package/build-types/popover/index.d.ts.map +1 -1
  407. package/build-types/popover/overlay-middlewares.d.ts +1 -1
  408. package/build-types/popover/stories/e2e/index.story.d.ts +1 -1
  409. package/build-types/popover/types.d.ts +0 -4
  410. package/build-types/popover/types.d.ts.map +1 -1
  411. package/build-types/popover/utils.d.ts +2 -6
  412. package/build-types/popover/utils.d.ts.map +1 -1
  413. package/build-types/range-control/index.d.ts +1 -1
  414. package/build-types/range-control/styles/range-control-styles.d.ts +3 -3
  415. package/build-types/resizable-box/index.d.ts +1 -1
  416. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  417. package/build-types/resizable-box/resize-tooltip/label.d.ts +1 -1
  418. package/build-types/resizable-box/stories/index.story.d.ts +2 -2
  419. package/build-types/scrollable/hook.d.ts +46 -46
  420. package/build-types/search-control/index.d.ts +4 -2
  421. package/build-types/search-control/index.d.ts.map +1 -1
  422. package/build-types/search-control/stories/index.story.d.ts +8 -4
  423. package/build-types/search-control/stories/index.story.d.ts.map +1 -1
  424. package/build-types/search-control/types.d.ts +12 -0
  425. package/build-types/search-control/types.d.ts.map +1 -1
  426. package/build-types/spacer/hook.d.ts +46 -46
  427. package/build-types/spinner/index.d.ts +1 -1
  428. package/build-types/surface/hook.d.ts +46 -46
  429. package/build-types/text/hook.d.ts +46 -46
  430. package/build-types/text/styles.d.ts.map +1 -1
  431. package/build-types/text-control/index.d.ts +3 -3
  432. package/build-types/toggle-control/stories/index.story.d.ts +2 -2
  433. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -4
  434. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -1
  435. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -4
  436. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  437. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +2 -2
  438. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  439. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -5
  440. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  441. package/build-types/toggle-group-control/toggle-group-control/utils.d.ts +18 -0
  442. package/build-types/toggle-group-control/toggle-group-control/utils.d.ts.map +1 -0
  443. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  444. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +5 -1
  445. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  446. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +1 -0
  447. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  448. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  449. package/build-types/toggle-group-control/types.d.ts +13 -24
  450. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  451. package/build-types/toolbar/stories/index.story.d.ts.map +1 -1
  452. package/build-types/toolbar/toolbar/index.d.ts.map +1 -1
  453. package/build-types/toolbar/toolbar-button/index.d.ts +16 -22
  454. package/build-types/toolbar/toolbar-button/index.d.ts.map +1 -1
  455. package/build-types/toolbar/toolbar-dropdown-menu/index.d.ts +3 -1
  456. package/build-types/toolbar/toolbar-dropdown-menu/index.d.ts.map +1 -1
  457. package/build-types/toolbar/toolbar-group/index.d.ts +10 -14
  458. package/build-types/toolbar/toolbar-group/index.d.ts.map +1 -1
  459. package/build-types/toolbar/toolbar-group/toolbar-group-collapsed.d.ts +3 -5
  460. package/build-types/toolbar/toolbar-group/toolbar-group-collapsed.d.ts.map +1 -1
  461. package/build-types/toolbar/toolbar-group/toolbar-group-container.d.ts +7 -5
  462. package/build-types/toolbar/toolbar-group/toolbar-group-container.d.ts.map +1 -1
  463. package/build-types/toolbar/toolbar-group/types.d.ts +77 -0
  464. package/build-types/toolbar/toolbar-group/types.d.ts.map +1 -0
  465. package/build-types/toolbar/toolbar-item/index.d.ts.map +1 -1
  466. package/build-types/tools-panel/tools-panel/hook.d.ts +46 -46
  467. package/build-types/tools-panel/tools-panel-header/hook.d.ts +46 -46
  468. package/build-types/tools-panel/tools-panel-item/hook.d.ts +46 -46
  469. package/build-types/tooltip/index.d.ts +8 -5
  470. package/build-types/tooltip/index.d.ts.map +1 -1
  471. package/build-types/tooltip/stories/index.story.d.ts +13 -0
  472. package/build-types/tooltip/stories/index.story.d.ts.map +1 -0
  473. package/build-types/tooltip/test/index.d.ts +2 -0
  474. package/build-types/tooltip/test/index.d.ts.map +1 -0
  475. package/build-types/tooltip/test/utils/index.d.ts +11 -0
  476. package/build-types/tooltip/test/utils/index.d.ts.map +1 -0
  477. package/build-types/tooltip/types.d.ts +61 -0
  478. package/build-types/tooltip/types.d.ts.map +1 -0
  479. package/build-types/truncate/hook.d.ts +46 -46
  480. package/build-types/ui/tooltip/content.d.ts +1 -1
  481. package/build-types/unit-control/index.d.ts +1 -1
  482. package/build-types/unit-control/index.d.ts.map +1 -1
  483. package/build-types/unit-control/styles/unit-control-styles.d.ts +3 -3
  484. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  485. package/build-types/unit-control/unit-select-control.d.ts +1 -1
  486. package/build-types/utils/use-deprecated-props.d.ts +1 -1
  487. package/build-types/v-stack/component.d.ts +1 -1
  488. package/build-types/v-stack/hook.d.ts +46 -46
  489. package/build-types/v-stack/stories/index.story.d.ts +2 -2
  490. package/package.json +20 -20
  491. package/src/animation/index.tsx +1 -0
  492. package/src/border-control/border-control/README.md +2 -2
  493. package/src/border-control/border-control-dropdown/component.tsx +1 -1
  494. package/src/border-control/styles.ts +7 -7
  495. package/src/border-control/test/index.js +79 -69
  496. package/src/box-control/unit-control.tsx +1 -1
  497. package/src/button/README.md +0 -6
  498. package/src/button/index.tsx +9 -1
  499. package/src/button/test/index.tsx +19 -0
  500. package/src/button/types.ts +0 -4
  501. package/src/circular-option-picker/README.md +14 -0
  502. package/src/circular-option-picker/circular-option-picker-actions.tsx +60 -0
  503. package/src/circular-option-picker/circular-option-picker-context.tsx +12 -0
  504. package/src/circular-option-picker/circular-option-picker-option-group.tsx +34 -0
  505. package/src/circular-option-picker/circular-option-picker-option.tsx +139 -0
  506. package/src/circular-option-picker/circular-option-picker.tsx +202 -0
  507. package/src/circular-option-picker/index.tsx +7 -174
  508. package/src/circular-option-picker/stories/index.story.tsx +34 -9
  509. package/src/circular-option-picker/style.scss +11 -7
  510. package/src/circular-option-picker/test/index.tsx +133 -0
  511. package/src/circular-option-picker/types.ts +64 -1
  512. package/src/color-palette/README.md +14 -0
  513. package/src/color-palette/index.tsx +69 -28
  514. package/src/color-palette/stories/index.story.tsx +16 -2
  515. package/src/color-palette/test/index.tsx +32 -30
  516. package/src/color-palette/types.ts +34 -1
  517. package/src/combobox-control/index.tsx +7 -5
  518. package/src/composite/{index.js → index.ts} +3 -0
  519. package/src/confirm-dialog/stories/index.story.js +13 -14
  520. package/src/confirm-dialog/test/index.js +10 -18
  521. package/src/custom-gradient-picker/gradient-bar/control-points.tsx +1 -1
  522. package/src/custom-gradient-picker/gradient-bar/test/utils.ts +5 -5
  523. package/src/date-time/time/index.tsx +8 -1
  524. package/src/date-time/time/timezone.tsx +1 -1
  525. package/src/dropdown/README.md +13 -3
  526. package/src/dropdown/index.tsx +16 -34
  527. package/src/dropdown/stories/index.story.tsx +10 -7
  528. package/src/dropdown/types.ts +12 -4
  529. package/src/dropdown-menu/README.md +18 -0
  530. package/src/dropdown-menu/index.tsx +8 -1
  531. package/src/dropdown-menu/stories/index.story.tsx +5 -0
  532. package/src/dropdown-menu/types.ts +23 -6
  533. package/src/dropdown-menu-v2/styles.ts +1 -1
  534. package/src/duotone-picker/README.md +14 -0
  535. package/src/duotone-picker/color-list-picker/index.tsx +28 -12
  536. package/src/duotone-picker/duotone-picker.tsx +33 -0
  537. package/src/duotone-picker/types.ts +34 -1
  538. package/src/focusable-iframe/{index.js → index.tsx} +7 -4
  539. package/src/focusable-iframe/types.ts +9 -0
  540. package/src/form-token-field/README.md +1 -0
  541. package/src/form-token-field/index.tsx +5 -1
  542. package/src/form-token-field/style.scss +5 -9
  543. package/src/form-token-field/test/index.tsx +36 -1
  544. package/src/form-token-field/types.ts +7 -1
  545. package/src/gradient-picker/README.md +14 -0
  546. package/src/gradient-picker/index.tsx +60 -11
  547. package/src/gradient-picker/types.ts +34 -1
  548. package/src/higher-order/navigate-regions/index.tsx +5 -6
  549. package/src/higher-order/with-filters/test/index.tsx +36 -43
  550. package/src/higher-order/with-focus-outside/{index.js → index.tsx} +8 -5
  551. package/src/higher-order/with-focus-outside/test/{index.js → index.tsx} +13 -11
  552. package/src/higher-order/with-notices/test/index.tsx +1 -1
  553. package/src/higher-order/with-spoken-messages/index.tsx +7 -8
  554. package/src/index.ts +5 -1
  555. package/src/input-control/styles/input-control-styles.tsx +2 -2
  556. package/src/isolated-event-container/test/{index.js → index.tsx} +1 -1
  557. package/src/mobile/bottom-sheet/index.native.js +1 -0
  558. package/src/mobile/global-styles-context/index.native.js +7 -8
  559. package/src/modal/README.md +7 -1
  560. package/src/modal/index.tsx +27 -3
  561. package/src/modal/stories/index.story.tsx +2 -1
  562. package/src/modal/test/index.tsx +231 -0
  563. package/src/modal/types.ts +3 -1
  564. package/src/navigation/use-navigation-tree-nodes.tsx +1 -1
  565. package/src/notice/index.tsx +18 -6
  566. package/src/notice/style.scss +0 -1
  567. package/src/notice/test/__snapshots__/index.tsx.snap +9 -1
  568. package/src/palette-edit/styles.js +2 -1
  569. package/src/placeholder/index.tsx +16 -8
  570. package/src/placeholder/style.scss +2 -16
  571. package/src/placeholder/test/index.tsx +34 -15
  572. package/src/popover/index.tsx +47 -110
  573. package/src/popover/test/index.tsx +3 -3
  574. package/src/popover/types.ts +0 -5
  575. package/src/popover/utils.ts +19 -67
  576. package/src/search-control/README.md +7 -0
  577. package/src/search-control/index.tsx +10 -1
  578. package/src/search-control/style.scss +14 -7
  579. package/src/search-control/types.ts +12 -0
  580. package/src/tab-panel/test/index.tsx +5 -0
  581. package/src/text/styles.js +2 -1
  582. package/src/theme/README.md +5 -5
  583. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +567 -59
  584. package/src/toggle-group-control/test/index.tsx +110 -56
  585. package/src/toggle-group-control/toggle-group-control/README.md +0 -1
  586. package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +39 -57
  587. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +52 -48
  588. package/src/toggle-group-control/toggle-group-control/component.tsx +12 -6
  589. package/src/toggle-group-control/toggle-group-control/styles.ts +2 -19
  590. package/src/toggle-group-control/toggle-group-control/utils.ts +50 -0
  591. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +70 -20
  592. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +17 -3
  593. package/src/toggle-group-control/types.ts +14 -32
  594. package/src/toolbar/stories/index.story.tsx +3 -5
  595. package/src/toolbar/test/toolbar-group.tsx +13 -7
  596. package/src/toolbar/toolbar/index.tsx +9 -1
  597. package/src/toolbar/toolbar-dropdown-menu/{index.js → index.tsx} +11 -4
  598. package/src/toolbar/toolbar-group/README.md +2 -2
  599. package/src/toolbar/toolbar-group/{index.js → index.tsx} +19 -14
  600. package/src/toolbar/toolbar-group/{toolbar-group-collapsed.js → toolbar-group-collapsed.tsx} +10 -4
  601. package/src/toolbar/toolbar-group/toolbar-group-container.tsx +16 -0
  602. package/src/toolbar/toolbar-group/types.ts +92 -0
  603. package/src/toolbar/toolbar-item/index.tsx +3 -1
  604. package/src/tooltip/README.md +31 -28
  605. package/src/tooltip/index.tsx +106 -0
  606. package/src/tooltip/stories/index.story.tsx +59 -0
  607. package/src/tooltip/style.scss +2 -27
  608. package/src/tooltip/test/index.tsx +335 -0
  609. package/src/tooltip/test/utils/index.tsx +20 -0
  610. package/src/tooltip/types.ts +61 -0
  611. package/src/ui/context/context-connect.ts +3 -3
  612. package/src/ui/context/wordpress-component.ts +4 -4
  613. package/src/unit-control/index.tsx +9 -4
  614. package/src/unit-control/styles/unit-control-styles.ts +3 -1
  615. package/src/unit-control/test/utils.ts +1 -1
  616. package/src/utils/colors-values.js +1 -1
  617. package/src/utils/use-deprecated-props.ts +1 -1
  618. package/tsconfig.tsbuildinfo +1 -1
  619. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +0 -78
  620. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +0 -1
  621. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +0 -76
  622. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +0 -1
  623. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +0 -9
  624. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +0 -1
  625. package/src/color-palette/test/__snapshots__/index.tsx.snap +0 -288
  626. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +0 -84
  627. package/src/toolbar/toolbar-group/toolbar-group-container.js +0 -8
  628. package/src/tooltip/index.js +0 -293
  629. package/src/tooltip/stories/index.story.js +0 -85
  630. package/src/tooltip/test/index.js +0 -323
@@ -17,13 +17,12 @@ import { speak } from '@wordpress/a11y';
17
17
  * @return {WPComponent} The wrapped component.
18
18
  */
19
19
  export default createHigherOrderComponent(
20
- ( Component ) => ( props ) =>
21
- (
22
- <Component
23
- { ...props }
24
- speak={ speak }
25
- debouncedSpeak={ useDebounce( speak, 500 ) }
26
- />
27
- ),
20
+ ( Component ) => ( props ) => (
21
+ <Component
22
+ { ...props }
23
+ speak={ speak }
24
+ debouncedSpeak={ useDebounce( speak, 500 ) }
25
+ />
26
+ ),
28
27
  'withSpokenMessages'
29
28
  );
package/src/index.ts CHANGED
@@ -17,7 +17,11 @@ export {
17
17
  default as Animate,
18
18
  getAnimateClassName as __unstableGetAnimateClassName,
19
19
  } from './animate';
20
- export { __unstableMotion, __unstableAnimatePresence } from './animation';
20
+ export {
21
+ __unstableMotion,
22
+ __unstableAnimatePresence,
23
+ __unstableMotionContext,
24
+ } from './animation';
21
25
  export { default as AnglePickerControl } from './angle-picker-control';
22
26
  export {
23
27
  default as Autocomplete,
@@ -12,7 +12,7 @@ import type { CSSProperties, ReactNode } from 'react';
12
12
  import type { WordPressComponentProps } from '../../ui/context';
13
13
  import { Flex, FlexItem } from '../../flex';
14
14
  import { Text } from '../../text';
15
- import { baseLabelTypography, COLORS, rtl } from '../../utils';
15
+ import { baseLabelTypography, COLORS, CONFIG, rtl } from '../../utils';
16
16
  import type { LabelPosition, Size } from '../types';
17
17
  import { space } from '../../ui/utils/space';
18
18
 
@@ -275,7 +275,7 @@ const backdropFocusedStyles = ( {
275
275
  let outlineOffset;
276
276
 
277
277
  if ( isFocused ) {
278
- boxShadow = `0 0 0 1px ${ COLORS.ui.borderFocus } inset`;
278
+ boxShadow = CONFIG.controlBoxShadowFocus;
279
279
  // Windows High Contrast mode will show this outline, but not the box-shadow.
280
280
  outline = `2px solid transparent`;
281
281
  outlineOffset = `-2px`;
@@ -7,7 +7,7 @@ import userEvent from '@testing-library/user-event';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import IsolatedEventContainer from '../';
10
+ import IsolatedEventContainer from '..';
11
11
 
12
12
  describe( 'IsolatedEventContainer', () => {
13
13
  it( 'should pass props to container', async () => {
@@ -527,6 +527,7 @@ class BottomSheet extends Component {
527
527
  panResponder.panHandlers.onMoveShouldSetResponderCapture
528
528
  }
529
529
  onAccessibilityEscape={ this.onCloseBottomSheet }
530
+ testID="bottom-sheet"
530
531
  { ...rest }
531
532
  >
532
533
  <KeyboardAvoidingView
@@ -92,13 +92,12 @@ export const useGlobalStyles = () => {
92
92
  return globalStyles;
93
93
  };
94
94
 
95
- export const withGlobalStyles = ( WrappedComponent ) => ( props ) =>
96
- (
97
- <GlobalStylesContext.Consumer>
98
- { ( globalStyles ) => (
99
- <WrappedComponent { ...props } globalStyles={ globalStyles } />
100
- ) }
101
- </GlobalStylesContext.Consumer>
102
- );
95
+ export const withGlobalStyles = ( WrappedComponent ) => ( props ) => (
96
+ <GlobalStylesContext.Consumer>
97
+ { ( globalStyles ) => (
98
+ <WrappedComponent { ...props } globalStyles={ globalStyles } />
99
+ ) }
100
+ </GlobalStylesContext.Consumer>
101
+ );
103
102
 
104
103
  export default GlobalStylesContext;
@@ -187,10 +187,16 @@ Titles are required for accessibility reasons, see `aria.labelledby` and `title`
187
187
 
188
188
  - Required: No
189
189
 
190
- #### `focusOnMount`: `boolean | 'firstElement'`
190
+ #### `focusOnMount`: `boolean | 'firstElement'` | 'firstContentElement'
191
191
 
192
192
  If this property is true, it will focus the first tabbable element rendered in the modal.
193
193
 
194
+ If this property is false, focus will not be transferred and it is the responsibility of the consumer to ensure accessible focus management.
195
+
196
+ If set to `firstElement` focus will be placed on the first tabbable element anywhere within the Modal.
197
+
198
+ If set to `firstContentElement` focus will be placed on the first tabbable element within the Modal's **content** (i.e. children). Note that it is the responsibility of the consumer to ensure there is at least one tabbable element within the children **or the focus will be lost**.
199
+
194
200
  - Required: No
195
201
  - Default: `true`
196
202
 
@@ -71,11 +71,23 @@ function UnforwardedModal(
71
71
  } = props;
72
72
 
73
73
  const ref = useRef< HTMLDivElement >();
74
+
74
75
  const instanceId = useInstanceId( Modal );
75
76
  const headingId = title
76
77
  ? `components-modal-header-${ instanceId }`
77
78
  : aria.labelledby;
78
- const focusOnMountRef = useFocusOnMount( focusOnMount );
79
+
80
+ // The focus hook does not support 'firstContentElement' but this is a valid
81
+ // value for the Modal's focusOnMount prop. The following code ensures the focus
82
+ // hook will focus the first focusable node within the element to which it is applied.
83
+ // When `firstContentElement` is passed as the value of the focusOnMount prop,
84
+ // the focus hook is applied to the Modal's content element.
85
+ // Otherwise, the focus hook is applied to the Modal's ref. This ensures that the
86
+ // focus hook will focus the first element in the Modal's **content** when
87
+ // `firstContentElement` is passed.
88
+ const focusOnMountRef = useFocusOnMount(
89
+ focusOnMount === 'firstContentElement' ? 'firstElement' : focusOnMount
90
+ );
79
91
  const constrainedTabbingRef = useConstrainedTabbing();
80
92
  const focusReturnRef = useFocusReturn();
81
93
  const focusOutsideProps = useFocusOutside( onRequestClose );
@@ -223,7 +235,9 @@ function UnforwardedModal(
223
235
  ref={ useMergeRefs( [
224
236
  constrainedTabbingRef,
225
237
  focusReturnRef,
226
- focusOnMountRef,
238
+ focusOnMount !== 'firstContentElement'
239
+ ? focusOnMountRef
240
+ : null,
227
241
  ] ) }
228
242
  role={ role }
229
243
  aria-label={ contentLabel }
@@ -283,7 +297,17 @@ function UnforwardedModal(
283
297
  ) }
284
298
  </div>
285
299
  ) }
286
- <div ref={ childrenContainerRef }>{ children }</div>
300
+
301
+ <div
302
+ ref={ useMergeRefs( [
303
+ childrenContainerRef,
304
+ focusOnMount === 'firstContentElement'
305
+ ? focusOnMountRef
306
+ : null,
307
+ ] ) }
308
+ >
309
+ { children }
310
+ </div>
287
311
  </div>
288
312
  </div>
289
313
  </StyleProvider>
@@ -28,7 +28,8 @@ const meta: Meta< typeof Modal > = {
28
28
  control: { type: null },
29
29
  },
30
30
  focusOnMount: {
31
- control: { type: 'boolean' },
31
+ options: [ true, false, 'firstElement', 'firstContentElement' ],
32
+ control: { type: 'select' },
32
33
  },
33
34
  role: {
34
35
  control: { type: 'text' },
@@ -13,6 +13,7 @@ import { useState } from '@wordpress/element';
13
13
  * Internal dependencies
14
14
  */
15
15
  import Modal from '../';
16
+ import type { ModalProps } from '../types';
16
17
 
17
18
  const noop = () => {};
18
19
 
@@ -116,6 +117,113 @@ describe( 'Modal', () => {
116
117
  expect( opener ).toHaveFocus();
117
118
  } );
118
119
 
120
+ it( 'should request closing of any non nested modal when opened', async () => {
121
+ const user = userEvent.setup();
122
+ const onRequestClose = jest.fn();
123
+
124
+ const DismissAdjacent = () => {
125
+ const [ isShown, setIsShown ] = useState( false );
126
+ return (
127
+ <>
128
+ <Modal onRequestClose={ onRequestClose }>
129
+ <button onClick={ () => setIsShown( true ) }>💥</button>
130
+ </Modal>
131
+ { isShown && (
132
+ <Modal onRequestClose={ () => setIsShown( false ) }>
133
+ <p>Adjacent modal content</p>
134
+ </Modal>
135
+ ) }
136
+ </>
137
+ );
138
+ };
139
+ render( <DismissAdjacent /> );
140
+
141
+ await user.click( screen.getByRole( 'button', { name: '💥' } ) );
142
+ expect( onRequestClose ).toHaveBeenCalled();
143
+ } );
144
+
145
+ it( 'should support nested modals', async () => {
146
+ const user = userEvent.setup();
147
+ const onRequestClose = jest.fn();
148
+
149
+ const NestSupport = () => {
150
+ const [ isShown, setIsShown ] = useState( false );
151
+ return (
152
+ <>
153
+ <Modal onRequestClose={ onRequestClose }>
154
+ <button onClick={ () => setIsShown( true ) }>🪆</button>
155
+ { isShown && (
156
+ <Modal onRequestClose={ () => setIsShown( false ) }>
157
+ <p>Nested modal content</p>
158
+ </Modal>
159
+ ) }
160
+ </Modal>
161
+ </>
162
+ );
163
+ };
164
+ render( <NestSupport /> );
165
+
166
+ await user.click( screen.getByRole( 'button', { name: '🪆' } ) );
167
+ expect( onRequestClose ).not.toHaveBeenCalled();
168
+ } );
169
+
170
+ // TODO enable once nested modals hide outer modals.
171
+ it.skip( 'should accessibly hide and show siblings including outer modals', async () => {
172
+ const user = userEvent.setup();
173
+
174
+ const AriaDemo = () => {
175
+ const [ isOuterShown, setIsOuterShown ] = useState( false );
176
+ const [ isInnerShown, setIsInnerShown ] = useState( false );
177
+ return (
178
+ <>
179
+ <button onClick={ () => setIsOuterShown( true ) }>
180
+ Start
181
+ </button>
182
+ { isOuterShown && (
183
+ <Modal
184
+ onRequestClose={ () => setIsOuterShown( false ) }
185
+ >
186
+ <button onClick={ () => setIsInnerShown( true ) }>
187
+ Nest
188
+ </button>
189
+ { isInnerShown && (
190
+ <Modal
191
+ onRequestClose={ () =>
192
+ setIsInnerShown( false )
193
+ }
194
+ >
195
+ <p>Nested modal content</p>
196
+ </Modal>
197
+ ) }
198
+ </Modal>
199
+ ) }
200
+ </>
201
+ );
202
+ };
203
+ const { container } = render( <AriaDemo /> );
204
+
205
+ // Opens outer modal > hides container.
206
+ await user.click( screen.getByRole( 'button', { name: 'Start' } ) );
207
+ expect( container ).toHaveAttribute( 'aria-hidden', 'true' );
208
+
209
+ // Disable reason: No semantic query can reach the overlay.
210
+ // eslint-disable-next-line testing-library/no-node-access
211
+ const outer = screen.getByRole( 'dialog' ).parentElement!;
212
+
213
+ // Opens inner modal > hides outer modal.
214
+ await user.click( screen.getByRole( 'button', { name: 'Nest' } ) );
215
+ expect( outer ).toHaveAttribute( 'aria-hidden', 'true' );
216
+
217
+ // Closes inner modal > Unhides outer modal and container stays hidden.
218
+ await user.keyboard( '[Escape]' );
219
+ expect( outer ).not.toHaveAttribute( 'aria-hidden' );
220
+ expect( container ).toHaveAttribute( 'aria-hidden', 'true' );
221
+
222
+ // Closes outer modal > Unhides container.
223
+ await user.keyboard( '[Escape]' );
224
+ expect( container ).not.toHaveAttribute( 'aria-hidden' );
225
+ } );
226
+
119
227
  it( 'should render `headerActions` React nodes', async () => {
120
228
  render(
121
229
  <Modal
@@ -129,4 +237,127 @@ describe( 'Modal', () => {
129
237
  screen.getByText( 'A sweet button', { selector: 'button' } )
130
238
  ).toBeInTheDocument();
131
239
  } );
240
+
241
+ describe( 'Focus handling', () => {
242
+ let originalGetClientRects: () => DOMRectList;
243
+
244
+ const FocusMountDemo = ( {
245
+ focusOnMount,
246
+ }: Pick< ModalProps, 'focusOnMount' > ) => {
247
+ const [ isShown, setIsShown ] = useState( false );
248
+ return (
249
+ <>
250
+ <button onClick={ () => setIsShown( true ) }>
251
+ Toggle Modal
252
+ </button>
253
+ { isShown && (
254
+ <Modal
255
+ focusOnMount={ focusOnMount }
256
+ onRequestClose={ () => setIsShown( false ) }
257
+ >
258
+ <p>Modal content</p>
259
+ <a href="https://wordpress.org">
260
+ First Focusable Content Element
261
+ </a>
262
+
263
+ <a href="https://wordpress.org">
264
+ Another Focusable Content Element
265
+ </a>
266
+ </Modal>
267
+ ) }
268
+ </>
269
+ );
270
+ };
271
+
272
+ beforeEach( () => {
273
+ /**
274
+ * The test environment does not have a layout engine, so we need to mock
275
+ * the getClientRects method. This ensures that the focusable elements can be
276
+ * found by the `focusOnMount` logic which depends on layout information
277
+ * to determine if the element is visible or not.
278
+ * See https://github.com/WordPress/gutenberg/blob/trunk/packages/dom/src/focusable.js#L55-L61.
279
+ */
280
+ // @ts-expect-error We're not trying to comply to the DOM spec, only mocking
281
+ window.HTMLElement.prototype.getClientRects = function () {
282
+ return [ 'trick-jsdom-into-having-size-for-element-rect' ];
283
+ };
284
+ } );
285
+
286
+ afterEach( () => {
287
+ // Restore original HTMLElement prototype.
288
+ // See beforeEach for details.
289
+ window.HTMLElement.prototype.getClientRects =
290
+ originalGetClientRects;
291
+ } );
292
+
293
+ it( 'should focus the Modal dialog by default when `focusOnMount` prop is not provided', async () => {
294
+ const user = userEvent.setup();
295
+
296
+ render( <FocusMountDemo /> );
297
+
298
+ const opener = screen.getByRole( 'button', {
299
+ name: 'Toggle Modal',
300
+ } );
301
+
302
+ await user.click( opener );
303
+
304
+ expect( screen.getByRole( 'dialog' ) ).toHaveFocus();
305
+ } );
306
+
307
+ it( 'should focus the Modal dialog when `true` passed as value for `focusOnMount` prop', async () => {
308
+ const user = userEvent.setup();
309
+
310
+ render( <FocusMountDemo focusOnMount={ true } /> );
311
+
312
+ const opener = screen.getByRole( 'button', {
313
+ name: 'Toggle Modal',
314
+ } );
315
+
316
+ await user.click( opener );
317
+
318
+ expect( screen.getByRole( 'dialog' ) ).toHaveFocus();
319
+ } );
320
+
321
+ it( 'should focus the first focusable element in the contents (if found) when `firstContentElement` passed as value for `focusOnMount` prop', async () => {
322
+ const user = userEvent.setup();
323
+
324
+ render( <FocusMountDemo focusOnMount="firstContentElement" /> );
325
+
326
+ const opener = screen.getByRole( 'button' );
327
+
328
+ await user.click( opener );
329
+
330
+ expect(
331
+ screen.getByText( 'First Focusable Content Element' )
332
+ ).toHaveFocus();
333
+ } );
334
+
335
+ it( 'should focus the first element anywhere within the Modal when `firstElement` passed as value for `focusOnMount` prop', async () => {
336
+ const user = userEvent.setup();
337
+
338
+ render( <FocusMountDemo focusOnMount="firstElement" /> );
339
+
340
+ const opener = screen.getByRole( 'button' );
341
+
342
+ await user.click( opener );
343
+
344
+ expect(
345
+ screen.getByRole( 'button', { name: 'Close' } )
346
+ ).toHaveFocus();
347
+ } );
348
+
349
+ it( 'should not move focus when `false` passed as value for `focusOnMount` prop', async () => {
350
+ const user = userEvent.setup();
351
+
352
+ render( <FocusMountDemo focusOnMount={ false } /> );
353
+
354
+ const opener = screen.getByRole( 'button', {
355
+ name: 'Toggle Modal',
356
+ } );
357
+
358
+ await user.click( opener );
359
+
360
+ expect( opener ).toHaveFocus();
361
+ } );
362
+ } );
132
363
  } );
@@ -68,7 +68,9 @@ export type ModalProps = {
68
68
  *
69
69
  * @default true
70
70
  */
71
- focusOnMount?: Parameters< typeof useFocusOnMount >[ 0 ];
71
+ focusOnMount?:
72
+ | Parameters< typeof useFocusOnMount >[ 0 ]
73
+ | 'firstContentElement';
72
74
  /**
73
75
  * Elements that are injected into the modal header to the left of the close button (if rendered).
74
76
  * Hidden if `__experimentalHideHeader` is `true`.
@@ -4,7 +4,7 @@
4
4
  import { useState } from '@wordpress/element';
5
5
 
6
6
  export function useNavigationTreeNodes<
7
- TNode extends { children?: React.ReactNode; [ key: string ]: unknown }
7
+ TNode extends { children?: React.ReactNode; [ key: string ]: unknown },
8
8
  >() {
9
9
  const [ nodes, setNodes ] = useState<
10
10
  Record< string, Omit< TNode, 'children' > >
@@ -16,8 +16,8 @@ import { close } from '@wordpress/icons';
16
16
  */
17
17
  import Button from '../button';
18
18
  import type { NoticeAction, NoticeProps } from './types';
19
- import type { SyntheticEvent } from 'react';
20
19
  import type { DeprecatedButtonProps } from '../button/types';
20
+ import { VisuallyHidden } from '../visually-hidden';
21
21
 
22
22
  const noop = () => {};
23
23
 
@@ -45,10 +45,23 @@ function getDefaultPoliteness( status: NoticeProps[ 'status' ] ) {
45
45
  case 'warning':
46
46
  case 'info':
47
47
  return 'polite';
48
+ // The default will also catch the 'error' status.
49
+ default:
50
+ return 'assertive';
51
+ }
52
+ }
48
53
 
54
+ function getStatusLabel( status: NoticeProps[ 'status' ] ) {
55
+ switch ( status ) {
56
+ case 'warning':
57
+ return __( 'Warning notice' );
58
+ case 'info':
59
+ return __( 'Information notice' );
49
60
  case 'error':
61
+ return __( 'Error notice' );
62
+ // The default will also catch the 'success' status.
50
63
  default:
51
- return 'assertive';
64
+ return __( 'Notice' );
52
65
  }
53
66
  }
54
67
 
@@ -93,14 +106,14 @@ function Notice( {
93
106
  children = <RawHTML>{ children }</RawHTML>;
94
107
  }
95
108
 
96
- const onDismissNotice = ( event: SyntheticEvent ) => {
97
- event?.preventDefault?.();
109
+ const onDismissNotice = () => {
98
110
  onDismiss();
99
111
  onRemove();
100
112
  };
101
113
 
102
114
  return (
103
115
  <div className={ classes }>
116
+ <VisuallyHidden>{ getStatusLabel( status ) }</VisuallyHidden>
104
117
  <div className="components-notice__content">
105
118
  { children }
106
119
  <div className="components-notice__actions">
@@ -154,9 +167,8 @@ function Notice( {
154
167
  <Button
155
168
  className="components-notice__dismiss"
156
169
  icon={ close }
157
- label={ __( 'Dismiss this notice' ) }
170
+ label={ __( 'Close' ) }
158
171
  onClick={ onDismissNotice }
159
- showTooltip={ false }
160
172
  />
161
173
  ) }
162
174
  </div>
@@ -9,7 +9,6 @@
9
9
  align-items: center;
10
10
 
11
11
  &.is-dismissible {
12
- padding-right: 36px;
13
12
  position: relative;
14
13
  }
15
14
 
@@ -5,6 +5,14 @@ exports[`Notice should match snapshot 1`] = `
5
5
  <div
6
6
  class="components-notice is-success is-dismissible"
7
7
  >
8
+ <div
9
+ class="components-visually-hidden emotion-0 emotion-1"
10
+ data-wp-c16t="true"
11
+ data-wp-component="VisuallyHidden"
12
+ style="border: 0px; clip: rect(1px, 1px, 1px, 1px); clip-path: inset( 50% ); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; word-wrap: normal;"
13
+ >
14
+ Notice
15
+ </div>
8
16
  <div
9
17
  class="components-notice__content"
10
18
  >
@@ -33,7 +41,7 @@ exports[`Notice should match snapshot 1`] = `
33
41
  </div>
34
42
  </div>
35
43
  <button
36
- aria-label="Dismiss this notice"
44
+ aria-label="Close"
37
45
  class="components-button components-notice__dismiss has-icon"
38
46
  type="button"
39
47
  >
@@ -41,7 +41,8 @@ export const NameInputControl = styled( InputControl )`
41
41
  `;
42
42
 
43
43
  export const PaletteItem = styled( View )`
44
- padding: 3px 0 3px ${ space( 3 ) };
44
+ padding-block: 3px;
45
+ padding-inline-start: ${ space( 3 ) };
45
46
  border: 1px solid ${ CONFIG.surfaceBorderColor };
46
47
  border-bottom-color: transparent;
47
48
  &:first-of-type {
@@ -8,6 +8,8 @@ import classnames from 'classnames';
8
8
  */
9
9
  import { useResizeObserver } from '@wordpress/compose';
10
10
  import { SVG, Path } from '@wordpress/primitives';
11
+ import { useEffect } from '@wordpress/element';
12
+ import { speak } from '@wordpress/a11y';
11
13
 
12
14
  /**
13
15
  * Internal dependencies
@@ -72,9 +74,17 @@ export function Placeholder(
72
74
  modifierClassNames,
73
75
  withIllustration ? 'has-illustration' : null
74
76
  );
77
+
75
78
  const fieldsetClasses = classnames( 'components-placeholder__fieldset', {
76
79
  'is-column-layout': isColumnLayout,
77
80
  } );
81
+
82
+ useEffect( () => {
83
+ if ( instructions ) {
84
+ speak( instructions );
85
+ }
86
+ }, [ instructions ] );
87
+
78
88
  return (
79
89
  <div { ...additionalProps } className={ classes }>
80
90
  { withIllustration ? PlaceholderIllustration : null }
@@ -89,14 +99,12 @@ export function Placeholder(
89
99
  <Icon icon={ icon } />
90
100
  { label }
91
101
  </div>
92
- <fieldset className={ fieldsetClasses }>
93
- { !! instructions && (
94
- <legend className="components-placeholder__instructions">
95
- { instructions }
96
- </legend>
97
- ) }
98
- { children }
99
- </fieldset>
102
+ { !! instructions && (
103
+ <div className="components-placeholder__instructions">
104
+ { instructions }
105
+ </div>
106
+ ) }
107
+ <div className={ fieldsetClasses }>{ children }</div>
100
108
  </div>
101
109
  );
102
110
  }
@@ -3,7 +3,6 @@
3
3
  box-sizing: border-box;
4
4
  position: relative;
5
5
  padding: 1em;
6
- min-height: 200px;
7
6
  width: 100%;
8
7
  text-align: left;
9
8
  margin: 0;
@@ -17,7 +16,7 @@
17
16
  @supports (position: sticky) {
18
17
  display: flex;
19
18
  flex-direction: column;
20
- justify-content: center;
19
+ justify-content: top;
21
20
  align-items: flex-start;
22
21
  }
23
22
 
@@ -73,18 +72,6 @@
73
72
  }
74
73
  }
75
74
 
76
- // Overrides for browser and editor fieldset styles.
77
- .components-placeholder__fieldset.components-placeholder__fieldset {
78
- border: none;
79
- padding: 0;
80
-
81
- .components-placeholder__instructions {
82
- padding: 0;
83
- font-weight: normal;
84
- font-size: 1em;
85
- }
86
- }
87
-
88
75
  .components-placeholder__fieldset.is-column-layout,
89
76
  .components-placeholder__fieldset.is-column-layout form {
90
77
  flex-direction: column;
@@ -180,7 +167,6 @@
180
167
  color: inherit;
181
168
  display: flex;
182
169
  box-shadow: none;
183
- min-width: 100px;
184
170
 
185
171
  // Blur the background so layered dashed placeholders are still visually separate.
186
172
  // Make the background transparent to not interfere with the background overlay in placeholder-style() pseudo element
@@ -225,7 +211,7 @@
225
211
 
226
212
  // By painting the borders here, we enable them to be replaced by the Border control.
227
213
  @include placeholder-style();
228
- overflow: hidden;
214
+ overflow: auto;
229
215
  }
230
216
 
231
217
  // Position the spinner.