@wordpress/block-library 8.7.0 → 8.9.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 (416) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/column/index.js +2 -1
  3. package/build/column/index.js.map +1 -1
  4. package/build/columns/edit.js +24 -6
  5. package/build/columns/edit.js.map +1 -1
  6. package/build/columns/index.js +2 -1
  7. package/build/columns/index.js.map +1 -1
  8. package/build/columns/utils.js +4 -9
  9. package/build/columns/utils.js.map +1 -1
  10. package/build/cover/edit/index.js +46 -50
  11. package/build/cover/edit/index.js.map +1 -1
  12. package/build/cover/edit/{resizable-cover.js → resizable-cover-popover.js} +32 -6
  13. package/build/cover/edit/resizable-cover-popover.js.map +1 -0
  14. package/build/cover/index.js +12 -0
  15. package/build/cover/index.js.map +1 -1
  16. package/build/cover/transforms.js +10 -7
  17. package/build/cover/transforms.js.map +1 -1
  18. package/build/details/edit.js +67 -0
  19. package/build/details/edit.js.map +1 -0
  20. package/build/details/index.js +110 -0
  21. package/build/details/index.js.map +1 -0
  22. package/build/details/save.js +33 -0
  23. package/build/details/save.js.map +1 -0
  24. package/build/details-content/edit.js +34 -0
  25. package/build/details-content/edit.js.map +1 -0
  26. package/build/details-content/index.js +94 -0
  27. package/build/details-content/index.js.map +1 -0
  28. package/build/details-content/save.js +20 -0
  29. package/build/details-content/save.js.map +1 -0
  30. package/build/details-summary/edit.js +42 -0
  31. package/build/details-summary/edit.js.map +1 -0
  32. package/build/details-summary/index.js +97 -0
  33. package/build/details-summary/index.js.map +1 -0
  34. package/build/details-summary/save.js +24 -0
  35. package/build/details-summary/save.js.map +1 -0
  36. package/build/embed/deprecated.js +4 -1
  37. package/build/embed/deprecated.js.map +1 -1
  38. package/build/embed/embed-link-settings.native.js +1 -1
  39. package/build/embed/embed-link-settings.native.js.map +1 -1
  40. package/build/embed/embed-placeholder.js +1 -1
  41. package/build/embed/embed-placeholder.js.map +1 -1
  42. package/build/embed/index.js +4 -1
  43. package/build/embed/index.js.map +1 -1
  44. package/build/embed/transforms.js +4 -1
  45. package/build/embed/transforms.js.map +1 -1
  46. package/build/embed/util.js +4 -1
  47. package/build/embed/util.js.map +1 -1
  48. package/build/file/edit.native.js +0 -2
  49. package/build/file/edit.native.js.map +1 -1
  50. package/build/gallery/use-get-media.native.js +2 -1
  51. package/build/gallery/use-get-media.native.js.map +1 -1
  52. package/build/group/edit.js +3 -1
  53. package/build/group/edit.js.map +1 -1
  54. package/build/group/index.js +3 -0
  55. package/build/group/index.js.map +1 -1
  56. package/build/image/edit.js +16 -13
  57. package/build/image/edit.js.map +1 -1
  58. package/build/image/index.js +5 -3
  59. package/build/image/index.js.map +1 -1
  60. package/build/index.js +24 -6
  61. package/build/index.js.map +1 -1
  62. package/build/index.native.js +9 -5
  63. package/build/index.native.js.map +1 -1
  64. package/build/media-text/edit.js +4 -2
  65. package/build/media-text/edit.js.map +1 -1
  66. package/build/media-text/index.js +3 -0
  67. package/build/media-text/index.js.map +1 -1
  68. package/build/media-text/media-container.js +2 -6
  69. package/build/media-text/media-container.js.map +1 -1
  70. package/build/media-text/media-container.native.js +3 -3
  71. package/build/media-text/media-container.native.js.map +1 -1
  72. package/build/navigation/deprecated.js +8 -11
  73. package/build/navigation/deprecated.js.map +1 -1
  74. package/build/navigation/edit/index.js +32 -64
  75. package/build/navigation/edit/index.js.map +1 -1
  76. package/build/navigation/edit/unsaved-inner-blocks.js +1 -14
  77. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  78. package/build/post-author/index.js +0 -1
  79. package/build/post-author/index.js.map +1 -1
  80. package/build/post-date/edit.js +4 -2
  81. package/build/post-date/edit.js.map +1 -1
  82. package/build/post-excerpt/edit.js +2 -2
  83. package/build/post-excerpt/edit.js.map +1 -1
  84. package/build/post-featured-image/dimension-controls.js +2 -1
  85. package/build/post-featured-image/dimension-controls.js.map +1 -1
  86. package/build/post-featured-image/edit.js +16 -27
  87. package/build/post-featured-image/edit.js.map +1 -1
  88. package/build/post-time-to-read/edit.js +1 -1
  89. package/build/post-time-to-read/edit.js.map +1 -1
  90. package/build/post-time-to-read/index.js +7 -0
  91. package/build/post-time-to-read/index.js.map +1 -1
  92. package/build/query/deprecated.js +8 -6
  93. package/build/query/deprecated.js.map +1 -1
  94. package/build/query/edit/inspector-controls/create-new-post-link.js +41 -0
  95. package/build/query/edit/inspector-controls/create-new-post-link.js.map +1 -0
  96. package/build/query/edit/inspector-controls/index.js +14 -6
  97. package/build/query/edit/inspector-controls/index.js.map +1 -1
  98. package/build/query/edit/pattern-selection-modal.js +2 -1
  99. package/build/query/edit/pattern-selection-modal.js.map +1 -1
  100. package/build/query/index.js +5 -12
  101. package/build/query/index.js.map +1 -1
  102. package/build/site-logo/edit.js +114 -16
  103. package/build/site-logo/edit.js.map +1 -1
  104. package/build/site-logo/index.js +1 -1
  105. package/build/social-link/icons/chain.js +1 -1
  106. package/build/social-link/icons/chain.js.map +1 -1
  107. package/build/social-link/icons/mail.js +1 -1
  108. package/build/social-link/icons/mail.js.map +1 -1
  109. package/build/spacer/controls.js +25 -6
  110. package/build/spacer/controls.js.map +1 -1
  111. package/build/spacer/edit.js +129 -13
  112. package/build/spacer/edit.js.map +1 -1
  113. package/build/spacer/save.js +2 -2
  114. package/build/spacer/save.js.map +1 -1
  115. package/build/table/state.js +35 -35
  116. package/build/table/state.js.map +1 -1
  117. package/build/template-part/edit/index.js +2 -1
  118. package/build/template-part/edit/index.js.map +1 -1
  119. package/build/template-part/edit/utils/hooks.js +2 -2
  120. package/build/template-part/edit/utils/hooks.js.map +1 -1
  121. package/build/term-description/index.js +1 -2
  122. package/build/term-description/index.js.map +1 -1
  123. package/build/utils/migrate-font-family.js +12 -5
  124. package/build/utils/migrate-font-family.js.map +1 -1
  125. package/build/video/edit.native.js +4 -3
  126. package/build/video/edit.native.js.map +1 -1
  127. package/build-module/column/index.js +2 -1
  128. package/build-module/column/index.js.map +1 -1
  129. package/build-module/columns/edit.js +24 -6
  130. package/build-module/columns/edit.js.map +1 -1
  131. package/build-module/columns/index.js +2 -1
  132. package/build-module/columns/index.js.map +1 -1
  133. package/build-module/columns/utils.js +4 -8
  134. package/build-module/columns/utils.js.map +1 -1
  135. package/build-module/cover/edit/index.js +48 -52
  136. package/build-module/cover/edit/index.js.map +1 -1
  137. package/build-module/cover/edit/{resizable-cover.js → resizable-cover-popover.js} +31 -6
  138. package/build-module/cover/edit/resizable-cover-popover.js.map +1 -0
  139. package/build-module/cover/index.js +12 -0
  140. package/build-module/cover/index.js.map +1 -1
  141. package/build-module/cover/transforms.js +5 -1
  142. package/build-module/cover/transforms.js.map +1 -1
  143. package/build-module/details/edit.js +52 -0
  144. package/build-module/details/edit.js.map +1 -0
  145. package/build-module/details/index.js +91 -0
  146. package/build-module/details/index.js.map +1 -0
  147. package/build-module/details/save.js +20 -0
  148. package/build-module/details/save.js.map +1 -0
  149. package/build-module/details-content/edit.js +23 -0
  150. package/build-module/details-content/edit.js.map +1 -0
  151. package/build-module/details-content/index.js +76 -0
  152. package/build-module/details-content/index.js.map +1 -0
  153. package/build-module/details-content/save.js +11 -0
  154. package/build-module/details-content/save.js.map +1 -0
  155. package/build-module/details-summary/edit.js +30 -0
  156. package/build-module/details-summary/edit.js.map +1 -0
  157. package/build-module/details-summary/index.js +79 -0
  158. package/build-module/details-summary/index.js.map +1 -0
  159. package/build-module/details-summary/save.js +16 -0
  160. package/build-module/details-summary/save.js.map +1 -0
  161. package/build-module/embed/deprecated.js +4 -1
  162. package/build-module/embed/deprecated.js.map +1 -1
  163. package/build-module/embed/embed-link-settings.native.js +1 -1
  164. package/build-module/embed/embed-link-settings.native.js.map +1 -1
  165. package/build-module/embed/embed-placeholder.js +1 -1
  166. package/build-module/embed/embed-placeholder.js.map +1 -1
  167. package/build-module/embed/index.js +4 -1
  168. package/build-module/embed/index.js.map +1 -1
  169. package/build-module/embed/transforms.js +4 -1
  170. package/build-module/embed/transforms.js.map +1 -1
  171. package/build-module/embed/util.js +4 -1
  172. package/build-module/embed/util.js.map +1 -1
  173. package/build-module/file/edit.native.js +0 -2
  174. package/build-module/file/edit.native.js.map +1 -1
  175. package/build-module/gallery/use-get-media.native.js +2 -1
  176. package/build-module/gallery/use-get-media.native.js.map +1 -1
  177. package/build-module/group/edit.js +3 -1
  178. package/build-module/group/edit.js.map +1 -1
  179. package/build-module/group/index.js +3 -0
  180. package/build-module/group/index.js.map +1 -1
  181. package/build-module/image/edit.js +16 -13
  182. package/build-module/image/edit.js.map +1 -1
  183. package/build-module/image/index.js +5 -3
  184. package/build-module/image/index.js.map +1 -1
  185. package/build-module/index.js +21 -6
  186. package/build-module/index.js.map +1 -1
  187. package/build-module/index.native.js +9 -5
  188. package/build-module/index.native.js.map +1 -1
  189. package/build-module/media-text/edit.js +4 -2
  190. package/build-module/media-text/edit.js.map +1 -1
  191. package/build-module/media-text/index.js +3 -0
  192. package/build-module/media-text/index.js.map +1 -1
  193. package/build-module/media-text/media-container.js +1 -5
  194. package/build-module/media-text/media-container.js.map +1 -1
  195. package/build-module/media-text/media-container.native.js +1 -1
  196. package/build-module/media-text/media-container.native.js.map +1 -1
  197. package/build-module/navigation/deprecated.js +8 -10
  198. package/build-module/navigation/deprecated.js.map +1 -1
  199. package/build-module/navigation/edit/index.js +31 -63
  200. package/build-module/navigation/edit/index.js.map +1 -1
  201. package/build-module/navigation/edit/unsaved-inner-blocks.js +1 -14
  202. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  203. package/build-module/post-author/index.js +0 -1
  204. package/build-module/post-author/index.js.map +1 -1
  205. package/build-module/post-date/edit.js +4 -2
  206. package/build-module/post-date/edit.js.map +1 -1
  207. package/build-module/post-excerpt/edit.js +2 -2
  208. package/build-module/post-excerpt/edit.js.map +1 -1
  209. package/build-module/post-featured-image/dimension-controls.js +2 -1
  210. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  211. package/build-module/post-featured-image/edit.js +16 -27
  212. package/build-module/post-featured-image/edit.js.map +1 -1
  213. package/build-module/post-time-to-read/edit.js +1 -1
  214. package/build-module/post-time-to-read/edit.js.map +1 -1
  215. package/build-module/post-time-to-read/index.js +7 -0
  216. package/build-module/post-time-to-read/index.js.map +1 -1
  217. package/build-module/query/deprecated.js +5 -2
  218. package/build-module/query/deprecated.js.map +1 -1
  219. package/build-module/query/edit/inspector-controls/create-new-post-link.js +33 -0
  220. package/build-module/query/edit/inspector-controls/create-new-post-link.js.map +1 -0
  221. package/build-module/query/edit/inspector-controls/index.js +12 -7
  222. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  223. package/build-module/query/edit/pattern-selection-modal.js +2 -1
  224. package/build-module/query/edit/pattern-selection-modal.js.map +1 -1
  225. package/build-module/query/index.js +5 -10
  226. package/build-module/query/index.js.map +1 -1
  227. package/build-module/site-logo/edit.js +115 -18
  228. package/build-module/site-logo/edit.js.map +1 -1
  229. package/build-module/site-logo/index.js +1 -1
  230. package/build-module/social-link/icons/chain.js +1 -1
  231. package/build-module/social-link/icons/chain.js.map +1 -1
  232. package/build-module/social-link/icons/mail.js +1 -1
  233. package/build-module/social-link/icons/mail.js.map +1 -1
  234. package/build-module/spacer/controls.js +27 -9
  235. package/build-module/spacer/controls.js.map +1 -1
  236. package/build-module/spacer/edit.js +129 -14
  237. package/build-module/spacer/edit.js.map +1 -1
  238. package/build-module/spacer/save.js +3 -3
  239. package/build-module/spacer/save.js.map +1 -1
  240. package/build-module/table/state.js +35 -33
  241. package/build-module/table/state.js.map +1 -1
  242. package/build-module/template-part/edit/index.js +2 -1
  243. package/build-module/template-part/edit/index.js.map +1 -1
  244. package/build-module/template-part/edit/utils/hooks.js +2 -2
  245. package/build-module/template-part/edit/utils/hooks.js.map +1 -1
  246. package/build-module/term-description/index.js +1 -2
  247. package/build-module/term-description/index.js.map +1 -1
  248. package/build-module/utils/migrate-font-family.js +9 -1
  249. package/build-module/utils/migrate-font-family.js.map +1 -1
  250. package/build-module/video/edit.native.js +4 -3
  251. package/build-module/video/edit.native.js.map +1 -1
  252. package/build-style/columns/style-rtl.css +4 -1
  253. package/build-style/columns/style.css +4 -1
  254. package/build-style/common-rtl.css +1 -1
  255. package/build-style/common.css +1 -1
  256. package/build-style/cover/editor-rtl.css +9 -10
  257. package/build-style/cover/editor.css +9 -10
  258. package/build-style/cover/style-rtl.css +1 -1
  259. package/build-style/cover/style.css +1 -1
  260. package/build-style/details/style-rtl.css +91 -0
  261. package/build-style/details/style.css +91 -0
  262. package/build-style/details-summary/editor-rtl.css +91 -0
  263. package/build-style/details-summary/editor.css +91 -0
  264. package/build-style/details-summary/style-rtl.css +91 -0
  265. package/build-style/details-summary/style.css +91 -0
  266. package/build-style/editor-rtl.css +97 -74
  267. package/build-style/editor.css +97 -74
  268. package/build-style/file/style-rtl.css +4 -3
  269. package/build-style/file/style.css +4 -3
  270. package/build-style/html/editor-rtl.css +2 -2
  271. package/build-style/html/editor.css +2 -2
  272. package/build-style/image/editor-rtl.css +1 -1
  273. package/build-style/image/editor.css +1 -1
  274. package/build-style/post-excerpt/style-rtl.css +1 -1
  275. package/build-style/post-excerpt/style.css +1 -1
  276. package/build-style/pullquote/style-rtl.css +4 -1
  277. package/build-style/pullquote/style.css +4 -1
  278. package/build-style/query/editor-rtl.css +8 -12
  279. package/build-style/query/editor.css +8 -12
  280. package/build-style/search/style-rtl.css +2 -0
  281. package/build-style/search/style.css +2 -0
  282. package/build-style/shortcode/editor-rtl.css +15 -35
  283. package/build-style/shortcode/editor.css +15 -35
  284. package/build-style/site-logo/editor-rtl.css +46 -0
  285. package/build-style/site-logo/editor.css +46 -0
  286. package/build-style/spacer/editor-rtl.css +4 -2
  287. package/build-style/spacer/editor.css +4 -2
  288. package/build-style/style-rtl.css +25 -8
  289. package/build-style/style.css +25 -8
  290. package/build-style/template-part/editor-rtl.css +8 -12
  291. package/build-style/template-part/editor.css +8 -12
  292. package/package.json +31 -31
  293. package/src/buttons/test/__snapshots__/edit.native.js.snap +18 -0
  294. package/src/buttons/test/edit.native.js +123 -2
  295. package/src/column/block.json +2 -1
  296. package/src/columns/block.json +2 -1
  297. package/src/columns/edit.js +33 -9
  298. package/src/columns/style.scss +5 -1
  299. package/src/columns/utils.js +8 -9
  300. package/src/common.scss +1 -1
  301. package/src/cover/block.json +12 -0
  302. package/src/cover/edit/index.js +44 -37
  303. package/src/cover/edit/resizable-cover-popover.js +82 -0
  304. package/src/cover/editor.scss +20 -13
  305. package/src/cover/index.php +9 -10
  306. package/src/cover/style.scss +1 -1
  307. package/src/cover/test/edit.js +1 -1
  308. package/src/cover/transforms.js +4 -1
  309. package/src/details/block.json +54 -0
  310. package/src/details/edit.js +59 -0
  311. package/src/details/index.js +35 -0
  312. package/src/details/save.js +15 -0
  313. package/src/details/style.scss +3 -0
  314. package/src/details-content/block.json +50 -0
  315. package/src/details-content/edit.js +29 -0
  316. package/src/details-content/index.js +23 -0
  317. package/src/details-content/save.js +12 -0
  318. package/src/details-summary/block.json +53 -0
  319. package/src/details-summary/edit.js +27 -0
  320. package/src/details-summary/editor.scss +3 -0
  321. package/src/details-summary/index.js +23 -0
  322. package/src/details-summary/save.js +13 -0
  323. package/src/details-summary/style.scss +3 -0
  324. package/src/editor.scss +1 -0
  325. package/src/embed/block.json +4 -1
  326. package/src/embed/embed-link-settings.native.js +1 -1
  327. package/src/embed/embed-placeholder.js +1 -1
  328. package/src/file/edit.native.js +0 -2
  329. package/src/file/style.scss +5 -2
  330. package/src/gallery/test/index.native.js +4 -4
  331. package/src/gallery/test/use-get-media.native.js +24 -0
  332. package/src/gallery/use-get-media.native.js +1 -1
  333. package/src/group/block.json +3 -0
  334. package/src/group/edit.js +8 -2
  335. package/src/heading/test/__snapshots__/index.native.js.snap +12 -0
  336. package/src/heading/test/index.native.js +71 -0
  337. package/src/html/editor.scss +2 -21
  338. package/src/image/block.json +5 -3
  339. package/src/image/edit.js +21 -17
  340. package/src/image/editor.scss +1 -1
  341. package/src/index.js +13 -3
  342. package/src/index.native.js +9 -5
  343. package/src/list/test/edit.native.js +7 -7
  344. package/src/media-text/block.json +3 -0
  345. package/src/media-text/edit.js +2 -1
  346. package/src/media-text/media-container.js +1 -5
  347. package/src/media-text/media-container.native.js +1 -1
  348. package/src/navigation/deprecated.js +15 -19
  349. package/src/navigation/edit/index.js +32 -106
  350. package/src/navigation/edit/unsaved-inner-blocks.js +34 -46
  351. package/src/navigation/index.php +15 -12
  352. package/src/paragraph/test/edit.native.js +616 -1
  353. package/src/post-author/block.json +0 -1
  354. package/src/post-date/edit.js +4 -0
  355. package/src/post-date/index.php +17 -8
  356. package/src/post-excerpt/edit.js +1 -1
  357. package/src/post-excerpt/index.php +3 -3
  358. package/src/post-excerpt/style.scss +2 -1
  359. package/src/post-featured-image/dimension-controls.js +5 -1
  360. package/src/post-featured-image/edit.js +14 -34
  361. package/src/post-featured-image/index.php +1 -1
  362. package/src/post-time-to-read/block.json +7 -0
  363. package/src/post-time-to-read/edit.js +1 -1
  364. package/src/post-time-to-read/index.php +3 -3
  365. package/src/preformatted/test/__snapshots__/edit.native.js.snap +2 -2
  366. package/src/preformatted/test/edit.native.js +42 -2
  367. package/src/pullquote/style.scss +5 -1
  368. package/src/pullquote/test/edit.native.js +65 -0
  369. package/src/query/deprecated.js +4 -1
  370. package/src/query/edit/inspector-controls/create-new-post-link.js +26 -0
  371. package/src/query/edit/inspector-controls/index.js +13 -6
  372. package/src/query/edit/pattern-selection-modal.js +1 -0
  373. package/src/query/editor.scss +8 -11
  374. package/src/query/index.js +1 -7
  375. package/src/quote/test/edit.native.js +88 -0
  376. package/src/search/index.php +1 -1
  377. package/src/search/style.scss +3 -0
  378. package/src/shortcode/editor.scss +6 -5
  379. package/src/site-logo/block.json +1 -1
  380. package/src/site-logo/edit.js +123 -9
  381. package/src/site-logo/editor.scss +57 -0
  382. package/src/social-link/icons/chain.js +1 -1
  383. package/src/social-link/icons/mail.js +1 -1
  384. package/src/social-link/index.php +2 -2
  385. package/src/spacer/controls.js +42 -17
  386. package/src/spacer/edit.js +176 -18
  387. package/src/spacer/editor.scss +2 -1
  388. package/src/spacer/save.js +3 -3
  389. package/src/style.scss +2 -0
  390. package/src/table/state.js +83 -66
  391. package/src/template-part/edit/index.js +1 -0
  392. package/src/template-part/edit/utils/hooks.js +2 -2
  393. package/src/template-part/editor.scss +9 -11
  394. package/src/term-description/block.json +1 -2
  395. package/src/utils/migrate-font-family.js +8 -1
  396. package/src/verse/test/edit.native.js +28 -0
  397. package/src/video/edit.native.js +2 -2
  398. package/tsconfig.json +1 -0
  399. package/build/cover/edit/resizable-cover.js.map +0 -1
  400. package/build/media-text/media-container-icon.js +0 -27
  401. package/build/media-text/media-container-icon.js.map +0 -1
  402. package/build/query/hooks.js +0 -72
  403. package/build/query/hooks.js.map +0 -1
  404. package/build/utils/clean-empty-object.js +0 -34
  405. package/build/utils/clean-empty-object.js.map +0 -1
  406. package/build-module/cover/edit/resizable-cover.js.map +0 -1
  407. package/build-module/media-text/media-container-icon.js +0 -17
  408. package/build-module/media-text/media-container-icon.js.map +0 -1
  409. package/build-module/query/hooks.js +0 -59
  410. package/build-module/query/hooks.js.map +0 -1
  411. package/build-module/utils/clean-empty-object.js +0 -25
  412. package/build-module/utils/clean-empty-object.js.map +0 -1
  413. package/src/cover/edit/resizable-cover.js +0 -61
  414. package/src/media-text/media-container-icon.js +0 -12
  415. package/src/query/hooks.js +0 -53
  416. package/src/utils/clean-empty-object.js +0 -28
@@ -40,8 +40,8 @@ import {
40
40
  } from '@wordpress/components';
41
41
  import { __, sprintf } from '@wordpress/i18n';
42
42
  import { speak } from '@wordpress/a11y';
43
- import { createBlock } from '@wordpress/blocks';
44
43
  import { close, Icon } from '@wordpress/icons';
44
+ import apiFetch from '@wordpress/api-fetch';
45
45
 
46
46
  /**
47
47
  * Internal dependencies
@@ -118,8 +118,7 @@ function Navigation( {
118
118
 
119
119
  // Preload classic menus, so that they don't suddenly pop-in when viewing
120
120
  // the Select Menu dropdown.
121
- const { menus: classicMenus, hasResolvedMenus: hasResolvedClassicMenus } =
122
- useNavigationEntities();
121
+ const { menus: classicMenus } = useNavigationEntities();
123
122
 
124
123
  const [ showNavigationMenuStatusNotice, hideNavigationMenuStatusNotice ] =
125
124
  useNavigationNotice( {
@@ -178,7 +177,6 @@ function Navigation( {
178
177
  hasResolvedNavigationMenus,
179
178
  isNavigationMenuResolved,
180
179
  isNavigationMenuMissing,
181
- navigationMenus,
182
180
  canUserUpdateNavigationMenu,
183
181
  hasResolvedCanUserUpdateNavigationMenu,
184
182
  canUserDeleteNavigationMenu,
@@ -200,12 +198,6 @@ function Navigation( {
200
198
  const isConvertingClassicMenu =
201
199
  classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING;
202
200
 
203
- // Only auto-fallback to the latest published menu.
204
- // The REST API already returns items sorted by publishing date.
205
- const fallbackNavigationMenuId = navigationMenus?.find(
206
- ( menu ) => menu.status === 'publish'
207
- )?.id;
208
-
209
201
  const handleUpdateMenu = useCallback(
210
202
  ( menuId, options = { focusNavigationBlock: false } ) => {
211
203
  const { focusNavigationBlock } = options;
@@ -217,41 +209,6 @@ function Navigation( {
217
209
  [ selectBlock, clientId, setRef ]
218
210
  );
219
211
 
220
- // Attempt to retrieve and prioritize any existing navigation menu unless:
221
- // - the are uncontrolled inner blocks already present in the block.
222
- // - the user is creating a new menu.
223
- // - there are no menus to choose from.
224
- // This attempts to pick the first menu if there is a single Navigation Post. If more
225
- // than 1 exists then use the most recent.
226
- // The aim is for the block to "just work" from a user perspective using existing data.
227
- useEffect( () => {
228
- if (
229
- hasUncontrolledInnerBlocks ||
230
- isCreatingNavigationMenu ||
231
- ref ||
232
- ! fallbackNavigationMenuId
233
- ) {
234
- return;
235
- }
236
-
237
- /**
238
- * This fallback displays (both in editor and on front)
239
- * a list of pages only if no menu (user assigned or
240
- * automatically picked) is available.
241
- * The fallback should not request a save (entity dirty state)
242
- * nor to be undoable, hence why it is marked as non persistent
243
- */
244
- __unstableMarkNextChangeAsNotPersistent();
245
- setRef( fallbackNavigationMenuId );
246
- }, [
247
- ref,
248
- setRef,
249
- isCreatingNavigationMenu,
250
- fallbackNavigationMenuId,
251
- hasUncontrolledInnerBlocks,
252
- __unstableMarkNextChangeAsNotPersistent,
253
- ] );
254
-
255
212
  const isEntityAvailable =
256
213
  ! isNavigationMenuMissing && isNavigationMenuResolved;
257
214
 
@@ -264,54 +221,42 @@ function Navigation( {
264
221
  const hasUnsavedBlocks = hasUncontrolledInnerBlocks && ! isEntityAvailable;
265
222
 
266
223
  useEffect( () => {
267
- if (
268
- ref ||
269
- ! hasResolvedClassicMenus ||
270
- ! hasResolvedNavigationMenus ||
271
- isConvertingClassicMenu ||
272
- fallbackNavigationMenuId ||
273
- hasUnsavedBlocks ||
274
- ! classicMenus?.length
275
- ) {
224
+ // If:
225
+ // - there is an existing menu, OR
226
+ // - there are existing (uncontrolled) inner blocks
227
+ // ...then don't request a fallback menu.
228
+ if ( ref || hasUnsavedBlocks ) {
276
229
  return;
277
230
  }
278
231
 
279
- // If there's non fallback navigation menus and
280
- // a classic menu with a `primary` location or slug,
281
- // then create a new navigation menu based on it.
282
- // Otherwise, use the most recently created classic menu.
283
- const primaryMenus = classicMenus.filter(
284
- ( classicMenu ) =>
285
- classicMenu.locations.includes( 'primary' ) ||
286
- classicMenu.slug === 'primary'
287
- );
288
-
289
- if ( primaryMenus.length ) {
290
- convertClassicMenu(
291
- primaryMenus[ 0 ].id,
292
- primaryMenus[ 0 ].name,
293
- 'publish'
294
- );
295
- } else {
296
- classicMenus.sort( ( a, b ) => {
297
- return b.id - a.id;
232
+ apiFetch( { path: '/wp-block-editor/v1/navigation-fallback' } )
233
+ .then( ( fallbackNavigationMenu ) => {
234
+ if ( ! fallbackNavigationMenu?.id ) {
235
+ showNavigationMenuStatusNotice(
236
+ __( 'Unable to fetch a fallback Navigation Menu.' )
237
+ );
238
+ return;
239
+ }
240
+
241
+ /**
242
+ * This fallback displays (both in editor and on front)
243
+ * The fallback should not request a save (entity dirty state)
244
+ * nor to be undoable, hence why it is marked as non persistent
245
+ */
246
+ __unstableMarkNextChangeAsNotPersistent();
247
+ setRef( fallbackNavigationMenu.id );
248
+ } )
249
+ .catch( () => {
250
+ showNavigationMenuStatusNotice(
251
+ __( 'Unable to fetch a fallback Navigation Menu.' )
252
+ );
298
253
  } );
299
- convertClassicMenu(
300
- classicMenus[ 0 ].id,
301
- classicMenus[ 0 ].name,
302
- 'publish'
303
- );
304
- }
305
254
  }, [
306
- hasResolvedClassicMenus,
307
- hasResolvedNavigationMenus,
308
- hasUnsavedBlocks,
309
- classicMenus,
310
- convertClassicMenu,
311
- createNavigationMenu,
312
- fallbackNavigationMenuId,
313
- isConvertingClassicMenu,
314
255
  ref,
256
+ hasUnsavedBlocks,
257
+ setRef,
258
+ showNavigationMenuStatusNotice,
259
+ __unstableMarkNextChangeAsNotPersistent,
315
260
  ] );
316
261
 
317
262
  const navRef = useRef();
@@ -332,25 +277,6 @@ function Navigation( {
332
277
  classicMenus?.length === 0 &&
333
278
  ! hasUncontrolledInnerBlocks;
334
279
 
335
- useEffect( () => {
336
- if ( isPlaceholder ) {
337
- /**
338
- * this fallback only displays (both in editor and on front)
339
- * the list of pages block if no menu is available as a fallback.
340
- * We don't want the fallback to request a save,
341
- * nor to be undoable, hence we mark it non persistent.
342
- */
343
- __unstableMarkNextChangeAsNotPersistent();
344
- replaceInnerBlocks( clientId, [ createBlock( 'core/page-list' ) ] );
345
- }
346
- }, [
347
- clientId,
348
- isPlaceholder,
349
- ref,
350
- __unstableMarkNextChangeAsNotPersistent,
351
- replaceInnerBlocks,
352
- ] );
353
-
354
280
  // "loading" state:
355
281
  // - there is a menu creation process in progress.
356
282
  // - there is a classic menu conversion process in progress.
@@ -120,53 +120,41 @@ export default function UnsavedInnerBlocks( {
120
120
  const { hasResolvedNavigationMenus } = useNavigationMenu();
121
121
 
122
122
  // Automatically save the uncontrolled blocks.
123
- useEffect(
124
- () => {
125
- // The block will be disabled when used in a BlockPreview.
126
- // In this case avoid automatic creation of a wp_navigation post.
127
- // Otherwise the user will be spammed with lots of menus!
128
- //
129
- // Also ensure other navigation menus have loaded so an
130
- // accurate name can be created.
131
- //
132
- // Don't try saving when another save is already
133
- // in progress.
134
- //
135
- // And finally only create the menu when the block is selected,
136
- // which is an indication they want to start editing.
137
- if (
138
- isDisabled ||
139
- isSaving ||
140
- ! hasResolvedDraftNavigationMenus ||
141
- ! hasResolvedNavigationMenus ||
142
- ! hasSelection ||
143
- ! innerBlocksAreDirty
144
- ) {
145
- return;
146
- }
123
+ useEffect( () => {
124
+ // The block will be disabled when used in a BlockPreview.
125
+ // In this case avoid automatic creation of a wp_navigation post.
126
+ // Otherwise the user will be spammed with lots of menus!
127
+ //
128
+ // Also ensure other navigation menus have loaded so an
129
+ // accurate name can be created.
130
+ //
131
+ // Don't try saving when another save is already
132
+ // in progress.
133
+ //
134
+ // And finally only create the menu when the block is selected,
135
+ // which is an indication they want to start editing.
136
+ if (
137
+ isDisabled ||
138
+ isSaving ||
139
+ ! hasResolvedDraftNavigationMenus ||
140
+ ! hasResolvedNavigationMenus ||
141
+ ! hasSelection ||
142
+ ! innerBlocksAreDirty
143
+ ) {
144
+ return;
145
+ }
147
146
 
148
- createNavigationMenu( null, blocks );
149
- },
150
- /* The dependency "blocks" is intentionally omitted here.
151
- * This is because making blocks a dependency would cause
152
- * createNavigationMenu to run on every block change whereas
153
- * we only want it to run when the blocks are first detected
154
- * as dirty.
155
- * A better solution might be to add a hard saving lock using
156
- * a ref to avoid having to disbale theses eslint rules.
157
- */
158
- /* eslint-disable react-hooks/exhaustive-deps */
159
- [
160
- createNavigationMenu,
161
- isDisabled,
162
- isSaving,
163
- hasResolvedDraftNavigationMenus,
164
- hasResolvedNavigationMenus,
165
- innerBlocksAreDirty,
166
- hasSelection,
167
- ]
168
- /* eslint-enable react-hooks/exhaustive-deps */
169
- );
147
+ createNavigationMenu( null, blocks );
148
+ }, [
149
+ blocks,
150
+ createNavigationMenu,
151
+ isDisabled,
152
+ isSaving,
153
+ hasResolvedDraftNavigationMenus,
154
+ hasResolvedNavigationMenus,
155
+ innerBlocksAreDirty,
156
+ hasSelection,
157
+ ] );
170
158
 
171
159
  const Wrapper = isSaving ? Disabled : 'div';
172
160
 
@@ -79,6 +79,9 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
79
79
  * @return array An array of parsed block data.
80
80
  */
81
81
  function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
82
+
83
+ _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::parse_blocks_from_menu_items' );
84
+
82
85
  if ( empty( $menu_items ) ) {
83
86
  return array();
84
87
  }
@@ -254,6 +257,9 @@ function block_core_navigation_render_submenu_icon() {
254
257
  * @return object WP_Term The classic navigation.
255
258
  */
256
259
  function block_core_navigation_get_classic_menu_fallback() {
260
+
261
+ _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::get_classic_menu_fallback' );
262
+
257
263
  $classic_nav_menus = wp_get_nav_menus();
258
264
 
259
265
  // If menus exist.
@@ -294,6 +300,9 @@ function block_core_navigation_get_classic_menu_fallback() {
294
300
  * @return array the normalized parsed blocks.
295
301
  */
296
302
  function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu ) {
303
+
304
+ _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::get_classic_menu_fallback_blocks' );
305
+
297
306
  // BEGIN: Code that already exists in wp_nav_menu().
298
307
  $menu_items = wp_get_nav_menu_items( $classic_nav_menu->term_id, array( 'update_post_term_cache' => false ) );
299
308
 
@@ -330,6 +339,9 @@ function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_me
330
339
  * @return array the normalized parsed blocks.
331
340
  */
332
341
  function block_core_navigation_maybe_use_classic_menu_fallback() {
342
+
343
+ _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::create_classic_menu_fallback' );
344
+
333
345
  // See if we have a classic menu.
334
346
  $classic_nav_menu = block_core_navigation_get_classic_menu_fallback();
335
347
 
@@ -371,6 +383,8 @@ function block_core_navigation_maybe_use_classic_menu_fallback() {
371
383
  */
372
384
  function block_core_navigation_get_most_recently_published_navigation() {
373
385
 
386
+ _deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::get_most_recently_published_navigation' );
387
+
374
388
  // Default to the most recently created menu.
375
389
  $parsed_args = array(
376
390
  'post_type' => 'wp_navigation',
@@ -452,14 +466,7 @@ function block_core_navigation_get_fallback_blocks() {
452
466
  // If `core/page-list` is not registered then return empty blocks.
453
467
  $fallback_blocks = $registry->is_registered( 'core/page-list' ) ? $page_list_fallback : array();
454
468
 
455
- // Default to a list of Pages.
456
- $navigation_post = block_core_navigation_get_most_recently_published_navigation();
457
-
458
- // If there are no navigation posts then try to find a classic menu
459
- // and convert it into a block based navigation menu.
460
- if ( ! $navigation_post ) {
461
- $navigation_post = block_core_navigation_maybe_use_classic_menu_fallback();
462
- }
469
+ $navigation_post = WP_Navigation_Fallback_Gutenberg::get_fallback();
463
470
 
464
471
  // Use the first non-empty Navigation as fallback if available.
465
472
  if ( $navigation_post ) {
@@ -471,10 +478,6 @@ function block_core_navigation_get_fallback_blocks() {
471
478
  $fallback_blocks = ! empty( $maybe_fallback ) ? $maybe_fallback : $fallback_blocks;
472
479
  }
473
480
 
474
- // Normalizing blocks may result in an empty array of blocks if they were all `null` blocks.
475
- // In this case default empty blocks.
476
- $fallback_blocks = ! empty( $maybe_fallback ) ? $maybe_fallback : array();
477
-
478
481
  /**
479
482
  * Filters the fallback experience for the Navigation block.
480
483
  *