@wordpress/block-library 7.0.1 → 7.1.0-next.e230fbab09.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 (608) hide show
  1. package/README.md +16 -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 +4 -4
  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/columns/index.js +12 -0
  27. package/build/columns/index.js.map +1 -1
  28. package/build/comment-author-avatar/edit.js +17 -4
  29. package/build/comment-author-avatar/edit.js.map +1 -1
  30. package/build/comment-template/edit.js +94 -36
  31. package/build/comment-template/edit.js.map +1 -1
  32. package/build/comment-template/hooks.js +175 -0
  33. package/build/comment-template/hooks.js.map +1 -0
  34. package/build/comment-template/index.js +1 -1
  35. package/build/comment-template/util.js.map +1 -1
  36. package/build/comments-pagination-next/index.js +1 -1
  37. package/build/comments-pagination-numbers/index.js +1 -1
  38. package/build/comments-query-loop/edit/comments-inspector-controls.js +20 -9
  39. package/build/comments-query-loop/edit/comments-inspector-controls.js.map +1 -1
  40. package/build/comments-query-loop/edit.js +1 -19
  41. package/build/comments-query-loop/edit.js.map +1 -1
  42. package/build/comments-query-loop/index.js +5 -0
  43. package/build/comments-query-loop/index.js.map +1 -1
  44. package/build/cover/controls.native.js +5 -5
  45. package/build/cover/controls.native.js.map +1 -1
  46. package/build/cover/deprecated.js +188 -17
  47. package/build/cover/deprecated.js.map +1 -1
  48. package/build/cover/edit.js +29 -33
  49. package/build/cover/edit.js.map +1 -1
  50. package/build/cover/edit.native.js +15 -13
  51. package/build/cover/edit.native.js.map +1 -1
  52. package/build/cover/overlay-color-settings.native.js +7 -6
  53. package/build/cover/overlay-color-settings.native.js.map +1 -1
  54. package/build/cover/save.js +1 -1
  55. package/build/cover/save.js.map +1 -1
  56. package/build/cover/shared.js +2 -2
  57. package/build/cover/shared.js.map +1 -1
  58. package/build/cover/transforms.js +4 -2
  59. package/build/cover/transforms.js.map +1 -1
  60. package/build/embed/edit.js +1 -1
  61. package/build/embed/edit.js.map +1 -1
  62. package/build/embed/edit.native.js +1 -1
  63. package/build/embed/edit.native.js.map +1 -1
  64. package/build/embed/util.js +2 -2
  65. package/build/embed/util.js.map +1 -1
  66. package/build/embed/variations.js +1 -1
  67. package/build/embed/variations.js.map +1 -1
  68. package/build/file/edit.js +20 -17
  69. package/build/file/edit.js.map +1 -1
  70. package/build/file/edit.native.js +1 -1
  71. package/build/file/edit.native.js.map +1 -1
  72. package/build/file/save.js +7 -3
  73. package/build/file/save.js.map +1 -1
  74. package/build/freeform/edit.js +2 -2
  75. package/build/freeform/edit.js.map +1 -1
  76. package/build/gallery/edit.js +1 -1
  77. package/build/gallery/edit.js.map +1 -1
  78. package/build/gallery/gallery.native.js +1 -1
  79. package/build/gallery/gallery.native.js.map +1 -1
  80. package/build/gallery/v1/edit.js +3 -3
  81. package/build/gallery/v1/edit.js.map +1 -1
  82. package/build/gallery/v1/gallery-image.native.js +3 -3
  83. package/build/gallery/v1/gallery-image.native.js.map +1 -1
  84. package/build/gallery/v1/gallery.native.js +2 -2
  85. package/build/gallery/v1/gallery.native.js.map +1 -1
  86. package/build/group/index.js +4 -37
  87. package/build/group/index.js.map +1 -1
  88. package/build/group/transforms.js +45 -0
  89. package/build/group/transforms.js.map +1 -0
  90. package/build/heading/edit.js +14 -2
  91. package/build/heading/edit.js.map +1 -1
  92. package/build/home-link/edit.js +1 -1
  93. package/build/home-link/edit.js.map +1 -1
  94. package/build/image/deprecated.js +89 -5
  95. package/build/image/deprecated.js.map +1 -1
  96. package/build/image/edit.js +7 -6
  97. package/build/image/edit.js.map +1 -1
  98. package/build/image/edit.native.js +25 -10
  99. package/build/image/edit.native.js.map +1 -1
  100. package/build/image/save.js +0 -7
  101. package/build/image/save.js.map +1 -1
  102. package/build/image/transforms.js +1 -1
  103. package/build/image/transforms.js.map +1 -1
  104. package/build/index.js +3 -4
  105. package/build/index.js.map +1 -1
  106. package/build/index.native.js +2 -2
  107. package/build/index.native.js.map +1 -1
  108. package/build/latest-posts/edit.js +1 -0
  109. package/build/latest-posts/edit.js.map +1 -1
  110. package/build/media-text/edit.js +21 -2
  111. package/build/media-text/edit.js.map +1 -1
  112. package/build/media-text/edit.native.js +2 -2
  113. package/build/media-text/edit.native.js.map +1 -1
  114. package/build/media-text/media-container.native.js +1 -1
  115. package/build/media-text/media-container.native.js.map +1 -1
  116. package/build/missing/edit.native.js +1 -1
  117. package/build/missing/edit.native.js.map +1 -1
  118. package/build/more/transforms.js +2 -2
  119. package/build/more/transforms.js.map +1 -1
  120. package/build/navigation/edit/index.js +144 -68
  121. package/build/navigation/edit/index.js.map +1 -1
  122. package/build/navigation/edit/inner-blocks.js +8 -3
  123. package/build/navigation/edit/inner-blocks.js.map +1 -1
  124. package/build/navigation/edit/navigation-menu-selector.js +82 -52
  125. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  126. package/build/navigation/edit/placeholder/index.js +32 -61
  127. package/build/navigation/edit/placeholder/index.js.map +1 -1
  128. package/build/navigation/edit/placeholder/placeholder-preview.js +3 -12
  129. package/build/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
  130. package/build/navigation/edit/unsaved-inner-blocks.js +3 -1
  131. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  132. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +120 -0
  133. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
  134. package/build/navigation/edit/use-create-navigation-menu.js +53 -4
  135. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  136. package/build/navigation/edit/use-navigation-notice.js +3 -3
  137. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  138. package/build/navigation/menu-items-to-blocks.js +1 -1
  139. package/build/navigation/menu-items-to-blocks.js.map +1 -1
  140. package/build/navigation/use-navigation-entities.js +25 -49
  141. package/build/navigation/use-navigation-entities.js.map +1 -1
  142. package/build/navigation/use-navigation-menu.js +8 -6
  143. package/build/navigation/use-navigation-menu.js.map +1 -1
  144. package/build/navigation-link/fallback-variations.js +1 -1
  145. package/build/navigation-link/fallback-variations.js.map +1 -1
  146. package/build/navigation-link/hooks.js +2 -2
  147. package/build/navigation-link/hooks.js.map +1 -1
  148. package/build/navigation-submenu/edit.js +43 -11
  149. package/build/navigation-submenu/edit.js.map +1 -1
  150. package/build/page-list/convert-to-links-modal.js +13 -23
  151. package/build/page-list/convert-to-links-modal.js.map +1 -1
  152. package/build/page-list/edit.js +19 -39
  153. package/build/page-list/edit.js.map +1 -1
  154. package/build/post-author-name/edit.js +2 -1
  155. package/build/post-author-name/edit.js.map +1 -1
  156. package/build/post-comments-form/edit.js +3 -1
  157. package/build/post-comments-form/edit.js.map +1 -1
  158. package/build/post-excerpt/edit.js +7 -4
  159. package/build/post-excerpt/edit.js.map +1 -1
  160. package/build/post-terms/edit.js +3 -1
  161. package/build/post-terms/edit.js.map +1 -1
  162. package/build/query-title/edit.js +0 -1
  163. package/build/query-title/edit.js.map +1 -1
  164. package/build/search/edit.js +4 -1
  165. package/build/search/edit.js.map +1 -1
  166. package/build/search/edit.native.js +1 -1
  167. package/build/search/edit.native.js.map +1 -1
  168. package/build/separator/save.js +4 -4
  169. package/build/separator/save.js.map +1 -1
  170. package/build/separator/separator-settings.native.js +1 -1
  171. package/build/separator/separator-settings.native.js.map +1 -1
  172. package/build/site-logo/edit.js +1 -1
  173. package/build/site-logo/edit.js.map +1 -1
  174. package/build/social-link/edit.native.js +11 -3
  175. package/build/social-link/edit.native.js.map +1 -1
  176. package/build/social-links/deprecated.js +1 -62
  177. package/build/social-links/deprecated.js.map +1 -1
  178. package/build/spacer/controls.js +5 -5
  179. package/build/spacer/controls.js.map +1 -1
  180. package/build/spacer/controls.native.js +5 -5
  181. package/build/spacer/controls.native.js.map +1 -1
  182. package/build/table/edit.js +2 -2
  183. package/build/table/edit.js.map +1 -1
  184. package/build/template-part/edit/index.js +36 -64
  185. package/build/template-part/edit/index.js.map +1 -1
  186. package/build/template-part/edit/placeholder.js +64 -0
  187. package/build/template-part/edit/placeholder.js.map +1 -0
  188. package/build/template-part/edit/selection-modal.js +103 -0
  189. package/build/template-part/edit/selection-modal.js.map +1 -0
  190. package/build/template-part/edit/title-modal.js +54 -0
  191. package/build/template-part/edit/title-modal.js.map +1 -0
  192. package/build/template-part/edit/utils/hooks.js +156 -0
  193. package/build/template-part/edit/utils/hooks.js.map +1 -0
  194. package/build/template-part/index.js +3 -1
  195. package/build/template-part/index.js.map +1 -1
  196. package/build/video/edit.js +4 -4
  197. package/build/video/edit.js.map +1 -1
  198. package/build/video/edit.native.js +3 -3
  199. package/build/video/edit.native.js.map +1 -1
  200. package/build-module/audio/edit.js +4 -4
  201. package/build-module/audio/edit.js.map +1 -1
  202. package/build-module/audio/edit.native.js +4 -4
  203. package/build-module/audio/edit.native.js.map +1 -1
  204. package/build-module/audio/transforms.js +1 -1
  205. package/build-module/audio/transforms.js.map +1 -1
  206. package/build-module/block/edit.js +5 -11
  207. package/build-module/block/edit.js.map +1 -1
  208. package/build-module/button/edit.js +3 -2
  209. package/build-module/button/edit.js.map +1 -1
  210. package/build-module/button/edit.native.js +6 -6
  211. package/build-module/button/edit.native.js.map +1 -1
  212. package/build-module/buttons/transforms.js +8 -8
  213. package/build-module/buttons/transforms.js.map +1 -1
  214. package/build-module/categories/edit.js +15 -25
  215. package/build-module/categories/edit.js.map +1 -1
  216. package/build-module/code/index.js +0 -1
  217. package/build-module/code/index.js.map +1 -1
  218. package/build-module/columns/columnCalculations.native.js +1 -1
  219. package/build-module/columns/columnCalculations.native.js.map +1 -1
  220. package/build-module/columns/edit.js +1 -1
  221. package/build-module/columns/edit.js.map +1 -1
  222. package/build-module/columns/edit.native.js +3 -3
  223. package/build-module/columns/edit.native.js.map +1 -1
  224. package/build-module/columns/index.js +12 -0
  225. package/build-module/columns/index.js.map +1 -1
  226. package/build-module/comment-author-avatar/edit.js +18 -6
  227. package/build-module/comment-author-avatar/edit.js.map +1 -1
  228. package/build-module/comment-template/edit.js +95 -37
  229. package/build-module/comment-template/edit.js.map +1 -1
  230. package/build-module/comment-template/hooks.js +156 -0
  231. package/build-module/comment-template/hooks.js.map +1 -0
  232. package/build-module/comment-template/index.js +1 -1
  233. package/build-module/comment-template/util.js.map +1 -1
  234. package/build-module/comments-pagination-next/index.js +1 -1
  235. package/build-module/comments-pagination-numbers/index.js +1 -1
  236. package/build-module/comments-query-loop/edit/comments-inspector-controls.js +20 -9
  237. package/build-module/comments-query-loop/edit/comments-inspector-controls.js.map +1 -1
  238. package/build-module/comments-query-loop/edit.js +2 -19
  239. package/build-module/comments-query-loop/edit.js.map +1 -1
  240. package/build-module/comments-query-loop/index.js +5 -0
  241. package/build-module/comments-query-loop/index.js.map +1 -1
  242. package/build-module/cover/controls.native.js +5 -5
  243. package/build-module/cover/controls.native.js.map +1 -1
  244. package/build-module/cover/deprecated.js +190 -17
  245. package/build-module/cover/deprecated.js.map +1 -1
  246. package/build-module/cover/edit.js +31 -35
  247. package/build-module/cover/edit.js.map +1 -1
  248. package/build-module/cover/edit.native.js +18 -16
  249. package/build-module/cover/edit.native.js.map +1 -1
  250. package/build-module/cover/overlay-color-settings.native.js +7 -7
  251. package/build-module/cover/overlay-color-settings.native.js.map +1 -1
  252. package/build-module/cover/save.js +1 -1
  253. package/build-module/cover/save.js.map +1 -1
  254. package/build-module/cover/shared.js +2 -2
  255. package/build-module/cover/shared.js.map +1 -1
  256. package/build-module/cover/transforms.js +4 -2
  257. package/build-module/cover/transforms.js.map +1 -1
  258. package/build-module/embed/edit.js +1 -1
  259. package/build-module/embed/edit.js.map +1 -1
  260. package/build-module/embed/edit.native.js +1 -1
  261. package/build-module/embed/edit.native.js.map +1 -1
  262. package/build-module/embed/util.js +2 -2
  263. package/build-module/embed/util.js.map +1 -1
  264. package/build-module/embed/variations.js +1 -1
  265. package/build-module/embed/variations.js.map +1 -1
  266. package/build-module/file/edit.js +21 -18
  267. package/build-module/file/edit.js.map +1 -1
  268. package/build-module/file/edit.native.js +1 -1
  269. package/build-module/file/edit.native.js.map +1 -1
  270. package/build-module/file/save.js +7 -3
  271. package/build-module/file/save.js.map +1 -1
  272. package/build-module/freeform/edit.js +2 -2
  273. package/build-module/freeform/edit.js.map +1 -1
  274. package/build-module/gallery/edit.js +1 -1
  275. package/build-module/gallery/edit.js.map +1 -1
  276. package/build-module/gallery/gallery.native.js +1 -1
  277. package/build-module/gallery/gallery.native.js.map +1 -1
  278. package/build-module/gallery/v1/edit.js +3 -3
  279. package/build-module/gallery/v1/edit.js.map +1 -1
  280. package/build-module/gallery/v1/gallery-image.native.js +3 -3
  281. package/build-module/gallery/v1/gallery-image.native.js.map +1 -1
  282. package/build-module/gallery/v1/gallery.native.js +2 -2
  283. package/build-module/gallery/v1/gallery.native.js.map +1 -1
  284. package/build-module/group/index.js +3 -36
  285. package/build-module/group/index.js.map +1 -1
  286. package/build-module/group/transforms.js +36 -0
  287. package/build-module/group/transforms.js.map +1 -0
  288. package/build-module/heading/edit.js +15 -3
  289. package/build-module/heading/edit.js.map +1 -1
  290. package/build-module/home-link/edit.js +1 -1
  291. package/build-module/home-link/edit.js.map +1 -1
  292. package/build-module/image/deprecated.js +90 -7
  293. package/build-module/image/deprecated.js.map +1 -1
  294. package/build-module/image/edit.js +7 -6
  295. package/build-module/image/edit.js.map +1 -1
  296. package/build-module/image/edit.native.js +25 -10
  297. package/build-module/image/edit.native.js.map +1 -1
  298. package/build-module/image/save.js +0 -7
  299. package/build-module/image/save.js.map +1 -1
  300. package/build-module/image/transforms.js +1 -1
  301. package/build-module/image/transforms.js.map +1 -1
  302. package/build-module/index.js +4 -5
  303. package/build-module/index.js.map +1 -1
  304. package/build-module/index.native.js +2 -2
  305. package/build-module/index.native.js.map +1 -1
  306. package/build-module/latest-posts/edit.js +1 -0
  307. package/build-module/latest-posts/edit.js.map +1 -1
  308. package/build-module/media-text/edit.js +20 -2
  309. package/build-module/media-text/edit.js.map +1 -1
  310. package/build-module/media-text/edit.native.js +2 -2
  311. package/build-module/media-text/edit.native.js.map +1 -1
  312. package/build-module/media-text/media-container.native.js +1 -1
  313. package/build-module/media-text/media-container.native.js.map +1 -1
  314. package/build-module/missing/edit.native.js +1 -1
  315. package/build-module/missing/edit.native.js.map +1 -1
  316. package/build-module/more/transforms.js +2 -2
  317. package/build-module/more/transforms.js.map +1 -1
  318. package/build-module/navigation/edit/index.js +138 -68
  319. package/build-module/navigation/edit/index.js.map +1 -1
  320. package/build-module/navigation/edit/inner-blocks.js +8 -3
  321. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  322. package/build-module/navigation/edit/navigation-menu-selector.js +82 -48
  323. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  324. package/build-module/navigation/edit/placeholder/index.js +33 -59
  325. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  326. package/build-module/navigation/edit/placeholder/placeholder-preview.js +3 -9
  327. package/build-module/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
  328. package/build-module/navigation/edit/unsaved-inner-blocks.js +3 -1
  329. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  330. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +100 -0
  331. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
  332. package/build-module/navigation/edit/use-create-navigation-menu.js +48 -5
  333. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  334. package/build-module/navigation/edit/use-navigation-notice.js +3 -3
  335. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  336. package/build-module/navigation/menu-items-to-blocks.js +1 -1
  337. package/build-module/navigation/menu-items-to-blocks.js.map +1 -1
  338. package/build-module/navigation/use-navigation-entities.js +26 -50
  339. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  340. package/build-module/navigation/use-navigation-menu.js +8 -6
  341. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  342. package/build-module/navigation-link/fallback-variations.js +1 -1
  343. package/build-module/navigation-link/fallback-variations.js.map +1 -1
  344. package/build-module/navigation-link/hooks.js +2 -2
  345. package/build-module/navigation-link/hooks.js.map +1 -1
  346. package/build-module/navigation-submenu/edit.js +43 -12
  347. package/build-module/navigation-submenu/edit.js.map +1 -1
  348. package/build-module/page-list/convert-to-links-modal.js +15 -25
  349. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  350. package/build-module/page-list/edit.js +21 -41
  351. package/build-module/page-list/edit.js.map +1 -1
  352. package/build-module/post-author-name/edit.js +2 -1
  353. package/build-module/post-author-name/edit.js.map +1 -1
  354. package/build-module/post-comments-form/edit.js +4 -2
  355. package/build-module/post-comments-form/edit.js.map +1 -1
  356. package/build-module/post-excerpt/edit.js +9 -6
  357. package/build-module/post-excerpt/edit.js.map +1 -1
  358. package/build-module/post-terms/edit.js +2 -1
  359. package/build-module/post-terms/edit.js.map +1 -1
  360. package/build-module/query-title/edit.js +0 -1
  361. package/build-module/query-title/edit.js.map +1 -1
  362. package/build-module/search/edit.js +3 -1
  363. package/build-module/search/edit.js.map +1 -1
  364. package/build-module/search/edit.native.js +1 -1
  365. package/build-module/search/edit.native.js.map +1 -1
  366. package/build-module/separator/save.js +4 -4
  367. package/build-module/separator/save.js.map +1 -1
  368. package/build-module/separator/separator-settings.native.js +1 -1
  369. package/build-module/separator/separator-settings.native.js.map +1 -1
  370. package/build-module/site-logo/edit.js +1 -1
  371. package/build-module/site-logo/edit.js.map +1 -1
  372. package/build-module/social-link/edit.native.js +11 -3
  373. package/build-module/social-link/edit.native.js.map +1 -1
  374. package/build-module/social-links/deprecated.js +1 -62
  375. package/build-module/social-links/deprecated.js.map +1 -1
  376. package/build-module/spacer/controls.js +5 -5
  377. package/build-module/spacer/controls.js.map +1 -1
  378. package/build-module/spacer/controls.native.js +5 -5
  379. package/build-module/spacer/controls.native.js.map +1 -1
  380. package/build-module/table/edit.js +2 -2
  381. package/build-module/table/edit.js.map +1 -1
  382. package/build-module/template-part/edit/index.js +37 -65
  383. package/build-module/template-part/edit/index.js.map +1 -1
  384. package/build-module/template-part/edit/placeholder.js +52 -0
  385. package/build-module/template-part/edit/placeholder.js.map +1 -0
  386. package/build-module/template-part/edit/selection-modal.js +89 -0
  387. package/build-module/template-part/edit/selection-modal.js.map +1 -0
  388. package/build-module/template-part/edit/title-modal.js +46 -0
  389. package/build-module/template-part/edit/title-modal.js.map +1 -0
  390. package/build-module/template-part/edit/utils/hooks.js +135 -0
  391. package/build-module/template-part/edit/utils/hooks.js.map +1 -0
  392. package/build-module/template-part/index.js +2 -1
  393. package/build-module/template-part/index.js.map +1 -1
  394. package/build-module/video/edit.js +4 -4
  395. package/build-module/video/edit.js.map +1 -1
  396. package/build-module/video/edit.native.js +3 -3
  397. package/build-module/video/edit.native.js.map +1 -1
  398. package/build-style/button/editor-rtl.css +0 -3
  399. package/build-style/button/editor.css +0 -3
  400. package/build-style/code/style-rtl.css +2 -1
  401. package/build-style/code/style.css +2 -1
  402. package/build-style/code/theme-rtl.css +0 -3
  403. package/build-style/code/theme.css +0 -3
  404. package/build-style/comment-author-avatar/editor-rtl.css +83 -0
  405. package/build-style/comment-author-avatar/editor.css +83 -0
  406. package/build-style/common-rtl.css +1 -1
  407. package/build-style/common.css +1 -1
  408. package/build-style/cover/style-rtl.css +5 -5
  409. package/build-style/cover/style.css +5 -5
  410. package/build-style/editor-rtl.css +43 -84
  411. package/build-style/editor.css +43 -84
  412. package/build-style/image/editor-rtl.css +0 -16
  413. package/build-style/image/editor.css +0 -16
  414. package/build-style/image/style-rtl.css +4 -1
  415. package/build-style/image/style.css +4 -1
  416. package/build-style/navigation/editor-rtl.css +16 -0
  417. package/build-style/navigation/editor.css +16 -0
  418. package/build-style/navigation/style-rtl.css +14 -3
  419. package/build-style/navigation/style.css +14 -3
  420. package/build-style/page-list/editor-rtl.css +0 -9
  421. package/build-style/page-list/editor.css +0 -9
  422. package/build-style/style-rtl.css +32 -13
  423. package/build-style/style.css +32 -13
  424. package/build-style/tag-cloud/style-rtl.css +6 -2
  425. package/build-style/tag-cloud/style.css +6 -2
  426. package/build-style/template-part/editor-rtl.css +19 -56
  427. package/build-style/template-part/editor.css +19 -56
  428. package/build-style/theme-rtl.css +0 -3
  429. package/build-style/theme.css +0 -3
  430. package/package.json +32 -28
  431. package/src/archives/index.php +1 -1
  432. package/src/audio/edit.js +4 -4
  433. package/src/audio/edit.native.js +4 -4
  434. package/src/audio/transforms.js +1 -1
  435. package/src/block/edit.js +7 -22
  436. package/src/block/test/edit.native.js +9 -9
  437. package/src/button/edit.js +2 -1
  438. package/src/button/edit.native.js +5 -5
  439. package/src/button/editor.scss +0 -5
  440. package/src/buttons/test/edit.native.js +3 -3
  441. package/src/buttons/transforms.js +8 -8
  442. package/src/categories/edit.js +12 -22
  443. package/src/code/block.json +0 -1
  444. package/src/code/style.scss +4 -2
  445. package/src/code/theme.scss +0 -3
  446. package/src/columns/block.json +12 -0
  447. package/src/columns/columnCalculations.native.js +1 -1
  448. package/src/columns/edit.js +1 -1
  449. package/src/columns/edit.native.js +3 -3
  450. package/src/comment-author-avatar/edit.js +13 -8
  451. package/src/comment-author-avatar/editor.scss +7 -0
  452. package/src/comment-template/block.json +7 -1
  453. package/src/comment-template/edit.js +102 -40
  454. package/src/comment-template/hooks.js +151 -0
  455. package/src/comment-template/index.php +8 -0
  456. package/src/comment-template/util.js +1 -0
  457. package/src/comments-pagination-next/block.json +8 -1
  458. package/src/comments-pagination-next/index.php +6 -8
  459. package/src/comments-pagination-numbers/block.json +7 -1
  460. package/src/comments-pagination-numbers/index.php +3 -10
  461. package/src/comments-query-loop/block.json +5 -0
  462. package/src/comments-query-loop/edit/comments-inspector-controls.js +22 -4
  463. package/src/comments-query-loop/edit.js +1 -16
  464. package/src/common.scss +1 -1
  465. package/src/cover/controls.native.js +1 -1
  466. package/src/cover/deprecated.js +214 -1
  467. package/src/cover/edit.js +21 -36
  468. package/src/cover/edit.native.js +23 -15
  469. package/src/cover/overlay-color-settings.native.js +6 -7
  470. package/src/cover/save.js +4 -3
  471. package/src/cover/shared.js +2 -2
  472. package/src/cover/style.scss +5 -3
  473. package/src/cover/test/edit.native.js +39 -39
  474. package/src/cover/transforms.js +2 -0
  475. package/src/editor.scss +1 -0
  476. package/src/embed/edit.js +1 -1
  477. package/src/embed/edit.native.js +1 -1
  478. package/src/embed/test/index.native.js +105 -105
  479. package/src/embed/util.js +2 -2
  480. package/src/embed/variations.js +1 -1
  481. package/src/file/edit.js +19 -17
  482. package/src/file/edit.native.js +1 -1
  483. package/src/file/save.js +9 -3
  484. package/src/file/style.native.scss +1 -0
  485. package/src/freeform/edit.js +2 -2
  486. package/src/gallery/edit.js +1 -1
  487. package/src/gallery/gallery.native.js +1 -1
  488. package/src/gallery/index.php +1 -8
  489. package/src/gallery/test/__snapshots__/index.native.js.snap +164 -0
  490. package/src/gallery/test/helpers.native.js +293 -0
  491. package/src/gallery/test/index.native.js +583 -65
  492. package/src/gallery/v1/edit.js +3 -4
  493. package/src/gallery/v1/gallery-image.native.js +3 -3
  494. package/src/gallery/v1/gallery.native.js +2 -2
  495. package/src/group/block.json +1 -0
  496. package/src/group/index.js +2 -54
  497. package/src/group/transforms.js +52 -0
  498. package/src/heading/edit.js +18 -5
  499. package/src/home-link/edit.js +1 -1
  500. package/src/home-link/index.php +1 -19
  501. package/src/image/deprecated.js +105 -1
  502. package/src/image/edit.js +7 -6
  503. package/src/image/edit.native.js +25 -8
  504. package/src/image/editor.scss +0 -18
  505. package/src/image/save.js +0 -8
  506. package/src/image/style.scss +5 -1
  507. package/src/image/test/edit.native.js +1 -11
  508. package/src/image/transforms.js +1 -1
  509. package/src/index.js +2 -3
  510. package/src/index.native.js +2 -2
  511. package/src/latest-posts/edit.js +1 -0
  512. package/src/latest-posts/index.php +1 -1
  513. package/src/media-text/edit.js +20 -2
  514. package/src/media-text/edit.native.js +2 -2
  515. package/src/media-text/media-container.native.js +1 -1
  516. package/src/media-text/style.native.scss +1 -0
  517. package/src/missing/edit.native.js +1 -1
  518. package/src/missing/test/edit-integration.native.js +4 -4
  519. package/src/missing/test/edit.native.js +2 -2
  520. package/src/more/transforms.js +2 -2
  521. package/src/navigation/edit/index.js +212 -88
  522. package/src/navigation/edit/inner-blocks.js +11 -4
  523. package/src/navigation/edit/navigation-menu-selector.js +121 -58
  524. package/src/navigation/edit/placeholder/index.js +64 -111
  525. package/src/navigation/edit/placeholder/placeholder-preview.js +3 -10
  526. package/src/navigation/edit/unsaved-inner-blocks.js +3 -1
  527. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +137 -0
  528. package/src/navigation/edit/use-create-navigation-menu.js +59 -8
  529. package/src/navigation/edit/use-navigation-notice.js +3 -3
  530. package/src/navigation/editor.scss +23 -1
  531. package/src/navigation/index.php +4 -4
  532. package/src/navigation/menu-items-to-blocks.js +1 -1
  533. package/src/navigation/style.scss +22 -3
  534. package/src/navigation/test/menu-items-to-blocks.js +1 -1
  535. package/src/navigation/use-navigation-entities.js +26 -60
  536. package/src/navigation/use-navigation-menu.js +11 -6
  537. package/src/navigation-link/fallback-variations.js +1 -1
  538. package/src/navigation-link/hooks.js +2 -2
  539. package/src/navigation-link/index.php +3 -22
  540. package/src/navigation-link/test/edit.js +5 -5
  541. package/src/navigation-submenu/edit.js +52 -14
  542. package/src/navigation-submenu/index.php +3 -21
  543. package/src/page-list/convert-to-links-modal.js +17 -31
  544. package/src/page-list/edit.js +35 -48
  545. package/src/page-list/editor.scss +0 -10
  546. package/src/page-list/index.php +4 -4
  547. package/src/post-author-name/edit.js +1 -0
  548. package/src/post-author-name/index.php +1 -1
  549. package/src/post-comments-form/edit.js +7 -3
  550. package/src/post-excerpt/edit.js +9 -12
  551. package/src/post-navigation-link/index.php +3 -3
  552. package/src/post-terms/edit.js +2 -1
  553. package/src/query-title/edit.js +0 -1
  554. package/src/search/edit.js +6 -0
  555. package/src/search/edit.native.js +1 -1
  556. package/src/search/index.php +8 -4
  557. package/src/search/test/edit.native.js +0 -1
  558. package/src/separator/save.js +4 -4
  559. package/src/separator/separator-settings.native.js +1 -1
  560. package/src/site-logo/edit.js +1 -1
  561. package/src/site-logo/index.php +1 -1
  562. package/src/social-link/edit.native.js +17 -8
  563. package/src/social-link/test/index.native.js +138 -0
  564. package/src/social-links/deprecated.js +0 -59
  565. package/src/spacer/controls.js +1 -1
  566. package/src/spacer/controls.native.js +1 -1
  567. package/src/table/edit.js +2 -2
  568. package/src/tag-cloud/style.scss +12 -7
  569. package/src/template-part/edit/index.js +61 -71
  570. package/src/template-part/edit/placeholder.js +78 -0
  571. package/src/template-part/edit/selection-modal.js +115 -0
  572. package/src/template-part/edit/title-modal.js +59 -0
  573. package/src/template-part/edit/utils/hooks.js +158 -0
  574. package/src/template-part/editor.scss +16 -74
  575. package/src/template-part/index.js +4 -1
  576. package/src/video/edit.js +4 -4
  577. package/src/video/edit.native.js +3 -3
  578. package/src/video/style.native.scss +1 -0
  579. package/build/navigation/edit/existing-menus-options.js +0 -62
  580. package/build/navigation/edit/existing-menus-options.js.map +0 -1
  581. package/build/navigation/use-convert-classic-menu.js +0 -59
  582. package/build/navigation/use-convert-classic-menu.js.map +0 -1
  583. package/build/template-part/edit/placeholder/index.js +0 -141
  584. package/build/template-part/edit/placeholder/index.js.map +0 -1
  585. package/build/template-part/edit/placeholder/patterns-setup.js +0 -100
  586. package/build/template-part/edit/placeholder/patterns-setup.js.map +0 -1
  587. package/build/template-part/edit/selection/index.js +0 -45
  588. package/build/template-part/edit/selection/index.js.map +0 -1
  589. package/build/template-part/edit/selection/template-part-previews.js +0 -317
  590. package/build/template-part/edit/selection/template-part-previews.js.map +0 -1
  591. package/build-module/navigation/edit/existing-menus-options.js +0 -53
  592. package/build-module/navigation/edit/existing-menus-options.js.map +0 -1
  593. package/build-module/navigation/use-convert-classic-menu.js +0 -47
  594. package/build-module/navigation/use-convert-classic-menu.js.map +0 -1
  595. package/build-module/template-part/edit/placeholder/index.js +0 -124
  596. package/build-module/template-part/edit/placeholder/index.js.map +0 -1
  597. package/build-module/template-part/edit/placeholder/patterns-setup.js +0 -91
  598. package/build-module/template-part/edit/placeholder/patterns-setup.js.map +0 -1
  599. package/build-module/template-part/edit/selection/index.js +0 -35
  600. package/build-module/template-part/edit/selection/index.js.map +0 -1
  601. package/build-module/template-part/edit/selection/template-part-previews.js +0 -298
  602. package/build-module/template-part/edit/selection/template-part-previews.js.map +0 -1
  603. package/src/navigation/edit/existing-menus-options.js +0 -70
  604. package/src/navigation/use-convert-classic-menu.js +0 -58
  605. package/src/template-part/edit/placeholder/index.js +0 -172
  606. package/src/template-part/edit/placeholder/patterns-setup.js +0 -124
  607. package/src/template-part/edit/selection/index.js +0 -37
  608. package/src/template-part/edit/selection/template-part-previews.js +0 -372
package/src/index.js CHANGED
@@ -96,7 +96,6 @@ import * as socialLink from './social-link';
96
96
  import * as socialLinks from './social-links';
97
97
  import * as spacer from './spacer';
98
98
  import * as table from './table';
99
- // import * as tableOfContents from './table-of-contents';
100
99
  import * as tagCloud from './tag-cloud';
101
100
  import * as templatePart from './template-part';
102
101
  import * as termDescription from './term-description';
@@ -145,7 +144,7 @@ export const __experimentalGetCoreBlocks = () => [
145
144
  buttons,
146
145
  calendar,
147
146
  categories,
148
- window.wp && window.wp.oldEditor ? classic : null, // Only add the classic block in WP Context
147
+ window.wp && window.wp.oldEditor ? classic : null, // Only add the classic block in WP Context.
149
148
  code,
150
149
  column,
151
150
  columns,
@@ -205,7 +204,6 @@ export const __experimentalGetCoreBlocks = () => [
205
204
  logInOut,
206
205
  termDescription,
207
206
  queryTitle,
208
- postAuthorName,
209
207
  postAuthorBiography,
210
208
  ];
211
209
 
@@ -251,6 +249,7 @@ export const __experimentalRegisterExperimentalCoreBlocks = process.env
251
249
  [
252
250
  // Experimental blocks.
253
251
  homeLink,
252
+ postAuthorName,
254
253
 
255
254
  // Full Site Editing blocks.
256
255
  ...( enableFSEBlocks
@@ -135,7 +135,7 @@ export const registerBlock = ( block ) => {
135
135
  {
136
136
  name,
137
137
  ...metadata,
138
- // Gradients support only available for blocks listed in ALLOWED_BLOCKS_GRADIENT_SUPPORT
138
+ // Gradients support only available for blocks listed in ALLOWED_BLOCKS_GRADIENT_SUPPORT.
139
139
  ...( ! ALLOWED_BLOCKS_GRADIENT_SUPPORT.includes( name ) &&
140
140
  supports?.color?.gradients
141
141
  ? {
@@ -171,7 +171,7 @@ const registerBlockVariations = ( block ) => {
171
171
  } );
172
172
  };
173
173
 
174
- // only enable code block for development
174
+ // Only enable code block for development
175
175
  // eslint-disable-next-line no-undef
176
176
  const devOnly = ( block ) => ( !! __DEV__ ? block : null );
177
177
 
@@ -480,6 +480,7 @@ export default function LatestPostsEdit( { attributes, setAttributes } ) {
480
480
  <div className={ imageClasses }>
481
481
  { addLinkToFeaturedImage ? (
482
482
  <a
483
+ className="wp-block-latest-posts__post-title"
483
484
  href={ post.link }
484
485
  rel="noreferrer noopener"
485
486
  >
@@ -105,7 +105,7 @@ function render_block_core_latest_posts( $attributes ) {
105
105
  }
106
106
 
107
107
  $list_items_markup .= sprintf(
108
- '<a href="%1$s">%2$s</a>',
108
+ '<a class="wp-block-latest-posts__post-title" href="%1$s">%2$s</a>',
109
109
  esc_url( $post_link ),
110
110
  $title
111
111
  );
@@ -29,6 +29,7 @@ import {
29
29
  ExternalLink,
30
30
  FocalPointPicker,
31
31
  } from '@wordpress/components';
32
+ import { isBlobURL, getBlobTypeByURL } from '@wordpress/blob';
32
33
  import { pullLeft, pullRight } from '@wordpress/icons';
33
34
  import { store as coreStore } from '@wordpress/core-data';
34
35
 
@@ -72,9 +73,26 @@ function attributesFromMedia( {
72
73
  setAttributes,
73
74
  } ) {
74
75
  return ( media ) => {
76
+ if ( ! media || ! media.url ) {
77
+ setAttributes( {
78
+ mediaAlt: undefined,
79
+ mediaId: undefined,
80
+ mediaType: undefined,
81
+ mediaUrl: undefined,
82
+ mediaLink: undefined,
83
+ href: undefined,
84
+ focalPoint: undefined,
85
+ } );
86
+ return;
87
+ }
88
+
89
+ if ( isBlobURL( media.url ) ) {
90
+ media.type = getBlobTypeByURL( media.url );
91
+ }
92
+
75
93
  let mediaType;
76
94
  let src;
77
- // for media selections originated from a file upload.
95
+ // For media selections originated from a file upload.
78
96
  if ( media.media_type ) {
79
97
  if ( media.media_type === 'image' ) {
80
98
  mediaType = 'image';
@@ -84,7 +102,7 @@ function attributesFromMedia( {
84
102
  mediaType = 'video';
85
103
  }
86
104
  } else {
87
- // for media selections originated from existing files in the media library.
105
+ // For media selections originated from existing files in the media library.
88
106
  mediaType = media.type;
89
107
  }
90
108
 
@@ -82,7 +82,7 @@ class MediaTextEdit extends Component {
82
82
 
83
83
  let mediaType;
84
84
  let src;
85
- // for media selections originated from a file upload.
85
+ // For media selections originated from a file upload.
86
86
  if ( media.media_type ) {
87
87
  if ( media.media_type === 'image' ) {
88
88
  mediaType = 'image';
@@ -92,7 +92,7 @@ class MediaTextEdit extends Component {
92
92
  mediaType = 'video';
93
93
  }
94
94
  } else {
95
- // for media selections originated from existing files in the media library.
95
+ // For media selections originated from existing files in the media library.
96
96
  mediaType = media.type;
97
97
  }
98
98
 
@@ -73,7 +73,7 @@ class MediaContainer extends Component {
73
73
  const { mediaId, mediaUrl } = this.props;
74
74
 
75
75
  // Make sure we mark any temporary images as failed if they failed while
76
- // the editor wasn't open
76
+ // the editor wasn't open.
77
77
  if ( mediaId && mediaUrl && getProtocol( mediaUrl ) === 'file:' ) {
78
78
  mediaUploadSync();
79
79
  }
@@ -116,6 +116,7 @@ $media-to-text: 12px;
116
116
  color: #fff;
117
117
  font-size: 14;
118
118
  margin-top: 5;
119
+ text-align: center;
119
120
  }
120
121
 
121
122
  .uploadFailedTextVideo {
@@ -173,7 +173,7 @@ export class UnsupportedBlockEdit extends Component {
173
173
  // On iOS, onModalHide is called when the controller is still part of the hierarchy.
174
174
  // A small delay will ensure that the controller has already been removed.
175
175
  this.timeout = setTimeout( () => {
176
- // for the Classic block, the content is kept in the `content` attribute
176
+ // For the Classic block, the content is kept in the `content` attribute.
177
177
  const content =
178
178
  blockName === 'core/freeform'
179
179
  ? attributes.content
@@ -15,21 +15,21 @@ import { setLocaleData } from '@wordpress/i18n';
15
15
  import { registerCoreBlocks } from '../..';
16
16
 
17
17
  beforeAll( () => {
18
- // Mock translations
18
+ // Mock translations.
19
19
  setLocaleData( {
20
20
  'block title\u0004Table': [ 'Tabla' ],
21
21
  "'%s' is not fully-supported": [ '«%s» no es totalmente compatible' ],
22
22
  } );
23
23
 
24
- // Register all core blocks
24
+ // Register all core blocks.
25
25
  registerCoreBlocks();
26
26
  } );
27
27
 
28
28
  afterAll( () => {
29
- // Clean up translations
29
+ // Clean up translations.
30
30
  setLocaleData( {} );
31
31
 
32
- // Clean up registered blocks
32
+ // Clean up registered blocks.
33
33
  getBlockTypes().forEach( ( block ) => {
34
34
  unregisterBlockType( block.name );
35
35
  } );
@@ -49,7 +49,7 @@ describe( 'Missing block', () => {
49
49
  const testInstance = getTestComponentWithContent();
50
50
  const bottomSheet = testInstance.UNSAFE_getByType( BottomSheet );
51
51
  const children = bottomSheet.props.children[ 0 ].props.children;
52
- expect( children.length ).toBe( 3 ); // 4 children in the bottom sheet: the icon, the "isn't yet supported" title and the "We are working hard..." message
52
+ expect( children.length ).toBe( 3 ); // 4 children in the bottom sheet: the icon, the "isn't yet supported" title and the "We are working hard..." message.
53
53
  expect( children[ 0 ].props.icon ).toBe( help );
54
54
  } );
55
55
 
@@ -66,7 +66,7 @@ describe( 'Missing block', () => {
66
66
 
67
67
  describe( 'Unsupported block editor (UBE)', () => {
68
68
  beforeEach( () => {
69
- // By default we set the web editor as available
69
+ // By default we set the web editor as available.
70
70
  storeConfig.selectors.getSettings.mockReturnValue( {
71
71
  unsupportedBlockEditor: true,
72
72
  } );
@@ -15,11 +15,11 @@ const transforms = {
15
15
  transform( node ) {
16
16
  const { customText, noTeaser } = node.dataset;
17
17
  const attrs = {};
18
- // Don't copy unless defined and not an empty string
18
+ // Don't copy unless defined and not an empty string.
19
19
  if ( customText ) {
20
20
  attrs.customText = customText;
21
21
  }
22
- // Special handling for boolean
22
+ // Special handling for boolean.
23
23
  if ( noTeaser === '' ) {
24
24
  attrs.noTeaser = true;
25
25
  }
@@ -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,16 +269,15 @@ function Navigation( {
219
269
  const {
220
270
  isNavigationMenuResolved,
221
271
  isNavigationMenuMissing,
222
- canSwitchNavigationMenu,
223
- hasResolvedNavigationMenus,
224
272
  navigationMenus,
225
273
  navigationMenu,
226
- canUserUpdateNavigationEntity,
227
- hasResolvedCanUserUpdateNavigationEntity,
228
- canUserDeleteNavigationEntity,
229
- hasResolvedCanUserDeleteNavigationEntity,
230
- canUserCreateNavigation,
231
- hasResolvedCanUserCreateNavigation,
274
+ canUserUpdateNavigationMenu,
275
+ hasResolvedCanUserUpdateNavigationMenu,
276
+ canUserDeleteNavigationMenu,
277
+ hasResolvedCanUserDeleteNavigationMenu,
278
+ canUserCreateNavigationMenu,
279
+ isResolvingCanUserCreateNavigationMenu,
280
+ hasResolvedCanUserCreateNavigationMenu,
232
281
  } = useNavigationMenu( ref );
233
282
 
234
283
  const navRef = useRef();
@@ -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: __(
@@ -361,16 +477,16 @@ function Navigation( {
361
477
 
362
478
  if ( isSelected || isInnerBlockSelected ) {
363
479
  if (
364
- hasResolvedCanUserUpdateNavigationEntity &&
365
- ! canUserUpdateNavigationEntity
480
+ hasResolvedCanUserUpdateNavigationMenu &&
481
+ ! canUserUpdateNavigationMenu
366
482
  ) {
367
483
  showCantEditNotice();
368
484
  }
369
485
 
370
486
  if (
371
487
  ! ref &&
372
- hasResolvedCanUserCreateNavigation &&
373
- ! canUserCreateNavigation
488
+ hasResolvedCanUserCreateNavigationMenu &&
489
+ ! canUserCreateNavigationMenu
374
490
  ) {
375
491
  showCantCreateNotice();
376
492
  }
@@ -378,14 +494,33 @@ function Navigation( {
378
494
  }, [
379
495
  isSelected,
380
496
  isInnerBlockSelected,
381
- canUserUpdateNavigationEntity,
382
- hasResolvedCanUserUpdateNavigationEntity,
383
- canUserCreateNavigation,
384
- hasResolvedCanUserCreateNavigation,
497
+ canUserUpdateNavigationMenu,
498
+ hasResolvedCanUserUpdateNavigationMenu,
499
+ canUserCreateNavigationMenu,
500
+ hasResolvedCanUserCreateNavigationMenu,
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,34 +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
- canUserCreateNavigation={
500
- canUserCreateNavigation
501
- }
502
- canUserSwitchNavigation={
503
- canSwitchNavigationMenu
504
- }
505
- />
506
- ) }
507
- </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
+ />
508
647
  </ToolbarGroup>
509
648
  ) }
510
649
  <ToolbarGroup>{ listViewToolbarButton }</ToolbarGroup>
@@ -648,41 +787,27 @@ function Navigation( {
648
787
  </InspectorControls>
649
788
  { isEntityAvailable && (
650
789
  <InspectorControls __experimentalGroup="advanced">
651
- { hasResolvedCanUserUpdateNavigationEntity &&
652
- canUserUpdateNavigationEntity && (
790
+ { hasResolvedCanUserUpdateNavigationMenu &&
791
+ canUserUpdateNavigationMenu && (
653
792
  <NavigationMenuNameControl />
654
793
  ) }
655
- { hasResolvedCanUserDeleteNavigationEntity &&
656
- canUserDeleteNavigationEntity && (
794
+ { hasResolvedCanUserDeleteNavigationMenu &&
795
+ canUserDeleteNavigationMenu && (
657
796
  <NavigationMenuDeleteControl
658
- onDelete={ startWithEmptyMenu }
797
+ onDelete={ resetToEmptyBlock }
659
798
  />
660
799
  ) }
661
800
  </InspectorControls>
662
801
  ) }
663
- <nav { ...blockProps }>
664
- { isPlaceholderShown && (
665
- <PlaceholderComponent
666
- onFinish={ ( post ) => {
667
- setIsPlaceholderShown( false );
668
- if ( post ) {
669
- setRef( post.id );
670
- }
671
- selectBlock( clientId );
672
- } }
673
- canSwitchNavigationMenu={ canSwitchNavigationMenu }
674
- hasResolvedNavigationMenus={
675
- hasResolvedNavigationMenus
676
- }
677
- clientId={ clientId }
678
- canUserCreateNavigation={ canUserCreateNavigation }
679
- />
680
- ) }
681
- { ! hasResolvedCanUserCreateNavigation ||
682
- ( ! isEntityAvailable && ! isPlaceholderShown && (
683
- <PlaceholderPreview isLoading />
684
- ) ) }
685
- { ! isPlaceholderShown && (
802
+
803
+ { isLoading && (
804
+ <TagName { ...blockProps }>
805
+ <Spinner className="wp-block-navigation__loading-indicator" />
806
+ </TagName>
807
+ ) }
808
+
809
+ { ! isLoading && (
810
+ <TagName { ...blockProps }>
686
811
  <ResponsiveWrapper
687
812
  id={ clientId }
688
813
  onToggle={ setResponsiveMenuVisibility }
@@ -696,7 +821,6 @@ function Navigation( {
696
821
  >
697
822
  { isEntityAvailable && (
698
823
  <NavigationInnerBlocks
699
- isVisible={ ! isPlaceholderShown }
700
824
  clientId={ clientId }
701
825
  hasCustomPlaceholder={
702
826
  !! CustomPlaceholder
@@ -705,8 +829,8 @@ function Navigation( {
705
829
  />
706
830
  ) }
707
831
  </ResponsiveWrapper>
708
- ) }
709
- </nav>
832
+ </TagName>
833
+ ) }
710
834
  </RecursionProvider>
711
835
  </EntityProvider>
712
836
  );