@wordpress/components 25.11.1-next.f8d8eceb.0 → 25.13.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 (317) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/build/angle-picker-control/index.js +0 -1
  3. package/build/angle-picker-control/index.js.map +1 -1
  4. package/build/custom-select-control-v2/index.js +87 -0
  5. package/build/custom-select-control-v2/index.js.map +1 -0
  6. package/build/custom-select-control-v2/styles.js +85 -0
  7. package/build/custom-select-control-v2/styles.js.map +1 -0
  8. package/build/custom-select-control-v2/types.js +6 -0
  9. package/build/custom-select-control-v2/types.js.map +1 -0
  10. package/build/disclosure/index.js +37 -7
  11. package/build/disclosure/index.js.map +1 -1
  12. package/build/disclosure/types.js +6 -0
  13. package/build/disclosure/types.js.map +1 -0
  14. package/build/divider/component.js +5 -3
  15. package/build/divider/component.js.map +1 -1
  16. package/build/divider/types.js.map +1 -1
  17. package/build/dropdown-menu-v2-ariakit/index.js +74 -35
  18. package/build/dropdown-menu-v2-ariakit/index.js.map +1 -1
  19. package/build/dropdown-menu-v2-ariakit/styles.js +82 -59
  20. package/build/dropdown-menu-v2-ariakit/styles.js.map +1 -1
  21. package/build/dropdown-menu-v2-ariakit/types.js.map +1 -1
  22. package/build/form-token-field/index.js +6 -2
  23. package/build/form-token-field/index.js.map +1 -1
  24. package/build/form-token-field/token-input.js.map +1 -1
  25. package/build/form-token-field/types.js.map +1 -1
  26. package/build/gradient-picker/index.js +1 -1
  27. package/build/gradient-picker/index.js.map +1 -1
  28. package/build/heading/hook.js +6 -3
  29. package/build/heading/hook.js.map +1 -1
  30. package/build/heading/types.js.map +1 -1
  31. package/build/index.native.js +8 -1
  32. package/build/index.native.js.map +1 -1
  33. package/build/mobile/audio-player/index.native.js +8 -9
  34. package/build/mobile/audio-player/index.native.js.map +1 -1
  35. package/build/mobile/global-styles-context/utils.native.js +44 -3
  36. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  37. package/build/mobile/utils/alignments.native.js +1 -1
  38. package/build/mobile/utils/alignments.native.js.map +1 -1
  39. package/build/private-apis.js +3 -2
  40. package/build/private-apis.js.map +1 -1
  41. package/build/radio-group/context.js +22 -0
  42. package/build/radio-group/context.js.map +1 -0
  43. package/build/radio-group/index.js +27 -23
  44. package/build/radio-group/index.js.map +1 -1
  45. package/build/radio-group/radio.js +58 -0
  46. package/build/radio-group/radio.js.map +1 -0
  47. package/build/radio-group/types.js +6 -0
  48. package/build/radio-group/types.js.map +1 -0
  49. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js +1 -1
  50. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  51. package/build/slot-fill/types.js.map +1 -1
  52. package/build/tabs/index.js +6 -4
  53. package/build/tabs/index.js.map +1 -1
  54. package/build/tabs/styles.js +14 -7
  55. package/build/tabs/styles.js.map +1 -1
  56. package/build/tabs/tab.js +5 -7
  57. package/build/tabs/tab.js.map +1 -1
  58. package/build/tabs/tablist.js +3 -5
  59. package/build/tabs/tablist.js.map +1 -1
  60. package/build/tabs/tabpanel.js +7 -10
  61. package/build/tabs/tabpanel.js.map +1 -1
  62. package/build/tabs/types.js.map +1 -1
  63. package/build/text/types.js.map +1 -1
  64. package/build/text-control/index.js +5 -1
  65. package/build/text-control/index.js.map +1 -1
  66. package/build/text-control/types.js.map +1 -1
  67. package/build/toggle-group-control/toggle-group-control/component.js +4 -2
  68. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  69. package/build/toggle-group-control/toggle-group-control/styles.js +13 -9
  70. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  71. package/build/toggle-group-control/types.js.map +1 -1
  72. package/build/tools-panel/tools-panel-item/hook.js +5 -1
  73. package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
  74. package/build-module/angle-picker-control/index.js +0 -1
  75. package/build-module/angle-picker-control/index.js.map +1 -1
  76. package/build-module/custom-select-control-v2/index.js +74 -0
  77. package/build-module/custom-select-control-v2/index.js.map +1 -0
  78. package/build-module/custom-select-control-v2/styles.js +71 -0
  79. package/build-module/custom-select-control-v2/styles.js.map +1 -0
  80. package/build-module/custom-select-control-v2/types.js +2 -0
  81. package/build-module/custom-select-control-v2/types.js.map +1 -0
  82. package/build-module/disclosure/index.js +33 -8
  83. package/build-module/disclosure/index.js.map +1 -1
  84. package/build-module/disclosure/types.js +2 -0
  85. package/build-module/disclosure/types.js.map +1 -0
  86. package/build-module/divider/component.js +3 -3
  87. package/build-module/divider/component.js.map +1 -1
  88. package/build-module/divider/types.js.map +1 -1
  89. package/build-module/dropdown-menu-v2-ariakit/index.js +72 -34
  90. package/build-module/dropdown-menu-v2-ariakit/index.js.map +1 -1
  91. package/build-module/dropdown-menu-v2-ariakit/styles.js +69 -40
  92. package/build-module/dropdown-menu-v2-ariakit/styles.js.map +1 -1
  93. package/build-module/dropdown-menu-v2-ariakit/types.js.map +1 -1
  94. package/build-module/form-token-field/index.js +6 -2
  95. package/build-module/form-token-field/index.js.map +1 -1
  96. package/build-module/form-token-field/token-input.js.map +1 -1
  97. package/build-module/form-token-field/types.js.map +1 -1
  98. package/build-module/gradient-picker/index.js +1 -1
  99. package/build-module/gradient-picker/index.js.map +1 -1
  100. package/build-module/heading/hook.js +6 -3
  101. package/build-module/heading/hook.js.map +1 -1
  102. package/build-module/heading/types.js.map +1 -1
  103. package/build-module/index.native.js +1 -1
  104. package/build-module/index.native.js.map +1 -1
  105. package/build-module/mobile/audio-player/index.native.js +9 -10
  106. package/build-module/mobile/audio-player/index.native.js.map +1 -1
  107. package/build-module/mobile/global-styles-context/utils.native.js +43 -4
  108. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  109. package/build-module/mobile/utils/alignments.native.js +1 -1
  110. package/build-module/mobile/utils/alignments.native.js.map +1 -1
  111. package/build-module/private-apis.js +4 -3
  112. package/build-module/private-apis.js.map +1 -1
  113. package/build-module/radio-group/context.js +14 -0
  114. package/build-module/radio-group/context.js.map +1 -0
  115. package/build-module/radio-group/index.js +24 -23
  116. package/build-module/radio-group/index.js.map +1 -1
  117. package/build-module/radio-group/radio.js +46 -0
  118. package/build-module/radio-group/radio.js.map +1 -0
  119. package/build-module/radio-group/types.js +2 -0
  120. package/build-module/radio-group/types.js.map +1 -0
  121. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js +1 -1
  122. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  123. package/build-module/slot-fill/types.js.map +1 -1
  124. package/build-module/tabs/index.js +7 -5
  125. package/build-module/tabs/index.js.map +1 -1
  126. package/build-module/tabs/styles.js +11 -5
  127. package/build-module/tabs/styles.js.map +1 -1
  128. package/build-module/tabs/tab.js +7 -9
  129. package/build-module/tabs/tab.js.map +1 -1
  130. package/build-module/tabs/tablist.js +3 -5
  131. package/build-module/tabs/tablist.js.map +1 -1
  132. package/build-module/tabs/tabpanel.js +9 -10
  133. package/build-module/tabs/tabpanel.js.map +1 -1
  134. package/build-module/tabs/types.js.map +1 -1
  135. package/build-module/text/types.js.map +1 -1
  136. package/build-module/text-control/index.js +6 -1
  137. package/build-module/text-control/index.js.map +1 -1
  138. package/build-module/text-control/types.js.map +1 -1
  139. package/build-module/toggle-group-control/toggle-group-control/component.js +4 -2
  140. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  141. package/build-module/toggle-group-control/toggle-group-control/styles.js +13 -9
  142. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  143. package/build-module/toggle-group-control/types.js.map +1 -1
  144. package/build-module/tools-panel/tools-panel-item/hook.js +6 -2
  145. package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
  146. package/build-style/style-rtl.css +52 -8
  147. package/build-style/style.css +52 -8
  148. package/build-types/angle-picker-control/index.d.ts.map +1 -1
  149. package/build-types/box-control/stories/index.story.d.ts +1944 -0
  150. package/build-types/box-control/stories/index.story.d.ts.map +1 -0
  151. package/build-types/card/card-divider/component.d.ts +1 -1
  152. package/build-types/card/card-divider/hook.d.ts +162 -162
  153. package/build-types/color-palette/styles.d.ts +4 -1
  154. package/build-types/color-palette/styles.d.ts.map +1 -1
  155. package/build-types/custom-select-control-v2/index.d.ts +6 -0
  156. package/build-types/custom-select-control-v2/index.d.ts.map +1 -0
  157. package/build-types/custom-select-control-v2/stories/index.story.d.ts +19 -0
  158. package/build-types/custom-select-control-v2/stories/index.story.d.ts.map +1 -0
  159. package/build-types/custom-select-control-v2/styles.d.ts +47 -0
  160. package/build-types/custom-select-control-v2/styles.d.ts.map +1 -0
  161. package/build-types/custom-select-control-v2/types.d.ts +57 -0
  162. package/build-types/custom-select-control-v2/types.d.ts.map +1 -0
  163. package/build-types/date-time/date/styles.d.ts +4 -1
  164. package/build-types/date-time/date/styles.d.ts.map +1 -1
  165. package/build-types/disclosure/index.d.ts +7 -1
  166. package/build-types/disclosure/index.d.ts.map +1 -1
  167. package/build-types/disclosure/types.d.ts +12 -0
  168. package/build-types/disclosure/types.d.ts.map +1 -0
  169. package/build-types/divider/component.d.ts +5 -1
  170. package/build-types/divider/component.d.ts.map +1 -1
  171. package/build-types/divider/stories/index.story.d.ts.map +1 -1
  172. package/build-types/divider/styles.d.ts +1 -1
  173. package/build-types/divider/types.d.ts +2 -2
  174. package/build-types/divider/types.d.ts.map +1 -1
  175. package/build-types/dropdown-menu-v2-ariakit/index.d.ts +11 -2
  176. package/build-types/dropdown-menu-v2-ariakit/index.d.ts.map +1 -1
  177. package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts.map +1 -1
  178. package/build-types/dropdown-menu-v2-ariakit/styles.d.ts +26 -18
  179. package/build-types/dropdown-menu-v2-ariakit/styles.d.ts.map +1 -1
  180. package/build-types/dropdown-menu-v2-ariakit/types.d.ts +1 -7
  181. package/build-types/dropdown-menu-v2-ariakit/types.d.ts.map +1 -1
  182. package/build-types/form-token-field/index.d.ts.map +1 -1
  183. package/build-types/form-token-field/token-input.d.ts.map +1 -1
  184. package/build-types/form-token-field/types.d.ts +1 -1
  185. package/build-types/form-token-field/types.d.ts.map +1 -1
  186. package/build-types/heading/component.d.ts +4 -1
  187. package/build-types/heading/component.d.ts.map +1 -1
  188. package/build-types/heading/hook.d.ts.map +1 -1
  189. package/build-types/heading/types.d.ts +20 -1
  190. package/build-types/heading/types.d.ts.map +1 -1
  191. package/build-types/navigation/styles/navigation-styles.d.ts +4 -1
  192. package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -1
  193. package/build-types/palette-edit/styles.d.ts +4 -1
  194. package/build-types/palette-edit/styles.d.ts.map +1 -1
  195. package/build-types/private-apis.d.ts.map +1 -1
  196. package/build-types/radio-group/context.d.ts +10 -0
  197. package/build-types/radio-group/context.d.ts.map +1 -0
  198. package/build-types/radio-group/index.d.ts +7 -9
  199. package/build-types/radio-group/index.d.ts.map +1 -1
  200. package/build-types/radio-group/radio.d.ts +8 -0
  201. package/build-types/radio-group/radio.d.ts.map +1 -0
  202. package/build-types/radio-group/stories/index.story.d.ts +14 -0
  203. package/build-types/radio-group/stories/index.story.d.ts.map +1 -0
  204. package/build-types/radio-group/types.d.ts +40 -0
  205. package/build-types/radio-group/types.d.ts.map +1 -0
  206. package/build-types/slot-fill/bubbles-virtually/slot.d.ts +1 -1
  207. package/build-types/slot-fill/types.d.ts +16 -6
  208. package/build-types/slot-fill/types.d.ts.map +1 -1
  209. package/build-types/tabs/index.d.ts +4 -3
  210. package/build-types/tabs/index.d.ts.map +1 -1
  211. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  212. package/build-types/tabs/styles.d.ts +10 -0
  213. package/build-types/tabs/styles.d.ts.map +1 -1
  214. package/build-types/tabs/tab.d.ts +1 -1
  215. package/build-types/tabs/tab.d.ts.map +1 -1
  216. package/build-types/tabs/tablist.d.ts +1 -1
  217. package/build-types/tabs/tablist.d.ts.map +1 -1
  218. package/build-types/tabs/tabpanel.d.ts +4 -1
  219. package/build-types/tabs/tabpanel.d.ts.map +1 -1
  220. package/build-types/tabs/types.d.ts +7 -31
  221. package/build-types/tabs/types.d.ts.map +1 -1
  222. package/build-types/text/types.d.ts +15 -2
  223. package/build-types/text/types.d.ts.map +1 -1
  224. package/build-types/text-control/index.d.ts +2 -1
  225. package/build-types/text-control/index.d.ts.map +1 -1
  226. package/build-types/text-control/types.d.ts +6 -0
  227. package/build-types/text-control/types.d.ts.map +1 -1
  228. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +1 -0
  229. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  230. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +2 -2
  231. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  232. package/build-types/toggle-group-control/types.d.ts +6 -0
  233. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  234. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  235. package/package.json +19 -20
  236. package/src/angle-picker-control/index.tsx +0 -1
  237. package/src/box-control/stories/index.story.tsx +82 -0
  238. package/src/button/style.scss +10 -2
  239. package/src/combobox-control/README.md +1 -3
  240. package/src/custom-select-control-v2/README.md +73 -0
  241. package/src/custom-select-control-v2/index.tsx +99 -0
  242. package/src/custom-select-control-v2/stories/index.story.tsx +149 -0
  243. package/src/custom-select-control-v2/styles.ts +76 -0
  244. package/src/custom-select-control-v2/types.ts +63 -0
  245. package/src/disclosure/index.tsx +44 -0
  246. package/src/disclosure/types.tsx +10 -0
  247. package/src/divider/component.tsx +3 -3
  248. package/src/divider/stories/index.story.tsx +8 -0
  249. package/src/divider/types.ts +2 -2
  250. package/src/dropdown-menu/style.scss +4 -0
  251. package/src/dropdown-menu-v2-ariakit/README.md +19 -12
  252. package/src/dropdown-menu-v2-ariakit/index.tsx +116 -51
  253. package/src/dropdown-menu-v2-ariakit/stories/index.story.tsx +205 -94
  254. package/src/dropdown-menu-v2-ariakit/styles.ts +153 -117
  255. package/src/dropdown-menu-v2-ariakit/test/index.tsx +5 -36
  256. package/src/dropdown-menu-v2-ariakit/types.ts +1 -8
  257. package/src/form-toggle/style.scss +37 -7
  258. package/src/form-token-field/index.tsx +11 -3
  259. package/src/form-token-field/token-input.tsx +1 -3
  260. package/src/form-token-field/types.ts +1 -0
  261. package/src/gradient-picker/index.tsx +1 -1
  262. package/src/heading/README.md +6 -1
  263. package/src/heading/hook.ts +6 -3
  264. package/src/heading/types.ts +23 -1
  265. package/src/index.native.js +1 -0
  266. package/src/mobile/audio-player/index.native.js +9 -13
  267. package/src/mobile/global-styles-context/utils.native.js +52 -3
  268. package/src/mobile/utils/alignments.native.js +1 -0
  269. package/src/navigable-container/README.md +1 -1
  270. package/src/private-apis.ts +4 -2
  271. package/src/radio-group/context.tsx +18 -0
  272. package/src/radio-group/index.tsx +65 -0
  273. package/src/radio-group/radio.tsx +55 -0
  274. package/src/radio-group/stories/index.story.tsx +90 -0
  275. package/src/radio-group/types.ts +39 -0
  276. package/src/slot-fill/README.md +1 -1
  277. package/src/slot-fill/bubbles-virtually/slot-fill-provider.tsx +1 -1
  278. package/src/slot-fill/types.ts +18 -6
  279. package/src/tabs/README.md +3 -33
  280. package/src/tabs/index.tsx +12 -2
  281. package/src/tabs/stories/index.story.tsx +17 -1
  282. package/src/tabs/styles.ts +16 -0
  283. package/src/tabs/tab.tsx +10 -10
  284. package/src/tabs/tablist.tsx +21 -20
  285. package/src/tabs/tabpanel.tsx +26 -25
  286. package/src/tabs/test/index.tsx +90 -16
  287. package/src/tabs/types.ts +7 -32
  288. package/src/text/README.md +5 -1
  289. package/src/text/types.ts +15 -2
  290. package/src/text-control/index.tsx +5 -1
  291. package/src/text-control/style.scss +5 -0
  292. package/src/text-control/types.ts +6 -0
  293. package/src/toggle-control/README.md +2 -2
  294. package/src/toggle-group-control/toggle-group-control/component.tsx +8 -2
  295. package/src/toggle-group-control/toggle-group-control/styles.ts +13 -4
  296. package/src/toggle-group-control/types.ts +6 -0
  297. package/src/toolbar/toolbar-button/style.scss +0 -5
  298. package/src/tools-panel/tools-panel-item/hook.ts +11 -2
  299. package/tsconfig.tsbuildinfo +1 -1
  300. package/build/radio-group/radio/index.js +0 -49
  301. package/build/radio-group/radio/index.js.map +0 -1
  302. package/build/radio-group/radio-context/index.js +0 -18
  303. package/build/radio-group/radio-context/index.js.map +0 -1
  304. package/build-module/radio-group/radio/index.js +0 -40
  305. package/build-module/radio-group/radio/index.js.map +0 -1
  306. package/build-module/radio-group/radio-context/index.js +0 -10
  307. package/build-module/radio-group/radio-context/index.js.map +0 -1
  308. package/build-types/radio-group/radio/index.d.ts +0 -7
  309. package/build-types/radio-group/radio/index.d.ts.map +0 -1
  310. package/build-types/radio-group/radio-context/index.d.ts +0 -6
  311. package/build-types/radio-group/radio-context/index.d.ts.map +0 -1
  312. package/src/box-control/stories/index.story.js +0 -75
  313. package/src/disclosure/index.js +0 -11
  314. package/src/radio-group/index.js +0 -51
  315. package/src/radio-group/radio/index.js +0 -40
  316. package/src/radio-group/radio-context/index.js +0 -11
  317. package/src/radio-group/stories/index.story.js +0 -83
@@ -14,6 +14,7 @@ import {
14
14
  useMemo,
15
15
  cloneElement,
16
16
  isValidElement,
17
+ useCallback,
17
18
  } from '@wordpress/element';
18
19
  import { isRTL } from '@wordpress/i18n';
19
20
  import { check, chevronRightSmall } from '@wordpress/icons';
@@ -29,7 +30,6 @@ import type {
29
30
  DropdownMenuContext as DropdownMenuContextType,
30
31
  DropdownMenuProps,
31
32
  DropdownMenuGroupProps,
32
- DropdownMenuGroupLabelProps,
33
33
  DropdownMenuItemProps,
34
34
  DropdownMenuCheckboxItemProps,
35
35
  DropdownMenuRadioItemProps,
@@ -54,16 +54,23 @@ export const DropdownMenuItem = forwardRef<
54
54
  <Styled.DropdownMenuItem
55
55
  ref={ ref }
56
56
  { ...props }
57
+ accessibleWhenDisabled
57
58
  hideOnClick={ hideOnClick }
58
59
  store={ dropdownMenuContext?.store }
59
60
  >
60
- { prefix && (
61
- <Styled.ItemPrefixWrapper>{ prefix }</Styled.ItemPrefixWrapper>
62
- ) }
63
- { children }
64
- { suffix && (
65
- <Styled.ItemSuffixWrapper>{ suffix }</Styled.ItemSuffixWrapper>
66
- ) }
61
+ <Styled.ItemPrefixWrapper>{ prefix }</Styled.ItemPrefixWrapper>
62
+
63
+ <Styled.DropdownMenuItemContentWrapper>
64
+ <Styled.DropdownMenuItemChildrenWrapper>
65
+ { children }
66
+ </Styled.DropdownMenuItemChildrenWrapper>
67
+
68
+ { suffix && (
69
+ <Styled.ItemSuffixWrapper>
70
+ { suffix }
71
+ </Styled.ItemSuffixWrapper>
72
+ ) }
73
+ </Styled.DropdownMenuItemContentWrapper>
67
74
  </Styled.DropdownMenuItem>
68
75
  );
69
76
  } );
@@ -81,24 +88,40 @@ export const DropdownMenuCheckboxItem = forwardRef<
81
88
  <Styled.DropdownMenuCheckboxItem
82
89
  ref={ ref }
83
90
  { ...props }
91
+ accessibleWhenDisabled
84
92
  hideOnClick={ hideOnClick }
85
93
  store={ dropdownMenuContext?.store }
86
94
  >
87
95
  <Ariakit.MenuItemCheck
88
96
  store={ dropdownMenuContext?.store }
89
97
  render={ <Styled.ItemPrefixWrapper /> }
98
+ // Override some ariakit inline styles
99
+ style={ { width: 'auto', height: 'auto' } }
90
100
  >
91
101
  <Icon icon={ check } size={ 24 } />
92
102
  </Ariakit.MenuItemCheck>
93
103
 
94
- { children }
95
- { suffix && (
96
- <Styled.ItemSuffixWrapper>{ suffix }</Styled.ItemSuffixWrapper>
97
- ) }
104
+ <Styled.DropdownMenuItemContentWrapper>
105
+ <Styled.DropdownMenuItemChildrenWrapper>
106
+ { children }
107
+ </Styled.DropdownMenuItemChildrenWrapper>
108
+
109
+ { suffix && (
110
+ <Styled.ItemSuffixWrapper>
111
+ { suffix }
112
+ </Styled.ItemSuffixWrapper>
113
+ ) }
114
+ </Styled.DropdownMenuItemContentWrapper>
98
115
  </Styled.DropdownMenuCheckboxItem>
99
116
  );
100
117
  } );
101
118
 
119
+ const radioCheck = (
120
+ <SVG xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
121
+ <Circle cx={ 12 } cy={ 12 } r={ 3 }></Circle>
122
+ </SVG>
123
+ );
124
+
102
125
  export const DropdownMenuRadioItem = forwardRef<
103
126
  HTMLDivElement,
104
127
  WordPressComponentProps< DropdownMenuRadioItemProps, 'div', false >
@@ -112,24 +135,30 @@ export const DropdownMenuRadioItem = forwardRef<
112
135
  <Styled.DropdownMenuRadioItem
113
136
  ref={ ref }
114
137
  { ...props }
138
+ accessibleWhenDisabled
115
139
  hideOnClick={ hideOnClick }
116
140
  store={ dropdownMenuContext?.store }
117
141
  >
118
142
  <Ariakit.MenuItemCheck
119
143
  store={ dropdownMenuContext?.store }
120
144
  render={ <Styled.ItemPrefixWrapper /> }
145
+ // Override some ariakit inline styles
146
+ style={ { width: 'auto', height: 'auto' } }
121
147
  >
122
- <SVG viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
123
- <Circle
124
- cx={ 12 }
125
- cy={ 12 }
126
- r={ 3 }
127
- fill="currentColor"
128
- ></Circle>
129
- </SVG>
148
+ <Icon icon={ radioCheck } size={ 24 } />
130
149
  </Ariakit.MenuItemCheck>
131
- { children }
132
- { suffix }
150
+
151
+ <Styled.DropdownMenuItemContentWrapper>
152
+ <Styled.DropdownMenuItemChildrenWrapper>
153
+ { children }
154
+ </Styled.DropdownMenuItemChildrenWrapper>
155
+
156
+ { suffix && (
157
+ <Styled.ItemSuffixWrapper>
158
+ { suffix }
159
+ </Styled.ItemSuffixWrapper>
160
+ ) }
161
+ </Styled.DropdownMenuItemContentWrapper>
133
162
  </Styled.DropdownMenuRadioItem>
134
163
  );
135
164
  } );
@@ -148,20 +177,6 @@ export const DropdownMenuGroup = forwardRef<
148
177
  );
149
178
  } );
150
179
 
151
- export const DropdownMenuGroupLabel = forwardRef<
152
- HTMLDivElement,
153
- WordPressComponentProps< DropdownMenuGroupLabelProps, 'div', false >
154
- >( function DropdownMenuGroupLabel( props, ref ) {
155
- const dropdownMenuContext = useContext( DropdownMenuContext );
156
- return (
157
- <Styled.DropdownMenuGroupLabel
158
- ref={ ref }
159
- { ...props }
160
- store={ dropdownMenuContext?.store }
161
- />
162
- );
163
- } );
164
-
165
180
  const UnconnectedDropdownMenu = (
166
181
  props: WordPressComponentProps< DropdownMenuProps, 'div', false >,
167
182
  ref: React.ForwardedRef< HTMLDivElement >
@@ -181,7 +196,6 @@ const UnconnectedDropdownMenu = (
181
196
  children,
182
197
  shift,
183
198
  modal = true,
184
- hideOnEscape = true,
185
199
 
186
200
  // From internal components context
187
201
  variant,
@@ -249,6 +263,28 @@ const UnconnectedDropdownMenu = (
249
263
  );
250
264
  }
251
265
 
266
+ const hideOnEscape = useCallback(
267
+ ( event: React.KeyboardEvent< Element > ) => {
268
+ // Pressing Escape can cause unexpected consequences (ie. exiting
269
+ // full screen mode on MacOs, close parent modals...).
270
+ event.preventDefault();
271
+ // Returning `true` causes the menu to hide.
272
+ return true;
273
+ },
274
+ []
275
+ );
276
+
277
+ const wrapperProps = useMemo(
278
+ () => ( {
279
+ dir: computedDirection,
280
+ style: {
281
+ direction:
282
+ computedDirection as React.CSSProperties[ 'direction' ],
283
+ },
284
+ } ),
285
+ [ computedDirection ]
286
+ );
287
+
252
288
  return (
253
289
  <>
254
290
  { /* Menu trigger */ }
@@ -259,12 +295,16 @@ const UnconnectedDropdownMenu = (
259
295
  dropdownMenuStore.parent
260
296
  ? cloneElement( trigger, {
261
297
  // Add submenu arrow, unless a `suffix` is explicitly specified
262
- suffix: trigger.props.suffix ?? (
263
- <Styled.SubmenuChevronIcon
264
- aria-hidden="true"
265
- icon={ chevronRightSmall }
266
- size={ 24 }
267
- />
298
+ suffix: (
299
+ <>
300
+ { trigger.props.suffix }
301
+ <Styled.SubmenuChevronIcon
302
+ aria-hidden="true"
303
+ icon={ chevronRightSmall }
304
+ size={ 24 }
305
+ preserveAspectRatio="xMidYMid slice"
306
+ />
307
+ </>
268
308
  ),
269
309
  } )
270
310
  : trigger
@@ -276,17 +316,16 @@ const UnconnectedDropdownMenu = (
276
316
  { ...otherProps }
277
317
  modal={ modal }
278
318
  store={ dropdownMenuStore }
279
- gutter={ gutter ?? ( dropdownMenuStore.parent ? 16 : 8 ) }
280
- shift={ shift ?? ( dropdownMenuStore.parent ? -8 : 0 ) }
319
+ // Root menu has an 8px distance from its trigger,
320
+ // otherwise 0 (which causes the submenu to slightly overlap)
321
+ gutter={ gutter ?? ( dropdownMenuStore.parent ? 0 : 8 ) }
322
+ // Align nested menu by the same (but opposite) amount
323
+ // as the menu container's padding.
324
+ shift={ shift ?? ( dropdownMenuStore.parent ? -4 : 0 ) }
281
325
  hideOnHoverOutside={ false }
282
326
  data-side={ appliedPlacementSide }
283
327
  variant={ variant }
284
- wrapperProps={ {
285
- dir: computedDirection,
286
- style: {
287
- direction: computedDirection,
288
- },
289
- } }
328
+ wrapperProps={ wrapperProps }
290
329
  hideOnEscape={ hideOnEscape }
291
330
  unmountOnHide
292
331
  >
@@ -316,3 +355,29 @@ export const DropdownMenuSeparator = forwardRef<
316
355
  />
317
356
  );
318
357
  } );
358
+
359
+ export const DropdownMenuItemLabel = forwardRef<
360
+ HTMLSpanElement,
361
+ WordPressComponentProps< { children: React.ReactNode }, 'span', true >
362
+ >( function DropdownMenuItemLabel( props, ref ) {
363
+ return (
364
+ <Styled.DropdownMenuItemLabel
365
+ numberOfLines={ 1 }
366
+ ref={ ref }
367
+ { ...props }
368
+ />
369
+ );
370
+ } );
371
+
372
+ export const DropdownMenuItemHelpText = forwardRef<
373
+ HTMLSpanElement,
374
+ WordPressComponentProps< { children: React.ReactNode }, 'span', true >
375
+ >( function DropdownMenuItemHelpText( props, ref ) {
376
+ return (
377
+ <Styled.DropdownMenuItemHelpText
378
+ numberOfLines={ 2 }
379
+ ref={ ref }
380
+ { ...props }
381
+ />
382
+ );
383
+ } );