@wordpress/block-library 8.0.0 → 8.2.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 (558) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/LICENSE.md +1 -1
  3. package/build/archives/edit.js +1 -0
  4. package/build/archives/edit.js.map +1 -1
  5. package/build/audio/edit.js +2 -0
  6. package/build/audio/edit.js.map +1 -1
  7. package/build/categories/edit.js +1 -1
  8. package/build/categories/edit.js.map +1 -1
  9. package/build/comments/edit/comments-inspector-controls.js +9 -3
  10. package/build/comments/edit/comments-inspector-controls.js.map +1 -1
  11. package/build/cover/edit/inspector-controls.js +1 -1
  12. package/build/cover/edit/inspector-controls.js.map +1 -1
  13. package/build/embed/embed-preview.js +1 -0
  14. package/build/embed/embed-preview.js.map +1 -1
  15. package/build/file/inspector.js +1 -0
  16. package/build/file/inspector.js.map +1 -1
  17. package/build/freeform/edit.js +21 -6
  18. package/build/freeform/edit.js.map +1 -1
  19. package/build/freeform/modal.js +97 -0
  20. package/build/freeform/modal.js.map +1 -0
  21. package/build/gallery/edit.js +15 -2
  22. package/build/gallery/edit.js.map +1 -1
  23. package/build/gallery/gallery.js +3 -16
  24. package/build/gallery/gallery.js.map +1 -1
  25. package/build/gallery/v1/edit.js +2 -0
  26. package/build/gallery/v1/edit.js.map +1 -1
  27. package/build/group/edit.js +1 -0
  28. package/build/group/edit.js.map +1 -1
  29. package/build/group/index.js +3 -0
  30. package/build/group/index.js.map +1 -1
  31. package/build/image/image.js +7 -10
  32. package/build/image/image.js.map +1 -1
  33. package/build/latest-posts/edit.js +11 -8
  34. package/build/latest-posts/edit.js.map +1 -1
  35. package/build/media-text/edit.js +1 -0
  36. package/build/media-text/edit.js.map +1 -1
  37. package/build/missing/edit.native.js +2 -2
  38. package/build/missing/edit.native.js.map +1 -1
  39. package/build/navigation/edit/index.js +9 -7
  40. package/build/navigation/edit/index.js.map +1 -1
  41. package/build/navigation/edit/menu-inspector-controls.js +81 -22
  42. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  43. package/build/navigation/edit/navigation-menu-selector.js +15 -10
  44. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  45. package/build/navigation/edit/utils.js +81 -0
  46. package/build/navigation/edit/utils.js.map +1 -1
  47. package/build/navigation/leaf-more-menu.js +95 -0
  48. package/build/navigation/leaf-more-menu.js.map +1 -0
  49. package/build/navigation-link/edit.js +10 -61
  50. package/build/navigation-link/edit.js.map +1 -1
  51. package/build/navigation-link/update-attributes.js +3 -3
  52. package/build/navigation-link/update-attributes.js.map +1 -1
  53. package/build/navigation-submenu/edit.js +7 -72
  54. package/build/navigation-submenu/edit.js.map +1 -1
  55. package/build/page-list/edit.js +16 -15
  56. package/build/page-list/edit.js.map +1 -1
  57. package/build/page-list/index.js +29 -2
  58. package/build/page-list/index.js.map +1 -1
  59. package/build/page-list-item/edit.js +9 -5
  60. package/build/page-list-item/edit.js.map +1 -1
  61. package/build/page-list-item/index.js +2 -1
  62. package/build/page-list-item/index.js.map +1 -1
  63. package/build/post-author/edit.js +2 -0
  64. package/build/post-author/edit.js.map +1 -1
  65. package/build/post-featured-image/dimension-controls.js +1 -0
  66. package/build/post-featured-image/dimension-controls.js.map +1 -1
  67. package/build/post-featured-image/overlay.js +0 -1
  68. package/build/post-featured-image/overlay.js.map +1 -1
  69. package/build/query/edit/index.js +2 -1
  70. package/build/query/edit/index.js.map +1 -1
  71. package/build/query/edit/inspector-controls/index.js +11 -5
  72. package/build/query/edit/inspector-controls/index.js.map +1 -1
  73. package/build/query/edit/inspector-controls/order-control.js +1 -0
  74. package/build/query/edit/inspector-controls/order-control.js.map +1 -1
  75. package/build/query/edit/inspector-controls/sticky-control.js +1 -0
  76. package/build/query/edit/inspector-controls/sticky-control.js.map +1 -1
  77. package/build/query/edit/inspector-controls/taxonomy-controls.js +101 -37
  78. package/build/query/edit/inspector-controls/taxonomy-controls.js.map +1 -1
  79. package/build/query/edit/query-content.js +10 -4
  80. package/build/query/edit/query-content.js.map +1 -1
  81. package/build/query/edit/query-placeholder.js +17 -12
  82. package/build/query/edit/query-placeholder.js.map +1 -1
  83. package/build/query/utils.js +73 -1
  84. package/build/query/utils.js.map +1 -1
  85. package/build/search/edit.js +2 -2
  86. package/build/search/edit.js.map +1 -1
  87. package/build/social-link/edit.js +2 -1
  88. package/build/social-link/edit.js.map +1 -1
  89. package/build/social-links/edit.js +0 -1
  90. package/build/social-links/edit.js.map +1 -1
  91. package/build/table/edit.js +1 -0
  92. package/build/table/edit.js.map +1 -1
  93. package/build/table-of-contents/edit.js +1 -1
  94. package/build/table-of-contents/edit.js.map +1 -1
  95. package/build/tag-cloud/edit.js +1 -0
  96. package/build/tag-cloud/edit.js.map +1 -1
  97. package/build/template-part/edit/advanced-controls.js +23 -2
  98. package/build/template-part/edit/advanced-controls.js.map +1 -1
  99. package/build/template-part/edit/import-controls.js +160 -0
  100. package/build/template-part/edit/import-controls.js.map +1 -0
  101. package/build/template-part/edit/index.js +2 -1
  102. package/build/template-part/edit/index.js.map +1 -1
  103. package/build/template-part/edit/utils/transformers.js +48 -0
  104. package/build/template-part/edit/utils/transformers.js.map +1 -0
  105. package/build/video/edit-common-settings.js +6 -5
  106. package/build/video/edit-common-settings.js.map +1 -1
  107. package/build/video/edit.js +1 -0
  108. package/build/video/edit.js.map +1 -1
  109. package/build/video/tracks-editor.js +1 -0
  110. package/build/video/tracks-editor.js.map +1 -1
  111. package/build-module/archives/edit.js +1 -0
  112. package/build-module/archives/edit.js.map +1 -1
  113. package/build-module/audio/edit.js +2 -0
  114. package/build-module/audio/edit.js.map +1 -1
  115. package/build-module/categories/edit.js +1 -1
  116. package/build-module/categories/edit.js.map +1 -1
  117. package/build-module/comments/edit/comments-inspector-controls.js +9 -3
  118. package/build-module/comments/edit/comments-inspector-controls.js.map +1 -1
  119. package/build-module/cover/edit/inspector-controls.js +3 -3
  120. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  121. package/build-module/embed/embed-preview.js +1 -0
  122. package/build-module/embed/embed-preview.js.map +1 -1
  123. package/build-module/file/inspector.js +1 -0
  124. package/build-module/file/inspector.js.map +1 -1
  125. package/build-module/freeform/edit.js +22 -8
  126. package/build-module/freeform/edit.js.map +1 -1
  127. package/build-module/freeform/modal.js +90 -0
  128. package/build-module/freeform/modal.js.map +1 -0
  129. package/build-module/gallery/edit.js +16 -3
  130. package/build-module/gallery/edit.js.map +1 -1
  131. package/build-module/gallery/gallery.js +4 -16
  132. package/build-module/gallery/gallery.js.map +1 -1
  133. package/build-module/gallery/v1/edit.js +2 -0
  134. package/build-module/gallery/v1/edit.js.map +1 -1
  135. package/build-module/group/edit.js +1 -0
  136. package/build-module/group/edit.js.map +1 -1
  137. package/build-module/group/index.js +3 -0
  138. package/build-module/group/index.js.map +1 -1
  139. package/build-module/image/image.js +7 -10
  140. package/build-module/image/image.js.map +1 -1
  141. package/build-module/latest-posts/edit.js +12 -9
  142. package/build-module/latest-posts/edit.js.map +1 -1
  143. package/build-module/media-text/edit.js +1 -0
  144. package/build-module/media-text/edit.js.map +1 -1
  145. package/build-module/missing/edit.native.js +2 -2
  146. package/build-module/missing/edit.native.js.map +1 -1
  147. package/build-module/navigation/edit/index.js +9 -7
  148. package/build-module/navigation/edit/index.js.map +1 -1
  149. package/build-module/navigation/edit/menu-inspector-controls.js +80 -25
  150. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  151. package/build-module/navigation/edit/navigation-menu-selector.js +16 -11
  152. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  153. package/build-module/navigation/edit/utils.js +75 -0
  154. package/build-module/navigation/edit/utils.js.map +1 -1
  155. package/build-module/navigation/leaf-more-menu.js +76 -0
  156. package/build-module/navigation/leaf-more-menu.js.map +1 -0
  157. package/build-module/navigation-link/edit.js +10 -62
  158. package/build-module/navigation-link/edit.js.map +1 -1
  159. package/build-module/navigation-link/update-attributes.js +3 -3
  160. package/build-module/navigation-link/update-attributes.js.map +1 -1
  161. package/build-module/navigation-submenu/edit.js +6 -72
  162. package/build-module/navigation-submenu/edit.js.map +1 -1
  163. package/build-module/page-list/edit.js +17 -15
  164. package/build-module/page-list/edit.js.map +1 -1
  165. package/build-module/page-list/index.js +30 -3
  166. package/build-module/page-list/index.js.map +1 -1
  167. package/build-module/page-list-item/edit.js +9 -6
  168. package/build-module/page-list-item/edit.js.map +1 -1
  169. package/build-module/page-list-item/index.js +2 -1
  170. package/build-module/page-list-item/index.js.map +1 -1
  171. package/build-module/post-author/edit.js +2 -0
  172. package/build-module/post-author/edit.js.map +1 -1
  173. package/build-module/post-featured-image/dimension-controls.js +1 -0
  174. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  175. package/build-module/post-featured-image/overlay.js +0 -1
  176. package/build-module/post-featured-image/overlay.js.map +1 -1
  177. package/build-module/query/edit/index.js +2 -1
  178. package/build-module/query/edit/index.js.map +1 -1
  179. package/build-module/query/edit/inspector-controls/index.js +11 -5
  180. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  181. package/build-module/query/edit/inspector-controls/order-control.js +1 -0
  182. package/build-module/query/edit/inspector-controls/order-control.js.map +1 -1
  183. package/build-module/query/edit/inspector-controls/sticky-control.js +1 -0
  184. package/build-module/query/edit/inspector-controls/sticky-control.js.map +1 -1
  185. package/build-module/query/edit/inspector-controls/taxonomy-controls.js +99 -35
  186. package/build-module/query/edit/inspector-controls/taxonomy-controls.js.map +1 -1
  187. package/build-module/query/edit/query-content.js +9 -2
  188. package/build-module/query/edit/query-content.js.map +1 -1
  189. package/build-module/query/edit/query-placeholder.js +16 -12
  190. package/build-module/query/edit/query-placeholder.js.map +1 -1
  191. package/build-module/query/utils.js +69 -0
  192. package/build-module/query/utils.js.map +1 -1
  193. package/build-module/search/edit.js +2 -2
  194. package/build-module/search/edit.js.map +1 -1
  195. package/build-module/social-link/edit.js +4 -3
  196. package/build-module/social-link/edit.js.map +1 -1
  197. package/build-module/social-links/edit.js +0 -1
  198. package/build-module/social-links/edit.js.map +1 -1
  199. package/build-module/table/edit.js +1 -0
  200. package/build-module/table/edit.js.map +1 -1
  201. package/build-module/table-of-contents/edit.js +1 -1
  202. package/build-module/table-of-contents/edit.js.map +1 -1
  203. package/build-module/tag-cloud/edit.js +1 -0
  204. package/build-module/tag-cloud/edit.js.map +1 -1
  205. package/build-module/template-part/edit/advanced-controls.js +22 -2
  206. package/build-module/template-part/edit/advanced-controls.js.map +1 -1
  207. package/build-module/template-part/edit/import-controls.js +146 -0
  208. package/build-module/template-part/edit/import-controls.js.map +1 -0
  209. package/build-module/template-part/edit/index.js +2 -1
  210. package/build-module/template-part/edit/index.js.map +1 -1
  211. package/build-module/template-part/edit/utils/transformers.js +40 -0
  212. package/build-module/template-part/edit/utils/transformers.js.map +1 -0
  213. package/build-module/video/edit-common-settings.js +6 -5
  214. package/build-module/video/edit-common-settings.js.map +1 -1
  215. package/build-module/video/edit.js +1 -0
  216. package/build-module/video/edit.js.map +1 -1
  217. package/build-module/video/tracks-editor.js +1 -0
  218. package/build-module/video/tracks-editor.js.map +1 -1
  219. package/build-style/archives/editor-rtl.css +3 -3
  220. package/build-style/archives/editor.css +3 -3
  221. package/build-style/archives/style-rtl.css +3 -3
  222. package/build-style/archives/style.css +3 -3
  223. package/build-style/audio/editor-rtl.css +3 -3
  224. package/build-style/audio/editor.css +3 -3
  225. package/build-style/audio/style-rtl.css +3 -3
  226. package/build-style/audio/style.css +3 -3
  227. package/build-style/audio/theme-rtl.css +3 -3
  228. package/build-style/audio/theme.css +3 -3
  229. package/build-style/avatar/editor-rtl.css +3 -3
  230. package/build-style/avatar/editor.css +3 -3
  231. package/build-style/avatar/style-rtl.css +3 -3
  232. package/build-style/avatar/style.css +3 -3
  233. package/build-style/block/editor-rtl.css +3 -3
  234. package/build-style/block/editor.css +3 -3
  235. package/build-style/button/editor-rtl.css +3 -3
  236. package/build-style/button/editor.css +3 -3
  237. package/build-style/button/style-rtl.css +3 -3
  238. package/build-style/button/style.css +3 -3
  239. package/build-style/buttons/editor-rtl.css +3 -3
  240. package/build-style/buttons/editor.css +3 -3
  241. package/build-style/buttons/style-rtl.css +3 -3
  242. package/build-style/buttons/style.css +3 -3
  243. package/build-style/calendar/style-rtl.css +3 -3
  244. package/build-style/calendar/style.css +3 -3
  245. package/build-style/categories/editor-rtl.css +3 -3
  246. package/build-style/categories/editor.css +3 -3
  247. package/build-style/categories/style-rtl.css +3 -3
  248. package/build-style/categories/style.css +3 -3
  249. package/build-style/classic-rtl.css +3 -3
  250. package/build-style/classic.css +3 -3
  251. package/build-style/code/editor-rtl.css +3 -3
  252. package/build-style/code/editor.css +3 -3
  253. package/build-style/code/style-rtl.css +3 -3
  254. package/build-style/code/style.css +3 -3
  255. package/build-style/code/theme-rtl.css +3 -3
  256. package/build-style/code/theme.css +3 -3
  257. package/build-style/columns/editor-rtl.css +3 -3
  258. package/build-style/columns/editor.css +3 -3
  259. package/build-style/columns/style-rtl.css +3 -3
  260. package/build-style/columns/style.css +3 -3
  261. package/build-style/comment-author-avatar/editor-rtl.css +3 -3
  262. package/build-style/comment-author-avatar/editor.css +3 -3
  263. package/build-style/comment-content/style-rtl.css +3 -3
  264. package/build-style/comment-content/style.css +3 -3
  265. package/build-style/comment-template/style-rtl.css +3 -3
  266. package/build-style/comment-template/style.css +3 -3
  267. package/build-style/comments/editor-rtl.css +3 -3
  268. package/build-style/comments/editor.css +3 -3
  269. package/build-style/comments/style-rtl.css +3 -3
  270. package/build-style/comments/style.css +3 -3
  271. package/build-style/comments-pagination/editor-rtl.css +3 -3
  272. package/build-style/comments-pagination/editor.css +3 -3
  273. package/build-style/comments-pagination/style-rtl.css +3 -3
  274. package/build-style/comments-pagination/style.css +3 -3
  275. package/build-style/comments-pagination-numbers/editor-rtl.css +3 -3
  276. package/build-style/comments-pagination-numbers/editor.css +3 -3
  277. package/build-style/comments-title/editor-rtl.css +3 -3
  278. package/build-style/comments-title/editor.css +3 -3
  279. package/build-style/common-rtl.css +3 -3
  280. package/build-style/common.css +3 -3
  281. package/build-style/cover/editor-rtl.css +3 -3
  282. package/build-style/cover/editor.css +3 -3
  283. package/build-style/cover/style-rtl.css +3 -3
  284. package/build-style/cover/style.css +3 -3
  285. package/build-style/editor-elements-rtl.css +3 -3
  286. package/build-style/editor-elements.css +3 -3
  287. package/build-style/editor-rtl.css +7 -9
  288. package/build-style/editor.css +7 -9
  289. package/build-style/elements-rtl.css +3 -3
  290. package/build-style/elements.css +3 -3
  291. package/build-style/embed/editor-rtl.css +3 -3
  292. package/build-style/embed/editor.css +3 -3
  293. package/build-style/embed/style-rtl.css +3 -3
  294. package/build-style/embed/style.css +3 -3
  295. package/build-style/embed/theme-rtl.css +3 -3
  296. package/build-style/embed/theme.css +3 -3
  297. package/build-style/file/editor-rtl.css +3 -3
  298. package/build-style/file/editor.css +3 -3
  299. package/build-style/file/style-rtl.css +3 -3
  300. package/build-style/file/style.css +3 -3
  301. package/build-style/freeform/editor-rtl.css +3 -3
  302. package/build-style/freeform/editor.css +3 -3
  303. package/build-style/gallery/editor-rtl.css +3 -3
  304. package/build-style/gallery/editor.css +3 -3
  305. package/build-style/gallery/style-rtl.css +3 -3
  306. package/build-style/gallery/style.css +3 -3
  307. package/build-style/gallery/theme-rtl.css +3 -3
  308. package/build-style/gallery/theme.css +3 -3
  309. package/build-style/group/editor-rtl.css +3 -3
  310. package/build-style/group/editor.css +3 -3
  311. package/build-style/group/style-rtl.css +3 -3
  312. package/build-style/group/style.css +3 -3
  313. package/build-style/group/theme-rtl.css +3 -3
  314. package/build-style/group/theme.css +3 -3
  315. package/build-style/heading/style-rtl.css +3 -3
  316. package/build-style/heading/style.css +3 -3
  317. package/build-style/html/editor-rtl.css +3 -3
  318. package/build-style/html/editor.css +3 -3
  319. package/build-style/image/editor-rtl.css +3 -3
  320. package/build-style/image/editor.css +3 -3
  321. package/build-style/image/style-rtl.css +3 -3
  322. package/build-style/image/style.css +3 -3
  323. package/build-style/image/theme-rtl.css +3 -3
  324. package/build-style/image/theme.css +3 -3
  325. package/build-style/latest-comments/style-rtl.css +3 -3
  326. package/build-style/latest-comments/style.css +3 -3
  327. package/build-style/latest-posts/editor-rtl.css +3 -3
  328. package/build-style/latest-posts/editor.css +3 -3
  329. package/build-style/latest-posts/style-rtl.css +3 -3
  330. package/build-style/latest-posts/style.css +3 -3
  331. package/build-style/list/style-rtl.css +3 -3
  332. package/build-style/list/style.css +3 -3
  333. package/build-style/media-text/editor-rtl.css +3 -3
  334. package/build-style/media-text/editor.css +3 -3
  335. package/build-style/media-text/style-rtl.css +3 -3
  336. package/build-style/media-text/style.css +3 -3
  337. package/build-style/more/editor-rtl.css +3 -3
  338. package/build-style/more/editor.css +3 -3
  339. package/build-style/navigation/editor-rtl.css +3 -9
  340. package/build-style/navigation/editor.css +3 -9
  341. package/build-style/navigation/style-rtl.css +3 -4
  342. package/build-style/navigation/style.css +3 -4
  343. package/build-style/navigation-link/editor-rtl.css +3 -3
  344. package/build-style/navigation-link/editor.css +3 -3
  345. package/build-style/navigation-link/style-rtl.css +3 -3
  346. package/build-style/navigation-link/style.css +3 -3
  347. package/build-style/navigation-submenu/editor-rtl.css +3 -3
  348. package/build-style/navigation-submenu/editor.css +3 -3
  349. package/build-style/nextpage/editor-rtl.css +3 -3
  350. package/build-style/nextpage/editor.css +3 -3
  351. package/build-style/page-list/editor-rtl.css +7 -3
  352. package/build-style/page-list/editor.css +7 -3
  353. package/build-style/page-list/style-rtl.css +3 -3
  354. package/build-style/page-list/style.css +3 -3
  355. package/build-style/paragraph/editor-rtl.css +3 -3
  356. package/build-style/paragraph/editor.css +3 -3
  357. package/build-style/paragraph/style-rtl.css +3 -3
  358. package/build-style/paragraph/style.css +3 -3
  359. package/build-style/post-author/style-rtl.css +3 -3
  360. package/build-style/post-author/style.css +3 -3
  361. package/build-style/post-comments-form/editor-rtl.css +3 -3
  362. package/build-style/post-comments-form/editor.css +3 -3
  363. package/build-style/post-comments-form/style-rtl.css +3 -3
  364. package/build-style/post-comments-form/style.css +3 -3
  365. package/build-style/post-date/style-rtl.css +3 -3
  366. package/build-style/post-date/style.css +3 -3
  367. package/build-style/post-excerpt/editor-rtl.css +3 -3
  368. package/build-style/post-excerpt/editor.css +3 -3
  369. package/build-style/post-excerpt/style-rtl.css +3 -3
  370. package/build-style/post-excerpt/style.css +3 -3
  371. package/build-style/post-featured-image/editor-rtl.css +3 -3
  372. package/build-style/post-featured-image/editor.css +3 -3
  373. package/build-style/post-featured-image/style-rtl.css +3 -3
  374. package/build-style/post-featured-image/style.css +3 -3
  375. package/build-style/post-navigation-link/style-rtl.css +3 -3
  376. package/build-style/post-navigation-link/style.css +3 -3
  377. package/build-style/post-template/editor-rtl.css +3 -3
  378. package/build-style/post-template/editor.css +3 -3
  379. package/build-style/post-template/style-rtl.css +3 -3
  380. package/build-style/post-template/style.css +3 -3
  381. package/build-style/post-terms/style-rtl.css +3 -3
  382. package/build-style/post-terms/style.css +3 -3
  383. package/build-style/post-title/style-rtl.css +3 -3
  384. package/build-style/post-title/style.css +3 -3
  385. package/build-style/preformatted/style-rtl.css +3 -3
  386. package/build-style/preformatted/style.css +3 -3
  387. package/build-style/pullquote/editor-rtl.css +3 -3
  388. package/build-style/pullquote/editor.css +3 -3
  389. package/build-style/pullquote/style-rtl.css +3 -3
  390. package/build-style/pullquote/style.css +3 -3
  391. package/build-style/pullquote/theme-rtl.css +3 -3
  392. package/build-style/pullquote/theme.css +3 -3
  393. package/build-style/query/editor-rtl.css +3 -3
  394. package/build-style/query/editor.css +3 -3
  395. package/build-style/query-pagination/editor-rtl.css +3 -3
  396. package/build-style/query-pagination/editor.css +3 -3
  397. package/build-style/query-pagination/style-rtl.css +3 -3
  398. package/build-style/query-pagination/style.css +3 -3
  399. package/build-style/query-pagination-numbers/editor-rtl.css +3 -3
  400. package/build-style/query-pagination-numbers/editor.css +3 -3
  401. package/build-style/query-title/style-rtl.css +3 -3
  402. package/build-style/query-title/style.css +3 -3
  403. package/build-style/quote/style-rtl.css +3 -3
  404. package/build-style/quote/style.css +3 -3
  405. package/build-style/quote/theme-rtl.css +3 -3
  406. package/build-style/quote/theme.css +3 -3
  407. package/build-style/read-more/style-rtl.css +3 -3
  408. package/build-style/read-more/style.css +3 -3
  409. package/build-style/reset-rtl.css +3 -3
  410. package/build-style/reset.css +3 -3
  411. package/build-style/rss/editor-rtl.css +3 -3
  412. package/build-style/rss/editor.css +3 -3
  413. package/build-style/rss/style-rtl.css +3 -3
  414. package/build-style/rss/style.css +3 -3
  415. package/build-style/search/editor-rtl.css +3 -3
  416. package/build-style/search/editor.css +3 -3
  417. package/build-style/search/style-rtl.css +3 -3
  418. package/build-style/search/style.css +3 -3
  419. package/build-style/search/theme-rtl.css +3 -3
  420. package/build-style/search/theme.css +3 -3
  421. package/build-style/separator/editor-rtl.css +3 -3
  422. package/build-style/separator/editor.css +3 -3
  423. package/build-style/separator/style-rtl.css +3 -3
  424. package/build-style/separator/style.css +3 -3
  425. package/build-style/separator/theme-rtl.css +3 -3
  426. package/build-style/separator/theme.css +3 -3
  427. package/build-style/shortcode/editor-rtl.css +3 -3
  428. package/build-style/shortcode/editor.css +3 -3
  429. package/build-style/site-logo/editor-rtl.css +3 -3
  430. package/build-style/site-logo/editor.css +3 -3
  431. package/build-style/site-logo/style-rtl.css +3 -3
  432. package/build-style/site-logo/style.css +3 -3
  433. package/build-style/site-tagline/editor-rtl.css +3 -3
  434. package/build-style/site-tagline/editor.css +3 -3
  435. package/build-style/site-title/editor-rtl.css +3 -3
  436. package/build-style/site-title/editor.css +3 -3
  437. package/build-style/site-title/style-rtl.css +3 -3
  438. package/build-style/site-title/style.css +3 -3
  439. package/build-style/social-link/editor-rtl.css +3 -3
  440. package/build-style/social-link/editor.css +3 -3
  441. package/build-style/social-links/editor-rtl.css +3 -3
  442. package/build-style/social-links/editor.css +3 -3
  443. package/build-style/social-links/style-rtl.css +3 -3
  444. package/build-style/social-links/style.css +3 -3
  445. package/build-style/spacer/editor-rtl.css +3 -3
  446. package/build-style/spacer/editor.css +3 -3
  447. package/build-style/spacer/style-rtl.css +3 -3
  448. package/build-style/spacer/style.css +3 -3
  449. package/build-style/style-rtl.css +13 -5
  450. package/build-style/style.css +13 -5
  451. package/build-style/table/editor-rtl.css +3 -3
  452. package/build-style/table/editor.css +3 -3
  453. package/build-style/table/style-rtl.css +9 -3
  454. package/build-style/table/style.css +9 -3
  455. package/build-style/table/theme-rtl.css +3 -9
  456. package/build-style/table/theme.css +3 -9
  457. package/build-style/tag-cloud/style-rtl.css +3 -3
  458. package/build-style/tag-cloud/style.css +3 -3
  459. package/build-style/template-part/editor-rtl.css +3 -3
  460. package/build-style/template-part/editor.css +3 -3
  461. package/build-style/template-part/theme-rtl.css +3 -3
  462. package/build-style/template-part/theme.css +3 -3
  463. package/build-style/text-columns/editor-rtl.css +3 -3
  464. package/build-style/text-columns/editor.css +3 -3
  465. package/build-style/text-columns/style-rtl.css +3 -3
  466. package/build-style/text-columns/style.css +3 -3
  467. package/build-style/theme-rtl.css +3 -9
  468. package/build-style/theme.css +3 -9
  469. package/build-style/verse/style-rtl.css +7 -4
  470. package/build-style/verse/style.css +7 -4
  471. package/build-style/video/editor-rtl.css +3 -3
  472. package/build-style/video/editor.css +3 -3
  473. package/build-style/video/style-rtl.css +3 -3
  474. package/build-style/video/style.css +3 -3
  475. package/build-style/video/theme-rtl.css +3 -3
  476. package/build-style/video/theme.css +3 -3
  477. package/package.json +29 -29
  478. package/src/archives/edit.js +1 -0
  479. package/src/audio/edit.js +2 -0
  480. package/src/categories/edit.js +1 -1
  481. package/src/comments/edit/comments-inspector-controls.js +12 -2
  482. package/src/comments/index.php +0 -1
  483. package/src/cover/edit/inspector-controls.js +4 -4
  484. package/src/embed/embed-preview.js +1 -0
  485. package/src/file/inspector.js +1 -0
  486. package/src/freeform/edit.js +48 -29
  487. package/src/freeform/modal.js +111 -0
  488. package/src/gallery/edit.js +19 -2
  489. package/src/gallery/gallery.js +4 -13
  490. package/src/gallery/v1/edit.js +2 -0
  491. package/src/group/block.json +3 -0
  492. package/src/group/edit.js +1 -0
  493. package/src/image/image.js +27 -36
  494. package/src/latest-posts/edit.js +6 -7
  495. package/src/latest-posts/test/__snapshots__/edit.native.js.snap +3 -0
  496. package/src/latest-posts/test/edit.native.js +49 -0
  497. package/src/media-text/edit.js +1 -0
  498. package/src/missing/edit.native.js +13 -6
  499. package/src/more/test/__snapshots__/edit.native.js.snap +7 -0
  500. package/src/more/test/edit.native.js +41 -0
  501. package/src/navigation/edit/index.js +6 -4
  502. package/src/navigation/edit/menu-inspector-controls.js +115 -44
  503. package/src/navigation/edit/navigation-menu-selector.js +24 -11
  504. package/src/navigation/edit/utils.js +82 -0
  505. package/src/navigation/editor.scss +0 -7
  506. package/src/navigation/index.php +32 -0
  507. package/src/navigation/leaf-more-menu.js +93 -0
  508. package/src/navigation/style.scss +0 -1
  509. package/src/navigation-link/edit.js +23 -65
  510. package/src/navigation-link/index.php +62 -3
  511. package/src/navigation-link/update-attributes.js +1 -1
  512. package/src/navigation-submenu/edit.js +29 -100
  513. package/src/navigation-submenu/index.php +34 -2
  514. package/src/page-list/block.json +18 -1
  515. package/src/page-list/edit.js +30 -22
  516. package/src/page-list/editor.scss +4 -0
  517. package/src/page-list/index.js +8 -2
  518. package/src/page-list/index.php +14 -10
  519. package/src/page-list-item/block.json +2 -1
  520. package/src/page-list-item/edit.js +17 -9
  521. package/src/post-author/edit.js +2 -0
  522. package/src/post-featured-image/dimension-controls.js +1 -0
  523. package/src/post-featured-image/overlay.js +0 -1
  524. package/src/query/edit/index.js +1 -0
  525. package/src/query/edit/inspector-controls/index.js +50 -38
  526. package/src/query/edit/inspector-controls/order-control.js +1 -0
  527. package/src/query/edit/inspector-controls/sticky-control.js +1 -0
  528. package/src/query/edit/inspector-controls/taxonomy-controls.js +102 -38
  529. package/src/query/edit/query-content.js +15 -1
  530. package/src/query/edit/query-placeholder.js +15 -14
  531. package/src/query/utils.js +59 -1
  532. package/src/rss/index.php +1 -1
  533. package/src/search/edit.js +2 -2
  534. package/src/separator/test/__snapshots__/edit.native.js.snap +7 -0
  535. package/src/separator/test/edit.native.js +41 -0
  536. package/src/social-link/edit.js +5 -4
  537. package/src/social-links/edit.js +0 -1
  538. package/src/table/edit.js +1 -0
  539. package/src/table/style.scss +8 -0
  540. package/src/table/theme.scss +0 -8
  541. package/src/table-of-contents/edit.js +1 -1
  542. package/src/tag-cloud/edit.js +1 -0
  543. package/src/template-part/edit/advanced-controls.js +36 -0
  544. package/src/template-part/edit/import-controls.js +180 -0
  545. package/src/template-part/edit/index.js +1 -0
  546. package/src/template-part/edit/utils/transformers.js +37 -0
  547. package/src/verse/style.scss +4 -1
  548. package/src/verse/test/__snapshots__/edit.native.js.snap +13 -0
  549. package/src/verse/test/edit.native.js +40 -33
  550. package/src/video/edit-common-settings.js +6 -5
  551. package/src/video/edit.js +1 -0
  552. package/src/video/tracks-editor.js +1 -0
  553. package/tsconfig.tsbuildinfo +1 -1
  554. package/build/query/constants.js +0 -16
  555. package/build/query/constants.js.map +0 -1
  556. package/build-module/query/constants.js +0 -7
  557. package/build-module/query/constants.js.map +0 -1
  558. package/src/query/constants.js +0 -7
@@ -139,13 +139,14 @@ function block_core_page_list_build_css_font_sizes( $context ) {
139
139
  * @param boolean $show_submenu_icons Whether to show submenu indicator icons.
140
140
  * @param boolean $is_navigation_child If block is a child of Navigation block.
141
141
  * @param array $nested_pages The array of nested pages.
142
+ * @param boolean $is_nested Whether the submenu is nested or not.
142
143
  * @param array $active_page_ancestor_ids An array of ancestor ids for active page.
143
144
  * @param array $colors Color information for overlay styles.
144
145
  * @param integer $depth The nesting depth.
145
146
  *
146
147
  * @return string List markup.
147
148
  */
148
- function block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $nested_pages, $active_page_ancestor_ids = array(), $colors = array(), $depth = 0 ) {
149
+ function block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $nested_pages, $is_nested, $active_page_ancestor_ids = array(), $colors = array(), $depth = 0 ) {
149
150
  if ( empty( $nested_pages ) ) {
150
151
  return;
151
152
  }
@@ -173,7 +174,7 @@ function block_core_page_list_render_nested_page_list( $open_submenus_on_click,
173
174
  $navigation_child_content_class = $is_navigation_child ? ' wp-block-navigation-item__content' : '';
174
175
 
175
176
  // If this is the first level of submenus, include the overlay colors.
176
- if ( 1 === $depth && isset( $colors['overlay_css_classes'], $colors['overlay_inline_styles'] ) ) {
177
+ if ( ( ( 0 < $depth && ! $is_nested ) || $is_nested ) && isset( $colors['overlay_css_classes'], $colors['overlay_inline_styles'] ) ) {
177
178
  $css_class .= ' ' . trim( implode( ' ', $colors['overlay_css_classes'] ) );
178
179
  if ( '' !== $colors['overlay_inline_styles'] ) {
179
180
  $style_attribute = sprintf( ' style="%s"', esc_attr( $colors['overlay_inline_styles'] ) );
@@ -207,12 +208,9 @@ function block_core_page_list_render_nested_page_list( $open_submenus_on_click,
207
208
  $markup .= '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
208
209
  $markup .= '</button>';
209
210
  }
210
- $markup .= '<ul class="submenu-container';
211
- // Extra classname is added when the block is a child of Navigation.
212
- if ( $is_navigation_child ) {
213
- $markup .= ' wp-block-navigation__submenu-container';
214
- }
215
- $markup .= '">' . block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $page['children'], $active_page_ancestor_ids, $colors, $depth + 1 ) . '</ul>';
211
+ $markup .= '<ul class="wp-block-navigation__submenu-container">';
212
+ $markup .= block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $page['children'], $is_nested, $active_page_ancestor_ids, $colors, $depth + 1 );
213
+ $markup .= '</ul>';
216
214
  }
217
215
  $markup .= '</li>';
218
216
  }
@@ -253,6 +251,7 @@ function render_block_core_page_list( $attributes, $content, $block ) {
253
251
  ++$block_id;
254
252
 
255
253
  $parent_page_id = $attributes['parentPageID'];
254
+ $is_nested = $attributes['isNested'];
256
255
 
257
256
  $all_pages = get_pages(
258
257
  array(
@@ -309,6 +308,11 @@ function render_block_core_page_list( $attributes, $content, $block ) {
309
308
  $nested_pages = block_core_page_list_nest_pages( $top_level_pages, $pages_with_children );
310
309
 
311
310
  if ( 0 !== $parent_page_id ) {
311
+ // If the parent page has no child pages, there is nothing to show.
312
+ if ( ! array_key_exists( $parent_page_id, $pages_with_children ) ) {
313
+ return;
314
+ }
315
+
312
316
  $nested_pages = block_core_page_list_nest_pages(
313
317
  $pages_with_children[ $parent_page_id ],
314
318
  $pages_with_children
@@ -321,9 +325,9 @@ function render_block_core_page_list( $attributes, $content, $block ) {
321
325
 
322
326
  $show_submenu_icons = array_key_exists( 'showSubmenuIcon', $block->context ) ? $block->context['showSubmenuIcon'] : false;
323
327
 
324
- $wrapper_markup = '<ul %1$s>%2$s</ul>';
328
+ $wrapper_markup = $is_nested ? '%2$s' : '<ul %1$s>%2$s</ul>';
325
329
 
326
- $items_markup = block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $nested_pages, $active_page_ancestor_ids, $colors );
330
+ $items_markup = block_core_page_list_render_nested_page_list( $open_submenus_on_click, $show_submenu_icons, $is_navigation_child, $nested_pages, $is_nested, $active_page_ancestor_ids, $colors );
327
331
 
328
332
  $wrapper_attributes = get_block_wrapper_attributes(
329
333
  array(
@@ -44,7 +44,8 @@
44
44
  "reusable": false,
45
45
  "html": false,
46
46
  "lock": false,
47
- "inserter": false
47
+ "inserter": false,
48
+ "__experimentalToolbar": false
48
49
  },
49
50
  "editorStyle": "wp-block-page-list-editor",
50
51
  "style": "wp-block-page-list"
@@ -6,7 +6,7 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { InnerBlocks } from '@wordpress/block-editor';
9
+ import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
10
10
  import { useSelect } from '@wordpress/data';
11
11
  import { store as coreStore } from '@wordpress/core-data';
12
12
 
@@ -14,6 +14,10 @@ import { store as coreStore } from '@wordpress/core-data';
14
14
  * Internal dependencies
15
15
  */
16
16
  import { ItemSubmenuIcon } from '../navigation-link/icons';
17
+ import {
18
+ getColors,
19
+ getNavigationChildBlockProps,
20
+ } from '../navigation/edit/utils';
17
21
 
18
22
  function useFrontPageId() {
19
23
  return useSelect( ( select ) => {
@@ -34,6 +38,17 @@ export default function PageListItemEdit( { context, attributes } ) {
34
38
  const { id, label, link, hasChildren } = attributes;
35
39
  const isNavigationChild = 'showSubmenuIcon' in context;
36
40
  const frontPageId = useFrontPageId();
41
+
42
+ const innerBlocksColors = getColors( context, true );
43
+
44
+ const navigationChildBlockProps =
45
+ getNavigationChildBlockProps( innerBlocksColors );
46
+ const blockProps = useBlockProps( navigationChildBlockProps, {
47
+ className: 'wp-block-pages-list__item',
48
+ } );
49
+
50
+ const innerBlocksProps = useInnerBlocksProps( blockProps );
51
+
37
52
  return (
38
53
  <li
39
54
  key={ id }
@@ -79,14 +94,7 @@ export default function PageListItemEdit( { context, attributes } ) {
79
94
  <ItemSubmenuIcon />
80
95
  </button>
81
96
  ) }
82
- <ul
83
- className={ classnames( 'submenu-container', {
84
- 'wp-block-navigation__submenu-container':
85
- isNavigationChild,
86
- } ) }
87
- >
88
- <InnerBlocks />
89
- </ul>
97
+ <ul { ...innerBlocksProps }></ul>
90
98
  </>
91
99
  ) }
92
100
  </li>
@@ -112,6 +112,7 @@ function PostAuthorEdit( {
112
112
  />
113
113
  ) ) || (
114
114
  <SelectControl
115
+ __nextHasNoMarginBottom
115
116
  label={ __( 'Author' ) }
116
117
  value={ authorId }
117
118
  options={ authorOptions }
@@ -127,6 +128,7 @@ function PostAuthorEdit( {
127
128
  />
128
129
  { showAvatar && (
129
130
  <SelectControl
131
+ __nextHasNoMarginBottom
130
132
  label={ __( 'Avatar size' ) }
131
133
  value={ attributes.avatarSize }
132
134
  options={ avatarSizes }
@@ -160,6 +160,7 @@ const DimensionControls = ( {
160
160
  panelId={ clientId }
161
161
  >
162
162
  <SelectControl
163
+ __nextHasNoMarginBottom
163
164
  label={ __( 'Image size' ) }
164
165
  value={ sizeSlug || DEFAULT_SIZE }
165
166
  options={ imageSizeOptions }
@@ -66,7 +66,6 @@ const Overlay = ( {
66
66
  ) }
67
67
  <InspectorControls __experimentalGroup="color">
68
68
  <ColorGradientSettingsDropdown
69
- __experimentalHasMultipleOrigins
70
69
  __experimentalIsRenderedInSidebar
71
70
  settings={ [
72
71
  {
@@ -92,6 +92,7 @@ function PatternSelectionModal( {
92
92
  blockName={ blockNameForPatterns }
93
93
  clientId={ clientId }
94
94
  onBlockPatternSelect={ onBlockPatternSelect }
95
+ showTitles={ true }
95
96
  />
96
97
  </BlockContextProvider>
97
98
  </Modal>
@@ -110,6 +110,21 @@ export default function QueryInspectorControls( {
110
110
  showColumnsControl ||
111
111
  showOrderControl ||
112
112
  showStickyControl;
113
+ const showTaxControl =
114
+ !! taxonomies?.length &&
115
+ isControlAllowed( allowedControls, 'taxQuery' );
116
+ const showAuthorControl = isControlAllowed( allowedControls, 'author' );
117
+ const showSearchControl = isControlAllowed( allowedControls, 'search' );
118
+ const showParentControl =
119
+ isControlAllowed( allowedControls, 'parents' ) &&
120
+ isPostTypeHierarchical;
121
+
122
+ const showFiltersPanel =
123
+ showTaxControl ||
124
+ showAuthorControl ||
125
+ showSearchControl ||
126
+ showParentControl;
127
+
113
128
  return (
114
129
  <>
115
130
  { showSettingsPanel && (
@@ -129,6 +144,7 @@ export default function QueryInspectorControls( {
129
144
  ) }
130
145
  { showPostTypeControl && (
131
146
  <SelectControl
147
+ __nextHasNoMarginBottom
132
148
  options={ postTypesSelectOptions }
133
149
  value={ postType }
134
150
  label={ __( 'Post type' ) }
@@ -179,7 +195,7 @@ export default function QueryInspectorControls( {
179
195
  </PanelBody>
180
196
  </InspectorControls>
181
197
  ) }
182
- { ! inherit && (
198
+ { ! inherit && showFiltersPanel && (
183
199
  <InspectorControls>
184
200
  <ToolsPanel
185
201
  className="block-library-query-toolspanel__filters"
@@ -194,26 +210,25 @@ export default function QueryInspectorControls( {
194
210
  setQuerySearch( '' );
195
211
  } }
196
212
  >
197
- { !! taxonomies?.length &&
198
- isControlAllowed( allowedControls, 'taxQuery' ) && (
199
- <ToolsPanelItem
200
- label={ __( 'Taxonomies' ) }
201
- hasValue={ () =>
202
- Object.values( taxQuery || {} ).some(
203
- ( terms ) => !! terms.length
204
- )
205
- }
206
- onDeselect={ () =>
207
- setQuery( { taxQuery: null } )
208
- }
209
- >
210
- <TaxonomyControls
211
- onChange={ setQuery }
212
- query={ query }
213
- />
214
- </ToolsPanelItem>
215
- ) }
216
- { isControlAllowed( allowedControls, 'author' ) && (
213
+ { showTaxControl && (
214
+ <ToolsPanelItem
215
+ label={ __( 'Taxonomies' ) }
216
+ hasValue={ () =>
217
+ Object.values( taxQuery || {} ).some(
218
+ ( terms ) => !! terms.length
219
+ )
220
+ }
221
+ onDeselect={ () =>
222
+ setQuery( { taxQuery: null } )
223
+ }
224
+ >
225
+ <TaxonomyControls
226
+ onChange={ setQuery }
227
+ query={ query }
228
+ />
229
+ </ToolsPanelItem>
230
+ ) }
231
+ { showAuthorControl && (
217
232
  <ToolsPanelItem
218
233
  hasValue={ () => !! authorIds }
219
234
  label={ __( 'Authors' ) }
@@ -225,7 +240,7 @@ export default function QueryInspectorControls( {
225
240
  />
226
241
  </ToolsPanelItem>
227
242
  ) }
228
- { isControlAllowed( allowedControls, 'search' ) && (
243
+ { showSearchControl && (
229
244
  <ToolsPanelItem
230
245
  hasValue={ () => !! querySearch }
231
246
  label={ __( 'Keyword' ) }
@@ -238,22 +253,19 @@ export default function QueryInspectorControls( {
238
253
  />
239
254
  </ToolsPanelItem>
240
255
  ) }
241
- { isPostTypeHierarchical &&
242
- isControlAllowed( allowedControls, 'parents' ) && (
243
- <ToolsPanelItem
244
- hasValue={ () => !! parents?.length }
245
- label={ __( 'Parents' ) }
246
- onDeselect={ () =>
247
- setQuery( { parents: [] } )
248
- }
249
- >
250
- <ParentControl
251
- parents={ parents }
252
- postType={ postType }
253
- onChange={ setQuery }
254
- />
255
- </ToolsPanelItem>
256
- ) }
256
+ { showParentControl && (
257
+ <ToolsPanelItem
258
+ hasValue={ () => !! parents?.length }
259
+ label={ __( 'Parents' ) }
260
+ onDeselect={ () => setQuery( { parents: [] } ) }
261
+ >
262
+ <ParentControl
263
+ parents={ parents }
264
+ postType={ postType }
265
+ onChange={ setQuery }
266
+ />
267
+ </ToolsPanelItem>
268
+ ) }
257
269
  </ToolsPanel>
258
270
  </InspectorControls>
259
271
  ) }
@@ -27,6 +27,7 @@ const orderOptions = [
27
27
  function OrderControl( { order, orderBy, onChange } ) {
28
28
  return (
29
29
  <SelectControl
30
+ __nextHasNoMarginBottom
30
31
  label={ __( 'Order by' ) }
31
32
  value={ `${ orderBy }/${ order }` }
32
33
  options={ orderOptions }
@@ -13,6 +13,7 @@ const stickyOptions = [
13
13
  export default function StickyControl( { value, onChange } ) {
14
14
  return (
15
15
  <SelectControl
16
+ __nextHasNoMarginBottom
16
17
  label={ __( 'Sticky posts' ) }
17
18
  options={ stickyOptions }
18
19
  value={ value }
@@ -4,12 +4,20 @@
4
4
  import { FormTokenField } from '@wordpress/components';
5
5
  import { useSelect } from '@wordpress/data';
6
6
  import { store as coreStore } from '@wordpress/core-data';
7
+ import { useState, useEffect } from '@wordpress/element';
8
+ import { useDebounce } from '@wordpress/compose';
7
9
 
8
10
  /**
9
11
  * Internal dependencies
10
12
  */
11
13
  import { useTaxonomies } from '../../utils';
12
- import { MAX_FETCHED_TERMS } from '../../constants';
14
+
15
+ const EMPTY_ARRAY = [];
16
+ const BASE_QUERY = {
17
+ order: 'asc',
18
+ _fields: 'id,name',
19
+ context: 'view',
20
+ };
13
21
 
14
22
  // Helper function to get the term id based on user input in terms `FormTokenField`.
15
23
  const getTermIdByTermValue = ( terms, termValue ) => {
@@ -35,20 +43,6 @@ const getTermIdByTermValue = ( terms, termValue ) => {
35
43
  )?.id;
36
44
  };
37
45
 
38
- const useTaxonomyTerms = ( slug ) => {
39
- return useSelect(
40
- ( select ) => {
41
- const terms = select( coreStore ).getEntityRecords(
42
- 'taxonomy',
43
- slug,
44
- { context: 'view', per_page: MAX_FETCHED_TERMS }
45
- );
46
- return { terms };
47
- },
48
- [ slug ]
49
- );
50
- };
51
-
52
46
  export function TaxonomyControls( { onChange, query } ) {
53
47
  const { postType, taxQuery } = query;
54
48
 
@@ -60,7 +54,7 @@ export function TaxonomyControls( { onChange, query } ) {
60
54
  return (
61
55
  <>
62
56
  { taxonomies.map( ( taxonomy ) => {
63
- const value = taxQuery?.[ taxonomy.slug ] || [];
57
+ const termIds = taxQuery?.[ taxonomy.slug ] || [];
64
58
  const handleChange = ( newTermIds ) =>
65
59
  onChange( {
66
60
  taxQuery: {
@@ -73,7 +67,7 @@ export function TaxonomyControls( { onChange, query } ) {
73
67
  <TaxonomyItem
74
68
  key={ taxonomy.slug }
75
69
  taxonomy={ taxonomy }
76
- value={ value }
70
+ termIds={ termIds }
77
71
  onChange={ handleChange }
78
72
  />
79
73
  );
@@ -81,38 +75,108 @@ export function TaxonomyControls( { onChange, query } ) {
81
75
  </>
82
76
  );
83
77
  }
84
- function TaxonomyItem( { taxonomy, value, onChange } ) {
85
- const { terms } = useTaxonomyTerms( taxonomy.slug );
86
- if ( ! terms?.length ) {
87
- return null;
88
- }
89
78
 
79
+ /**
80
+ * Renders a `FormTokenField` for a given taxonomy.
81
+ *
82
+ * @param {Object} props The props for the component.
83
+ * @param {Object} props.taxonomy The taxonomy object.
84
+ * @param {number[]} props.termIds An array with the block's term ids for the given taxonomy.
85
+ * @param {Function} props.onChange Callback `onChange` function.
86
+ * @return {JSX.Element} The rendered component.
87
+ */
88
+ function TaxonomyItem( { taxonomy, termIds, onChange } ) {
89
+ const [ search, setSearch ] = useState( '' );
90
+ const [ value, setValue ] = useState( EMPTY_ARRAY );
91
+ const [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );
92
+ const debouncedSearch = useDebounce( setSearch, 250 );
93
+ const { searchResults, searchHasResolved } = useSelect(
94
+ ( select ) => {
95
+ if ( ! search ) {
96
+ return { searchResults: EMPTY_ARRAY, searchHasResolved: true };
97
+ }
98
+ const { getEntityRecords, hasFinishedResolution } =
99
+ select( coreStore );
100
+ const selectorArgs = [
101
+ 'taxonomy',
102
+ taxonomy.slug,
103
+ {
104
+ ...BASE_QUERY,
105
+ search,
106
+ orderby: 'name',
107
+ exclude: termIds,
108
+ per_page: 20,
109
+ },
110
+ ];
111
+ return {
112
+ searchResults: getEntityRecords( ...selectorArgs ),
113
+ searchHasResolved: hasFinishedResolution(
114
+ 'getEntityRecords',
115
+ selectorArgs
116
+ ),
117
+ };
118
+ },
119
+ [ search, termIds ]
120
+ );
121
+ // `existingTerms` are the ones fetched from the API and their type is `{ id: number; name: string }`.
122
+ // They are used to extract the terms' names to populate the `FormTokenField` properly
123
+ // and to sanitize the provided `termIds`, by setting only the ones that exist.
124
+ const existingTerms = useSelect(
125
+ ( select ) => {
126
+ if ( ! termIds?.length ) return EMPTY_ARRAY;
127
+ const { getEntityRecords } = select( coreStore );
128
+ return getEntityRecords( 'taxonomy', taxonomy.slug, {
129
+ ...BASE_QUERY,
130
+ include: termIds,
131
+ per_page: termIds.length,
132
+ } );
133
+ },
134
+ [ termIds ]
135
+ );
136
+ // Update the `value` state only after the selectors are resolved
137
+ // to avoid emptying the input when we're changing terms.
138
+ useEffect( () => {
139
+ if ( ! termIds?.length ) {
140
+ setValue( EMPTY_ARRAY );
141
+ }
142
+ if ( ! existingTerms?.length ) return;
143
+ // Returns only the existing entity ids. This prevents the component
144
+ // from crashing in the editor, when non existing ids are provided.
145
+ const sanitizedValue = termIds.reduce( ( accumulator, id ) => {
146
+ const entity = existingTerms.find( ( term ) => term.id === id );
147
+ if ( entity ) {
148
+ accumulator.push( {
149
+ id,
150
+ value: entity.name,
151
+ } );
152
+ }
153
+ return accumulator;
154
+ }, [] );
155
+ setValue( sanitizedValue );
156
+ }, [ termIds, existingTerms ] );
157
+ // Update suggestions only when the query has resolved.
158
+ useEffect( () => {
159
+ if ( ! searchHasResolved ) return;
160
+ setSuggestions( searchResults.map( ( result ) => result.name ) );
161
+ }, [ searchResults, searchHasResolved ] );
90
162
  const onTermsChange = ( newTermValues ) => {
91
- const termIds = new Set();
163
+ const newTermIds = new Set();
92
164
  for ( const termValue of newTermValues ) {
93
- const termId = getTermIdByTermValue( terms, termValue );
165
+ const termId = getTermIdByTermValue( searchResults, termValue );
94
166
  if ( termId ) {
95
- termIds.add( termId );
167
+ newTermIds.add( termId );
96
168
  }
97
169
  }
98
-
99
- onChange( Array.from( termIds ) );
170
+ setSuggestions( EMPTY_ARRAY );
171
+ onChange( Array.from( newTermIds ) );
100
172
  };
101
-
102
- // Selects only the existing term ids in proper format to be
103
- // used in `FormTokenField`. This prevents the component from
104
- // crashing in the editor, when non existing term ids were provided.
105
- const taxQueryValue = value
106
- .map( ( termId ) => terms.find( ( t ) => t.id === termId ) )
107
- .filter( Boolean )
108
- .map( ( term ) => ( { id: term.id, value: term.name } ) );
109
-
110
173
  return (
111
174
  <div className="block-library-query-inspector__taxonomy-control">
112
175
  <FormTokenField
113
176
  label={ taxonomy.name }
114
- value={ taxQueryValue }
115
- suggestions={ terms.map( ( t ) => t.name ) }
177
+ value={ value }
178
+ onInputChange={ debouncedSearch }
179
+ suggestions={ suggestions }
116
180
  onChange={ onTermsChange }
117
181
  __experimentalShowHowTo={ false }
118
182
  />
@@ -20,7 +20,8 @@ import { __ } from '@wordpress/i18n';
20
20
  */
21
21
  import QueryToolbar from './query-toolbar';
22
22
  import QueryInspectorControls from './inspector-controls';
23
- import { DEFAULTS_POSTS_PER_PAGE } from '../constants';
23
+
24
+ const DEFAULTS_POSTS_PER_PAGE = 3;
24
25
 
25
26
  const TEMPLATE = [ [ 'core/post-template' ] ];
26
27
  export default function QueryContent( {
@@ -93,6 +94,17 @@ export default function QueryContent( {
93
94
  setAttributes( {
94
95
  displayLayout: { ...displayLayout, ...newDisplayLayout },
95
96
  } );
97
+ const htmlElementMessages = {
98
+ main: __(
99
+ 'The <main> element should be used for the primary content of your document only. '
100
+ ),
101
+ section: __(
102
+ "The <section> element should represent a standalone portion of the document that can't be better represented by another element."
103
+ ),
104
+ aside: __(
105
+ "The <aside> element should represent a portion of a document whose content is only indirectly related to the document's main content."
106
+ ),
107
+ };
96
108
  return (
97
109
  <>
98
110
  <QueryInspectorControls
@@ -112,6 +124,7 @@ export default function QueryContent( {
112
124
  </BlockControls>
113
125
  <InspectorControls __experimentalGroup="advanced">
114
126
  <SelectControl
127
+ __nextHasNoMarginBottom
115
128
  label={ __( 'HTML element' ) }
116
129
  options={ [
117
130
  { label: __( 'Default (<div>)' ), value: 'div' },
@@ -123,6 +136,7 @@ export default function QueryContent( {
123
136
  onChange={ ( value ) =>
124
137
  setAttributes( { tagName: value } )
125
138
  }
139
+ help={ htmlElementMessages[ TagName ] }
126
140
  />
127
141
  </InspectorControls>
128
142
  <TagName { ...innerBlocksProps } />
@@ -16,6 +16,11 @@ import {
16
16
  import { Button, Placeholder } from '@wordpress/components';
17
17
  import { __ } from '@wordpress/i18n';
18
18
 
19
+ /**
20
+ * Internal dependencies
21
+ */
22
+ import { useScopedBlockVariations } from '../utils';
23
+
19
24
  export default function QueryPlaceholder( {
20
25
  attributes,
21
26
  clientId,
@@ -57,7 +62,6 @@ export default function QueryPlaceholder( {
57
62
  return (
58
63
  <QueryVariationPicker
59
64
  clientId={ clientId }
60
- name={ name }
61
65
  attributes={ attributes }
62
66
  setAttributes={ setAttributes }
63
67
  icon={ icon }
@@ -98,16 +102,12 @@ export default function QueryPlaceholder( {
98
102
 
99
103
  function QueryVariationPicker( {
100
104
  clientId,
101
- name,
102
105
  attributes,
103
106
  setAttributes,
104
107
  icon,
105
108
  label,
106
109
  } ) {
107
- const variations = useSelect(
108
- ( select ) => select( blocksStore ).getBlockVariations( name, 'block' ),
109
- [ name ]
110
- );
110
+ const scopeVariations = useScopedBlockVariations( attributes );
111
111
  const { replaceInnerBlocks } = useDispatch( blockEditorStore );
112
112
  const blockProps = useBlockProps();
113
113
  return (
@@ -115,24 +115,25 @@ function QueryVariationPicker( {
115
115
  <__experimentalBlockVariationPicker
116
116
  icon={ icon }
117
117
  label={ label }
118
- variations={ variations }
119
- onSelect={ ( nextVariation ) => {
120
- if ( nextVariation.attributes ) {
118
+ variations={ scopeVariations }
119
+ onSelect={ ( variation ) => {
120
+ if ( variation.attributes ) {
121
121
  setAttributes( {
122
- ...nextVariation.attributes,
122
+ ...variation.attributes,
123
123
  query: {
124
- ...nextVariation.attributes.query,
124
+ ...variation.attributes.query,
125
125
  postType:
126
126
  attributes.query.postType ||
127
- nextVariation.attributes.query.postType,
127
+ variation.attributes.query.postType,
128
128
  },
129
+ namespace: attributes.namespace,
129
130
  } );
130
131
  }
131
- if ( nextVariation.innerBlocks ) {
132
+ if ( variation.innerBlocks ) {
132
133
  replaceInnerBlocks(
133
134
  clientId,
134
135
  createBlocksFromInnerBlocksTemplate(
135
- nextVariation.innerBlocks
136
+ variation.innerBlocks
136
137
  ),
137
138
  false
138
139
  );