@wordpress/block-library 8.5.0 → 8.7.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 (427) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/buttons/edit.native.js +1 -1
  3. package/build/buttons/edit.native.js.map +1 -1
  4. package/build/buttons/index.js +1 -0
  5. package/build/buttons/index.js.map +1 -1
  6. package/build/buttons/transforms.js +1 -0
  7. package/build/buttons/transforms.js.map +1 -1
  8. package/build/columns/edit.js +14 -10
  9. package/build/columns/edit.js.map +1 -1
  10. package/build/columns/edit.native.js +1 -1
  11. package/build/columns/edit.native.js.map +1 -1
  12. package/build/columns/index.js +4 -0
  13. package/build/columns/index.js.map +1 -1
  14. package/build/comments/edit/placeholder.js +8 -5
  15. package/build/comments/edit/placeholder.js.map +1 -1
  16. package/build/cover/edit/inspector-controls.js +2 -2
  17. package/build/cover/edit/inspector-controls.js.map +1 -1
  18. package/build/cover/index.js +13 -4
  19. package/build/cover/index.js.map +1 -1
  20. package/build/cover/variations.js +29 -0
  21. package/build/cover/variations.js.map +1 -0
  22. package/build/embed/edit.js +13 -14
  23. package/build/embed/edit.js.map +1 -1
  24. package/build/embed/edit.native.js +18 -14
  25. package/build/embed/edit.native.js.map +1 -1
  26. package/build/embed/util.js +39 -12
  27. package/build/embed/util.js.map +1 -1
  28. package/build/gallery/edit.js +9 -5
  29. package/build/gallery/edit.js.map +1 -1
  30. package/build/gallery/use-image-sizes.js +1 -1
  31. package/build/gallery/use-image-sizes.js.map +1 -1
  32. package/build/group/deprecated.js +4 -2
  33. package/build/group/deprecated.js.map +1 -1
  34. package/build/group/edit.js +22 -5
  35. package/build/group/edit.js.map +1 -1
  36. package/build/group/placeholder.js +11 -1
  37. package/build/group/placeholder.js.map +1 -1
  38. package/build/group/variations.js +23 -3
  39. package/build/group/variations.js.map +1 -1
  40. package/build/image/edit.js +1 -1
  41. package/build/image/edit.js.map +1 -1
  42. package/build/image/edit.native.js +1 -1
  43. package/build/image/edit.native.js.map +1 -1
  44. package/build/image/image.js +8 -6
  45. package/build/image/image.js.map +1 -1
  46. package/build/image/index.js +7 -2
  47. package/build/image/index.js.map +1 -1
  48. package/build/latest-posts/edit.js +11 -10
  49. package/build/latest-posts/edit.js.map +1 -1
  50. package/build/latest-posts/edit.native.js +3 -3
  51. package/build/latest-posts/edit.native.js.map +1 -1
  52. package/build/media-text/constants.js +17 -1
  53. package/build/media-text/constants.js.map +1 -1
  54. package/build/media-text/deprecated.js +228 -18
  55. package/build/media-text/deprecated.js.map +1 -1
  56. package/build/media-text/edit.js +10 -22
  57. package/build/media-text/edit.js.map +1 -1
  58. package/build/media-text/edit.native.js +6 -5
  59. package/build/media-text/edit.native.js.map +1 -1
  60. package/build/media-text/index.js +1 -1
  61. package/build/media-text/transforms.js +32 -44
  62. package/build/media-text/transforms.js.map +1 -1
  63. package/build/navigation/edit/index.js +55 -96
  64. package/build/navigation/edit/index.js.map +1 -1
  65. package/build/navigation/edit/menu-inspector-controls.js +2 -5
  66. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  67. package/build/navigation/edit/navigation-menu-selector.js +26 -22
  68. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  69. package/build/navigation/edit/unsaved-inner-blocks.js +14 -1
  70. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  71. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
  72. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  73. package/build/navigation/edit/use-create-navigation-menu.js +1 -1
  74. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  75. package/build/navigation/edit/use-navigation-notice.js +1 -1
  76. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  77. package/build/navigation/index.js +0 -1
  78. package/build/navigation/index.js.map +1 -1
  79. package/build/navigation-link/edit.js +0 -11
  80. package/build/navigation-link/edit.js.map +1 -1
  81. package/build/navigation-link/link-ui.js +0 -1
  82. package/build/navigation-link/link-ui.js.map +1 -1
  83. package/build/navigation-submenu/edit.js +1 -13
  84. package/build/navigation-submenu/edit.js.map +1 -1
  85. package/build/page-list/edit.js +59 -45
  86. package/build/page-list/edit.js.map +1 -1
  87. package/build/page-list-item/edit.js +3 -2
  88. package/build/page-list-item/edit.js.map +1 -1
  89. package/build/post-content/edit.js +6 -1
  90. package/build/post-content/edit.js.map +1 -1
  91. package/build/post-date/edit.js +2 -1
  92. package/build/post-date/edit.js.map +1 -1
  93. package/build/post-date/index.js +4 -1
  94. package/build/post-date/index.js.map +1 -1
  95. package/build/post-date/variations.js +28 -0
  96. package/build/post-date/variations.js.map +1 -0
  97. package/build/post-excerpt/edit.js +39 -10
  98. package/build/post-excerpt/edit.js.map +1 -1
  99. package/build/post-featured-image/dimension-controls.js +2 -8
  100. package/build/post-featured-image/dimension-controls.js.map +1 -1
  101. package/build/post-featured-image/edit.js +1 -1
  102. package/build/post-featured-image/edit.js.map +1 -1
  103. package/build/post-template/index.js +1 -1
  104. package/build/post-time-to-read/index.js +17 -1
  105. package/build/post-time-to-read/index.js.map +1 -1
  106. package/build/pullquote/deprecated.js +3 -3
  107. package/build/pullquote/deprecated.js.map +1 -1
  108. package/build/query/edit/query-placeholder.js +3 -2
  109. package/build/query/edit/query-placeholder.js.map +1 -1
  110. package/build/query/utils.js +26 -9
  111. package/build/query/utils.js.map +1 -1
  112. package/build/quote/index.js +1 -0
  113. package/build/quote/index.js.map +1 -1
  114. package/build/spacer/edit.js +16 -6
  115. package/build/spacer/edit.js.map +1 -1
  116. package/build/table/state.js +12 -4
  117. package/build/table/state.js.map +1 -1
  118. package/build/template-part/edit/import-controls.js +4 -24
  119. package/build/template-part/edit/import-controls.js.map +1 -1
  120. package/build/template-part/edit/utils/transformers.js +69 -19
  121. package/build/template-part/edit/utils/transformers.js.map +1 -1
  122. package/build/text-columns/edit.js +3 -7
  123. package/build/text-columns/edit.js.map +1 -1
  124. package/build/text-columns/save.js +11 -13
  125. package/build/text-columns/save.js.map +1 -1
  126. package/build-module/buttons/edit.native.js +1 -1
  127. package/build-module/buttons/edit.native.js.map +1 -1
  128. package/build-module/buttons/index.js +1 -0
  129. package/build-module/buttons/index.js.map +1 -1
  130. package/build-module/buttons/transforms.js +1 -0
  131. package/build-module/buttons/transforms.js.map +1 -1
  132. package/build-module/columns/edit.js +14 -9
  133. package/build-module/columns/edit.js.map +1 -1
  134. package/build-module/columns/edit.native.js +1 -1
  135. package/build-module/columns/edit.native.js.map +1 -1
  136. package/build-module/columns/index.js +4 -0
  137. package/build-module/columns/index.js.map +1 -1
  138. package/build-module/comments/edit/placeholder.js +9 -5
  139. package/build-module/comments/edit/placeholder.js.map +1 -1
  140. package/build-module/cover/edit/inspector-controls.js +2 -2
  141. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  142. package/build-module/cover/index.js +12 -4
  143. package/build-module/cover/index.js.map +1 -1
  144. package/build-module/cover/variations.js +19 -0
  145. package/build-module/cover/variations.js.map +1 -0
  146. package/build-module/embed/edit.js +14 -15
  147. package/build-module/embed/edit.js.map +1 -1
  148. package/build-module/embed/edit.native.js +19 -15
  149. package/build-module/embed/edit.native.js.map +1 -1
  150. package/build-module/embed/util.js +34 -10
  151. package/build-module/embed/util.js.map +1 -1
  152. package/build-module/gallery/edit.js +9 -5
  153. package/build-module/gallery/edit.js.map +1 -1
  154. package/build-module/gallery/use-image-sizes.js +1 -1
  155. package/build-module/gallery/use-image-sizes.js.map +1 -1
  156. package/build-module/group/deprecated.js +4 -2
  157. package/build-module/group/deprecated.js.map +1 -1
  158. package/build-module/group/edit.js +21 -5
  159. package/build-module/group/edit.js.map +1 -1
  160. package/build-module/group/placeholder.js +11 -1
  161. package/build-module/group/placeholder.js.map +1 -1
  162. package/build-module/group/variations.js +24 -1
  163. package/build-module/group/variations.js.map +1 -1
  164. package/build-module/image/edit.js +1 -1
  165. package/build-module/image/edit.js.map +1 -1
  166. package/build-module/image/edit.native.js +1 -1
  167. package/build-module/image/edit.native.js.map +1 -1
  168. package/build-module/image/image.js +8 -6
  169. package/build-module/image/image.js.map +1 -1
  170. package/build-module/image/index.js +7 -2
  171. package/build-module/image/index.js.map +1 -1
  172. package/build-module/latest-posts/edit.js +11 -9
  173. package/build-module/latest-posts/edit.js.map +1 -1
  174. package/build-module/latest-posts/edit.native.js +3 -3
  175. package/build-module/latest-posts/edit.native.js.map +1 -1
  176. package/build-module/media-text/constants.js +10 -0
  177. package/build-module/media-text/constants.js.map +1 -1
  178. package/build-module/media-text/deprecated.js +227 -18
  179. package/build-module/media-text/deprecated.js.map +1 -1
  180. package/build-module/media-text/edit.js +5 -17
  181. package/build-module/media-text/edit.js.map +1 -1
  182. package/build-module/media-text/edit.native.js +4 -3
  183. package/build-module/media-text/edit.native.js.map +1 -1
  184. package/build-module/media-text/index.js +1 -1
  185. package/build-module/media-text/transforms.js +32 -44
  186. package/build-module/media-text/transforms.js.map +1 -1
  187. package/build-module/navigation/edit/index.js +57 -98
  188. package/build-module/navigation/edit/index.js.map +1 -1
  189. package/build-module/navigation/edit/menu-inspector-controls.js +2 -5
  190. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  191. package/build-module/navigation/edit/navigation-menu-selector.js +25 -22
  192. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  193. package/build-module/navigation/edit/unsaved-inner-blocks.js +14 -1
  194. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  195. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
  196. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  197. package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
  198. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  199. package/build-module/navigation/edit/use-navigation-notice.js +1 -1
  200. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  201. package/build-module/navigation/index.js +0 -1
  202. package/build-module/navigation/index.js.map +1 -1
  203. package/build-module/navigation-link/edit.js +0 -11
  204. package/build-module/navigation-link/edit.js.map +1 -1
  205. package/build-module/navigation-link/link-ui.js +0 -1
  206. package/build-module/navigation-link/link-ui.js.map +1 -1
  207. package/build-module/navigation-submenu/edit.js +1 -13
  208. package/build-module/navigation-submenu/edit.js.map +1 -1
  209. package/build-module/page-list/edit.js +61 -47
  210. package/build-module/page-list/edit.js.map +1 -1
  211. package/build-module/page-list-item/edit.js +3 -2
  212. package/build-module/page-list-item/edit.js.map +1 -1
  213. package/build-module/post-content/edit.js +6 -1
  214. package/build-module/post-content/edit.js.map +1 -1
  215. package/build-module/post-date/edit.js +2 -1
  216. package/build-module/post-date/edit.js.map +1 -1
  217. package/build-module/post-date/index.js +3 -1
  218. package/build-module/post-date/index.js.map +1 -1
  219. package/build-module/post-date/variations.js +18 -0
  220. package/build-module/post-date/variations.js.map +1 -0
  221. package/build-module/post-excerpt/edit.js +38 -11
  222. package/build-module/post-excerpt/edit.js.map +1 -1
  223. package/build-module/post-featured-image/dimension-controls.js +2 -8
  224. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  225. package/build-module/post-featured-image/edit.js +1 -1
  226. package/build-module/post-featured-image/edit.js.map +1 -1
  227. package/build-module/post-template/index.js +1 -1
  228. package/build-module/post-time-to-read/index.js +17 -1
  229. package/build-module/post-time-to-read/index.js.map +1 -1
  230. package/build-module/pullquote/deprecated.js +3 -2
  231. package/build-module/pullquote/deprecated.js.map +1 -1
  232. package/build-module/query/edit/query-placeholder.js +4 -3
  233. package/build-module/query/edit/query-placeholder.js.map +1 -1
  234. package/build-module/query/utils.js +21 -6
  235. package/build-module/query/utils.js.map +1 -1
  236. package/build-module/quote/index.js +1 -0
  237. package/build-module/quote/index.js.map +1 -1
  238. package/build-module/spacer/edit.js +16 -6
  239. package/build-module/spacer/edit.js.map +1 -1
  240. package/build-module/table/state.js +13 -5
  241. package/build-module/table/state.js.map +1 -1
  242. package/build-module/template-part/edit/import-controls.js +4 -23
  243. package/build-module/template-part/edit/import-controls.js.map +1 -1
  244. package/build-module/template-part/edit/utils/transformers.js +69 -20
  245. package/build-module/template-part/edit/utils/transformers.js.map +1 -1
  246. package/build-module/text-columns/edit.js +3 -6
  247. package/build-module/text-columns/edit.js.map +1 -1
  248. package/build-module/text-columns/save.js +11 -12
  249. package/build-module/text-columns/save.js.map +1 -1
  250. package/build-style/categories/editor-rtl.css +5 -0
  251. package/build-style/categories/editor.css +5 -0
  252. package/build-style/categories/style-rtl.css +4 -0
  253. package/build-style/categories/style.css +4 -0
  254. package/build-style/cover/style-rtl.css +11 -5
  255. package/build-style/cover/style.css +11 -5
  256. package/build-style/editor-rtl.css +11 -1
  257. package/build-style/editor.css +11 -1
  258. package/build-style/navigation/editor-rtl.css +1 -1
  259. package/build-style/navigation/editor.css +1 -1
  260. package/build-style/navigation/style-rtl.css +2 -0
  261. package/build-style/navigation/style.css +2 -0
  262. package/build-style/page-list/editor-rtl.css +4 -0
  263. package/build-style/page-list/editor.css +4 -0
  264. package/build-style/post-featured-image/editor-rtl.css +1 -0
  265. package/build-style/post-featured-image/editor.css +1 -0
  266. package/build-style/post-featured-image/style-rtl.css +1 -0
  267. package/build-style/post-featured-image/style.css +1 -0
  268. package/build-style/post-template/style-rtl.css +1 -1
  269. package/build-style/post-template/style.css +1 -1
  270. package/build-style/post-time-to-read/style-rtl.css +91 -0
  271. package/build-style/post-time-to-read/style.css +91 -0
  272. package/build-style/search/style-rtl.css +8 -7
  273. package/build-style/search/style.css +8 -7
  274. package/build-style/style-rtl.css +31 -13
  275. package/build-style/style.css +31 -13
  276. package/package.json +31 -31
  277. package/src/audio/test/__snapshots__/edit.native.js.snap +44 -4
  278. package/src/audio/test/__snapshots__/transforms.native.js.snap +25 -0
  279. package/src/audio/test/transforms.native.js +42 -0
  280. package/src/block/test/__snapshots__/transforms.native.js.snap +15 -0
  281. package/src/block/test/transforms.native.js +40 -0
  282. package/src/buttons/block.json +1 -0
  283. package/src/buttons/edit.native.js +1 -1
  284. package/src/buttons/test/__snapshots__/transforms.native.js.snap +31 -0
  285. package/src/buttons/test/transforms.native.js +48 -0
  286. package/src/categories/editor.scss +5 -0
  287. package/src/categories/style.scss +4 -0
  288. package/src/columns/block.json +4 -0
  289. package/src/columns/edit.js +30 -18
  290. package/src/columns/edit.native.js +1 -1
  291. package/src/columns/test/__snapshots__/transforms.native.js.snap +61 -0
  292. package/src/columns/test/transforms.native.js +91 -0
  293. package/src/comment-template/index.php +1 -2
  294. package/src/comments/edit/placeholder.js +16 -4
  295. package/src/comments/index.php +1 -0
  296. package/src/cover/block.json +9 -3
  297. package/src/cover/edit/inspector-controls.js +4 -5
  298. package/src/cover/index.js +2 -0
  299. package/src/cover/style.scss +16 -7
  300. package/src/cover/test/__snapshots__/transforms.native.js.snap +73 -0
  301. package/src/cover/test/edit.js +324 -0
  302. package/src/cover/test/transforms.native.js +112 -0
  303. package/src/cover/variations.js +20 -0
  304. package/src/embed/edit.js +16 -12
  305. package/src/embed/edit.native.js +28 -18
  306. package/src/embed/test/__snapshots__/transforms.native.js.snap +23 -0
  307. package/src/embed/test/index.js +12 -0
  308. package/src/embed/test/transforms.native.js +44 -0
  309. package/src/embed/util.js +29 -8
  310. package/src/file/test/__snapshots__/edit.native.js.snap +18 -2
  311. package/src/file/test/__snapshots__/transforms.native.js.snap +19 -0
  312. package/src/file/test/transforms.native.js +42 -0
  313. package/src/freeform/test/__snapshots__/transforms.native.js.snap +19 -0
  314. package/src/freeform/test/transforms.native.js +39 -0
  315. package/src/gallery/edit.js +8 -2
  316. package/src/gallery/test/__snapshots__/transforms.native.js.snap +53 -0
  317. package/src/gallery/test/transforms.native.js +52 -0
  318. package/src/gallery/use-image-sizes.js +1 -1
  319. package/src/group/deprecated.js +4 -2
  320. package/src/group/edit.js +27 -9
  321. package/src/group/placeholder.js +13 -1
  322. package/src/group/test/__snapshots__/transforms.native.js.snap +35 -0
  323. package/src/group/test/transforms.native.js +75 -0
  324. package/src/group/variations.js +14 -1
  325. package/src/heading/test/__snapshots__/transforms.native.js.snap +47 -0
  326. package/src/heading/test/transforms.native.js +46 -0
  327. package/src/home-link/index.php +2 -2
  328. package/src/image/block.json +7 -2
  329. package/src/image/edit.js +1 -1
  330. package/src/image/edit.native.js +1 -1
  331. package/src/image/image.js +15 -7
  332. package/src/image/index.php +7 -2
  333. package/src/image/test/__snapshots__/transforms.native.js.snap +49 -0
  334. package/src/image/test/transforms.native.js +48 -0
  335. package/src/latest-comments/style.scss +1 -1
  336. package/src/latest-posts/edit.js +14 -16
  337. package/src/latest-posts/edit.native.js +3 -3
  338. package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +15 -0
  339. package/src/latest-posts/test/transforms.native.js +61 -0
  340. package/src/list/test/__snapshots__/transforms.native.js.snap +85 -0
  341. package/src/list/test/transforms.native.js +56 -0
  342. package/src/media-text/block.json +1 -1
  343. package/src/media-text/constants.js +16 -0
  344. package/src/media-text/deprecated.js +235 -3
  345. package/src/media-text/edit.js +15 -24
  346. package/src/media-text/edit.native.js +3 -9
  347. package/src/media-text/test/__snapshots__/transforms.native.js.snap +73 -0
  348. package/src/media-text/test/transforms.native.js +112 -0
  349. package/src/media-text/transforms.js +24 -51
  350. package/src/missing/test/__snapshots__/edit.native.js.snap +20 -2
  351. package/src/more/test/__snapshots__/transforms.native.js.snap +19 -0
  352. package/src/more/test/transforms.native.js +42 -0
  353. package/src/navigation/block.json +0 -1
  354. package/src/navigation/edit/index.js +99 -115
  355. package/src/navigation/edit/menu-inspector-controls.js +2 -7
  356. package/src/navigation/edit/navigation-menu-selector.js +41 -25
  357. package/src/navigation/edit/unsaved-inner-blocks.js +46 -33
  358. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +82 -83
  359. package/src/navigation/edit/use-create-navigation-menu.js +1 -1
  360. package/src/navigation/edit/use-navigation-notice.js +1 -1
  361. package/src/navigation/editor.scss +23 -20
  362. package/src/navigation/index.php +18 -39
  363. package/src/navigation/style.scss +6 -4
  364. package/src/navigation-link/edit.js +0 -9
  365. package/src/navigation-link/index.php +7 -9
  366. package/src/navigation-link/link-ui.js +0 -1
  367. package/src/navigation-submenu/edit.js +0 -10
  368. package/src/navigation-submenu/index.php +45 -74
  369. package/src/nextpage/test/__snapshots__/transforms.native.js.snap +19 -0
  370. package/src/nextpage/test/transforms.native.js +42 -0
  371. package/src/page-list/edit.js +78 -44
  372. package/src/page-list/editor.scss +6 -0
  373. package/src/page-list-item/edit.js +2 -3
  374. package/src/paragraph/test/__snapshots__/transforms.native.js.snap +59 -0
  375. package/src/paragraph/test/transforms.native.js +50 -0
  376. package/src/post-author/index.php +1 -1
  377. package/src/post-content/edit.js +5 -1
  378. package/src/post-date/edit.js +4 -1
  379. package/src/post-date/index.js +2 -0
  380. package/src/post-date/variations.js +20 -0
  381. package/src/post-excerpt/edit.js +48 -16
  382. package/src/post-excerpt/index.php +1 -2
  383. package/src/post-featured-image/dimension-controls.js +2 -10
  384. package/src/post-featured-image/edit.js +1 -1
  385. package/src/post-featured-image/editor.scss +1 -0
  386. package/src/post-featured-image/style.scss +1 -0
  387. package/src/post-template/block.json +1 -1
  388. package/src/post-template/style.scss +1 -1
  389. package/src/post-time-to-read/block.json +17 -1
  390. package/src/post-time-to-read/style.scss +4 -0
  391. package/src/preformatted/test/__snapshots__/transforms.native.js.snap +31 -0
  392. package/src/preformatted/test/transforms.native.js +42 -0
  393. package/src/pullquote/deprecated.js +2 -6
  394. package/src/pullquote/test/__snapshots__/transforms.native.js.snap +47 -0
  395. package/src/pullquote/test/transforms.native.js +46 -0
  396. package/src/query/edit/query-placeholder.js +10 -5
  397. package/src/query/test/utils.js +33 -1
  398. package/src/query/utils.js +19 -6
  399. package/src/query-title/index.php +2 -5
  400. package/src/quote/block.json +1 -0
  401. package/src/quote/test/__snapshots__/transforms.native.js.snap +39 -0
  402. package/src/quote/test/transforms.native.js +67 -0
  403. package/src/search/style.scss +16 -12
  404. package/src/search/test/__snapshots__/edit.native.js.snap +11 -1
  405. package/src/search/test/__snapshots__/transforms.native.js.snap +15 -0
  406. package/src/search/test/transforms.native.js +40 -0
  407. package/src/separator/test/__snapshots__/transforms.native.js.snap +19 -0
  408. package/src/separator/test/transforms.native.js +42 -0
  409. package/src/shortcode/test/__snapshots__/transforms.native.js.snap +19 -0
  410. package/src/shortcode/test/transforms.native.js +42 -0
  411. package/src/social-links/test/__snapshots__/transforms.native.js.snap +31 -0
  412. package/src/social-links/test/transforms.native.js +53 -0
  413. package/src/spacer/edit.js +18 -5
  414. package/src/spacer/test/__snapshots__/transforms.native.js.snap +19 -0
  415. package/src/spacer/test/transforms.native.js +42 -0
  416. package/src/style.scss +1 -0
  417. package/src/table/state.js +8 -17
  418. package/src/template-part/edit/import-controls.js +2 -29
  419. package/src/template-part/edit/utils/transformers.js +96 -19
  420. package/src/text-columns/edit.js +1 -6
  421. package/src/text-columns/save.js +1 -6
  422. package/src/verse/test/__snapshots__/transforms.native.js.snap +25 -0
  423. package/src/verse/test/transforms.native.js +42 -0
  424. package/src/video/test/__snapshots__/transforms.native.js.snap +41 -0
  425. package/src/video/test/transforms.native.js +48 -0
  426. package/tsconfig.tsbuildinfo +1 -1
  427. package/src/cover/test/block-controls.js +0 -62
@@ -0,0 +1,44 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'Embed';
13
+ const initialHtml = `
14
+ <!-- wp:embed {"url":"https://twitter.com/notnownikki","type":"rich","providerNameSlug":"twitter","responsive":true} -->
15
+ <figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
16
+ https://twitter.com/notnownikki
17
+ </div></figure>
18
+ <!-- /wp:embed -->`;
19
+
20
+ const transformsWithInnerBlocks = [ 'Columns', 'Group' ];
21
+ const blockTransforms = [ ...transformsWithInnerBlocks ];
22
+
23
+ setupCoreBlocks();
24
+
25
+ describe( `${ block } block transforms`, () => {
26
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
27
+ const screen = await initializeEditor( { initialHtml } );
28
+ const newBlock = await transformBlock( screen, block, blockTransform, {
29
+ hasInnerBlocks:
30
+ transformsWithInnerBlocks.includes( blockTransform ),
31
+ } );
32
+ expect( newBlock ).toBeVisible();
33
+ expect( getEditorHtml() ).toMatchSnapshot();
34
+ } );
35
+
36
+ it( 'matches expected transformation options', async () => {
37
+ const screen = await initializeEditor( { initialHtml } );
38
+ const transformOptions = await getBlockTransformOptions(
39
+ screen,
40
+ block
41
+ );
42
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
43
+ } );
44
+ } );
package/src/embed/util.js CHANGED
@@ -152,6 +152,21 @@ export const createUpgradedEmbedBlock = (
152
152
  } );
153
153
  };
154
154
 
155
+ /**
156
+ * Determine if the block already has an aspect ratio class applied.
157
+ *
158
+ * @param {string} existingClassNames Existing block classes.
159
+ * @return {boolean} True or false if the classnames contain an aspect ratio class.
160
+ */
161
+ export const hasAspectRatioClass = ( existingClassNames ) => {
162
+ if ( ! existingClassNames ) {
163
+ return false;
164
+ }
165
+ return ASPECT_RATIOS.some( ( { className } ) =>
166
+ existingClassNames.includes( className )
167
+ );
168
+ };
169
+
155
170
  /**
156
171
  * Removes all previously set aspect ratio related classes and return the rest
157
172
  * existing class names.
@@ -283,6 +298,13 @@ export const getAttributesFromPreview = memoize(
283
298
  attributes.providerNameSlug = providerNameSlug;
284
299
  }
285
300
 
301
+ // Aspect ratio classes are removed when the embed URL is updated.
302
+ // If the embed already has an aspect ratio class, that means the URL has not changed.
303
+ // Which also means no need to regenerate it with getClassNames.
304
+ if ( hasAspectRatioClass( currentClassNames ) ) {
305
+ return attributes;
306
+ }
307
+
286
308
  attributes.className = getClassNames(
287
309
  html,
288
310
  currentClassNames,
@@ -296,27 +318,26 @@ export const getAttributesFromPreview = memoize(
296
318
  /**
297
319
  * Returns the attributes derived from the preview, merged with the current attributes.
298
320
  *
299
- * @param {Object} currentAttributes The current attributes of the block.
300
- * @param {Object} preview The preview data.
301
- * @param {string} title The block's title, e.g. Twitter.
302
- * @param {boolean} isResponsive Boolean indicating if the block supports responsive content.
303
- * @param {boolean} ignorePreviousClassName Determines if the previous className attribute should be ignored when merging.
321
+ * @param {Object} currentAttributes The current attributes of the block.
322
+ * @param {Object} preview The preview data.
323
+ * @param {string} title The block's title, e.g. Twitter.
324
+ * @param {boolean} isResponsive Boolean indicating if the block supports responsive content.
304
325
  * @return {Object} Merged attributes.
305
326
  */
306
327
  export const getMergedAttributesWithPreview = (
307
328
  currentAttributes,
308
329
  preview,
309
330
  title,
310
- isResponsive,
311
- ignorePreviousClassName = false
331
+ isResponsive
312
332
  ) => {
313
333
  const { allowResponsive, className } = currentAttributes;
334
+
314
335
  return {
315
336
  ...currentAttributes,
316
337
  ...getAttributesFromPreview(
317
338
  preview,
318
339
  title,
319
- ignorePreviousClassName ? undefined : className,
340
+ className,
320
341
  isResponsive,
321
342
  allowResponsive
322
343
  ),
@@ -115,7 +115,15 @@ exports[`File block renders file error state without crashing 1`] = `
115
115
  />
116
116
  </View>
117
117
  <View>
118
- Svg
118
+ <Svg
119
+ height={24}
120
+ style={{}}
121
+ viewBox="-2 -2 24 24"
122
+ width={24}
123
+ xmlns="http://www.w3.org/2000/svg"
124
+ >
125
+ Path
126
+ </Svg>
119
127
  <TextInput
120
128
  editable={false}
121
129
  fontFamily="serif"
@@ -464,7 +472,15 @@ exports[`File block renders placeholder without crashing 1`] = `
464
472
  <View
465
473
  style={{}}
466
474
  >
467
- Svg
475
+ <Svg
476
+ height={24}
477
+ style={{}}
478
+ viewBox="0 0 24 24"
479
+ width={24}
480
+ xmlns="http://www.w3.org/2000/svg"
481
+ >
482
+ Path
483
+ </Svg>
468
484
  </View>
469
485
  </View>
470
486
  <Text>
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`File block transformations to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:file {"id":3,"href":"https://wordpress.org/latest.zip"} -->
7
+ <div class="wp-block-file"><a href="https://wordpress.org/latest.zip">WordPress.zip</a><a href="https://wordpress.org/latest.zip" class="wp-block-file__button wp-element-button" download>Download</a></div>
8
+ <!-- /wp:file --></div>
9
+ <!-- /wp:column --></div>
10
+ <!-- /wp:columns -->"
11
+ `;
12
+
13
+ exports[`File block transformations to Group block 1`] = `
14
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
15
+ <div class="wp-block-group"><!-- wp:file {"id":3,"href":"https://wordpress.org/latest.zip"} -->
16
+ <div class="wp-block-file"><a href="https://wordpress.org/latest.zip">WordPress.zip</a><a href="https://wordpress.org/latest.zip" class="wp-block-file__button wp-element-button" download>Download</a></div>
17
+ <!-- /wp:file --></div>
18
+ <!-- /wp:group -->"
19
+ `;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'File';
13
+ const initialHtml = `
14
+ <!-- wp:file {"id":3,"href":"https://wordpress.org/latest.zip"} -->
15
+ <div class="wp-block-file"><a href="https://wordpress.org/latest.zip">WordPress.zip</a><a href="https://wordpress.org/latest.zip" class="wp-block-file__button wp-element-button" download>Download</a></div>
16
+ <!-- /wp:file -->`;
17
+
18
+ const tranformsWithInnerBlocks = [ 'Columns', 'Group' ];
19
+ const blockTransforms = [ ...tranformsWithInnerBlocks ];
20
+
21
+ setupCoreBlocks();
22
+
23
+ describe( `${ block } block transformations`, () => {
24
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
25
+ const screen = await initializeEditor( { initialHtml } );
26
+ const newBlock = await transformBlock( screen, block, blockTransform, {
27
+ isMediaBlock: false,
28
+ hasInnerBlocks: tranformsWithInnerBlocks.includes( blockTransform ),
29
+ } );
30
+ expect( newBlock ).toBeVisible();
31
+ expect( getEditorHtml() ).toMatchSnapshot();
32
+ } );
33
+
34
+ it( 'matches expected transformation options', async () => {
35
+ const screen = await initializeEditor( { initialHtml } );
36
+ const transformOptions = await getBlockTransformOptions(
37
+ screen,
38
+ block
39
+ );
40
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
41
+ } );
42
+ } );
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Classic block transforms to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:freeform -->
7
+ <p>Classic block</p>
8
+ <!-- /wp:freeform --></div>
9
+ <!-- /wp:column --></div>
10
+ <!-- /wp:columns -->"
11
+ `;
12
+
13
+ exports[`Classic block transforms to Group block 1`] = `
14
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
15
+ <div class="wp-block-group"><!-- wp:freeform -->
16
+ <p>Classic block</p>
17
+ <!-- /wp:freeform --></div>
18
+ <!-- /wp:group -->"
19
+ `;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'Classic';
13
+ const initialHtml = `Classic block`;
14
+
15
+ const transformsWithInnerBlocks = [ 'Columns', 'Group' ];
16
+ const blockTransforms = [ ...transformsWithInnerBlocks ];
17
+
18
+ setupCoreBlocks();
19
+
20
+ describe( `${ block } block transforms`, () => {
21
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
22
+ const screen = await initializeEditor( { initialHtml } );
23
+ const newBlock = await transformBlock( screen, block, blockTransform, {
24
+ hasInnerBlocks:
25
+ transformsWithInnerBlocks.includes( blockTransform ),
26
+ } );
27
+ expect( newBlock ).toBeVisible();
28
+ expect( getEditorHtml() ).toMatchSnapshot();
29
+ } );
30
+
31
+ it( 'matches expected transformation options', async () => {
32
+ const screen = await initializeEditor( { initialHtml } );
33
+ const transformOptions = await getBlockTransformOptions(
34
+ screen,
35
+ block
36
+ );
37
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
38
+ } );
39
+ } );
@@ -562,6 +562,7 @@ function GalleryEdit( props ) {
562
562
  max={ Math.min( MAX_COLUMNS, images.length ) }
563
563
  { ...MOBILE_CONTROL_PROPS_RANGE_CONTROL }
564
564
  required
565
+ size="__unstable-large"
565
566
  />
566
567
  ) }
567
568
  <ToggleControl
@@ -578,6 +579,7 @@ function GalleryEdit( props ) {
578
579
  onChange={ setLinkTo }
579
580
  options={ linkOptions }
580
581
  hideCancelButton={ true }
582
+ size="__unstable-large"
581
583
  />
582
584
  { hasLinkTo && (
583
585
  <ToggleControl
@@ -590,17 +592,21 @@ function GalleryEdit( props ) {
590
592
  { imageSizeOptions?.length > 0 && (
591
593
  <SelectControl
592
594
  __nextHasNoMarginBottom
593
- label={ __( 'Image size' ) }
595
+ label={ __( 'Resolution' ) }
596
+ help={ __(
597
+ 'Select the size of the source images.'
598
+ ) }
594
599
  value={ sizeSlug }
595
600
  options={ imageSizeOptions }
596
601
  onChange={ updateImagesSize }
597
602
  hideCancelButton={ true }
603
+ size="__unstable-large"
598
604
  />
599
605
  ) }
600
606
  { Platform.isWeb && ! imageSizeOptions && hasImageIds && (
601
607
  <BaseControl className={ 'gallery-image-sizes' }>
602
608
  <BaseControl.VisualLabel>
603
- { __( 'Image size' ) }
609
+ { __( 'Resolution' ) }
604
610
  </BaseControl.VisualLabel>
605
611
  <View className={ 'gallery-image-sizes__loading' }>
606
612
  <Spinner />
@@ -0,0 +1,53 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Gallery block transformations to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:gallery {"columns":8,"linkTo":"none","className":"alignfull"} -->
7
+ <figure class="wp-block-gallery has-nested-images columns-8 is-cropped alignfull"><!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
8
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon.png" alt=""/><figcaption class="wp-element-caption">Paragraph</figcaption></figure>
9
+ <!-- /wp:image -->
10
+
11
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
12
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Heading.png" alt=""/><figcaption class="wp-element-caption">Heading</figcaption></figure>
13
+ <!-- /wp:image -->
14
+
15
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
16
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Subheading.png" alt=""/><figcaption class="wp-element-caption">Subheading</figcaption></figure>
17
+ <!-- /wp:image --></figure>
18
+ <!-- /wp:gallery --></div>
19
+ <!-- /wp:column --></div>
20
+ <!-- /wp:columns -->"
21
+ `;
22
+
23
+ exports[`Gallery block transformations to Group block 1`] = `
24
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
25
+ <div class="wp-block-group"><!-- wp:gallery {"columns":8,"linkTo":"none","className":"alignfull"} -->
26
+ <figure class="wp-block-gallery has-nested-images columns-8 is-cropped alignfull"><!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
27
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon.png" alt=""/><figcaption class="wp-element-caption">Paragraph</figcaption></figure>
28
+ <!-- /wp:image -->
29
+
30
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
31
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Heading.png" alt=""/><figcaption class="wp-element-caption">Heading</figcaption></figure>
32
+ <!-- /wp:image -->
33
+
34
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
35
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Subheading.png" alt=""/><figcaption class="wp-element-caption">Subheading</figcaption></figure>
36
+ <!-- /wp:image --></figure>
37
+ <!-- /wp:gallery --></div>
38
+ <!-- /wp:group -->"
39
+ `;
40
+
41
+ exports[`Gallery block transformations to Image block 1`] = `
42
+ "<!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
43
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon.png" alt=""/><figcaption class="wp-element-caption">Paragraph</figcaption></figure>
44
+ <!-- /wp:image -->
45
+
46
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
47
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Heading.png" alt=""/><figcaption class="wp-element-caption">Heading</figcaption></figure>
48
+ <!-- /wp:image -->
49
+
50
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
51
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Subheading.png" alt=""/><figcaption class="wp-element-caption">Subheading</figcaption></figure>
52
+ <!-- /wp:image -->"
53
+ `;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'Gallery';
13
+ const initialHtml = `
14
+ <!-- wp:gallery {"columns":8,"linkTo":"none","className":"alignfull"} -->
15
+ <figure class="wp-block-gallery has-nested-images columns-8 is-cropped alignfull"><!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
16
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon.png" alt=""/><figcaption class="wp-element-caption">Paragraph</figcaption></figure>
17
+ <!-- /wp:image -->
18
+
19
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
20
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Heading.png" alt=""/><figcaption class="wp-element-caption">Heading</figcaption></figure>
21
+ <!-- /wp:image -->
22
+
23
+ <!-- wp:image {"sizeSlug":"large","linkDestination":"none"} -->
24
+ <figure class="wp-block-image size-large"><img src="https://wordpress.org/gutenberg/files/2018/07/Block-Icon-Subheading.png" alt=""/><figcaption class="wp-element-caption">Subheading</figcaption></figure>
25
+ <!-- /wp:image --></figure>
26
+ <!-- /wp:gallery -->`;
27
+
28
+ const tranformsWithInnerBlocks = [ 'Columns', 'Group' ];
29
+ const blockTransforms = [ 'Image', ...tranformsWithInnerBlocks ];
30
+
31
+ setupCoreBlocks();
32
+
33
+ describe( `${ block } block transformations`, () => {
34
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
35
+ const screen = await initializeEditor( { initialHtml } );
36
+ const newBlock = await transformBlock( screen, block, blockTransform, {
37
+ isMediaBlock: true,
38
+ hasInnerBlocks: tranformsWithInnerBlocks.includes( blockTransform ),
39
+ } );
40
+ expect( newBlock ).toBeVisible();
41
+ expect( getEditorHtml() ).toMatchSnapshot();
42
+ } );
43
+
44
+ it( 'matches expected transformation options', async () => {
45
+ const screen = await initializeEditor( { initialHtml } );
46
+ const transformOptions = await getBlockTransformOptions(
47
+ screen,
48
+ block
49
+ );
50
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
51
+ } );
52
+ } );
@@ -5,7 +5,7 @@ import { useMemo } from '@wordpress/element';
5
5
 
6
6
  /**
7
7
  * Calculates the image sizes that are avaible for the current gallery images in order to
8
- * populate the 'Image size' selector.
8
+ * populate the 'Resolution' selector.
9
9
  *
10
10
  * @param {Array} images Basic image block data taken from current gallery innerBlock
11
11
  * @param {boolean} isSelected Is the block currently selected in the editor.
@@ -50,7 +50,8 @@ const deprecated = [
50
50
  default: 'div',
51
51
  },
52
52
  templateLock: {
53
- type: 'string',
53
+ type: [ 'string', 'boolean' ],
54
+ enum: [ 'all', 'insert', false ],
54
55
  },
55
56
  },
56
57
  supports: {
@@ -135,7 +136,8 @@ const deprecated = [
135
136
  default: 'div',
136
137
  },
137
138
  templateLock: {
138
- type: 'string',
139
+ type: [ 'string', 'boolean' ],
140
+ enum: [ 'all', 'insert', false ],
139
141
  },
140
142
  },
141
143
  supports: {
package/src/group/edit.js CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  } from '@wordpress/block-editor';
13
13
  import { SelectControl } from '@wordpress/components';
14
14
  import { __ } from '@wordpress/i18n';
15
+ import { View } from '@wordpress/primitives';
15
16
 
16
17
  /**
17
18
  * Internal dependencies
@@ -97,7 +98,8 @@ function GroupEdit( {
97
98
  ? { ...defaultLayout, ...layout, type: 'default' }
98
99
  : { ...defaultLayout, ...layout };
99
100
  const { type = 'default' } = usedLayout;
100
- const layoutSupportEnabled = themeSupportsLayout || type === 'flex';
101
+ const layoutSupportEnabled =
102
+ themeSupportsLayout || type === 'flex' || type === 'grid';
101
103
 
102
104
  // Hooks.
103
105
  const blockProps = useBlockProps( {
@@ -108,15 +110,28 @@ function GroupEdit( {
108
110
  usedLayoutType: usedLayout?.type,
109
111
  hasInnerBlocks,
110
112
  } );
113
+
114
+ // Default to the regular appender being rendered.
115
+ let renderAppender;
116
+ if ( showPlaceholder ) {
117
+ // In the placeholder state, ensure the appender is not rendered.
118
+ // This is needed because `...innerBlocksProps` is used in the placeholder
119
+ // state so that blocks can dragged onto the placeholder area
120
+ // from both the list view and in the editor canvas.
121
+ renderAppender = false;
122
+ } else if ( ! hasInnerBlocks ) {
123
+ // When there is no placeholder, but the block is also empty,
124
+ // use the larger button appender.
125
+ renderAppender = InnerBlocks.ButtonBlockAppender;
126
+ }
127
+
111
128
  const innerBlocksProps = useInnerBlocksProps(
112
129
  layoutSupportEnabled
113
130
  ? blockProps
114
131
  : { className: 'wp-block-group__inner-container' },
115
132
  {
116
133
  templateLock,
117
- renderAppender: hasInnerBlocks
118
- ? undefined
119
- : InnerBlocks.ButtonBlockAppender,
134
+ renderAppender,
120
135
  __unstableDisableLayoutClassNames: ! layoutSupportEnabled,
121
136
  }
122
137
  );
@@ -138,11 +153,14 @@ function GroupEdit( {
138
153
  }
139
154
  />
140
155
  { showPlaceholder && (
141
- <GroupPlaceHolder
142
- clientId={ clientId }
143
- name={ name }
144
- onSelect={ selectVariation }
145
- />
156
+ <View { ...innerBlocksProps }>
157
+ { innerBlocksProps.children }
158
+ <GroupPlaceHolder
159
+ clientId={ clientId }
160
+ name={ name }
161
+ onSelect={ selectVariation }
162
+ />
163
+ </View>
146
164
  ) }
147
165
  { layoutSupportEnabled && ! showPlaceholder && (
148
166
  <TagName { ...innerBlocksProps } />
@@ -47,6 +47,17 @@ const getGroupPlaceholderIcons = ( name = 'group' ) => {
47
47
  <Path d="M42 0H2C.9 0 0 .9 0 2v12.5c0 .6.4 1 1 1h42c.6 0 1-.4 1-1V2c0-1.1-.9-2-2-2zm1 16.5H1c-.6 0-1 .4-1 1V30c0 1.1.9 2 2 2h40c1.1 0 2-.9 2-2V17.5c0-.6-.4-1-1-1z" />
48
48
  </SVG>
49
49
  ),
50
+ 'group-grid': (
51
+ <SVG
52
+ xmlns="http://www.w3.org/2000/svg"
53
+ width="44"
54
+ height="32"
55
+ viewBox="0 0 44 32"
56
+ >
57
+ <Path d="m20.30137,-0.00025l-18.9728,0c-0.86524,0.07234 -1.41711,0.79149 -1.41711,1.89149l0,12.64468c0,0.6 0.73401,0.96383 1.0304,0.96383l19.67469,0.03617c0.29639,0 1.0304,-0.4 1.0304,-1l-0.03576,-12.7532c0,-1.1 -0.76644,-1.78297 -1.30983,-1.78297zm0.52975,16.60851l-19.99654,-0.03617c-0.29639,0 -0.92312,0.36383 -0.92312,0.96383l-0.03576,12.68085c0,1.1 0.8022,1.81915 1.34559,1.81915l19.00857,0c0.54339,0 1.45287,-0.71915 1.45287,-1.81915l0,-12.53617c0,-0.6 -0.5552,-1.07234 -0.8516,-1.07234z" />
58
+ <Path d="m42.73056,-0.03617l-18.59217,0c-0.84788,0.07234 -1.38868,0.79149 -1.38868,1.89149l0,12.64468c0,0.6 0.71928,0.96383 1.00973,0.96383l19.27997,0.03617c0.29045,0 1.00973,-0.4 1.00973,-1l-0.03504,-12.7532c0,-1.1 -0.75106,-1.78297 -1.28355,-1.78297zm0.51912,16.60851l-19.59537,-0.03617c-0.29045,0 -0.9046,0.36383 -0.9046,0.96383l-0.03504,12.68085c0,1.1 0.78611,1.81915 1.31859,1.81915l18.62721,0c0.53249,0 1.42372,-0.71915 1.42372,-1.81915l0,-12.53617c0,-0.6 -0.54407,-1.07234 -0.83451,-1.07234z" />
59
+ </SVG>
60
+ ),
50
61
  };
51
62
  return icons?.[ name ];
52
63
  };
@@ -85,7 +96,8 @@ export function useShouldShowPlaceHolder( {
85
96
  ! fontSize &&
86
97
  ! textColor &&
87
98
  ! style &&
88
- usedLayoutType !== 'flex'
99
+ usedLayoutType !== 'flex' &&
100
+ usedLayoutType !== 'grid'
89
101
  );
90
102
 
91
103
  useEffect( () => {
@@ -0,0 +1,35 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Group block transforms to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:group -->
7
+ <div id="this-is-another-anchor" class="wp-block-group"><!-- wp:paragraph -->
8
+ <p>One.</p>
9
+ <!-- /wp:paragraph -->
10
+
11
+ <!-- wp:paragraph -->
12
+ <p>Two</p>
13
+ <!-- /wp:paragraph -->
14
+
15
+ <!-- wp:paragraph -->
16
+ <p>Three.</p>
17
+ <!-- /wp:paragraph --></div>
18
+ <!-- /wp:group --></div>
19
+ <!-- /wp:column --></div>
20
+ <!-- /wp:columns -->"
21
+ `;
22
+
23
+ exports[`Group block transforms unwraps content 1`] = `
24
+ "<!-- wp:paragraph -->
25
+ <p>One.</p>
26
+ <!-- /wp:paragraph -->
27
+
28
+ <!-- wp:paragraph -->
29
+ <p>Two</p>
30
+ <!-- /wp:paragraph -->
31
+
32
+ <!-- wp:paragraph -->
33
+ <p>Three.</p>
34
+ <!-- /wp:paragraph -->"
35
+ `;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlock,
10
+ openBlockActionsMenu,
11
+ fireEvent,
12
+ getBlockTransformOptions,
13
+ } from 'test/helpers';
14
+
15
+ const block = 'Group';
16
+ const initialHtml = `
17
+ <!-- wp:group -->
18
+ <div id="this-is-another-anchor" class="wp-block-group"><!-- wp:paragraph -->
19
+ <p>One.</p>
20
+ <!-- /wp:paragraph -->
21
+
22
+ <!-- wp:paragraph -->
23
+ <p>Two</p>
24
+ <!-- /wp:paragraph -->
25
+
26
+ <!-- wp:paragraph -->
27
+ <p>Three.</p>
28
+ <!-- /wp:paragraph --></div>
29
+ <!-- /wp:group -->`;
30
+
31
+ const transformsWithInnerBlocks = [ 'Columns' ];
32
+ const blockTransforms = [ ...transformsWithInnerBlocks ];
33
+
34
+ setupCoreBlocks();
35
+
36
+ describe( `${ block } block transforms`, () => {
37
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
38
+ const screen = await initializeEditor( { initialHtml } );
39
+ const newBlock = await transformBlock( screen, block, blockTransform, {
40
+ hasInnerBlocks:
41
+ transformsWithInnerBlocks.includes( blockTransform ),
42
+ } );
43
+ expect( newBlock ).toBeVisible();
44
+ expect( getEditorHtml() ).toMatchSnapshot();
45
+ } );
46
+
47
+ it( 'unwraps content', async () => {
48
+ const screen = await initializeEditor( { initialHtml } );
49
+ const { getByText } = screen;
50
+ fireEvent.press( getBlock( screen, block ) );
51
+
52
+ await openBlockActionsMenu( screen );
53
+ fireEvent.press( getByText( 'Transform block…' ) );
54
+ fireEvent.press( getByText( 'Unwrap' ) );
55
+
56
+ // The first block created is the content of the Paragraph block.
57
+ const paragraph = getBlock( screen, 'Paragraph', 0 );
58
+ expect( paragraph ).toBeVisible();
59
+ // The second block created is the content of the citation element.
60
+ const citation = getBlock( screen, 'Paragraph', 1 );
61
+ expect( citation ).toBeVisible();
62
+
63
+ expect( getEditorHtml() ).toMatchSnapshot();
64
+ } );
65
+
66
+ it( 'matches expected transformation options', async () => {
67
+ const screen = await initializeEditor( { initialHtml } );
68
+ const transformOptions = await getBlockTransformOptions(
69
+ screen,
70
+ block,
71
+ { canUnwrap: true }
72
+ );
73
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
74
+ } );
75
+ } );