@wordpress/block-library 8.29.0 → 8.31.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 (527) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/audio/edit.js +7 -17
  3. package/build/audio/edit.js.map +1 -1
  4. package/build/audio/edit.native.js.map +1 -1
  5. package/build/avatar/edit.js.map +1 -1
  6. package/build/block/deprecated.js +71 -11
  7. package/build/block/deprecated.js.map +1 -1
  8. package/build/block/edit.js +65 -31
  9. package/build/block/edit.js.map +1 -1
  10. package/build/button/edit.js +2 -2
  11. package/build/button/edit.js.map +1 -1
  12. package/build/buttons/edit.native.js.map +1 -1
  13. package/build/buttons/transforms.js +16 -2
  14. package/build/buttons/transforms.js.map +1 -1
  15. package/build/code/save.js +3 -1
  16. package/build/code/save.js.map +1 -1
  17. package/build/code/transforms.js +17 -6
  18. package/build/code/transforms.js.map +1 -1
  19. package/build/columns/edit.js +3 -2
  20. package/build/columns/edit.js.map +1 -1
  21. package/build/comment-author-avatar/edit.js +1 -1
  22. package/build/comment-author-avatar/edit.js.map +1 -1
  23. package/build/cover/edit/block-controls.js +14 -3
  24. package/build/cover/edit/block-controls.js.map +1 -1
  25. package/build/cover/edit/index.js +2 -1
  26. package/build/cover/edit/index.js.map +1 -1
  27. package/build/cover/edit/inspector-controls.js.map +1 -1
  28. package/build/cover/edit/resizable-cover-popover.js +0 -6
  29. package/build/cover/edit/resizable-cover-popover.js.map +1 -1
  30. package/build/cover/edit.native.js.map +1 -1
  31. package/build/details/edit.js +1 -0
  32. package/build/details/edit.js.map +1 -1
  33. package/build/file/deprecated.js.map +1 -1
  34. package/build/file/edit.js +8 -13
  35. package/build/file/edit.js.map +1 -1
  36. package/build/file/edit.native.js.map +1 -1
  37. package/build/file/save.js.map +1 -1
  38. package/build/form-input/edit.js +1 -1
  39. package/build/form-input/edit.js.map +1 -1
  40. package/build/gallery/edit.js.map +1 -1
  41. package/build/gallery/gallery.native.js.map +1 -1
  42. package/build/gallery/v1/edit.js.map +1 -1
  43. package/build/gallery/v1/gallery.native.js.map +1 -1
  44. package/build/heading/index.js +4 -3
  45. package/build/heading/index.js.map +1 -1
  46. package/build/heading/transforms.js +17 -4
  47. package/build/heading/transforms.js.map +1 -1
  48. package/build/image/edit.js +8 -4
  49. package/build/image/edit.js.map +1 -1
  50. package/build/image/edit.native.js.map +1 -1
  51. package/build/image/image.js +22 -8
  52. package/build/image/image.js.map +1 -1
  53. package/build/latest-posts/edit.native.js.map +1 -1
  54. package/build/list/ordered-list-settings.js +1 -1
  55. package/build/list/ordered-list-settings.js.map +1 -1
  56. package/build/list-item/edit.js +1 -3
  57. package/build/list-item/edit.js.map +1 -1
  58. package/build/list-item/edit.native.js.map +1 -1
  59. package/build/list-item/hooks/index.js +0 -7
  60. package/build/list-item/hooks/index.js.map +1 -1
  61. package/build/list-item/hooks/use-indent-list-item.js +1 -0
  62. package/build/list-item/hooks/use-indent-list-item.js.map +1 -1
  63. package/build/list-item/hooks/use-outdent-list-item.js +1 -0
  64. package/build/list-item/hooks/use-outdent-list-item.js.map +1 -1
  65. package/build/list-item/hooks/use-space.js +16 -7
  66. package/build/list-item/hooks/use-space.js.map +1 -1
  67. package/build/list-item/index.js +4 -1
  68. package/build/list-item/index.js.map +1 -1
  69. package/build/media-text/edit.js +33 -9
  70. package/build/media-text/edit.js.map +1 -1
  71. package/build/media-text/index.js +5 -0
  72. package/build/media-text/index.js.map +1 -1
  73. package/build/media-text/media-container.js +30 -11
  74. package/build/media-text/media-container.js.map +1 -1
  75. package/build/media-text/media-container.native.js +1 -1
  76. package/build/media-text/media-container.native.js.map +1 -1
  77. package/build/media-text/save.js +2 -2
  78. package/build/media-text/save.js.map +1 -1
  79. package/build/navigation/edit/index.js +23 -29
  80. package/build/navigation/edit/index.js.map +1 -1
  81. package/build/navigation/edit/navigation-menu-delete-control.js +12 -20
  82. package/build/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  83. package/build/navigation/edit/navigation-menu-selector.js +24 -23
  84. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  85. package/build/navigation/edit/placeholder/index.js +4 -4
  86. package/build/navigation/edit/placeholder/index.js.map +1 -1
  87. package/build/navigation/use-navigation-menu.js +15 -12
  88. package/build/navigation/use-navigation-menu.js.map +1 -1
  89. package/build/navigation-link/edit.js +12 -10
  90. package/build/navigation-link/edit.js.map +1 -1
  91. package/build/navigation-link/link-ui.js.map +1 -1
  92. package/build/navigation-submenu/edit.js +4 -0
  93. package/build/navigation-submenu/edit.js.map +1 -1
  94. package/build/paragraph/edit.native.js.map +1 -1
  95. package/build/pattern/edit.js +11 -0
  96. package/build/pattern/edit.js.map +1 -1
  97. package/build/post-author/edit.js +1 -0
  98. package/build/post-author/edit.js.map +1 -1
  99. package/build/post-excerpt/edit.js +1 -0
  100. package/build/post-excerpt/edit.js.map +1 -1
  101. package/build/post-featured-image/dimension-controls.js.map +1 -1
  102. package/build/post-featured-image/edit.js +12 -12
  103. package/build/post-featured-image/edit.js.map +1 -1
  104. package/build/post-featured-image/index.js +6 -0
  105. package/build/post-featured-image/index.js.map +1 -1
  106. package/build/post-navigation-link/edit.js +1 -0
  107. package/build/post-navigation-link/edit.js.map +1 -1
  108. package/build/post-terms/edit.js +2 -0
  109. package/build/post-terms/edit.js.map +1 -1
  110. package/build/post-title/edit.js +2 -2
  111. package/build/post-title/edit.js.map +1 -1
  112. package/build/query/edit/pattern-selection-modal.js.map +1 -1
  113. package/build/query/utils.js +7 -5
  114. package/build/query/utils.js.map +1 -1
  115. package/build/query-pagination-next/edit.js.map +1 -1
  116. package/build/query-pagination-previous/edit.js.map +1 -1
  117. package/build/quote/deprecated.js +111 -12
  118. package/build/quote/deprecated.js.map +1 -1
  119. package/build/quote/edit.js +7 -7
  120. package/build/quote/edit.js.map +1 -1
  121. package/build/quote/index.js +1 -1
  122. package/build/quote/index.js.map +1 -1
  123. package/build/quote/save.js +2 -2
  124. package/build/quote/save.js.map +1 -1
  125. package/build/read-more/edit.js +1 -0
  126. package/build/read-more/edit.js.map +1 -1
  127. package/build/search/edit.js +3 -1
  128. package/build/search/edit.js.map +1 -1
  129. package/build/search/edit.native.js +2 -2
  130. package/build/search/edit.native.js.map +1 -1
  131. package/build/site-logo/edit.js +7 -2
  132. package/build/site-logo/edit.js.map +1 -1
  133. package/build/site-title/{edit/index.js → edit.js} +1 -1
  134. package/build/site-title/edit.js.map +1 -0
  135. package/build/social-link/edit.js +1 -1
  136. package/build/social-link/edit.js.map +1 -1
  137. package/build/social-link/icons/medium.js +1 -1
  138. package/build/social-link/icons/medium.js.map +1 -1
  139. package/build/social-link/icons/reddit.js +1 -1
  140. package/build/social-link/icons/reddit.js.map +1 -1
  141. package/build/social-links/edit.native.js.map +1 -1
  142. package/build/spacer/edit.js.map +1 -1
  143. package/build/table/deprecated.js +285 -175
  144. package/build/table/deprecated.js.map +1 -1
  145. package/build/table/index.js +1 -1
  146. package/build/table-of-contents/edit.js.map +1 -1
  147. package/build/template-part/edit/index.js +53 -1
  148. package/build/template-part/edit/index.js.map +1 -1
  149. package/build/template-part/edit/selection-modal.js +2 -8
  150. package/build/template-part/edit/selection-modal.js.map +1 -1
  151. package/build/template-part/edit/utils/map-template-part-to-block-pattern.js +30 -0
  152. package/build/template-part/edit/utils/map-template-part-to-block-pattern.js.map +1 -0
  153. package/build/utils/caption.js +15 -5
  154. package/build/utils/caption.js.map +1 -1
  155. package/build/utils/get-transformed-metadata.js +57 -0
  156. package/build/utils/get-transformed-metadata.js.map +1 -0
  157. package/build/utils/hooks.js +55 -4
  158. package/build/utils/hooks.js.map +1 -1
  159. package/build/video/edit-common-settings.js.map +1 -1
  160. package/build/video/edit.js +7 -16
  161. package/build/video/edit.js.map +1 -1
  162. package/build/video/edit.native.js +3 -8
  163. package/build/video/edit.native.js.map +1 -1
  164. package/build-module/audio/edit.js +10 -20
  165. package/build-module/audio/edit.js.map +1 -1
  166. package/build-module/audio/edit.native.js.map +1 -1
  167. package/build-module/avatar/edit.js.map +1 -1
  168. package/build-module/block/deprecated.js +71 -11
  169. package/build-module/block/deprecated.js.map +1 -1
  170. package/build-module/block/edit.js +66 -32
  171. package/build-module/block/edit.js.map +1 -1
  172. package/build-module/button/edit.js +3 -3
  173. package/build-module/button/edit.js.map +1 -1
  174. package/build-module/buttons/edit.native.js.map +1 -1
  175. package/build-module/buttons/transforms.js +16 -2
  176. package/build-module/buttons/transforms.js.map +1 -1
  177. package/build-module/code/save.js +3 -1
  178. package/build-module/code/save.js.map +1 -1
  179. package/build-module/code/transforms.js +17 -6
  180. package/build-module/code/transforms.js.map +1 -1
  181. package/build-module/columns/edit.js +3 -2
  182. package/build-module/columns/edit.js.map +1 -1
  183. package/build-module/comment-author-avatar/edit.js +1 -1
  184. package/build-module/comment-author-avatar/edit.js.map +1 -1
  185. package/build-module/cover/edit/block-controls.js +15 -4
  186. package/build-module/cover/edit/block-controls.js.map +1 -1
  187. package/build-module/cover/edit/index.js +2 -1
  188. package/build-module/cover/edit/index.js.map +1 -1
  189. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  190. package/build-module/cover/edit/resizable-cover-popover.js +1 -7
  191. package/build-module/cover/edit/resizable-cover-popover.js.map +1 -1
  192. package/build-module/cover/edit.native.js.map +1 -1
  193. package/build-module/details/edit.js +1 -0
  194. package/build-module/details/edit.js.map +1 -1
  195. package/build-module/file/deprecated.js.map +1 -1
  196. package/build-module/file/edit.js +9 -14
  197. package/build-module/file/edit.js.map +1 -1
  198. package/build-module/file/edit.native.js.map +1 -1
  199. package/build-module/file/save.js.map +1 -1
  200. package/build-module/form-input/edit.js +1 -1
  201. package/build-module/form-input/edit.js.map +1 -1
  202. package/build-module/gallery/edit.js.map +1 -1
  203. package/build-module/gallery/gallery.native.js.map +1 -1
  204. package/build-module/gallery/v1/edit.js.map +1 -1
  205. package/build-module/gallery/v1/gallery.native.js.map +1 -1
  206. package/build-module/heading/index.js +4 -3
  207. package/build-module/heading/index.js.map +1 -1
  208. package/build-module/heading/transforms.js +17 -4
  209. package/build-module/heading/transforms.js.map +1 -1
  210. package/build-module/image/edit.js +9 -5
  211. package/build-module/image/edit.js.map +1 -1
  212. package/build-module/image/edit.native.js.map +1 -1
  213. package/build-module/image/image.js +23 -9
  214. package/build-module/image/image.js.map +1 -1
  215. package/build-module/latest-posts/edit.native.js.map +1 -1
  216. package/build-module/list/ordered-list-settings.js +1 -1
  217. package/build-module/list/ordered-list-settings.js.map +1 -1
  218. package/build-module/list-item/edit.js +2 -4
  219. package/build-module/list-item/edit.js.map +1 -1
  220. package/build-module/list-item/edit.native.js.map +1 -1
  221. package/build-module/list-item/hooks/index.js +0 -1
  222. package/build-module/list-item/hooks/index.js.map +1 -1
  223. package/build-module/list-item/hooks/use-indent-list-item.js +1 -0
  224. package/build-module/list-item/hooks/use-indent-list-item.js.map +1 -1
  225. package/build-module/list-item/hooks/use-outdent-list-item.js +1 -0
  226. package/build-module/list-item/hooks/use-outdent-list-item.js.map +1 -1
  227. package/build-module/list-item/hooks/use-space.js +17 -8
  228. package/build-module/list-item/hooks/use-space.js.map +1 -1
  229. package/build-module/list-item/index.js +4 -1
  230. package/build-module/list-item/index.js.map +1 -1
  231. package/build-module/media-text/edit.js +34 -10
  232. package/build-module/media-text/edit.js.map +1 -1
  233. package/build-module/media-text/index.js +5 -0
  234. package/build-module/media-text/index.js.map +1 -1
  235. package/build-module/media-text/media-container.js +31 -12
  236. package/build-module/media-text/media-container.js.map +1 -1
  237. package/build-module/media-text/media-container.native.js +1 -1
  238. package/build-module/media-text/media-container.native.js.map +1 -1
  239. package/build-module/media-text/save.js +2 -2
  240. package/build-module/media-text/save.js.map +1 -1
  241. package/build-module/navigation/edit/index.js +24 -30
  242. package/build-module/navigation/edit/index.js.map +1 -1
  243. package/build-module/navigation/edit/navigation-menu-delete-control.js +15 -23
  244. package/build-module/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  245. package/build-module/navigation/edit/navigation-menu-selector.js +24 -23
  246. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  247. package/build-module/navigation/edit/placeholder/index.js +4 -4
  248. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  249. package/build-module/navigation/use-navigation-menu.js +15 -12
  250. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  251. package/build-module/navigation-link/edit.js +13 -11
  252. package/build-module/navigation-link/edit.js.map +1 -1
  253. package/build-module/navigation-link/link-ui.js.map +1 -1
  254. package/build-module/navigation-submenu/edit.js +4 -0
  255. package/build-module/navigation-submenu/edit.js.map +1 -1
  256. package/build-module/paragraph/edit.native.js.map +1 -1
  257. package/build-module/pattern/edit.js +11 -0
  258. package/build-module/pattern/edit.js.map +1 -1
  259. package/build-module/post-author/edit.js +1 -0
  260. package/build-module/post-author/edit.js.map +1 -1
  261. package/build-module/post-excerpt/edit.js +1 -0
  262. package/build-module/post-excerpt/edit.js.map +1 -1
  263. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  264. package/build-module/post-featured-image/edit.js +13 -13
  265. package/build-module/post-featured-image/edit.js.map +1 -1
  266. package/build-module/post-featured-image/index.js +6 -0
  267. package/build-module/post-featured-image/index.js.map +1 -1
  268. package/build-module/post-navigation-link/edit.js +1 -0
  269. package/build-module/post-navigation-link/edit.js.map +1 -1
  270. package/build-module/post-terms/edit.js +2 -0
  271. package/build-module/post-terms/edit.js.map +1 -1
  272. package/build-module/post-title/edit.js +2 -2
  273. package/build-module/post-title/edit.js.map +1 -1
  274. package/build-module/query/edit/pattern-selection-modal.js.map +1 -1
  275. package/build-module/query/utils.js +7 -5
  276. package/build-module/query/utils.js.map +1 -1
  277. package/build-module/query-pagination-next/edit.js.map +1 -1
  278. package/build-module/query-pagination-previous/edit.js.map +1 -1
  279. package/build-module/quote/deprecated.js +112 -13
  280. package/build-module/quote/deprecated.js.map +1 -1
  281. package/build-module/quote/edit.js +7 -7
  282. package/build-module/quote/edit.js.map +1 -1
  283. package/build-module/quote/index.js +1 -1
  284. package/build-module/quote/index.js.map +1 -1
  285. package/build-module/quote/save.js +2 -2
  286. package/build-module/quote/save.js.map +1 -1
  287. package/build-module/read-more/edit.js +1 -0
  288. package/build-module/read-more/edit.js.map +1 -1
  289. package/build-module/search/edit.js +3 -1
  290. package/build-module/search/edit.js.map +1 -1
  291. package/build-module/search/edit.native.js +2 -2
  292. package/build-module/search/edit.native.js.map +1 -1
  293. package/build-module/site-logo/edit.js +7 -2
  294. package/build-module/site-logo/edit.js.map +1 -1
  295. package/build-module/site-title/{edit/index.js → edit.js} +1 -1
  296. package/build-module/site-title/edit.js.map +1 -0
  297. package/build-module/social-link/edit.js +1 -1
  298. package/build-module/social-link/edit.js.map +1 -1
  299. package/build-module/social-link/icons/medium.js +1 -1
  300. package/build-module/social-link/icons/medium.js.map +1 -1
  301. package/build-module/social-link/icons/reddit.js +1 -1
  302. package/build-module/social-link/icons/reddit.js.map +1 -1
  303. package/build-module/social-links/edit.native.js.map +1 -1
  304. package/build-module/spacer/edit.js.map +1 -1
  305. package/build-module/table/deprecated.js +286 -176
  306. package/build-module/table/deprecated.js.map +1 -1
  307. package/build-module/table/index.js +1 -1
  308. package/build-module/table-of-contents/edit.js.map +1 -1
  309. package/build-module/template-part/edit/index.js +57 -5
  310. package/build-module/template-part/edit/index.js.map +1 -1
  311. package/build-module/template-part/edit/selection-modal.js +2 -8
  312. package/build-module/template-part/edit/selection-modal.js.map +1 -1
  313. package/build-module/template-part/edit/utils/map-template-part-to-block-pattern.js +24 -0
  314. package/build-module/template-part/edit/utils/map-template-part-to-block-pattern.js.map +1 -0
  315. package/build-module/utils/caption.js +13 -3
  316. package/build-module/utils/caption.js.map +1 -1
  317. package/build-module/utils/get-transformed-metadata.js +51 -0
  318. package/build-module/utils/get-transformed-metadata.js.map +1 -0
  319. package/build-module/utils/hooks.js +54 -3
  320. package/build-module/utils/hooks.js.map +1 -1
  321. package/build-module/video/edit-common-settings.js.map +1 -1
  322. package/build-module/video/edit.js +10 -19
  323. package/build-module/video/edit.js.map +1 -1
  324. package/build-module/video/edit.native.js +3 -8
  325. package/build-module/video/edit.native.js.map +1 -1
  326. package/build-style/common-rtl.css +1 -0
  327. package/build-style/common.css +1 -0
  328. package/build-style/cover/style-rtl.css +2 -1
  329. package/build-style/cover/style.css +2 -1
  330. package/build-style/editor-rtl.css +11 -2
  331. package/build-style/editor.css +11 -2
  332. package/build-style/file/editor-rtl.css +3 -0
  333. package/build-style/file/editor.css +3 -0
  334. package/build-style/group/editor-rtl.css +1 -1
  335. package/build-style/group/editor.css +1 -1
  336. package/build-style/media-text/editor-rtl.css +7 -1
  337. package/build-style/media-text/editor.css +7 -1
  338. package/build-style/search/style-rtl.css +2 -0
  339. package/build-style/search/style.css +2 -0
  340. package/build-style/social-links/style-rtl.css +2 -2
  341. package/build-style/social-links/style.css +2 -2
  342. package/build-style/style-rtl.css +6 -3
  343. package/build-style/style.css +6 -3
  344. package/package.json +34 -34
  345. package/src/archives/index.php +4 -0
  346. package/src/audio/edit.js +9 -19
  347. package/src/audio/edit.native.js +3 -3
  348. package/src/avatar/edit.js +1 -1
  349. package/src/avatar/index.php +6 -0
  350. package/src/block/deprecated.js +76 -11
  351. package/src/block/edit.js +100 -32
  352. package/src/block/index.php +27 -12
  353. package/src/block/test/edit.native.js +67 -0
  354. package/src/button/edit.js +4 -3
  355. package/src/buttons/edit.native.js +1 -1
  356. package/src/buttons/transforms.js +14 -4
  357. package/src/calendar/index.php +17 -0
  358. package/src/categories/index.php +6 -0
  359. package/src/code/save.js +7 -1
  360. package/src/code/transforms.js +20 -5
  361. package/src/columns/edit.js +3 -2
  362. package/src/comment-author-avatar/edit.js +1 -1
  363. package/src/comment-author-name/index.php +4 -0
  364. package/src/comment-content/index.php +4 -0
  365. package/src/comment-date/index.php +4 -0
  366. package/src/comment-edit-link/index.php +4 -0
  367. package/src/comment-reply-link/index.php +4 -0
  368. package/src/comment-template/index.php +4 -0
  369. package/src/comments/index.php +12 -0
  370. package/src/comments-pagination/index.php +4 -0
  371. package/src/comments-pagination-next/index.php +4 -0
  372. package/src/comments-pagination-numbers/index.php +4 -0
  373. package/src/comments-pagination-previous/index.php +4 -0
  374. package/src/comments-title/index.php +4 -0
  375. package/src/cover/edit/block-controls.js +16 -2
  376. package/src/cover/edit/index.js +6 -3
  377. package/src/cover/edit/inspector-controls.js +1 -1
  378. package/src/cover/edit/resizable-cover-popover.js +1 -6
  379. package/src/cover/edit.native.js +1 -1
  380. package/src/cover/index.php +4 -0
  381. package/src/cover/style.scss +3 -2
  382. package/src/details/edit.js +1 -0
  383. package/src/file/deprecated.js +3 -3
  384. package/src/file/edit.js +10 -15
  385. package/src/file/edit.native.js +4 -4
  386. package/src/file/editor.scss +3 -0
  387. package/src/file/index.php +4 -0
  388. package/src/file/save.js +1 -1
  389. package/src/footnotes/index.php +1 -1
  390. package/src/form-input/edit.js +1 -1
  391. package/src/gallery/edit.js +3 -3
  392. package/src/gallery/gallery.native.js +1 -1
  393. package/src/gallery/index.php +6 -0
  394. package/src/gallery/test/index.native.js +1 -1
  395. package/src/gallery/v1/edit.js +2 -2
  396. package/src/gallery/v1/gallery.native.js +1 -1
  397. package/src/group/editor.scss +1 -1
  398. package/src/heading/index.js +4 -3
  399. package/src/heading/index.php +4 -0
  400. package/src/heading/transforms.js +27 -8
  401. package/src/home-link/index.php +10 -0
  402. package/src/image/edit.js +13 -5
  403. package/src/image/edit.native.js +1 -1
  404. package/src/image/editor.scss +1 -0
  405. package/src/image/image.js +34 -22
  406. package/src/image/index.php +12 -1
  407. package/src/latest-comments/index.php +4 -0
  408. package/src/latest-posts/edit.native.js +1 -1
  409. package/src/latest-posts/index.php +8 -0
  410. package/src/list/ordered-list-settings.js +1 -1
  411. package/src/list-item/edit.js +1 -2
  412. package/src/list-item/edit.native.js +1 -1
  413. package/src/list-item/hooks/index.js +0 -1
  414. package/src/list-item/hooks/use-indent-list-item.js +2 -0
  415. package/src/list-item/hooks/use-outdent-list-item.js +2 -0
  416. package/src/list-item/hooks/use-space.js +16 -9
  417. package/src/list-item/index.js +3 -0
  418. package/src/loginout/index.php +4 -0
  419. package/src/media-text/block.json +5 -0
  420. package/src/media-text/edit.js +70 -19
  421. package/src/media-text/editor.scss +7 -1
  422. package/src/media-text/index.php +70 -0
  423. package/src/media-text/media-container.js +49 -9
  424. package/src/media-text/media-container.native.js +5 -3
  425. package/src/media-text/save.js +2 -2
  426. package/src/media-text/test/edit.native.js +58 -0
  427. package/src/missing/test/edit-integration.native.js +2 -1
  428. package/src/navigation/edit/index.js +68 -72
  429. package/src/navigation/edit/navigation-menu-delete-control.js +22 -49
  430. package/src/navigation/edit/navigation-menu-selector.js +39 -21
  431. package/src/navigation/edit/placeholder/index.js +4 -4
  432. package/src/navigation/edit/test/navigation-menu-selector.js +77 -55
  433. package/src/navigation/index.php +118 -34
  434. package/src/navigation/test/use-navigation-menu.js +21 -21
  435. package/src/navigation/use-navigation-menu.js +23 -9
  436. package/src/navigation-link/edit.js +12 -13
  437. package/src/navigation-link/index.php +14 -0
  438. package/src/navigation-link/link-ui.js +2 -2
  439. package/src/navigation-submenu/edit.js +4 -0
  440. package/src/navigation-submenu/index.php +8 -0
  441. package/src/page-list/index.php +12 -0
  442. package/src/page-list-item/index.php +2 -0
  443. package/src/paragraph/edit.native.js +1 -1
  444. package/src/paragraph/test/edit.native.js +36 -0
  445. package/src/pattern/edit.js +14 -0
  446. package/src/pattern/index.php +2 -0
  447. package/src/post-author/edit.js +1 -0
  448. package/src/post-author/index.php +4 -0
  449. package/src/post-author-biography/index.php +4 -0
  450. package/src/post-author-name/index.php +4 -0
  451. package/src/post-comments-form/index.php +6 -0
  452. package/src/post-content/index.php +4 -0
  453. package/src/post-date/index.php +4 -0
  454. package/src/post-excerpt/edit.js +2 -1
  455. package/src/post-excerpt/index.php +4 -0
  456. package/src/post-featured-image/block.json +6 -0
  457. package/src/post-featured-image/dimension-controls.js +4 -4
  458. package/src/post-featured-image/edit.js +14 -12
  459. package/src/post-featured-image/index.php +15 -0
  460. package/src/post-navigation-link/edit.js +2 -1
  461. package/src/post-navigation-link/index.php +4 -0
  462. package/src/post-template/index.php +6 -0
  463. package/src/post-terms/edit.js +2 -0
  464. package/src/post-terms/index.php +6 -0
  465. package/src/post-title/edit.js +49 -43
  466. package/src/post-title/index.php +2 -0
  467. package/src/query/edit/pattern-selection-modal.js +1 -1
  468. package/src/query/index.php +2 -0
  469. package/src/query/utils.js +6 -4
  470. package/src/query-no-results/index.php +4 -0
  471. package/src/query-pagination/index.php +4 -0
  472. package/src/query-pagination-next/edit.js +1 -1
  473. package/src/query-pagination-next/index.php +4 -0
  474. package/src/query-pagination-numbers/index.php +4 -0
  475. package/src/query-pagination-previous/edit.js +1 -1
  476. package/src/query-pagination-previous/index.php +4 -0
  477. package/src/query-title/index.php +4 -0
  478. package/src/quote/block.json +1 -1
  479. package/src/quote/deprecated.js +110 -15
  480. package/src/quote/edit.js +16 -10
  481. package/src/quote/save.js +2 -2
  482. package/src/quote/test/__snapshots__/transforms.native.js.snap +2 -2
  483. package/src/read-more/edit.js +2 -1
  484. package/src/read-more/index.php +4 -0
  485. package/src/rss/index.php +4 -0
  486. package/src/search/edit.js +3 -1
  487. package/src/search/edit.native.js +6 -6
  488. package/src/search/index.php +20 -2
  489. package/src/search/style.scss +2 -0
  490. package/src/shortcode/index.php +4 -0
  491. package/src/site-logo/edit.js +11 -6
  492. package/src/site-logo/index.php +20 -0
  493. package/src/site-tagline/index.php +4 -0
  494. package/src/site-title/index.php +4 -0
  495. package/src/social-link/edit.js +2 -2
  496. package/src/social-link/icons/medium.js +1 -1
  497. package/src/social-link/icons/reddit.js +1 -1
  498. package/src/social-link/index.php +22 -9
  499. package/src/social-link/socials-with-bg.scss +1 -1
  500. package/src/social-link/socials-without-bg.scss +1 -1
  501. package/src/social-links/edit.native.js +1 -1
  502. package/src/spacer/edit.js +1 -1
  503. package/src/table/block.json +1 -1
  504. package/src/table/deprecated.js +308 -175
  505. package/src/table-of-contents/edit.js +1 -1
  506. package/src/tag-cloud/index.php +4 -0
  507. package/src/template-part/edit/index.js +91 -4
  508. package/src/template-part/edit/selection-modal.js +4 -8
  509. package/src/template-part/edit/utils/map-template-part-to-block-pattern.js +23 -0
  510. package/src/template-part/index.php +10 -0
  511. package/src/term-description/index.php +4 -0
  512. package/src/utils/caption.js +10 -1
  513. package/src/utils/get-transformed-metadata.js +65 -0
  514. package/src/utils/hooks.js +53 -3
  515. package/src/video/edit-common-settings.js +1 -1
  516. package/src/video/edit.js +10 -18
  517. package/src/video/edit.native.js +7 -8
  518. package/src/video/test/edit.native.js +0 -14
  519. package/tsconfig.json +1 -0
  520. package/build/list-item/hooks/use-copy.js +0 -39
  521. package/build/list-item/hooks/use-copy.js.map +0 -1
  522. package/build/site-title/edit/index.js.map +0 -1
  523. package/build-module/list-item/hooks/use-copy.js +0 -32
  524. package/build-module/list-item/hooks/use-copy.js.map +0 -1
  525. package/build-module/site-title/edit/index.js.map +0 -1
  526. package/src/list-item/hooks/use-copy.js +0 -38
  527. /package/src/site-title/{edit/index.js → edit.js} +0 -0
@@ -93,7 +93,7 @@ describe( 'NavigationMenuSelector', () => {
93
93
  useNavigationMenu.mockReturnValue( {
94
94
  navigationMenus: [],
95
95
  hasResolvedNavigationMenus: true,
96
- canUserCreateNavigationMenu: true,
96
+ canUserCreateNavigationMenus: true,
97
97
  canSwitchNavigationMenu: true,
98
98
  } );
99
99
 
@@ -115,7 +115,7 @@ describe( 'NavigationMenuSelector', () => {
115
115
  navigationMenus: [],
116
116
  isResolvingNavigationMenus: true,
117
117
  hasResolvedNavigationMenus: false,
118
- canUserCreateNavigationMenu: false,
118
+ canUserCreateNavigationMenus: false,
119
119
  canSwitchNavigationMenu: true,
120
120
  } );
121
121
 
@@ -152,7 +152,7 @@ describe( 'NavigationMenuSelector', () => {
152
152
  useNavigationMenu.mockReturnValue( {
153
153
  navigationMenus: [],
154
154
  hasResolvedNavigationMenus: true,
155
- canUserCreateNavigationMenu: true,
155
+ canUserCreateNavigationMenus: true,
156
156
  canSwitchNavigationMenu: true,
157
157
  } );
158
158
 
@@ -203,7 +203,7 @@ describe( 'NavigationMenuSelector', () => {
203
203
  useNavigationMenu.mockReturnValue( {
204
204
  navigationMenus: [],
205
205
  hasResolvedNavigationMenus: true,
206
- canUserCreateNavigationMenu: false,
206
+ canUserCreateNavigationMenus: false,
207
207
  canSwitchNavigationMenu: true,
208
208
  } );
209
209
 
@@ -226,7 +226,7 @@ describe( 'NavigationMenuSelector', () => {
226
226
  useNavigationMenu.mockReturnValue( {
227
227
  navigationMenus: [],
228
228
  hasResolvedNavigationMenus: true,
229
- canUserCreateNavigationMenu: true,
229
+ canUserCreateNavigationMenus: true,
230
230
  canSwitchNavigationMenu: true,
231
231
  } );
232
232
 
@@ -250,10 +250,11 @@ describe( 'NavigationMenuSelector', () => {
250
250
  const user = userEvent.setup();
251
251
  const handler = jest.fn();
252
252
 
253
+ // at the start we have the menus and we're not waiting on network
253
254
  useNavigationMenu.mockReturnValue( {
254
255
  navigationMenus: [],
255
256
  hasResolvedNavigationMenus: true,
256
- canUserCreateNavigationMenu: true,
257
+ canUserCreateNavigationMenus: true,
257
258
  canSwitchNavigationMenu: true,
258
259
  } );
259
260
 
@@ -271,6 +272,18 @@ describe( 'NavigationMenuSelector', () => {
271
272
  } )
272
273
  );
273
274
 
275
+ // creating a menu is a network activity
276
+ // so we have to wait on it
277
+ useNavigationMenu.mockReturnValue( {
278
+ navigationMenus: [],
279
+ hasResolvedNavigationMenus: false,
280
+ isResolvingNavigationMenus: true,
281
+ canUserCreateNavigationMenus: true,
282
+ canSwitchNavigationMenu: true,
283
+ } );
284
+
285
+ rerender( <NavigationMenuSelector onCreateNew={ handler } /> );
286
+
274
287
  // Re-open the dropdown (it's closed when the "Create menu" button is clicked).
275
288
  await user.click( toggleButton );
276
289
 
@@ -284,11 +297,21 @@ describe( 'NavigationMenuSelector', () => {
284
297
  } )
285
298
  ).toBeDisabled();
286
299
 
300
+ // once the menu is created
301
+ // no more network activity to wait on
302
+ useNavigationMenu.mockReturnValue( {
303
+ navigationMenus: [],
304
+ hasResolvedNavigationMenus: true,
305
+ isResolvingNavigationMenus: false,
306
+ canUserCreateNavigationMenus: true,
307
+ canSwitchNavigationMenu: true,
308
+ } );
309
+
287
310
  // Simulate the menu being created and component being re-rendered.
288
311
  rerender(
289
312
  <NavigationMenuSelector
290
313
  onCreateNew={ handler }
291
- createNavigationMenuIsSuccess={ true }
314
+ createNavigationMenuIsSuccess
292
315
  />
293
316
  );
294
317
 
@@ -308,7 +331,7 @@ describe( 'NavigationMenuSelector', () => {
308
331
  useNavigationMenu.mockReturnValue( {
309
332
  navigationMenus: navigationMenusFixture,
310
333
  hasResolvedNavigationMenus: true,
311
- canUserCreateNavigationMenu: true,
334
+ canUserCreateNavigationMenus: true,
312
335
  canSwitchNavigationMenu: false,
313
336
  } );
314
337
 
@@ -329,7 +352,7 @@ describe( 'NavigationMenuSelector', () => {
329
352
  useNavigationMenu.mockReturnValue( {
330
353
  navigationMenus: navigationMenusFixture,
331
354
  hasResolvedNavigationMenus: true,
332
- canUserCreateNavigationMenu: false,
355
+ canUserCreateNavigationMenus: false,
333
356
  canSwitchNavigationMenu: true,
334
357
  } );
335
358
 
@@ -368,7 +391,7 @@ describe( 'NavigationMenuSelector', () => {
368
391
  useNavigationMenu.mockReturnValue( {
369
392
  navigationMenus: menusWithNoTitle,
370
393
  hasResolvedNavigationMenus: true,
371
- canUserCreateNavigationMenu: true,
394
+ canUserCreateNavigationMenus: true,
372
395
  canSwitchNavigationMenu: true,
373
396
  } );
374
397
 
@@ -402,7 +425,7 @@ describe( 'NavigationMenuSelector', () => {
402
425
  useNavigationMenu.mockReturnValue( {
403
426
  navigationMenus: navigationMenusFixture,
404
427
  hasResolvedNavigationMenus: true,
405
- canUserCreateNavigationMenu: true,
428
+ canUserCreateNavigationMenus: true,
406
429
  canSwitchNavigationMenu: true,
407
430
  } );
408
431
 
@@ -422,7 +445,7 @@ describe( 'NavigationMenuSelector', () => {
422
445
  expect( menuItem ).toBeChecked();
423
446
  } );
424
447
 
425
- it( 'should call the handler when the navigation menu is selected and disable all options during the import/creation process', async () => {
448
+ it( 'should call the handler when the navigation menu is selected', async () => {
426
449
  const user = userEvent.setup();
427
450
 
428
451
  const handler = jest.fn();
@@ -430,11 +453,11 @@ describe( 'NavigationMenuSelector', () => {
430
453
  useNavigationMenu.mockReturnValue( {
431
454
  navigationMenus: navigationMenusFixture,
432
455
  hasResolvedNavigationMenus: true,
433
- canUserCreateNavigationMenu: true,
456
+ canUserCreateNavigationMenus: true,
434
457
  canSwitchNavigationMenu: true,
435
458
  } );
436
459
 
437
- const { rerender } = render(
460
+ render(
438
461
  <NavigationMenuSelector
439
462
  onSelectNavigationMenu={ handler }
440
463
  />
@@ -455,42 +478,6 @@ describe( 'NavigationMenuSelector', () => {
455
478
 
456
479
  // Check the dropdown has been closed.
457
480
  expect( screen.queryByRole( 'menu' ) ).not.toBeInTheDocument();
458
-
459
- // Re-open the dropdown
460
- await user.click( screen.getByRole( 'button' ) );
461
-
462
- // Check the dropdown is again open and is in the "loading" state.
463
- expect(
464
- screen.getByRole( 'menu', {
465
- name: /Loading/,
466
- } )
467
- ).toBeInTheDocument();
468
-
469
- // // Check all menu items are present but disabled.
470
- screen.getAllByRole( 'menuitem' ).forEach( ( item ) => {
471
- // // Check all menu items are present but disabled.
472
- expect( item ).toBeDisabled();
473
- } );
474
-
475
- // // Simulate the menu being created and component being re-rendered.
476
- rerender(
477
- <NavigationMenuSelector
478
- createNavigationMenuIsSuccess={ true } // classic menu import creates a Navigation menu.
479
- />
480
- );
481
-
482
- // Todo: fix bug where aria label is not updated.
483
- // expect(
484
- // screen.getByRole( 'menu', {
485
- // name: `You are currently editing ${ navigationMenusFixture[ 0 ].title.rendered }`,
486
- // } )
487
- // ).toBeInTheDocument();
488
-
489
- // Check all menu items are re-enabled.
490
- screen.getAllByRole( 'menuitem' ).forEach( ( item ) => {
491
- // // Check all menu items are present but disabled.
492
- expect( item ).toBeEnabled();
493
- } );
494
481
  } );
495
482
  } );
496
483
 
@@ -517,7 +504,7 @@ describe( 'NavigationMenuSelector', () => {
517
504
  const user = userEvent.setup();
518
505
 
519
506
  useNavigationMenu.mockReturnValue( {
520
- canUserCreateNavigationMenu: false,
507
+ canUserCreateNavigationMenus: false,
521
508
  } );
522
509
 
523
510
  useNavigationEntities.mockReturnValue( {
@@ -539,7 +526,7 @@ describe( 'NavigationMenuSelector', () => {
539
526
  const user = userEvent.setup();
540
527
 
541
528
  useNavigationMenu.mockReturnValue( {
542
- canUserCreateNavigationMenu: true,
529
+ canUserCreateNavigationMenus: true,
543
530
  } );
544
531
 
545
532
  useNavigationEntities.mockReturnValue( {
@@ -568,10 +555,15 @@ describe( 'NavigationMenuSelector', () => {
568
555
 
569
556
  it( 'should call the handler when the classic menu item is selected and disable all options during the import/creation process', async () => {
570
557
  const user = userEvent.setup();
571
- const handler = jest.fn();
558
+ const handler = jest.fn( async () => {} );
572
559
 
560
+ // initially we have the menus, and we're not waiting on network
573
561
  useNavigationMenu.mockReturnValue( {
574
- canUserCreateNavigationMenu: true,
562
+ navigationMenus: [],
563
+ isResolvingNavigationMenus: false,
564
+ hasResolvedNavigationMenus: true,
565
+ canSwitchNavigationMenu: true,
566
+ canUserCreateNavigationMenus: true,
575
567
  } );
576
568
 
577
569
  useNavigationEntities.mockReturnValue( {
@@ -597,6 +589,23 @@ describe( 'NavigationMenuSelector', () => {
597
589
  // Check the dropdown has been closed.
598
590
  expect( screen.queryByRole( 'menu' ) ).not.toBeInTheDocument();
599
591
 
592
+ // since we're importing we are doing network activity
593
+ // so we have to wait on it
594
+ useNavigationMenu.mockReturnValue( {
595
+ navigationMenus: [],
596
+ isResolvingNavigationMenus: true,
597
+ hasResolvedNavigationMenus: false,
598
+ canUserCreateNavigationMenus: true,
599
+ } );
600
+
601
+ useNavigationEntities.mockReturnValue( {
602
+ menus: classicMenusFixture,
603
+ } );
604
+
605
+ rerender(
606
+ <NavigationMenuSelector onSelectClassicMenu={ handler } />
607
+ );
608
+
600
609
  // // Re-open the dropdown (it's closed when the "Create menu" button is clicked).
601
610
  await user.click( screen.getByRole( 'button' ) );
602
611
 
@@ -613,10 +622,23 @@ describe( 'NavigationMenuSelector', () => {
613
622
  expect( item ).toBeDisabled();
614
623
  } );
615
624
 
625
+ // once the menu is imported
626
+ // no more network activity to wait on
627
+ useNavigationMenu.mockReturnValue( {
628
+ navigationMenus: [],
629
+ isResolvingNavigationMenus: false,
630
+ hasResolvedNavigationMenus: true,
631
+ canUserCreateNavigationMenus: true,
632
+ } );
633
+
634
+ useNavigationEntities.mockReturnValue( {
635
+ menus: classicMenusFixture,
636
+ } );
637
+
616
638
  // Simulate the menu being created and component being re-rendered.
617
639
  rerender(
618
640
  <NavigationMenuSelector
619
- createNavigationMenuIsSuccess={ true } // classic menu import creates a Navigation menu.
641
+ createNavigationMenuIsSuccess // classic menu import creates a Navigation menu.
620
642
  />
621
643
  );
622
644
 
@@ -135,9 +135,9 @@ class WP_Navigation_Block_Renderer {
135
135
  if ( static::does_block_need_a_list_item_wrapper( $inner_block ) ) {
136
136
  return '<li class="wp-block-navigation-item">' . $inner_block_content . '</li>';
137
137
  }
138
-
139
- return $inner_block_content;
140
138
  }
139
+
140
+ return $inner_block_content;
141
141
  }
142
142
 
143
143
  /**
@@ -543,8 +543,7 @@ class WP_Navigation_Block_Renderer {
543
543
  /**
544
544
  * Gets the nav element directives.
545
545
  *
546
- * @param bool $is_interactive Whether the block is interactive.
547
- * @param array $attributes The block attributes.
546
+ * @param bool $is_interactive Whether the block is interactive.
548
547
  * @return string the directives for the navigation element.
549
548
  */
550
549
  private static function get_nav_element_directives( $is_interactive ) {
@@ -552,16 +551,20 @@ class WP_Navigation_Block_Renderer {
552
551
  return '';
553
552
  }
554
553
  // When adding to this array be mindful of security concerns.
555
- $nav_element_context = data_wp_context(
554
+ $nav_element_context = wp_interactivity_data_wp_context(
556
555
  array(
557
- 'overlayOpenedBy' => array(),
556
+ 'overlayOpenedBy' => array(
557
+ 'click' => false,
558
+ 'hover' => false,
559
+ 'focus' => false,
560
+ ),
558
561
  'type' => 'overlay',
559
562
  'roleAttribute' => '',
560
563
  'ariaLabel' => __( 'Menu' ),
561
564
  )
562
565
  );
563
566
  $nav_element_directives = '
564
- data-wp-interactive="core/navigation"'
567
+ data-wp-interactive="core/navigation" '
565
568
  . $nav_element_context;
566
569
 
567
570
  return $nav_element_directives;
@@ -673,6 +676,8 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
673
676
  /**
674
677
  * Returns the menu items for a WordPress menu location.
675
678
  *
679
+ * @since 5.9.0
680
+ *
676
681
  * @param string $location The menu location.
677
682
  * @return array Menu items for the location.
678
683
  */
@@ -709,6 +714,8 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
709
714
  * Sorts a standard array of menu items into a nested structure keyed by the
710
715
  * id of the parent menu.
711
716
  *
717
+ * @since 5.9.0
718
+ *
712
719
  * @param array $menu_items Menu items to sort.
713
720
  * @return array An array keyed by the id of the parent menu where each element
714
721
  * is an array of menu items that belong to that parent.
@@ -731,6 +738,8 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
731
738
  /**
732
739
  * Gets the inner blocks for the navigation block from the unstable location attribute.
733
740
  *
741
+ * @since 6.5.0
742
+ *
734
743
  * @param array $attributes The block attributes.
735
744
  * @return WP_Block_List Returns the inner blocks for the navigation block.
736
745
  */
@@ -750,6 +759,8 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
750
759
  * Add Interactivity API directives to the navigation-submenu and page-list
751
760
  * blocks markup using the Tag Processor.
752
761
  *
762
+ * @since 6.3.0
763
+ *
753
764
  * @param WP_HTML_Tag_Processor $tags Markup of the navigation block.
754
765
  * @param array $block_attributes Block attributes.
755
766
  *
@@ -764,7 +775,7 @@ function block_core_navigation_add_directives_to_submenu( $tags, $block_attribut
764
775
  ) ) {
765
776
  // Add directives to the parent `<li>`.
766
777
  $tags->set_attribute( 'data-wp-interactive', 'core/navigation' );
767
- $tags->set_attribute( 'data-wp-context', '{ "submenuOpenedBy": {}, "type": "submenu" }' );
778
+ $tags->set_attribute( 'data-wp-context', '{ "submenuOpenedBy": { "click": false, "hover": false, "focus": false }, "type": "submenu" }' );
768
779
  $tags->set_attribute( 'data-wp-watch', 'callbacks.initMenu' );
769
780
  $tags->set_attribute( 'data-wp-on--focusout', 'actions.handleMenuFocusout' );
770
781
  $tags->set_attribute( 'data-wp-on--keydown', 'actions.handleMenuKeydown' );
@@ -811,6 +822,8 @@ function block_core_navigation_add_directives_to_submenu( $tags, $block_attribut
811
822
  * Build an array with CSS classes and inline styles defining the colors
812
823
  * which will be applied to the navigation markup in the front-end.
813
824
  *
825
+ * @since 5.9.0
826
+ *
814
827
  * @param array $attributes Navigation block attributes.
815
828
  *
816
829
  * @return array Colors CSS classes and inline styles.
@@ -902,6 +915,8 @@ function block_core_navigation_build_css_colors( $attributes ) {
902
915
  * Build an array with CSS classes and inline styles defining the font sizes
903
916
  * which will be applied to the navigation markup in the front-end.
904
917
  *
918
+ * @since 5.9.0
919
+ *
905
920
  * @param array $attributes Navigation block attributes.
906
921
  *
907
922
  * @return array Font size CSS classes and inline styles.
@@ -930,6 +945,8 @@ function block_core_navigation_build_css_font_sizes( $attributes ) {
930
945
  /**
931
946
  * Returns the top-level submenu SVG chevron icon.
932
947
  *
948
+ * @since 5.9.0
949
+ *
933
950
  * @return string
934
951
  */
935
952
  function block_core_navigation_render_submenu_icon() {
@@ -942,6 +959,8 @@ function block_core_navigation_render_submenu_icon() {
942
959
  * it encounters whitespace. This is not a bug but rather how the parser
943
960
  * is designed.
944
961
  *
962
+ * @since 5.9.0
963
+ *
945
964
  * @param array $parsed_blocks the parsed blocks to be normalized.
946
965
  * @return array the normalized parsed blocks.
947
966
  */
@@ -960,6 +979,8 @@ function block_core_navigation_filter_out_empty_blocks( $parsed_blocks ) {
960
979
  /**
961
980
  * Returns true if the navigation block contains a nested navigation block.
962
981
  *
982
+ * @since 6.2.0
983
+ *
963
984
  * @param WP_Block_List $inner_blocks Inner block instance to be normalized.
964
985
  * @return bool true if the navigation block contains a nested navigation block.
965
986
  */
@@ -983,6 +1004,8 @@ function block_core_navigation_block_contains_core_navigation( $inner_blocks ) {
983
1004
  * This aims to mirror how the fallback mechanic for wp_nav_menu works.
984
1005
  * See https://developer.wordpress.org/reference/functions/wp_nav_menu/#more-information.
985
1006
  *
1007
+ * @since 5.9.0
1008
+ *
986
1009
  * @return array the array of blocks to be used as a fallback.
987
1010
  */
988
1011
  function block_core_navigation_get_fallback_blocks() {
@@ -1038,6 +1061,8 @@ function block_core_navigation_get_fallback_blocks() {
1038
1061
  /**
1039
1062
  * Iterate through all inner blocks recursively and get navigation link block's post IDs.
1040
1063
  *
1064
+ * @since 6.0.0
1065
+ *
1041
1066
  * @param WP_Block_List $inner_blocks Block list class instance.
1042
1067
  *
1043
1068
  * @return array Array of post IDs.
@@ -1050,6 +1075,8 @@ function block_core_navigation_get_post_ids( $inner_blocks ) {
1050
1075
  /**
1051
1076
  * Get post IDs from a navigation link block instance.
1052
1077
  *
1078
+ * @since 6.0.0
1079
+ *
1053
1080
  * @param WP_Block $block Instance of a block.
1054
1081
  *
1055
1082
  * @return array Array of post IDs.
@@ -1073,6 +1100,8 @@ function block_core_navigation_from_block_get_post_ids( $block ) {
1073
1100
  /**
1074
1101
  * Renders the `core/navigation` block on server.
1075
1102
  *
1103
+ * @since 5.9.0
1104
+ *
1076
1105
  * @param array $attributes The block attributes.
1077
1106
  * @param string $content The saved content.
1078
1107
  * @param WP_Block $block The parsed block.
@@ -1086,6 +1115,8 @@ function render_block_core_navigation( $attributes, $content, $block ) {
1086
1115
  /**
1087
1116
  * Register the navigation block.
1088
1117
  *
1118
+ * @since 5.9.0
1119
+ *
1089
1120
  * @uses render_block_core_navigation()
1090
1121
  * @throws WP_Error An WP_Error exception parsing the block definition.
1091
1122
  */
@@ -1103,6 +1134,8 @@ add_action( 'init', 'register_block_core_navigation' );
1103
1134
  /**
1104
1135
  * Filter that changes the parsed attribute values of navigation blocks contain typographic presets to contain the values directly.
1105
1136
  *
1137
+ * @since 5.9.0
1138
+ *
1106
1139
  * @param array $parsed_block The block being rendered.
1107
1140
  *
1108
1141
  * @return array The block being rendered without typographic presets.
@@ -1137,6 +1170,8 @@ add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_back
1137
1170
  /**
1138
1171
  * Turns menu item data into a nested array of parsed blocks
1139
1172
  *
1173
+ * @since 5.9.0
1174
+ *
1140
1175
  * @deprecated 6.3.0 Use WP_Navigation_Fallback::parse_blocks_from_menu_items() instead.
1141
1176
  *
1142
1177
  * @param array $menu_items An array of menu items that represent
@@ -1194,6 +1229,8 @@ function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_
1194
1229
  /**
1195
1230
  * Get the classic navigation menu to use as a fallback.
1196
1231
  *
1232
+ * @since 6.2.0
1233
+ *
1197
1234
  * @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback() instead.
1198
1235
  *
1199
1236
  * @return object WP_Term The classic navigation.
@@ -1238,6 +1275,8 @@ function block_core_navigation_get_classic_menu_fallback() {
1238
1275
  /**
1239
1276
  * Converts a classic navigation to blocks.
1240
1277
  *
1278
+ * @since 6.2.0
1279
+ *
1241
1280
  * @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback_blocks() instead.
1242
1281
  *
1243
1282
  * @param object $classic_nav_menu WP_Term The classic navigation object to convert.
@@ -1280,6 +1319,8 @@ function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_me
1280
1319
  /**
1281
1320
  * If there's a classic menu then use it as a fallback.
1282
1321
  *
1322
+ * @since 6.2.0
1323
+ *
1283
1324
  * @deprecated 6.3.0 Use WP_Navigation_Fallback::create_classic_menu_fallback() instead.
1284
1325
  *
1285
1326
  * @return array the normalized parsed blocks.
@@ -1325,6 +1366,8 @@ function block_core_navigation_maybe_use_classic_menu_fallback() {
1325
1366
  /**
1326
1367
  * Finds the most recently published `wp_navigation` Post.
1327
1368
  *
1369
+ * @since 6.1.0
1370
+ *
1328
1371
  * @deprecated 6.3.0 Use WP_Navigation_Fallback::get_most_recently_published_navigation() instead.
1329
1372
  *
1330
1373
  * @return WP_Post|null the first non-empty Navigation or null.
@@ -1356,6 +1399,8 @@ function block_core_navigation_get_most_recently_published_navigation() {
1356
1399
  /**
1357
1400
  * Accepts the serialized markup of a block and its inner blocks, and returns serialized markup of the inner blocks.
1358
1401
  *
1402
+ * @since 6.5.0
1403
+ *
1359
1404
  * @param string $serialized_block The serialized markup of a block and its inner blocks.
1360
1405
  * @return string
1361
1406
  */
@@ -1369,6 +1414,8 @@ function block_core_navigation_remove_serialized_parent_block( $serialized_block
1369
1414
  * Mock a parsed block for the Navigation block given its inner blocks and the `wp_navigation` post object.
1370
1415
  * The `wp_navigation` post's `_wp_ignored_hooked_blocks` meta is queried to add the `metadata.ignoredHookedBlocks` attribute.
1371
1416
  *
1417
+ * @since 6.5.0
1418
+ *
1372
1419
  * @param array $inner_blocks Parsed inner blocks of a Navigation block.
1373
1420
  * @param WP_Post $post `wp_navigation` post object corresponding to the block.
1374
1421
  *
@@ -1408,6 +1455,8 @@ function block_core_navigation_mock_parsed_block( $inner_blocks, $post ) {
1408
1455
  * children, the `wp_navigation` post's `_wp_ignored_hooked_blocks` meta is checked to see if any
1409
1456
  * of those hooked blocks should be exempted from insertion.
1410
1457
  *
1458
+ * @since 6.5.0
1459
+ *
1411
1460
  * @param array $inner_blocks Parsed inner blocks of a Navigation block.
1412
1461
  * @param WP_Post $post `wp_navigation` post object corresponding to the block.
1413
1462
  * @return string Serialized inner blocks in mock Navigation block wrapper, with hooked blocks inserted, if any.
@@ -1433,6 +1482,8 @@ function block_core_navigation_insert_hooked_blocks( $inner_blocks, $post ) {
1433
1482
  * this function inserts ignoredHookedBlocks meta into it, and returns the serialized inner blocks in a
1434
1483
  * mock Navigation block wrapper.
1435
1484
  *
1485
+ * @since 6.5.0
1486
+ *
1436
1487
  * @param array $inner_blocks Parsed inner blocks of a Navigation block.
1437
1488
  * @param WP_Post $post `wp_navigation` post object corresponding to the block.
1438
1489
  * @return string Serialized inner blocks in mock Navigation block wrapper, with hooked blocks inserted, if any.
@@ -1454,13 +1505,34 @@ function block_core_navigation_set_ignored_hooked_blocks_metadata( $inner_blocks
1454
1505
  /**
1455
1506
  * Updates the post meta with the list of ignored hooked blocks when the navigation is created or updated via the REST API.
1456
1507
  *
1457
- * @param WP_Post $post Post object.
1508
+ * @access private
1509
+ * @since 6.5.0
1510
+ *
1511
+ * @param stdClass $post Post object.
1512
+ * @return stdClass The updated post object.
1458
1513
  */
1459
1514
  function block_core_navigation_update_ignore_hooked_blocks_meta( $post ) {
1460
- // We run the Block Hooks mechanism to inject the `metadata.ignoredHookedBlocks` attribute into
1461
- // all anchor blocks. For the root level, we create a mock Navigation and extract them from there.
1515
+ /*
1516
+ * In this scenario the user has likely tried to create a navigation via the REST API.
1517
+ * In which case we won't have a post ID to work with and store meta against.
1518
+ */
1519
+ if ( empty( $post->ID ) ) {
1520
+ return $post;
1521
+ }
1522
+
1523
+ /*
1524
+ * We run the Block Hooks mechanism to inject the `metadata.ignoredHookedBlocks` attribute into
1525
+ * all anchor blocks. For the root level, we create a mock Navigation and extract them from there.
1526
+ */
1462
1527
  $blocks = parse_blocks( $post->post_content );
1463
- $markup = block_core_navigation_set_ignored_hooked_blocks_metadata( $blocks, $post );
1528
+
1529
+ /*
1530
+ * Block Hooks logic requires a `WP_Post` object (rather than the `stdClass` with the updates that
1531
+ * we're getting from the `rest_pre_insert_wp_navigation` filter) as its second argument (to be
1532
+ * used as context for hooked blocks insertion).
1533
+ * We thus have to look it up from the DB,based on `$post->ID`.
1534
+ */
1535
+ $markup = block_core_navigation_set_ignored_hooked_blocks_metadata( $blocks, get_post( $post->ID ) );
1464
1536
 
1465
1537
  $root_nav_block = parse_blocks( $markup )[0];
1466
1538
  $ignored_hooked_blocks = isset( $root_nav_block['attrs']['metadata']['ignoredHookedBlocks'] )
@@ -1476,33 +1548,41 @@ function block_core_navigation_update_ignore_hooked_blocks_meta( $post ) {
1476
1548
  update_post_meta( $post->ID, '_wp_ignored_hooked_blocks', json_encode( $ignored_hooked_blocks ) );
1477
1549
  }
1478
1550
 
1479
- $serialized_inner_blocks = block_core_navigation_remove_serialized_parent_block( $markup );
1480
-
1481
- wp_update_post(
1482
- array(
1483
- 'ID' => $post->ID,
1484
- 'post_content' => $serialized_inner_blocks,
1485
- )
1486
- );
1551
+ $post->post_content = block_core_navigation_remove_serialized_parent_block( $markup );
1552
+ return $post;
1487
1553
  }
1488
1554
 
1489
- // Before adding our filter, we verify if it's already added in Core.
1490
- // However, during the build process, Gutenberg automatically prefixes our functions with "gutenberg_".
1491
- // Therefore, we concatenate the Core's function name to circumvent this prefix for our check.
1492
- $rest_insert_wp_navigation_core_callback = 'block_core_navigation_' . 'update_ignore_hooked_blocks_meta';
1555
+ /*
1556
+ * Before adding our filter, we verify if it's already added in Core.
1557
+ * However, during the build process, Gutenberg automatically prefixes our functions with "gutenberg_".
1558
+ * Therefore, we concatenate the Core's function name to circumvent this prefix for our check.
1559
+ */
1560
+ $rest_insert_wp_navigation_core_callback = 'block_core_navigation_' . 'update_ignore_hooked_blocks_meta'; // phpcs:ignore Generic.Strings.UnnecessaryStringConcat.Found
1493
1561
 
1494
- // Injection of hooked blocks into the Navigation block relies on some functions present in WP >= 6.5
1495
- // that are not present in Gutenberg's WP 6.5 compatibility layer.
1496
- if ( function_exists( 'set_ignored_hooked_blocks_metadata' ) && ! has_filter( 'rest_insert_wp_navigation', $rest_insert_wp_navigation_core_callback ) ) {
1497
- add_action( 'rest_insert_wp_navigation', 'block_core_navigation_update_ignore_hooked_blocks_meta', 10, 3 );
1562
+ /*
1563
+ * Injection of hooked blocks into the Navigation block relies on some functions present in WP >= 6.5
1564
+ * that are not present in Gutenberg's WP 6.5 compatibility layer.
1565
+ */
1566
+ if ( function_exists( 'set_ignored_hooked_blocks_metadata' ) && ! has_filter( 'rest_pre_insert_wp_navigation', $rest_insert_wp_navigation_core_callback ) ) {
1567
+ add_filter( 'rest_pre_insert_wp_navigation', 'block_core_navigation_update_ignore_hooked_blocks_meta' );
1568
+ }
1569
+
1570
+ /*
1571
+ * Previous versions of Gutenberg were attaching the block_core_navigation_update_ignore_hooked_blocks_meta
1572
+ * function to the `rest_insert_wp_navigation` _action_ (rather than the `rest_pre_insert_wp_navigation` _filter_).
1573
+ * To avoid collisions, we need to remove the filter from that action if it's present.
1574
+ */
1575
+ if ( has_filter( 'rest_insert_wp_navigation', $rest_insert_wp_navigation_core_callback ) ) {
1576
+ remove_filter( 'rest_insert_wp_navigation', $rest_insert_wp_navigation_core_callback );
1498
1577
  }
1499
1578
 
1500
1579
  /**
1501
1580
  * Hooks into the REST API response for the core/navigation block and adds the first and last inner blocks.
1502
1581
  *
1582
+ * @since 6.5.0
1583
+ *
1503
1584
  * @param WP_REST_Response $response The response object.
1504
1585
  * @param WP_Post $post Post object.
1505
- * @param WP_REST_Request $request Request object.
1506
1586
  * @return WP_REST_Response The response object.
1507
1587
  */
1508
1588
  function block_core_navigation_insert_hooked_blocks_into_rest_response( $response, $post ) {
@@ -1521,13 +1601,17 @@ function block_core_navigation_insert_hooked_blocks_into_rest_response( $respons
1521
1601
  return $response;
1522
1602
  }
1523
1603
 
1524
- // Before adding our filter, we verify if it's already added in Core.
1525
- // However, during the build process, Gutenberg automatically prefixes our functions with "gutenberg_".
1526
- // Therefore, we concatenate the Core's function name to circumvent this prefix for our check.
1604
+ /*
1605
+ * Before adding our filter, we verify if it's already added in Core.
1606
+ * However, during the build process, Gutenberg automatically prefixes our functions with "gutenberg_".
1607
+ * Therefore, we concatenate the Core's function name to circumvent this prefix for our check.
1608
+ */
1527
1609
  $rest_prepare_wp_navigation_core_callback = 'block_core_navigation_' . 'insert_hooked_blocks_into_rest_response';
1528
1610
 
1529
- // Injection of hooked blocks into the Navigation block relies on some functions present in WP >= 6.5
1530
- // that are not present in Gutenberg's WP 6.5 compatibility layer.
1611
+ /*
1612
+ * Injection of hooked blocks into the Navigation block relies on some functions present in WP >= 6.5
1613
+ * that are not present in Gutenberg's WP 6.5 compatibility layer.
1614
+ */
1531
1615
  if ( function_exists( 'set_ignored_hooked_blocks_metadata' ) && ! has_filter( 'rest_prepare_wp_navigation', $rest_prepare_wp_navigation_core_callback ) ) {
1532
1616
  add_filter( 'rest_prepare_wp_navigation', 'block_core_navigation_insert_hooked_blocks_into_rest_response', 10, 3 );
1533
1617
  }