@wordpress/block-library 7.1.1 → 7.3.1

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 (657) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +1 -1
  3. package/build/archives/edit.js +21 -1
  4. package/build/archives/edit.js.map +1 -1
  5. package/build/archives/index.js +5 -1
  6. package/build/archives/index.js.map +1 -1
  7. package/build/audio/edit.native.js +0 -5
  8. package/build/audio/edit.native.js.map +1 -1
  9. package/build/avatar/edit.js +211 -0
  10. package/build/avatar/edit.js.map +1 -0
  11. package/build/avatar/hooks.js +111 -0
  12. package/build/avatar/hooks.js.map +1 -0
  13. package/build/avatar/index.js +83 -0
  14. package/build/avatar/index.js.map +1 -0
  15. package/build/avatar/user-control.js +63 -0
  16. package/build/avatar/user-control.js.map +1 -0
  17. package/build/block/edit.js +2 -1
  18. package/build/block/edit.js.map +1 -1
  19. package/build/column/index.js +3 -1
  20. package/build/column/index.js.map +1 -1
  21. package/build/comment-author-avatar/index.js +4 -3
  22. package/build/comment-author-avatar/index.js.map +1 -1
  23. package/build/comment-author-name/index.js +7 -3
  24. package/build/comment-author-name/index.js.map +1 -1
  25. package/build/comment-content/index.js +1 -1
  26. package/build/comment-date/edit.js +10 -25
  27. package/build/comment-date/edit.js.map +1 -1
  28. package/build/comment-date/index.js +7 -3
  29. package/build/comment-date/index.js.map +1 -1
  30. package/build/comment-edit-link/index.js +5 -1
  31. package/build/comment-edit-link/index.js.map +1 -1
  32. package/build/comment-reply-link/index.js +5 -1
  33. package/build/comment-reply-link/index.js.map +1 -1
  34. package/build/comment-template/edit.js +86 -66
  35. package/build/comment-template/edit.js.map +1 -1
  36. package/build/comment-template/hooks.js +7 -23
  37. package/build/comment-template/hooks.js.map +1 -1
  38. package/build/comment-template/index.js +2 -2
  39. package/build/comments-pagination-next/index.js +2 -2
  40. package/build/comments-pagination-numbers/index.js +1 -1
  41. package/build/comments-pagination-previous/index.js +1 -1
  42. package/build/comments-query-loop/edit/comments-inspector-controls.js +2 -69
  43. package/build/comments-query-loop/edit/comments-inspector-controls.js.map +1 -1
  44. package/build/comments-query-loop/edit.js +22 -1
  45. package/build/comments-query-loop/edit.js.map +1 -1
  46. package/build/comments-query-loop/index.js +1 -23
  47. package/build/comments-query-loop/index.js.map +1 -1
  48. package/build/cover/edit.js +58 -39
  49. package/build/cover/edit.js.map +1 -1
  50. package/build/cover/index.js +5 -0
  51. package/build/cover/index.js.map +1 -1
  52. package/build/cover/save.js +3 -2
  53. package/build/cover/save.js.map +1 -1
  54. package/build/embed/variations.js +2 -2
  55. package/build/embed/variations.js.map +1 -1
  56. package/build/gallery/edit.js +18 -5
  57. package/build/gallery/edit.js.map +1 -1
  58. package/build/gallery/gallery.js +1 -1
  59. package/build/gallery/gallery.js.map +1 -1
  60. package/build/gallery/gap-styles.js +35 -0
  61. package/build/gallery/gap-styles.js.map +1 -0
  62. package/build/gallery/index.js +18 -1
  63. package/build/gallery/index.js.map +1 -1
  64. package/build/group/edit.js +3 -1
  65. package/build/group/edit.js.map +1 -1
  66. package/build/group/index.js +1 -1
  67. package/build/group/variations.js +30 -9
  68. package/build/group/variations.js.map +1 -1
  69. package/build/heading/edit.js +1 -1
  70. package/build/heading/edit.js.map +1 -1
  71. package/build/html/edit.js +3 -2
  72. package/build/html/edit.js.map +1 -1
  73. package/build/image/edit.native.js +8 -10
  74. package/build/image/edit.native.js.map +1 -1
  75. package/build/image/image.js +3 -1
  76. package/build/image/image.js.map +1 -1
  77. package/build/index.js +10 -4
  78. package/build/index.js.map +1 -1
  79. package/build/list/deprecated.js +2 -2
  80. package/build/list/deprecated.js.map +1 -1
  81. package/build/list/index.js +5 -7
  82. package/build/list/index.js.map +1 -1
  83. package/build/list/v2/deprecated.js +117 -0
  84. package/build/list/v2/deprecated.js.map +1 -0
  85. package/build/list/v2/edit.js +188 -0
  86. package/build/list/v2/edit.js.map +1 -0
  87. package/build/list/v2/index.js +36 -0
  88. package/build/list/v2/index.js.map +1 -0
  89. package/build/list/v2/migrate.js +85 -0
  90. package/build/list/v2/migrate.js.map +1 -0
  91. package/build/list/v2/save.js +34 -0
  92. package/build/list/v2/save.js.map +1 -0
  93. package/build/list/v2/transforms.js +121 -0
  94. package/build/list/v2/transforms.js.map +1 -0
  95. package/build/list-item/edit.js +96 -0
  96. package/build/list-item/edit.js.map +1 -0
  97. package/build/list-item/hooks/index.js +32 -0
  98. package/build/list-item/hooks/index.js.map +1 -0
  99. package/build/list-item/hooks/use-enter.js +93 -0
  100. package/build/list-item/hooks/use-enter.js.map +1 -0
  101. package/build/list-item/hooks/use-indent-list-item.js +74 -0
  102. package/build/list-item/hooks/use-indent-list-item.js.map +1 -0
  103. package/build/list-item/hooks/use-outdent-list-item.js +77 -0
  104. package/build/list-item/hooks/use-outdent-list-item.js.map +1 -0
  105. package/build/list-item/index.js +67 -0
  106. package/build/list-item/index.js.map +1 -0
  107. package/build/list-item/save.js +23 -0
  108. package/build/list-item/save.js.map +1 -0
  109. package/build/list-item/utils.js +16 -0
  110. package/build/list-item/utils.js.map +1 -0
  111. package/build/media-text/edit.js +3 -1
  112. package/build/media-text/edit.js.map +1 -1
  113. package/build/media-text/media-container.native.js +1 -16
  114. package/build/media-text/media-container.native.js.map +1 -1
  115. package/build/navigation/edit/index.js +36 -17
  116. package/build/navigation/edit/index.js.map +1 -1
  117. package/build/navigation/edit/navigation-menu-delete-control.js +1 -1
  118. package/build/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  119. package/build/navigation/edit/unsaved-inner-blocks.js +34 -7
  120. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  121. package/build/navigation/index.js +9 -1
  122. package/build/navigation/index.js.map +1 -1
  123. package/build/navigation/use-navigation-entities.js +26 -54
  124. package/build/navigation/use-navigation-entities.js.map +1 -1
  125. package/build/navigation/use-navigation-menu.js +1 -0
  126. package/build/navigation/use-navigation-menu.js.map +1 -1
  127. package/build/navigation-link/edit.js +95 -37
  128. package/build/navigation-link/edit.js.map +1 -1
  129. package/build/navigation-link/index.js +1 -1
  130. package/build/navigation-submenu/edit.js +5 -9
  131. package/build/navigation-submenu/edit.js.map +1 -1
  132. package/build/navigation-submenu/index.js +1 -1
  133. package/build/post-comment/edit.js +2 -2
  134. package/build/post-comment/edit.js.map +1 -1
  135. package/build/post-comments/index.js +4 -3
  136. package/build/post-comments/index.js.map +1 -1
  137. package/build/post-comments-form/edit.js +3 -2
  138. package/build/post-comments-form/edit.js.map +1 -1
  139. package/build/post-date/edit.js +31 -37
  140. package/build/post-date/edit.js.map +1 -1
  141. package/build/post-featured-image/edit.js +2 -1
  142. package/build/post-featured-image/edit.js.map +1 -1
  143. package/build/post-featured-image/index.js +1 -1
  144. package/build/post-template/edit.js +7 -2
  145. package/build/post-template/edit.js.map +1 -1
  146. package/build/post-terms/edit.js +3 -1
  147. package/build/post-terms/edit.js.map +1 -1
  148. package/build/post-terms/variations.js +1 -1
  149. package/build/post-terms/variations.js.map +1 -1
  150. package/build/pullquote/edit.js +5 -3
  151. package/build/pullquote/edit.js.map +1 -1
  152. package/build/query/edit/index.js +84 -22
  153. package/build/query/edit/index.js.map +1 -1
  154. package/build/query/edit/query-placeholder.js +7 -14
  155. package/build/query/edit/query-placeholder.js.map +1 -1
  156. package/build/query/edit/query-toolbar.js +6 -1
  157. package/build/query/edit/query-toolbar.js.map +1 -1
  158. package/build/query/variations.js +4 -4
  159. package/build/query/variations.js.map +1 -1
  160. package/build/query-no-results/edit.js +28 -0
  161. package/build/query-no-results/edit.js.map +1 -0
  162. package/build/query-no-results/index.js +54 -0
  163. package/build/query-no-results/index.js.map +1 -0
  164. package/build/query-no-results/save.js +18 -0
  165. package/build/query-no-results/save.js.map +1 -0
  166. package/build/query-pagination/edit.js +1 -1
  167. package/build/query-pagination/edit.js.map +1 -1
  168. package/build/query-pagination-numbers/index.js +19 -1
  169. package/build/query-pagination-numbers/index.js.map +1 -1
  170. package/build/quote/index.js +15 -8
  171. package/build/quote/index.js.map +1 -1
  172. package/build/quote/v2/deprecated.js +133 -0
  173. package/build/quote/v2/deprecated.js.map +1 -0
  174. package/build/quote/v2/edit.js +131 -0
  175. package/build/quote/v2/edit.js.map +1 -0
  176. package/build/quote/v2/index.js +49 -0
  177. package/build/quote/v2/index.js.map +1 -0
  178. package/build/quote/v2/save.js +43 -0
  179. package/build/quote/v2/save.js.map +1 -0
  180. package/build/quote/v2/transforms.js +156 -0
  181. package/build/quote/v2/transforms.js.map +1 -0
  182. package/build/read-more/index.js +1 -1
  183. package/build/rss/edit.js +6 -1
  184. package/build/rss/edit.js.map +1 -1
  185. package/build/search/edit.js +2 -3
  186. package/build/search/edit.js.map +1 -1
  187. package/build/separator/deprecated.js +83 -0
  188. package/build/separator/deprecated.js.map +1 -0
  189. package/build/separator/edit.js +31 -23
  190. package/build/separator/edit.js.map +1 -1
  191. package/build/separator/index.js +17 -7
  192. package/build/separator/index.js.map +1 -1
  193. package/build/separator/save.js +18 -13
  194. package/build/separator/save.js.map +1 -1
  195. package/build/separator/use-deprecated-opacity.js +39 -0
  196. package/build/separator/use-deprecated-opacity.js.map +1 -0
  197. package/build/site-logo/edit.js +3 -2
  198. package/build/site-logo/edit.js.map +1 -1
  199. package/build/site-logo/index.js +1 -1
  200. package/build/social-links/edit.js +14 -3
  201. package/build/social-links/edit.js.map +1 -1
  202. package/build/social-links/index.js +2 -1
  203. package/build/social-links/index.js.map +1 -1
  204. package/build/spacer/controls.js +6 -16
  205. package/build/spacer/controls.js.map +1 -1
  206. package/build/spacer/controls.native.js +3 -1
  207. package/build/spacer/controls.native.js.map +1 -1
  208. package/build/spacer/edit.js +4 -5
  209. package/build/spacer/edit.js.map +1 -1
  210. package/build/table/deprecated.js +1 -1
  211. package/build/table/deprecated.js.map +1 -1
  212. package/build/tag-cloud/edit.js +58 -2
  213. package/build/tag-cloud/edit.js.map +1 -1
  214. package/build/tag-cloud/index.js +8 -0
  215. package/build/tag-cloud/index.js.map +1 -1
  216. package/build/template-part/edit/utils/hooks.js +5 -2
  217. package/build/template-part/edit/utils/hooks.js.map +1 -1
  218. package/build-module/archives/edit.js +22 -2
  219. package/build-module/archives/edit.js.map +1 -1
  220. package/build-module/archives/index.js +5 -1
  221. package/build-module/archives/index.js.map +1 -1
  222. package/build-module/audio/edit.native.js +0 -5
  223. package/build-module/audio/edit.native.js.map +1 -1
  224. package/build-module/avatar/edit.js +195 -0
  225. package/build-module/avatar/edit.js.map +1 -0
  226. package/build-module/avatar/hooks.js +99 -0
  227. package/build-module/avatar/hooks.js.map +1 -0
  228. package/build-module/avatar/index.js +70 -0
  229. package/build-module/avatar/index.js.map +1 -0
  230. package/build-module/avatar/user-control.js +52 -0
  231. package/build-module/avatar/user-control.js.map +1 -0
  232. package/build-module/block/edit.js +4 -3
  233. package/build-module/block/edit.js.map +1 -1
  234. package/build-module/column/index.js +3 -1
  235. package/build-module/column/index.js.map +1 -1
  236. package/build-module/comment-author-avatar/index.js +4 -3
  237. package/build-module/comment-author-avatar/index.js.map +1 -1
  238. package/build-module/comment-author-name/index.js +7 -3
  239. package/build-module/comment-author-name/index.js.map +1 -1
  240. package/build-module/comment-content/index.js +1 -1
  241. package/build-module/comment-date/edit.js +13 -30
  242. package/build-module/comment-date/edit.js.map +1 -1
  243. package/build-module/comment-date/index.js +7 -3
  244. package/build-module/comment-date/index.js.map +1 -1
  245. package/build-module/comment-edit-link/index.js +5 -1
  246. package/build-module/comment-edit-link/index.js.map +1 -1
  247. package/build-module/comment-reply-link/index.js +5 -1
  248. package/build-module/comment-reply-link/index.js.map +1 -1
  249. package/build-module/comment-template/edit.js +86 -66
  250. package/build-module/comment-template/edit.js.map +1 -1
  251. package/build-module/comment-template/hooks.js +7 -23
  252. package/build-module/comment-template/hooks.js.map +1 -1
  253. package/build-module/comment-template/index.js +2 -2
  254. package/build-module/comments-pagination-next/index.js +2 -2
  255. package/build-module/comments-pagination-numbers/index.js +1 -1
  256. package/build-module/comments-pagination-previous/index.js +1 -1
  257. package/build-module/comments-query-loop/edit/comments-inspector-controls.js +4 -70
  258. package/build-module/comments-query-loop/edit/comments-inspector-controls.js.map +1 -1
  259. package/build-module/comments-query-loop/edit.js +22 -1
  260. package/build-module/comments-query-loop/edit.js.map +1 -1
  261. package/build-module/comments-query-loop/index.js +1 -23
  262. package/build-module/comments-query-loop/index.js.map +1 -1
  263. package/build-module/cover/edit.js +58 -41
  264. package/build-module/cover/edit.js.map +1 -1
  265. package/build-module/cover/index.js +5 -0
  266. package/build-module/cover/index.js.map +1 -1
  267. package/build-module/cover/save.js +3 -2
  268. package/build-module/cover/save.js.map +1 -1
  269. package/build-module/embed/variations.js +2 -2
  270. package/build-module/embed/variations.js.map +1 -1
  271. package/build-module/gallery/edit.js +17 -5
  272. package/build-module/gallery/edit.js.map +1 -1
  273. package/build-module/gallery/gallery.js +1 -1
  274. package/build-module/gallery/gallery.js.map +1 -1
  275. package/build-module/gallery/gap-styles.js +28 -0
  276. package/build-module/gallery/gap-styles.js.map +1 -0
  277. package/build-module/gallery/index.js +18 -1
  278. package/build-module/gallery/index.js.map +1 -1
  279. package/build-module/group/edit.js +3 -1
  280. package/build-module/group/edit.js.map +1 -1
  281. package/build-module/group/index.js +1 -1
  282. package/build-module/group/variations.js +29 -9
  283. package/build-module/group/variations.js.map +1 -1
  284. package/build-module/heading/edit.js +1 -1
  285. package/build-module/heading/edit.js.map +1 -1
  286. package/build-module/html/edit.js +4 -3
  287. package/build-module/html/edit.js.map +1 -1
  288. package/build-module/image/edit.native.js +8 -10
  289. package/build-module/image/edit.native.js.map +1 -1
  290. package/build-module/image/image.js +3 -1
  291. package/build-module/image/image.js.map +1 -1
  292. package/build-module/index.js +7 -4
  293. package/build-module/index.js.map +1 -1
  294. package/build-module/list/deprecated.js +2 -2
  295. package/build-module/list/deprecated.js.map +1 -1
  296. package/build-module/list/index.js +5 -1
  297. package/build-module/list/index.js.map +1 -1
  298. package/build-module/list/v2/deprecated.js +104 -0
  299. package/build-module/list/v2/deprecated.js.map +1 -0
  300. package/build-module/list/v2/edit.js +168 -0
  301. package/build-module/list/v2/edit.js.map +1 -0
  302. package/build-module/list/v2/index.js +21 -0
  303. package/build-module/list/v2/index.js.map +1 -0
  304. package/build-module/list/v2/migrate.js +77 -0
  305. package/build-module/list/v2/migrate.js.map +1 -0
  306. package/build-module/list/v2/save.js +23 -0
  307. package/build-module/list/v2/save.js.map +1 -0
  308. package/build-module/list/v2/transforms.js +111 -0
  309. package/build-module/list/v2/transforms.js.map +1 -0
  310. package/build-module/list-item/edit.js +83 -0
  311. package/build-module/list-item/edit.js.map +1 -0
  312. package/build-module/list-item/hooks/index.js +4 -0
  313. package/build-module/list-item/hooks/index.js.map +1 -0
  314. package/build-module/list-item/hooks/use-enter.js +77 -0
  315. package/build-module/list-item/hooks/use-enter.js.map +1 -0
  316. package/build-module/list-item/hooks/use-indent-list-item.js +62 -0
  317. package/build-module/list-item/hooks/use-indent-list-item.js.map +1 -0
  318. package/build-module/list-item/hooks/use-outdent-list-item.js +66 -0
  319. package/build-module/list-item/hooks/use-outdent-list-item.js.map +1 -0
  320. package/build-module/list-item/index.js +53 -0
  321. package/build-module/list-item/index.js.map +1 -0
  322. package/build-module/list-item/save.js +15 -0
  323. package/build-module/list-item/save.js.map +1 -0
  324. package/build-module/list-item/utils.js +8 -0
  325. package/build-module/list-item/utils.js.map +1 -0
  326. package/build-module/media-text/edit.js +3 -1
  327. package/build-module/media-text/edit.js.map +1 -1
  328. package/build-module/media-text/media-container.native.js +1 -14
  329. package/build-module/media-text/media-container.native.js.map +1 -1
  330. package/build-module/navigation/edit/index.js +37 -17
  331. package/build-module/navigation/edit/index.js.map +1 -1
  332. package/build-module/navigation/edit/navigation-menu-delete-control.js +1 -1
  333. package/build-module/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  334. package/build-module/navigation/edit/unsaved-inner-blocks.js +35 -8
  335. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  336. package/build-module/navigation/index.js +9 -1
  337. package/build-module/navigation/index.js.map +1 -1
  338. package/build-module/navigation/use-navigation-entities.js +27 -54
  339. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  340. package/build-module/navigation/use-navigation-menu.js +1 -0
  341. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  342. package/build-module/navigation-link/edit.js +95 -36
  343. package/build-module/navigation-link/edit.js.map +1 -1
  344. package/build-module/navigation-link/index.js +1 -1
  345. package/build-module/navigation-submenu/edit.js +6 -10
  346. package/build-module/navigation-submenu/edit.js.map +1 -1
  347. package/build-module/navigation-submenu/index.js +1 -1
  348. package/build-module/post-comment/edit.js +2 -2
  349. package/build-module/post-comment/edit.js.map +1 -1
  350. package/build-module/post-comments/index.js +4 -3
  351. package/build-module/post-comments/index.js.map +1 -1
  352. package/build-module/post-comments-form/edit.js +3 -2
  353. package/build-module/post-comments-form/edit.js.map +1 -1
  354. package/build-module/post-date/edit.js +32 -43
  355. package/build-module/post-date/edit.js.map +1 -1
  356. package/build-module/post-featured-image/edit.js +2 -1
  357. package/build-module/post-featured-image/edit.js.map +1 -1
  358. package/build-module/post-featured-image/index.js +1 -1
  359. package/build-module/post-template/edit.js +7 -2
  360. package/build-module/post-template/edit.js.map +1 -1
  361. package/build-module/post-terms/edit.js +4 -2
  362. package/build-module/post-terms/edit.js.map +1 -1
  363. package/build-module/post-terms/variations.js +3 -3
  364. package/build-module/post-terms/variations.js.map +1 -1
  365. package/build-module/pullquote/edit.js +6 -3
  366. package/build-module/pullquote/edit.js.map +1 -1
  367. package/build-module/query/edit/index.js +87 -26
  368. package/build-module/query/edit/index.js.map +1 -1
  369. package/build-module/query/edit/query-placeholder.js +8 -15
  370. package/build-module/query/edit/query-placeholder.js.map +1 -1
  371. package/build-module/query/edit/query-toolbar.js +6 -1
  372. package/build-module/query/edit/query-toolbar.js.map +1 -1
  373. package/build-module/query/variations.js +4 -4
  374. package/build-module/query/variations.js.map +1 -1
  375. package/build-module/query-no-results/edit.js +18 -0
  376. package/build-module/query-no-results/edit.js.map +1 -0
  377. package/build-module/query-no-results/index.js +40 -0
  378. package/build-module/query-no-results/index.js.map +1 -0
  379. package/build-module/query-no-results/save.js +10 -0
  380. package/build-module/query-no-results/save.js.map +1 -0
  381. package/build-module/query-pagination/edit.js +1 -1
  382. package/build-module/query-pagination/edit.js.map +1 -1
  383. package/build-module/query-pagination-numbers/index.js +19 -1
  384. package/build-module/query-pagination-numbers/index.js.map +1 -1
  385. package/build-module/quote/index.js +13 -1
  386. package/build-module/quote/index.js.map +1 -1
  387. package/build-module/quote/v2/deprecated.js +116 -0
  388. package/build-module/quote/v2/deprecated.js.map +1 -0
  389. package/build-module/quote/v2/edit.js +115 -0
  390. package/build-module/quote/v2/edit.js.map +1 -0
  391. package/build-module/quote/v2/index.js +33 -0
  392. package/build-module/quote/v2/index.js.map +1 -0
  393. package/build-module/quote/v2/save.js +30 -0
  394. package/build-module/quote/v2/save.js.map +1 -0
  395. package/build-module/quote/v2/transforms.js +147 -0
  396. package/build-module/quote/v2/transforms.js.map +1 -0
  397. package/build-module/read-more/index.js +1 -1
  398. package/build-module/rss/edit.js +5 -1
  399. package/build-module/rss/edit.js.map +1 -1
  400. package/build-module/search/edit.js +2 -3
  401. package/build-module/search/edit.js.map +1 -1
  402. package/build-module/separator/deprecated.js +70 -0
  403. package/build-module/separator/deprecated.js.map +1 -0
  404. package/build-module/separator/edit.js +31 -22
  405. package/build-module/separator/edit.js.map +1 -1
  406. package/build-module/separator/index.js +16 -7
  407. package/build-module/separator/index.js.map +1 -1
  408. package/build-module/separator/save.js +19 -14
  409. package/build-module/separator/save.js.map +1 -1
  410. package/build-module/separator/use-deprecated-opacity.js +30 -0
  411. package/build-module/separator/use-deprecated-opacity.js.map +1 -0
  412. package/build-module/site-logo/edit.js +3 -2
  413. package/build-module/site-logo/edit.js.map +1 -1
  414. package/build-module/site-logo/index.js +1 -1
  415. package/build-module/social-links/edit.js +15 -4
  416. package/build-module/social-links/edit.js.map +1 -1
  417. package/build-module/social-links/index.js +2 -1
  418. package/build-module/social-links/index.js.map +1 -1
  419. package/build-module/spacer/controls.js +8 -19
  420. package/build-module/spacer/controls.js.map +1 -1
  421. package/build-module/spacer/controls.native.js +2 -1
  422. package/build-module/spacer/controls.native.js.map +1 -1
  423. package/build-module/spacer/edit.js +3 -3
  424. package/build-module/spacer/edit.js.map +1 -1
  425. package/build-module/table/deprecated.js +1 -1
  426. package/build-module/table/deprecated.js.map +1 -1
  427. package/build-module/tag-cloud/edit.js +60 -4
  428. package/build-module/tag-cloud/edit.js.map +1 -1
  429. package/build-module/tag-cloud/index.js +8 -0
  430. package/build-module/tag-cloud/index.js.map +1 -1
  431. package/build-module/template-part/edit/utils/hooks.js +5 -2
  432. package/build-module/template-part/edit/utils/hooks.js.map +1 -1
  433. package/build-style/avatar/editor-rtl.css +83 -0
  434. package/build-style/avatar/editor.css +83 -0
  435. package/build-style/avatar/style-rtl.css +79 -0
  436. package/build-style/avatar/style.css +79 -0
  437. package/build-style/editor-rtl.css +92 -11
  438. package/build-style/editor.css +92 -11
  439. package/build-style/gallery/editor-rtl.css +0 -1
  440. package/build-style/gallery/editor.css +0 -1
  441. package/build-style/gallery/style-rtl.css +102 -169
  442. package/build-style/gallery/style.css +102 -169
  443. package/build-style/group/editor-rtl.css +26 -0
  444. package/build-style/group/editor.css +26 -0
  445. package/build-style/heading/style-rtl.css +0 -8
  446. package/build-style/heading/style.css +0 -8
  447. package/build-style/image/style-rtl.css +2 -0
  448. package/build-style/image/style.css +2 -0
  449. package/build-style/list/style-rtl.css +1 -1
  450. package/build-style/list/style.css +1 -1
  451. package/build-style/navigation/style-rtl.css +11 -9
  452. package/build-style/navigation/style.css +11 -9
  453. package/build-style/navigation-link/editor-rtl.css +13 -0
  454. package/build-style/navigation-link/editor.css +13 -0
  455. package/build-style/navigation-link/style-rtl.css +3 -0
  456. package/build-style/navigation-link/style.css +3 -0
  457. package/build-style/paragraph/style-rtl.css +0 -4
  458. package/build-style/paragraph/style.css +0 -4
  459. package/build-style/pullquote/style-rtl.css +0 -4
  460. package/build-style/pullquote/style.css +0 -4
  461. package/build-style/query/editor-rtl.css +39 -0
  462. package/build-style/query/editor.css +39 -0
  463. package/build-style/quote/style-rtl.css +1 -0
  464. package/build-style/quote/style.css +1 -0
  465. package/build-style/reset-rtl.css +1 -1
  466. package/build-style/reset.css +1 -1
  467. package/build-style/separator/editor-rtl.css +3 -0
  468. package/build-style/separator/editor.css +3 -0
  469. package/build-style/separator/theme-rtl.css +7 -1
  470. package/build-style/separator/theme.css +7 -1
  471. package/build-style/site-logo/editor-rtl.css +3 -1
  472. package/build-style/site-logo/editor.css +3 -1
  473. package/build-style/style-rtl.css +124 -195
  474. package/build-style/style.css +124 -195
  475. package/build-style/template-part/editor-rtl.css +0 -9
  476. package/build-style/template-part/editor.css +0 -9
  477. package/build-style/theme-rtl.css +7 -1
  478. package/build-style/theme.css +7 -1
  479. package/package.json +28 -28
  480. package/src/archives/block.json +5 -1
  481. package/src/archives/edit.js +20 -2
  482. package/src/archives/index.php +4 -4
  483. package/src/audio/edit.native.js +0 -5
  484. package/src/avatar/block.json +53 -0
  485. package/src/avatar/edit.js +230 -0
  486. package/src/avatar/editor.scss +9 -0
  487. package/src/avatar/hooks.js +96 -0
  488. package/src/avatar/index.js +18 -0
  489. package/src/avatar/index.php +146 -0
  490. package/src/avatar/style.scss +5 -0
  491. package/src/avatar/user-control.js +56 -0
  492. package/src/block/edit.js +21 -11
  493. package/src/column/block.json +3 -1
  494. package/src/comment-author-avatar/block.json +4 -3
  495. package/src/comment-author-name/block.json +7 -3
  496. package/src/comment-author-name/index.php +3 -0
  497. package/src/comment-content/block.json +1 -1
  498. package/src/comment-date/block.json +7 -3
  499. package/src/comment-date/edit.js +20 -30
  500. package/src/comment-date/index.php +6 -1
  501. package/src/comment-edit-link/block.json +5 -1
  502. package/src/comment-edit-link/index.php +3 -0
  503. package/src/comment-reply-link/block.json +5 -1
  504. package/src/comment-reply-link/index.php +4 -1
  505. package/src/comment-template/block.json +2 -8
  506. package/src/comment-template/edit.js +77 -64
  507. package/src/comment-template/hooks.js +8 -24
  508. package/src/comment-template/index.php +1 -3
  509. package/src/comments-pagination-next/block.json +2 -9
  510. package/src/comments-pagination-numbers/block.json +2 -8
  511. package/src/comments-pagination-previous/block.json +2 -2
  512. package/src/comments-query-loop/block.json +1 -23
  513. package/src/comments-query-loop/edit/comments-inspector-controls.js +2 -83
  514. package/src/comments-query-loop/edit.js +54 -1
  515. package/src/cover/block.json +5 -0
  516. package/src/cover/edit.js +103 -60
  517. package/src/cover/index.php +85 -0
  518. package/src/cover/save.js +18 -14
  519. package/src/editor.scss +1 -0
  520. package/src/embed/variations.js +2 -2
  521. package/src/gallery/block.json +18 -1
  522. package/src/gallery/deprecated.scss +2 -2
  523. package/src/gallery/edit.js +15 -8
  524. package/src/gallery/editor.scss +0 -1
  525. package/src/gallery/gallery.js +8 -7
  526. package/src/gallery/gap-styles.js +26 -0
  527. package/src/gallery/index.php +43 -1
  528. package/src/gallery/style.scss +11 -44
  529. package/src/group/block.json +1 -1
  530. package/src/group/edit.js +4 -1
  531. package/src/group/editor.scss +31 -0
  532. package/src/group/variations.js +21 -4
  533. package/src/heading/edit.js +1 -1
  534. package/src/heading/style.scss +0 -3
  535. package/src/html/edit.js +22 -30
  536. package/src/image/edit.native.js +7 -11
  537. package/src/image/image.js +4 -1
  538. package/src/image/style.scss +3 -0
  539. package/src/index.js +19 -14
  540. package/src/list/deprecated.js +2 -2
  541. package/src/list/index.js +6 -1
  542. package/src/list/style.scss +1 -2
  543. package/src/list/test/migrate.js +159 -0
  544. package/src/list/v2/deprecated.js +89 -0
  545. package/src/list/v2/edit.js +186 -0
  546. package/src/list/v2/index.js +22 -0
  547. package/src/list/v2/migrate.js +87 -0
  548. package/src/list/v2/save.js +18 -0
  549. package/src/list/v2/transforms.js +116 -0
  550. package/src/list-item/block.json +26 -0
  551. package/src/list-item/edit.js +93 -0
  552. package/src/list-item/hooks/index.js +3 -0
  553. package/src/list-item/hooks/use-enter.js +94 -0
  554. package/src/list-item/hooks/use-indent-list-item.js +89 -0
  555. package/src/list-item/hooks/use-outdent-list-item.js +95 -0
  556. package/src/list-item/index.js +27 -0
  557. package/src/list-item/save.js +13 -0
  558. package/src/list-item/utils.js +14 -0
  559. package/src/media-text/edit.js +1 -1
  560. package/src/media-text/media-container.native.js +1 -14
  561. package/src/navigation/block.json +9 -1
  562. package/src/navigation/edit/index.js +50 -14
  563. package/src/navigation/edit/navigation-menu-delete-control.js +1 -1
  564. package/src/navigation/edit/unsaved-inner-blocks.js +57 -8
  565. package/src/navigation/index.php +28 -3
  566. package/src/navigation/style.scss +15 -13
  567. package/src/navigation/use-navigation-entities.js +37 -73
  568. package/src/navigation/use-navigation-menu.js +4 -0
  569. package/src/navigation-link/block.json +1 -0
  570. package/src/navigation-link/edit.js +156 -64
  571. package/src/navigation-link/editor.scss +11 -0
  572. package/src/navigation-link/index.php +8 -0
  573. package/src/navigation-link/style.scss +6 -0
  574. package/src/navigation-submenu/block.json +1 -0
  575. package/src/navigation-submenu/edit.js +7 -9
  576. package/src/paragraph/style.scss +0 -5
  577. package/src/post-author/index.php +0 -1
  578. package/src/post-comment/edit.js +2 -2
  579. package/src/post-comments/block.json +4 -3
  580. package/src/post-comments-form/edit.js +6 -3
  581. package/src/post-date/edit.js +63 -52
  582. package/src/post-date/index.php +1 -1
  583. package/src/post-date/test/edit.js +17 -0
  584. package/src/post-featured-image/block.json +1 -1
  585. package/src/post-featured-image/edit.js +9 -1
  586. package/src/post-featured-image/index.php +2 -1
  587. package/src/post-template/edit.js +7 -1
  588. package/src/post-terms/edit.js +4 -1
  589. package/src/post-terms/variations.js +3 -3
  590. package/src/pullquote/edit.js +4 -3
  591. package/src/pullquote/style.scss +0 -5
  592. package/src/query/edit/index.js +125 -26
  593. package/src/query/edit/query-placeholder.js +3 -13
  594. package/src/query/edit/query-toolbar.js +6 -0
  595. package/src/query/editor.scss +38 -0
  596. package/src/query/variations.js +4 -0
  597. package/src/query-no-results/block.json +20 -0
  598. package/src/query-no-results/edit.js +28 -0
  599. package/src/query-no-results/index.js +20 -0
  600. package/src/query-no-results/index.php +59 -0
  601. package/src/query-no-results/save.js +8 -0
  602. package/src/query-pagination/edit.js +1 -1
  603. package/src/query-pagination/index.php +9 -2
  604. package/src/query-pagination-numbers/block.json +19 -1
  605. package/src/quote/block.json +8 -0
  606. package/src/quote/index.js +6 -1
  607. package/src/quote/style.scss +1 -0
  608. package/src/quote/v2/deprecated.js +107 -0
  609. package/src/quote/v2/edit.js +136 -0
  610. package/src/quote/v2/index.js +36 -0
  611. package/src/quote/v2/save.js +26 -0
  612. package/src/quote/v2/test/migrate.js +92 -0
  613. package/src/quote/v2/transforms.js +155 -0
  614. package/src/read-more/block.json +1 -1
  615. package/src/reset.scss +1 -1
  616. package/src/rss/edit.js +3 -1
  617. package/src/rss/index.php +14 -1
  618. package/src/search/edit.js +1 -2
  619. package/src/separator/block.json +13 -6
  620. package/src/separator/deprecated.js +57 -0
  621. package/src/separator/deprecated.scss +6 -0
  622. package/src/separator/edit.js +36 -14
  623. package/src/separator/editor.scss +6 -0
  624. package/src/separator/index.js +2 -0
  625. package/src/separator/save.js +22 -14
  626. package/src/separator/test/edit.js +113 -0
  627. package/src/separator/theme.scss +7 -1
  628. package/src/separator/use-deprecated-opacity.js +41 -0
  629. package/src/site-logo/block.json +1 -1
  630. package/src/site-logo/edit.js +2 -1
  631. package/src/site-logo/editor.scss +3 -1
  632. package/src/site-logo/index.php +0 -4
  633. package/src/social-link/index.php +1 -2
  634. package/src/social-links/block.json +2 -1
  635. package/src/social-links/edit.js +15 -5
  636. package/src/spacer/controls.js +12 -18
  637. package/src/spacer/controls.native.js +2 -1
  638. package/src/spacer/edit.js +3 -6
  639. package/src/spacer/test/__snapshots__/index.native.js.snap +31 -0
  640. package/src/spacer/test/index.native.js +180 -0
  641. package/src/style.scss +1 -0
  642. package/src/table/deprecated.js +5 -1
  643. package/src/tag-cloud/block.json +8 -0
  644. package/src/tag-cloud/edit.js +82 -2
  645. package/src/tag-cloud/index.php +6 -0
  646. package/src/template-part/edit/utils/hooks.js +6 -1
  647. package/src/template-part/editor.scss +0 -10
  648. package/build/navigation/edit/use-list-view-modal.js +0 -73
  649. package/build/navigation/edit/use-list-view-modal.js.map +0 -1
  650. package/build/separator/separator-settings.js +0 -36
  651. package/build/separator/separator-settings.js.map +0 -1
  652. package/build-module/navigation/edit/use-list-view-modal.js +0 -63
  653. package/build-module/navigation/edit/use-list-view-modal.js.map +0 -1
  654. package/build-module/separator/separator-settings.js +0 -27
  655. package/build-module/separator/separator-settings.js.map +0 -1
  656. package/src/navigation/edit/use-list-view-modal.js +0 -72
  657. package/src/separator/separator-settings.js +0 -24
@@ -10,7 +10,7 @@ import { useInnerBlocksProps } from '@wordpress/block-editor';
10
10
  import { Disabled, Spinner } from '@wordpress/components';
11
11
  import { store as coreStore } from '@wordpress/core-data';
12
12
  import { useSelect } from '@wordpress/data';
13
- import { useContext, useEffect, useRef } from '@wordpress/element';
13
+ import { useContext, useEffect, useRef, useMemo } from '@wordpress/element';
14
14
 
15
15
  /**
16
16
  * Internal dependencies
@@ -25,6 +25,22 @@ const DRAFT_MENU_PARAMS = [
25
25
  { status: 'draft', per_page: -1 },
26
26
  ];
27
27
 
28
+ const DEFAULT_BLOCK = {
29
+ name: 'core/navigation-link',
30
+ };
31
+
32
+ const ALLOWED_BLOCKS = [
33
+ 'core/navigation-link',
34
+ 'core/search',
35
+ 'core/social-links',
36
+ 'core/page-list',
37
+ 'core/spacer',
38
+ 'core/home-link',
39
+ 'core/site-title',
40
+ 'core/site-logo',
41
+ 'core/navigation-submenu',
42
+ ];
43
+
28
44
  export default function UnsavedInnerBlocks( {
29
45
  blockProps,
30
46
  blocks,
@@ -33,6 +49,33 @@ export default function UnsavedInnerBlocks( {
33
49
  onSave,
34
50
  hasSelection,
35
51
  } ) {
52
+ const originalBlocks = useRef();
53
+
54
+ useEffect( () => {
55
+ // Initially store the uncontrolled inner blocks for
56
+ // dirty state comparison.
57
+ if ( ! originalBlocks?.current ) {
58
+ originalBlocks.current = blocks;
59
+ }
60
+ }, [ blocks ] );
61
+
62
+ // If the current inner blocks object is different in any way
63
+ // from the original inner blocks from the post content then the
64
+ // user has made changes to the inner blocks. At this point the inner
65
+ // blocks can be considered "dirty".
66
+ const innerBlocksAreDirty = blocks !== originalBlocks.current;
67
+
68
+ const shouldDirectInsert = useMemo(
69
+ () =>
70
+ blocks.every(
71
+ ( { name } ) =>
72
+ name === 'core/navigation-link' ||
73
+ name === 'core/navigation-submenu' ||
74
+ name === 'core/page-list'
75
+ ),
76
+ [ blocks ]
77
+ );
78
+
36
79
  // The block will be disabled in a block preview, use this as a way of
37
80
  // avoiding the side-effects of this component for block previews.
38
81
  const isDisabled = useContext( Disabled.Context );
@@ -40,6 +83,9 @@ export default function UnsavedInnerBlocks( {
40
83
 
41
84
  const innerBlocksProps = useInnerBlocksProps( blockProps, {
42
85
  renderAppender: hasSelection ? undefined : false,
86
+ allowedBlocks: ALLOWED_BLOCKS,
87
+ __experimentalDefaultBlock: DEFAULT_BLOCK,
88
+ __experimentalDirectInsert: shouldDirectInsert,
43
89
  } );
44
90
 
45
91
  const {
@@ -97,7 +143,8 @@ export default function UnsavedInnerBlocks( {
97
143
  savingLock.current ||
98
144
  ! hasResolvedDraftNavigationMenus ||
99
145
  ! hasResolvedNavigationMenus ||
100
- ! hasSelection
146
+ ! hasSelection ||
147
+ ! innerBlocksAreDirty
101
148
  ) {
102
149
  return;
103
150
  }
@@ -118,19 +165,21 @@ export default function UnsavedInnerBlocks( {
118
165
  blocks,
119
166
  ] );
120
167
 
168
+ const Wrapper = isSaving ? Disabled : 'div';
169
+
121
170
  return (
122
- <div className="wp-block-navigation__unsaved-changes">
123
- <Disabled
171
+ <Wrapper className="wp-block-navigation__unsaved-changes">
172
+ <div
124
173
  className={ classnames(
125
174
  'wp-block-navigation__unsaved-changes-overlay',
126
175
  {
127
- 'is-saving': hasSelection,
176
+ 'is-saving': isSaving,
128
177
  }
129
178
  ) }
130
179
  >
131
180
  <div { ...innerBlocksProps } />
132
- </Disabled>
133
- { hasSelection && <Spinner /> }
134
- </div>
181
+ </div>
182
+ { isSaving && <Spinner /> }
183
+ </Wrapper>
135
184
  );
136
185
  }
@@ -361,10 +361,14 @@ function block_core_navigation_get_fallback_blocks() {
361
361
  */
362
362
  function render_block_core_navigation( $attributes, $content, $block ) {
363
363
 
364
+ static $seen_menu_names = array();
365
+
364
366
  // Flag used to indicate whether the rendered output is considered to be
365
367
  // a fallback (i.e. the block has no menu associated with it).
366
368
  $is_fallback = false;
367
369
 
370
+ $nav_menu_name = '';
371
+
368
372
  /**
369
373
  * Deprecated:
370
374
  * The rgbTextColor and rgbBackgroundColor attributes
@@ -428,6 +432,14 @@ function render_block_core_navigation( $attributes, $content, $block ) {
428
432
  return '';
429
433
  }
430
434
 
435
+ $nav_menu_name = $navigation_post->post_title;
436
+
437
+ if ( isset( $seen_menu_names[ $nav_menu_name ] ) ) {
438
+ ++$seen_menu_names[ $nav_menu_name ];
439
+ } else {
440
+ $seen_menu_names[ $nav_menu_name ] = 1;
441
+ }
442
+
431
443
  $parsed_blocks = parse_blocks( $navigation_post->post_content );
432
444
 
433
445
  // 'parse_blocks' includes a null block with '\n\n' as the content when
@@ -474,6 +486,10 @@ function render_block_core_navigation( $attributes, $content, $block ) {
474
486
  $layout_class .= ' no-wrap';
475
487
  }
476
488
 
489
+ // Manually add block support text decoration as CSS class.
490
+ $text_decoration = _wp_array_get( $attributes, array( 'style', 'typography', 'textDecoration' ), null );
491
+ $text_decoration_class = sprintf( 'has-text-decoration-%s', $text_decoration );
492
+
477
493
  $colors = block_core_navigation_build_css_colors( $attributes );
478
494
  $font_sizes = block_core_navigation_build_css_font_sizes( $attributes );
479
495
  $classes = array_merge(
@@ -481,7 +497,8 @@ function render_block_core_navigation( $attributes, $content, $block ) {
481
497
  $font_sizes['css_classes'],
482
498
  $is_responsive_menu ? array( 'is-responsive' ) : array(),
483
499
  $layout_class ? array( $layout_class ) : array(),
484
- $is_fallback ? array( 'is-fallback' ) : array()
500
+ $is_fallback ? array( 'is-fallback' ) : array(),
501
+ $text_decoration ? array( $text_decoration_class ) : array()
485
502
  );
486
503
 
487
504
  $inner_blocks_html = '';
@@ -508,10 +525,18 @@ function render_block_core_navigation( $attributes, $content, $block ) {
508
525
 
509
526
  $block_styles = isset( $attributes['styles'] ) ? $attributes['styles'] : '';
510
527
 
528
+ // If the menu name has been used previously then append an ID
529
+ // to the name to ensure uniqueness across a given post.
530
+ if ( isset( $seen_menu_names[ $nav_menu_name ] ) && $seen_menu_names[ $nav_menu_name ] > 1 ) {
531
+ $count = $seen_menu_names[ $nav_menu_name ];
532
+ $nav_menu_name = $nav_menu_name . ' ' . ( $count );
533
+ }
534
+
511
535
  $wrapper_attributes = get_block_wrapper_attributes(
512
536
  array(
513
- 'class' => implode( ' ', $classes ),
514
- 'style' => $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles'],
537
+ 'class' => implode( ' ', $classes ),
538
+ 'style' => $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles'],
539
+ 'aria-label' => $nav_menu_name,
515
540
  )
516
541
  );
517
542
 
@@ -51,25 +51,27 @@ $navigation-icon-size: 24px;
51
51
  padding: 0;
52
52
  }
53
53
 
54
- // Force links to inherit text decoration applied to navigation block.
55
- // The extra selector adds specificity to ensure it works when user-set.
56
- &[style*="text-decoration"] {
57
- .wp-block-navigation-item,
58
- .wp-block-navigation__submenu-container {
59
- text-decoration: inherit;
54
+ // The following rules provide class based application of user selected text
55
+ // decoration via block supports.
56
+ &.has-text-decoration-underline .wp-block-navigation-item__content {
57
+ text-decoration: underline;
58
+
59
+ &:focus,
60
+ &:active {
61
+ text-decoration: underline;
60
62
  }
63
+ }
61
64
 
62
- a {
63
- text-decoration: inherit;
65
+ &.has-text-decoration-line-through .wp-block-navigation-item__content {
66
+ text-decoration: line-through;
64
67
 
65
- &:focus,
66
- &:active {
67
- text-decoration: inherit;
68
- }
68
+ &:focus,
69
+ &:active {
70
+ text-decoration: line-through;
69
71
  }
70
72
  }
71
73
 
72
- &:not([style*="text-decoration"]) {
74
+ &:where(:not([class*="has-text-decoration"])) {
73
75
  a {
74
76
  text-decoration: none;
75
77
 
@@ -1,11 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useSelect } from '@wordpress/data';
5
- import {
6
- store as coreStore,
7
- __experimentalUseEntityRecords as useEntityRecords,
8
- } from '@wordpress/core-data';
4
+ import { __experimentalUseEntityRecords as useEntityRecords } from '@wordpress/core-data';
9
5
 
10
6
  /**
11
7
  * @typedef {Object} NavigationEntitiesData
@@ -29,82 +25,50 @@ import {
29
25
  * @return { NavigationEntitiesData } the entity data.
30
26
  */
31
27
  export default function useNavigationEntities( menuId ) {
32
- return {
33
- ...usePageEntities(),
34
- ...useMenuEntities(),
35
- ...useMenuItemEntities( menuId ),
36
- };
37
- }
28
+ const {
29
+ records: menus,
30
+ isResolving: isResolvingMenus,
31
+ hasResolved: hasResolvedMenus,
32
+ } = useEntityRecords( 'root', 'menu', { per_page: -1, context: 'view' } );
38
33
 
39
- function useMenuEntities() {
40
- const { records, isResolving, hasResolved } = useEntityRecords(
34
+ const {
35
+ records: pages,
36
+ isResolving: isResolvingPages,
37
+ hasResolved: hasResolvedPages,
38
+ } = useEntityRecords( 'postType', 'page', {
39
+ parent: 0,
40
+ order: 'asc',
41
+ orderby: 'id',
42
+ per_page: -1,
43
+ context: 'view',
44
+ } );
45
+
46
+ const {
47
+ records: menuItems,
48
+ hasResolved: hasResolvedMenuItems,
49
+ } = useEntityRecords(
41
50
  'root',
42
- 'menu',
43
- { per_page: -1, context: 'view' }
51
+ 'menuItem',
52
+ {
53
+ menus: menuId,
54
+ per_page: -1,
55
+ context: 'view',
56
+ },
57
+ { enabled: !! menuId }
44
58
  );
45
59
 
46
60
  return {
47
- menus: records,
48
- isResolvingMenus: isResolving,
49
- hasResolvedMenus: hasResolved,
50
- hasMenus: !! ( hasResolved && records?.length ),
51
- };
52
- }
53
-
54
- function useMenuItemEntities( menuId ) {
55
- const { menuItems, hasResolvedMenuItems } = useSelect(
56
- ( select ) => {
57
- const { getMenuItems, hasFinishedResolution } = select( coreStore );
58
-
59
- const hasSelectedMenu = menuId !== undefined;
60
- const menuItemsParameters = hasSelectedMenu
61
- ? [
62
- {
63
- menus: menuId,
64
- per_page: -1,
65
- context: 'view',
66
- },
67
- ]
68
- : undefined;
61
+ pages,
62
+ isResolvingPages,
63
+ hasResolvedPages,
64
+ hasPages: !! ( hasResolvedPages && pages?.length ),
69
65
 
70
- return {
71
- menuItems: hasSelectedMenu
72
- ? getMenuItems( ...menuItemsParameters )
73
- : undefined,
74
- hasResolvedMenuItems: hasSelectedMenu
75
- ? hasFinishedResolution(
76
- 'getMenuItems',
77
- menuItemsParameters
78
- )
79
- : false,
80
- };
81
- },
82
- [ menuId ]
83
- );
66
+ menus,
67
+ isResolvingMenus,
68
+ hasResolvedMenus,
69
+ hasMenus: !! ( hasResolvedMenus && menus?.length ),
84
70
 
85
- return {
86
71
  menuItems,
87
72
  hasResolvedMenuItems,
88
73
  };
89
74
  }
90
-
91
- function usePageEntities() {
92
- const { records, isResolving, hasResolved } = useEntityRecords(
93
- 'postType',
94
- 'page',
95
- {
96
- parent: 0,
97
- order: 'asc',
98
- orderby: 'id',
99
- per_page: -1,
100
- context: 'view',
101
- }
102
- );
103
-
104
- return {
105
- pages: records,
106
- isResolvingPages: isResolving,
107
- hasResolvedPages: hasResolved,
108
- hasPages: !! ( hasResolved && records?.length ),
109
- };
110
- }
@@ -60,6 +60,10 @@ export default function useNavigationMenu( ref ) {
60
60
  ! ref ||
61
61
  ( hasResolvedNavigationMenu && ! rawNavigationMenu ),
62
62
  canSwitchNavigationMenu,
63
+ isResolvingNavigationMenus: isResolving(
64
+ 'getEntityRecords',
65
+ navigationMenuMultipleArgs
66
+ ),
63
67
  hasResolvedNavigationMenus: hasFinishedResolution(
64
68
  'getEntityRecords',
65
69
  navigationMenuMultipleArgs
@@ -52,6 +52,7 @@
52
52
  "fontSize",
53
53
  "customFontSize",
54
54
  "showSubmenuIcon",
55
+ "maxNestingLevel",
55
56
  "style"
56
57
  ],
57
58
  "supports": {
@@ -18,6 +18,7 @@ import {
18
18
  ToolbarButton,
19
19
  Tooltip,
20
20
  ToolbarGroup,
21
+ KeyboardShortcuts,
21
22
  } from '@wordpress/components';
22
23
  import { displayShortcut, isKeyboardEvent, ENTER } from '@wordpress/keycodes';
23
24
  import { __, sprintf } from '@wordpress/i18n';
@@ -48,8 +49,6 @@ import { store as coreStore } from '@wordpress/core-data';
48
49
  */
49
50
  import { name } from './block.json';
50
51
 
51
- const MAX_NESTING = 5;
52
-
53
52
  /**
54
53
  * A React hook to determine if it's dragging within the target element.
55
54
  *
@@ -265,6 +264,64 @@ export const updateNavigationLinkBlockAttributes = (
265
264
  } );
266
265
  };
267
266
 
267
+ const useIsInvalidLink = ( kind, type, id ) => {
268
+ const isPostType =
269
+ kind === 'post-type' || type === 'post' || type === 'page';
270
+ const hasId = Number.isInteger( id );
271
+ const postStatus = useSelect(
272
+ ( select ) => {
273
+ if ( ! isPostType ) {
274
+ return null;
275
+ }
276
+ const { getEntityRecord } = select( coreStore );
277
+ return getEntityRecord( 'postType', type, id )?.status;
278
+ },
279
+ [ isPostType, type, id ]
280
+ );
281
+
282
+ // Check Navigation Link validity if:
283
+ // 1. Link is 'post-type'.
284
+ // 2. It has an id.
285
+ // 3. It's neither null, nor undefined, as valid items might be either of those while loading.
286
+ // If those conditions are met, check if
287
+ // 1. The post status is published.
288
+ // 2. The Navigation Link item has no label.
289
+ // If either of those is true, invalidate.
290
+ const isInvalid =
291
+ isPostType && hasId && postStatus && 'trash' === postStatus;
292
+ const isDraft = 'draft' === postStatus;
293
+
294
+ return [ isInvalid, isDraft ];
295
+ };
296
+
297
+ const useMissingText = ( type ) => {
298
+ let missingText = '';
299
+
300
+ switch ( type ) {
301
+ case 'post':
302
+ /* translators: label for missing post in navigation link block */
303
+ missingText = __( 'Select post' );
304
+ break;
305
+ case 'page':
306
+ /* translators: label for missing page in navigation link block */
307
+ missingText = __( 'Select page' );
308
+ break;
309
+ case 'category':
310
+ /* translators: label for missing category in navigation link block */
311
+ missingText = __( 'Select category' );
312
+ break;
313
+ case 'tag':
314
+ /* translators: label for missing tag in navigation link block */
315
+ missingText = __( 'Select tag' );
316
+ break;
317
+ default:
318
+ /* translators: label for missing values in navigation link block */
319
+ missingText = __( 'Add link' );
320
+ }
321
+
322
+ return missingText;
323
+ };
324
+
268
325
  /**
269
326
  * Removes HTML from a given string.
270
327
  * Note the does not provide XSS protection or otherwise attempt
@@ -329,6 +386,7 @@ export default function NavigationLinkEdit( {
329
386
  clientId,
330
387
  } ) {
331
388
  const {
389
+ id,
332
390
  label,
333
391
  type,
334
392
  opensInNewTab,
@@ -339,6 +397,9 @@ export default function NavigationLinkEdit( {
339
397
  kind,
340
398
  } = attributes;
341
399
 
400
+ const [ isInvalid, isDraft ] = useIsInvalidLink( kind, type, id );
401
+ const { maxNestingLevel } = context;
402
+
342
403
  const link = {
343
404
  url,
344
405
  opensInNewTab,
@@ -390,7 +451,7 @@ export default function NavigationLinkEdit( {
390
451
  getBlockParentsByBlockName( clientId, [
391
452
  name,
392
453
  'core/navigation-submenu',
393
- ] ).length >= MAX_NESTING,
454
+ ] ).length >= maxNestingLevel,
394
455
  isTopLevelLink:
395
456
  getBlockName( getBlockRootClientId( clientId ) ) ===
396
457
  'core/navigation',
@@ -589,36 +650,23 @@ export default function NavigationLinkEdit( {
589
650
  onKeyDown,
590
651
  } );
591
652
 
592
- if ( ! url ) {
653
+ if ( ! url || isInvalid || isDraft ) {
593
654
  blockProps.onClick = () => setIsLinkOpen( true );
594
655
  }
595
656
 
596
657
  const classes = classnames( 'wp-block-navigation-item__content', {
597
- 'wp-block-navigation-link__placeholder': ! url,
658
+ 'wp-block-navigation-link__placeholder': ! url || isInvalid || isDraft,
598
659
  } );
599
660
 
600
- let missingText = '';
601
- switch ( type ) {
602
- case 'post':
603
- /* translators: label for missing post in navigation link block */
604
- missingText = __( 'Select post' );
605
- break;
606
- case 'page':
607
- /* translators: label for missing page in navigation link block */
608
- missingText = __( 'Select page' );
609
- break;
610
- case 'category':
611
- /* translators: label for missing category in navigation link block */
612
- missingText = __( 'Select category' );
613
- break;
614
- case 'tag':
615
- /* translators: label for missing tag in navigation link block */
616
- missingText = __( 'Select tag' );
617
- break;
618
- default:
619
- /* translators: label for missing values in navigation link block */
620
- missingText = __( 'Add link' );
621
- }
661
+ const missingText = useMissingText( type, isInvalid, isDraft );
662
+ /* translators: Whether the navigation link is Invalid or a Draft. */
663
+ const placeholderText = `(${
664
+ isInvalid ? __( 'Invalid' ) : __( 'Draft' )
665
+ })`;
666
+ const tooltipText =
667
+ isInvalid || isDraft
668
+ ? __( 'This item has been deleted, or is a draft' )
669
+ : __( 'This item is missing a link' );
622
670
 
623
671
  return (
624
672
  <Fragment>
@@ -677,46 +725,90 @@ export default function NavigationLinkEdit( {
677
725
  { /* eslint-enable */ }
678
726
  { ! url ? (
679
727
  <div className="wp-block-navigation-link__placeholder-text">
680
- <Tooltip
681
- position="top center"
682
- text={ __( 'This item is missing a link' ) }
683
- >
684
- <span>{ missingText }</span>
728
+ <Tooltip position="top center" text={ tooltipText }>
729
+ <>
730
+ <span>{ missingText }</span>
731
+ <span className="wp-block-navigation-link__missing_text-tooltip">
732
+ { tooltipText }
733
+ </span>
734
+ </>
685
735
  </Tooltip>
686
736
  </div>
687
737
  ) : (
688
- <RichText
689
- ref={ ref }
690
- identifier="label"
691
- className="wp-block-navigation-item__label"
692
- value={ label }
693
- onChange={ ( labelValue ) =>
694
- setAttributes( {
695
- label: labelValue,
696
- } )
697
- }
698
- onMerge={ mergeBlocks }
699
- onReplace={ onReplace }
700
- __unstableOnSplitAtEnd={ () =>
701
- insertBlocksAfter(
702
- createBlock( 'core/navigation-link' )
703
- )
704
- }
705
- aria-label={ __( 'Navigation link text' ) }
706
- placeholder={ itemLabelPlaceholder }
707
- withoutInteractiveFormatting
708
- allowedFormats={ [
709
- 'core/bold',
710
- 'core/italic',
711
- 'core/image',
712
- 'core/strikethrough',
713
- ] }
714
- onClick={ () => {
715
- if ( ! url ) {
716
- setIsLinkOpen( true );
717
- }
718
- } }
719
- />
738
+ <>
739
+ { ! isInvalid && ! isDraft && (
740
+ <>
741
+ <RichText
742
+ ref={ ref }
743
+ identifier="label"
744
+ className="wp-block-navigation-item__label"
745
+ value={ label }
746
+ onChange={ ( labelValue ) =>
747
+ setAttributes( {
748
+ label: labelValue,
749
+ } )
750
+ }
751
+ onMerge={ mergeBlocks }
752
+ onReplace={ onReplace }
753
+ __unstableOnSplitAtEnd={ () =>
754
+ insertBlocksAfter(
755
+ createBlock(
756
+ 'core/navigation-link'
757
+ )
758
+ )
759
+ }
760
+ aria-label={ __(
761
+ 'Navigation link text'
762
+ ) }
763
+ placeholder={ itemLabelPlaceholder }
764
+ withoutInteractiveFormatting
765
+ allowedFormats={ [
766
+ 'core/bold',
767
+ 'core/italic',
768
+ 'core/image',
769
+ 'core/strikethrough',
770
+ ] }
771
+ onClick={ () => {
772
+ if ( ! url ) {
773
+ setIsLinkOpen( true );
774
+ }
775
+ } }
776
+ />
777
+ { description && (
778
+ <span className="wp-block-navigation-item__description">
779
+ { description }
780
+ </span>
781
+ ) }
782
+ </>
783
+ ) }
784
+ { ( isInvalid || isDraft ) && (
785
+ <div className="wp-block-navigation-link__placeholder-text wp-block-navigation-link__label">
786
+ <KeyboardShortcuts
787
+ shortcuts={ {
788
+ enter: () =>
789
+ isSelected &&
790
+ setIsLinkOpen( true ),
791
+ } }
792
+ />
793
+ <Tooltip
794
+ position="top center"
795
+ text={ tooltipText }
796
+ >
797
+ <>
798
+ <span>
799
+ {
800
+ /* Trim to avoid trailing white space when the placeholder text is not present */
801
+ `${ label } ${ placeholderText }`.trim()
802
+ }
803
+ </span>
804
+ <span className="wp-block-navigation-link__missing_text-tooltip">
805
+ { tooltipText }
806
+ </span>
807
+ </>
808
+ </Tooltip>
809
+ </div>
810
+ ) }
811
+ </>
720
812
  ) }
721
813
  { isLinkOpen && (
722
814
  <Popover
@@ -55,7 +55,18 @@
55
55
  }
56
56
  }
57
57
 
58
+ .wp-block-navigation-link__invalid-item {
59
+ color: #000;
60
+ }
58
61
 
62
+ .wp-block-navigation-link__missing_text-tooltip {
63
+ position: absolute;
64
+ width: 1px;
65
+ height: 1px;
66
+ padding: 0;
67
+ margin: -1px;
68
+ overflow: hidden;
69
+ }
59
70
  /**
60
71
  * Menu item setup state. Is shown when a menu item has no URL configured.
61
72
  */