@wordpress/block-library 8.3.6 → 8.5.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 (738) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/archives/edit.js +3 -0
  3. package/build/archives/edit.js.map +1 -1
  4. package/build/archives/index.js +1 -0
  5. package/build/archives/index.js.map +1 -1
  6. package/build/audio/edit.js +2 -0
  7. package/build/audio/edit.js.map +1 -1
  8. package/build/avatar/edit.js +5 -9
  9. package/build/avatar/edit.js.map +1 -1
  10. package/build/avatar/index.js +1 -0
  11. package/build/avatar/index.js.map +1 -1
  12. package/build/button/edit.js +3 -1
  13. package/build/button/edit.js.map +1 -1
  14. package/build/button/index.js +17 -6
  15. package/build/button/index.js.map +1 -1
  16. package/build/calendar/index.js +1 -0
  17. package/build/calendar/index.js.map +1 -1
  18. package/build/categories/edit.js +5 -0
  19. package/build/categories/edit.js.map +1 -1
  20. package/build/categories/index.js +1 -0
  21. package/build/categories/index.js.map +1 -1
  22. package/build/columns/edit.js +1 -0
  23. package/build/columns/edit.js.map +1 -1
  24. package/build/columns/utils.js +2 -2
  25. package/build/columns/utils.js.map +1 -1
  26. package/build/comment-author-avatar/index.js +1 -0
  27. package/build/comment-author-avatar/index.js.map +1 -1
  28. package/build/comment-author-name/edit.js +2 -0
  29. package/build/comment-author-name/edit.js.map +1 -1
  30. package/build/comment-author-name/index.js +1 -0
  31. package/build/comment-author-name/index.js.map +1 -1
  32. package/build/comment-content/index.js +1 -0
  33. package/build/comment-content/index.js.map +1 -1
  34. package/build/comment-date/edit.js +1 -0
  35. package/build/comment-date/edit.js.map +1 -1
  36. package/build/comment-date/index.js +1 -0
  37. package/build/comment-date/index.js.map +1 -1
  38. package/build/comment-edit-link/edit.js +1 -0
  39. package/build/comment-edit-link/edit.js.map +1 -1
  40. package/build/comment-edit-link/index.js +1 -0
  41. package/build/comment-edit-link/index.js.map +1 -1
  42. package/build/comment-reply-link/index.js +1 -0
  43. package/build/comment-reply-link/index.js.map +1 -1
  44. package/build/comment-template/index.js +1 -0
  45. package/build/comment-template/index.js.map +1 -1
  46. package/build/comments/index.js +2 -1
  47. package/build/comments/index.js.map +1 -1
  48. package/build/comments-pagination/index.js +1 -0
  49. package/build/comments-pagination/index.js.map +1 -1
  50. package/build/comments-pagination-next/index.js +1 -0
  51. package/build/comments-pagination-next/index.js.map +1 -1
  52. package/build/comments-pagination-numbers/index.js +1 -0
  53. package/build/comments-pagination-numbers/index.js.map +1 -1
  54. package/build/comments-pagination-previous/index.js +1 -0
  55. package/build/comments-pagination-previous/index.js.map +1 -1
  56. package/build/comments-title/edit.js +2 -0
  57. package/build/comments-title/edit.js.map +1 -1
  58. package/build/cover/edit/inspector-controls.js +2 -0
  59. package/build/cover/edit/inspector-controls.js.map +1 -1
  60. package/build/embed/embed-controls.js +1 -0
  61. package/build/embed/embed-controls.js.map +1 -1
  62. package/build/file/index.js +10 -1
  63. package/build/file/index.js.map +1 -1
  64. package/build/file/inspector.js +3 -0
  65. package/build/file/inspector.js.map +1 -1
  66. package/build/freeform/modal.js +1 -1
  67. package/build/freeform/modal.js.map +1 -1
  68. package/build/gallery/edit.js +2 -0
  69. package/build/gallery/edit.js.map +1 -1
  70. package/build/gallery/shared.js +4 -8
  71. package/build/gallery/shared.js.map +1 -1
  72. package/build/gallery/use-image-sizes.js +4 -8
  73. package/build/gallery/use-image-sizes.js.map +1 -1
  74. package/build/gallery/v1/edit.js +8 -3
  75. package/build/gallery/v1/edit.js.map +1 -1
  76. package/build/gallery/v1/gallery-image.js +1 -3
  77. package/build/gallery/v1/gallery-image.js.map +1 -1
  78. package/build/gallery/v1/shared.js +4 -7
  79. package/build/gallery/v1/shared.js.map +1 -1
  80. package/build/home-link/index.js +1 -0
  81. package/build/home-link/index.js.map +1 -1
  82. package/build/image/edit.js +6 -4
  83. package/build/image/edit.js.map +1 -1
  84. package/build/image/image.js +18 -13
  85. package/build/image/image.js.map +1 -1
  86. package/build/image/utils.js +3 -1
  87. package/build/image/utils.js.map +1 -1
  88. package/build/index.js +3 -1
  89. package/build/index.js.map +1 -1
  90. package/build/latest-comments/edit.js +9 -2
  91. package/build/latest-comments/edit.js.map +1 -1
  92. package/build/latest-comments/index.js +14 -0
  93. package/build/latest-comments/index.js.map +1 -1
  94. package/build/latest-posts/deprecated.js +1 -0
  95. package/build/latest-posts/deprecated.js.map +1 -1
  96. package/build/latest-posts/edit.js +4 -0
  97. package/build/latest-posts/edit.js.map +1 -1
  98. package/build/latest-posts/index.js +1 -0
  99. package/build/latest-posts/index.js.map +1 -1
  100. package/build/list/ordered-list-settings.js +1 -0
  101. package/build/list/ordered-list-settings.js.map +1 -1
  102. package/build/list-item/edit.js +2 -2
  103. package/build/list-item/edit.js.map +1 -1
  104. package/build/list-item/hooks/use-outdent-list-item.js +2 -1
  105. package/build/list-item/hooks/use-outdent-list-item.js.map +1 -1
  106. package/build/loginout/edit.js +2 -0
  107. package/build/loginout/edit.js.map +1 -1
  108. package/build/loginout/index.js +1 -0
  109. package/build/loginout/index.js.map +1 -1
  110. package/build/media-text/edit.js +2 -0
  111. package/build/media-text/edit.js.map +1 -1
  112. package/build/more/edit.js +1 -0
  113. package/build/more/edit.js.map +1 -1
  114. package/build/navigation/edit/index.js +80 -54
  115. package/build/navigation/edit/index.js.map +1 -1
  116. package/build/navigation/edit/navigation-menu-selector.js +14 -11
  117. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  118. package/build/navigation/edit/overlay-menu-preview.js +1 -0
  119. package/build/navigation/edit/overlay-menu-preview.js.map +1 -1
  120. package/build/navigation/edit/placeholder/index.js +1 -1
  121. package/build/navigation/edit/placeholder/index.js.map +1 -1
  122. package/build/navigation/edit/unsaved-inner-blocks.js +1 -1
  123. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  124. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
  125. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  126. package/build/navigation/edit/use-create-navigation-menu.js +1 -1
  127. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  128. package/build/navigation/edit/use-generate-default-navigation-title.js +1 -1
  129. package/build/navigation/edit/use-generate-default-navigation-title.js.map +1 -1
  130. package/build/navigation/edit/use-navigation-notice.js +4 -7
  131. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  132. package/build/navigation/index.js +1 -0
  133. package/build/navigation/index.js.map +1 -1
  134. package/build/navigation/use-navigation-menu.js +1 -1
  135. package/build/navigation/use-navigation-menu.js.map +1 -1
  136. package/build/navigation-link/edit.js +10 -5
  137. package/build/navigation-link/edit.js.map +1 -1
  138. package/build/navigation-link/link-ui.js +2 -0
  139. package/build/navigation-link/link-ui.js.map +1 -1
  140. package/build/page-list/convert-to-links-modal.js +47 -0
  141. package/build/page-list/convert-to-links-modal.js.map +1 -0
  142. package/build/page-list/edit.js +15 -28
  143. package/build/page-list/edit.js.map +1 -1
  144. package/build/page-list/index.js +1 -0
  145. package/build/page-list/index.js.map +1 -1
  146. package/build/page-list/use-convert-to-navigation-links.js +61 -5
  147. package/build/page-list/use-convert-to-navigation-links.js.map +1 -1
  148. package/build/paragraph/edit.js +1 -0
  149. package/build/paragraph/edit.js.map +1 -1
  150. package/build/post-author/edit.js +4 -0
  151. package/build/post-author/edit.js.map +1 -1
  152. package/build/post-author/index.js +1 -0
  153. package/build/post-author/index.js.map +1 -1
  154. package/build/post-author-biography/index.js +1 -0
  155. package/build/post-author-biography/index.js.map +1 -1
  156. package/build/post-author-name/edit.js +2 -0
  157. package/build/post-author-name/edit.js.map +1 -1
  158. package/build/post-author-name/index.js +1 -0
  159. package/build/post-author-name/index.js.map +1 -1
  160. package/build/post-comments-count/index.js +1 -0
  161. package/build/post-comments-count/index.js.map +1 -1
  162. package/build/post-comments-form/index.js +1 -0
  163. package/build/post-comments-form/index.js.map +1 -1
  164. package/build/post-comments-link/index.js +1 -0
  165. package/build/post-comments-link/index.js.map +1 -1
  166. package/build/post-content/index.js +1 -0
  167. package/build/post-content/index.js.map +1 -1
  168. package/build/post-date/edit.js +2 -0
  169. package/build/post-date/edit.js.map +1 -1
  170. package/build/post-date/index.js +1 -0
  171. package/build/post-date/index.js.map +1 -1
  172. package/build/post-excerpt/edit.js +50 -3
  173. package/build/post-excerpt/edit.js.map +1 -1
  174. package/build/post-excerpt/index.js +5 -0
  175. package/build/post-excerpt/index.js.map +1 -1
  176. package/build/post-featured-image/dimension-controls.js +52 -1
  177. package/build/post-featured-image/dimension-controls.js.map +1 -1
  178. package/build/post-featured-image/edit.js +11 -4
  179. package/build/post-featured-image/edit.js.map +1 -1
  180. package/build/post-featured-image/index.js +4 -0
  181. package/build/post-featured-image/index.js.map +1 -1
  182. package/build/post-navigation-link/edit.js +2 -0
  183. package/build/post-navigation-link/edit.js.map +1 -1
  184. package/build/post-navigation-link/index.js +1 -0
  185. package/build/post-navigation-link/index.js.map +1 -1
  186. package/build/post-template/index.js +1 -0
  187. package/build/post-template/index.js.map +1 -1
  188. package/build/post-terms/index.js +1 -0
  189. package/build/post-terms/index.js.map +1 -1
  190. package/build/post-terms/use-post-terms.js +1 -1
  191. package/build/post-terms/use-post-terms.js.map +1 -1
  192. package/build/post-time-to-read/edit.js +104 -0
  193. package/build/post-time-to-read/edit.js.map +1 -0
  194. package/build/post-time-to-read/icon.js +25 -0
  195. package/build/post-time-to-read/icon.js.map +1 -0
  196. package/build/post-time-to-read/index.js +57 -0
  197. package/build/post-time-to-read/index.js.map +1 -0
  198. package/build/post-title/edit.js +2 -0
  199. package/build/post-title/edit.js.map +1 -1
  200. package/build/post-title/index.js +1 -0
  201. package/build/post-title/index.js.map +1 -1
  202. package/build/query/edit/inspector-controls/index.js +1 -0
  203. package/build/query/edit/inspector-controls/index.js.map +1 -1
  204. package/build/query/index.js +1 -0
  205. package/build/query/index.js.map +1 -1
  206. package/build/query/utils.js +1 -0
  207. package/build/query/utils.js.map +1 -1
  208. package/build/query-no-results/index.js +1 -0
  209. package/build/query-no-results/index.js.map +1 -1
  210. package/build/query-pagination/index.js +1 -0
  211. package/build/query-pagination/index.js.map +1 -1
  212. package/build/query-pagination-next/index.js +1 -0
  213. package/build/query-pagination-next/index.js.map +1 -1
  214. package/build/query-pagination-numbers/index.js +1 -0
  215. package/build/query-pagination-numbers/index.js.map +1 -1
  216. package/build/query-pagination-previous/index.js +1 -0
  217. package/build/query-pagination-previous/index.js.map +1 -1
  218. package/build/query-title/edit.js +2 -0
  219. package/build/query-title/edit.js.map +1 -1
  220. package/build/query-title/index.js +1 -0
  221. package/build/query-title/index.js.map +1 -1
  222. package/build/read-more/edit.js +1 -0
  223. package/build/read-more/edit.js.map +1 -1
  224. package/build/read-more/index.js +1 -0
  225. package/build/read-more/index.js.map +1 -1
  226. package/build/rss/edit.js +3 -0
  227. package/build/rss/edit.js.map +1 -1
  228. package/build/rss/index.js +1 -0
  229. package/build/rss/index.js.map +1 -1
  230. package/build/search/index.js +1 -0
  231. package/build/search/index.js.map +1 -1
  232. package/build/site-logo/edit.js +10 -11
  233. package/build/site-logo/edit.js.map +1 -1
  234. package/build/site-logo/index.js +1 -0
  235. package/build/site-logo/index.js.map +1 -1
  236. package/build/site-tagline/index.js +1 -0
  237. package/build/site-tagline/index.js.map +1 -1
  238. package/build/site-title/edit/index.js +2 -0
  239. package/build/site-title/edit/index.js.map +1 -1
  240. package/build/site-title/index.js +1 -0
  241. package/build/site-title/index.js.map +1 -1
  242. package/build/social-link/index.js +1 -0
  243. package/build/social-link/index.js.map +1 -1
  244. package/build/social-links/edit.js +2 -0
  245. package/build/social-links/edit.js.map +1 -1
  246. package/build/spacer/controls.native.js +10 -8
  247. package/build/spacer/controls.native.js.map +1 -1
  248. package/build/spacer/edit.native.js +43 -5
  249. package/build/spacer/edit.native.js.map +1 -1
  250. package/build/spacer/save.native.js +30 -0
  251. package/build/spacer/save.native.js.map +1 -0
  252. package/build/table/edit.js +6 -3
  253. package/build/table/edit.js.map +1 -1
  254. package/build/table-of-contents/edit.js +1 -0
  255. package/build/table-of-contents/edit.js.map +1 -1
  256. package/build/table-of-contents/utils.js +1 -1
  257. package/build/table-of-contents/utils.js.map +1 -1
  258. package/build/tag-cloud/edit.js +1 -0
  259. package/build/tag-cloud/edit.js.map +1 -1
  260. package/build/tag-cloud/index.js +1 -0
  261. package/build/tag-cloud/index.js.map +1 -1
  262. package/build/template-part/index.js +1 -0
  263. package/build/template-part/index.js.map +1 -1
  264. package/build/term-description/index.js +1 -0
  265. package/build/term-description/index.js.map +1 -1
  266. package/build/verse/index.js +6 -0
  267. package/build/verse/index.js.map +1 -1
  268. package/build/video/edit-common-settings.js +5 -0
  269. package/build/video/edit-common-settings.js.map +1 -1
  270. package/build-module/archives/edit.js +3 -0
  271. package/build-module/archives/edit.js.map +1 -1
  272. package/build-module/archives/index.js +1 -0
  273. package/build-module/archives/index.js.map +1 -1
  274. package/build-module/audio/edit.js +2 -0
  275. package/build-module/audio/edit.js.map +1 -1
  276. package/build-module/avatar/edit.js +5 -8
  277. package/build-module/avatar/edit.js.map +1 -1
  278. package/build-module/avatar/index.js +1 -0
  279. package/build-module/avatar/index.js.map +1 -1
  280. package/build-module/button/edit.js +2 -1
  281. package/build-module/button/edit.js.map +1 -1
  282. package/build-module/button/index.js +17 -6
  283. package/build-module/button/index.js.map +1 -1
  284. package/build-module/calendar/index.js +1 -0
  285. package/build-module/calendar/index.js.map +1 -1
  286. package/build-module/categories/edit.js +5 -0
  287. package/build-module/categories/edit.js.map +1 -1
  288. package/build-module/categories/index.js +1 -0
  289. package/build-module/categories/index.js.map +1 -1
  290. package/build-module/columns/edit.js +1 -0
  291. package/build-module/columns/edit.js.map +1 -1
  292. package/build-module/columns/utils.js +3 -3
  293. package/build-module/columns/utils.js.map +1 -1
  294. package/build-module/comment-author-avatar/index.js +1 -0
  295. package/build-module/comment-author-avatar/index.js.map +1 -1
  296. package/build-module/comment-author-name/edit.js +2 -0
  297. package/build-module/comment-author-name/edit.js.map +1 -1
  298. package/build-module/comment-author-name/index.js +1 -0
  299. package/build-module/comment-author-name/index.js.map +1 -1
  300. package/build-module/comment-content/index.js +1 -0
  301. package/build-module/comment-content/index.js.map +1 -1
  302. package/build-module/comment-date/edit.js +1 -0
  303. package/build-module/comment-date/edit.js.map +1 -1
  304. package/build-module/comment-date/index.js +1 -0
  305. package/build-module/comment-date/index.js.map +1 -1
  306. package/build-module/comment-edit-link/edit.js +1 -0
  307. package/build-module/comment-edit-link/edit.js.map +1 -1
  308. package/build-module/comment-edit-link/index.js +1 -0
  309. package/build-module/comment-edit-link/index.js.map +1 -1
  310. package/build-module/comment-reply-link/index.js +1 -0
  311. package/build-module/comment-reply-link/index.js.map +1 -1
  312. package/build-module/comment-template/index.js +1 -0
  313. package/build-module/comment-template/index.js.map +1 -1
  314. package/build-module/comments/index.js +2 -1
  315. package/build-module/comments/index.js.map +1 -1
  316. package/build-module/comments-pagination/index.js +1 -0
  317. package/build-module/comments-pagination/index.js.map +1 -1
  318. package/build-module/comments-pagination-next/index.js +1 -0
  319. package/build-module/comments-pagination-next/index.js.map +1 -1
  320. package/build-module/comments-pagination-numbers/index.js +1 -0
  321. package/build-module/comments-pagination-numbers/index.js.map +1 -1
  322. package/build-module/comments-pagination-previous/index.js +1 -0
  323. package/build-module/comments-pagination-previous/index.js.map +1 -1
  324. package/build-module/comments-title/edit.js +2 -0
  325. package/build-module/comments-title/edit.js.map +1 -1
  326. package/build-module/cover/edit/inspector-controls.js +2 -0
  327. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  328. package/build-module/embed/embed-controls.js +1 -0
  329. package/build-module/embed/embed-controls.js.map +1 -1
  330. package/build-module/file/index.js +10 -1
  331. package/build-module/file/index.js.map +1 -1
  332. package/build-module/file/inspector.js +3 -0
  333. package/build-module/file/inspector.js.map +1 -1
  334. package/build-module/freeform/modal.js +1 -1
  335. package/build-module/freeform/modal.js.map +1 -1
  336. package/build-module/gallery/edit.js +2 -0
  337. package/build-module/gallery/edit.js.map +1 -1
  338. package/build-module/gallery/shared.js +4 -7
  339. package/build-module/gallery/shared.js.map +1 -1
  340. package/build-module/gallery/use-image-sizes.js +4 -7
  341. package/build-module/gallery/use-image-sizes.js.map +1 -1
  342. package/build-module/gallery/v1/edit.js +9 -4
  343. package/build-module/gallery/v1/edit.js.map +1 -1
  344. package/build-module/gallery/v1/gallery-image.js +1 -2
  345. package/build-module/gallery/v1/gallery-image.js.map +1 -1
  346. package/build-module/gallery/v1/shared.js +4 -6
  347. package/build-module/gallery/v1/shared.js.map +1 -1
  348. package/build-module/home-link/index.js +1 -0
  349. package/build-module/home-link/index.js.map +1 -1
  350. package/build-module/image/edit.js +7 -5
  351. package/build-module/image/edit.js.map +1 -1
  352. package/build-module/image/image.js +19 -14
  353. package/build-module/image/image.js.map +1 -1
  354. package/build-module/image/utils.js +4 -2
  355. package/build-module/image/utils.js.map +1 -1
  356. package/build-module/index.js +2 -1
  357. package/build-module/index.js.map +1 -1
  358. package/build-module/latest-comments/edit.js +9 -2
  359. package/build-module/latest-comments/edit.js.map +1 -1
  360. package/build-module/latest-comments/index.js +14 -0
  361. package/build-module/latest-comments/index.js.map +1 -1
  362. package/build-module/latest-posts/deprecated.js +1 -0
  363. package/build-module/latest-posts/deprecated.js.map +1 -1
  364. package/build-module/latest-posts/edit.js +4 -0
  365. package/build-module/latest-posts/edit.js.map +1 -1
  366. package/build-module/latest-posts/index.js +1 -0
  367. package/build-module/latest-posts/index.js.map +1 -1
  368. package/build-module/list/ordered-list-settings.js +1 -0
  369. package/build-module/list/ordered-list-settings.js.map +1 -1
  370. package/build-module/list-item/edit.js +2 -2
  371. package/build-module/list-item/edit.js.map +1 -1
  372. package/build-module/list-item/hooks/use-outdent-list-item.js +2 -1
  373. package/build-module/list-item/hooks/use-outdent-list-item.js.map +1 -1
  374. package/build-module/loginout/edit.js +2 -0
  375. package/build-module/loginout/edit.js.map +1 -1
  376. package/build-module/loginout/index.js +1 -0
  377. package/build-module/loginout/index.js.map +1 -1
  378. package/build-module/media-text/edit.js +2 -0
  379. package/build-module/media-text/edit.js.map +1 -1
  380. package/build-module/more/edit.js +1 -0
  381. package/build-module/more/edit.js.map +1 -1
  382. package/build-module/navigation/edit/index.js +82 -56
  383. package/build-module/navigation/edit/index.js.map +1 -1
  384. package/build-module/navigation/edit/navigation-menu-selector.js +14 -10
  385. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  386. package/build-module/navigation/edit/overlay-menu-preview.js +1 -0
  387. package/build-module/navigation/edit/overlay-menu-preview.js.map +1 -1
  388. package/build-module/navigation/edit/placeholder/index.js +1 -1
  389. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  390. package/build-module/navigation/edit/unsaved-inner-blocks.js +1 -1
  391. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  392. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
  393. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  394. package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
  395. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  396. package/build-module/navigation/edit/use-generate-default-navigation-title.js +1 -1
  397. package/build-module/navigation/edit/use-generate-default-navigation-title.js.map +1 -1
  398. package/build-module/navigation/edit/use-navigation-notice.js +5 -8
  399. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  400. package/build-module/navigation/index.js +1 -0
  401. package/build-module/navigation/index.js.map +1 -1
  402. package/build-module/navigation/use-navigation-menu.js +1 -1
  403. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  404. package/build-module/navigation-link/edit.js +10 -5
  405. package/build-module/navigation-link/edit.js.map +1 -1
  406. package/build-module/navigation-link/link-ui.js +2 -0
  407. package/build-module/navigation-link/link-ui.js.map +1 -1
  408. package/build-module/page-list/convert-to-links-modal.js +35 -0
  409. package/build-module/page-list/convert-to-links-modal.js.map +1 -0
  410. package/build-module/page-list/edit.js +15 -29
  411. package/build-module/page-list/edit.js.map +1 -1
  412. package/build-module/page-list/index.js +1 -0
  413. package/build-module/page-list/index.js.map +1 -1
  414. package/build-module/page-list/use-convert-to-navigation-links.js +61 -5
  415. package/build-module/page-list/use-convert-to-navigation-links.js.map +1 -1
  416. package/build-module/paragraph/edit.js +1 -0
  417. package/build-module/paragraph/edit.js.map +1 -1
  418. package/build-module/post-author/edit.js +4 -0
  419. package/build-module/post-author/edit.js.map +1 -1
  420. package/build-module/post-author/index.js +1 -0
  421. package/build-module/post-author/index.js.map +1 -1
  422. package/build-module/post-author-biography/index.js +1 -0
  423. package/build-module/post-author-biography/index.js.map +1 -1
  424. package/build-module/post-author-name/edit.js +2 -0
  425. package/build-module/post-author-name/edit.js.map +1 -1
  426. package/build-module/post-author-name/index.js +1 -0
  427. package/build-module/post-author-name/index.js.map +1 -1
  428. package/build-module/post-comments-count/index.js +1 -0
  429. package/build-module/post-comments-count/index.js.map +1 -1
  430. package/build-module/post-comments-form/index.js +1 -0
  431. package/build-module/post-comments-form/index.js.map +1 -1
  432. package/build-module/post-comments-link/index.js +1 -0
  433. package/build-module/post-comments-link/index.js.map +1 -1
  434. package/build-module/post-content/index.js +1 -0
  435. package/build-module/post-content/index.js.map +1 -1
  436. package/build-module/post-date/edit.js +2 -0
  437. package/build-module/post-date/edit.js.map +1 -1
  438. package/build-module/post-date/index.js +1 -0
  439. package/build-module/post-date/index.js.map +1 -1
  440. package/build-module/post-excerpt/edit.js +53 -5
  441. package/build-module/post-excerpt/edit.js.map +1 -1
  442. package/build-module/post-excerpt/index.js +5 -0
  443. package/build-module/post-excerpt/index.js.map +1 -1
  444. package/build-module/post-featured-image/dimension-controls.js +52 -1
  445. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  446. package/build-module/post-featured-image/edit.js +11 -4
  447. package/build-module/post-featured-image/edit.js.map +1 -1
  448. package/build-module/post-featured-image/index.js +4 -0
  449. package/build-module/post-featured-image/index.js.map +1 -1
  450. package/build-module/post-navigation-link/edit.js +2 -0
  451. package/build-module/post-navigation-link/edit.js.map +1 -1
  452. package/build-module/post-navigation-link/index.js +1 -0
  453. package/build-module/post-navigation-link/index.js.map +1 -1
  454. package/build-module/post-template/index.js +1 -0
  455. package/build-module/post-template/index.js.map +1 -1
  456. package/build-module/post-terms/index.js +1 -0
  457. package/build-module/post-terms/index.js.map +1 -1
  458. package/build-module/post-terms/use-post-terms.js +1 -1
  459. package/build-module/post-terms/use-post-terms.js.map +1 -1
  460. package/build-module/post-time-to-read/edit.js +90 -0
  461. package/build-module/post-time-to-read/edit.js.map +1 -0
  462. package/build-module/post-time-to-read/icon.js +15 -0
  463. package/build-module/post-time-to-read/icon.js.map +1 -0
  464. package/build-module/post-time-to-read/index.js +40 -0
  465. package/build-module/post-time-to-read/index.js.map +1 -0
  466. package/build-module/post-title/edit.js +2 -0
  467. package/build-module/post-title/edit.js.map +1 -1
  468. package/build-module/post-title/index.js +1 -0
  469. package/build-module/post-title/index.js.map +1 -1
  470. package/build-module/query/edit/inspector-controls/index.js +1 -0
  471. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  472. package/build-module/query/index.js +1 -0
  473. package/build-module/query/index.js.map +1 -1
  474. package/build-module/query/utils.js +1 -0
  475. package/build-module/query/utils.js.map +1 -1
  476. package/build-module/query-no-results/index.js +1 -0
  477. package/build-module/query-no-results/index.js.map +1 -1
  478. package/build-module/query-pagination/index.js +1 -0
  479. package/build-module/query-pagination/index.js.map +1 -1
  480. package/build-module/query-pagination-next/index.js +1 -0
  481. package/build-module/query-pagination-next/index.js.map +1 -1
  482. package/build-module/query-pagination-numbers/index.js +1 -0
  483. package/build-module/query-pagination-numbers/index.js.map +1 -1
  484. package/build-module/query-pagination-previous/index.js +1 -0
  485. package/build-module/query-pagination-previous/index.js.map +1 -1
  486. package/build-module/query-title/edit.js +2 -0
  487. package/build-module/query-title/edit.js.map +1 -1
  488. package/build-module/query-title/index.js +1 -0
  489. package/build-module/query-title/index.js.map +1 -1
  490. package/build-module/read-more/edit.js +1 -0
  491. package/build-module/read-more/edit.js.map +1 -1
  492. package/build-module/read-more/index.js +1 -0
  493. package/build-module/read-more/index.js.map +1 -1
  494. package/build-module/rss/edit.js +3 -0
  495. package/build-module/rss/edit.js.map +1 -1
  496. package/build-module/rss/index.js +1 -0
  497. package/build-module/rss/index.js.map +1 -1
  498. package/build-module/search/index.js +1 -0
  499. package/build-module/search/index.js.map +1 -1
  500. package/build-module/site-logo/edit.js +10 -11
  501. package/build-module/site-logo/edit.js.map +1 -1
  502. package/build-module/site-logo/index.js +1 -0
  503. package/build-module/site-logo/index.js.map +1 -1
  504. package/build-module/site-tagline/index.js +1 -0
  505. package/build-module/site-tagline/index.js.map +1 -1
  506. package/build-module/site-title/edit/index.js +2 -0
  507. package/build-module/site-title/edit/index.js.map +1 -1
  508. package/build-module/site-title/index.js +1 -0
  509. package/build-module/site-title/index.js.map +1 -1
  510. package/build-module/social-link/index.js +1 -0
  511. package/build-module/social-link/index.js.map +1 -1
  512. package/build-module/social-links/edit.js +2 -0
  513. package/build-module/social-links/edit.js.map +1 -1
  514. package/build-module/spacer/controls.native.js +9 -8
  515. package/build-module/spacer/controls.native.js.map +1 -1
  516. package/build-module/spacer/edit.native.js +39 -7
  517. package/build-module/spacer/edit.native.js.map +1 -1
  518. package/build-module/spacer/save.native.js +22 -0
  519. package/build-module/spacer/save.native.js.map +1 -0
  520. package/build-module/table/edit.js +6 -3
  521. package/build-module/table/edit.js.map +1 -1
  522. package/build-module/table-of-contents/edit.js +1 -0
  523. package/build-module/table-of-contents/edit.js.map +1 -1
  524. package/build-module/table-of-contents/utils.js +1 -1
  525. package/build-module/table-of-contents/utils.js.map +1 -1
  526. package/build-module/tag-cloud/edit.js +1 -0
  527. package/build-module/tag-cloud/edit.js.map +1 -1
  528. package/build-module/tag-cloud/index.js +1 -0
  529. package/build-module/tag-cloud/index.js.map +1 -1
  530. package/build-module/template-part/index.js +1 -0
  531. package/build-module/template-part/index.js.map +1 -1
  532. package/build-module/term-description/index.js +1 -0
  533. package/build-module/term-description/index.js.map +1 -1
  534. package/build-module/verse/index.js +6 -0
  535. package/build-module/verse/index.js.map +1 -1
  536. package/build-module/video/edit-common-settings.js +5 -0
  537. package/build-module/video/edit-common-settings.js.map +1 -1
  538. package/build-style/avatar/style-rtl.css +3 -0
  539. package/build-style/avatar/style.css +3 -0
  540. package/build-style/button/editor-rtl.css +31 -0
  541. package/build-style/button/editor.css +31 -0
  542. package/build-style/button/style-rtl.css +31 -0
  543. package/build-style/button/style.css +31 -0
  544. package/build-style/editor-rtl.css +33 -1
  545. package/build-style/editor.css +33 -1
  546. package/build-style/file/style-rtl.css +1 -0
  547. package/build-style/file/style.css +1 -0
  548. package/build-style/image/editor-rtl.css +1 -0
  549. package/build-style/image/editor.css +1 -0
  550. package/build-style/image/style-rtl.css +6 -2
  551. package/build-style/image/style.css +6 -0
  552. package/build-style/latest-comments/style-rtl.css +18 -5
  553. package/build-style/latest-comments/style.css +18 -5
  554. package/build-style/post-excerpt/editor-rtl.css +1 -1
  555. package/build-style/post-excerpt/editor.css +1 -1
  556. package/build-style/style-rtl.css +59 -7
  557. package/build-style/style.css +59 -5
  558. package/build-types/table-of-contents/utils.d.ts +1 -1
  559. package/package.json +31 -30
  560. package/src/archives/block.json +1 -0
  561. package/src/archives/edit.js +3 -0
  562. package/src/audio/edit.js +2 -0
  563. package/src/audio/test/__snapshots__/edit.native.js.snap +38 -38
  564. package/src/avatar/block.json +1 -0
  565. package/src/avatar/edit.js +2 -4
  566. package/src/avatar/index.php +67 -63
  567. package/src/avatar/style.scss +3 -0
  568. package/src/button/block.json +17 -6
  569. package/src/button/edit.js +2 -1
  570. package/src/button/editor.scss +36 -0
  571. package/src/button/style.scss +37 -1
  572. package/src/buttons/test/__snapshots__/edit.native.js.snap +11 -11
  573. package/src/calendar/block.json +1 -0
  574. package/src/categories/block.json +1 -0
  575. package/src/categories/edit.js +5 -0
  576. package/src/code/test/__snapshots__/edit.native.js.snap +2 -2
  577. package/src/columns/edit.js +1 -0
  578. package/src/columns/test/__snapshots__/edit.native.js.snap +66 -66
  579. package/src/columns/test/utils.js +54 -0
  580. package/src/columns/utils.js +8 -8
  581. package/src/comment-author-avatar/block.json +1 -0
  582. package/src/comment-author-name/block.json +1 -0
  583. package/src/comment-author-name/edit.js +2 -0
  584. package/src/comment-content/block.json +1 -0
  585. package/src/comment-date/block.json +1 -0
  586. package/src/comment-date/edit.js +1 -0
  587. package/src/comment-edit-link/block.json +1 -0
  588. package/src/comment-edit-link/edit.js +1 -0
  589. package/src/comment-reply-link/block.json +1 -0
  590. package/src/comment-template/block.json +1 -0
  591. package/src/comments/block.json +2 -1
  592. package/src/comments-pagination/block.json +1 -0
  593. package/src/comments-pagination-next/block.json +1 -0
  594. package/src/comments-pagination-numbers/block.json +1 -0
  595. package/src/comments-pagination-previous/block.json +1 -0
  596. package/src/comments-title/edit.js +2 -0
  597. package/src/cover/edit/inspector-controls.js +2 -0
  598. package/src/cover/index.php +4 -6
  599. package/src/cover/test/__snapshots__/edit.native.js.snap +36 -36
  600. package/src/embed/embed-controls.js +1 -0
  601. package/src/embed/test/__snapshots__/index.native.js.snap +52 -52
  602. package/src/file/block.json +10 -1
  603. package/src/file/inspector.js +3 -0
  604. package/src/file/style.scss +1 -0
  605. package/src/file/test/__snapshots__/edit.native.js.snap +49 -49
  606. package/src/freeform/modal.js +1 -1
  607. package/src/gallery/edit.js +2 -0
  608. package/src/gallery/shared.js +6 -11
  609. package/src/gallery/test/__snapshots__/index.native.js.snap +71 -71
  610. package/src/gallery/use-image-sizes.js +3 -16
  611. package/src/gallery/v1/edit.js +8 -16
  612. package/src/gallery/v1/gallery-image.js +1 -2
  613. package/src/gallery/v1/shared.js +5 -10
  614. package/src/group/test/__snapshots__/edit.native.js.snap +5 -5
  615. package/src/heading/test/__snapshots__/index.native.js.snap +1 -1
  616. package/src/home-link/block.json +1 -0
  617. package/src/image/edit.js +4 -4
  618. package/src/image/editor.scss +1 -0
  619. package/src/image/image.js +9 -20
  620. package/src/image/index.php +4 -4
  621. package/src/image/style.scss +13 -0
  622. package/src/image/utils.js +2 -2
  623. package/src/index.js +2 -0
  624. package/src/latest-comments/block.json +14 -0
  625. package/src/latest-comments/edit.js +12 -2
  626. package/src/latest-comments/style.scss +25 -7
  627. package/src/latest-posts/block.json +1 -0
  628. package/src/latest-posts/edit.js +4 -0
  629. package/src/list/ordered-list-settings.js +1 -0
  630. package/src/list/test/__snapshots__/edit.native.js.snap +4 -4
  631. package/src/list-item/edit.js +10 -3
  632. package/src/list-item/hooks/use-outdent-list-item.js +2 -1
  633. package/src/loginout/block.json +1 -0
  634. package/src/loginout/edit.js +2 -0
  635. package/src/media-text/edit.js +2 -0
  636. package/src/missing/test/__snapshots__/edit.native.js.snap +1 -1
  637. package/src/more/edit.js +1 -0
  638. package/src/navigation/block.json +1 -0
  639. package/src/navigation/edit/index.js +130 -82
  640. package/src/navigation/edit/navigation-menu-selector.js +12 -26
  641. package/src/navigation/edit/overlay-menu-preview.js +1 -0
  642. package/src/navigation/edit/placeholder/index.js +1 -1
  643. package/src/navigation/edit/test/navigation-menu-selector.js +638 -0
  644. package/src/navigation/edit/unsaved-inner-blocks.js +1 -0
  645. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +51 -48
  646. package/src/navigation/edit/use-create-navigation-menu.js +1 -1
  647. package/src/navigation/edit/use-generate-default-navigation-title.js +1 -1
  648. package/src/navigation/edit/use-navigation-notice.js +16 -13
  649. package/src/navigation/index.php +50 -25
  650. package/src/navigation/use-navigation-menu.js +1 -1
  651. package/src/navigation-link/edit.js +10 -5
  652. package/src/navigation-link/link-ui.js +2 -0
  653. package/src/navigation-link/test/__snapshots__/hooks.js.snap +12 -12
  654. package/src/page-list/block.json +1 -0
  655. package/src/page-list/convert-to-links-modal.js +38 -0
  656. package/src/page-list/edit.js +17 -37
  657. package/src/page-list/index.php +4 -4
  658. package/src/page-list/test/convert-to-links-modal.js +134 -0
  659. package/src/page-list/use-convert-to-navigation-links.js +64 -4
  660. package/src/paragraph/edit.js +1 -0
  661. package/src/post-author/block.json +1 -0
  662. package/src/post-author/edit.js +4 -0
  663. package/src/post-author-biography/block.json +1 -0
  664. package/src/post-author-name/block.json +1 -0
  665. package/src/post-author-name/edit.js +2 -0
  666. package/src/post-comments-count/block.json +1 -0
  667. package/src/post-comments-form/block.json +1 -0
  668. package/src/post-comments-link/block.json +1 -0
  669. package/src/post-content/block.json +1 -0
  670. package/src/post-date/block.json +1 -0
  671. package/src/post-date/edit.js +2 -0
  672. package/src/post-excerpt/block.json +5 -0
  673. package/src/post-excerpt/edit.js +73 -7
  674. package/src/post-excerpt/editor.scss +1 -1
  675. package/src/post-excerpt/index.php +29 -5
  676. package/src/post-featured-image/block.json +4 -0
  677. package/src/post-featured-image/dimension-controls.js +64 -2
  678. package/src/post-featured-image/edit.js +20 -6
  679. package/src/post-featured-image/index.php +25 -9
  680. package/src/post-navigation-link/block.json +1 -0
  681. package/src/post-navigation-link/edit.js +2 -0
  682. package/src/post-template/block.json +1 -0
  683. package/src/post-terms/block.json +1 -0
  684. package/src/post-terms/index.php +1 -0
  685. package/src/post-terms/use-post-terms.js +1 -1
  686. package/src/post-time-to-read/block.json +20 -0
  687. package/src/post-time-to-read/edit.js +101 -0
  688. package/src/post-time-to-read/icon.js +15 -0
  689. package/src/post-time-to-read/index.js +17 -0
  690. package/src/post-time-to-read/index.php +62 -0
  691. package/src/post-title/block.json +1 -0
  692. package/src/post-title/edit.js +2 -0
  693. package/src/post-title/index.php +3 -3
  694. package/src/preformatted/test/__snapshots__/edit.native.js.snap +10 -10
  695. package/src/query/block.json +1 -0
  696. package/src/query/edit/inspector-controls/index.js +1 -0
  697. package/src/query-no-results/block.json +1 -0
  698. package/src/query-pagination/block.json +1 -0
  699. package/src/query-pagination-next/block.json +1 -0
  700. package/src/query-pagination-numbers/block.json +1 -0
  701. package/src/query-pagination-previous/block.json +1 -0
  702. package/src/query-title/block.json +1 -0
  703. package/src/query-title/edit.js +2 -0
  704. package/src/read-more/block.json +1 -0
  705. package/src/read-more/edit.js +1 -0
  706. package/src/rss/block.json +1 -0
  707. package/src/rss/edit.js +3 -0
  708. package/src/search/block.json +1 -0
  709. package/src/search/test/__snapshots__/edit.native.js.snap +60 -60
  710. package/src/separator/test/__snapshots__/edit.native.js.snap +1 -1
  711. package/src/site-logo/block.json +1 -0
  712. package/src/site-logo/edit.js +6 -6
  713. package/src/site-logo/index.php +7 -2
  714. package/src/site-tagline/block.json +1 -0
  715. package/src/site-title/block.json +1 -0
  716. package/src/site-title/edit/index.js +2 -0
  717. package/src/social-link/block.json +1 -0
  718. package/src/social-link/index.php +6 -6
  719. package/src/social-links/edit.js +2 -0
  720. package/src/social-links/test/__snapshots__/edit.native.js.snap +16 -16
  721. package/src/spacer/controls.native.js +13 -5
  722. package/src/spacer/edit.native.js +45 -6
  723. package/src/spacer/save.native.js +18 -0
  724. package/src/spacer/test/__snapshots__/index.native.js.snap +21 -9
  725. package/src/spacer/test/index.native.js +81 -0
  726. package/src/table/edit.js +6 -3
  727. package/src/table-of-contents/edit.js +1 -0
  728. package/src/table-of-contents/utils.ts +1 -1
  729. package/src/tag-cloud/block.json +1 -0
  730. package/src/tag-cloud/edit.js +1 -0
  731. package/src/template-part/block.json +1 -0
  732. package/src/template-part/index.php +7 -6
  733. package/src/term-description/block.json +1 -0
  734. package/src/verse/block.json +6 -0
  735. package/src/verse/test/__snapshots__/edit.native.js.snap +2 -2
  736. package/src/video/edit-common-settings.js +5 -0
  737. package/tsconfig.json +2 -1
  738. package/tsconfig.tsbuildinfo +1 -1
@@ -383,5 +383,139 @@ describe( 'page list convert to links', () => {
383
383
  },
384
384
  ] );
385
385
  } );
386
+
387
+ it( 'Can use a different parent page', () => {
388
+ const pages = [
389
+ {
390
+ title: {
391
+ raw: 'Sample Page',
392
+ rendered: 'Sample Page',
393
+ },
394
+ id: 2,
395
+ parent: 0,
396
+ link: 'http://wordpress.local/sample-page/',
397
+ type: 'page',
398
+ },
399
+ {
400
+ title: {
401
+ raw: 'About',
402
+ rendered: 'About',
403
+ },
404
+ id: 34,
405
+ parent: 0,
406
+ link: 'http://wordpress.local/about/',
407
+ type: 'page',
408
+ },
409
+ {
410
+ title: {
411
+ raw: 'Contact Page',
412
+ rendered: 'Contact Page',
413
+ },
414
+ id: 37,
415
+ parent: 0,
416
+ link: 'http://wordpress.local/contact-page/',
417
+ type: 'page',
418
+ },
419
+ {
420
+ title: {
421
+ raw: 'Test',
422
+ rendered: 'Test',
423
+ },
424
+ id: 229,
425
+ parent: 0,
426
+ link: 'http://wordpress.local/test/',
427
+ type: 'page',
428
+ },
429
+ {
430
+ title: {
431
+ raw: 'About Sub 1',
432
+ rendered: 'About Sub 1',
433
+ },
434
+ id: 738,
435
+ parent: 34,
436
+ link: 'http://wordpress.local/about/about-sub-1/',
437
+ type: 'page',
438
+ },
439
+ {
440
+ title: {
441
+ raw: 'About Sub 2',
442
+ rendered: 'About Sub 2',
443
+ },
444
+ id: 740,
445
+ parent: 34,
446
+ link: 'http://wordpress.local/about/about-sub-2/',
447
+ type: 'page',
448
+ },
449
+ {
450
+ title: {
451
+ raw: 'Test Sub',
452
+ rendered: 'Test Sub',
453
+ },
454
+ id: 742,
455
+ parent: 229,
456
+ link: 'http://wordpress.local/test/test-sub/',
457
+ type: 'page',
458
+ },
459
+ {
460
+ title: {
461
+ raw: 'Test Sub Sub',
462
+ rendered: 'Test Sub Sub',
463
+ },
464
+ id: 744,
465
+ parent: 742,
466
+ link: 'http://wordpress.local/test/test-sub/test-sub-sub/',
467
+ type: 'page',
468
+ },
469
+ ];
470
+
471
+ const convertLinksWithParentOneLevel = convertToNavigationLinks(
472
+ pages,
473
+ 34
474
+ );
475
+
476
+ expect( convertLinksWithParentOneLevel ).toEqual( [
477
+ {
478
+ attributes: {
479
+ id: 738,
480
+ kind: 'post-type',
481
+ label: 'About Sub 1',
482
+ type: 'page',
483
+ url: 'http://wordpress.local/about/about-sub-1/',
484
+ },
485
+ innerBlocks: [],
486
+ name: 'core/navigation-link',
487
+ },
488
+ {
489
+ attributes: {
490
+ id: 740,
491
+ kind: 'post-type',
492
+ label: 'About Sub 2',
493
+ type: 'page',
494
+ url: 'http://wordpress.local/about/about-sub-2/',
495
+ },
496
+ innerBlocks: [],
497
+ name: 'core/navigation-link',
498
+ },
499
+ ] );
500
+
501
+ const convertLinksWithParentTwoLevels = convertToNavigationLinks(
502
+ pages,
503
+ 742
504
+ );
505
+
506
+ expect( convertLinksWithParentTwoLevels ).toEqual( [
507
+ {
508
+ attributes: {
509
+ id: 744,
510
+ kind: 'post-type',
511
+ label: 'Test Sub Sub',
512
+ type: 'page',
513
+ url: 'http://wordpress.local/test/test-sub/test-sub-sub/',
514
+ },
515
+ innerBlocks: [],
516
+ name: 'core/navigation-link',
517
+ },
518
+ ] );
519
+ } );
386
520
  } );
387
521
  } );
@@ -5,7 +5,14 @@ import { createBlock } from '@wordpress/blocks';
5
5
  import { useSelect, useDispatch } from '@wordpress/data';
6
6
  import { store as blockEditorStore } from '@wordpress/block-editor';
7
7
 
8
- export function convertToNavigationLinks( pages = [] ) {
8
+ /**
9
+ * Converts an array of pages into a nested array of navigation link blocks.
10
+ *
11
+ * @param {Array} pages An array of pages.
12
+ *
13
+ * @return {Array} A nested array of navigation link blocks.
14
+ */
15
+ function createNavigationLinks( pages = [] ) {
9
16
  const linkMap = {};
10
17
  const navigationLinks = [];
11
18
  pages.forEach( ( { id, title, link: url, type, parent } ) => {
@@ -30,11 +37,61 @@ export function convertToNavigationLinks( pages = [] ) {
30
37
  // Use a placeholder if the child appears before parent in list.
31
38
  linkMap[ parent ] = { innerBlocks: [] };
32
39
  }
40
+ // Although these variables are not referenced, they are needed to store the innerBlocks in memory.
33
41
  const parentLinkInnerBlocks = linkMap[ parent ].innerBlocks;
34
42
  parentLinkInnerBlocks.push( linkMap[ id ] );
35
43
  }
36
44
  } );
37
45
 
46
+ return navigationLinks;
47
+ }
48
+
49
+ /**
50
+ * Finds a navigation link block by id, recursively.
51
+ * It might be possible to make this a more generic helper function.
52
+ *
53
+ * @param {Array} navigationLinks An array of navigation link blocks.
54
+ * @param {number} id The id of the navigation link to find.
55
+ *
56
+ * @return {Object|null} The navigation link block with the given id.
57
+ */
58
+ function findNavigationLinkById( navigationLinks, id ) {
59
+ for ( const navigationLink of navigationLinks ) {
60
+ // Is this the link we're looking for?
61
+ if ( navigationLink.attributes.id === id ) {
62
+ return navigationLink;
63
+ }
64
+
65
+ // If not does it have innerBlocks?
66
+ if ( navigationLink.innerBlocks && navigationLink.innerBlocks.length ) {
67
+ const foundNavigationLink = findNavigationLinkById(
68
+ navigationLink.innerBlocks,
69
+ id
70
+ );
71
+
72
+ if ( foundNavigationLink ) {
73
+ return foundNavigationLink;
74
+ }
75
+ }
76
+ }
77
+
78
+ return null;
79
+ }
80
+
81
+ export function convertToNavigationLinks( pages = [], parentPageID = null ) {
82
+ let navigationLinks = createNavigationLinks( pages );
83
+
84
+ // If a parent page ID is provided, only return the children of that page.
85
+ if ( parentPageID ) {
86
+ const parentPage = findNavigationLinkById(
87
+ navigationLinks,
88
+ parentPageID
89
+ );
90
+ if ( parentPage && parentPage.innerBlocks ) {
91
+ navigationLinks = parentPage.innerBlocks;
92
+ }
93
+ }
94
+
38
95
  // Transform all links with innerBlocks into Submenus. This can't be done
39
96
  // sooner because page objects have no information on their children.
40
97
  const transformSubmenus = ( listOfLinks ) => {
@@ -53,11 +110,14 @@ export function convertToNavigationLinks( pages = [] ) {
53
110
  };
54
111
 
55
112
  transformSubmenus( navigationLinks );
56
-
57
113
  return navigationLinks;
58
114
  }
59
115
 
60
- export function useConvertToNavigationLinks( { clientId, pages } ) {
116
+ export function useConvertToNavigationLinks( {
117
+ clientId,
118
+ pages,
119
+ parentPageID,
120
+ } ) {
61
121
  const { replaceBlock, selectBlock } = useDispatch( blockEditorStore );
62
122
 
63
123
  const { parentNavBlockClientId } = useSelect(
@@ -79,7 +139,7 @@ export function useConvertToNavigationLinks( { clientId, pages } ) {
79
139
  );
80
140
 
81
141
  return () => {
82
- const navigationLinks = convertToNavigationLinks( pages );
142
+ const navigationLinks = convertToNavigationLinks( pages, parentPageID );
83
143
 
84
144
  // Replace the Page List block with the Navigation Links.
85
145
  replaceBlock( clientId, navigationLinks );
@@ -110,6 +110,7 @@ function ParagraphBlock( {
110
110
  panelId={ clientId }
111
111
  >
112
112
  <ToggleControl
113
+ __nextHasNoMarginBottom
113
114
  label={ __( 'Drop cap' ) }
114
115
  checked={ !! dropCap }
115
116
  onChange={ () =>
@@ -35,6 +35,7 @@
35
35
  },
36
36
  "usesContext": [ "postType", "postId", "queryId" ],
37
37
  "supports": {
38
+ "anchor": true,
38
39
  "html": false,
39
40
  "spacing": {
40
41
  "margin": true,
@@ -120,6 +120,7 @@ function PostAuthorEdit( {
120
120
  />
121
121
  ) ) }
122
122
  <ToggleControl
123
+ __nextHasNoMarginBottom
123
124
  label={ __( 'Show avatar' ) }
124
125
  checked={ showAvatar }
125
126
  onChange={ () =>
@@ -140,6 +141,7 @@ function PostAuthorEdit( {
140
141
  />
141
142
  ) }
142
143
  <ToggleControl
144
+ __nextHasNoMarginBottom
143
145
  label={ __( 'Show bio' ) }
144
146
  checked={ showBio }
145
147
  onChange={ () =>
@@ -147,12 +149,14 @@ function PostAuthorEdit( {
147
149
  }
148
150
  />
149
151
  <ToggleControl
152
+ __nextHasNoMarginBottom
150
153
  label={ __( 'Link author name to author page' ) }
151
154
  checked={ isLink }
152
155
  onChange={ () => setAttributes( { isLink: ! isLink } ) }
153
156
  />
154
157
  { isLink && (
155
158
  <ToggleControl
159
+ __nextHasNoMarginBottom
156
160
  label={ __( 'Open in new tab' ) }
157
161
  onChange={ ( value ) =>
158
162
  setAttributes( {
@@ -13,6 +13,7 @@
13
13
  },
14
14
  "usesContext": [ "postType", "postId" ],
15
15
  "supports": {
16
+ "anchor": true,
16
17
  "spacing": {
17
18
  "margin": true,
18
19
  "padding": true
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "usesContext": [ "postType", "postId" ],
23
23
  "supports": {
24
+ "anchor": true,
24
25
  "html": false,
25
26
  "spacing": {
26
27
  "margin": true,
@@ -71,12 +71,14 @@ function PostAuthorNameEdit( {
71
71
  <InspectorControls>
72
72
  <PanelBody title={ __( 'Link settings' ) }>
73
73
  <ToggleControl
74
+ __nextHasNoMarginBottom
74
75
  label={ __( 'Link to author archive' ) }
75
76
  onChange={ () => setAttributes( { isLink: ! isLink } ) }
76
77
  checked={ isLink }
77
78
  />
78
79
  { isLink && (
79
80
  <ToggleControl
81
+ __nextHasNoMarginBottom
80
82
  label={ __( 'Open in new tab' ) }
81
83
  onChange={ ( value ) =>
82
84
  setAttributes( {
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "usesContext": [ "postId" ],
16
16
  "supports": {
17
+ "anchor": true,
17
18
  "html": false,
18
19
  "color": {
19
20
  "gradients": true,
@@ -13,6 +13,7 @@
13
13
  },
14
14
  "usesContext": [ "postId", "postType" ],
15
15
  "supports": {
16
+ "anchor": true,
16
17
  "html": false,
17
18
  "color": {
18
19
  "gradients": true,
@@ -14,6 +14,7 @@
14
14
  }
15
15
  },
16
16
  "supports": {
17
+ "anchor": true,
17
18
  "html": false,
18
19
  "color": {
19
20
  "link": true,
@@ -8,6 +8,7 @@
8
8
  "textdomain": "default",
9
9
  "usesContext": [ "postId", "postType", "queryId" ],
10
10
  "supports": {
11
+ "anchor": true,
11
12
  "align": [ "wide", "full" ],
12
13
  "html": false,
13
14
  "__experimentalLayout": true,
@@ -24,6 +24,7 @@
24
24
  },
25
25
  "usesContext": [ "postId", "postType", "queryId" ],
26
26
  "supports": {
27
+ "anchor": true,
27
28
  "html": false,
28
29
  "color": {
29
30
  "gradients": true,
@@ -150,6 +150,7 @@ export default function PostDateEdit( {
150
150
  }
151
151
  />
152
152
  <ToggleControl
153
+ __nextHasNoMarginBottom
153
154
  label={
154
155
  postType?.labels.singular_name
155
156
  ? sprintf(
@@ -163,6 +164,7 @@ export default function PostDateEdit( {
163
164
  checked={ isLink }
164
165
  />
165
166
  <ToggleControl
167
+ __nextHasNoMarginBottom
166
168
  label={ __( 'Display last modified date' ) }
167
169
  onChange={ ( value ) =>
168
170
  setAttributes( {
@@ -16,10 +16,15 @@
16
16
  "showMoreOnNewLine": {
17
17
  "type": "boolean",
18
18
  "default": true
19
+ },
20
+ "excerptLength": {
21
+ "type": "number",
22
+ "default": 55
19
23
  }
20
24
  },
21
25
  "usesContext": [ "postId", "postType", "queryId" ],
22
26
  "supports": {
27
+ "anchor": true,
23
28
  "html": false,
24
29
  "color": {
25
30
  "gradients": true,
@@ -16,8 +16,8 @@ import {
16
16
  Warning,
17
17
  useBlockProps,
18
18
  } from '@wordpress/block-editor';
19
- import { PanelBody, ToggleControl } from '@wordpress/components';
20
- import { __ } from '@wordpress/i18n';
19
+ import { PanelBody, ToggleControl, RangeControl } from '@wordpress/components';
20
+ import { __, _x } from '@wordpress/i18n';
21
21
 
22
22
  /**
23
23
  * Internal dependencies
@@ -25,7 +25,7 @@ import { __ } from '@wordpress/i18n';
25
25
  import { useCanEditEntity } from '../utils/hooks';
26
26
 
27
27
  export default function PostExcerptEditor( {
28
- attributes: { textAlign, moreText, showMoreOnNewLine },
28
+ attributes: { textAlign, moreText, showMoreOnNewLine, excerptLength },
29
29
  setAttributes,
30
30
  isSelected,
31
31
  context: { postId, postType, queryId },
@@ -33,6 +33,7 @@ export default function PostExcerptEditor( {
33
33
  const isDescendentOfQueryLoop = Number.isFinite( queryId );
34
34
  const userCanEdit = useCanEditEntity( 'postType', postType, postId );
35
35
  const isEditable = userCanEdit && ! isDescendentOfQueryLoop;
36
+
36
37
  const [
37
38
  rawExcerpt,
38
39
  setExcerpt,
@@ -43,6 +44,14 @@ export default function PostExcerptEditor( {
43
44
  [ `has-text-align-${ textAlign }` ]: textAlign,
44
45
  } ),
45
46
  } );
47
+
48
+ /**
49
+ * translators: If your word count is based on single characters (e.g. East Asian characters),
50
+ * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
51
+ * Do not translate into your own language.
52
+ */
53
+ const wordCountType = _x( 'words', 'Word count type. Do not translate!' );
54
+
46
55
  /**
47
56
  * When excerpt is editable, strip the html tags from
48
57
  * rendered excerpt. This will be used if the entity's
@@ -109,21 +118,67 @@ export default function PostExcerptEditor( {
109
118
  const excerptClassName = classnames( 'wp-block-post-excerpt__excerpt', {
110
119
  'is-inline': ! showMoreOnNewLine,
111
120
  } );
121
+
122
+ /**
123
+ * The excerpt length setting needs to be applied to both
124
+ * the raw and the rendered excerpt depending on which is being used.
125
+ */
126
+ const rawOrRenderedExcerpt = !! renderedExcerpt
127
+ ? strippedRenderedExcerpt
128
+ : rawExcerpt;
129
+
130
+ let trimmedExcerpt = '';
131
+ if ( wordCountType === 'words' ) {
132
+ trimmedExcerpt = rawOrRenderedExcerpt
133
+ .trim()
134
+ .split( ' ', excerptLength )
135
+ .join( ' ' );
136
+ } else if ( wordCountType === 'characters_excluding_spaces' ) {
137
+ /*
138
+ * 1. Split the excerpt at the character limit,
139
+ * then join the substrings back into one string.
140
+ * 2. Count the number of spaces in the excerpt
141
+ * by comparing the lengths of the string with and without spaces.
142
+ * 3. Add the number to the length of the visible excerpt,
143
+ * so that the spaces are excluded from the word count.
144
+ */
145
+ const excerptWithSpaces = rawOrRenderedExcerpt
146
+ .trim()
147
+ .split( '', excerptLength )
148
+ .join( '' );
149
+
150
+ const numberOfSpaces =
151
+ excerptWithSpaces.length -
152
+ excerptWithSpaces.replaceAll( ' ', '' ).length;
153
+
154
+ trimmedExcerpt = rawOrRenderedExcerpt
155
+ .trim()
156
+ .split( '', excerptLength + numberOfSpaces )
157
+ .join( '' );
158
+ } else if ( wordCountType === 'characters_including_spaces' ) {
159
+ trimmedExcerpt = rawOrRenderedExcerpt.trim().split( '', excerptLength );
160
+ }
161
+
162
+ trimmedExcerpt = trimmedExcerpt + '...';
163
+
112
164
  const excerptContent = isEditable ? (
113
165
  <RichText
114
166
  className={ excerptClassName }
115
167
  aria-label={ __( 'Post excerpt text' ) }
116
168
  value={
117
- rawExcerpt ||
118
- strippedRenderedExcerpt ||
119
- ( isSelected ? '' : __( 'No post excerpt found' ) )
169
+ isSelected
170
+ ? rawOrRenderedExcerpt
171
+ : ( trimmedExcerpt !== '...' ? trimmedExcerpt : '' ) ||
172
+ __( 'No post excerpt found' )
120
173
  }
121
174
  onChange={ setExcerpt }
122
175
  tagName="p"
123
176
  />
124
177
  ) : (
125
178
  <p className={ excerptClassName }>
126
- { strippedRenderedExcerpt || __( 'No post excerpt found' ) }
179
+ { trimmedExcerpt !== '...'
180
+ ? trimmedExcerpt
181
+ : __( 'No post excerpt found' ) }
127
182
  </p>
128
183
  );
129
184
  return (
@@ -139,6 +194,7 @@ export default function PostExcerptEditor( {
139
194
  <InspectorControls>
140
195
  <PanelBody title={ __( 'Settings' ) }>
141
196
  <ToggleControl
197
+ __nextHasNoMarginBottom
142
198
  label={ __( 'Show link on new line' ) }
143
199
  checked={ showMoreOnNewLine }
144
200
  onChange={ ( newShowMoreOnNewLine ) =>
@@ -147,6 +203,16 @@ export default function PostExcerptEditor( {
147
203
  } )
148
204
  }
149
205
  />
206
+ <RangeControl
207
+ label={ __( 'Max number of words' ) }
208
+ value={ excerptLength }
209
+ onChange={ ( value ) => {
210
+ setAttributes( { excerptLength: value } );
211
+ setExcerpt();
212
+ } }
213
+ min="10"
214
+ max="100"
215
+ />
150
216
  </PanelBody>
151
217
  </InspectorControls>
152
218
  <div { ...blockProps }>
@@ -1,5 +1,5 @@
1
1
  .wp-block-post-excerpt {
2
2
  .wp-block-post-excerpt__excerpt.is-inline {
3
- display: inline-block;
3
+ display: inline;
4
4
  }
5
5
  }
@@ -18,12 +18,18 @@ function render_block_core_post_excerpt( $attributes, $content, $block ) {
18
18
  return '';
19
19
  }
20
20
 
21
- $excerpt = get_the_excerpt();
22
-
23
- if ( empty( $excerpt ) ) {
24
- return '';
21
+ /*
22
+ * The purpose of the excerpt length setting is to limit the length of both
23
+ * automatically generated and user-created excerpts.
24
+ * Because the excerpt_length filter only applies to auto generated excerpts,
25
+ * wp_trim_words is used instead.
26
+ */
27
+ $excerpt_length = $attributes['excerptLength'];
28
+ if ( isset( $excerpt_length ) ) {
29
+ $excerpt = wp_trim_words( get_the_excerpt(), $excerpt_length );
30
+ } else {
31
+ $excerpt = get_the_excerpt();
25
32
  }
26
-
27
33
  $more_text = ! empty( $attributes['moreText'] ) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url( get_the_permalink( $block->context['postId'] ) ) . '">' . wp_kses_post( $attributes['moreText'] ) . '</a>' : '';
28
34
  $filter_excerpt_more = function( $more ) use ( $more_text ) {
29
35
  return empty( $more_text ) ? $more : '';
@@ -70,3 +76,21 @@ function register_block_core_post_excerpt() {
70
76
  );
71
77
  }
72
78
  add_action( 'init', 'register_block_core_post_excerpt' );
79
+
80
+ /**
81
+ * If themes or plugins filter the excerpt_length, we need to
82
+ * override the filter in the editor, otherwise
83
+ * the excerpt length block setting has no effect.
84
+ * Returns 100 because 100 is the max length in the setting.
85
+ */
86
+ if ( is_admin() ||
87
+ defined( 'REST_REQUEST' ) ||
88
+ 'REST_REQUEST' ) {
89
+ add_filter(
90
+ 'excerpt_length',
91
+ function() {
92
+ return 100;
93
+ },
94
+ PHP_INT_MAX
95
+ );
96
+ }
@@ -11,6 +11,9 @@
11
11
  "type": "boolean",
12
12
  "default": false
13
13
  },
14
+ "aspectRatio": {
15
+ "type": "string"
16
+ },
14
17
  "width": {
15
18
  "type": "string"
16
19
  },
@@ -53,6 +56,7 @@
53
56
  "usesContext": [ "postId", "postType", "queryId" ],
54
57
  "supports": {
55
58
  "align": [ "left", "right", "center", "wide", "full" ],
59
+ "anchor": true,
56
60
  "color": {
57
61
  "__experimentalDuotone": "img, .wp-block-post-featured-image__placeholder, .components-placeholder__illustration, .components-placeholder::before",
58
62
  "text": false,