@wordpress/block-library 7.5.0 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +3 -2
  3. package/babel-plugin.js +154 -0
  4. package/build/audio/edit.js +1 -1
  5. package/build/audio/edit.js.map +1 -1
  6. package/build/block/edit.js +10 -9
  7. package/build/block/edit.js.map +1 -1
  8. package/build/button/index.js +1 -0
  9. package/build/button/index.js.map +1 -1
  10. package/build/categories/edit.js +1 -1
  11. package/build/categories/edit.js.map +1 -1
  12. package/build/categories/index.js +1 -1
  13. package/build/comment-author-avatar/index.js +1 -0
  14. package/build/comment-author-avatar/index.js.map +1 -1
  15. package/build/comments-title/deprecated.js +110 -0
  16. package/build/comments-title/deprecated.js.map +1 -0
  17. package/build/comments-title/edit.js +35 -37
  18. package/build/comments-title/edit.js.map +1 -1
  19. package/build/comments-title/index.js +5 -8
  20. package/build/comments-title/index.js.map +1 -1
  21. package/build/cover/controls.native.js +2 -3
  22. package/build/cover/controls.native.js.map +1 -1
  23. package/build/cover/edit/block-controls.js +115 -0
  24. package/build/cover/edit/block-controls.js.map +1 -0
  25. package/build/cover/edit/cover-placeholder.js +49 -0
  26. package/build/cover/edit/cover-placeholder.js.map +1 -0
  27. package/build/cover/edit/index.js +333 -0
  28. package/build/cover/edit/index.js.map +1 -0
  29. package/build/cover/edit/inspector-controls.js +224 -0
  30. package/build/cover/edit/inspector-controls.js.map +1 -0
  31. package/build/cover/edit/resizable-cover.js +67 -0
  32. package/build/cover/edit/resizable-cover.js.map +1 -0
  33. package/build/cover/{use-cover-is-dark.js → edit/use-cover-is-dark.js} +0 -0
  34. package/build/cover/edit/use-cover-is-dark.js.map +1 -0
  35. package/build/cover/edit.native.js +0 -1
  36. package/build/cover/edit.native.js.map +1 -1
  37. package/build/cover/focal-point-settings-button.native.js.map +1 -1
  38. package/build/cover/shared.js +9 -0
  39. package/build/cover/shared.js.map +1 -1
  40. package/build/embed/embed-preview.js +1 -1
  41. package/build/embed/embed-preview.js.map +1 -1
  42. package/build/file/edit.native.js +0 -1
  43. package/build/file/edit.native.js.map +1 -1
  44. package/build/gallery/edit.js +2 -1
  45. package/build/gallery/edit.js.map +1 -1
  46. package/build/gallery/gallery.js +1 -1
  47. package/build/gallery/gallery.js.map +1 -1
  48. package/build/gallery/shared.js +2 -2
  49. package/build/gallery/shared.js.map +1 -1
  50. package/build/gallery/use-get-media.js +2 -1
  51. package/build/gallery/use-get-media.js.map +1 -1
  52. package/build/gallery/use-short-code-transform.js +19 -18
  53. package/build/gallery/use-short-code-transform.js.map +1 -1
  54. package/build/gallery/v1/gallery.js +1 -1
  55. package/build/gallery/v1/gallery.js.map +1 -1
  56. package/build/heading/edit.js +6 -2
  57. package/build/heading/edit.js.map +1 -1
  58. package/build/heading/index.js +1 -0
  59. package/build/heading/index.js.map +1 -1
  60. package/build/heading/transforms.js +1 -0
  61. package/build/heading/transforms.js.map +1 -1
  62. package/build/image/edit.js +5 -2
  63. package/build/image/edit.js.map +1 -1
  64. package/build/image/edit.native.js +0 -1
  65. package/build/image/edit.native.js.map +1 -1
  66. package/build/image/image.js +1 -1
  67. package/build/image/image.js.map +1 -1
  68. package/build/index.js +46 -10
  69. package/build/index.js.map +1 -1
  70. package/build/is-block-metadata-experimental.js +18 -0
  71. package/build/is-block-metadata-experimental.js.map +1 -0
  72. package/build/latest-posts/edit.js +30 -4
  73. package/build/latest-posts/edit.js.map +1 -1
  74. package/build/list/transforms.js +6 -0
  75. package/build/list/transforms.js.map +1 -1
  76. package/build/list/v2/edit.js +2 -1
  77. package/build/list/v2/edit.js.map +1 -1
  78. package/build/list/v2/migrate.js +1 -0
  79. package/build/list/v2/migrate.js.map +1 -1
  80. package/build/list/v2/transforms.js +46 -9
  81. package/build/list/v2/transforms.js.map +1 -1
  82. package/build/list-item/edit.js +7 -9
  83. package/build/list-item/edit.js.map +1 -1
  84. package/build/list-item/hooks/index.js +24 -0
  85. package/build/list-item/hooks/index.js.map +1 -1
  86. package/build/list-item/hooks/use-backspace.js +59 -0
  87. package/build/list-item/hooks/use-backspace.js.map +1 -0
  88. package/build/list-item/hooks/use-enter.js +6 -9
  89. package/build/list-item/hooks/use-enter.js.map +1 -1
  90. package/build/list-item/hooks/use-indent-list-item.js +33 -39
  91. package/build/list-item/hooks/use-indent-list-item.js.map +1 -1
  92. package/build/list-item/hooks/use-space.js +54 -0
  93. package/build/list-item/hooks/use-space.js.map +1 -0
  94. package/build/list-item/hooks/use-split.js +30 -0
  95. package/build/list-item/hooks/use-split.js.map +1 -0
  96. package/build/list-item/index.js +1 -0
  97. package/build/list-item/index.js.map +1 -1
  98. package/build/list-item/utils.js +1 -1
  99. package/build/list-item/utils.js.map +1 -1
  100. package/build/media-text/edit.native.js +2 -1
  101. package/build/media-text/edit.native.js.map +1 -1
  102. package/build/media-text/media-container.native.js +2 -4
  103. package/build/media-text/media-container.native.js.map +1 -1
  104. package/build/media-text/transforms.js +137 -8
  105. package/build/media-text/transforms.js.map +1 -1
  106. package/build/navigation/edit/index.js +86 -81
  107. package/build/navigation/edit/index.js.map +1 -1
  108. package/build/navigation/edit/inner-blocks.js +1 -5
  109. package/build/navigation/edit/inner-blocks.js.map +1 -1
  110. package/build/navigation/use-navigation-entities.js +3 -3
  111. package/build/navigation/use-navigation-entities.js.map +1 -1
  112. package/build/navigation-link/fallback-variations.js +1 -1
  113. package/build/navigation-link/fallback-variations.js.map +1 -1
  114. package/build/navigation-link/hooks.js +1 -1
  115. package/build/navigation-link/hooks.js.map +1 -1
  116. package/build/page-list/convert-to-links-modal.js +1 -1
  117. package/build/page-list/convert-to-links-modal.js.map +1 -1
  118. package/build/page-list/edit.js +1 -1
  119. package/build/page-list/edit.js.map +1 -1
  120. package/build/post-author/edit.js +1 -1
  121. package/build/post-author/edit.js.map +1 -1
  122. package/build/post-author-name/index.js +1 -0
  123. package/build/post-author-name/index.js.map +1 -1
  124. package/build/post-comment/index.js +1 -0
  125. package/build/post-comment/index.js.map +1 -1
  126. package/build/post-comments/edit.js +34 -16
  127. package/build/post-comments/edit.js.map +1 -1
  128. package/build/post-comments-count/index.js +1 -0
  129. package/build/post-comments-count/index.js.map +1 -1
  130. package/build/post-comments-form/form.js +1 -1
  131. package/build/post-comments-form/form.js.map +1 -1
  132. package/build/post-comments-link/index.js +1 -0
  133. package/build/post-comments-link/index.js.map +1 -1
  134. package/build/post-featured-image/edit.js +1 -1
  135. package/build/post-featured-image/edit.js.map +1 -1
  136. package/build/post-template/edit.js +7 -2
  137. package/build/post-template/edit.js.map +1 -1
  138. package/build/post-terms/edit.js +11 -2
  139. package/build/post-terms/edit.js.map +1 -1
  140. package/build/post-terms/hooks.js +33 -0
  141. package/build/post-terms/hooks.js.map +1 -0
  142. package/build/post-terms/index.js +12 -5
  143. package/build/post-terms/index.js.map +1 -1
  144. package/build/post-title/index.js +1 -1
  145. package/build/post-title/index.js.map +1 -1
  146. package/build/pullquote/edit.js +1 -1
  147. package/build/pullquote/edit.js.map +1 -1
  148. package/build/pullquote/edit.native.js +1 -1
  149. package/build/pullquote/edit.native.js.map +1 -1
  150. package/build/query/edit/inspector-controls/index.js +26 -17
  151. package/build/query/edit/inspector-controls/index.js.map +1 -1
  152. package/build/query/edit/inspector-controls/parent-control.js +148 -0
  153. package/build/query/edit/inspector-controls/parent-control.js.map +1 -0
  154. package/build/query/edit/inspector-controls/sticky-control.js +41 -0
  155. package/build/query/edit/inspector-controls/sticky-control.js.map +1 -0
  156. package/build/query/index.js +2 -1
  157. package/build/query/index.js.map +1 -1
  158. package/build/query/utils.js +28 -2
  159. package/build/query/utils.js.map +1 -1
  160. package/build/query-title/index.js +1 -1
  161. package/build/query-title/index.js.map +1 -1
  162. package/build/query-title/variations.js +1 -1
  163. package/build/query-title/variations.js.map +1 -1
  164. package/build/quote/edit.js +3 -2
  165. package/build/quote/edit.js.map +1 -1
  166. package/build/quote/v2/edit.js +1 -1
  167. package/build/quote/v2/edit.js.map +1 -1
  168. package/build/search/edit.js +1 -0
  169. package/build/search/edit.js.map +1 -1
  170. package/build/site-logo/edit.js +1 -1
  171. package/build/site-logo/edit.js.map +1 -1
  172. package/build/table/edit.js +15 -2
  173. package/build/table/edit.js.map +1 -1
  174. package/build/table-of-contents/edit.js +138 -66
  175. package/build/table-of-contents/edit.js.map +1 -1
  176. package/build/table-of-contents/index.js +13 -3
  177. package/build/table-of-contents/index.js.map +1 -1
  178. package/build/table-of-contents/list.js +16 -9
  179. package/build/table-of-contents/list.js.map +1 -1
  180. package/build/table-of-contents/save.js +40 -0
  181. package/build/table-of-contents/save.js.map +1 -0
  182. package/build/table-of-contents/utils.js +11 -77
  183. package/build/table-of-contents/utils.js.map +1 -1
  184. package/build/template-part/edit/index.js +7 -3
  185. package/build/template-part/edit/index.js.map +1 -1
  186. package/build/template-part/edit/inner-blocks.js +3 -8
  187. package/build/template-part/edit/inner-blocks.js.map +1 -1
  188. package/build/video/edit.js +1 -1
  189. package/build/video/edit.js.map +1 -1
  190. package/build-module/audio/edit.js +2 -2
  191. package/build-module/audio/edit.js.map +1 -1
  192. package/build-module/block/edit.js +11 -10
  193. package/build-module/block/edit.js.map +1 -1
  194. package/build-module/button/index.js +1 -0
  195. package/build-module/button/index.js.map +1 -1
  196. package/build-module/categories/edit.js +1 -1
  197. package/build-module/categories/edit.js.map +1 -1
  198. package/build-module/categories/index.js +1 -1
  199. package/build-module/comment-author-avatar/index.js +1 -0
  200. package/build-module/comment-author-avatar/index.js.map +1 -1
  201. package/build-module/comments-title/deprecated.js +102 -0
  202. package/build-module/comments-title/deprecated.js.map +1 -0
  203. package/build-module/comments-title/edit.js +38 -40
  204. package/build-module/comments-title/edit.js.map +1 -1
  205. package/build-module/comments-title/index.js +4 -8
  206. package/build-module/comments-title/index.js.map +1 -1
  207. package/build-module/cover/controls.native.js +2 -3
  208. package/build-module/cover/controls.native.js.map +1 -1
  209. package/build-module/cover/edit/block-controls.js +104 -0
  210. package/build-module/cover/edit/block-controls.js.map +1 -0
  211. package/build-module/cover/edit/cover-placeholder.js +38 -0
  212. package/build-module/cover/edit/cover-placeholder.js.map +1 -0
  213. package/build-module/cover/edit/index.js +307 -0
  214. package/build-module/cover/edit/index.js.map +1 -0
  215. package/build-module/cover/edit/inspector-controls.js +215 -0
  216. package/build-module/cover/edit/inspector-controls.js.map +1 -0
  217. package/build-module/cover/edit/resizable-cover.js +55 -0
  218. package/build-module/cover/edit/resizable-cover.js.map +1 -0
  219. package/build-module/cover/{use-cover-is-dark.js → edit/use-cover-is-dark.js} +0 -0
  220. package/build-module/cover/edit/use-cover-is-dark.js.map +1 -0
  221. package/build-module/cover/edit.native.js +0 -1
  222. package/build-module/cover/edit.native.js.map +1 -1
  223. package/build-module/cover/focal-point-settings-button.native.js.map +1 -1
  224. package/build-module/cover/shared.js +7 -0
  225. package/build-module/cover/shared.js.map +1 -1
  226. package/build-module/embed/embed-preview.js +2 -2
  227. package/build-module/embed/embed-preview.js.map +1 -1
  228. package/build-module/file/edit.native.js +0 -1
  229. package/build-module/file/edit.native.js.map +1 -1
  230. package/build-module/gallery/edit.js +2 -1
  231. package/build-module/gallery/edit.js.map +1 -1
  232. package/build-module/gallery/gallery.js +2 -2
  233. package/build-module/gallery/gallery.js.map +1 -1
  234. package/build-module/gallery/shared.js +2 -2
  235. package/build-module/gallery/shared.js.map +1 -1
  236. package/build-module/gallery/use-get-media.js +2 -1
  237. package/build-module/gallery/use-get-media.js.map +1 -1
  238. package/build-module/gallery/use-short-code-transform.js +19 -18
  239. package/build-module/gallery/use-short-code-transform.js.map +1 -1
  240. package/build-module/gallery/v1/gallery.js +2 -2
  241. package/build-module/gallery/v1/gallery.js.map +1 -1
  242. package/build-module/heading/edit.js +6 -2
  243. package/build-module/heading/edit.js.map +1 -1
  244. package/build-module/heading/index.js +1 -0
  245. package/build-module/heading/index.js.map +1 -1
  246. package/build-module/heading/transforms.js +1 -0
  247. package/build-module/heading/transforms.js.map +1 -1
  248. package/build-module/image/edit.js +6 -3
  249. package/build-module/image/edit.js.map +1 -1
  250. package/build-module/image/edit.native.js +0 -1
  251. package/build-module/image/edit.native.js.map +1 -1
  252. package/build-module/image/image.js +2 -2
  253. package/build-module/image/image.js.map +1 -1
  254. package/build-module/index.js +42 -10
  255. package/build-module/index.js.map +1 -1
  256. package/build-module/is-block-metadata-experimental.js +16 -0
  257. package/build-module/is-block-metadata-experimental.js.map +1 -0
  258. package/build-module/latest-posts/edit.js +29 -5
  259. package/build-module/latest-posts/edit.js.map +1 -1
  260. package/build-module/list/transforms.js +6 -0
  261. package/build-module/list/transforms.js.map +1 -1
  262. package/build-module/list/v2/edit.js +2 -1
  263. package/build-module/list/v2/edit.js.map +1 -1
  264. package/build-module/list/v2/migrate.js +1 -3
  265. package/build-module/list/v2/migrate.js.map +1 -1
  266. package/build-module/list/v2/transforms.js +46 -9
  267. package/build-module/list/v2/transforms.js.map +1 -1
  268. package/build-module/list-item/edit.js +8 -9
  269. package/build-module/list-item/edit.js.map +1 -1
  270. package/build-module/list-item/hooks/index.js +3 -0
  271. package/build-module/list-item/hooks/index.js.map +1 -1
  272. package/build-module/list-item/hooks/use-backspace.js +44 -0
  273. package/build-module/list-item/hooks/use-backspace.js.map +1 -0
  274. package/build-module/list-item/hooks/use-enter.js +6 -9
  275. package/build-module/list-item/hooks/use-enter.js.map +1 -1
  276. package/build-module/list-item/hooks/use-indent-list-item.js +33 -38
  277. package/build-module/list-item/hooks/use-indent-list-item.js.map +1 -1
  278. package/build-module/list-item/hooks/use-space.js +40 -0
  279. package/build-module/list-item/hooks/use-space.js.map +1 -0
  280. package/build-module/list-item/hooks/use-split.js +19 -0
  281. package/build-module/list-item/hooks/use-split.js.map +1 -0
  282. package/build-module/list-item/index.js +1 -0
  283. package/build-module/list-item/index.js.map +1 -1
  284. package/build-module/list-item/utils.js +1 -1
  285. package/build-module/list-item/utils.js.map +1 -1
  286. package/build-module/media-text/edit.native.js +2 -1
  287. package/build-module/media-text/edit.native.js.map +1 -1
  288. package/build-module/media-text/media-container.native.js +2 -4
  289. package/build-module/media-text/media-container.native.js.map +1 -1
  290. package/build-module/media-text/transforms.js +137 -8
  291. package/build-module/media-text/transforms.js.map +1 -1
  292. package/build-module/navigation/edit/index.js +87 -82
  293. package/build-module/navigation/edit/index.js.map +1 -1
  294. package/build-module/navigation/edit/inner-blocks.js +2 -6
  295. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  296. package/build-module/navigation/use-navigation-entities.js +1 -1
  297. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  298. package/build-module/navigation-link/fallback-variations.js +1 -1
  299. package/build-module/navigation-link/fallback-variations.js.map +1 -1
  300. package/build-module/navigation-link/hooks.js +2 -2
  301. package/build-module/navigation-link/hooks.js.map +1 -1
  302. package/build-module/page-list/convert-to-links-modal.js +1 -1
  303. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  304. package/build-module/page-list/edit.js +1 -1
  305. package/build-module/page-list/edit.js.map +1 -1
  306. package/build-module/post-author/edit.js +1 -1
  307. package/build-module/post-author/edit.js.map +1 -1
  308. package/build-module/post-author-name/index.js +1 -0
  309. package/build-module/post-author-name/index.js.map +1 -1
  310. package/build-module/post-comment/index.js +1 -0
  311. package/build-module/post-comment/index.js.map +1 -1
  312. package/build-module/post-comments/edit.js +35 -16
  313. package/build-module/post-comments/edit.js.map +1 -1
  314. package/build-module/post-comments-count/index.js +1 -0
  315. package/build-module/post-comments-count/index.js.map +1 -1
  316. package/build-module/post-comments-form/form.js +1 -1
  317. package/build-module/post-comments-form/form.js.map +1 -1
  318. package/build-module/post-comments-link/index.js +1 -0
  319. package/build-module/post-comments-link/index.js.map +1 -1
  320. package/build-module/post-featured-image/edit.js +1 -1
  321. package/build-module/post-featured-image/edit.js.map +1 -1
  322. package/build-module/post-template/edit.js +7 -2
  323. package/build-module/post-template/edit.js.map +1 -1
  324. package/build-module/post-terms/edit.js +10 -3
  325. package/build-module/post-terms/edit.js.map +1 -1
  326. package/build-module/post-terms/hooks.js +25 -0
  327. package/build-module/post-terms/hooks.js.map +1 -0
  328. package/build-module/post-terms/index.js +10 -8
  329. package/build-module/post-terms/index.js.map +1 -1
  330. package/build-module/post-title/index.js +1 -1
  331. package/build-module/post-title/index.js.map +1 -1
  332. package/build-module/pullquote/edit.js +2 -2
  333. package/build-module/pullquote/edit.js.map +1 -1
  334. package/build-module/pullquote/edit.native.js +2 -2
  335. package/build-module/pullquote/edit.native.js.map +1 -1
  336. package/build-module/query/edit/inspector-controls/index.js +24 -17
  337. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  338. package/build-module/query/edit/inspector-controls/parent-control.js +135 -0
  339. package/build-module/query/edit/inspector-controls/parent-control.js.map +1 -0
  340. package/build-module/query/edit/inspector-controls/sticky-control.js +31 -0
  341. package/build-module/query/edit/inspector-controls/sticky-control.js.map +1 -0
  342. package/build-module/query/index.js +2 -1
  343. package/build-module/query/index.js.map +1 -1
  344. package/build-module/query/utils.js +21 -0
  345. package/build-module/query/utils.js.map +1 -1
  346. package/build-module/query-title/index.js +1 -1
  347. package/build-module/query-title/index.js.map +1 -1
  348. package/build-module/query-title/variations.js +2 -2
  349. package/build-module/query-title/variations.js.map +1 -1
  350. package/build-module/quote/edit.js +4 -3
  351. package/build-module/quote/edit.js.map +1 -1
  352. package/build-module/quote/v2/edit.js +2 -2
  353. package/build-module/quote/v2/edit.js.map +1 -1
  354. package/build-module/search/edit.js +1 -0
  355. package/build-module/search/edit.js.map +1 -1
  356. package/build-module/site-logo/edit.js +1 -1
  357. package/build-module/site-logo/edit.js.map +1 -1
  358. package/build-module/table/edit.js +17 -4
  359. package/build-module/table/edit.js.map +1 -1
  360. package/build-module/table-of-contents/edit.js +136 -68
  361. package/build-module/table-of-contents/edit.js.map +1 -1
  362. package/build-module/table-of-contents/index.js +12 -3
  363. package/build-module/table-of-contents/index.js.map +1 -1
  364. package/build-module/table-of-contents/list.js +18 -10
  365. package/build-module/table-of-contents/list.js.map +1 -1
  366. package/build-module/table-of-contents/save.js +28 -0
  367. package/build-module/table-of-contents/save.js.map +1 -0
  368. package/build-module/table-of-contents/utils.js +11 -73
  369. package/build-module/table-of-contents/utils.js.map +1 -1
  370. package/build-module/template-part/edit/index.js +8 -4
  371. package/build-module/template-part/edit/index.js.map +1 -1
  372. package/build-module/template-part/edit/inner-blocks.js +4 -9
  373. package/build-module/template-part/edit/inner-blocks.js.map +1 -1
  374. package/build-module/video/edit.js +2 -2
  375. package/build-module/video/edit.js.map +1 -1
  376. package/build-style/editor-rtl.css +4 -6
  377. package/build-style/editor.css +4 -6
  378. package/build-style/image/editor-rtl.css +1 -1
  379. package/build-style/image/editor.css +1 -1
  380. package/build-style/post-comments/style-rtl.css +22 -0
  381. package/build-style/post-comments/style.css +22 -0
  382. package/build-style/post-comments-form/style-rtl.css +1 -3
  383. package/build-style/post-comments-form/style.css +1 -3
  384. package/build-style/separator/editor-rtl.css +1 -0
  385. package/build-style/separator/editor.css +1 -0
  386. package/build-style/style-rtl.css +23 -3
  387. package/build-style/style.css +23 -3
  388. package/build-style/video/editor-rtl.css +2 -5
  389. package/build-style/video/editor.css +2 -5
  390. package/build-types/table-of-contents/list.d.ts +12 -0
  391. package/build-types/table-of-contents/list.d.ts.map +1 -0
  392. package/build-types/table-of-contents/utils.d.ts +24 -0
  393. package/build-types/table-of-contents/utils.d.ts.map +1 -0
  394. package/package.json +30 -29
  395. package/src/audio/edit.js +4 -2
  396. package/src/avatar/block.json +0 -1
  397. package/src/avatar/index.php +2 -2
  398. package/src/block/edit.js +39 -42
  399. package/src/block/test/edit.native.js +1 -1
  400. package/src/button/block.json +1 -0
  401. package/src/categories/block.json +1 -1
  402. package/src/categories/edit.js +1 -1
  403. package/src/comment-author-avatar/block.json +1 -0
  404. package/src/comments-title/block.json +0 -6
  405. package/src/comments-title/deprecated.js +34 -0
  406. package/src/comments-title/edit.js +44 -100
  407. package/src/comments-title/index.js +3 -1
  408. package/src/comments-title/index.php +41 -23
  409. package/src/cover/controls.native.js +1 -2
  410. package/src/cover/edit/block-controls.js +119 -0
  411. package/src/cover/edit/cover-placeholder.js +39 -0
  412. package/src/cover/edit/index.js +381 -0
  413. package/src/cover/edit/inspector-controls.js +286 -0
  414. package/src/cover/edit/resizable-cover.js +55 -0
  415. package/src/cover/{use-cover-is-dark.js → edit/use-cover-is-dark.js} +0 -0
  416. package/src/cover/edit.native.js +0 -1
  417. package/src/cover/editor.scss +1 -1
  418. package/src/cover/focal-point-settings-button.native.js +1 -1
  419. package/src/cover/index.php +20 -37
  420. package/src/cover/shared.js +4 -0
  421. package/src/cover/test/block-controls.js +62 -0
  422. package/src/embed/embed-preview.js +4 -2
  423. package/src/file/edit.native.js +0 -1
  424. package/src/gallery/edit.js +2 -1
  425. package/src/gallery/gallery.js +2 -2
  426. package/src/gallery/shared.js +3 -2
  427. package/src/gallery/use-get-media.js +2 -1
  428. package/src/gallery/use-short-code-transform.js +19 -16
  429. package/src/gallery/v1/gallery.js +2 -2
  430. package/src/heading/block.json +1 -0
  431. package/src/heading/edit.js +5 -2
  432. package/src/image/edit.js +9 -1
  433. package/src/image/edit.native.js +0 -1
  434. package/src/image/editor.scss +1 -1
  435. package/src/image/image.js +8 -2
  436. package/src/image/test/edit.native.js +7 -7
  437. package/src/index.js +50 -27
  438. package/src/is-block-metadata-experimental.js +19 -0
  439. package/src/latest-posts/edit.js +27 -2
  440. package/src/latest-posts/index.php +12 -6
  441. package/src/list/transforms.js +7 -0
  442. package/src/list/v2/edit.js +1 -0
  443. package/src/list/v2/migrate.js +1 -1
  444. package/src/list/v2/transforms.js +35 -0
  445. package/src/list-item/block.json +2 -1
  446. package/src/list-item/edit.js +17 -10
  447. package/src/list-item/hooks/index.js +3 -0
  448. package/src/list-item/hooks/use-backspace.js +52 -0
  449. package/src/list-item/hooks/use-enter.js +9 -16
  450. package/src/list-item/hooks/use-indent-list-item.js +50 -63
  451. package/src/list-item/hooks/use-space.js +48 -0
  452. package/src/list-item/hooks/use-split.js +24 -0
  453. package/src/list-item/utils.js +1 -1
  454. package/src/media-text/edit.native.js +3 -1
  455. package/src/media-text/media-container.native.js +2 -4
  456. package/src/media-text/transforms.js +154 -0
  457. package/src/navigation/edit/index.js +175 -169
  458. package/src/navigation/edit/inner-blocks.js +1 -8
  459. package/src/navigation/index.php +40 -0
  460. package/src/navigation/use-navigation-entities.js +1 -1
  461. package/src/navigation-link/fallback-variations.js +1 -1
  462. package/src/navigation-link/hooks.js +2 -2
  463. package/src/navigation-link/test/__snapshots__/hooks.js.snap +4 -4
  464. package/src/page-list/convert-to-links-modal.js +1 -1
  465. package/src/page-list/edit.js +1 -4
  466. package/src/post-author/edit.js +24 -22
  467. package/src/post-author-name/block.json +1 -0
  468. package/src/post-comment/block.json +1 -0
  469. package/src/post-comments/edit.js +54 -22
  470. package/src/post-comments/style.scss +26 -0
  471. package/src/post-comments-count/block.json +1 -0
  472. package/src/post-comments-form/form.js +1 -4
  473. package/src/post-comments-form/style.scss +1 -4
  474. package/src/post-comments-link/block.json +1 -0
  475. package/src/post-featured-image/edit.js +1 -1
  476. package/src/post-template/edit.js +5 -0
  477. package/src/post-template/index.php +30 -0
  478. package/src/post-terms/edit.js +19 -0
  479. package/src/post-terms/hooks.js +27 -0
  480. package/src/post-terms/index.js +14 -7
  481. package/src/post-terms/index.php +40 -2
  482. package/src/post-title/index.js +1 -1
  483. package/src/pullquote/edit.js +2 -2
  484. package/src/pullquote/edit.native.js +2 -2
  485. package/src/query/block.json +2 -1
  486. package/src/query/edit/inspector-controls/index.js +25 -11
  487. package/src/query/edit/inspector-controls/parent-control.js +133 -0
  488. package/src/query/edit/inspector-controls/sticky-control.js +25 -0
  489. package/src/query/utils.js +22 -0
  490. package/src/query-title/index.js +1 -1
  491. package/src/query-title/variations.js +2 -2
  492. package/src/quote/edit.js +5 -2
  493. package/src/quote/v2/edit.js +4 -2
  494. package/src/search/edit.js +1 -0
  495. package/src/search/index.php +1 -1
  496. package/src/separator/editor.scss +1 -0
  497. package/src/site-logo/edit.js +1 -1
  498. package/src/table/edit.js +19 -4
  499. package/src/table-of-contents/block.json +9 -2
  500. package/src/table-of-contents/edit.js +155 -75
  501. package/src/table-of-contents/index.js +2 -0
  502. package/src/table-of-contents/list.tsx +46 -0
  503. package/src/table-of-contents/save.js +25 -0
  504. package/src/table-of-contents/utils.ts +71 -0
  505. package/src/tag-cloud/block.json +1 -1
  506. package/src/template-part/edit/index.js +25 -15
  507. package/src/template-part/edit/inner-blocks.js +2 -10
  508. package/src/video/edit.js +4 -2
  509. package/src/video/editor.scss +3 -6
  510. package/test/babel-plugin.js +67 -0
  511. package/tsconfig.json +11 -0
  512. package/tsconfig.tsbuildinfo +1 -0
  513. package/build/cover/edit.js +0 -598
  514. package/build/cover/edit.js.map +0 -1
  515. package/build/cover/use-cover-is-dark.js.map +0 -1
  516. package/build/post-terms/variations.js +0 -37
  517. package/build/post-terms/variations.js.map +0 -1
  518. package/build-module/cover/edit.js +0 -575
  519. package/build-module/cover/edit.js.map +0 -1
  520. package/build-module/cover/use-cover-is-dark.js.map +0 -1
  521. package/build-module/post-terms/variations.js +0 -27
  522. package/build-module/post-terms/variations.js.map +0 -1
  523. package/src/cover/edit.js +0 -757
  524. package/src/post-terms/variations.js +0 -28
  525. package/src/table-of-contents/index.php +0 -346
  526. package/src/table-of-contents/list.js +0 -28
  527. package/src/table-of-contents/utils.js +0 -126
@@ -16,7 +16,8 @@ import {
16
16
  import { __, sprintf } from '@wordpress/i18n';
17
17
  import { useSelect } from '@wordpress/data';
18
18
  import { useEntityProp, store as coreStore } from '@wordpress/core-data';
19
- import { __experimentalUseDisabled as useDisabled } from '@wordpress/compose';
19
+ import { useDisabled } from '@wordpress/compose';
20
+ import { createInterpolateElement } from '@wordpress/element';
20
21
 
21
22
  /**
22
23
  * Internal dependencies
@@ -110,7 +111,10 @@ export default function PostCommentsEdit( {
110
111
  ref={ disabledRef }
111
112
  >
112
113
  <h3>
113
- { __( 'One response to' ) } “{ postTitle }”
114
+ {
115
+ /* translators: %s: Post title. */
116
+ sprintf( __( 'One response to %s' ), postTitle )
117
+ }
114
118
  </h3>
115
119
 
116
120
  <div className="navigation">
@@ -135,23 +139,43 @@ export default function PostCommentsEdit( {
135
139
  width="32"
136
140
  loading="lazy"
137
141
  />
138
- <b className="fn">
139
- <a href="#top" className="url">
140
- { __(
141
- 'A WordPress Commenter'
142
- ) }
143
- </a>
144
- </b>{ ' ' }
145
- <span className="says">
146
- { __( 'says' ) }:
147
- </span>
142
+ { createInterpolateElement(
143
+ sprintf(
144
+ /* translators: %s: Comment author link. */
145
+ __(
146
+ '%s <span>says:</span>'
147
+ ),
148
+ sprintf(
149
+ '<cite><a>%s</a></cite>',
150
+ __(
151
+ 'A WordPress Commenter'
152
+ )
153
+ )
154
+ ),
155
+ {
156
+ span: (
157
+ <span className="says" />
158
+ ),
159
+ a: (
160
+ /* eslint-disable jsx-a11y/anchor-has-content */
161
+ <a
162
+ href="#top"
163
+ className="url"
164
+ />
165
+ /* eslint-enable jsx-a11y/anchor-has-content */
166
+ ),
167
+ cite: (
168
+ <cite className="fn" />
169
+ ),
170
+ }
171
+ ) }
148
172
  </div>
149
173
 
150
174
  <div className="comment-metadata">
151
175
  <a href="#top">
152
- <time dateTime="2000-01-01T00:00:00+00:00">
176
+ <time dateTime="2000-01-01T12:00:00+00:00">
153
177
  { __(
154
- 'January 1, 2000 at 00:00 am'
178
+ 'January 1, 2000 at 12:00 am'
155
179
  ) }
156
180
  </time>
157
181
  </a>{ ' ' }
@@ -174,13 +198,17 @@ export default function PostCommentsEdit( {
174
198
  'To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.'
175
199
  ) }
176
200
  <br />
177
- { __(
178
- 'Commenter avatars come from'
179
- ) }{ ' ' }
180
- <a href="https://gravatar.com/">
181
- Gravatar
182
- </a>
183
- .
201
+ { createInterpolateElement(
202
+ __(
203
+ 'Commenter avatars come from <a>Gravatar</a>'
204
+ ),
205
+ {
206
+ a: (
207
+ /* eslint-disable-next-line jsx-a11y/anchor-has-content */
208
+ <a href="https://gravatar.com/" />
209
+ ),
210
+ }
211
+ ) }
184
212
  </p>
185
213
  </div>
186
214
 
@@ -188,7 +216,11 @@ export default function PostCommentsEdit( {
188
216
  <a
189
217
  className="comment-reply-link"
190
218
  href="#top"
191
- aria-label="Reply to A WordPress Commenter"
219
+ aria-label={ sprintf(
220
+ /* translators: Comment reply button text. %s: Comment author name. */
221
+ __( 'Reply to %s' ),
222
+ __( 'A WordPress Commenter' )
223
+ ) }
192
224
  >
193
225
  { __( 'Reply' ) }
194
226
  </a>
@@ -1,4 +1,22 @@
1
1
  .wp-block-post-comments {
2
+ /* utility classes */
3
+ .alignleft {
4
+ float: left;
5
+ }
6
+
7
+ .alignright {
8
+ float: right;
9
+ }
10
+ /* end utility classes */
11
+
12
+ .navigation {
13
+ &::after {
14
+ content: "";
15
+ display: table;
16
+ clear: both;
17
+ }
18
+ }
19
+
2
20
  .commentlist {
3
21
  clear: both;
4
22
  list-style: none;
@@ -86,6 +104,14 @@
86
104
  }
87
105
  }
88
106
 
107
+ .comment-reply-title {
108
+ margin-bottom: 0;
109
+ :where(small) {
110
+ font-size: var(--wp--preset--font-size--medium, smaller);
111
+ margin-left: 0.5em;
112
+ }
113
+ }
114
+
89
115
  .reply {
90
116
  font-size: 0.875em;
91
117
  margin-bottom: 1.4em;
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schemas.wp.org/trunk/block.json",
3
3
  "apiVersion": 2,
4
+ "__experimental": "fse",
4
5
  "name": "core/post-comments-count",
5
6
  "title": "Post Comments Count",
6
7
  "category": "theme",
@@ -2,10 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import {
6
- __experimentalUseDisabled as useDisabled,
7
- useInstanceId,
8
- } from '@wordpress/compose';
5
+ import { useDisabled, useInstanceId } from '@wordpress/compose';
9
6
 
10
7
  const CommentsForm = () => {
11
8
  const disabledFormRef = useDisabled();
@@ -69,13 +69,10 @@
69
69
  }
70
70
 
71
71
  .comment-reply-title {
72
- align-items: baseline;
73
- display: flex;
74
- justify-content: space-between;
75
72
  margin-bottom: 0;
76
-
77
73
  :where(small) {
78
74
  font-size: var(--wp--preset--font-size--medium, smaller);
75
+ margin-left: 0.5em;
79
76
  }
80
77
  }
81
78
  }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schemas.wp.org/trunk/block.json",
3
3
  "apiVersion": 2,
4
+ "__experimental": "fse",
4
5
  "name": "core/post-comments-link",
5
6
  "title": "Post Comments Link",
6
7
  "category": "theme",
@@ -118,7 +118,7 @@ function PostFeaturedImageDisplay( {
118
118
 
119
119
  const { createErrorNotice } = useDispatch( noticesStore );
120
120
  const onUploadError = ( message ) => {
121
- createErrorNotice( message[ 2 ], { type: 'snackbar' } );
121
+ createErrorNotice( message, { type: 'snackbar' } );
122
122
  };
123
123
 
124
124
  const controls = (
@@ -84,6 +84,7 @@ export default function PostTemplateEdit( {
84
84
  sticky,
85
85
  inherit,
86
86
  taxQuery,
87
+ parents,
87
88
  } = {},
88
89
  queryContext = [ { page: 1 } ],
89
90
  templateSlug,
@@ -138,6 +139,9 @@ export default function PostTemplateEdit( {
138
139
  if ( exclude?.length ) {
139
140
  query.exclude = exclude;
140
141
  }
142
+ if ( parents?.length ) {
143
+ query.parent = parents;
144
+ }
141
145
  // If sticky is not set, it will return all posts in the results.
142
146
  // If sticky is set to `only`, it will limit the results to sticky posts only.
143
147
  // If it is anything else, it will exclude sticky posts from results. For the record the value stored is `exclude`.
@@ -172,6 +176,7 @@ export default function PostTemplateEdit( {
172
176
  inherit,
173
177
  templateSlug,
174
178
  taxQuery,
179
+ parents,
175
180
  ]
176
181
  );
177
182
  const blockContexts = useMemo(
@@ -5,6 +5,32 @@
5
5
  * @package WordPress
6
6
  */
7
7
 
8
+ /**
9
+ * Determines whether a block list contains a block that uses the featured image.
10
+ *
11
+ * @param WP_Block_List $inner_blocks Inner block instance.
12
+ *
13
+ * @return bool Whether the block list contains a block that uses the featured image.
14
+ */
15
+ function block_core_post_template_uses_featured_image( $inner_blocks ) {
16
+ foreach ( $inner_blocks as $block ) {
17
+ if ( 'core/post-featured-image' === $block->name ) {
18
+ return true;
19
+ }
20
+ if (
21
+ 'core/cover' === $block->name &&
22
+ ! empty( $block->attributes['useFeaturedImage'] )
23
+ ) {
24
+ return true;
25
+ }
26
+ if ( $block->inner_blocks && block_core_post_template_uses_featured_image( $block->inner_blocks ) ) {
27
+ return true;
28
+ }
29
+ }
30
+
31
+ return false;
32
+ }
33
+
8
34
  /**
9
35
  * Renders the `core/post-template` block on the server.
10
36
  *
@@ -40,6 +66,10 @@ function render_block_core_post_template( $attributes, $content, $block ) {
40
66
  return '';
41
67
  }
42
68
 
69
+ if ( block_core_post_template_uses_featured_image( $block->inner_blocks ) ) {
70
+ update_post_thumbnail_cache( $query );
71
+ }
72
+
43
73
  $classnames = '';
44
74
  if ( isset( $block->context['displayLayout'] ) && isset( $block->context['query'] ) ) {
45
75
  if ( isset( $block->context['displayLayout']['type'] ) && 'flex' === $block->context['displayLayout']['type'] ) {
@@ -15,6 +15,7 @@ import {
15
15
  useBlockDisplayInformation,
16
16
  RichText,
17
17
  } from '@wordpress/block-editor';
18
+ import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
18
19
  import { Spinner, TextControl } from '@wordpress/components';
19
20
  import { useSelect } from '@wordpress/data';
20
21
  import { __ } from '@wordpress/i18n';
@@ -25,11 +26,22 @@ import { store as coreStore } from '@wordpress/core-data';
25
26
  */
26
27
  import usePostTerms from './use-post-terms';
27
28
 
29
+ // Allowed formats for the prefix and suffix fields.
30
+ const ALLOWED_FORMATS = [
31
+ 'core/bold',
32
+ 'core/image',
33
+ 'core/italic',
34
+ 'core/link',
35
+ 'core/strikethrough',
36
+ 'core/text-color',
37
+ ];
38
+
28
39
  export default function PostTermsEdit( {
29
40
  attributes,
30
41
  clientId,
31
42
  context,
32
43
  setAttributes,
44
+ insertBlocksAfter,
33
45
  } ) {
34
46
  const { term, textAlign, separator, prefix, suffix } = attributes;
35
47
  const { postId, postType } = context;
@@ -86,6 +98,7 @@ export default function PostTermsEdit( {
86
98
  { isLoading && <Spinner /> }
87
99
  { ! isLoading && hasPostTerms && (
88
100
  <RichText
101
+ allowedFormats={ ALLOWED_FORMATS }
89
102
  className="wp-block-post-terms__prefix"
90
103
  multiline={ false }
91
104
  aria-label={ __( 'Prefix' ) }
@@ -124,6 +137,7 @@ export default function PostTermsEdit( {
124
137
  __( 'Term items not found.' ) ) }
125
138
  { ! isLoading && hasPostTerms && (
126
139
  <RichText
140
+ allowedFormats={ ALLOWED_FORMATS }
127
141
  className="wp-block-post-terms__suffix"
128
142
  multiline={ false }
129
143
  aria-label={ __( 'Suffix' ) }
@@ -133,6 +147,11 @@ export default function PostTermsEdit( {
133
147
  setAttributes( { suffix: value } )
134
148
  }
135
149
  tagName="span"
150
+ __unstableOnSplitAtEnd={ () =>
151
+ insertBlocksAfter(
152
+ createBlock( getDefaultBlockName() )
153
+ )
154
+ }
136
155
  />
137
156
  ) }
138
157
  </div>
@@ -0,0 +1,27 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { postCategories, postTerms } from '@wordpress/icons';
5
+
6
+ const variationIconMap = {
7
+ category: postCategories,
8
+ post_tag: postTerms,
9
+ };
10
+
11
+ // We add `icons` to categories and tags. The remaining ones use
12
+ // the block's default icon.
13
+ export default function enhanceVariations( settings, name ) {
14
+ if ( name !== 'core/post-terms' ) {
15
+ return settings;
16
+ }
17
+ const variations = settings.variations.map( ( variation ) => ( {
18
+ ...variation,
19
+ ...( variationIconMap[ variation.name ] && {
20
+ icon: variationIconMap[ variation.name ],
21
+ } ),
22
+ } ) );
23
+ return {
24
+ ...settings,
25
+ variations,
26
+ };
27
+ }
@@ -1,20 +1,27 @@
1
1
  /**
2
- * Internal dependencies
2
+ * WordPress dependencies
3
3
  */
4
- import metadata from './block.json';
5
- import edit from './edit';
6
- import variations from './variations';
4
+ import { postCategories as icon } from '@wordpress/icons';
5
+ import { addFilter } from '@wordpress/hooks';
7
6
 
8
7
  /**
9
- * WordPress dependencies
8
+ * Internal dependencies
10
9
  */
11
- import { postTerms as icon } from '@wordpress/icons';
10
+ import metadata from './block.json';
11
+ import edit from './edit';
12
+ import enhanceVariations from './hooks';
12
13
 
13
14
  const { name } = metadata;
14
15
  export { metadata, name };
15
16
 
16
17
  export const settings = {
17
18
  icon,
18
- variations,
19
19
  edit,
20
20
  };
21
+
22
+ // Importing this file includes side effects. This is whitelisted in block-library/package.json under sideEffects
23
+ addFilter(
24
+ 'blocks.registerBlockType',
25
+ 'core/template-part',
26
+ enhanceVariations
27
+ );
@@ -49,9 +49,9 @@ function render_block_core_post_terms( $attributes, $content, $block ) {
49
49
  return get_the_term_list(
50
50
  $block->context['postId'],
51
51
  $attributes['term'],
52
- $prefix,
52
+ wp_kses_post( $prefix ),
53
53
  '<span class="wp-block-post-terms__separator">' . esc_html( $separator ) . '</span>',
54
- $suffix
54
+ wp_kses_post( $suffix )
55
55
  );
56
56
  }
57
57
 
@@ -59,10 +59,48 @@ function render_block_core_post_terms( $attributes, $content, $block ) {
59
59
  * Registers the `core/post-terms` block on the server.
60
60
  */
61
61
  function register_block_core_post_terms() {
62
+ $taxonomies = get_taxonomies(
63
+ array(
64
+ 'public' => true,
65
+ 'show_in_rest' => true,
66
+ ),
67
+ 'objects'
68
+ );
69
+
70
+ // Split the available taxonomies to `built_in` and custom ones,
71
+ // in order to prioritize the `built_in` taxonomies at the
72
+ // search results.
73
+ $built_ins = array();
74
+ $custom_variations = array();
75
+
76
+ // Create and register the eligible taxonomies variations.
77
+ foreach ( $taxonomies as $taxonomy ) {
78
+ $variation = array(
79
+ 'name' => $taxonomy->name,
80
+ 'title' => $taxonomy->label,
81
+ /* translators: %s: taxonomy's label */
82
+ 'description' => sprintf( __( 'Display the assigned taxonomy: %s' ), $taxonomy->label ),
83
+ 'attributes' => array(
84
+ 'term' => $taxonomy->name,
85
+ ),
86
+ 'isActive' => array( 'term' ),
87
+ );
88
+ // Set the category variation as the default one.
89
+ if ( 'category' === $taxonomy->name ) {
90
+ $variation['isDefault'] = true;
91
+ }
92
+ if ( $taxonomy->_builtin ) {
93
+ $built_ins[] = $variation;
94
+ } else {
95
+ $custom_variations[] = $variation;
96
+ }
97
+ }
98
+
62
99
  register_block_type_from_metadata(
63
100
  __DIR__ . '/post-terms',
64
101
  array(
65
102
  'render_callback' => 'render_block_core_post_terms',
103
+ 'variations' => array_merge( $built_ins, $custom_variations ),
66
104
  )
67
105
  );
68
106
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { postTitle as icon } from '@wordpress/icons';
4
+ import { title as icon } from '@wordpress/icons';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
@@ -13,7 +13,7 @@ import {
13
13
  RichText,
14
14
  useBlockProps,
15
15
  } from '@wordpress/block-editor';
16
- import { createBlock } from '@wordpress/blocks';
16
+ import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
17
17
  import { Platform } from '@wordpress/element';
18
18
 
19
19
  /**
@@ -87,7 +87,7 @@ function PullQuoteEdit( {
87
87
  textAlign="center"
88
88
  __unstableOnSplitAtEnd={ () =>
89
89
  insertBlocksAfter(
90
- createBlock( 'core/paragraph' )
90
+ createBlock( getDefaultBlockName() )
91
91
  )
92
92
  }
93
93
  />
@@ -10,7 +10,7 @@ import {
10
10
  getColorObjectByAttributeValues,
11
11
  __experimentalGetColorClassesAndStyles as getColorClassesAndStyles,
12
12
  } from '@wordpress/block-editor';
13
- import { createBlock } from '@wordpress/blocks';
13
+ import { createBlock, getDefaultBlockName } from '@wordpress/blocks';
14
14
 
15
15
  /**
16
16
  * Internal dependencies
@@ -115,7 +115,7 @@ function PullQuoteEdit( props ) {
115
115
  textAlign={ textAlign ?? 'center' }
116
116
  __unstableOnSplitAtEnd={ () =>
117
117
  insertBlocksAfter(
118
- createBlock( 'core/paragraph' )
118
+ createBlock( getDefaultBlockName() )
119
119
  )
120
120
  }
121
121
  />
@@ -24,7 +24,8 @@
24
24
  "exclude": [],
25
25
  "sticky": "",
26
26
  "inherit": true,
27
- "taxQuery": null
27
+ "taxQuery": null,
28
+ "parents": []
28
29
  }
29
30
  },
30
31
  "tagName": {
@@ -17,20 +17,28 @@ import {
17
17
  import { __ } from '@wordpress/i18n';
18
18
  import { InspectorControls } from '@wordpress/block-editor';
19
19
  import { useEffect, useState, useCallback } from '@wordpress/element';
20
+ import { useSelect } from '@wordpress/data';
21
+ import { store as coreStore } from '@wordpress/core-data';
20
22
 
21
23
  /**
22
24
  * Internal dependencies
23
25
  */
24
26
  import OrderControl from './order-control';
25
27
  import AuthorControl from './author-control';
28
+ import ParentControl from './parent-control';
26
29
  import TaxonomyControls from './taxonomy-controls';
30
+ import StickyControl from './sticky-control';
27
31
  import { usePostTypes } from '../../utils';
28
32
 
29
- const stickyOptions = [
30
- { label: __( 'Include' ), value: '' },
31
- { label: __( 'Exclude' ), value: 'exclude' },
32
- { label: __( 'Only' ), value: 'only' },
33
- ];
33
+ function useIsPostTypeHierarchical( postType ) {
34
+ return useSelect(
35
+ ( select ) => {
36
+ const type = select( coreStore ).getPostType( postType );
37
+ return type?.viewable && type?.hierarchical;
38
+ },
39
+ [ postType ]
40
+ );
41
+ }
34
42
 
35
43
  export default function QueryInspectorControls( {
36
44
  attributes: { query, displayLayout },
@@ -45,9 +53,11 @@ export default function QueryInspectorControls( {
45
53
  sticky,
46
54
  inherit,
47
55
  taxQuery,
56
+ parents,
48
57
  } = query;
49
58
  const [ showSticky, setShowSticky ] = useState( postType === 'post' );
50
59
  const { postTypesTaxonomiesMap, postTypesSelectOptions } = usePostTypes();
60
+ const isPostTypeHierarchical = useIsPostTypeHierarchical( postType );
51
61
  useEffect( () => {
52
62
  setShowSticky( postType === 'post' );
53
63
  }, [ postType ] );
@@ -72,6 +82,8 @@ export default function QueryInspectorControls( {
72
82
  if ( newValue !== 'post' ) {
73
83
  updateQuery.sticky = '';
74
84
  }
85
+ // We need to reset `parents` because they are tied to each post type.
86
+ updateQuery.parents = [];
75
87
  setQuery( updateQuery );
76
88
  };
77
89
  const [ querySearch, setQuerySearch ] = useState( query.search );
@@ -136,14 +148,9 @@ export default function QueryInspectorControls( {
136
148
  />
137
149
  ) }
138
150
  { showSticky && (
139
- <SelectControl
140
- label={ __( 'Sticky posts' ) }
141
- options={ stickyOptions }
151
+ <StickyControl
142
152
  value={ sticky }
143
153
  onChange={ ( value ) => setQuery( { sticky: value } ) }
144
- help={ __(
145
- 'Blog posts can be "stickied", a feature that places them at the top of the front page of posts, keeping it there until new sticky posts are published.'
146
- ) }
147
154
  />
148
155
  ) }
149
156
  </PanelBody>
@@ -156,6 +163,13 @@ export default function QueryInspectorControls( {
156
163
  value={ querySearch }
157
164
  onChange={ setQuerySearch }
158
165
  />
166
+ { isPostTypeHierarchical && (
167
+ <ParentControl
168
+ parents={ parents }
169
+ postType={ postType }
170
+ onChange={ setQuery }
171
+ />
172
+ ) }
159
173
  </PanelBody>
160
174
  ) }
161
175
  </InspectorControls>