@wordpress/block-library 8.13.0 → 8.15.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 (549) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/archives/index.js +5 -1
  3. package/build/archives/index.js.map +1 -1
  4. package/build/audio/index.js +5 -1
  5. package/build/audio/index.js.map +1 -1
  6. package/build/avatar/edit.js +1 -0
  7. package/build/avatar/edit.js.map +1 -1
  8. package/build/avatar/index.js +1 -1
  9. package/build/block/edit.js +1 -1
  10. package/build/block/edit.js.map +1 -1
  11. package/build/block/edit.native.js +6 -9
  12. package/build/block/edit.native.js.map +1 -1
  13. package/build/block/index.js +2 -1
  14. package/build/block/index.js.map +1 -1
  15. package/build/buttons/edit.js +7 -3
  16. package/build/buttons/edit.js.map +1 -1
  17. package/build/categories/index.js +5 -1
  18. package/build/categories/index.js.map +1 -1
  19. package/build/code/index.js +5 -1
  20. package/build/code/index.js.map +1 -1
  21. package/build/column/edit.native.js +1 -4
  22. package/build/column/edit.native.js.map +1 -1
  23. package/build/column/index.js +1 -0
  24. package/build/column/index.js.map +1 -1
  25. package/build/columns/edit.js +1 -0
  26. package/build/columns/edit.js.map +1 -1
  27. package/build/comment-author-avatar/edit.js +1 -0
  28. package/build/comment-author-avatar/edit.js.map +1 -1
  29. package/build/comments/index.js +1 -0
  30. package/build/comments/index.js.map +1 -1
  31. package/build/cover/deprecated.js +4 -2
  32. package/build/cover/deprecated.js.map +1 -1
  33. package/build/cover/edit/inspector-controls.js +2 -1
  34. package/build/cover/edit/inspector-controls.js.map +1 -1
  35. package/build/cover/index.js +1 -0
  36. package/build/cover/index.js.map +1 -1
  37. package/build/details/index.js +5 -1
  38. package/build/details/index.js.map +1 -1
  39. package/build/embed/embed-placeholder.native.js +37 -13
  40. package/build/embed/embed-placeholder.native.js.map +1 -1
  41. package/build/embed/util.js +9 -8
  42. package/build/embed/util.js.map +1 -1
  43. package/build/file/inspector.js +1 -0
  44. package/build/file/inspector.js.map +1 -1
  45. package/build/file/{interactivity.js → view-interactivity.js} +6 -2
  46. package/build/file/view-interactivity.js.map +1 -0
  47. package/build/footnotes/edit.js +20 -1
  48. package/build/footnotes/edit.js.map +1 -1
  49. package/build/footnotes/format.js +19 -16
  50. package/build/footnotes/format.js.map +1 -1
  51. package/build/footnotes/index.js +0 -1
  52. package/build/footnotes/index.js.map +1 -1
  53. package/build/gallery/edit.js +1 -1
  54. package/build/gallery/edit.js.map +1 -1
  55. package/build/gallery/index.js +3 -1
  56. package/build/gallery/index.js.map +1 -1
  57. package/build/group/index.js +1 -0
  58. package/build/group/index.js.map +1 -1
  59. package/build/heading/index.js +5 -1
  60. package/build/heading/index.js.map +1 -1
  61. package/build/heading/transforms.js +5 -1
  62. package/build/heading/transforms.js.map +1 -1
  63. package/build/image/deprecated.js +453 -175
  64. package/build/image/deprecated.js.map +1 -1
  65. package/build/image/edit.js +0 -4
  66. package/build/image/edit.js.map +1 -1
  67. package/build/image/image.js +96 -43
  68. package/build/image/image.js.map +1 -1
  69. package/build/image/index.js +6 -0
  70. package/build/image/index.js.map +1 -1
  71. package/build/image/save.js +8 -1
  72. package/build/image/save.js.map +1 -1
  73. package/build/image/utils.js +18 -0
  74. package/build/image/utils.js.map +1 -1
  75. package/build/image/{interactivity.js → view-interactivity.js} +86 -44
  76. package/build/image/view-interactivity.js.map +1 -0
  77. package/build/index.js +12 -3
  78. package/build/index.js.map +1 -1
  79. package/build/latest-comments/edit.js +1 -0
  80. package/build/latest-comments/edit.js.map +1 -1
  81. package/build/latest-posts/edit.js +2 -0
  82. package/build/latest-posts/edit.js.map +1 -1
  83. package/build/list/edit.js +4 -4
  84. package/build/list/edit.js.map +1 -1
  85. package/build/list/index.js +5 -1
  86. package/build/list/index.js.map +1 -1
  87. package/build/list-item/utils.js +6 -1
  88. package/build/list-item/utils.js.map +1 -1
  89. package/build/media-text/index.js +1 -0
  90. package/build/media-text/index.js.map +1 -1
  91. package/build/media-text/media-container.native.js +2 -1
  92. package/build/media-text/media-container.native.js.map +1 -1
  93. package/build/missing/edit.js +22 -8
  94. package/build/missing/edit.js.map +1 -1
  95. package/build/missing/edit.native.js +7 -5
  96. package/build/missing/edit.native.js.map +1 -1
  97. package/build/navigation/constants.js +10 -4
  98. package/build/navigation/constants.js.map +1 -1
  99. package/build/navigation/edit/index.js +17 -3
  100. package/build/navigation/edit/index.js.map +1 -1
  101. package/build/navigation/edit/inner-blocks.js +2 -2
  102. package/build/navigation/edit/inner-blocks.js.map +1 -1
  103. package/build/navigation/edit/menu-inspector-controls.js +0 -1
  104. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  105. package/build/navigation/edit/unsaved-inner-blocks.js +2 -2
  106. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  107. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -15
  108. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  109. package/build/navigation/use-navigation-menu.js +33 -45
  110. package/build/navigation/use-navigation-menu.js.map +1 -1
  111. package/build/navigation/view-interactivity.js +185 -0
  112. package/build/navigation/view-interactivity.js.map +1 -0
  113. package/build/navigation-link/edit.js +12 -18
  114. package/build/navigation-link/edit.js.map +1 -1
  115. package/build/navigation-link/link-ui.js +12 -2
  116. package/build/navigation-link/link-ui.js.map +1 -1
  117. package/build/navigation-submenu/edit.js +2 -2
  118. package/build/navigation-submenu/edit.js.map +1 -1
  119. package/build/page-list/convert-to-links-modal.js +3 -3
  120. package/build/page-list/convert-to-links-modal.js.map +1 -1
  121. package/build/page-list/edit.js +34 -39
  122. package/build/page-list/edit.js.map +1 -1
  123. package/build/page-list/use-convert-to-navigation-links.js +2 -15
  124. package/build/page-list/use-convert-to-navigation-links.js.map +1 -1
  125. package/build/paragraph/index.js +1 -0
  126. package/build/paragraph/index.js.map +1 -1
  127. package/build/paragraph/transforms.js +1 -0
  128. package/build/paragraph/transforms.js.map +1 -1
  129. package/build/post-comments-form/index.js +1 -0
  130. package/build/post-comments-form/index.js.map +1 -1
  131. package/build/post-navigation-link/index.js +1 -0
  132. package/build/post-navigation-link/index.js.map +1 -1
  133. package/build/post-time-to-read/index.js +5 -1
  134. package/build/post-time-to-read/index.js.map +1 -1
  135. package/build/query-pagination/edit.js +1 -1
  136. package/build/query-pagination/edit.js.map +1 -1
  137. package/build/query-pagination-numbers/index.js +1 -1
  138. package/build/query-title/edit.js +43 -1
  139. package/build/query-title/edit.js.map +1 -1
  140. package/build/quote/index.js +1 -0
  141. package/build/quote/index.js.map +1 -1
  142. package/build/quote/transforms.js +8 -0
  143. package/build/quote/transforms.js.map +1 -1
  144. package/build/rss/edit.js +3 -0
  145. package/build/rss/edit.js.map +1 -1
  146. package/build/search/edit.js +4 -3
  147. package/build/search/edit.js.map +1 -1
  148. package/build/search/index.js +1 -0
  149. package/build/search/index.js.map +1 -1
  150. package/build/site-logo/edit.js +1 -0
  151. package/build/site-logo/edit.js.map +1 -1
  152. package/build/site-logo/index.js +5 -1
  153. package/build/site-logo/index.js.map +1 -1
  154. package/build/site-tagline/icon.js +1 -1
  155. package/build/site-tagline/icon.js.map +1 -1
  156. package/build/site-tagline/index.js +5 -1
  157. package/build/site-tagline/index.js.map +1 -1
  158. package/build/site-title/index.js +5 -1
  159. package/build/site-title/index.js.map +1 -1
  160. package/build/social-links/index.js +3 -1
  161. package/build/social-links/index.js.map +1 -1
  162. package/build/table/index.js +5 -1
  163. package/build/table/index.js.map +1 -1
  164. package/build/tag-cloud/edit.js +1 -0
  165. package/build/tag-cloud/edit.js.map +1 -1
  166. package/build/template-part/edit/index.js +1 -1
  167. package/build/template-part/edit/index.js.map +1 -1
  168. package/build/term-description/index.js +1 -0
  169. package/build/term-description/index.js.map +1 -1
  170. package/build/text-columns/edit.js +1 -0
  171. package/build/text-columns/edit.js.map +1 -1
  172. package/build/verse/index.js +5 -1
  173. package/build/verse/index.js.map +1 -1
  174. package/build/video/deprecated.js +5 -1
  175. package/build/video/deprecated.js.map +1 -1
  176. package/build/video/index.js +5 -1
  177. package/build/video/index.js.map +1 -1
  178. package/build-module/archives/index.js +5 -1
  179. package/build-module/archives/index.js.map +1 -1
  180. package/build-module/audio/index.js +5 -1
  181. package/build-module/audio/index.js.map +1 -1
  182. package/build-module/avatar/edit.js +1 -0
  183. package/build-module/avatar/edit.js.map +1 -1
  184. package/build-module/avatar/index.js +1 -1
  185. package/build-module/block/edit.js +1 -1
  186. package/build-module/block/edit.js.map +1 -1
  187. package/build-module/block/edit.native.js +7 -9
  188. package/build-module/block/edit.native.js.map +1 -1
  189. package/build-module/block/index.js +2 -1
  190. package/build-module/block/index.js.map +1 -1
  191. package/build-module/buttons/edit.js +7 -3
  192. package/build-module/buttons/edit.js.map +1 -1
  193. package/build-module/categories/index.js +5 -1
  194. package/build-module/categories/index.js.map +1 -1
  195. package/build-module/code/index.js +5 -1
  196. package/build-module/code/index.js.map +1 -1
  197. package/build-module/column/edit.native.js +1 -4
  198. package/build-module/column/edit.native.js.map +1 -1
  199. package/build-module/column/index.js +1 -0
  200. package/build-module/column/index.js.map +1 -1
  201. package/build-module/columns/edit.js +1 -0
  202. package/build-module/columns/edit.js.map +1 -1
  203. package/build-module/comment-author-avatar/edit.js +1 -0
  204. package/build-module/comment-author-avatar/edit.js.map +1 -1
  205. package/build-module/comments/index.js +1 -0
  206. package/build-module/comments/index.js.map +1 -1
  207. package/build-module/cover/deprecated.js +4 -2
  208. package/build-module/cover/deprecated.js.map +1 -1
  209. package/build-module/cover/edit/inspector-controls.js +2 -1
  210. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  211. package/build-module/cover/index.js +1 -0
  212. package/build-module/cover/index.js.map +1 -1
  213. package/build-module/details/index.js +5 -1
  214. package/build-module/details/index.js.map +1 -1
  215. package/build-module/embed/embed-placeholder.native.js +37 -14
  216. package/build-module/embed/embed-placeholder.native.js.map +1 -1
  217. package/build-module/embed/util.js +6 -6
  218. package/build-module/embed/util.js.map +1 -1
  219. package/build-module/file/inspector.js +1 -0
  220. package/build-module/file/inspector.js.map +1 -1
  221. package/build-module/file/{interactivity.js → view-interactivity.js} +6 -2
  222. package/build-module/file/view-interactivity.js.map +1 -0
  223. package/build-module/footnotes/edit.js +18 -2
  224. package/build-module/footnotes/edit.js.map +1 -1
  225. package/build-module/footnotes/format.js +19 -16
  226. package/build-module/footnotes/format.js.map +1 -1
  227. package/build-module/footnotes/index.js +0 -1
  228. package/build-module/footnotes/index.js.map +1 -1
  229. package/build-module/gallery/edit.js +1 -1
  230. package/build-module/gallery/edit.js.map +1 -1
  231. package/build-module/gallery/index.js +3 -1
  232. package/build-module/gallery/index.js.map +1 -1
  233. package/build-module/group/index.js +1 -0
  234. package/build-module/group/index.js.map +1 -1
  235. package/build-module/heading/index.js +5 -1
  236. package/build-module/heading/index.js.map +1 -1
  237. package/build-module/heading/transforms.js +5 -1
  238. package/build-module/heading/transforms.js.map +1 -1
  239. package/build-module/image/deprecated.js +454 -176
  240. package/build-module/image/deprecated.js.map +1 -1
  241. package/build-module/image/edit.js +0 -4
  242. package/build-module/image/edit.js.map +1 -1
  243. package/build-module/image/image.js +96 -46
  244. package/build-module/image/image.js.map +1 -1
  245. package/build-module/image/index.js +6 -0
  246. package/build-module/image/index.js.map +1 -1
  247. package/build-module/image/save.js +8 -1
  248. package/build-module/image/save.js.map +1 -1
  249. package/build-module/image/utils.js +16 -0
  250. package/build-module/image/utils.js.map +1 -1
  251. package/build-module/image/{interactivity.js → view-interactivity.js} +86 -44
  252. package/build-module/image/view-interactivity.js.map +1 -0
  253. package/build-module/index.js +12 -3
  254. package/build-module/index.js.map +1 -1
  255. package/build-module/latest-comments/edit.js +1 -0
  256. package/build-module/latest-comments/edit.js.map +1 -1
  257. package/build-module/latest-posts/edit.js +2 -0
  258. package/build-module/latest-posts/edit.js.map +1 -1
  259. package/build-module/list/edit.js +4 -4
  260. package/build-module/list/edit.js.map +1 -1
  261. package/build-module/list/index.js +5 -1
  262. package/build-module/list/index.js.map +1 -1
  263. package/build-module/list-item/utils.js +6 -1
  264. package/build-module/list-item/utils.js.map +1 -1
  265. package/build-module/media-text/index.js +1 -0
  266. package/build-module/media-text/index.js.map +1 -1
  267. package/build-module/media-text/media-container.native.js +2 -1
  268. package/build-module/media-text/media-container.native.js.map +1 -1
  269. package/build-module/missing/edit.js +22 -8
  270. package/build-module/missing/edit.js.map +1 -1
  271. package/build-module/missing/edit.native.js +8 -6
  272. package/build-module/missing/edit.native.js.map +1 -1
  273. package/build-module/navigation/constants.js +8 -3
  274. package/build-module/navigation/constants.js.map +1 -1
  275. package/build-module/navigation/edit/index.js +18 -4
  276. package/build-module/navigation/edit/index.js.map +1 -1
  277. package/build-module/navigation/edit/inner-blocks.js +2 -2
  278. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  279. package/build-module/navigation/edit/menu-inspector-controls.js +0 -1
  280. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  281. package/build-module/navigation/edit/unsaved-inner-blocks.js +2 -2
  282. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  283. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -14
  284. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  285. package/build-module/navigation/use-navigation-menu.js +35 -47
  286. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  287. package/build-module/navigation/view-interactivity.js +182 -0
  288. package/build-module/navigation/view-interactivity.js.map +1 -0
  289. package/build-module/navigation-link/edit.js +13 -19
  290. package/build-module/navigation-link/edit.js.map +1 -1
  291. package/build-module/navigation-link/link-ui.js +13 -3
  292. package/build-module/navigation-link/link-ui.js.map +1 -1
  293. package/build-module/navigation-submenu/edit.js +2 -2
  294. package/build-module/navigation-submenu/edit.js.map +1 -1
  295. package/build-module/page-list/convert-to-links-modal.js +3 -3
  296. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  297. package/build-module/page-list/edit.js +34 -39
  298. package/build-module/page-list/edit.js.map +1 -1
  299. package/build-module/page-list/use-convert-to-navigation-links.js +3 -16
  300. package/build-module/page-list/use-convert-to-navigation-links.js.map +1 -1
  301. package/build-module/paragraph/index.js +1 -0
  302. package/build-module/paragraph/index.js.map +1 -1
  303. package/build-module/paragraph/transforms.js +1 -0
  304. package/build-module/paragraph/transforms.js.map +1 -1
  305. package/build-module/post-comments-form/index.js +1 -0
  306. package/build-module/post-comments-form/index.js.map +1 -1
  307. package/build-module/post-navigation-link/index.js +1 -0
  308. package/build-module/post-navigation-link/index.js.map +1 -1
  309. package/build-module/post-time-to-read/index.js +5 -1
  310. package/build-module/post-time-to-read/index.js.map +1 -1
  311. package/build-module/query-pagination/edit.js +1 -1
  312. package/build-module/query-pagination/edit.js.map +1 -1
  313. package/build-module/query-pagination-numbers/index.js +1 -1
  314. package/build-module/query-title/edit.js +44 -3
  315. package/build-module/query-title/edit.js.map +1 -1
  316. package/build-module/quote/index.js +1 -0
  317. package/build-module/quote/index.js.map +1 -1
  318. package/build-module/quote/transforms.js +8 -0
  319. package/build-module/quote/transforms.js.map +1 -1
  320. package/build-module/rss/edit.js +3 -0
  321. package/build-module/rss/edit.js.map +1 -1
  322. package/build-module/search/edit.js +4 -3
  323. package/build-module/search/edit.js.map +1 -1
  324. package/build-module/search/index.js +1 -0
  325. package/build-module/search/index.js.map +1 -1
  326. package/build-module/site-logo/edit.js +1 -0
  327. package/build-module/site-logo/edit.js.map +1 -1
  328. package/build-module/site-logo/index.js +5 -1
  329. package/build-module/site-logo/index.js.map +1 -1
  330. package/build-module/site-tagline/icon.js +1 -1
  331. package/build-module/site-tagline/icon.js.map +1 -1
  332. package/build-module/site-tagline/index.js +5 -1
  333. package/build-module/site-tagline/index.js.map +1 -1
  334. package/build-module/site-title/index.js +5 -1
  335. package/build-module/site-title/index.js.map +1 -1
  336. package/build-module/social-links/index.js +3 -1
  337. package/build-module/social-links/index.js.map +1 -1
  338. package/build-module/table/index.js +5 -1
  339. package/build-module/table/index.js.map +1 -1
  340. package/build-module/tag-cloud/edit.js +1 -0
  341. package/build-module/tag-cloud/edit.js.map +1 -1
  342. package/build-module/template-part/edit/index.js +1 -1
  343. package/build-module/template-part/edit/index.js.map +1 -1
  344. package/build-module/term-description/index.js +1 -0
  345. package/build-module/term-description/index.js.map +1 -1
  346. package/build-module/text-columns/edit.js +1 -0
  347. package/build-module/text-columns/edit.js.map +1 -1
  348. package/build-module/verse/index.js +5 -1
  349. package/build-module/verse/index.js.map +1 -1
  350. package/build-module/video/deprecated.js +5 -1
  351. package/build-module/video/deprecated.js.map +1 -1
  352. package/build-module/video/index.js +5 -1
  353. package/build-module/video/index.js.map +1 -1
  354. package/build-style/details/style-rtl.css +4 -2
  355. package/build-style/details/style.css +4 -2
  356. package/build-style/footnotes/style-rtl.css +4 -3
  357. package/build-style/footnotes/style.css +4 -3
  358. package/build-style/image/style-rtl.css +16 -2
  359. package/build-style/image/style.css +16 -2
  360. package/build-style/navigation/style-rtl.css +14 -2
  361. package/build-style/navigation/style.css +14 -2
  362. package/build-style/query-pagination/style-rtl.css +4 -2
  363. package/build-style/query-pagination/style.css +4 -2
  364. package/build-style/style-rtl.css +42 -11
  365. package/build-style/style.css +42 -11
  366. package/package.json +33 -37
  367. package/src/archives/block.json +5 -1
  368. package/src/audio/block.json +5 -1
  369. package/src/audio/test/__snapshots__/edit.native.js.snap +58 -33
  370. package/src/avatar/block.json +1 -1
  371. package/src/avatar/edit.js +1 -0
  372. package/src/block/block.json +2 -1
  373. package/src/block/edit.js +2 -2
  374. package/src/block/edit.native.js +8 -12
  375. package/src/block/editor.native.scss +2 -2
  376. package/src/block/test/edit.native.js +4 -4
  377. package/src/buttons/edit.js +4 -4
  378. package/src/categories/block.json +5 -1
  379. package/src/code/block.json +5 -1
  380. package/src/column/block.json +1 -0
  381. package/src/column/edit.native.js +4 -10
  382. package/src/column/editor.native.scss +0 -4
  383. package/src/columns/edit.js +1 -0
  384. package/src/comment-author-avatar/edit.js +1 -0
  385. package/src/comment-template/index.php +5 -2
  386. package/src/comments/block.json +1 -0
  387. package/src/cover/block.json +1 -0
  388. package/src/cover/deprecated.js +2 -0
  389. package/src/cover/edit/inspector-controls.js +1 -0
  390. package/src/details/block.json +5 -1
  391. package/src/embed/embed-placeholder.native.js +80 -47
  392. package/src/embed/styles.native.scss +54 -18
  393. package/src/embed/test/index.native.js +5 -5
  394. package/src/embed/util.js +4 -6
  395. package/src/file/index.php +4 -3
  396. package/src/file/inspector.js +1 -0
  397. package/src/file/test/__snapshots__/edit.native.js.snap +58 -33
  398. package/src/file/{interactivity.js → view-interactivity.js} +4 -1
  399. package/src/footnotes/block.json +0 -1
  400. package/src/footnotes/edit.js +21 -2
  401. package/src/footnotes/format.js +22 -20
  402. package/src/footnotes/index.php +11 -9
  403. package/src/footnotes/style.scss +6 -3
  404. package/src/gallery/block.json +3 -1
  405. package/src/gallery/edit.js +1 -1
  406. package/src/gallery/test/index.native.js +17 -16
  407. package/src/group/block.json +1 -0
  408. package/src/heading/block.json +5 -1
  409. package/src/heading/test/index.native.js +18 -0
  410. package/src/home-link/index.php +15 -2
  411. package/src/image/block.json +6 -0
  412. package/src/image/deprecated.js +597 -320
  413. package/src/image/edit.js +0 -4
  414. package/src/image/image.js +131 -62
  415. package/src/image/index.php +47 -8
  416. package/src/image/save.js +9 -1
  417. package/src/image/style.scss +15 -2
  418. package/src/image/test/edit.native.js +1 -1
  419. package/src/image/utils.js +16 -0
  420. package/src/image/{interactivity.js → view-interactivity.js} +99 -50
  421. package/src/index.js +18 -1
  422. package/src/latest-comments/edit.js +1 -0
  423. package/src/latest-posts/edit.js +2 -0
  424. package/src/latest-posts/index.php +1 -1
  425. package/src/list/block.json +5 -1
  426. package/src/list/edit.js +6 -4
  427. package/src/list/test/edit.native.js +129 -33
  428. package/src/media-text/block.json +1 -0
  429. package/src/media-text/media-container.native.js +1 -0
  430. package/src/missing/edit.js +31 -11
  431. package/src/missing/edit.native.js +12 -10
  432. package/src/missing/style.native.scss +19 -12
  433. package/src/missing/test/__snapshots__/edit.native.js.snap +21 -13
  434. package/src/navigation/constants.js +12 -6
  435. package/src/navigation/edit/index.js +30 -3
  436. package/src/navigation/edit/inner-blocks.js +2 -2
  437. package/src/navigation/edit/menu-inspector-controls.js +0 -1
  438. package/src/navigation/edit/unsaved-inner-blocks.js +2 -2
  439. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +17 -21
  440. package/src/navigation/index.php +43 -16
  441. package/src/navigation/style.scss +27 -8
  442. package/src/navigation/use-navigation-menu.js +39 -63
  443. package/src/navigation/view-interactivity.js +196 -0
  444. package/src/navigation-link/edit.js +61 -61
  445. package/src/navigation-link/link-ui.js +14 -2
  446. package/src/navigation-submenu/edit.js +2 -2
  447. package/src/navigation-submenu/index.php +2 -12
  448. package/src/page-list/convert-to-links-modal.js +3 -3
  449. package/src/page-list/edit.js +65 -62
  450. package/src/page-list/use-convert-to-navigation-links.js +3 -20
  451. package/src/paragraph/block.json +1 -0
  452. package/src/paragraph/test/__snapshots__/edit.native.js.snap +1 -0
  453. package/src/paragraph/test/edit.native.js +26 -0
  454. package/src/post-comments-form/block.json +1 -0
  455. package/src/post-navigation-link/block.json +1 -0
  456. package/src/post-template/index.php +4 -2
  457. package/src/post-time-to-read/block.json +5 -1
  458. package/src/post-title/index.php +6 -3
  459. package/src/preformatted/test/__snapshots__/edit.native.js.snap +2 -0
  460. package/src/query-pagination/edit.js +17 -14
  461. package/src/query-pagination-numbers/block.json +1 -1
  462. package/src/query-title/edit.js +48 -6
  463. package/src/quote/block.json +1 -0
  464. package/src/quote/test/__snapshots__/transforms.native.js.snap +10 -0
  465. package/src/quote/test/transforms.native.js +5 -1
  466. package/src/quote/transforms.js +13 -0
  467. package/src/rss/edit.js +3 -0
  468. package/src/search/block.json +1 -0
  469. package/src/search/edit.js +4 -3
  470. package/src/search/index.php +22 -4
  471. package/src/search/test/__snapshots__/edit.native.js.snap +7 -0
  472. package/src/site-logo/block.json +5 -1
  473. package/src/site-logo/edit.js +1 -0
  474. package/src/site-tagline/block.json +5 -1
  475. package/src/site-tagline/icon.js +1 -1
  476. package/src/site-title/block.json +5 -1
  477. package/src/social-links/block.json +3 -1
  478. package/src/table/block.json +5 -1
  479. package/src/tag-cloud/edit.js +1 -0
  480. package/src/template-part/edit/index.js +1 -1
  481. package/src/template-part/index.php +9 -15
  482. package/src/term-description/block.json +1 -0
  483. package/src/text-columns/edit.js +1 -0
  484. package/src/verse/block.json +5 -1
  485. package/src/video/block.json +5 -1
  486. package/build/file/interactivity.js.map +0 -1
  487. package/build/gallery/shared-icon.native.js +0 -38
  488. package/build/gallery/shared-icon.native.js.map +0 -1
  489. package/build/heading/heading-level-icon.js +0 -61
  490. package/build/heading/heading-level-icon.js.map +0 -1
  491. package/build/image/interactivity.js.map +0 -1
  492. package/build/navigation/interactivity.js +0 -167
  493. package/build/navigation/interactivity.js.map +0 -1
  494. package/build/utils/interactivity/constants.js +0 -9
  495. package/build/utils/interactivity/constants.js.map +0 -1
  496. package/build/utils/interactivity/directives.js +0 -222
  497. package/build/utils/interactivity/directives.js.map +0 -1
  498. package/build/utils/interactivity/hooks.js +0 -159
  499. package/build/utils/interactivity/hooks.js.map +0 -1
  500. package/build/utils/interactivity/hydration.js +0 -34
  501. package/build/utils/interactivity/hydration.js.map +0 -1
  502. package/build/utils/interactivity/index.js +0 -32
  503. package/build/utils/interactivity/index.js.map +0 -1
  504. package/build/utils/interactivity/portals.js +0 -108
  505. package/build/utils/interactivity/portals.js.map +0 -1
  506. package/build/utils/interactivity/store.js +0 -66
  507. package/build/utils/interactivity/store.js.map +0 -1
  508. package/build/utils/interactivity/utils.js +0 -87
  509. package/build/utils/interactivity/utils.js.map +0 -1
  510. package/build/utils/interactivity/vdom.js +0 -119
  511. package/build/utils/interactivity/vdom.js.map +0 -1
  512. package/build-module/file/interactivity.js.map +0 -1
  513. package/build-module/gallery/shared-icon.native.js +0 -24
  514. package/build-module/gallery/shared-icon.native.js.map +0 -1
  515. package/build-module/heading/heading-level-icon.js +0 -53
  516. package/build-module/heading/heading-level-icon.js.map +0 -1
  517. package/build-module/image/interactivity.js.map +0 -1
  518. package/build-module/navigation/interactivity.js +0 -164
  519. package/build-module/navigation/interactivity.js.map +0 -1
  520. package/build-module/utils/interactivity/constants.js +0 -2
  521. package/build-module/utils/interactivity/constants.js.map +0 -1
  522. package/build-module/utils/interactivity/directives.js +0 -209
  523. package/build-module/utils/interactivity/directives.js.map +0 -1
  524. package/build-module/utils/interactivity/hooks.js +0 -145
  525. package/build-module/utils/interactivity/hooks.js.map +0 -1
  526. package/build-module/utils/interactivity/hydration.js +0 -21
  527. package/build-module/utils/interactivity/hydration.js.map +0 -1
  528. package/build-module/utils/interactivity/index.js +0 -15
  529. package/build-module/utils/interactivity/index.js.map +0 -1
  530. package/build-module/utils/interactivity/portals.js +0 -100
  531. package/build-module/utils/interactivity/portals.js.map +0 -1
  532. package/build-module/utils/interactivity/store.js +0 -55
  533. package/build-module/utils/interactivity/store.js.map +0 -1
  534. package/build-module/utils/interactivity/utils.js +0 -75
  535. package/build-module/utils/interactivity/utils.js.map +0 -1
  536. package/build-module/utils/interactivity/vdom.js +0 -107
  537. package/build-module/utils/interactivity/vdom.js.map +0 -1
  538. package/src/gallery/shared-icon.native.js +0 -23
  539. package/src/heading/heading-level-icon.js +0 -48
  540. package/src/navigation/interactivity.js +0 -169
  541. package/src/utils/interactivity/constants.js +0 -1
  542. package/src/utils/interactivity/directives.js +0 -200
  543. package/src/utils/interactivity/hooks.js +0 -145
  544. package/src/utils/interactivity/hydration.js +0 -22
  545. package/src/utils/interactivity/index.js +0 -15
  546. package/src/utils/interactivity/portals.js +0 -98
  547. package/src/utils/interactivity/store.js +0 -45
  548. package/src/utils/interactivity/utils.js +0 -66
  549. package/src/utils/interactivity/vdom.js +0 -111
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Internal dependencies
2
+ * WordPress dependencies
3
3
  */
4
- import { store } from '../utils/interactivity';
4
+ import { store } from '@wordpress/interactivity';
5
5
 
6
6
  const focusableSelectors = [
7
7
  'a[href]',
@@ -22,32 +22,43 @@ store( {
22
22
  core: {
23
23
  image: {
24
24
  showLightbox: ( { context, event } ) => {
25
+ // We can't initialize the lightbox until the reference
26
+ // image is loaded, otherwise the UX is broken.
27
+ if ( ! context.core.image.imageLoaded ) {
28
+ return;
29
+ }
25
30
  context.core.image.initialized = true;
26
31
  context.core.image.lastFocusedElement =
27
32
  window.document.activeElement;
28
33
  context.core.image.scrollDelta = 0;
29
34
 
35
+ context.core.image.lightboxEnabled = true;
36
+ if ( context.core.image.lightboxAnimation === 'zoom' ) {
37
+ setZoomStyles(
38
+ event.target.nextElementSibling,
39
+ context,
40
+ event
41
+ );
42
+ }
43
+ // Hide overflow only when the animation is in progress,
44
+ // otherwise the removal of the scrollbars will draw attention
45
+ // to itself and look like an error
46
+ document.documentElement.classList.add(
47
+ 'has-lightbox-open'
48
+ );
49
+
30
50
  // Since the img is hidden and its src not loaded until
31
51
  // the lightbox is opened, let's create an img element on the fly
32
52
  // so we can get the dimensions we need to calculate the styles
53
+ context.core.image.preloadInitialized = true;
33
54
  const imgDom = document.createElement( 'img' );
34
-
35
55
  imgDom.onload = function () {
36
- // Enable the lightbox only after the image
37
- // is loaded to prevent flashing of unstyled content
38
- context.core.image.lightboxEnabled = true;
39
- if ( context.core.image.lightboxAnimation === 'zoom' ) {
40
- setZoomStyles( imgDom, context, event );
41
- }
42
-
43
- // Hide overflow only when the animation is in progress,
44
- // otherwise the removal of the scrollbars will draw attention
45
- // to itself and look like an error
46
- document.documentElement.classList.add(
47
- 'has-lightbox-open'
48
- );
56
+ context.core.image.activateLargeImage = true;
49
57
  };
50
- imgDom.setAttribute( 'src', context.core.image.imageSrc );
58
+ imgDom.setAttribute(
59
+ 'src',
60
+ context.core.image.imageUploadedSrc
61
+ );
51
62
  },
52
63
  hideLightbox: async ( { context, event } ) => {
53
64
  context.core.image.hideAnimationEnabled = true;
@@ -122,6 +133,16 @@ store( {
122
133
  }
123
134
  }
124
135
  },
136
+ preloadLightboxImage: ( { context } ) => {
137
+ if ( ! context.core.image.preloadInitialized ) {
138
+ context.core.image.preloadInitialized = true;
139
+ const imgDom = document.createElement( 'img' );
140
+ imgDom.setAttribute(
141
+ 'src',
142
+ context.core.image.imageUploadedSrc
143
+ );
144
+ }
145
+ },
125
146
  },
126
147
  },
127
148
  },
@@ -131,9 +152,15 @@ store( {
131
152
  roleAttribute: ( { context } ) => {
132
153
  return context.core.image.lightboxEnabled ? 'dialog' : '';
133
154
  },
134
- imageSrc: ( { context } ) => {
155
+ responsiveImgSrc: ( { context } ) => {
156
+ return context.core.image.activateLargeImage &&
157
+ context.core.image.hideAnimationEnabled
158
+ ? ''
159
+ : context.core.image.imageCurrentSrc;
160
+ },
161
+ enlargedImgSrc: ( { context } ) => {
135
162
  return context.core.image.initialized
136
- ? context.core.image.imageSrc
163
+ ? context.core.image.imageUploadedSrc
137
164
  : '';
138
165
  },
139
166
  },
@@ -142,6 +169,18 @@ store( {
142
169
  effects: {
143
170
  core: {
144
171
  image: {
172
+ setCurrentSrc: ( { context, ref } ) => {
173
+ if ( ref.complete ) {
174
+ context.core.image.imageLoaded = true;
175
+ context.core.image.imageCurrentSrc = ref.currentSrc;
176
+ } else {
177
+ ref.addEventListener( 'load', function () {
178
+ context.core.image.imageLoaded = true;
179
+ context.core.image.imageCurrentSrc =
180
+ this.currentSrc;
181
+ } );
182
+ }
183
+ },
145
184
  initLightbox: async ( { context, ref } ) => {
146
185
  context.core.image.figureRef =
147
186
  ref.querySelector( 'figure' );
@@ -163,51 +202,61 @@ store( {
163
202
  } );
164
203
 
165
204
  function setZoomStyles( imgDom, context, event ) {
166
- let targetWidth = imgDom.naturalWidth;
167
- let targetHeight = imgDom.naturalHeight;
205
+ // Typically, we use the image's full-sized dimensions. If those
206
+ // dimensions have not been set (i.e. an external image with only one size),
207
+ // the image's dimensions in the lightbox are the same
208
+ // as those of the image in the content.
209
+ let targetWidth =
210
+ context.core.image.targetWidth !== 'none'
211
+ ? context.core.image.targetWidth
212
+ : event.target.nextElementSibling.naturalWidth;
213
+ let targetHeight =
214
+ context.core.image.targetHeight !== 'none'
215
+ ? context.core.image.targetHeight
216
+ : event.target.nextElementSibling.naturalHeight;
168
217
 
169
- const verticalPadding = 40;
218
+ // Since the lightbox image has `position:absolute`, it
219
+ // ignores its parent's padding, so we need to set padding here
220
+ // to calculate dimensions and positioning.
170
221
 
171
- // As per the design, let's allow the image to stretch
172
- // to the full width of its containing figure, but for the height,
173
- // constrain it with a fixed padding
174
- const containerWidth = context.core.image.figureRef.clientWidth;
222
+ // As per the design, let's constrain the height with fixed padding
223
+ const containerOuterHeight = window.innerHeight;
224
+ const verticalPadding = 40;
225
+ const containerInnerHeight = containerOuterHeight - verticalPadding * 2;
175
226
 
176
- // The lightbox image has `positione:absolute` and
177
- // ignores its parent's padding, so let's set the padding here,
178
- // to be used when calculating the image width and positioning
227
+ // Let's set a variable horizontal padding based on the container width
228
+ const containerOuterWidth = window.innerWidth;
179
229
  let horizontalPadding = 0;
180
- if ( containerWidth > 480 ) {
230
+ if ( containerOuterWidth > 480 ) {
181
231
  horizontalPadding = 40;
182
- } else if ( containerWidth > 1920 ) {
232
+ } else if ( containerOuterWidth > 1920 ) {
183
233
  horizontalPadding = 80;
184
234
  }
185
-
186
- const containerHeight =
187
- context.core.image.figureRef.clientHeight - verticalPadding * 2;
235
+ const containerInnerWidth = containerOuterWidth - horizontalPadding * 2;
188
236
 
189
237
  // Check difference between the image and figure dimensions
190
238
  const widthOverflow = Math.abs(
191
- Math.min( containerWidth - targetWidth, 0 )
239
+ Math.min( containerInnerWidth - targetWidth, 0 )
192
240
  );
193
241
  const heightOverflow = Math.abs(
194
- Math.min( containerHeight - targetHeight, 0 )
242
+ Math.min( containerInnerHeight - targetHeight, 0 )
195
243
  );
196
244
 
197
- // If image is larger than its container any dimension, resize along its largest axis.
198
- // For vertically oriented devices, always maximize the width.
245
+ // If the image is larger than the container, let's resize
246
+ // it along the greater axis relative to the container
199
247
  if ( widthOverflow > 0 || heightOverflow > 0 ) {
200
- if (
201
- widthOverflow >= heightOverflow ||
202
- containerHeight >= containerWidth
203
- ) {
204
- targetWidth = containerWidth - horizontalPadding * 2;
248
+ const containerInnerAspectRatio =
249
+ containerInnerWidth / containerInnerHeight;
250
+ const imageAspectRatio = targetWidth / targetHeight;
251
+
252
+ if ( imageAspectRatio > containerInnerAspectRatio ) {
253
+ targetWidth = containerInnerWidth;
205
254
  targetHeight =
206
- imgDom.naturalHeight * ( targetWidth / imgDom.naturalWidth );
255
+ ( targetWidth * imgDom.naturalHeight ) / imgDom.naturalWidth;
207
256
  } else {
208
- targetHeight = containerHeight;
257
+ targetHeight = containerInnerHeight;
209
258
  targetWidth =
210
- imgDom.naturalWidth * ( targetHeight / imgDom.naturalHeight );
259
+ ( targetHeight * imgDom.naturalWidth ) / imgDom.naturalHeight;
211
260
  }
212
261
  }
213
262
 
@@ -221,16 +270,16 @@ function setZoomStyles( imgDom, context, event ) {
221
270
 
222
271
  // Get values used to center the image
223
272
  let targetLeft = 0;
224
- if ( targetWidth >= containerWidth ) {
273
+ if ( targetWidth >= containerInnerWidth ) {
225
274
  targetLeft = horizontalPadding;
226
275
  } else {
227
- targetLeft = ( containerWidth - targetWidth ) / 2;
276
+ targetLeft = ( containerOuterWidth - targetWidth ) / 2;
228
277
  }
229
278
  let targetTop = 0;
230
- if ( targetHeight >= containerHeight ) {
279
+ if ( targetHeight >= containerInnerHeight ) {
231
280
  targetTop = verticalPadding;
232
281
  } else {
233
- targetTop = ( containerHeight - targetHeight ) / 2 + verticalPadding;
282
+ targetTop = ( containerOuterHeight - targetHeight ) / 2;
234
283
  }
235
284
 
236
285
  const root = document.documentElement;
package/src/index.js CHANGED
@@ -142,7 +142,6 @@ const getAllBlocks = () => {
142
142
  buttons,
143
143
  calendar,
144
144
  categories,
145
- ...( window.wp && window.wp.oldEditor ? [ classic ] : [] ), // Only add the classic block in WP Context.
146
145
  code,
147
146
  column,
148
147
  columns,
@@ -229,6 +228,24 @@ const getAllBlocks = () => {
229
228
  queryTitle,
230
229
  postAuthorBiography,
231
230
  ];
231
+
232
+ // When in a WordPress context, conditionally
233
+ // add the classic block and TinyMCE editor
234
+ // under any of the following conditions:
235
+ // - the current post contains a classic block
236
+ // - the experiment to disable TinyMCE isn't active.
237
+ // - a query argument specifies that TinyMCE should be loaded
238
+ if (
239
+ window?.wp?.oldEditor &&
240
+ ( window?.wp?.needsClassicBlock ||
241
+ ! window?.__experimentalDisableTinymce ||
242
+ !! new URLSearchParams( window?.location?.search ).get(
243
+ 'requiresTinymce'
244
+ ) )
245
+ ) {
246
+ blocks.push( classic );
247
+ }
248
+
232
249
  return blocks.filter( Boolean );
233
250
  };
234
251
 
@@ -68,6 +68,7 @@ export default function LatestComments( { attributes, setAttributes } ) {
68
68
  />
69
69
  <RangeControl
70
70
  __nextHasNoMarginBottom
71
+ __next40pxDefaultSize
71
72
  label={ __( 'Number of comments' ) }
72
73
  value={ commentsToShow }
73
74
  onChange={ ( value ) =>
@@ -230,6 +230,7 @@ export default function LatestPostsEdit( { attributes, setAttributes } ) {
230
230
  displayPostContentRadio === 'excerpt' && (
231
231
  <RangeControl
232
232
  __nextHasNoMarginBottom
233
+ __next40pxDefaultSize
233
234
  label={ __( 'Max number of words' ) }
234
235
  value={ excerptLength }
235
236
  onChange={ ( value ) =>
@@ -359,6 +360,7 @@ export default function LatestPostsEdit( { attributes, setAttributes } ) {
359
360
  { postLayout === 'grid' && (
360
361
  <RangeControl
361
362
  __nextHasNoMarginBottom
363
+ __next40pxDefaultSize
362
364
  label={ __( 'Columns' ) }
363
365
  value={ columns }
364
366
  onChange={ ( value ) =>
@@ -51,7 +51,7 @@ function render_block_core_latest_posts( $attributes ) {
51
51
  $filter_latest_posts_excerpt_more = static function( $more ) use ( $attributes ) {
52
52
  $use_excerpt = 'excerpt' === $attributes['displayPostContentRadio'];
53
53
  /* translators: %1$s is a URL to a post, excerpt truncation character, default … */
54
- return $use_excerpt ? sprintf( __( ' … <a href="%1$s" rel="noopener noreferrer">Read more</a>', 'gutenberg' ), esc_url( get_permalink() ) ) : $more;
54
+ return $use_excerpt ? sprintf( __( ' … <a href="%1$s" rel="noopener noreferrer">Read more</a>' ), esc_url( get_permalink() ) ) : $more;
55
55
  };
56
56
 
57
57
  add_filter( 'excerpt_more', $filter_latest_posts_excerpt_more );
@@ -61,7 +61,11 @@
61
61
  },
62
62
  "spacing": {
63
63
  "margin": true,
64
- "padding": true
64
+ "padding": true,
65
+ "__experimentalDefaultControls": {
66
+ "margin": false,
67
+ "padding": false
68
+ }
65
69
  },
66
70
  "__unstablePasteTextInline": true,
67
71
  "__experimentalSelector": "ol,ul",
package/src/list/edit.js CHANGED
@@ -177,10 +177,12 @@ export default function Edit( { attributes, setAttributes, clientId, style } ) {
177
177
  { controls }
178
178
  { ordered && (
179
179
  <OrderedListSettings
180
- setAttributes={ setAttributes }
181
- ordered={ ordered }
182
- reversed={ reversed }
183
- start={ start }
180
+ { ...{
181
+ setAttributes,
182
+ reversed,
183
+ start,
184
+ type,
185
+ } }
184
186
  />
185
187
  ) }
186
188
  </>
@@ -19,7 +19,7 @@ import {
19
19
  */
20
20
  import { getBlockTypes, unregisterBlockType } from '@wordpress/blocks';
21
21
  import { registerCoreBlocks } from '@wordpress/block-library';
22
- import { BACKSPACE } from '@wordpress/keycodes';
22
+ import { BACKSPACE, ENTER } from '@wordpress/keycodes';
23
23
 
24
24
  describe( 'List block', () => {
25
25
  beforeAll( () => {
@@ -338,34 +338,125 @@ describe( 'List block', () => {
338
338
  expect( getEditorHtml() ).toMatchSnapshot();
339
339
  } );
340
340
 
341
- it( 'merges with other lists', async () => {
341
+ it( 'splits empty list items into paragraphs', async () => {
342
+ // Arrange
342
343
  const initialHtml = `<!-- wp:list -->
343
344
  <ul><!-- wp:list-item -->
344
- <li>One</li><!-- /wp:list-item --></ul>
345
- <!-- /wp:list --><!-- wp:list -->
346
- <ul><!-- wp:list-item -->
345
+ <li>One</li><!-- /wp:list-item -->
346
+ <!-- wp:list-item -->
347
347
  <li>Two</li><!-- /wp:list-item --></ul>
348
348
  <!-- /wp:list -->`;
349
+ const screen = await initializeEditor( { initialHtml } );
349
350
 
350
- const screen = await initializeEditor( {
351
- initialHtml,
352
- } );
353
-
354
- // Select List block
355
- const [ listBlock ] = screen.getAllByLabelText( /List Block\. Row 2/ );
351
+ // Act
352
+ const listBlock = screen.getByLabelText( /List Block\. Row 1/ );
356
353
  fireEvent.press( listBlock );
357
354
  await triggerBlockListLayout( listBlock );
355
+ const listItemField = screen.getByLabelText( /Text input. .*One.*/ );
356
+ selectRangeInRichText( listItemField, 3 );
357
+ fireEvent( listItemField, 'onKeyDown', {
358
+ nativeEvent: {},
359
+ preventDefault() {},
360
+ keyCode: ENTER,
361
+ } );
362
+ const listItemField2 = screen.getByLabelText( /Text input. Empty/ );
363
+ fireEvent( listItemField2, 'onKeyDown', {
364
+ nativeEvent: {},
365
+ preventDefault() {},
366
+ keyCode: ENTER,
367
+ } );
358
368
 
359
- // Select List Item block
360
- const [ listItemBlock ] = within( listBlock ).getAllByLabelText(
361
- /List item Block\. Row 1/
362
- );
363
- fireEvent.press( listItemBlock );
369
+ // Assert
370
+ expect( getEditorHtml() ).toMatchInlineSnapshot( `
371
+ "<!-- wp:list -->
372
+ <ul><!-- wp:list-item -->
373
+ <li>One</li>
374
+ <!-- /wp:list-item --></ul>
375
+ <!-- /wp:list -->
364
376
 
365
- // With cursor positioned at the beginning of the first List Item, press
366
- // backward delete
367
- const listItemField =
368
- within( listItemBlock ).getByLabelText( /Text input. .*Two.*/ );
377
+ <!-- wp:paragraph -->
378
+ <p></p>
379
+ <!-- /wp:paragraph -->
380
+
381
+ <!-- wp:list -->
382
+ <ul><!-- wp:list-item -->
383
+ <li>Two</li>
384
+ <!-- /wp:list-item --></ul>
385
+ <!-- /wp:list -->"
386
+ ` );
387
+ } );
388
+
389
+ it( 'merges paragraphs into list items', async () => {
390
+ const initialHtml = `<!-- wp:list -->
391
+ <ul><!-- wp:list-item -->
392
+ <li>One</li>
393
+ <!-- /wp:list-item --></ul>
394
+ <!-- /wp:list -->
395
+
396
+ <!-- wp:paragraph -->
397
+ <p>Two</p>
398
+ <!-- /wp:paragraph -->
399
+
400
+ <!-- wp:list -->
401
+ <ul><!-- wp:list-item -->
402
+ <li>Three</li>
403
+ <!-- /wp:list-item --></ul>
404
+ <!-- /wp:list -->`;
405
+ const screen = await initializeEditor( { initialHtml } );
406
+
407
+ // Act
408
+ const paragraphField = screen.getByLabelText( /Text input. .*Two.*/ );
409
+ selectRangeInRichText( paragraphField, 0 );
410
+ fireEvent( paragraphField, 'onKeyDown', {
411
+ nativeEvent: {},
412
+ preventDefault() {},
413
+ keyCode: BACKSPACE,
414
+ } );
415
+
416
+ // Assert
417
+ expect( getEditorHtml() ).toMatchInlineSnapshot( `
418
+ "<!-- wp:list -->
419
+ <ul><!-- wp:list-item -->
420
+ <li>One</li>
421
+ <!-- /wp:list-item -->
422
+
423
+ <!-- wp:list-item -->
424
+ <li>Two</li>
425
+ <!-- /wp:list-item --></ul>
426
+ <!-- /wp:list -->
427
+
428
+ <!-- wp:list -->
429
+ <ul><!-- wp:list-item -->
430
+ <li>Three</li>
431
+ <!-- /wp:list-item --></ul>
432
+ <!-- /wp:list -->"
433
+ ` );
434
+ } );
435
+
436
+ it( 'merges lists into lists', async () => {
437
+ // Arrange
438
+ const initialHtml = `<!-- wp:list -->
439
+ <ul><!-- wp:list-item -->
440
+ <li>One</li>
441
+ <!-- /wp:list-item -->
442
+
443
+ <!-- wp:list-item -->
444
+ <li>Two</li>
445
+ <!-- /wp:list-item --></ul>
446
+ <!-- /wp:list -->
447
+
448
+ <!-- wp:list -->
449
+ <ul><!-- wp:list-item -->
450
+ <li>Three</li>
451
+ <!-- /wp:list-item --></ul>
452
+ <!-- /wp:list -->`;
453
+ const screen = await initializeEditor( { initialHtml } );
454
+
455
+ // Act
456
+ const listBlock = screen.getByLabelText( /List Block\. Row 2/ );
457
+ fireEvent.press( listBlock );
458
+ await triggerBlockListLayout( listBlock );
459
+ const listItemField = screen.getByLabelText( /Text input\..*Three/ );
369
460
  selectRangeInRichText( listItemField, 0 );
370
461
  fireEvent( listItemField, 'onKeyDown', {
371
462
  nativeEvent: {},
@@ -373,17 +464,22 @@ describe( 'List block', () => {
373
464
  keyCode: BACKSPACE,
374
465
  } );
375
466
 
467
+ // Assert
376
468
  expect( getEditorHtml() ).toMatchInlineSnapshot( `
377
- "<!-- wp:list -->
378
- <ul><!-- wp:list-item -->
379
- <li>One</li>
380
- <!-- /wp:list-item -->
381
-
382
- <!-- wp:list-item -->
383
- <li>Two</li>
384
- <!-- /wp:list-item --></ul>
385
- <!-- /wp:list -->"
386
- ` );
469
+ "<!-- wp:list -->
470
+ <ul><!-- wp:list-item -->
471
+ <li>One</li>
472
+ <!-- /wp:list-item -->
473
+
474
+ <!-- wp:list-item -->
475
+ <li>Two</li>
476
+ <!-- /wp:list-item -->
477
+
478
+ <!-- wp:list-item -->
479
+ <li>Three</li>
480
+ <!-- /wp:list-item --></ul>
481
+ <!-- /wp:list -->"
482
+ ` );
387
483
  } );
388
484
 
389
485
  it( 'unwraps first item when attempting to merge with non-list block', async () => {
@@ -486,16 +582,16 @@ describe( 'List block', () => {
486
582
  "<!-- wp:paragraph -->
487
583
  <p>A quick brown fox.</p>
488
584
  <!-- /wp:paragraph -->
489
-
585
+
490
586
  <!-- wp:paragraph -->
491
587
  <p>One</p>
492
588
  <!-- /wp:paragraph -->
493
-
589
+
494
590
  <!-- wp:list -->
495
591
  <ul><!-- wp:list-item -->
496
592
  <li>Two</li>
497
593
  <!-- /wp:list-item -->
498
-
594
+
499
595
  <!-- wp:list-item -->
500
596
  <li>Three</li>
501
597
  <!-- /wp:list-item --></ul>
@@ -100,6 +100,7 @@
100
100
  "html": false,
101
101
  "color": {
102
102
  "gradients": true,
103
+ "heading": true,
103
104
  "link": true,
104
105
  "__experimentalDefaultControls": {
105
106
  "background": true,
@@ -316,6 +316,7 @@ class MediaContainer extends Component {
316
316
  onSelect={ this.onSelectMediaUploadOption }
317
317
  allowedTypes={ ALLOWED_MEDIA_TYPES }
318
318
  onFocus={ this.props.onFocus }
319
+ className={ 'no-block-outline' }
319
320
  />
320
321
  );
321
322
  }
@@ -16,22 +16,46 @@ import { safeHTML } from '@wordpress/dom';
16
16
  function MissingBlockWarning( { attributes, convertToHTML, clientId } ) {
17
17
  const { originalName, originalUndelimitedContent } = attributes;
18
18
  const hasContent = !! originalUndelimitedContent;
19
- const hasHTMLBlock = useSelect(
19
+ const { hasFreeformBlock, hasHTMLBlock } = useSelect(
20
20
  ( select ) => {
21
21
  const { canInsertBlockType, getBlockRootClientId } =
22
22
  select( blockEditorStore );
23
23
 
24
- return canInsertBlockType(
25
- 'core/html',
26
- getBlockRootClientId( clientId )
27
- );
24
+ return {
25
+ hasFreeformBlock: canInsertBlockType(
26
+ 'core/freeform',
27
+ getBlockRootClientId( clientId )
28
+ ),
29
+ hasHTMLBlock: canInsertBlockType(
30
+ 'core/html',
31
+ getBlockRootClientId( clientId )
32
+ ),
33
+ };
28
34
  },
29
35
  [ clientId ]
30
36
  );
31
37
 
32
38
  const actions = [];
33
39
  let messageHTML;
34
- if ( hasContent && hasHTMLBlock ) {
40
+
41
+ const convertToHtmlButton = (
42
+ <Button key="convert" onClick={ convertToHTML } variant="primary">
43
+ { __( 'Keep as HTML' ) }
44
+ </Button>
45
+ );
46
+
47
+ if ( hasContent && ! hasFreeformBlock && ! originalName ) {
48
+ if ( hasHTMLBlock ) {
49
+ messageHTML = __(
50
+ 'It appears you are trying to use the deprecated Classic block. You can leave this block intact, convert its content to a Custom HTML block, or remove it entirely. Alternatively, you can refresh the page to use the Classic block.'
51
+ );
52
+ actions.push( convertToHtmlButton );
53
+ } else {
54
+ messageHTML = __(
55
+ 'It appears you are trying to use the deprecated Classic block. You can leave this block intact, or remove it entirely. Alternatively, you can refresh the page to use the Classic block.'
56
+ );
57
+ }
58
+ } else if ( hasContent && hasHTMLBlock ) {
35
59
  messageHTML = sprintf(
36
60
  /* translators: %s: block name */
37
61
  __(
@@ -39,11 +63,7 @@ function MissingBlockWarning( { attributes, convertToHTML, clientId } ) {
39
63
  ),
40
64
  originalName
41
65
  );
42
- actions.push(
43
- <Button key="convert" onClick={ convertToHTML } variant="primary">
44
- { __( 'Keep as HTML' ) }
45
- </Button>
46
- );
66
+ actions.push( convertToHtmlButton );
47
67
  } else {
48
68
  messageHTML = sprintf(
49
69
  /* translators: %s: block name */
@@ -5,7 +5,7 @@ import {
5
5
  View,
6
6
  Text,
7
7
  TouchableWithoutFeedback,
8
- TouchableHighlight,
8
+ TouchableOpacity,
9
9
  } from 'react-native';
10
10
 
11
11
  /**
@@ -83,7 +83,7 @@ export class UnsupportedBlockEdit extends Component {
83
83
  );
84
84
 
85
85
  return (
86
- <TouchableHighlight
86
+ <TouchableOpacity
87
87
  onPress={ this.onHelpButtonPressed }
88
88
  style={ styles.helpIconContainer }
89
89
  accessibilityLabel={ __( 'Help button' ) }
@@ -94,9 +94,9 @@ export class UnsupportedBlockEdit extends Component {
94
94
  className="unsupported-icon-help"
95
95
  label={ __( 'Help icon' ) }
96
96
  icon={ help }
97
- color={ infoIconStyle.color }
97
+ fill={ infoIconStyle.color }
98
98
  />
99
- </TouchableHighlight>
99
+ </TouchableOpacity>
100
100
  );
101
101
  }
102
102
 
@@ -282,12 +282,14 @@ export class UnsupportedBlockEdit extends Component {
282
282
  ) }
283
283
  >
284
284
  { this.renderHelpIcon() }
285
- <Icon
286
- className={ iconClassName }
287
- icon={ icon && icon.src ? icon.src : icon }
288
- color={ iconStyle.color }
289
- />
290
- <Text style={ titleStyle }>{ title }</Text>
285
+ <View style={ styles.unsupportedBlockHeader }>
286
+ <Icon
287
+ className={ iconClassName }
288
+ icon={ icon && icon.src ? icon.src : icon }
289
+ fill={ iconStyle.color }
290
+ />
291
+ <Text style={ titleStyle }>{ title }</Text>
292
+ </View>
291
293
  { subtitle }
292
294
  { this.renderSheet( title, originalName ) }
293
295
  </View>