@wordpress/block-library 8.4.0 → 8.6.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 (607) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/archives/edit.js +3 -0
  3. package/build/archives/edit.js.map +1 -1
  4. package/build/audio/edit.js +2 -0
  5. package/build/audio/edit.js.map +1 -1
  6. package/build/avatar/edit.js +5 -9
  7. package/build/avatar/edit.js.map +1 -1
  8. package/build/buttons/edit.native.js +1 -1
  9. package/build/buttons/edit.native.js.map +1 -1
  10. package/build/categories/edit.js +5 -0
  11. package/build/categories/edit.js.map +1 -1
  12. package/build/columns/edit.js +11 -8
  13. package/build/columns/edit.js.map +1 -1
  14. package/build/columns/edit.native.js +1 -1
  15. package/build/columns/edit.native.js.map +1 -1
  16. package/build/columns/utils.js +2 -2
  17. package/build/columns/utils.js.map +1 -1
  18. package/build/comment-author-name/edit.js +2 -0
  19. package/build/comment-author-name/edit.js.map +1 -1
  20. package/build/comment-date/edit.js +1 -0
  21. package/build/comment-date/edit.js.map +1 -1
  22. package/build/comment-edit-link/edit.js +1 -0
  23. package/build/comment-edit-link/edit.js.map +1 -1
  24. package/build/comments/edit/placeholder.js +8 -5
  25. package/build/comments/edit/placeholder.js.map +1 -1
  26. package/build/comments-title/edit.js +2 -0
  27. package/build/comments-title/edit.js.map +1 -1
  28. package/build/cover/edit/inspector-controls.js +2 -0
  29. package/build/cover/edit/inspector-controls.js.map +1 -1
  30. package/build/cover/index.js +13 -4
  31. package/build/cover/index.js.map +1 -1
  32. package/build/cover/variations.js +29 -0
  33. package/build/cover/variations.js.map +1 -0
  34. package/build/embed/edit.js +13 -14
  35. package/build/embed/edit.js.map +1 -1
  36. package/build/embed/edit.native.js +18 -14
  37. package/build/embed/edit.native.js.map +1 -1
  38. package/build/embed/embed-controls.js +1 -0
  39. package/build/embed/embed-controls.js.map +1 -1
  40. package/build/embed/util.js +39 -12
  41. package/build/embed/util.js.map +1 -1
  42. package/build/file/inspector.js +3 -0
  43. package/build/file/inspector.js.map +1 -1
  44. package/build/freeform/modal.js +1 -1
  45. package/build/freeform/modal.js.map +1 -1
  46. package/build/gallery/edit.js +3 -0
  47. package/build/gallery/edit.js.map +1 -1
  48. package/build/gallery/shared.js +4 -8
  49. package/build/gallery/shared.js.map +1 -1
  50. package/build/gallery/use-image-sizes.js +4 -8
  51. package/build/gallery/use-image-sizes.js.map +1 -1
  52. package/build/gallery/v1/edit.js +8 -3
  53. package/build/gallery/v1/edit.js.map +1 -1
  54. package/build/gallery/v1/gallery-image.js +1 -3
  55. package/build/gallery/v1/gallery-image.js.map +1 -1
  56. package/build/gallery/v1/shared.js +4 -7
  57. package/build/gallery/v1/shared.js.map +1 -1
  58. package/build/image/edit.js +6 -4
  59. package/build/image/edit.js.map +1 -1
  60. package/build/image/image.js +6 -2
  61. package/build/image/image.js.map +1 -1
  62. package/build/image/utils.js +3 -1
  63. package/build/image/utils.js.map +1 -1
  64. package/build/index.js +3 -1
  65. package/build/index.js.map +1 -1
  66. package/build/latest-comments/edit.js +3 -0
  67. package/build/latest-comments/edit.js.map +1 -1
  68. package/build/latest-posts/edit.js +14 -10
  69. package/build/latest-posts/edit.js.map +1 -1
  70. package/build/latest-posts/edit.native.js +3 -3
  71. package/build/latest-posts/edit.native.js.map +1 -1
  72. package/build/list/ordered-list-settings.js +1 -0
  73. package/build/list/ordered-list-settings.js.map +1 -1
  74. package/build/list-item/edit.js +2 -2
  75. package/build/list-item/edit.js.map +1 -1
  76. package/build/list-item/hooks/use-outdent-list-item.js +2 -1
  77. package/build/list-item/hooks/use-outdent-list-item.js.map +1 -1
  78. package/build/loginout/edit.js +2 -0
  79. package/build/loginout/edit.js.map +1 -1
  80. package/build/media-text/constants.js +17 -1
  81. package/build/media-text/constants.js.map +1 -1
  82. package/build/media-text/edit.js +9 -19
  83. package/build/media-text/edit.js.map +1 -1
  84. package/build/media-text/edit.native.js +6 -5
  85. package/build/media-text/edit.native.js.map +1 -1
  86. package/build/media-text/transforms.js +32 -44
  87. package/build/media-text/transforms.js.map +1 -1
  88. package/build/more/edit.js +1 -0
  89. package/build/more/edit.js.map +1 -1
  90. package/build/navigation/edit/index.js +64 -68
  91. package/build/navigation/edit/index.js.map +1 -1
  92. package/build/navigation/edit/inner-blocks.js +4 -1
  93. package/build/navigation/edit/inner-blocks.js.map +1 -1
  94. package/build/navigation/edit/menu-inspector-controls.js +2 -5
  95. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  96. package/build/navigation/edit/navigation-menu-selector.js +26 -22
  97. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  98. package/build/navigation/edit/overlay-menu-preview.js +1 -0
  99. package/build/navigation/edit/overlay-menu-preview.js.map +1 -1
  100. package/build/navigation/edit/placeholder/index.js +1 -1
  101. package/build/navigation/edit/placeholder/index.js.map +1 -1
  102. package/build/navigation/edit/unsaved-inner-blocks.js +14 -1
  103. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  104. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +3 -5
  105. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  106. package/build/navigation/edit/use-create-navigation-menu.js +1 -1
  107. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  108. package/build/navigation/edit/use-generate-default-navigation-title.js +1 -1
  109. package/build/navigation/edit/use-generate-default-navigation-title.js.map +1 -1
  110. package/build/navigation/edit/use-navigation-notice.js +4 -7
  111. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  112. package/build/navigation-link/edit.js +0 -11
  113. package/build/navigation-link/edit.js.map +1 -1
  114. package/build/navigation-submenu/edit.js +1 -13
  115. package/build/navigation-submenu/edit.js.map +1 -1
  116. package/build/page-list/convert-to-links-modal.js +47 -0
  117. package/build/page-list/convert-to-links-modal.js.map +1 -0
  118. package/build/page-list/edit.js +62 -62
  119. package/build/page-list/edit.js.map +1 -1
  120. package/build/page-list-item/edit.js +3 -2
  121. package/build/page-list-item/edit.js.map +1 -1
  122. package/build/paragraph/edit.js +1 -0
  123. package/build/paragraph/edit.js.map +1 -1
  124. package/build/post-author/edit.js +4 -0
  125. package/build/post-author/edit.js.map +1 -1
  126. package/build/post-author-name/edit.js +2 -0
  127. package/build/post-author-name/edit.js.map +1 -1
  128. package/build/post-content/edit.js +6 -1
  129. package/build/post-content/edit.js.map +1 -1
  130. package/build/post-date/edit.js +2 -0
  131. package/build/post-date/edit.js.map +1 -1
  132. package/build/post-excerpt/edit.js +1 -0
  133. package/build/post-excerpt/edit.js.map +1 -1
  134. package/build/post-featured-image/dimension-controls.js +0 -6
  135. package/build/post-featured-image/dimension-controls.js.map +1 -1
  136. package/build/post-featured-image/edit.js +3 -1
  137. package/build/post-featured-image/edit.js.map +1 -1
  138. package/build/post-navigation-link/edit.js +2 -0
  139. package/build/post-navigation-link/edit.js.map +1 -1
  140. package/build/post-terms/use-post-terms.js +1 -1
  141. package/build/post-terms/use-post-terms.js.map +1 -1
  142. package/build/post-time-to-read/edit.js +104 -0
  143. package/build/post-time-to-read/edit.js.map +1 -0
  144. package/build/post-time-to-read/icon.js +25 -0
  145. package/build/post-time-to-read/icon.js.map +1 -0
  146. package/build/post-time-to-read/index.js +57 -0
  147. package/build/post-time-to-read/index.js.map +1 -0
  148. package/build/post-title/edit.js +2 -0
  149. package/build/post-title/edit.js.map +1 -1
  150. package/build/pullquote/deprecated.js +3 -3
  151. package/build/pullquote/deprecated.js.map +1 -1
  152. package/build/query/edit/inspector-controls/index.js +1 -0
  153. package/build/query/edit/inspector-controls/index.js.map +1 -1
  154. package/build/query/edit/query-placeholder.js +3 -2
  155. package/build/query/edit/query-placeholder.js.map +1 -1
  156. package/build/query/utils.js +26 -9
  157. package/build/query/utils.js.map +1 -1
  158. package/build/query-title/edit.js +2 -0
  159. package/build/query-title/edit.js.map +1 -1
  160. package/build/read-more/edit.js +1 -0
  161. package/build/read-more/edit.js.map +1 -1
  162. package/build/rss/edit.js +3 -0
  163. package/build/rss/edit.js.map +1 -1
  164. package/build/site-logo/edit.js +3 -0
  165. package/build/site-logo/edit.js.map +1 -1
  166. package/build/site-tagline/index.js +1 -0
  167. package/build/site-tagline/index.js.map +1 -1
  168. package/build/site-title/edit/index.js +2 -0
  169. package/build/site-title/edit/index.js.map +1 -1
  170. package/build/social-links/edit.js +4 -1
  171. package/build/social-links/edit.js.map +1 -1
  172. package/build/spacer/controls.native.js +10 -8
  173. package/build/spacer/controls.native.js.map +1 -1
  174. package/build/spacer/edit.native.js +43 -5
  175. package/build/spacer/edit.native.js.map +1 -1
  176. package/build/spacer/save.native.js +30 -0
  177. package/build/spacer/save.native.js.map +1 -0
  178. package/build/table/edit.js +3 -0
  179. package/build/table/edit.js.map +1 -1
  180. package/build/table/state.js +12 -4
  181. package/build/table/state.js.map +1 -1
  182. package/build/table-of-contents/edit.js +1 -0
  183. package/build/table-of-contents/edit.js.map +1 -1
  184. package/build/tag-cloud/edit.js +1 -0
  185. package/build/tag-cloud/edit.js.map +1 -1
  186. package/build/template-part/edit/import-controls.js +33 -30
  187. package/build/template-part/edit/import-controls.js.map +1 -1
  188. package/build/template-part/edit/utils/transformers.js +69 -19
  189. package/build/template-part/edit/utils/transformers.js.map +1 -1
  190. package/build/text-columns/edit.js +3 -7
  191. package/build/text-columns/edit.js.map +1 -1
  192. package/build/text-columns/save.js +11 -13
  193. package/build/text-columns/save.js.map +1 -1
  194. package/build/video/edit-common-settings.js +5 -0
  195. package/build/video/edit-common-settings.js.map +1 -1
  196. package/build-module/archives/edit.js +3 -0
  197. package/build-module/archives/edit.js.map +1 -1
  198. package/build-module/audio/edit.js +2 -0
  199. package/build-module/audio/edit.js.map +1 -1
  200. package/build-module/avatar/edit.js +5 -8
  201. package/build-module/avatar/edit.js.map +1 -1
  202. package/build-module/buttons/edit.native.js +1 -1
  203. package/build-module/buttons/edit.native.js.map +1 -1
  204. package/build-module/categories/edit.js +5 -0
  205. package/build-module/categories/edit.js.map +1 -1
  206. package/build-module/columns/edit.js +11 -7
  207. package/build-module/columns/edit.js.map +1 -1
  208. package/build-module/columns/edit.native.js +1 -1
  209. package/build-module/columns/edit.native.js.map +1 -1
  210. package/build-module/columns/utils.js +3 -3
  211. package/build-module/columns/utils.js.map +1 -1
  212. package/build-module/comment-author-name/edit.js +2 -0
  213. package/build-module/comment-author-name/edit.js.map +1 -1
  214. package/build-module/comment-date/edit.js +1 -0
  215. package/build-module/comment-date/edit.js.map +1 -1
  216. package/build-module/comment-edit-link/edit.js +1 -0
  217. package/build-module/comment-edit-link/edit.js.map +1 -1
  218. package/build-module/comments/edit/placeholder.js +9 -5
  219. package/build-module/comments/edit/placeholder.js.map +1 -1
  220. package/build-module/comments-title/edit.js +2 -0
  221. package/build-module/comments-title/edit.js.map +1 -1
  222. package/build-module/cover/edit/inspector-controls.js +2 -0
  223. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  224. package/build-module/cover/index.js +12 -4
  225. package/build-module/cover/index.js.map +1 -1
  226. package/build-module/cover/variations.js +19 -0
  227. package/build-module/cover/variations.js.map +1 -0
  228. package/build-module/embed/edit.js +14 -15
  229. package/build-module/embed/edit.js.map +1 -1
  230. package/build-module/embed/edit.native.js +19 -15
  231. package/build-module/embed/edit.native.js.map +1 -1
  232. package/build-module/embed/embed-controls.js +1 -0
  233. package/build-module/embed/embed-controls.js.map +1 -1
  234. package/build-module/embed/util.js +34 -10
  235. package/build-module/embed/util.js.map +1 -1
  236. package/build-module/file/inspector.js +3 -0
  237. package/build-module/file/inspector.js.map +1 -1
  238. package/build-module/freeform/modal.js +1 -1
  239. package/build-module/freeform/modal.js.map +1 -1
  240. package/build-module/gallery/edit.js +3 -0
  241. package/build-module/gallery/edit.js.map +1 -1
  242. package/build-module/gallery/shared.js +4 -7
  243. package/build-module/gallery/shared.js.map +1 -1
  244. package/build-module/gallery/use-image-sizes.js +4 -7
  245. package/build-module/gallery/use-image-sizes.js.map +1 -1
  246. package/build-module/gallery/v1/edit.js +9 -4
  247. package/build-module/gallery/v1/edit.js.map +1 -1
  248. package/build-module/gallery/v1/gallery-image.js +1 -2
  249. package/build-module/gallery/v1/gallery-image.js.map +1 -1
  250. package/build-module/gallery/v1/shared.js +4 -6
  251. package/build-module/gallery/v1/shared.js.map +1 -1
  252. package/build-module/image/edit.js +7 -5
  253. package/build-module/image/edit.js.map +1 -1
  254. package/build-module/image/image.js +7 -3
  255. package/build-module/image/image.js.map +1 -1
  256. package/build-module/image/utils.js +4 -2
  257. package/build-module/image/utils.js.map +1 -1
  258. package/build-module/index.js +2 -1
  259. package/build-module/index.js.map +1 -1
  260. package/build-module/latest-comments/edit.js +3 -0
  261. package/build-module/latest-comments/edit.js.map +1 -1
  262. package/build-module/latest-posts/edit.js +14 -9
  263. package/build-module/latest-posts/edit.js.map +1 -1
  264. package/build-module/latest-posts/edit.native.js +3 -3
  265. package/build-module/latest-posts/edit.native.js.map +1 -1
  266. package/build-module/list/ordered-list-settings.js +1 -0
  267. package/build-module/list/ordered-list-settings.js.map +1 -1
  268. package/build-module/list-item/edit.js +2 -2
  269. package/build-module/list-item/edit.js.map +1 -1
  270. package/build-module/list-item/hooks/use-outdent-list-item.js +2 -1
  271. package/build-module/list-item/hooks/use-outdent-list-item.js.map +1 -1
  272. package/build-module/loginout/edit.js +2 -0
  273. package/build-module/loginout/edit.js.map +1 -1
  274. package/build-module/media-text/constants.js +10 -0
  275. package/build-module/media-text/constants.js.map +1 -1
  276. package/build-module/media-text/edit.js +4 -14
  277. package/build-module/media-text/edit.js.map +1 -1
  278. package/build-module/media-text/edit.native.js +4 -3
  279. package/build-module/media-text/edit.native.js.map +1 -1
  280. package/build-module/media-text/transforms.js +32 -44
  281. package/build-module/media-text/transforms.js.map +1 -1
  282. package/build-module/more/edit.js +1 -0
  283. package/build-module/more/edit.js.map +1 -1
  284. package/build-module/navigation/edit/index.js +65 -69
  285. package/build-module/navigation/edit/index.js.map +1 -1
  286. package/build-module/navigation/edit/inner-blocks.js +4 -1
  287. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  288. package/build-module/navigation/edit/menu-inspector-controls.js +2 -5
  289. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  290. package/build-module/navigation/edit/navigation-menu-selector.js +25 -22
  291. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  292. package/build-module/navigation/edit/overlay-menu-preview.js +1 -0
  293. package/build-module/navigation/edit/overlay-menu-preview.js.map +1 -1
  294. package/build-module/navigation/edit/placeholder/index.js +1 -1
  295. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  296. package/build-module/navigation/edit/unsaved-inner-blocks.js +14 -1
  297. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  298. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +3 -5
  299. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  300. package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
  301. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  302. package/build-module/navigation/edit/use-generate-default-navigation-title.js +1 -1
  303. package/build-module/navigation/edit/use-generate-default-navigation-title.js.map +1 -1
  304. package/build-module/navigation/edit/use-navigation-notice.js +5 -8
  305. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  306. package/build-module/navigation-link/edit.js +0 -11
  307. package/build-module/navigation-link/edit.js.map +1 -1
  308. package/build-module/navigation-submenu/edit.js +1 -13
  309. package/build-module/navigation-submenu/edit.js.map +1 -1
  310. package/build-module/page-list/convert-to-links-modal.js +35 -0
  311. package/build-module/page-list/convert-to-links-modal.js.map +1 -0
  312. package/build-module/page-list/edit.js +64 -65
  313. package/build-module/page-list/edit.js.map +1 -1
  314. package/build-module/page-list-item/edit.js +3 -2
  315. package/build-module/page-list-item/edit.js.map +1 -1
  316. package/build-module/paragraph/edit.js +1 -0
  317. package/build-module/paragraph/edit.js.map +1 -1
  318. package/build-module/post-author/edit.js +4 -0
  319. package/build-module/post-author/edit.js.map +1 -1
  320. package/build-module/post-author-name/edit.js +2 -0
  321. package/build-module/post-author-name/edit.js.map +1 -1
  322. package/build-module/post-content/edit.js +6 -1
  323. package/build-module/post-content/edit.js.map +1 -1
  324. package/build-module/post-date/edit.js +2 -0
  325. package/build-module/post-date/edit.js.map +1 -1
  326. package/build-module/post-excerpt/edit.js +1 -0
  327. package/build-module/post-excerpt/edit.js.map +1 -1
  328. package/build-module/post-featured-image/dimension-controls.js +0 -6
  329. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  330. package/build-module/post-featured-image/edit.js +3 -1
  331. package/build-module/post-featured-image/edit.js.map +1 -1
  332. package/build-module/post-navigation-link/edit.js +2 -0
  333. package/build-module/post-navigation-link/edit.js.map +1 -1
  334. package/build-module/post-terms/use-post-terms.js +1 -1
  335. package/build-module/post-terms/use-post-terms.js.map +1 -1
  336. package/build-module/post-time-to-read/edit.js +90 -0
  337. package/build-module/post-time-to-read/edit.js.map +1 -0
  338. package/build-module/post-time-to-read/icon.js +15 -0
  339. package/build-module/post-time-to-read/icon.js.map +1 -0
  340. package/build-module/post-time-to-read/index.js +40 -0
  341. package/build-module/post-time-to-read/index.js.map +1 -0
  342. package/build-module/post-title/edit.js +2 -0
  343. package/build-module/post-title/edit.js.map +1 -1
  344. package/build-module/pullquote/deprecated.js +3 -2
  345. package/build-module/pullquote/deprecated.js.map +1 -1
  346. package/build-module/query/edit/inspector-controls/index.js +1 -0
  347. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  348. package/build-module/query/edit/query-placeholder.js +4 -3
  349. package/build-module/query/edit/query-placeholder.js.map +1 -1
  350. package/build-module/query/utils.js +21 -6
  351. package/build-module/query/utils.js.map +1 -1
  352. package/build-module/query-title/edit.js +2 -0
  353. package/build-module/query-title/edit.js.map +1 -1
  354. package/build-module/read-more/edit.js +1 -0
  355. package/build-module/read-more/edit.js.map +1 -1
  356. package/build-module/rss/edit.js +3 -0
  357. package/build-module/rss/edit.js.map +1 -1
  358. package/build-module/site-logo/edit.js +3 -0
  359. package/build-module/site-logo/edit.js.map +1 -1
  360. package/build-module/site-tagline/index.js +1 -0
  361. package/build-module/site-tagline/index.js.map +1 -1
  362. package/build-module/site-title/edit/index.js +2 -0
  363. package/build-module/site-title/edit/index.js.map +1 -1
  364. package/build-module/social-links/edit.js +4 -1
  365. package/build-module/social-links/edit.js.map +1 -1
  366. package/build-module/spacer/controls.native.js +9 -8
  367. package/build-module/spacer/controls.native.js.map +1 -1
  368. package/build-module/spacer/edit.native.js +39 -7
  369. package/build-module/spacer/edit.native.js.map +1 -1
  370. package/build-module/spacer/save.native.js +22 -0
  371. package/build-module/spacer/save.native.js.map +1 -0
  372. package/build-module/table/edit.js +3 -0
  373. package/build-module/table/edit.js.map +1 -1
  374. package/build-module/table/state.js +13 -5
  375. package/build-module/table/state.js.map +1 -1
  376. package/build-module/table-of-contents/edit.js +1 -0
  377. package/build-module/table-of-contents/edit.js.map +1 -1
  378. package/build-module/tag-cloud/edit.js +1 -0
  379. package/build-module/tag-cloud/edit.js.map +1 -1
  380. package/build-module/template-part/edit/import-controls.js +32 -29
  381. package/build-module/template-part/edit/import-controls.js.map +1 -1
  382. package/build-module/template-part/edit/utils/transformers.js +69 -20
  383. package/build-module/template-part/edit/utils/transformers.js.map +1 -1
  384. package/build-module/text-columns/edit.js +3 -6
  385. package/build-module/text-columns/edit.js.map +1 -1
  386. package/build-module/text-columns/save.js +11 -12
  387. package/build-module/text-columns/save.js.map +1 -1
  388. package/build-module/video/edit-common-settings.js +5 -0
  389. package/build-module/video/edit-common-settings.js.map +1 -1
  390. package/build-style/cover/style-rtl.css +11 -5
  391. package/build-style/cover/style.css +11 -5
  392. package/build-style/editor-rtl.css +9 -4
  393. package/build-style/editor.css +9 -4
  394. package/build-style/navigation/editor-rtl.css +1 -1
  395. package/build-style/navigation/editor.css +1 -1
  396. package/build-style/page-list/editor-rtl.css +4 -0
  397. package/build-style/page-list/editor.css +4 -0
  398. package/build-style/post-excerpt/editor-rtl.css +1 -1
  399. package/build-style/post-excerpt/editor.css +1 -1
  400. package/build-style/post-featured-image/style-rtl.css +1 -0
  401. package/build-style/post-featured-image/style.css +1 -0
  402. package/build-style/query/editor-rtl.css +1 -0
  403. package/build-style/query/editor.css +1 -0
  404. package/build-style/site-logo/editor-rtl.css +2 -2
  405. package/build-style/site-logo/editor.css +2 -2
  406. package/build-style/style-rtl.css +12 -5
  407. package/build-style/style.css +12 -5
  408. package/package.json +31 -30
  409. package/src/archives/edit.js +3 -0
  410. package/src/audio/edit.js +2 -0
  411. package/src/audio/test/__snapshots__/edit.native.js.snap +82 -42
  412. package/src/audio/test/__snapshots__/transforms.native.js.snap +25 -0
  413. package/src/audio/test/transforms.native.js +42 -0
  414. package/src/avatar/edit.js +2 -4
  415. package/src/block/test/__snapshots__/transforms.native.js.snap +15 -0
  416. package/src/block/test/transforms.native.js +40 -0
  417. package/src/buttons/edit.native.js +1 -1
  418. package/src/buttons/test/__snapshots__/edit.native.js.snap +11 -11
  419. package/src/buttons/test/__snapshots__/transforms.native.js.snap +31 -0
  420. package/src/buttons/test/transforms.native.js +48 -0
  421. package/src/categories/edit.js +5 -0
  422. package/src/code/test/__snapshots__/edit.native.js.snap +2 -2
  423. package/src/columns/edit.js +29 -17
  424. package/src/columns/edit.native.js +1 -1
  425. package/src/columns/test/__snapshots__/edit.native.js.snap +66 -66
  426. package/src/columns/test/__snapshots__/transforms.native.js.snap +61 -0
  427. package/src/columns/test/transforms.native.js +91 -0
  428. package/src/columns/test/utils.js +54 -0
  429. package/src/columns/utils.js +8 -8
  430. package/src/comment-author-name/edit.js +2 -0
  431. package/src/comment-date/edit.js +1 -0
  432. package/src/comment-edit-link/edit.js +1 -0
  433. package/src/comment-template/index.php +1 -2
  434. package/src/comments/edit/placeholder.js +16 -4
  435. package/src/comments-title/edit.js +2 -0
  436. package/src/cover/block.json +9 -3
  437. package/src/cover/edit/inspector-controls.js +2 -0
  438. package/src/cover/index.js +2 -0
  439. package/src/cover/index.php +4 -6
  440. package/src/cover/style.scss +16 -7
  441. package/src/cover/test/__snapshots__/edit.native.js.snap +36 -36
  442. package/src/cover/test/__snapshots__/transforms.native.js.snap +73 -0
  443. package/src/cover/test/transforms.native.js +112 -0
  444. package/src/cover/variations.js +20 -0
  445. package/src/embed/edit.js +16 -12
  446. package/src/embed/edit.native.js +28 -18
  447. package/src/embed/embed-controls.js +1 -0
  448. package/src/embed/test/__snapshots__/index.native.js.snap +52 -52
  449. package/src/embed/test/__snapshots__/transforms.native.js.snap +23 -0
  450. package/src/embed/test/index.js +12 -0
  451. package/src/embed/test/transforms.native.js +44 -0
  452. package/src/embed/util.js +29 -8
  453. package/src/file/inspector.js +3 -0
  454. package/src/file/test/__snapshots__/edit.native.js.snap +67 -51
  455. package/src/file/test/__snapshots__/transforms.native.js.snap +19 -0
  456. package/src/file/test/transforms.native.js +42 -0
  457. package/src/freeform/modal.js +1 -1
  458. package/src/freeform/test/__snapshots__/transforms.native.js.snap +19 -0
  459. package/src/freeform/test/transforms.native.js +39 -0
  460. package/src/gallery/edit.js +5 -0
  461. package/src/gallery/shared.js +6 -11
  462. package/src/gallery/test/__snapshots__/index.native.js.snap +71 -71
  463. package/src/gallery/test/__snapshots__/transforms.native.js.snap +53 -0
  464. package/src/gallery/test/transforms.native.js +52 -0
  465. package/src/gallery/use-image-sizes.js +3 -16
  466. package/src/gallery/v1/edit.js +8 -16
  467. package/src/gallery/v1/gallery-image.js +1 -2
  468. package/src/gallery/v1/shared.js +5 -10
  469. package/src/group/test/__snapshots__/edit.native.js.snap +5 -5
  470. package/src/group/test/__snapshots__/transforms.native.js.snap +35 -0
  471. package/src/group/test/transforms.native.js +75 -0
  472. package/src/heading/test/__snapshots__/index.native.js.snap +1 -1
  473. package/src/heading/test/__snapshots__/transforms.native.js.snap +47 -0
  474. package/src/heading/test/transforms.native.js +46 -0
  475. package/src/image/edit.js +4 -4
  476. package/src/image/image.js +4 -9
  477. package/src/image/index.php +4 -4
  478. package/src/image/test/__snapshots__/transforms.native.js.snap +49 -0
  479. package/src/image/test/transforms.native.js +48 -0
  480. package/src/image/utils.js +2 -2
  481. package/src/index.js +2 -0
  482. package/src/latest-comments/edit.js +3 -0
  483. package/src/latest-posts/edit.js +15 -16
  484. package/src/latest-posts/edit.native.js +3 -3
  485. package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +15 -0
  486. package/src/latest-posts/test/transforms.native.js +61 -0
  487. package/src/list/ordered-list-settings.js +1 -0
  488. package/src/list/test/__snapshots__/edit.native.js.snap +4 -4
  489. package/src/list/test/__snapshots__/transforms.native.js.snap +85 -0
  490. package/src/list/test/transforms.native.js +56 -0
  491. package/src/list-item/edit.js +10 -3
  492. package/src/list-item/hooks/use-outdent-list-item.js +2 -1
  493. package/src/loginout/edit.js +2 -0
  494. package/src/media-text/constants.js +16 -0
  495. package/src/media-text/edit.js +10 -18
  496. package/src/media-text/edit.native.js +3 -9
  497. package/src/media-text/test/__snapshots__/transforms.native.js.snap +73 -0
  498. package/src/media-text/test/transforms.native.js +112 -0
  499. package/src/media-text/transforms.js +24 -51
  500. package/src/missing/test/__snapshots__/edit.native.js.snap +21 -3
  501. package/src/more/edit.js +1 -0
  502. package/src/more/test/__snapshots__/transforms.native.js.snap +19 -0
  503. package/src/more/test/transforms.native.js +42 -0
  504. package/src/navigation/edit/index.js +121 -76
  505. package/src/navigation/edit/inner-blocks.js +3 -0
  506. package/src/navigation/edit/menu-inspector-controls.js +2 -7
  507. package/src/navigation/edit/navigation-menu-selector.js +41 -25
  508. package/src/navigation/edit/overlay-menu-preview.js +1 -0
  509. package/src/navigation/edit/placeholder/index.js +1 -1
  510. package/src/navigation/edit/unsaved-inner-blocks.js +46 -32
  511. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +124 -122
  512. package/src/navigation/edit/use-create-navigation-menu.js +1 -1
  513. package/src/navigation/edit/use-generate-default-navigation-title.js +1 -1
  514. package/src/navigation/edit/use-navigation-notice.js +16 -13
  515. package/src/navigation/editor.scss +23 -20
  516. package/src/navigation/index.php +5 -3
  517. package/src/navigation-link/edit.js +0 -9
  518. package/src/navigation-link/index.php +5 -8
  519. package/src/navigation-link/test/__snapshots__/hooks.js.snap +12 -12
  520. package/src/navigation-submenu/edit.js +0 -10
  521. package/src/navigation-submenu/index.php +23 -6
  522. package/src/nextpage/test/__snapshots__/transforms.native.js.snap +19 -0
  523. package/src/nextpage/test/transforms.native.js +42 -0
  524. package/src/page-list/convert-to-links-modal.js +38 -0
  525. package/src/page-list/edit.js +82 -69
  526. package/src/page-list/editor.scss +6 -0
  527. package/src/page-list-item/edit.js +2 -3
  528. package/src/paragraph/edit.js +1 -0
  529. package/src/paragraph/test/__snapshots__/transforms.native.js.snap +59 -0
  530. package/src/paragraph/test/transforms.native.js +50 -0
  531. package/src/post-author/edit.js +4 -0
  532. package/src/post-author-name/edit.js +2 -0
  533. package/src/post-content/edit.js +5 -1
  534. package/src/post-date/edit.js +2 -0
  535. package/src/post-excerpt/edit.js +1 -0
  536. package/src/post-excerpt/editor.scss +1 -1
  537. package/src/post-excerpt/index.php +1 -2
  538. package/src/post-featured-image/dimension-controls.js +0 -8
  539. package/src/post-featured-image/edit.js +3 -1
  540. package/src/post-featured-image/style.scss +1 -0
  541. package/src/post-navigation-link/edit.js +2 -0
  542. package/src/post-terms/index.php +1 -0
  543. package/src/post-terms/use-post-terms.js +1 -1
  544. package/src/post-time-to-read/block.json +20 -0
  545. package/src/post-time-to-read/edit.js +101 -0
  546. package/src/post-time-to-read/icon.js +15 -0
  547. package/src/post-time-to-read/index.js +17 -0
  548. package/src/post-time-to-read/index.php +62 -0
  549. package/src/post-title/edit.js +2 -0
  550. package/src/preformatted/test/__snapshots__/edit.native.js.snap +10 -10
  551. package/src/preformatted/test/__snapshots__/transforms.native.js.snap +31 -0
  552. package/src/preformatted/test/transforms.native.js +42 -0
  553. package/src/pullquote/deprecated.js +2 -6
  554. package/src/pullquote/test/__snapshots__/transforms.native.js.snap +47 -0
  555. package/src/pullquote/test/transforms.native.js +46 -0
  556. package/src/query/edit/inspector-controls/index.js +1 -0
  557. package/src/query/edit/query-placeholder.js +10 -5
  558. package/src/query/editor.scss +1 -0
  559. package/src/query/test/utils.js +33 -1
  560. package/src/query/utils.js +19 -6
  561. package/src/query-title/edit.js +2 -0
  562. package/src/quote/test/__snapshots__/transforms.native.js.snap +39 -0
  563. package/src/quote/test/transforms.native.js +67 -0
  564. package/src/read-more/edit.js +1 -0
  565. package/src/rss/edit.js +3 -0
  566. package/src/search/test/__snapshots__/edit.native.js.snap +71 -61
  567. package/src/search/test/__snapshots__/transforms.native.js.snap +15 -0
  568. package/src/search/test/transforms.native.js +40 -0
  569. package/src/separator/test/__snapshots__/edit.native.js.snap +1 -1
  570. package/src/separator/test/__snapshots__/transforms.native.js.snap +19 -0
  571. package/src/separator/test/transforms.native.js +42 -0
  572. package/src/shortcode/test/__snapshots__/transforms.native.js.snap +19 -0
  573. package/src/shortcode/test/transforms.native.js +42 -0
  574. package/src/site-logo/edit.js +3 -0
  575. package/src/site-logo/editor.scss +3 -3
  576. package/src/site-logo/index.php +7 -2
  577. package/src/site-tagline/block.json +1 -0
  578. package/src/site-title/edit/index.js +2 -0
  579. package/src/social-link/index.php +6 -6
  580. package/src/social-links/edit.js +3 -0
  581. package/src/social-links/test/__snapshots__/edit.native.js.snap +16 -16
  582. package/src/social-links/test/__snapshots__/transforms.native.js.snap +31 -0
  583. package/src/social-links/test/transforms.native.js +53 -0
  584. package/src/spacer/controls.native.js +13 -5
  585. package/src/spacer/edit.native.js +45 -6
  586. package/src/spacer/save.native.js +18 -0
  587. package/src/spacer/test/__snapshots__/index.native.js.snap +21 -9
  588. package/src/spacer/test/__snapshots__/transforms.native.js.snap +19 -0
  589. package/src/spacer/test/index.native.js +81 -0
  590. package/src/spacer/test/transforms.native.js +42 -0
  591. package/src/table/edit.js +3 -0
  592. package/src/table/state.js +8 -17
  593. package/src/table-of-contents/edit.js +1 -0
  594. package/src/tag-cloud/edit.js +1 -0
  595. package/src/template-part/edit/import-controls.js +26 -34
  596. package/src/template-part/edit/utils/transformers.js +96 -19
  597. package/src/template-part/index.php +7 -6
  598. package/src/text-columns/edit.js +1 -6
  599. package/src/text-columns/save.js +1 -6
  600. package/src/verse/test/__snapshots__/edit.native.js.snap +2 -2
  601. package/src/verse/test/__snapshots__/transforms.native.js.snap +25 -0
  602. package/src/verse/test/transforms.native.js +42 -0
  603. package/src/video/edit-common-settings.js +5 -0
  604. package/src/video/test/__snapshots__/transforms.native.js.snap +41 -0
  605. package/src/video/test/transforms.native.js +48 -0
  606. package/tsconfig.json +2 -1
  607. package/tsconfig.tsbuildinfo +1 -1
@@ -7,11 +7,11 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import {
10
+ useCallback,
10
11
  useState,
11
12
  useEffect,
12
13
  useRef,
13
14
  Platform,
14
- useMemo,
15
15
  } from '@wordpress/element';
16
16
  import {
17
17
  InspectorControls,
@@ -106,16 +106,20 @@ function Navigation( {
106
106
 
107
107
  const ref = attributes.ref;
108
108
 
109
- const setRef = ( postId ) => {
110
- setAttributes( { ref: postId } );
111
- };
109
+ const setRef = useCallback(
110
+ ( postId ) => {
111
+ setAttributes( { ref: postId } );
112
+ },
113
+ [ setAttributes ]
114
+ );
112
115
 
113
116
  const recursionId = `navigationMenu/${ ref }`;
114
117
  const hasAlreadyRendered = useHasRecursion( recursionId );
115
118
 
116
119
  // Preload classic menus, so that they don't suddenly pop-in when viewing
117
120
  // the Select Menu dropdown.
118
- const { menus: classicMenus } = useNavigationEntities();
121
+ const { menus: classicMenus, hasResolvedMenus: hasResolvedClassicMenus } =
122
+ useNavigationEntities();
119
123
 
120
124
  const [ showNavigationMenuStatusNotice, hideNavigationMenuStatusNotice ] =
121
125
  useNavigationNotice( {
@@ -148,34 +152,6 @@ function Navigation( {
148
152
  createNavigationMenu( '' );
149
153
  };
150
154
 
151
- useEffect( () => {
152
- hideNavigationMenuStatusNotice();
153
-
154
- if ( isCreatingNavigationMenu ) {
155
- speak( __( `Creating Navigation Menu.` ) );
156
- }
157
-
158
- if ( createNavigationMenuIsSuccess ) {
159
- handleUpdateMenu( createNavigationMenuPost.id, {
160
- focusNavigationBlock: true,
161
- } );
162
-
163
- showNavigationMenuStatusNotice(
164
- __( `Navigation Menu successfully created.` )
165
- );
166
- }
167
-
168
- if ( createNavigationMenuIsError ) {
169
- showNavigationMenuStatusNotice(
170
- __( 'Failed to create Navigation Menu.' )
171
- );
172
- }
173
- }, [
174
- createNavigationMenuStatus,
175
- createNavigationMenuError,
176
- createNavigationMenuPost,
177
- ] );
178
-
179
155
  const {
180
156
  hasUncontrolledInnerBlocks,
181
157
  uncontrolledInnerBlocks,
@@ -224,17 +200,21 @@ function Navigation( {
224
200
  const isConvertingClassicMenu =
225
201
  classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING;
226
202
 
227
- // Only autofallback to published menus.
228
- const fallbackNavigationMenus = useMemo(
229
- () =>
230
- navigationMenus
231
- ?.filter( ( menu ) => menu.status === 'publish' )
232
- ?.sort( ( menuA, menuB ) => {
233
- const menuADate = new Date( menuA.date );
234
- const menuBDate = new Date( menuB.date );
235
- return menuADate.getTime() < menuBDate.getTime();
236
- } ),
237
- [ navigationMenus ]
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
+ const handleUpdateMenu = useCallback(
210
+ ( menuId, options = { focusNavigationBlock: false } ) => {
211
+ const { focusNavigationBlock } = options;
212
+ setRef( menuId );
213
+ if ( focusNavigationBlock ) {
214
+ selectBlock( clientId );
215
+ }
216
+ },
217
+ [ selectBlock, clientId, setRef ]
238
218
  );
239
219
 
240
220
  // Attempt to retrieve and prioritize any existing navigation menu unless:
@@ -249,7 +229,7 @@ function Navigation( {
249
229
  hasUncontrolledInnerBlocks ||
250
230
  isCreatingNavigationMenu ||
251
231
  ref ||
252
- ! fallbackNavigationMenus?.length
232
+ ! fallbackNavigationMenuId
253
233
  ) {
254
234
  return;
255
235
  }
@@ -262,19 +242,35 @@ function Navigation( {
262
242
  * nor to be undoable, hence why it is marked as non persistent
263
243
  */
264
244
  __unstableMarkNextChangeAsNotPersistent();
265
- setRef( fallbackNavigationMenus[ 0 ].id );
245
+ setRef( fallbackNavigationMenuId );
266
246
  }, [
267
247
  ref,
248
+ setRef,
268
249
  isCreatingNavigationMenu,
269
- fallbackNavigationMenus,
250
+ fallbackNavigationMenuId,
270
251
  hasUncontrolledInnerBlocks,
252
+ __unstableMarkNextChangeAsNotPersistent,
271
253
  ] );
272
254
 
255
+ const isEntityAvailable =
256
+ ! isNavigationMenuMissing && isNavigationMenuResolved;
257
+
258
+ // If the block has inner blocks, but no menu id, then these blocks are either:
259
+ // - inserted via a pattern.
260
+ // - inserted directly via Code View (or otherwise).
261
+ // - from an older version of navigation block added before the block used a wp_navigation entity.
262
+ // Consider this state as 'unsaved' and offer an uncontrolled version of inner blocks,
263
+ // that automatically saves the menu as an entity when changes are made to the inner blocks.
264
+ const hasUnsavedBlocks = hasUncontrolledInnerBlocks && ! isEntityAvailable;
265
+
273
266
  useEffect( () => {
274
267
  if (
268
+ ref ||
269
+ ! hasResolvedClassicMenus ||
275
270
  ! hasResolvedNavigationMenus ||
276
271
  isConvertingClassicMenu ||
277
- fallbackNavigationMenus?.length > 0 ||
272
+ fallbackNavigationMenuId ||
273
+ hasUnsavedBlocks ||
278
274
  ! classicMenus?.length
279
275
  ) {
280
276
  return;
@@ -306,7 +302,17 @@ function Navigation( {
306
302
  'publish'
307
303
  );
308
304
  }
309
- }, [ hasResolvedNavigationMenus ] );
305
+ }, [
306
+ hasResolvedClassicMenus,
307
+ hasResolvedNavigationMenus,
308
+ hasUnsavedBlocks,
309
+ classicMenus,
310
+ convertClassicMenu,
311
+ createNavigationMenu,
312
+ fallbackNavigationMenuId,
313
+ isConvertingClassicMenu,
314
+ ref,
315
+ ] );
310
316
 
311
317
  const navRef = useRef();
312
318
 
@@ -337,10 +343,13 @@ function Navigation( {
337
343
  __unstableMarkNextChangeAsNotPersistent();
338
344
  replaceInnerBlocks( clientId, [ createBlock( 'core/page-list' ) ] );
339
345
  }
340
- }, [ clientId, isPlaceholder, ref ] );
341
-
342
- const isEntityAvailable =
343
- ! isNavigationMenuMissing && isNavigationMenuResolved;
346
+ }, [
347
+ clientId,
348
+ isPlaceholder,
349
+ ref,
350
+ __unstableMarkNextChangeAsNotPersistent,
351
+ replaceInnerBlocks,
352
+ ] );
344
353
 
345
354
  // "loading" state:
346
355
  // - there is a menu creation process in progress.
@@ -393,17 +402,6 @@ function Navigation( {
393
402
  ] = useState();
394
403
  const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();
395
404
 
396
- const handleUpdateMenu = (
397
- menuId,
398
- options = { focusNavigationBlock: false }
399
- ) => {
400
- const { focusNavigationBlock } = options;
401
- setRef( menuId );
402
- if ( focusNavigationBlock ) {
403
- selectBlock( clientId );
404
- }
405
- };
406
-
407
405
  const onSelectClassicMenu = async ( classicMenu ) => {
408
406
  const navMenu = await convertClassicMenu(
409
407
  classicMenu.id,
@@ -421,6 +419,40 @@ function Navigation( {
421
419
  handleUpdateMenu( menuId );
422
420
  };
423
421
 
422
+ useEffect( () => {
423
+ hideNavigationMenuStatusNotice();
424
+
425
+ if ( isCreatingNavigationMenu ) {
426
+ speak( __( `Creating Navigation Menu.` ) );
427
+ }
428
+
429
+ if ( createNavigationMenuIsSuccess ) {
430
+ handleUpdateMenu( createNavigationMenuPost?.id, {
431
+ focusNavigationBlock: true,
432
+ } );
433
+
434
+ showNavigationMenuStatusNotice(
435
+ __( `Navigation Menu successfully created.` )
436
+ );
437
+ }
438
+
439
+ if ( createNavigationMenuIsError ) {
440
+ showNavigationMenuStatusNotice(
441
+ __( 'Failed to create Navigation Menu.' )
442
+ );
443
+ }
444
+ }, [
445
+ createNavigationMenuStatus,
446
+ createNavigationMenuError,
447
+ createNavigationMenuPost?.id,
448
+ createNavigationMenuIsError,
449
+ createNavigationMenuIsSuccess,
450
+ isCreatingNavigationMenu,
451
+ handleUpdateMenu,
452
+ hideNavigationMenuStatusNotice,
453
+ showNavigationMenuStatusNotice,
454
+ ] );
455
+
424
456
  useEffect( () => {
425
457
  hideClassicMenuConversionNotice();
426
458
  if ( classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING ) {
@@ -438,7 +470,12 @@ function Navigation( {
438
470
  __( 'Classic menu import failed.' )
439
471
  );
440
472
  }
441
- }, [ classicMenuConversionStatus, classicMenuConversionError ] );
473
+ }, [
474
+ classicMenuConversionStatus,
475
+ classicMenuConversionError,
476
+ hideClassicMenuConversionNotice,
477
+ showClassicMenuConversionNotice,
478
+ ] );
442
479
 
443
480
  // Spacer block needs orientation from context. This is a patch until
444
481
  // https://github.com/WordPress/gutenberg/issues/36197 is addressed.
@@ -447,7 +484,11 @@ function Navigation( {
447
484
  __unstableMarkNextChangeAsNotPersistent();
448
485
  setAttributes( { orientation } );
449
486
  }
450
- }, [ orientation ] );
487
+ }, [
488
+ orientation,
489
+ __unstableMarkNextChangeAsNotPersistent,
490
+ setAttributes,
491
+ ] );
451
492
 
452
493
  useEffect( () => {
453
494
  if ( ! enableContrastChecking ) {
@@ -477,7 +518,11 @@ function Navigation( {
477
518
  setDetectedOverlayBackgroundColor
478
519
  );
479
520
  }
480
- } );
521
+ }, [
522
+ enableContrastChecking,
523
+ overlayTextColor.color,
524
+ overlayBackgroundColor.color,
525
+ ] );
481
526
 
482
527
  useEffect( () => {
483
528
  if ( ! isSelected && ! isInnerBlockSelected ) {
@@ -518,6 +563,9 @@ function Navigation( {
518
563
  canUserCreateNavigationMenu,
519
564
  hasResolvedCanUserCreateNavigationMenu,
520
565
  ref,
566
+ hideNavigationMenuPermissionsNotice,
567
+ showNavigationMenuPermissionsNotice,
568
+ navMenuResolvedButMissing,
521
569
  ] );
522
570
 
523
571
  const hasManagePermissions =
@@ -598,6 +646,7 @@ function Navigation( {
598
646
  <>
599
647
  <h3>{ __( 'Submenus' ) }</h3>
600
648
  <ToggleControl
649
+ __nextHasNoMarginBottom
601
650
  checked={ openSubmenusOnClick }
602
651
  onChange={ ( value ) => {
603
652
  setAttributes( {
@@ -611,6 +660,7 @@ function Navigation( {
611
660
  />
612
661
 
613
662
  <ToggleControl
663
+ __nextHasNoMarginBottom
614
664
  checked={ showSubmenuIcon }
615
665
  onChange={ ( value ) => {
616
666
  setAttributes( {
@@ -682,14 +732,6 @@ function Navigation( {
682
732
  </>
683
733
  );
684
734
 
685
- // If the block has inner blocks, but no menu id, then these blocks are either:
686
- // - inserted via a pattern.
687
- // - inserted directly via Code View (or otherwise).
688
- // - from an older version of navigation block added before the block used a wp_navigation entity.
689
- // Consider this state as 'unsaved' and offer an uncontrolled version of inner blocks,
690
- // that automatically saves the menu as an entity when changes are made to the inner blocks.
691
- const hasUnsavedBlocks = hasUncontrolledInnerBlocks && ! isEntityAvailable;
692
-
693
735
  const isManageMenusButtonDisabled =
694
736
  ! hasManagePermissions || ! hasResolvedNavigationMenus;
695
737
 
@@ -743,6 +785,7 @@ function Navigation( {
743
785
  createNavigationMenuIsSuccess
744
786
  }
745
787
  createNavigationMenuIsError={ createNavigationMenuIsError }
788
+ currentMenuId={ ref }
746
789
  isNavigationMenuMissing={ isNavigationMenuMissing }
747
790
  isManageMenusButtonDisabled={ isManageMenusButtonDisabled }
748
791
  onCreateNew={ createUntitledEmptyNavigationMenu }
@@ -850,7 +893,9 @@ function Navigation( {
850
893
 
851
894
  { isLoading && (
852
895
  <TagName { ...blockProps }>
853
- <Spinner className="wp-block-navigation__loading-indicator" />
896
+ <div className="wp-block-navigation__loading-indicator-container">
897
+ <Spinner className="wp-block-navigation__loading-indicator" />
898
+ </div>
854
899
  </TagName>
855
900
  ) }
856
901
 
@@ -29,6 +29,9 @@ const ALLOWED_BLOCKS = [
29
29
 
30
30
  const DEFAULT_BLOCK = {
31
31
  name: 'core/navigation-link',
32
+ attributes: {
33
+ type: 'page',
34
+ },
32
35
  };
33
36
 
34
37
  export default function NavigationInnerBlocks( {
@@ -45,10 +45,6 @@ const MainContent = ( {
45
45
  );
46
46
  const { navigationMenu } = useNavigationMenu( currentMenuId );
47
47
 
48
- if ( currentMenuId && isNavigationMenuMissing ) {
49
- return <p>{ __( 'Select or create a menu' ) }</p>;
50
- }
51
-
52
48
  if ( currentMenuId && isNavigationMenuMissing ) {
53
49
  return <DeletedNavigationWarning onCreateNew={ onCreateNew } />;
54
50
  }
@@ -69,6 +65,7 @@ const MainContent = ( {
69
65
  return (
70
66
  <OffCanvasEditor
71
67
  blocks={ clientIdsTree }
68
+ parentClientId={ clientId }
72
69
  isExpanded={ true }
73
70
  LeafMoreMenu={ LeafMoreMenu }
74
71
  description={ description }
@@ -89,9 +86,7 @@ const MenuInspectorControls = ( props ) => {
89
86
 
90
87
  return (
91
88
  <InspectorControls group="list">
92
- <PanelBody
93
- title={ process.env.IS_GUTENBERG_PLUGIN ? null : __( 'Menu' ) }
94
- >
89
+ <PanelBody title={ null }>
95
90
  <HStack className="wp-block-navigation-off-canvas-editor__header">
96
91
  <Heading
97
92
  className="wp-block-navigation-off-canvas-editor__title"
@@ -11,6 +11,7 @@ import { moreVertical } from '@wordpress/icons';
11
11
  import { __, sprintf } from '@wordpress/i18n';
12
12
  import { decodeEntities } from '@wordpress/html-entities';
13
13
  import { useEffect, useMemo, useState } from '@wordpress/element';
14
+ import { useEntityProp } from '@wordpress/core-data';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -18,6 +19,14 @@ import { useEffect, useMemo, useState } from '@wordpress/element';
18
19
  import useNavigationMenu from '../use-navigation-menu';
19
20
  import useNavigationEntities from '../use-navigation-entities';
20
21
 
22
+ function buildMenuLabel( title, id ) {
23
+ const label =
24
+ decodeEntities( title?.rendered ) ||
25
+ /* translators: %s is the index of the menu in the list of menus. */
26
+ sprintf( __( '(no title %s)' ), id );
27
+ return label;
28
+ }
29
+
21
30
  function NavigationMenuSelector( {
22
31
  currentMenuId,
23
32
  onSelectNavigationMenu,
@@ -30,7 +39,6 @@ function NavigationMenuSelector( {
30
39
  /* translators: %s: The name of a menu. */
31
40
  const createActionLabel = __( "Create from '%s'" );
32
41
 
33
- const [ selectorLabel, setSelectorLabel ] = useState( '' );
34
42
  const [ isCreatingMenu, setIsCreatingMenu ] = useState( false );
35
43
 
36
44
  actionLabel = actionLabel || createActionLabel;
@@ -39,25 +47,23 @@ function NavigationMenuSelector( {
39
47
 
40
48
  const {
41
49
  navigationMenus,
50
+ isResolvingNavigationMenus,
42
51
  hasResolvedNavigationMenus,
43
52
  canUserCreateNavigationMenu,
44
53
  canSwitchNavigationMenu,
45
54
  } = useNavigationMenu();
46
55
 
56
+ const [ currentTitle ] = useEntityProp(
57
+ 'postType',
58
+ 'wp_navigation',
59
+ 'title'
60
+ );
61
+
47
62
  const menuChoices = useMemo( () => {
48
63
  return (
49
64
  navigationMenus?.map( ( { id, title }, index ) => {
50
- const label =
51
- decodeEntities( title?.rendered ) ||
52
- /* translators: %s is the index of the menu in the list of menus. */
53
- sprintf( __( '(no title %s)' ), index + 1 );
54
-
55
- if ( id === currentMenuId && ! isCreatingMenu ) {
56
- setSelectorLabel(
57
- /* translators: %s is the name of a navigation menu. */
58
- sprintf( __( 'You are currently editing %s' ), label )
59
- );
60
- }
65
+ const label = buildMenuLabel( title, index + 1 );
66
+
61
67
  return {
62
68
  value: id,
63
69
  label,
@@ -65,7 +71,7 @@ function NavigationMenuSelector( {
65
71
  };
66
72
  } ) || []
67
73
  );
68
- }, [ currentMenuId, navigationMenus, actionLabel ] );
74
+ }, [ navigationMenus, actionLabel ] );
69
75
 
70
76
  const hasNavigationMenus = !! navigationMenus?.length;
71
77
  const hasClassicMenus = !! classicMenus?.length;
@@ -77,20 +83,35 @@ function NavigationMenuSelector( {
77
83
  const menuUnavailable =
78
84
  hasResolvedNavigationMenus && currentMenuId === null;
79
85
 
80
- useEffect( () => {
81
- if ( ! hasResolvedNavigationMenus && ! canUserCreateNavigationMenu ) {
82
- setSelectorLabel( __( 'Loading …' ) );
83
- } else if ( noMenuSelected || noBlockMenus || menuUnavailable ) {
84
- setSelectorLabel( __( 'Choose or create a Navigation menu' ) );
85
- }
86
+ let selectorLabel = '';
87
+
88
+ if ( isCreatingMenu || isResolvingNavigationMenus ) {
89
+ selectorLabel = __( 'Loading …' );
90
+ } else if ( noMenuSelected || noBlockMenus || menuUnavailable ) {
91
+ // Note: classic Menus may be available.
92
+ selectorLabel = __( 'Choose or create a Navigation menu' );
93
+ } else {
94
+ // Current Menu's title.
95
+ selectorLabel = currentTitle;
96
+ }
86
97
 
98
+ useEffect( () => {
87
99
  if (
88
100
  isCreatingMenu &&
89
101
  ( createNavigationMenuIsSuccess || createNavigationMenuIsError )
90
102
  ) {
91
103
  setIsCreatingMenu( false );
92
104
  }
93
- }, [ hasResolvedNavigationMenus, createNavigationMenuIsSuccess ] );
105
+ }, [
106
+ hasResolvedNavigationMenus,
107
+ createNavigationMenuIsSuccess,
108
+ canUserCreateNavigationMenu,
109
+ createNavigationMenuIsError,
110
+ isCreatingMenu,
111
+ menuUnavailable,
112
+ noBlockMenus,
113
+ noMenuSelected,
114
+ ] );
94
115
 
95
116
  const NavigationMenuSelectorDropdown = (
96
117
  <DropdownMenu
@@ -105,7 +126,6 @@ function NavigationMenuSelector( {
105
126
  <MenuItemsChoice
106
127
  value={ currentMenuId }
107
128
  onSelect={ ( menuId ) => {
108
- setSelectorLabel( __( 'Loading …' ) );
109
129
  setIsCreatingMenu( true );
110
130
  onSelectNavigationMenu( menuId );
111
131
  onClose();
@@ -122,9 +142,6 @@ function NavigationMenuSelector( {
122
142
  return (
123
143
  <MenuItem
124
144
  onClick={ () => {
125
- setSelectorLabel(
126
- __( 'Loading …' )
127
- );
128
145
  setIsCreatingMenu( true );
129
146
  onSelectClassicMenu( menu );
130
147
  onClose();
@@ -151,7 +168,6 @@ function NavigationMenuSelector( {
151
168
  onClose();
152
169
  onCreateNew();
153
170
  setIsCreatingMenu( true );
154
- setSelectorLabel( __( 'Loading …' ) );
155
171
  } }
156
172
  >
157
173
  { __( 'Create new menu' ) }
@@ -17,6 +17,7 @@ export default function OverlayMenuPreview( { setAttributes, hasIcon, icon } ) {
17
17
  return (
18
18
  <>
19
19
  <ToggleControl
20
+ __nextHasNoMarginBottom
20
21
  label={ __( 'Show icon button' ) }
21
22
  help={ __(
22
23
  'Configure the visual appearance of the button opening the overlay menu.'
@@ -38,7 +38,7 @@ export default function NavigationPlaceholder( {
38
38
  if ( hasResolvedMenus ) {
39
39
  speak( __( 'Navigation block setup options ready.' ) );
40
40
  }
41
- }, [ isResolvingMenus, isSelected ] );
41
+ }, [ hasResolvedMenus, isResolvingMenus, isSelected ] );
42
42
 
43
43
  const isResolvingActions =
44
44
  isResolvingMenus && isResolvingCanUserCreateNavigationMenu;
@@ -120,39 +120,53 @@ export default function UnsavedInnerBlocks( {
120
120
  const { hasResolvedNavigationMenus } = useNavigationMenu();
121
121
 
122
122
  // Automatically save the uncontrolled blocks.
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
- }
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
+ }
146
147
 
147
- createNavigationMenu( null, blocks );
148
- }, [
149
- isDisabled,
150
- isSaving,
151
- hasResolvedDraftNavigationMenus,
152
- hasResolvedNavigationMenus,
153
- innerBlocksAreDirty,
154
- hasSelection,
155
- ] );
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
+ );
156
170
 
157
171
  const Wrapper = isSaving ? Disabled : 'div';
158
172