@wordpress/block-library 7.0.2 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/audio/edit.js +4 -4
  3. package/build/audio/edit.js.map +1 -1
  4. package/build/audio/edit.native.js +4 -4
  5. package/build/audio/edit.native.js.map +1 -1
  6. package/build/audio/transforms.js +1 -1
  7. package/build/audio/transforms.js.map +1 -1
  8. package/build/block/edit.js +3 -9
  9. package/build/block/edit.js.map +1 -1
  10. package/build/button/edit.js +3 -2
  11. package/build/button/edit.js.map +1 -1
  12. package/build/button/edit.native.js +2 -2
  13. package/build/button/edit.native.js.map +1 -1
  14. package/build/buttons/transforms.js +8 -8
  15. package/build/buttons/transforms.js.map +1 -1
  16. package/build/categories/edit.js +15 -26
  17. package/build/categories/edit.js.map +1 -1
  18. package/build/code/index.js +0 -1
  19. package/build/code/index.js.map +1 -1
  20. package/build/columns/columnCalculations.native.js +1 -1
  21. package/build/columns/columnCalculations.native.js.map +1 -1
  22. package/build/columns/edit.js +1 -1
  23. package/build/columns/edit.js.map +1 -1
  24. package/build/columns/edit.native.js +3 -3
  25. package/build/columns/edit.native.js.map +1 -1
  26. package/build/cover/controls.native.js +5 -5
  27. package/build/cover/controls.native.js.map +1 -1
  28. package/build/cover/deprecated.js +188 -17
  29. package/build/cover/deprecated.js.map +1 -1
  30. package/build/cover/edit.js +8 -11
  31. package/build/cover/edit.js.map +1 -1
  32. package/build/cover/edit.native.js +8 -8
  33. package/build/cover/edit.native.js.map +1 -1
  34. package/build/cover/overlay-color-settings.native.js +3 -3
  35. package/build/cover/overlay-color-settings.native.js.map +1 -1
  36. package/build/cover/save.js +1 -1
  37. package/build/cover/save.js.map +1 -1
  38. package/build/cover/shared.js +2 -2
  39. package/build/cover/shared.js.map +1 -1
  40. package/build/embed/edit.js +1 -1
  41. package/build/embed/edit.js.map +1 -1
  42. package/build/embed/edit.native.js +1 -1
  43. package/build/embed/edit.native.js.map +1 -1
  44. package/build/embed/util.js +2 -2
  45. package/build/embed/util.js.map +1 -1
  46. package/build/embed/variations.js +1 -1
  47. package/build/embed/variations.js.map +1 -1
  48. package/build/file/edit.js +20 -17
  49. package/build/file/edit.js.map +1 -1
  50. package/build/file/edit.native.js +1 -1
  51. package/build/file/edit.native.js.map +1 -1
  52. package/build/file/save.js +7 -3
  53. package/build/file/save.js.map +1 -1
  54. package/build/freeform/edit.js +2 -2
  55. package/build/freeform/edit.js.map +1 -1
  56. package/build/gallery/edit.js +1 -1
  57. package/build/gallery/edit.js.map +1 -1
  58. package/build/gallery/gallery.native.js +1 -1
  59. package/build/gallery/gallery.native.js.map +1 -1
  60. package/build/gallery/v1/edit.js +3 -3
  61. package/build/gallery/v1/edit.js.map +1 -1
  62. package/build/gallery/v1/gallery-image.native.js +3 -3
  63. package/build/gallery/v1/gallery-image.native.js.map +1 -1
  64. package/build/gallery/v1/gallery.native.js +2 -2
  65. package/build/gallery/v1/gallery.native.js.map +1 -1
  66. package/build/group/index.js +3 -37
  67. package/build/group/index.js.map +1 -1
  68. package/build/group/transforms.js +45 -0
  69. package/build/group/transforms.js.map +1 -0
  70. package/build/home-link/edit.js +1 -1
  71. package/build/home-link/edit.js.map +1 -1
  72. package/build/image/edit.js +7 -6
  73. package/build/image/edit.js.map +1 -1
  74. package/build/image/edit.native.js +25 -10
  75. package/build/image/edit.native.js.map +1 -1
  76. package/build/image/transforms.js +1 -1
  77. package/build/image/transforms.js.map +1 -1
  78. package/build/index.js +3 -4
  79. package/build/index.js.map +1 -1
  80. package/build/index.native.js +2 -2
  81. package/build/index.native.js.map +1 -1
  82. package/build/media-text/edit.js +21 -2
  83. package/build/media-text/edit.js.map +1 -1
  84. package/build/media-text/edit.native.js +2 -2
  85. package/build/media-text/edit.native.js.map +1 -1
  86. package/build/media-text/media-container.native.js +1 -1
  87. package/build/media-text/media-container.native.js.map +1 -1
  88. package/build/missing/edit.native.js +1 -1
  89. package/build/missing/edit.native.js.map +1 -1
  90. package/build/more/transforms.js +2 -2
  91. package/build/more/transforms.js.map +1 -1
  92. package/build/navigation/edit/index.js +134 -60
  93. package/build/navigation/edit/index.js.map +1 -1
  94. package/build/navigation/edit/inner-blocks.js +8 -3
  95. package/build/navigation/edit/inner-blocks.js.map +1 -1
  96. package/build/navigation/edit/navigation-menu-selector.js +66 -53
  97. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  98. package/build/navigation/edit/placeholder/index.js +31 -46
  99. package/build/navigation/edit/placeholder/index.js.map +1 -1
  100. package/build/navigation/edit/placeholder/placeholder-preview.js +3 -12
  101. package/build/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
  102. package/build/navigation/edit/unsaved-inner-blocks.js +3 -1
  103. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  104. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +120 -0
  105. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
  106. package/build/navigation/edit/use-create-navigation-menu.js +53 -4
  107. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  108. package/build/navigation/edit/use-navigation-notice.js +3 -3
  109. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  110. package/build/navigation/menu-items-to-blocks.js +1 -1
  111. package/build/navigation/menu-items-to-blocks.js.map +1 -1
  112. package/build/navigation/use-navigation-entities.js +25 -49
  113. package/build/navigation/use-navigation-entities.js.map +1 -1
  114. package/build/navigation/use-navigation-menu.js +2 -0
  115. package/build/navigation/use-navigation-menu.js.map +1 -1
  116. package/build/navigation-link/fallback-variations.js +1 -1
  117. package/build/navigation-link/fallback-variations.js.map +1 -1
  118. package/build/navigation-link/hooks.js +2 -2
  119. package/build/navigation-link/hooks.js.map +1 -1
  120. package/build/navigation-submenu/edit.js +2 -2
  121. package/build/navigation-submenu/edit.js.map +1 -1
  122. package/build/page-list/convert-to-links-modal.js +13 -23
  123. package/build/page-list/convert-to-links-modal.js.map +1 -1
  124. package/build/page-list/edit.js +8 -22
  125. package/build/page-list/edit.js.map +1 -1
  126. package/build/post-author-name/edit.js +2 -1
  127. package/build/post-author-name/edit.js.map +1 -1
  128. package/build/post-comments-form/edit.js +3 -1
  129. package/build/post-comments-form/edit.js.map +1 -1
  130. package/build/post-excerpt/edit.js +7 -4
  131. package/build/post-excerpt/edit.js.map +1 -1
  132. package/build/post-terms/edit.js +3 -1
  133. package/build/post-terms/edit.js.map +1 -1
  134. package/build/query-title/edit.js +0 -1
  135. package/build/query-title/edit.js.map +1 -1
  136. package/build/search/edit.js +4 -1
  137. package/build/search/edit.js.map +1 -1
  138. package/build/search/edit.native.js +1 -1
  139. package/build/search/edit.native.js.map +1 -1
  140. package/build/separator/save.js +4 -4
  141. package/build/separator/save.js.map +1 -1
  142. package/build/separator/separator-settings.native.js +1 -1
  143. package/build/separator/separator-settings.native.js.map +1 -1
  144. package/build/site-logo/edit.js +1 -1
  145. package/build/site-logo/edit.js.map +1 -1
  146. package/build/social-link/edit.native.js +11 -3
  147. package/build/social-link/edit.native.js.map +1 -1
  148. package/build/spacer/controls.js +5 -5
  149. package/build/spacer/controls.js.map +1 -1
  150. package/build/spacer/controls.native.js +5 -5
  151. package/build/spacer/controls.native.js.map +1 -1
  152. package/build/table/edit.js +2 -2
  153. package/build/table/edit.js.map +1 -1
  154. package/build/video/edit.js +4 -4
  155. package/build/video/edit.js.map +1 -1
  156. package/build/video/edit.native.js +3 -3
  157. package/build/video/edit.native.js.map +1 -1
  158. package/build-module/audio/edit.js +4 -4
  159. package/build-module/audio/edit.js.map +1 -1
  160. package/build-module/audio/edit.native.js +4 -4
  161. package/build-module/audio/edit.native.js.map +1 -1
  162. package/build-module/audio/transforms.js +1 -1
  163. package/build-module/audio/transforms.js.map +1 -1
  164. package/build-module/block/edit.js +5 -11
  165. package/build-module/block/edit.js.map +1 -1
  166. package/build-module/button/edit.js +3 -2
  167. package/build-module/button/edit.js.map +1 -1
  168. package/build-module/button/edit.native.js +2 -2
  169. package/build-module/button/edit.native.js.map +1 -1
  170. package/build-module/buttons/transforms.js +8 -8
  171. package/build-module/buttons/transforms.js.map +1 -1
  172. package/build-module/categories/edit.js +15 -25
  173. package/build-module/categories/edit.js.map +1 -1
  174. package/build-module/code/index.js +0 -1
  175. package/build-module/code/index.js.map +1 -1
  176. package/build-module/columns/columnCalculations.native.js +1 -1
  177. package/build-module/columns/columnCalculations.native.js.map +1 -1
  178. package/build-module/columns/edit.js +1 -1
  179. package/build-module/columns/edit.js.map +1 -1
  180. package/build-module/columns/edit.native.js +3 -3
  181. package/build-module/columns/edit.native.js.map +1 -1
  182. package/build-module/cover/controls.native.js +5 -5
  183. package/build-module/cover/controls.native.js.map +1 -1
  184. package/build-module/cover/deprecated.js +190 -17
  185. package/build-module/cover/deprecated.js.map +1 -1
  186. package/build-module/cover/edit.js +8 -11
  187. package/build-module/cover/edit.js.map +1 -1
  188. package/build-module/cover/edit.native.js +8 -8
  189. package/build-module/cover/edit.native.js.map +1 -1
  190. package/build-module/cover/overlay-color-settings.native.js +3 -3
  191. package/build-module/cover/overlay-color-settings.native.js.map +1 -1
  192. package/build-module/cover/save.js +1 -1
  193. package/build-module/cover/save.js.map +1 -1
  194. package/build-module/cover/shared.js +2 -2
  195. package/build-module/cover/shared.js.map +1 -1
  196. package/build-module/embed/edit.js +1 -1
  197. package/build-module/embed/edit.js.map +1 -1
  198. package/build-module/embed/edit.native.js +1 -1
  199. package/build-module/embed/edit.native.js.map +1 -1
  200. package/build-module/embed/util.js +2 -2
  201. package/build-module/embed/util.js.map +1 -1
  202. package/build-module/embed/variations.js +1 -1
  203. package/build-module/embed/variations.js.map +1 -1
  204. package/build-module/file/edit.js +21 -18
  205. package/build-module/file/edit.js.map +1 -1
  206. package/build-module/file/edit.native.js +1 -1
  207. package/build-module/file/edit.native.js.map +1 -1
  208. package/build-module/file/save.js +7 -3
  209. package/build-module/file/save.js.map +1 -1
  210. package/build-module/freeform/edit.js +2 -2
  211. package/build-module/freeform/edit.js.map +1 -1
  212. package/build-module/gallery/edit.js +1 -1
  213. package/build-module/gallery/edit.js.map +1 -1
  214. package/build-module/gallery/gallery.native.js +1 -1
  215. package/build-module/gallery/gallery.native.js.map +1 -1
  216. package/build-module/gallery/v1/edit.js +3 -3
  217. package/build-module/gallery/v1/edit.js.map +1 -1
  218. package/build-module/gallery/v1/gallery-image.native.js +3 -3
  219. package/build-module/gallery/v1/gallery-image.native.js.map +1 -1
  220. package/build-module/gallery/v1/gallery.native.js +2 -2
  221. package/build-module/gallery/v1/gallery.native.js.map +1 -1
  222. package/build-module/group/index.js +2 -36
  223. package/build-module/group/index.js.map +1 -1
  224. package/build-module/group/transforms.js +36 -0
  225. package/build-module/group/transforms.js.map +1 -0
  226. package/build-module/home-link/edit.js +1 -1
  227. package/build-module/home-link/edit.js.map +1 -1
  228. package/build-module/image/edit.js +7 -6
  229. package/build-module/image/edit.js.map +1 -1
  230. package/build-module/image/edit.native.js +25 -10
  231. package/build-module/image/edit.native.js.map +1 -1
  232. package/build-module/image/transforms.js +1 -1
  233. package/build-module/image/transforms.js.map +1 -1
  234. package/build-module/index.js +4 -5
  235. package/build-module/index.js.map +1 -1
  236. package/build-module/index.native.js +2 -2
  237. package/build-module/index.native.js.map +1 -1
  238. package/build-module/media-text/edit.js +20 -2
  239. package/build-module/media-text/edit.js.map +1 -1
  240. package/build-module/media-text/edit.native.js +2 -2
  241. package/build-module/media-text/edit.native.js.map +1 -1
  242. package/build-module/media-text/media-container.native.js +1 -1
  243. package/build-module/media-text/media-container.native.js.map +1 -1
  244. package/build-module/missing/edit.native.js +1 -1
  245. package/build-module/missing/edit.native.js.map +1 -1
  246. package/build-module/more/transforms.js +2 -2
  247. package/build-module/more/transforms.js.map +1 -1
  248. package/build-module/navigation/edit/index.js +128 -60
  249. package/build-module/navigation/edit/index.js.map +1 -1
  250. package/build-module/navigation/edit/inner-blocks.js +8 -3
  251. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  252. package/build-module/navigation/edit/navigation-menu-selector.js +66 -50
  253. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  254. package/build-module/navigation/edit/placeholder/index.js +32 -45
  255. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  256. package/build-module/navigation/edit/placeholder/placeholder-preview.js +3 -9
  257. package/build-module/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
  258. package/build-module/navigation/edit/unsaved-inner-blocks.js +3 -1
  259. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  260. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +100 -0
  261. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
  262. package/build-module/navigation/edit/use-create-navigation-menu.js +48 -5
  263. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  264. package/build-module/navigation/edit/use-navigation-notice.js +3 -3
  265. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  266. package/build-module/navigation/menu-items-to-blocks.js +1 -1
  267. package/build-module/navigation/menu-items-to-blocks.js.map +1 -1
  268. package/build-module/navigation/use-navigation-entities.js +26 -50
  269. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  270. package/build-module/navigation/use-navigation-menu.js +2 -0
  271. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  272. package/build-module/navigation-link/fallback-variations.js +1 -1
  273. package/build-module/navigation-link/fallback-variations.js.map +1 -1
  274. package/build-module/navigation-link/hooks.js +2 -2
  275. package/build-module/navigation-link/hooks.js.map +1 -1
  276. package/build-module/navigation-submenu/edit.js +2 -2
  277. package/build-module/navigation-submenu/edit.js.map +1 -1
  278. package/build-module/page-list/convert-to-links-modal.js +15 -25
  279. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  280. package/build-module/page-list/edit.js +9 -23
  281. package/build-module/page-list/edit.js.map +1 -1
  282. package/build-module/post-author-name/edit.js +2 -1
  283. package/build-module/post-author-name/edit.js.map +1 -1
  284. package/build-module/post-comments-form/edit.js +4 -2
  285. package/build-module/post-comments-form/edit.js.map +1 -1
  286. package/build-module/post-excerpt/edit.js +9 -6
  287. package/build-module/post-excerpt/edit.js.map +1 -1
  288. package/build-module/post-terms/edit.js +2 -1
  289. package/build-module/post-terms/edit.js.map +1 -1
  290. package/build-module/query-title/edit.js +0 -1
  291. package/build-module/query-title/edit.js.map +1 -1
  292. package/build-module/search/edit.js +3 -1
  293. package/build-module/search/edit.js.map +1 -1
  294. package/build-module/search/edit.native.js +1 -1
  295. package/build-module/search/edit.native.js.map +1 -1
  296. package/build-module/separator/save.js +4 -4
  297. package/build-module/separator/save.js.map +1 -1
  298. package/build-module/separator/separator-settings.native.js +1 -1
  299. package/build-module/separator/separator-settings.native.js.map +1 -1
  300. package/build-module/site-logo/edit.js +1 -1
  301. package/build-module/site-logo/edit.js.map +1 -1
  302. package/build-module/social-link/edit.native.js +11 -3
  303. package/build-module/social-link/edit.native.js.map +1 -1
  304. package/build-module/spacer/controls.js +5 -5
  305. package/build-module/spacer/controls.js.map +1 -1
  306. package/build-module/spacer/controls.native.js +5 -5
  307. package/build-module/spacer/controls.native.js.map +1 -1
  308. package/build-module/table/edit.js +2 -2
  309. package/build-module/table/edit.js.map +1 -1
  310. package/build-module/video/edit.js +4 -4
  311. package/build-module/video/edit.js.map +1 -1
  312. package/build-module/video/edit.native.js +3 -3
  313. package/build-module/video/edit.native.js.map +1 -1
  314. package/build-style/button/editor-rtl.css +0 -3
  315. package/build-style/button/editor.css +0 -3
  316. package/build-style/code/style-rtl.css +2 -1
  317. package/build-style/code/style.css +2 -1
  318. package/build-style/code/theme-rtl.css +0 -3
  319. package/build-style/code/theme.css +0 -3
  320. package/build-style/common-rtl.css +1 -1
  321. package/build-style/common.css +1 -1
  322. package/build-style/cover/style-rtl.css +1 -5
  323. package/build-style/cover/style.css +1 -5
  324. package/build-style/editor-rtl.css +16 -3
  325. package/build-style/editor.css +16 -3
  326. package/build-style/image/style-rtl.css +2 -1
  327. package/build-style/image/style.css +2 -1
  328. package/build-style/navigation/editor-rtl.css +16 -0
  329. package/build-style/navigation/editor.css +16 -0
  330. package/build-style/style-rtl.css +12 -10
  331. package/build-style/style.css +12 -10
  332. package/build-style/tag-cloud/style-rtl.css +6 -2
  333. package/build-style/tag-cloud/style.css +6 -2
  334. package/build-style/theme-rtl.css +0 -3
  335. package/build-style/theme.css +0 -3
  336. package/package.json +32 -28
  337. package/src/audio/edit.js +4 -4
  338. package/src/audio/edit.native.js +4 -4
  339. package/src/audio/transforms.js +1 -1
  340. package/src/block/edit.js +7 -22
  341. package/src/block/test/edit.native.js +9 -9
  342. package/src/button/edit.js +2 -1
  343. package/src/button/edit.native.js +2 -2
  344. package/src/button/editor.scss +0 -5
  345. package/src/buttons/test/edit.native.js +3 -3
  346. package/src/buttons/transforms.js +8 -8
  347. package/src/categories/edit.js +12 -22
  348. package/src/code/block.json +0 -1
  349. package/src/code/style.scss +4 -2
  350. package/src/code/theme.scss +0 -3
  351. package/src/columns/columnCalculations.native.js +1 -1
  352. package/src/columns/edit.js +1 -1
  353. package/src/columns/edit.native.js +3 -3
  354. package/src/comments-pagination-numbers/index.php +1 -1
  355. package/src/common.scss +1 -1
  356. package/src/cover/controls.native.js +1 -1
  357. package/src/cover/deprecated.js +214 -1
  358. package/src/cover/edit.js +6 -8
  359. package/src/cover/edit.native.js +8 -8
  360. package/src/cover/overlay-color-settings.native.js +3 -3
  361. package/src/cover/save.js +4 -3
  362. package/src/cover/shared.js +2 -2
  363. package/src/cover/style.scss +1 -3
  364. package/src/cover/test/edit.native.js +39 -39
  365. package/src/embed/edit.js +1 -1
  366. package/src/embed/edit.native.js +1 -1
  367. package/src/embed/test/index.native.js +105 -105
  368. package/src/embed/util.js +2 -2
  369. package/src/embed/variations.js +1 -1
  370. package/src/file/edit.js +19 -17
  371. package/src/file/edit.native.js +1 -1
  372. package/src/file/save.js +9 -3
  373. package/src/file/style.native.scss +1 -0
  374. package/src/freeform/edit.js +2 -2
  375. package/src/gallery/edit.js +1 -1
  376. package/src/gallery/gallery.native.js +1 -1
  377. package/src/gallery/test/__snapshots__/index.native.js.snap +164 -0
  378. package/src/gallery/test/helpers.native.js +293 -0
  379. package/src/gallery/test/index.native.js +583 -65
  380. package/src/gallery/v1/edit.js +3 -4
  381. package/src/gallery/v1/gallery-image.native.js +3 -3
  382. package/src/gallery/v1/gallery.native.js +2 -2
  383. package/src/group/index.js +2 -54
  384. package/src/group/transforms.js +52 -0
  385. package/src/home-link/edit.js +1 -1
  386. package/src/image/edit.js +7 -6
  387. package/src/image/edit.native.js +25 -8
  388. package/src/image/style.scss +2 -1
  389. package/src/image/test/edit.native.js +1 -1
  390. package/src/image/transforms.js +1 -1
  391. package/src/index.js +2 -3
  392. package/src/index.native.js +2 -2
  393. package/src/media-text/edit.js +20 -2
  394. package/src/media-text/edit.native.js +2 -2
  395. package/src/media-text/media-container.native.js +1 -1
  396. package/src/media-text/style.native.scss +1 -0
  397. package/src/missing/edit.native.js +1 -1
  398. package/src/missing/test/edit-integration.native.js +4 -4
  399. package/src/missing/test/edit.native.js +2 -2
  400. package/src/more/transforms.js +2 -2
  401. package/src/navigation/edit/index.js +194 -69
  402. package/src/navigation/edit/inner-blocks.js +11 -4
  403. package/src/navigation/edit/navigation-menu-selector.js +97 -79
  404. package/src/navigation/edit/placeholder/index.js +61 -84
  405. package/src/navigation/edit/placeholder/placeholder-preview.js +3 -10
  406. package/src/navigation/edit/unsaved-inner-blocks.js +3 -1
  407. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +137 -0
  408. package/src/navigation/edit/use-create-navigation-menu.js +59 -8
  409. package/src/navigation/edit/use-navigation-notice.js +3 -3
  410. package/src/navigation/editor.scss +23 -1
  411. package/src/navigation/menu-items-to-blocks.js +1 -1
  412. package/src/navigation/test/menu-items-to-blocks.js +1 -1
  413. package/src/navigation/use-navigation-entities.js +26 -60
  414. package/src/navigation/use-navigation-menu.js +5 -0
  415. package/src/navigation-link/fallback-variations.js +1 -1
  416. package/src/navigation-link/hooks.js +2 -2
  417. package/src/navigation-link/test/edit.js +5 -5
  418. package/src/navigation-submenu/edit.js +2 -2
  419. package/src/page-list/convert-to-links-modal.js +17 -31
  420. package/src/page-list/edit.js +14 -23
  421. package/src/post-author-name/edit.js +1 -0
  422. package/src/post-author-name/index.php +1 -1
  423. package/src/post-comments-form/edit.js +7 -3
  424. package/src/post-excerpt/edit.js +9 -12
  425. package/src/post-terms/edit.js +2 -1
  426. package/src/query-title/edit.js +0 -1
  427. package/src/search/edit.js +6 -0
  428. package/src/search/edit.native.js +1 -1
  429. package/src/search/index.php +3 -2
  430. package/src/search/test/edit.native.js +0 -1
  431. package/src/separator/save.js +4 -4
  432. package/src/separator/separator-settings.native.js +1 -1
  433. package/src/site-logo/edit.js +1 -1
  434. package/src/social-link/edit.native.js +17 -8
  435. package/src/social-link/test/index.native.js +138 -0
  436. package/src/spacer/controls.js +1 -1
  437. package/src/spacer/controls.native.js +1 -1
  438. package/src/table/edit.js +2 -2
  439. package/src/tag-cloud/style.scss +12 -7
  440. package/src/video/edit.js +4 -4
  441. package/src/video/edit.native.js +3 -3
  442. package/src/video/style.native.scss +1 -0
  443. package/build/navigation/use-convert-classic-menu.js +0 -59
  444. package/build/navigation/use-convert-classic-menu.js.map +0 -1
  445. package/build-module/navigation/use-convert-classic-menu.js +0 -47
  446. package/build-module/navigation/use-convert-classic-menu.js.map +0 -1
  447. package/src/navigation/use-convert-classic-menu.js +0 -58
@@ -35,10 +35,11 @@ import {
35
35
  __experimentalToggleGroupControl as ToggleGroupControl,
36
36
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
37
37
  ToolbarGroup,
38
- ToolbarDropdownMenu,
39
38
  Button,
39
+ Spinner,
40
40
  } from '@wordpress/components';
41
41
  import { __ } from '@wordpress/i18n';
42
+ import { speak } from '@wordpress/a11y';
42
43
 
43
44
  /**
44
45
  * Internal dependencies
@@ -47,7 +48,6 @@ import useListViewModal from './use-list-view-modal';
47
48
  import useNavigationMenu from '../use-navigation-menu';
48
49
  import useNavigationEntities from '../use-navigation-entities';
49
50
  import Placeholder from './placeholder';
50
- import PlaceholderPreview from './placeholder/placeholder-preview';
51
51
  import ResponsiveWrapper from './responsive-wrapper';
52
52
  import NavigationInnerBlocks from './inner-blocks';
53
53
  import NavigationMenuSelector from './navigation-menu-selector';
@@ -56,6 +56,16 @@ import UnsavedInnerBlocks from './unsaved-inner-blocks';
56
56
  import NavigationMenuDeleteControl from './navigation-menu-delete-control';
57
57
  import useNavigationNotice from './use-navigation-notice';
58
58
  import OverlayMenuIcon from './overlay-menu-icon';
59
+ import useConvertClassicToBlockMenu, {
60
+ CLASSIC_MENU_CONVERSION_ERROR,
61
+ CLASSIC_MENU_CONVERSION_PENDING,
62
+ CLASSIC_MENU_CONVERSION_SUCCESS,
63
+ } from './use-convert-classic-menu-to-block-menu';
64
+ import useCreateNavigationMenu, {
65
+ CREATE_NAVIGATION_MENU_ERROR,
66
+ CREATE_NAVIGATION_MENU_PENDING,
67
+ CREATE_NAVIGATION_MENU_SUCCESS,
68
+ } from './use-create-navigation-menu';
59
69
 
60
70
  const EMPTY_ARRAY = [];
61
71
 
@@ -157,6 +167,51 @@ function Navigation( {
157
167
  // the Select Menu dropdown.
158
168
  useNavigationEntities();
159
169
 
170
+ const [
171
+ showNavigationMenuCreateNotice,
172
+ hideNavigationMenuCreateNotice,
173
+ ] = useNavigationNotice( {
174
+ name: 'block-library/core/navigation/create',
175
+ } );
176
+
177
+ const {
178
+ create: createNavigationMenu,
179
+ status: createNavigationMenuStatus,
180
+ error: createNavigationMenuError,
181
+ value: createNavigationMenuPost,
182
+ } = useCreateNavigationMenu( clientId );
183
+
184
+ const isCreatingNavigationMenu =
185
+ createNavigationMenuStatus === CREATE_NAVIGATION_MENU_PENDING;
186
+
187
+ useEffect( () => {
188
+ hideNavigationMenuCreateNotice();
189
+
190
+ if ( createNavigationMenuStatus === CREATE_NAVIGATION_MENU_PENDING ) {
191
+ speak( __( `Creating Navigation Menu.` ) );
192
+ }
193
+
194
+ if ( createNavigationMenuStatus === CREATE_NAVIGATION_MENU_SUCCESS ) {
195
+ setRef( createNavigationMenuPost.id );
196
+ selectBlock( clientId );
197
+
198
+ showNavigationMenuCreateNotice(
199
+ __( `Navigation Menu successfully created.` )
200
+ );
201
+ }
202
+
203
+ if ( createNavigationMenuStatus === CREATE_NAVIGATION_MENU_ERROR ) {
204
+ showNavigationMenuCreateNotice(
205
+ __( 'Failed to create Navigation Menu.' )
206
+ );
207
+ }
208
+ }, [
209
+ createNavigationMenu,
210
+ createNavigationMenuStatus,
211
+ createNavigationMenuError,
212
+ createNavigationMenuPost,
213
+ ] );
214
+
160
215
  const {
161
216
  hasUncontrolledInnerBlocks,
162
217
  uncontrolledInnerBlocks,
@@ -173,8 +228,7 @@ function Navigation( {
173
228
  // introduce a selector like `getUncontrolledInnerBlocks`, just in
174
229
  // case `getBlock` is fixed.
175
230
  const _uncontrolledInnerBlocks = getBlock( clientId ).innerBlocks;
176
- const _hasUncontrolledInnerBlocks =
177
- _uncontrolledInnerBlocks?.length;
231
+ const _hasUncontrolledInnerBlocks = !! _uncontrolledInnerBlocks?.length;
178
232
  const _controlledInnerBlocks = _hasUncontrolledInnerBlocks
179
233
  ? EMPTY_ARRAY
180
234
  : getBlocks( clientId );
@@ -206,10 +260,6 @@ function Navigation( {
206
260
 
207
261
  const isWithinUnassignedArea = !! navigationArea && ! ref;
208
262
 
209
- const [ isPlaceholderShown, setIsPlaceholderShown ] = useState(
210
- ! hasUncontrolledInnerBlocks || isWithinUnassignedArea
211
- );
212
-
213
263
  const [ isResponsiveMenuOpen, setResponsiveMenuVisibility ] = useState(
214
264
  false
215
265
  );
@@ -219,8 +269,6 @@ function Navigation( {
219
269
  const {
220
270
  isNavigationMenuResolved,
221
271
  isNavigationMenuMissing,
222
- canSwitchNavigationMenu,
223
- hasResolvedNavigationMenus,
224
272
  navigationMenus,
225
273
  navigationMenu,
226
274
  canUserUpdateNavigationMenu,
@@ -228,6 +276,7 @@ function Navigation( {
228
276
  canUserDeleteNavigationMenu,
229
277
  hasResolvedCanUserDeleteNavigationMenu,
230
278
  canUserCreateNavigationMenu,
279
+ isResolvingCanUserCreateNavigationMenu,
231
280
  hasResolvedCanUserCreateNavigationMenu,
232
281
  } = useNavigationMenu( ref );
233
282
 
@@ -238,9 +287,45 @@ function Navigation( {
238
287
  clientId
239
288
  );
240
289
 
290
+ const {
291
+ convert,
292
+ status: classicMenuConversionStatus,
293
+ error: classicMenuConversionError,
294
+ value: classicMenuConversionResult,
295
+ } = useConvertClassicToBlockMenu( clientId );
296
+
297
+ const isConvertingClassicMenu =
298
+ classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING;
299
+
300
+ // The standard HTML5 tag for the block wrapper.
301
+ const TagName = 'nav';
302
+
303
+ // "placeholder" shown if:
304
+ // - there is no ref attribute pointing to a Navigation Post.
305
+ // - there is no classic menu conversion process in progress.
306
+ // - there is no menu creation process in progress.
307
+ // - there are no uncontrolled blocks.
308
+ // - (legacy) there is a Navigation Area without a ref attribute pointing to a Navigation Post.
309
+ const isPlaceholder =
310
+ ! ref &&
311
+ ! isCreatingNavigationMenu &&
312
+ ! isConvertingClassicMenu &&
313
+ ( ! hasUncontrolledInnerBlocks || isWithinUnassignedArea );
314
+
241
315
  const isEntityAvailable =
242
316
  ! isNavigationMenuMissing && isNavigationMenuResolved;
243
317
 
318
+ // "loading" state:
319
+ // - there is a menu creation process in progress.
320
+ // - there is a classic menu conversion process in progress.
321
+ // OR
322
+ // - there is a ref attribute pointing to a Navigation Post
323
+ // - the Navigation Post isn't available (hasn't resolved) yet.
324
+ const isLoading =
325
+ isCreatingNavigationMenu ||
326
+ isConvertingClassicMenu ||
327
+ !! ( ref && ! isEntityAvailable && ! isConvertingClassicMenu );
328
+
244
329
  const blockProps = useBlockProps( {
245
330
  ref: navRef,
246
331
  className: classnames( className, {
@@ -302,6 +387,42 @@ function Navigation( {
302
387
  ] = useState();
303
388
  const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();
304
389
 
390
+ const [
391
+ showClassicMenuConversionErrorNotice,
392
+ hideClassicMenuConversionErrorNotice,
393
+ ] = useNavigationNotice( {
394
+ name: 'block-library/core/navigation/classic-menu-conversion/error',
395
+ } );
396
+
397
+ function handleUpdateMenu( menuId ) {
398
+ setRef( menuId );
399
+ selectBlock( clientId );
400
+ }
401
+
402
+ useEffect( () => {
403
+ if ( classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING ) {
404
+ speak( __( 'Classic menu importing.' ) );
405
+ }
406
+
407
+ if (
408
+ classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_SUCCESS &&
409
+ classicMenuConversionResult
410
+ ) {
411
+ handleUpdateMenu( classicMenuConversionResult?.id );
412
+ hideClassicMenuConversionErrorNotice();
413
+ speak( __( 'Classic menu imported successfully.' ) );
414
+ }
415
+
416
+ if ( classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_ERROR ) {
417
+ showClassicMenuConversionErrorNotice( classicMenuConversionError );
418
+ speak( __( 'Classic menu import failed.' ) );
419
+ }
420
+ }, [
421
+ classicMenuConversionStatus,
422
+ classicMenuConversionResult,
423
+ classicMenuConversionError,
424
+ ] );
425
+
305
426
  // Spacer block needs orientation from context. This is a patch until
306
427
  // https://github.com/WordPress/gutenberg/issues/36197 is addressed.
307
428
  useEffect( () => {
@@ -332,11 +453,6 @@ function Navigation( {
332
453
  }
333
454
  } );
334
455
 
335
- // Hide the placeholder if an navigation menu entity has loaded.
336
- useEffect( () => {
337
- setIsPlaceholderShown( ! isEntityAvailable );
338
- }, [ isEntityAvailable ] );
339
-
340
456
  const [ showCantEditNotice, hideCantEditNotice ] = useNavigationNotice( {
341
457
  name: 'block-library/core/navigation/permissions/update',
342
458
  message: __(
@@ -385,7 +501,26 @@ function Navigation( {
385
501
  ref,
386
502
  ] );
387
503
 
388
- const startWithEmptyMenu = useCallback( () => {
504
+ const handleSelectNavigation = useCallback(
505
+ ( navPostOrClassicMenu ) => {
506
+ if ( ! navPostOrClassicMenu ) {
507
+ return;
508
+ }
509
+
510
+ const isClassicMenu = navPostOrClassicMenu.hasOwnProperty(
511
+ 'auto_add'
512
+ );
513
+
514
+ if ( isClassicMenu ) {
515
+ convert( navPostOrClassicMenu.id, navPostOrClassicMenu.name );
516
+ } else {
517
+ handleUpdateMenu( navPostOrClassicMenu.id );
518
+ }
519
+ },
520
+ [ convert, handleUpdateMenu ]
521
+ );
522
+
523
+ const resetToEmptyBlock = useCallback( () => {
389
524
  registry.batch( () => {
390
525
  if ( navigationArea ) {
391
526
  setAreaMenu( 0 );
@@ -396,7 +531,6 @@ function Navigation( {
396
531
  if ( ! ref ) {
397
532
  replaceInnerBlocks( clientId, [] );
398
533
  }
399
- setIsPlaceholderShown( true );
400
534
  } );
401
535
  }, [ clientId, ref ] );
402
536
 
@@ -408,7 +542,7 @@ function Navigation( {
408
542
  const hasUnsavedBlocks = hasUncontrolledInnerBlocks && ! isEntityAvailable;
409
543
  if ( hasUnsavedBlocks ) {
410
544
  return (
411
- <nav { ...blockProps }>
545
+ <TagName { ...blockProps }>
412
546
  <ResponsiveWrapper
413
547
  id={ clientId }
414
548
  onToggle={ setResponsiveMenuVisibility }
@@ -435,7 +569,7 @@ function Navigation( {
435
569
  } }
436
570
  />
437
571
  </ResponsiveWrapper>
438
- </nav>
572
+ </TagName>
439
573
  );
440
574
  }
441
575
 
@@ -448,7 +582,7 @@ function Navigation( {
448
582
  { __(
449
583
  'Navigation menu has been deleted or is unavailable. '
450
584
  ) }
451
- <Button onClick={ startWithEmptyMenu } variant="link">
585
+ <Button onClick={ resetToEmptyBlock } variant="link">
452
586
  { __( 'Create a new menu?' ) }
453
587
  </Button>
454
588
  </Warning>
@@ -477,31 +611,39 @@ function Navigation( {
477
611
  { open: overlayMenuPreview }
478
612
  );
479
613
 
614
+ if ( isPlaceholder ) {
615
+ return (
616
+ <TagName { ...blockProps }>
617
+ <PlaceholderComponent
618
+ isSelected={ isSelected }
619
+ currentMenuId={ ref }
620
+ clientId={ clientId }
621
+ canUserCreateNavigationMenu={ canUserCreateNavigationMenu }
622
+ isResolvingCanUserCreateNavigationMenu={
623
+ isResolvingCanUserCreateNavigationMenu
624
+ }
625
+ onFinish={ handleSelectNavigation }
626
+ onCreateEmpty={ () => createNavigationMenu( '', [] ) }
627
+ />
628
+ </TagName>
629
+ );
630
+ }
631
+
480
632
  return (
481
633
  <EntityProvider kind="postType" type="wp_navigation" id={ ref }>
482
634
  <RecursionProvider>
483
635
  <BlockControls>
484
636
  { ! isDraftNavigationMenu && isEntityAvailable && (
485
- <ToolbarGroup>
486
- <ToolbarDropdownMenu
487
- label={ __( 'Select Menu' ) }
488
- text={ __( 'Select Menu' ) }
489
- icon={ null }
490
- >
491
- { ( { onClose } ) => (
492
- <NavigationMenuSelector
493
- clientId={ clientId }
494
- onSelect={ ( { id } ) => {
495
- setRef( id );
496
- onClose();
497
- } }
498
- onCreateNew={ startWithEmptyMenu }
499
- /* translators: %s: The name of a menu. */
500
- actionLabel={ __( "Switch to '%s'" ) }
501
- showManageActions
502
- />
503
- ) }
504
- </ToolbarDropdownMenu>
637
+ <ToolbarGroup className="wp-block-navigation__toolbar-menu-selector">
638
+ <NavigationMenuSelector
639
+ currentMenuId={ ref }
640
+ clientId={ clientId }
641
+ onSelect={ handleSelectNavigation }
642
+ onCreateNew={ resetToEmptyBlock }
643
+ /* translators: %s: The name of a menu. */
644
+ actionLabel={ __( "Switch to '%s'" ) }
645
+ showManageActions
646
+ />
505
647
  </ToolbarGroup>
506
648
  ) }
507
649
  <ToolbarGroup>{ listViewToolbarButton }</ToolbarGroup>
@@ -652,36 +794,20 @@ function Navigation( {
652
794
  { hasResolvedCanUserDeleteNavigationMenu &&
653
795
  canUserDeleteNavigationMenu && (
654
796
  <NavigationMenuDeleteControl
655
- onDelete={ startWithEmptyMenu }
797
+ onDelete={ resetToEmptyBlock }
656
798
  />
657
799
  ) }
658
800
  </InspectorControls>
659
801
  ) }
660
- <nav { ...blockProps }>
661
- { isPlaceholderShown && (
662
- <PlaceholderComponent
663
- onFinish={ ( post ) => {
664
- setIsPlaceholderShown( false );
665
- if ( post ) {
666
- setRef( post.id );
667
- }
668
- selectBlock( clientId );
669
- } }
670
- canSwitchNavigationMenu={ canSwitchNavigationMenu }
671
- hasResolvedNavigationMenus={
672
- hasResolvedNavigationMenus
673
- }
674
- clientId={ clientId }
675
- canUserCreateNavigationMenu={
676
- canUserCreateNavigationMenu
677
- }
678
- />
679
- ) }
680
- { ! hasResolvedCanUserCreateNavigationMenu ||
681
- ( ! isEntityAvailable && ! isPlaceholderShown && (
682
- <PlaceholderPreview isLoading />
683
- ) ) }
684
- { ! isPlaceholderShown && (
802
+
803
+ { isLoading && (
804
+ <TagName { ...blockProps }>
805
+ <Spinner className="wp-block-navigation__loading-indicator" />
806
+ </TagName>
807
+ ) }
808
+
809
+ { ! isLoading && (
810
+ <TagName { ...blockProps }>
685
811
  <ResponsiveWrapper
686
812
  id={ clientId }
687
813
  onToggle={ setResponsiveMenuVisibility }
@@ -695,7 +821,6 @@ function Navigation( {
695
821
  >
696
822
  { isEntityAvailable && (
697
823
  <NavigationInnerBlocks
698
- isVisible={ ! isPlaceholderShown }
699
824
  clientId={ clientId }
700
825
  hasCustomPlaceholder={
701
826
  !! CustomPlaceholder
@@ -704,8 +829,8 @@ function Navigation( {
704
829
  />
705
830
  ) }
706
831
  </ResponsiveWrapper>
707
- ) }
708
- </nav>
832
+ </TagName>
833
+ ) }
709
834
  </RecursionProvider>
710
835
  </EntityProvider>
711
836
  );
@@ -38,7 +38,6 @@ const LAYOUT = {
38
38
  };
39
39
 
40
40
  export default function NavigationInnerBlocks( {
41
- isVisible,
42
41
  clientId,
43
42
  hasCustomPlaceholder,
44
43
  orientation,
@@ -66,7 +65,7 @@ export default function NavigationInnerBlocks( {
66
65
  ] )?.length,
67
66
 
68
67
  // This prop is already available but computing it here ensures it's
69
- // fresh compared to isImmediateParentOfSelectedBlock
68
+ // fresh compared to isImmediateParentOfSelectedBlock.
70
69
  isSelected: selectedBlockId === clientId,
71
70
  };
72
71
  },
@@ -98,6 +97,15 @@ export default function NavigationInnerBlocks( {
98
97
 
99
98
  const placeholder = useMemo( () => <PlaceholderPreview />, [] );
100
99
 
100
+ const hasMenuItems = !! blocks?.length;
101
+
102
+ // If there is a `ref` attribute pointing to a `wp_navigation` but
103
+ // that menu has no **items** (i.e. empty) then show a placeholder.
104
+ // The block must also be selected else the placeholder will display
105
+ // alongside the appender.
106
+ const showPlaceholder =
107
+ ! hasCustomPlaceholder && ! hasMenuItems && ! isSelected;
108
+
101
109
  const innerBlocksProps = useInnerBlocksProps(
102
110
  {
103
111
  className: 'wp-block-navigation__container',
@@ -130,8 +138,7 @@ export default function NavigationInnerBlocks( {
130
138
  // inherit templateLock={ 'all' }.
131
139
  templateLock: false,
132
140
  __experimentalLayout: LAYOUT,
133
- placeholder:
134
- ! isVisible || hasCustomPlaceholder ? undefined : placeholder,
141
+ placeholder: showPlaceholder ? placeholder : undefined,
135
142
  }
136
143
  );
137
144
 
@@ -1,25 +1,30 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { MenuGroup, MenuItem } from '@wordpress/components';
4
+ import {
5
+ MenuGroup,
6
+ MenuItem,
7
+ MenuItemsChoice,
8
+ ToolbarDropdownMenu,
9
+ } from '@wordpress/components';
5
10
  import { __, sprintf } from '@wordpress/i18n';
6
11
  import { decodeEntities } from '@wordpress/html-entities';
7
12
  import { addQueryArgs } from '@wordpress/url';
13
+ import { useCallback, useMemo } from '@wordpress/element';
8
14
 
9
15
  /**
10
16
  * Internal dependencies
11
17
  */
12
18
  import useNavigationMenu from '../use-navigation-menu';
13
19
  import useNavigationEntities from '../use-navigation-entities';
14
- import useConvertClassicMenu from '../use-convert-classic-menu';
15
- import useCreateNavigationMenu from './use-create-navigation-menu';
16
20
 
17
21
  export default function NavigationMenuSelector( {
18
- clientId,
22
+ currentMenuId,
19
23
  onSelect,
20
24
  onCreateNew,
21
25
  showManageActions = false,
22
26
  actionLabel,
27
+ toggleProps = {},
23
28
  } ) {
24
29
  /* translators: %s: The name of a menu. */
25
30
  const createActionLabel = __( "Create from '%s'" );
@@ -35,26 +40,36 @@ export default function NavigationMenuSelector( {
35
40
  canSwitchNavigationMenu,
36
41
  } = useNavigationMenu();
37
42
 
38
- const createNavigationMenu = useCreateNavigationMenu( clientId );
43
+ const handleSelect = useCallback(
44
+ ( _onClose ) => ( selectedId ) => {
45
+ _onClose();
46
+ onSelect(
47
+ navigationMenus?.find( ( post ) => post.id === selectedId )
48
+ );
49
+ },
50
+ [ navigationMenus ]
51
+ );
39
52
 
40
- const onFinishMenuCreation = async (
41
- blocks,
42
- navigationMenuTitle = null
43
- ) => {
44
- if ( ! canUserCreateNavigationMenu ) {
45
- return;
46
- }
53
+ const handleSelectClassic = useCallback(
54
+ ( _onClose, menu ) => () => {
55
+ _onClose();
56
+ onSelect( menu );
57
+ },
58
+ []
59
+ );
47
60
 
48
- const navigationMenu = await createNavigationMenu(
49
- navigationMenuTitle,
50
- blocks
61
+ const menuChoices = useMemo( () => {
62
+ return (
63
+ navigationMenus?.map( ( { id, title } ) => {
64
+ const label = decodeEntities( title.rendered );
65
+ return {
66
+ value: id,
67
+ label,
68
+ ariaLabel: sprintf( actionLabel, label ),
69
+ };
70
+ } ) || []
51
71
  );
52
- onSelect( navigationMenu );
53
- };
54
-
55
- const convertClassicMenuToBlocks = useConvertClassicMenu(
56
- onFinishMenuCreation
57
- );
72
+ }, [ navigationMenus ] );
58
73
 
59
74
  const hasNavigationMenus = !! navigationMenus?.length;
60
75
  const hasClassicMenus = !! classicMenus?.length;
@@ -62,75 +77,78 @@ export default function NavigationMenuSelector( {
62
77
  const showClassicMenus = !! canUserCreateNavigationMenu;
63
78
  const hasManagePermissions =
64
79
  canUserCreateNavigationMenu || canUserUpdateNavigationMenu;
80
+
81
+ // Show the selector if:
82
+ // - has switch or create permissions and there are block or classic menus.
83
+ // - user has create or update permisisons and component should show the menu actions.
65
84
  const showSelectMenus =
66
- ( canSwitchNavigationMenu || canUserCreateNavigationMenu ) &&
67
- ( hasNavigationMenus || hasClassicMenus );
85
+ ( ( canSwitchNavigationMenu || canUserCreateNavigationMenu ) &&
86
+ ( hasNavigationMenus || hasClassicMenus ) ) ||
87
+ ( hasManagePermissions && showManageActions );
68
88
 
69
89
  if ( ! showSelectMenus ) {
70
90
  return null;
71
91
  }
72
92
 
73
93
  return (
74
- <>
75
- { showNavigationMenus && hasNavigationMenus && (
76
- <MenuGroup label={ __( 'Menus' ) }>
77
- { navigationMenus.map( ( menu ) => {
78
- const label = decodeEntities( menu.title.rendered );
79
- return (
80
- <MenuItem
81
- onClick={ () => {
82
- onSelect( menu );
83
- } }
84
- key={ menu.id }
85
- aria-label={ sprintf( actionLabel, label ) }
86
- >
87
- { label }
88
- </MenuItem>
89
- );
90
- } ) }
91
- </MenuGroup>
92
- ) }
93
- { showClassicMenus && hasClassicMenus && (
94
- <MenuGroup label={ __( 'Classic Menus' ) }>
95
- { classicMenus.map( ( menu ) => {
96
- const label = decodeEntities( menu.name );
97
- return (
94
+ <ToolbarDropdownMenu
95
+ label={ __( 'Select Menu' ) }
96
+ text={ __( 'Select Menu' ) }
97
+ icon={ null }
98
+ toggleProps={ toggleProps }
99
+ >
100
+ { ( { onClose } ) => (
101
+ <>
102
+ { showNavigationMenus && hasNavigationMenus && (
103
+ <MenuGroup label={ __( 'Menus' ) }>
104
+ <MenuItemsChoice
105
+ value={ currentMenuId }
106
+ onSelect={ handleSelect( onClose ) }
107
+ choices={ menuChoices }
108
+ />
109
+ </MenuGroup>
110
+ ) }
111
+ { showClassicMenus && hasClassicMenus && (
112
+ <MenuGroup label={ __( 'Classic Menus' ) }>
113
+ { classicMenus?.map( ( menu ) => {
114
+ const label = decodeEntities( menu.name );
115
+ return (
116
+ <MenuItem
117
+ onClick={ handleSelectClassic(
118
+ onClose,
119
+ menu
120
+ ) }
121
+ key={ menu.id }
122
+ aria-label={ sprintf(
123
+ createActionLabel,
124
+ label
125
+ ) }
126
+ >
127
+ { label }
128
+ </MenuItem>
129
+ );
130
+ } ) }
131
+ </MenuGroup>
132
+ ) }
133
+
134
+ { showManageActions && hasManagePermissions && (
135
+ <MenuGroup label={ __( 'Tools' ) }>
136
+ { canUserCreateNavigationMenu && (
137
+ <MenuItem onClick={ onCreateNew }>
138
+ { __( 'Create new menu' ) }
139
+ </MenuItem>
140
+ ) }
98
141
  <MenuItem
99
- onClick={ () => {
100
- convertClassicMenuToBlocks(
101
- menu.id,
102
- menu.name
103
- );
104
- } }
105
- key={ menu.id }
106
- aria-label={ sprintf(
107
- createActionLabel,
108
- label
109
- ) }
142
+ href={ addQueryArgs( 'edit.php', {
143
+ post_type: 'wp_navigation',
144
+ } ) }
110
145
  >
111
- { label }
146
+ { __( 'Manage menus' ) }
112
147
  </MenuItem>
113
- );
114
- } ) }
115
- </MenuGroup>
116
- ) }
117
-
118
- { showManageActions && hasManagePermissions && (
119
- <MenuGroup label={ __( 'Tools' ) }>
120
- { canUserCreateNavigationMenu && (
121
- <MenuItem onClick={ onCreateNew }>
122
- { __( 'Create new menu' ) }
123
- </MenuItem>
148
+ </MenuGroup>
124
149
  ) }
125
- <MenuItem
126
- href={ addQueryArgs( 'edit.php', {
127
- post_type: 'wp_navigation',
128
- } ) }
129
- >
130
- { __( 'Manage menus' ) }
131
- </MenuItem>
132
- </MenuGroup>
150
+ </>
133
151
  ) }
134
- </>
152
+ </ToolbarDropdownMenu>
135
153
  );
136
154
  }