@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
@@ -18,6 +18,8 @@ import { cloneBlock, store as blocksStore } from '@wordpress/blocks';
18
18
  */
19
19
  import { name as queryLoopName } from './block.json';
20
20
 
21
+ /** @typedef {import('@wordpress/blocks').WPBlockVariation} WPBlockVariation */
22
+
21
23
  /**
22
24
  * @typedef IHasNameAndId
23
25
  * @property {string|number} id The entity's id.
@@ -237,7 +239,6 @@ export function useBlockNameForPatterns( clientId, attributes ) {
237
239
  queryLoopName,
238
240
  attributes
239
241
  )?.name,
240
-
241
242
  [ attributes ]
242
243
  );
243
244
  const blockName = `${ queryLoopName }/${ activeVariationName }`;
@@ -260,3 +261,60 @@ export function useBlockNameForPatterns( clientId, attributes ) {
260
261
  );
261
262
  return activeVariationPatterns?.length ? blockName : queryLoopName;
262
263
  }
264
+
265
+ /**
266
+ * Helper hook that determines if there is an active variation of the block
267
+ * and if there are available specific scoped `block` variations connected with
268
+ * this variation.
269
+ *
270
+ * If there are, these variations are going to be the only ones suggested
271
+ * to the user in setup flow when clicking to `start blank`, without including
272
+ * the default ones for Query Loop.
273
+ *
274
+ * If there are no such scoped `block` variations, the default ones for Query
275
+ * Loop are going to be suggested.
276
+ *
277
+ * The way we determine such variations is with the convention that they have the `namespace`
278
+ * attribute defined as an array. This array should contain the names(`name` property) of any
279
+ * variations they want to be connected to.
280
+ * For example, if we have a `Query Loop` scoped `inserter` variation with the name `products`,
281
+ * we can connect a scoped `block` variation by setting its `namespace` attribute to `['products']`.
282
+ * If the user selects this variation, the `namespace` attribute will be overridden by the
283
+ * main `inserter` variation.
284
+ *
285
+ * @param {Object} attributes The block's attributes.
286
+ * @return {WPBlockVariation[]} The block variations to be suggested in setup flow, when clicking to `start blank`.
287
+ */
288
+ export function useScopedBlockVariations( attributes ) {
289
+ const { activeVariationName, blockVariations } = useSelect(
290
+ ( select ) => {
291
+ const { getActiveBlockVariation, getBlockVariations } =
292
+ select( blocksStore );
293
+ return {
294
+ activeVariationName: getActiveBlockVariation(
295
+ queryLoopName,
296
+ attributes
297
+ )?.name,
298
+ blockVariations: getBlockVariations( queryLoopName, 'block' ),
299
+ };
300
+ },
301
+ [ attributes ]
302
+ );
303
+ const variations = useMemo( () => {
304
+ // Filter out the variations that have defined a `namespace` attribute,
305
+ // which means they are 'connected' to specific variations of the block.
306
+ const isNotConnected = ( variation ) =>
307
+ ! variation.attributes?.namespace;
308
+ if ( ! activeVariationName ) {
309
+ return blockVariations.filter( isNotConnected );
310
+ }
311
+ const connectedVariations = blockVariations.filter( ( variation ) =>
312
+ variation.attributes?.namespace?.includes( activeVariationName )
313
+ );
314
+ if ( !! connectedVariations.length ) {
315
+ return connectedVariations;
316
+ }
317
+ return blockVariations.filter( isNotConnected );
318
+ }, [ activeVariationName, blockVariations ] );
319
+ return variations;
320
+ }
package/src/rss/index.php CHANGED
@@ -48,7 +48,7 @@ function render_block_core_rss( $attributes ) {
48
48
  if ( $date ) {
49
49
  $date = sprintf(
50
50
  '<time datetime="%1$s" class="wp-block-rss__item-publish-date">%2$s</time> ',
51
- esc_attr( date_i18n( get_option( 'c' ), $date ) ),
51
+ esc_attr( date_i18n( 'c', $date ) ),
52
52
  esc_attr( date_i18n( get_option( 'date_format' ), $date ) )
53
53
  );
54
54
  }
@@ -114,10 +114,10 @@ export default function SearchEdit( {
114
114
  }
115
115
 
116
116
  const colorProps = useColorProps( attributes );
117
- const fluidTypographyEnabled = useSetting( 'typography.fluid' );
117
+ const fluidTypographySettings = useSetting( 'typography.fluid' );
118
118
  const typographyProps = useTypographyProps(
119
119
  attributes,
120
- fluidTypographyEnabled
120
+ fluidTypographySettings
121
121
  );
122
122
  const unitControlInstanceId = useInstanceId( UnitControl );
123
123
  const unitControlInputId = `wp-block-search__width-${ unitControlInstanceId }`;
@@ -0,0 +1,7 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Separator block inserts block 1`] = `
4
+ "<!-- wp:separator -->
5
+ <hr class=\\"wp-block-separator has-alpha-channel-opacity\\"/>
6
+ <!-- /wp:separator -->"
7
+ `;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ addBlock,
6
+ getEditorHtml,
7
+ initializeEditor,
8
+ getBlock,
9
+ } from 'test/helpers';
10
+
11
+ /**
12
+ * WordPress dependencies
13
+ */
14
+ import { getBlockTypes, unregisterBlockType } from '@wordpress/blocks';
15
+ import { registerCoreBlocks } from '@wordpress/block-library';
16
+
17
+ beforeAll( () => {
18
+ // Register all core blocks
19
+ registerCoreBlocks();
20
+ } );
21
+
22
+ afterAll( () => {
23
+ // Clean up registered blocks
24
+ getBlockTypes().forEach( ( block ) => {
25
+ unregisterBlockType( block.name );
26
+ } );
27
+ } );
28
+
29
+ describe( 'Separator block', () => {
30
+ it( 'inserts block', async () => {
31
+ const screen = await initializeEditor();
32
+
33
+ // Add block
34
+ await addBlock( screen, 'Separator' );
35
+
36
+ // Get block
37
+ const separatorBlock = await getBlock( screen, 'Separator' );
38
+ expect( separatorBlock ).toBeVisible();
39
+ expect( getEditorHtml() ).toMatchSnapshot();
40
+ } );
41
+ } );
@@ -12,7 +12,7 @@ import {
12
12
  URLInput,
13
13
  useBlockProps,
14
14
  } from '@wordpress/block-editor';
15
- import { Fragment, useState } from '@wordpress/element';
15
+ import { useState } from '@wordpress/element';
16
16
  import {
17
17
  Button,
18
18
  PanelBody,
@@ -43,6 +43,7 @@ const SocialLinkURLPopover = ( {
43
43
  >
44
44
  <div className="block-editor-url-input">
45
45
  <URLInput
46
+ __nextHasNoMarginBottom
46
47
  value={ url }
47
48
  onChange={ ( nextURL ) =>
48
49
  setAttributes( { url: nextURL } )
@@ -89,7 +90,7 @@ const SocialLinkEdit = ( {
89
90
  } );
90
91
 
91
92
  return (
92
- <Fragment>
93
+ <>
93
94
  <InspectorControls>
94
95
  <PanelBody
95
96
  title={ sprintf(
@@ -105,7 +106,7 @@ const SocialLinkEdit = ( {
105
106
  help={ __(
106
107
  'Briefly describe the link to help screen reader users.'
107
108
  ) }
108
- value={ label }
109
+ value={ label || '' }
109
110
  onChange={ ( value ) =>
110
111
  setAttributes( { label: value } )
111
112
  }
@@ -144,7 +145,7 @@ const SocialLinkEdit = ( {
144
145
  ) }
145
146
  </Button>
146
147
  </li>
147
- </Fragment>
148
+ </>
148
149
  );
149
150
  };
150
151
 
@@ -229,7 +229,6 @@ export function SocialLinksEdit( props ) {
229
229
  ( { onChange, label, value, resetAllFilter } ) => (
230
230
  <ColorGradientSettingsDropdown
231
231
  key={ `social-links-color-${ label }` }
232
- __experimentalHasMultipleOrigins
233
232
  __experimentalIsRenderedInSidebar
234
233
  settings={ [
235
234
  {
package/src/table/edit.js CHANGED
@@ -510,6 +510,7 @@ function TableEdit( {
510
510
  ) }
511
511
  { ! isEmpty && (
512
512
  <RichText
513
+ identifier="caption"
513
514
  tagName="figcaption"
514
515
  className={ __experimentalGetElementClassName( 'caption' ) }
515
516
  aria-label={ __( 'Table caption text' ) }
@@ -11,6 +11,14 @@
11
11
  width: 100%;
12
12
  }
13
13
 
14
+ thead {
15
+ border-bottom: 3px solid;
16
+ }
17
+
18
+ tfoot {
19
+ border-top: 3px solid;
20
+ }
21
+
14
22
  // Match default border style to default style in editor
15
23
  td,
16
24
  th {
@@ -1,14 +1,6 @@
1
1
  .wp-block-table {
2
2
  margin: 0 0 1em 0;
3
3
 
4
- thead {
5
- border-bottom: 3px solid;
6
- }
7
-
8
- tfoot {
9
- border-top: 3px solid;
10
- }
11
-
12
4
  td,
13
5
  th {
14
6
  word-break: normal;
@@ -279,7 +279,7 @@ export default function TableOfContentsEdit( {
279
279
  <div { ...blockProps }>
280
280
  <Placeholder
281
281
  icon={ <BlockIcon icon={ icon } /> }
282
- label="Table of Contents"
282
+ label={ __( 'Table of Contents' ) }
283
283
  instructions={ __(
284
284
  'Start adding Heading blocks to create a table of contents. Headings with HTML anchors will be linked here.'
285
285
  ) }
@@ -109,6 +109,7 @@ function TagCloudEdit( { attributes, setAttributes, taxonomies } ) {
109
109
  <InspectorControls>
110
110
  <PanelBody title={ __( 'Settings' ) }>
111
111
  <SelectControl
112
+ __nextHasNoMarginBottom
112
113
  label={ __( 'Taxonomy' ) }
113
114
  options={ getTaxonomyOptions() }
114
115
  value={ taxonomy }
@@ -7,12 +7,18 @@ import { sprintf, __ } from '@wordpress/i18n';
7
7
  import { InspectorControls } from '@wordpress/block-editor';
8
8
  import { useSelect } from '@wordpress/data';
9
9
 
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { TemplatePartImportControls } from './import-controls';
14
+
10
15
  export function TemplatePartAdvancedControls( {
11
16
  tagName,
12
17
  setAttributes,
13
18
  isEntityAvailable,
14
19
  templatePartId,
15
20
  defaultWrapper,
21
+ hasInnerBlocks,
16
22
  } ) {
17
23
  const [ area, setArea ] = useEntityProp(
18
24
  'postType',
@@ -43,6 +49,27 @@ export function TemplatePartAdvancedControls( {
43
49
  };
44
50
  }, [] );
45
51
 
52
+ const htmlElementMessages = {
53
+ header: __(
54
+ 'The <header> element should represent introductory content, typically a group of introductory or navigational aids.'
55
+ ),
56
+ main: __(
57
+ 'The <main> element should be used for the primary content of your document only. '
58
+ ),
59
+ section: __(
60
+ "The <section> element should represent a standalone portion of the document that can't be better represented by another element."
61
+ ),
62
+ article: __(
63
+ 'The <article> element should represent a self-contained, syndicatable portion of the document.'
64
+ ),
65
+ aside: __(
66
+ "The <aside> element should represent a portion of a document whose content is only indirectly related to the document's main content."
67
+ ),
68
+ footer: __(
69
+ 'The <footer> element should represent a footer for its nearest sectioning element (e.g.: <section>, <article>, <main> etc.).'
70
+ ),
71
+ };
72
+
46
73
  return (
47
74
  <InspectorControls __experimentalGroup="advanced">
48
75
  { isEntityAvailable && (
@@ -57,6 +84,7 @@ export function TemplatePartAdvancedControls( {
57
84
  />
58
85
 
59
86
  <SelectControl
87
+ __nextHasNoMarginBottom
60
88
  label={ __( 'Area' ) }
61
89
  labelPosition="top"
62
90
  options={ areaOptions }
@@ -66,6 +94,7 @@ export function TemplatePartAdvancedControls( {
66
94
  </>
67
95
  ) }
68
96
  <SelectControl
97
+ __nextHasNoMarginBottom
69
98
  label={ __( 'HTML element' ) }
70
99
  options={ [
71
100
  {
@@ -86,7 +115,14 @@ export function TemplatePartAdvancedControls( {
86
115
  ] }
87
116
  value={ tagName || '' }
88
117
  onChange={ ( value ) => setAttributes( { tagName: value } ) }
118
+ help={ htmlElementMessages[ tagName ] }
89
119
  />
120
+ { ! hasInnerBlocks && (
121
+ <TemplatePartImportControls
122
+ area={ area }
123
+ setAttributes={ setAttributes }
124
+ />
125
+ ) }
90
126
  </InspectorControls>
91
127
  );
92
128
  }
@@ -0,0 +1,180 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { useMemo, useState } from '@wordpress/element';
6
+ import { useDispatch, useSelect, useRegistry } from '@wordpress/data';
7
+ import {
8
+ Button,
9
+ FlexBlock,
10
+ FlexItem,
11
+ SelectControl,
12
+ __experimentalHStack as HStack,
13
+ __experimentalSpacer as Spacer,
14
+ } from '@wordpress/components';
15
+ import {
16
+ switchToBlockType,
17
+ getPossibleBlockTransformations,
18
+ } from '@wordpress/blocks';
19
+ import { store as coreStore } from '@wordpress/core-data';
20
+ import { store as noticesStore } from '@wordpress/notices';
21
+
22
+ /**
23
+ * Internal dependencies
24
+ */
25
+ import { useCreateTemplatePartFromBlocks } from './utils/hooks';
26
+ import { transformWidgetToBlock } from './utils/transformers';
27
+
28
+ export function TemplatePartImportControls( { area, setAttributes } ) {
29
+ const [ selectedSidebar, setSelectedSidebar ] = useState( '' );
30
+ const [ isBusy, setIsBusy ] = useState( false );
31
+
32
+ const registry = useRegistry();
33
+ const sidebars = useSelect( ( select ) => {
34
+ return select( coreStore ).getSidebars( {
35
+ per_page: -1,
36
+ _fields: 'id,name,description,status,widgets',
37
+ } );
38
+ }, [] );
39
+ const { createErrorNotice } = useDispatch( noticesStore );
40
+
41
+ const createFromBlocks = useCreateTemplatePartFromBlocks(
42
+ area,
43
+ setAttributes
44
+ );
45
+
46
+ const options = useMemo( () => {
47
+ const sidebarOptions = ( sidebars ?? [] )
48
+ .filter(
49
+ ( widgetArea ) =>
50
+ widgetArea.id !== 'wp_inactive_widgets' &&
51
+ widgetArea.widgets.length > 0
52
+ )
53
+ .map( ( widgetArea ) => {
54
+ return {
55
+ value: widgetArea.id,
56
+ label: widgetArea.name,
57
+ };
58
+ } );
59
+
60
+ if ( ! sidebarOptions.length ) {
61
+ return [];
62
+ }
63
+
64
+ return [
65
+ { value: '', label: __( 'Select widget area' ) },
66
+ ...sidebarOptions,
67
+ ];
68
+ }, [ sidebars ] );
69
+
70
+ async function createFromWidgets( event ) {
71
+ event.preventDefault();
72
+
73
+ if ( isBusy || ! selectedSidebar ) {
74
+ return;
75
+ }
76
+
77
+ setIsBusy( true );
78
+
79
+ const sidebar = options.find(
80
+ ( { value } ) => value === selectedSidebar
81
+ );
82
+ const { getWidgets } = registry.resolveSelect( coreStore );
83
+
84
+ // The widgets API always returns a successful response.
85
+ const widgets = await getWidgets( {
86
+ sidebar: sidebar.value,
87
+ _embed: 'about',
88
+ } );
89
+
90
+ const skippedWidgets = new Set();
91
+ const blocks = widgets.flatMap( ( widget ) => {
92
+ const block = transformWidgetToBlock( widget );
93
+
94
+ if ( block.name !== 'core/legacy-widget' ) {
95
+ return block;
96
+ }
97
+
98
+ const transforms = getPossibleBlockTransformations( [
99
+ block,
100
+ ] ).filter( ( item ) => {
101
+ // The block without any transformations can't be a wildcard.
102
+ if ( ! item.transforms ) {
103
+ return true;
104
+ }
105
+
106
+ const hasWildCardFrom = item.transforms?.from?.find(
107
+ ( from ) => from.blocks && from.blocks.includes( '*' )
108
+ );
109
+ const hasWildCardTo = item.transforms?.to?.find(
110
+ ( to ) => to.blocks && to.blocks.includes( '*' )
111
+ );
112
+
113
+ return ! hasWildCardFrom && ! hasWildCardTo;
114
+ } );
115
+
116
+ // Skip the block if we have no matching transformations.
117
+ if ( ! transforms.length ) {
118
+ skippedWidgets.add( widget.id_base );
119
+ return [];
120
+ }
121
+
122
+ // Try transforming the Legacy Widget into a first matching block.
123
+ return switchToBlockType( block, transforms[ 0 ].name );
124
+ } );
125
+
126
+ await createFromBlocks(
127
+ blocks,
128
+ /* translators: %s: name of the widget area */
129
+ sprintf( __( 'Widget area: %s' ), sidebar.label )
130
+ );
131
+
132
+ if ( skippedWidgets.size ) {
133
+ createErrorNotice(
134
+ sprintf(
135
+ /* translators: %s: the list of widgets */
136
+ __( 'Unable to import the following widgets: %s.' ),
137
+ Array.from( skippedWidgets ).join( ', ' )
138
+ ),
139
+ {
140
+ type: 'snackbar',
141
+ }
142
+ );
143
+ }
144
+
145
+ setIsBusy( false );
146
+ }
147
+
148
+ return (
149
+ <Spacer marginBottom="4">
150
+ <HStack as="form" onSubmit={ createFromWidgets }>
151
+ <FlexBlock>
152
+ <SelectControl
153
+ label={ __( 'Import widget area' ) }
154
+ value={ selectedSidebar }
155
+ options={ options }
156
+ onChange={ ( value ) => setSelectedSidebar( value ) }
157
+ disabled={ ! options.length }
158
+ __next36pxDefaultSize
159
+ __nextHasNoMarginBottom
160
+ />
161
+ </FlexBlock>
162
+ <FlexItem
163
+ style={ {
164
+ marginBottom: '8px',
165
+ marginTop: 'auto',
166
+ } }
167
+ >
168
+ <Button
169
+ variant="primary"
170
+ type="submit"
171
+ isBusy={ isBusy }
172
+ aria-disabled={ isBusy || ! selectedSidebar }
173
+ >
174
+ { __( 'Import' ) }
175
+ </Button>
176
+ </FlexItem>
177
+ </HStack>
178
+ </Spacer>
179
+ );
180
+ }
@@ -141,6 +141,7 @@ export default function TemplatePartEdit( {
141
141
  isEntityAvailable={ isEntityAvailable }
142
142
  templatePartId={ templatePartId }
143
143
  defaultWrapper={ areaObject.tagName }
144
+ hasInnerBlocks={ innerBlocks.length > 0 }
144
145
  />
145
146
  { isPlaceholder && (
146
147
  <TagName { ...blockProps }>
@@ -0,0 +1,37 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { createBlock, parse } from '@wordpress/blocks';
5
+
6
+ /**
7
+ * Converts a widget entity record into a block.
8
+ *
9
+ * @param {Object} widget The widget entity record.
10
+ * @return {Object} a block (converted from the entity record).
11
+ */
12
+ export function transformWidgetToBlock( widget ) {
13
+ if ( widget.id_base === 'block' ) {
14
+ const parsedBlocks = parse( widget.instance.raw.content, {
15
+ __unstableSkipAutop: true,
16
+ } );
17
+ if ( ! parsedBlocks.length ) {
18
+ return createBlock( 'core/paragraph', {}, [] );
19
+ }
20
+
21
+ return parsedBlocks[ 0 ];
22
+ }
23
+
24
+ let attributes;
25
+ if ( widget._embedded.about[ 0 ].is_multi ) {
26
+ attributes = {
27
+ idBase: widget.id_base,
28
+ instance: widget.instance,
29
+ };
30
+ } else {
31
+ attributes = {
32
+ id: widget.id,
33
+ };
34
+ }
35
+
36
+ return createBlock( 'core/legacy-widget', attributes, [] );
37
+ }
@@ -1,5 +1,8 @@
1
1
  pre.wp-block-verse {
2
- font-family: inherit;
3
2
  overflow: auto;
4
3
  white-space: pre-wrap;
5
4
  }
5
+
6
+ :where(pre.wp-block-verse) {
7
+ font-family: inherit;
8
+ }
@@ -0,0 +1,13 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Verse block inserts block 1`] = `
4
+ "<!-- wp:verse -->
5
+ <pre class=\\"wp-block-verse\\"></pre>
6
+ <!-- /wp:verse -->"
7
+ `;
8
+
9
+ exports[`Verse block renders block text set as initial content 1`] = `
10
+ "<!-- wp:verse -->
11
+ <pre class=\\"wp-block-verse\\">Sample text</pre>
12
+ <!-- /wp:verse -->"
13
+ `;
@@ -1,47 +1,54 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render } from 'test/helpers';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import { metadata, settings, name } from '../index';
4
+ import {
5
+ addBlock,
6
+ getEditorHtml,
7
+ initializeEditor,
8
+ getBlock,
9
+ } from 'test/helpers';
10
10
 
11
11
  /**
12
12
  * WordPress dependencies
13
13
  */
14
- import { BlockEdit } from '@wordpress/block-editor';
15
- import { registerBlockType, unregisterBlockType } from '@wordpress/blocks';
16
-
17
- const Verse = ( { clientId, ...props } ) => (
18
- <BlockEdit name={ name } clientId={ clientId || 0 } { ...props } />
19
- );
20
-
21
- describe( 'Verse Block', () => {
22
- beforeAll( () => {
23
- registerBlockType( name, {
24
- ...metadata,
25
- ...settings,
26
- } );
27
- } );
14
+ import { getBlockTypes, unregisterBlockType } from '@wordpress/blocks';
15
+ import { registerCoreBlocks } from '@wordpress/block-library';
16
+
17
+ beforeAll( () => {
18
+ // Register all core blocks
19
+ registerCoreBlocks();
20
+ } );
28
21
 
29
- afterAll( () => {
30
- unregisterBlockType( name );
22
+ afterAll( () => {
23
+ // Clean up registered blocks
24
+ getBlockTypes().forEach( ( block ) => {
25
+ unregisterBlockType( block.name );
31
26
  } );
27
+ } );
28
+
29
+ describe( 'Verse block', () => {
30
+ it( 'inserts block', async () => {
31
+ const screen = await initializeEditor();
32
32
 
33
- it( 'renders without crashing', () => {
34
- const component = render( <Verse attributes={ { content: '' } } /> );
35
- const rendered = component.toJSON();
36
- expect( rendered ).toBeTruthy();
33
+ // Add block
34
+ await addBlock( screen, 'Verse' );
35
+
36
+ // Get block
37
+ const verseBlock = await getBlock( screen, 'Verse' );
38
+ expect( verseBlock ).toBeVisible();
39
+ expect( getEditorHtml() ).toMatchSnapshot();
37
40
  } );
38
41
 
39
- it( 'renders given text without crashing', () => {
40
- const component = render(
41
- <Verse attributes={ { content: 'sample text' } } />
42
- );
43
- expect(
44
- component.getByDisplayValue( '<pre>sample text</pre>' )
45
- ).toBeTruthy();
42
+ it( 'renders block text set as initial content', async () => {
43
+ const screen = await initializeEditor( {
44
+ initialHtml: `<!-- wp:verse -->
45
+ <pre class="wp-block-verse">Sample text</pre>
46
+ <!-- /wp:verse -->`,
47
+ } );
48
+
49
+ // Get block
50
+ const verseBlock = await getBlock( screen, 'Verse' );
51
+ expect( verseBlock ).toBeVisible();
52
+ expect( getEditorHtml() ).toMatchSnapshot();
46
53
  } );
47
54
  } );