@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,59 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Paragraph 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:paragraph -->
7
+ <p>Example text</p>
8
+ <!-- /wp:paragraph --></div>
9
+ <!-- /wp:column --></div>
10
+ <!-- /wp:columns -->"
11
+ `;
12
+
13
+ exports[`Paragraph block transforms to Group block 1`] = `
14
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
15
+ <div class="wp-block-group"><!-- wp:paragraph -->
16
+ <p>Example text</p>
17
+ <!-- /wp:paragraph --></div>
18
+ <!-- /wp:group -->"
19
+ `;
20
+
21
+ exports[`Paragraph block transforms to Heading block 1`] = `
22
+ "<!-- wp:heading -->
23
+ <h2 class="wp-block-heading">Example text</h2>
24
+ <!-- /wp:heading -->"
25
+ `;
26
+
27
+ exports[`Paragraph block transforms to List block 1`] = `
28
+ "<!-- wp:list -->
29
+ <ul><!-- wp:list-item -->
30
+ <li>Example text</li>
31
+ <!-- /wp:list-item --></ul>
32
+ <!-- /wp:list -->"
33
+ `;
34
+
35
+ exports[`Paragraph block transforms to Preformatted block 1`] = `
36
+ "<!-- wp:preformatted -->
37
+ <pre class="wp-block-preformatted">Example text</pre>
38
+ <!-- /wp:preformatted -->"
39
+ `;
40
+
41
+ exports[`Paragraph block transforms to Pullquote block 1`] = `
42
+ "<!-- wp:pullquote -->
43
+ <figure class="wp-block-pullquote"><blockquote><p>Example text</p></blockquote></figure>
44
+ <!-- /wp:pullquote -->"
45
+ `;
46
+
47
+ exports[`Paragraph block transforms to Quote block 1`] = `
48
+ "<!-- wp:quote -->
49
+ <blockquote class="wp-block-quote"><!-- wp:paragraph -->
50
+ <p>Example text</p>
51
+ <!-- /wp:paragraph --></blockquote>
52
+ <!-- /wp:quote -->"
53
+ `;
54
+
55
+ exports[`Paragraph block transforms to Verse block 1`] = `
56
+ "<!-- wp:verse -->
57
+ <pre class="wp-block-verse">Example text</pre>
58
+ <!-- /wp:verse -->"
59
+ `;
@@ -0,0 +1,50 @@
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 = 'Paragraph';
13
+ const initialHtml = `
14
+ <!-- wp:paragraph -->
15
+ <p>Example text</p>
16
+ <!-- /wp:paragraph -->`;
17
+
18
+ // NOTE: Paragraph block can be transformed to Buttons block in web,
19
+ // however this transform is not supported in the native version.
20
+ const transformsWithInnerBlocks = [ 'List', 'Quote', 'Columns', 'Group' ];
21
+ const blockTransforms = [
22
+ 'Heading',
23
+ 'Preformatted',
24
+ 'Pullquote',
25
+ 'Verse',
26
+ ...transformsWithInnerBlocks,
27
+ ];
28
+
29
+ setupCoreBlocks();
30
+
31
+ describe( `${ block } block transforms`, () => {
32
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
33
+ const screen = await initializeEditor( { initialHtml } );
34
+ const newBlock = await transformBlock( screen, block, blockTransform, {
35
+ hasInnerBlocks:
36
+ transformsWithInnerBlocks.includes( blockTransform ),
37
+ } );
38
+ expect( newBlock ).toBeVisible();
39
+ expect( getEditorHtml() ).toMatchSnapshot();
40
+ } );
41
+
42
+ it( 'matches expected transformation options', async () => {
43
+ const screen = await initializeEditor( { initialHtml } );
44
+ const transformOptions = await getBlockTransformOptions(
45
+ screen,
46
+ block
47
+ );
48
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
49
+ } );
50
+ } );
@@ -32,7 +32,7 @@ function render_block_core_post_author( $attributes, $content, $block ) {
32
32
  $link = get_author_posts_url( $author_id );
33
33
  $author_name = get_the_author_meta( 'display_name', $author_id );
34
34
  if ( ! empty( $attributes['isLink'] && ! empty( $attributes['linkTarget'] ) ) ) {
35
- $author_name = sprintf( '<a href="%1s" target="%2s">%2s</a>', esc_url( $link ), esc_attr( $attributes['linkTarget'] ), $author_name );
35
+ $author_name = sprintf( '<a href="%1$s" target="%2$s">%3$s</a>', esc_url( $link ), esc_attr( $attributes['linkTarget'] ), $author_name );
36
36
  }
37
37
 
38
38
  $byline = ! empty( $attributes['byline'] ) ? $attributes['byline'] : false;
@@ -58,8 +58,12 @@ function EditableContent( { context = {} } ) {
58
58
 
59
59
  function Content( props ) {
60
60
  const { context: { queryId, postType, postId } = {} } = props;
61
- const isDescendentOfQueryLoop = Number.isFinite( queryId );
62
61
  const userCanEdit = useCanEditEntity( 'postType', postType, postId );
62
+ if ( userCanEdit === undefined ) {
63
+ return null;
64
+ }
65
+
66
+ const isDescendentOfQueryLoop = Number.isFinite( queryId );
63
67
  const isEditable = userCanEdit && ! isDescendentOfQueryLoop;
64
68
 
65
69
  return isEditable ? (
@@ -76,12 +76,15 @@ export default function PostDateEdit( {
76
76
  [ postTypeSlug ]
77
77
  );
78
78
 
79
+ const dateLabel =
80
+ displayType === 'date' ? __( 'Post Date' ) : __( 'Post Modified Date' );
81
+
79
82
  let postDate = date ? (
80
83
  <time dateTime={ dateI18n( 'c', date ) } ref={ setPopoverAnchor }>
81
84
  { dateI18n( format || siteFormat, date ) }
82
85
  </time>
83
86
  ) : (
84
- __( 'Post Date' )
87
+ dateLabel
85
88
  );
86
89
 
87
90
  if ( isLink && date ) {
@@ -10,6 +10,7 @@ import initBlock from '../utils/init-block';
10
10
  import metadata from './block.json';
11
11
  import edit from './edit';
12
12
  import deprecated from './deprecated';
13
+ import variations from './variations';
13
14
 
14
15
  const { name } = metadata;
15
16
  export { metadata, name };
@@ -18,6 +19,7 @@ export const settings = {
18
19
  icon,
19
20
  edit,
20
21
  deprecated,
22
+ variations,
21
23
  };
22
24
 
23
25
  export const init = () => initBlock( { name, metadata, settings } );
@@ -0,0 +1,20 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { postDate } from '@wordpress/icons';
6
+
7
+ const variations = [
8
+ {
9
+ name: 'post-date-modified',
10
+ title: __( 'Post Modified Date' ),
11
+ description: __( "Display a post's last updated date." ),
12
+ attributes: { displayType: 'modified' },
13
+ scope: [ 'block', 'inserter' ],
14
+ isActive: ( blockAttributes ) =>
15
+ blockAttributes.displayType === 'modified',
16
+ icon: postDate,
17
+ },
18
+ ];
19
+
20
+ export default variations;
@@ -6,7 +6,7 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useEntityProp } from '@wordpress/core-data';
9
+ import { useEntityProp, store as coreStore } from '@wordpress/core-data';
10
10
  import { useMemo } from '@wordpress/element';
11
11
  import {
12
12
  AlignmentToolbar,
@@ -18,12 +18,15 @@ import {
18
18
  } from '@wordpress/block-editor';
19
19
  import { PanelBody, ToggleControl, RangeControl } from '@wordpress/components';
20
20
  import { __, _x } from '@wordpress/i18n';
21
+ import { useSelect } from '@wordpress/data';
21
22
 
22
23
  /**
23
24
  * Internal dependencies
24
25
  */
25
26
  import { useCanEditEntity } from '../utils/hooks';
26
27
 
28
+ const ELLIPSIS = '…';
29
+
27
30
  export default function PostExcerptEditor( {
28
31
  attributes: { textAlign, moreText, showMoreOnNewLine, excerptLength },
29
32
  setAttributes,
@@ -32,13 +35,41 @@ export default function PostExcerptEditor( {
32
35
  } ) {
33
36
  const isDescendentOfQueryLoop = Number.isFinite( queryId );
34
37
  const userCanEdit = useCanEditEntity( 'postType', postType, postId );
35
- const isEditable = userCanEdit && ! isDescendentOfQueryLoop;
36
-
37
38
  const [
38
39
  rawExcerpt,
39
40
  setExcerpt,
40
41
  { rendered: renderedExcerpt, protected: isProtected } = {},
41
42
  ] = useEntityProp( 'postType', postType, 'excerpt', postId );
43
+
44
+ /**
45
+ * Check if the post type supports excerpts.
46
+ * Add an exception and return early for the "page" post type,
47
+ * which is registered without support for the excerpt UI,
48
+ * but supports saving the excerpt to the database.
49
+ * See: https://core.trac.wordpress.org/browser/branches/6.1/src/wp-includes/post.php#L65
50
+ * Without this exception, users that have excerpts saved to the database will
51
+ * not be able to edit the excerpts.
52
+ */
53
+ const postTypeSupportsExcerpts = useSelect(
54
+ ( select ) => {
55
+ if ( postType === 'page' ) {
56
+ return true;
57
+ }
58
+ return !! select( coreStore ).getPostType( postType )?.supports
59
+ .excerpt;
60
+ },
61
+ [ postType ]
62
+ );
63
+
64
+ /**
65
+ * The excerpt is editable if:
66
+ * - The user can edit the post
67
+ * - It is not a descendent of a Query Loop block
68
+ * - The post type supports excerpts
69
+ */
70
+ const isEditable =
71
+ userCanEdit && ! isDescendentOfQueryLoop && postTypeSupportsExcerpts;
72
+
42
73
  const blockProps = useBlockProps( {
43
74
  className: classnames( {
44
75
  [ `has-text-align-${ textAlign }` ]: textAlign,
@@ -65,6 +96,7 @@ export default function PostExcerptEditor( {
65
96
  );
66
97
  return document.body.textContent || document.body.innerText || '';
67
98
  }, [ renderedExcerpt ] );
99
+
68
100
  if ( ! postType || ! postId ) {
69
101
  return (
70
102
  <>
@@ -123,14 +155,13 @@ export default function PostExcerptEditor( {
123
155
  * The excerpt length setting needs to be applied to both
124
156
  * the raw and the rendered excerpt depending on which is being used.
125
157
  */
126
- const rawOrRenderedExcerpt = !! renderedExcerpt
127
- ? strippedRenderedExcerpt
128
- : rawExcerpt;
158
+ const rawOrRenderedExcerpt = (
159
+ rawExcerpt || strippedRenderedExcerpt
160
+ ).trim();
129
161
 
130
162
  let trimmedExcerpt = '';
131
163
  if ( wordCountType === 'words' ) {
132
164
  trimmedExcerpt = rawOrRenderedExcerpt
133
- .trim()
134
165
  .split( ' ', excerptLength )
135
166
  .join( ' ' );
136
167
  } else if ( wordCountType === 'characters_excluding_spaces' ) {
@@ -143,7 +174,6 @@ export default function PostExcerptEditor( {
143
174
  * so that the spaces are excluded from the word count.
144
175
  */
145
176
  const excerptWithSpaces = rawOrRenderedExcerpt
146
- .trim()
147
177
  .split( '', excerptLength )
148
178
  .join( '' );
149
179
 
@@ -152,14 +182,15 @@ export default function PostExcerptEditor( {
152
182
  excerptWithSpaces.replaceAll( ' ', '' ).length;
153
183
 
154
184
  trimmedExcerpt = rawOrRenderedExcerpt
155
- .trim()
156
185
  .split( '', excerptLength + numberOfSpaces )
157
186
  .join( '' );
158
187
  } else if ( wordCountType === 'characters_including_spaces' ) {
159
- trimmedExcerpt = rawOrRenderedExcerpt.trim().split( '', excerptLength );
188
+ trimmedExcerpt = rawOrRenderedExcerpt
189
+ .split( '', excerptLength )
190
+ .join( '' );
160
191
  }
161
192
 
162
- trimmedExcerpt = trimmedExcerpt + '...';
193
+ const isTrimmed = trimmedExcerpt !== rawOrRenderedExcerpt;
163
194
 
164
195
  const excerptContent = isEditable ? (
165
196
  <RichText
@@ -168,7 +199,9 @@ export default function PostExcerptEditor( {
168
199
  value={
169
200
  isSelected
170
201
  ? rawOrRenderedExcerpt
171
- : ( trimmedExcerpt !== '...' ? trimmedExcerpt : '' ) ||
202
+ : ( ! isTrimmed
203
+ ? rawOrRenderedExcerpt
204
+ : trimmedExcerpt + ELLIPSIS ) ||
172
205
  __( 'No post excerpt found' )
173
206
  }
174
207
  onChange={ setExcerpt }
@@ -176,9 +209,9 @@ export default function PostExcerptEditor( {
176
209
  />
177
210
  ) : (
178
211
  <p className={ excerptClassName }>
179
- { trimmedExcerpt !== '...'
180
- ? trimmedExcerpt
181
- : __( 'No post excerpt found' ) }
212
+ { ! isTrimmed
213
+ ? rawOrRenderedExcerpt || __( 'No post excerpt found' )
214
+ : trimmedExcerpt + ELLIPSIS }
182
215
  </p>
183
216
  );
184
217
  return (
@@ -208,7 +241,6 @@ export default function PostExcerptEditor( {
208
241
  value={ excerptLength }
209
242
  onChange={ ( value ) => {
210
243
  setAttributes( { excerptLength: value } );
211
- setExcerpt();
212
244
  } }
213
245
  min="10"
214
246
  max="100"
@@ -84,8 +84,7 @@ add_action( 'init', 'register_block_core_post_excerpt' );
84
84
  * Returns 100 because 100 is the max length in the setting.
85
85
  */
86
86
  if ( is_admin() ||
87
- defined( 'REST_REQUEST' ) ||
88
- 'REST_REQUEST' ) {
87
+ defined( 'REST_REQUEST' ) && REST_REQUEST ) {
89
88
  add_filter(
90
89
  'excerpt_length',
91
90
  function() {
@@ -96,10 +96,6 @@ const DimensionControls = ( {
96
96
  label: __( 'Square' ),
97
97
  value: '1',
98
98
  },
99
- {
100
- label: __( '16:10' ),
101
- value: '16/10',
102
- },
103
99
  {
104
100
  label: __( '16:9' ),
105
101
  value: '16/9',
@@ -112,10 +108,6 @@ const DimensionControls = ( {
112
108
  label: __( '3:2' ),
113
109
  value: '3/2',
114
110
  },
115
- {
116
- label: __( '10:16' ),
117
- value: '10/16',
118
- },
119
111
  {
120
112
  label: __( '9:16' ),
121
113
  value: '9/16',
@@ -212,7 +204,7 @@ const DimensionControls = ( {
212
204
  { !! imageSizeOptions.length && (
213
205
  <ToolsPanelItem
214
206
  hasValue={ () => !! sizeSlug }
215
- label={ __( 'Image size' ) }
207
+ label={ __( 'Resolution' ) }
216
208
  onDeselect={ () =>
217
209
  setAttributes( { sizeSlug: undefined } )
218
210
  }
@@ -224,7 +216,7 @@ const DimensionControls = ( {
224
216
  >
225
217
  <SelectControl
226
218
  __nextHasNoMarginBottom
227
- label={ __( 'Image size' ) }
219
+ label={ __( 'Resolution' ) }
228
220
  value={ sizeSlug || DEFAULT_SIZE }
229
221
  options={ imageSizeOptions }
230
222
  onChange={ ( nextSizeSlug ) =>
@@ -139,7 +139,7 @@ export default function PostFeaturedImageEdit( {
139
139
  imageSizeOptions={ imageSizeOptions }
140
140
  />
141
141
  <InspectorControls>
142
- <PanelBody title={ __( 'Link settings' ) }>
142
+ <PanelBody title={ __( 'Settings' ) }>
143
143
  <ToggleControl
144
144
  __nextHasNoMarginBottom
145
145
  label={
@@ -12,6 +12,7 @@
12
12
  justify-content: center;
13
13
  align-items: center;
14
14
  padding: 0;
15
+ display: flex;
15
16
 
16
17
  // Hide the upload button, as it's also available in the media library.
17
18
  .components-form-file-upload {
@@ -3,6 +3,7 @@
3
3
  margin-right: 0;
4
4
  a {
5
5
  display: block;
6
+ height: 100%;
6
7
  }
7
8
  img {
8
9
  max-width: 100%;
@@ -18,7 +18,7 @@
18
18
  "supports": {
19
19
  "reusable": false,
20
20
  "html": false,
21
- "align": true,
21
+ "align": [ "wide", "full" ],
22
22
  "anchor": true,
23
23
  "__experimentalLayout": {
24
24
  "allowEditing": false
@@ -16,7 +16,7 @@
16
16
  flex-wrap: wrap;
17
17
  gap: 1.25em;
18
18
 
19
- li {
19
+ > li {
20
20
  margin: 0;
21
21
  width: 100%;
22
22
  }
@@ -15,6 +15,22 @@
15
15
  },
16
16
  "supports": {
17
17
  "html": false,
18
- "multiple": false
18
+ "spacing": {
19
+ "margin": true,
20
+ "padding": true
21
+ },
22
+ "typography": {
23
+ "fontSize": true,
24
+ "lineHeight": true,
25
+ "__experimentalFontFamily": true,
26
+ "__experimentalFontWeight": true,
27
+ "__experimentalFontStyle": true,
28
+ "__experimentalTextTransform": true,
29
+ "__experimentalTextDecoration": true,
30
+ "__experimentalLetterSpacing": true,
31
+ "__experimentalDefaultControls": {
32
+ "fontSize": true
33
+ }
34
+ }
19
35
  }
20
36
  }
@@ -0,0 +1,4 @@
1
+ .wp-block-post-time-to-read {
2
+ // This block has customizable padding, border-box makes that more predictable.
3
+ box-sizing: border-box;
4
+ }
@@ -0,0 +1,31 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Preformatted block transforms to Code block 1`] = `
4
+ "<!-- wp:code -->
5
+ <pre class="wp-block-code"><code>Some <em>preformatted</em> text...<br />And more!</code></pre>
6
+ <!-- /wp:code -->"
7
+ `;
8
+
9
+ exports[`Preformatted block transforms to Columns block 1`] = `
10
+ "<!-- wp:columns -->
11
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
12
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:preformatted -->
13
+ <pre class="wp-block-preformatted">Some <em>preformatted</em> text...<br />And more!</pre>
14
+ <!-- /wp:preformatted --></div>
15
+ <!-- /wp:column --></div>
16
+ <!-- /wp:columns -->"
17
+ `;
18
+
19
+ exports[`Preformatted block transforms to Group block 1`] = `
20
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
21
+ <div class="wp-block-group"><!-- wp:preformatted -->
22
+ <pre class="wp-block-preformatted">Some <em>preformatted</em> text...<br />And more!</pre>
23
+ <!-- /wp:preformatted --></div>
24
+ <!-- /wp:group -->"
25
+ `;
26
+
27
+ exports[`Preformatted block transforms to Paragraph block 1`] = `
28
+ "<!-- wp:paragraph -->
29
+ <p>Some <em>preformatted</em> text...<br />And more!</p>
30
+ <!-- /wp:paragraph -->"
31
+ `;
@@ -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 = 'Preformatted';
13
+ const initialHtml = `
14
+ <!-- wp:preformatted -->
15
+ <pre class="wp-block-preformatted">Some <em>preformatted</em> text...<br>And more!</pre>
16
+ <!-- /wp:preformatted -->`;
17
+
18
+ const transformsWithInnerBlocks = [ 'Columns', 'Group' ];
19
+ const blockTransforms = [ 'Paragraph', 'Code', ...transformsWithInnerBlocks ];
20
+
21
+ setupCoreBlocks();
22
+
23
+ describe( `${ block } block transforms`, () => {
24
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
25
+ const screen = await initializeEditor( { initialHtml } );
26
+ const newBlock = await transformBlock( screen, block, blockTransform, {
27
+ hasInnerBlocks:
28
+ transformsWithInnerBlocks.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
+ } );
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { get } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -435,11 +434,8 @@ const v2 = {
435
434
  // Is normal style and a named color is being used, we need to retrieve the color value to set the style,
436
435
  // as there is no expectation that themes create classes that set border colors.
437
436
  } else if ( mainColor ) {
438
- const colors = get(
439
- select( blockEditorStore ).getSettings(),
440
- [ 'colors' ],
441
- []
442
- );
437
+ const colors =
438
+ select( blockEditorStore ).getSettings().colors ?? [];
443
439
  const colorObject = getColorObjectByAttributeValues(
444
440
  colors,
445
441
  mainColor
@@ -0,0 +1,47 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Pullquote 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:pullquote -->
7
+ <figure class="wp-block-pullquote"><blockquote><p>One of the hardest things to do in technology is disrupt yourself.</p><cite>Matt Mullenweg</cite></blockquote></figure>
8
+ <!-- /wp:pullquote --></div>
9
+ <!-- /wp:column --></div>
10
+ <!-- /wp:columns -->"
11
+ `;
12
+
13
+ exports[`Pullquote block transforms to Group block 1`] = `
14
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
15
+ <div class="wp-block-group"><!-- wp:pullquote -->
16
+ <figure class="wp-block-pullquote"><blockquote><p>One of the hardest things to do in technology is disrupt yourself.</p><cite>Matt Mullenweg</cite></blockquote></figure>
17
+ <!-- /wp:pullquote --></div>
18
+ <!-- /wp:group -->"
19
+ `;
20
+
21
+ exports[`Pullquote block transforms to Heading block 1`] = `
22
+ "<!-- wp:heading -->
23
+ <h2 class="wp-block-heading">One of the hardest things to do in technology is disrupt yourself.</h2>
24
+ <!-- /wp:heading -->
25
+
26
+ <!-- wp:heading -->
27
+ <h2 class="wp-block-heading">Matt Mullenweg</h2>
28
+ <!-- /wp:heading -->"
29
+ `;
30
+
31
+ exports[`Pullquote block transforms to Paragraph block 1`] = `
32
+ "<!-- wp:paragraph -->
33
+ <p>One of the hardest things to do in technology is disrupt yourself.</p>
34
+ <!-- /wp:paragraph -->
35
+
36
+ <!-- wp:paragraph -->
37
+ <p>Matt Mullenweg</p>
38
+ <!-- /wp:paragraph -->"
39
+ `;
40
+
41
+ exports[`Pullquote block transforms to Quote block 1`] = `
42
+ "<!-- wp:quote -->
43
+ <blockquote class="wp-block-quote"><!-- wp:paragraph -->
44
+ <p>One of the hardest things to do in technology is disrupt yourself.</p>
45
+ <!-- /wp:paragraph --><cite>Matt Mullenweg</cite></blockquote>
46
+ <!-- /wp:quote -->"
47
+ `;
@@ -0,0 +1,46 @@
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 = 'Pullquote';
13
+ const initialHtml = `
14
+ <!-- wp:pullquote -->
15
+ <figure class="wp-block-pullquote"><blockquote><p>One of the hardest things to do in technology is disrupt yourself.</p><cite>Matt Mullenweg</cite></blockquote></figure>
16
+ <!-- /wp:pullquote -->`;
17
+
18
+ const transformsWithInnerBlocks = [ 'Quote', 'Columns', 'Group' ];
19
+ const blockTransforms = [
20
+ 'Paragraph',
21
+ 'Heading',
22
+ ...transformsWithInnerBlocks,
23
+ ];
24
+
25
+ setupCoreBlocks();
26
+
27
+ describe( `${ block } block transforms`, () => {
28
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
29
+ const screen = await initializeEditor( { initialHtml } );
30
+ const newBlock = await transformBlock( screen, block, blockTransform, {
31
+ hasInnerBlocks:
32
+ transformsWithInnerBlocks.includes( blockTransform ),
33
+ } );
34
+ expect( newBlock ).toBeVisible();
35
+ expect( getEditorHtml() ).toMatchSnapshot();
36
+ } );
37
+
38
+ it( 'matches expected transformation options', async () => {
39
+ const screen = await initializeEditor( { initialHtml } );
40
+ const transformOptions = await getBlockTransformOptions(
41
+ screen,
42
+ block
43
+ );
44
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
45
+ } );
46
+ } );