@wordpress/block-library 8.14.0 → 8.16.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 (365) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/avatar/edit.js +1 -0
  3. package/build/avatar/edit.js.map +1 -1
  4. package/build/avatar/index.js +3 -0
  5. package/build/avatar/index.js.map +1 -1
  6. package/build/block/edit.js +2 -30
  7. package/build/block/edit.js.map +1 -1
  8. package/build/block/index.js +2 -1
  9. package/build/block/index.js.map +1 -1
  10. package/build/buttons/edit.js +2 -2
  11. package/build/buttons/edit.js.map +1 -1
  12. package/build/column/edit.native.js +1 -4
  13. package/build/column/edit.native.js.map +1 -1
  14. package/build/columns/edit.js +1 -0
  15. package/build/columns/edit.js.map +1 -1
  16. package/build/comment-author-avatar/edit.js +1 -0
  17. package/build/comment-author-avatar/edit.js.map +1 -1
  18. package/build/cover/deprecated.js +4 -2
  19. package/build/cover/deprecated.js.map +1 -1
  20. package/build/cover/index.js +2 -1
  21. package/build/cover/index.js.map +1 -1
  22. package/build/embed/embed-placeholder.native.js +37 -13
  23. package/build/embed/embed-placeholder.native.js.map +1 -1
  24. package/build/file/index.js +1 -2
  25. package/build/file/index.js.map +1 -1
  26. package/build/file/inspector.js +1 -0
  27. package/build/file/inspector.js.map +1 -1
  28. package/build/file/view-interactivity.js +23 -0
  29. package/build/file/view-interactivity.js.map +1 -0
  30. package/build/file/view.js +1 -15
  31. package/build/file/view.js.map +1 -1
  32. package/build/footnotes/edit.js +31 -1
  33. package/build/footnotes/edit.js.map +1 -1
  34. package/build/footnotes/format.js +119 -23
  35. package/build/footnotes/format.js.map +1 -1
  36. package/build/footnotes/index.js +45 -4
  37. package/build/footnotes/index.js.map +1 -1
  38. package/build/gallery/edit.js +8 -6
  39. package/build/gallery/edit.js.map +1 -1
  40. package/build/image/deprecated.js +106 -2
  41. package/build/image/deprecated.js.map +1 -1
  42. package/build/image/image.js +2 -2
  43. package/build/image/image.js.map +1 -1
  44. package/build/image/index.js +2 -1
  45. package/build/image/index.js.map +1 -1
  46. package/build/index.js +3 -1
  47. package/build/index.js.map +1 -1
  48. package/build/latest-comments/edit.js +1 -0
  49. package/build/latest-comments/edit.js.map +1 -1
  50. package/build/latest-posts/edit.js +2 -0
  51. package/build/latest-posts/edit.js.map +1 -1
  52. package/build/list/edit.js +4 -4
  53. package/build/list/edit.js.map +1 -1
  54. package/build/list-item/hooks/use-merge.js +10 -1
  55. package/build/list-item/hooks/use-merge.js.map +1 -1
  56. package/build/media-text/media-container.native.js +2 -1
  57. package/build/media-text/media-container.native.js.map +1 -1
  58. package/build/missing/edit.native.js +7 -5
  59. package/build/missing/edit.native.js.map +1 -1
  60. package/build/navigation/constants.js +10 -4
  61. package/build/navigation/constants.js.map +1 -1
  62. package/build/navigation/edit/index.js +16 -2
  63. package/build/navigation/edit/index.js.map +1 -1
  64. package/build/navigation/edit/inner-blocks.js +2 -2
  65. package/build/navigation/edit/inner-blocks.js.map +1 -1
  66. package/build/navigation/edit/menu-inspector-controls.js +1 -1
  67. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  68. package/build/navigation/edit/navigation-menu-selector.js +4 -4
  69. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  70. package/build/navigation/edit/unsaved-inner-blocks.js +2 -2
  71. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  72. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -15
  73. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  74. package/build/navigation/index.js +2 -3
  75. package/build/navigation/index.js.map +1 -1
  76. package/build/navigation/use-navigation-menu.js +33 -45
  77. package/build/navigation/use-navigation-menu.js.map +1 -1
  78. package/build/navigation/view-interactivity.js +185 -0
  79. package/build/navigation/view-interactivity.js.map +1 -0
  80. package/build/navigation/view-modal.js +125 -0
  81. package/build/navigation/view-modal.js.map +1 -0
  82. package/build/navigation/view.js +71 -163
  83. package/build/navigation/view.js.map +1 -1
  84. package/build/navigation-link/edit.js +12 -7
  85. package/build/navigation-link/edit.js.map +1 -1
  86. package/build/navigation-submenu/edit.js +2 -2
  87. package/build/navigation-submenu/edit.js.map +1 -1
  88. package/build/pattern/edit.js +28 -4
  89. package/build/pattern/edit.js.map +1 -1
  90. package/build/preformatted/index.js +4 -0
  91. package/build/preformatted/index.js.map +1 -1
  92. package/build/query-pagination/edit.js +1 -1
  93. package/build/query-pagination/edit.js.map +1 -1
  94. package/build/query-title/edit.js +43 -1
  95. package/build/query-title/edit.js.map +1 -1
  96. package/build/quote/transforms.js +8 -0
  97. package/build/quote/transforms.js.map +1 -1
  98. package/build/rss/edit.js +3 -0
  99. package/build/rss/edit.js.map +1 -1
  100. package/build/search/edit.js +4 -3
  101. package/build/search/edit.js.map +1 -1
  102. package/build/search/index.js +1 -0
  103. package/build/search/index.js.map +1 -1
  104. package/build/search/view.js +166 -62
  105. package/build/search/view.js.map +1 -1
  106. package/build/site-logo/edit.js +1 -0
  107. package/build/site-logo/edit.js.map +1 -1
  108. package/build/social-link/icons/index.js +13 -0
  109. package/build/social-link/icons/index.js.map +1 -1
  110. package/build/social-link/icons/threads.js +25 -0
  111. package/build/social-link/icons/threads.js.map +1 -0
  112. package/build/social-link/variations.js +7 -0
  113. package/build/social-link/variations.js.map +1 -1
  114. package/build/tag-cloud/edit.js +1 -0
  115. package/build/tag-cloud/edit.js.map +1 -1
  116. package/build/template-part/edit/import-controls.js +1 -1
  117. package/build/template-part/edit/import-controls.js.map +1 -1
  118. package/build/template-part/edit/index.js +1 -1
  119. package/build/template-part/edit/index.js.map +1 -1
  120. package/build/text-columns/edit.js +1 -0
  121. package/build/text-columns/edit.js.map +1 -1
  122. package/build-module/avatar/edit.js +1 -0
  123. package/build-module/avatar/edit.js.map +1 -1
  124. package/build-module/avatar/index.js +3 -0
  125. package/build-module/avatar/index.js.map +1 -1
  126. package/build-module/block/edit.js +4 -29
  127. package/build-module/block/edit.js.map +1 -1
  128. package/build-module/block/index.js +2 -1
  129. package/build-module/block/index.js.map +1 -1
  130. package/build-module/buttons/edit.js +2 -2
  131. package/build-module/buttons/edit.js.map +1 -1
  132. package/build-module/column/edit.native.js +1 -4
  133. package/build-module/column/edit.native.js.map +1 -1
  134. package/build-module/columns/edit.js +1 -0
  135. package/build-module/columns/edit.js.map +1 -1
  136. package/build-module/comment-author-avatar/edit.js +1 -0
  137. package/build-module/comment-author-avatar/edit.js.map +1 -1
  138. package/build-module/cover/deprecated.js +4 -2
  139. package/build-module/cover/deprecated.js.map +1 -1
  140. package/build-module/cover/index.js +2 -1
  141. package/build-module/cover/index.js.map +1 -1
  142. package/build-module/embed/embed-placeholder.native.js +37 -14
  143. package/build-module/embed/embed-placeholder.native.js.map +1 -1
  144. package/build-module/file/index.js +1 -2
  145. package/build-module/file/index.js.map +1 -1
  146. package/build-module/file/inspector.js +1 -0
  147. package/build-module/file/inspector.js.map +1 -1
  148. package/build-module/file/view-interactivity.js +19 -0
  149. package/build-module/file/view-interactivity.js.map +1 -0
  150. package/build-module/file/view.js +2 -15
  151. package/build-module/file/view.js.map +1 -1
  152. package/build-module/footnotes/edit.js +29 -2
  153. package/build-module/footnotes/edit.js.map +1 -1
  154. package/build-module/footnotes/format.js +120 -25
  155. package/build-module/footnotes/format.js.map +1 -1
  156. package/build-module/footnotes/index.js +45 -4
  157. package/build-module/footnotes/index.js.map +1 -1
  158. package/build-module/gallery/edit.js +8 -6
  159. package/build-module/gallery/edit.js.map +1 -1
  160. package/build-module/image/deprecated.js +107 -3
  161. package/build-module/image/deprecated.js.map +1 -1
  162. package/build-module/image/image.js +2 -2
  163. package/build-module/image/image.js.map +1 -1
  164. package/build-module/image/index.js +2 -1
  165. package/build-module/image/index.js.map +1 -1
  166. package/build-module/index.js +3 -1
  167. package/build-module/index.js.map +1 -1
  168. package/build-module/latest-comments/edit.js +1 -0
  169. package/build-module/latest-comments/edit.js.map +1 -1
  170. package/build-module/latest-posts/edit.js +2 -0
  171. package/build-module/latest-posts/edit.js.map +1 -1
  172. package/build-module/list/edit.js +4 -4
  173. package/build-module/list/edit.js.map +1 -1
  174. package/build-module/list-item/hooks/use-merge.js +10 -1
  175. package/build-module/list-item/hooks/use-merge.js.map +1 -1
  176. package/build-module/media-text/media-container.native.js +2 -1
  177. package/build-module/media-text/media-container.native.js.map +1 -1
  178. package/build-module/missing/edit.native.js +8 -6
  179. package/build-module/missing/edit.native.js.map +1 -1
  180. package/build-module/navigation/constants.js +8 -3
  181. package/build-module/navigation/constants.js.map +1 -1
  182. package/build-module/navigation/edit/index.js +17 -3
  183. package/build-module/navigation/edit/index.js.map +1 -1
  184. package/build-module/navigation/edit/inner-blocks.js +2 -2
  185. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  186. package/build-module/navigation/edit/menu-inspector-controls.js +1 -1
  187. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  188. package/build-module/navigation/edit/navigation-menu-selector.js +4 -4
  189. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  190. package/build-module/navigation/edit/unsaved-inner-blocks.js +2 -2
  191. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  192. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -14
  193. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  194. package/build-module/navigation/index.js +2 -3
  195. package/build-module/navigation/index.js.map +1 -1
  196. package/build-module/navigation/use-navigation-menu.js +35 -47
  197. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  198. package/build-module/navigation/view-interactivity.js +182 -0
  199. package/build-module/navigation/view-interactivity.js.map +1 -0
  200. package/build-module/navigation/view-modal.js +120 -0
  201. package/build-module/navigation/view-modal.js.map +1 -0
  202. package/build-module/navigation/view.js +72 -163
  203. package/build-module/navigation/view.js.map +1 -1
  204. package/build-module/navigation-link/edit.js +12 -7
  205. package/build-module/navigation-link/edit.js.map +1 -1
  206. package/build-module/navigation-submenu/edit.js +2 -2
  207. package/build-module/navigation-submenu/edit.js.map +1 -1
  208. package/build-module/pattern/edit.js +27 -4
  209. package/build-module/pattern/edit.js.map +1 -1
  210. package/build-module/preformatted/index.js +4 -0
  211. package/build-module/preformatted/index.js.map +1 -1
  212. package/build-module/query-pagination/edit.js +1 -1
  213. package/build-module/query-pagination/edit.js.map +1 -1
  214. package/build-module/query-title/edit.js +44 -3
  215. package/build-module/query-title/edit.js.map +1 -1
  216. package/build-module/quote/transforms.js +8 -0
  217. package/build-module/quote/transforms.js.map +1 -1
  218. package/build-module/rss/edit.js +3 -0
  219. package/build-module/rss/edit.js.map +1 -1
  220. package/build-module/search/edit.js +4 -3
  221. package/build-module/search/edit.js.map +1 -1
  222. package/build-module/search/index.js +1 -0
  223. package/build-module/search/index.js.map +1 -1
  224. package/build-module/search/view.js +166 -62
  225. package/build-module/search/view.js.map +1 -1
  226. package/build-module/site-logo/edit.js +1 -0
  227. package/build-module/site-logo/edit.js.map +1 -1
  228. package/build-module/social-link/icons/index.js +1 -0
  229. package/build-module/social-link/icons/index.js.map +1 -1
  230. package/build-module/social-link/icons/threads.js +15 -0
  231. package/build-module/social-link/icons/threads.js.map +1 -0
  232. package/build-module/social-link/variations.js +8 -1
  233. package/build-module/social-link/variations.js.map +1 -1
  234. package/build-module/tag-cloud/edit.js +1 -0
  235. package/build-module/tag-cloud/edit.js.map +1 -1
  236. package/build-module/template-part/edit/import-controls.js +2 -2
  237. package/build-module/template-part/edit/import-controls.js.map +1 -1
  238. package/build-module/template-part/edit/index.js +1 -1
  239. package/build-module/template-part/edit/index.js.map +1 -1
  240. package/build-module/text-columns/edit.js +1 -0
  241. package/build-module/text-columns/edit.js.map +1 -1
  242. package/build-style/details/style-rtl.css +4 -2
  243. package/build-style/details/style.css +4 -2
  244. package/build-style/footnotes/style-rtl.css +4 -3
  245. package/build-style/footnotes/style.css +4 -3
  246. package/build-style/navigation/style-rtl.css +14 -2
  247. package/build-style/navigation/style.css +14 -2
  248. package/build-style/preformatted/style-rtl.css +2 -1
  249. package/build-style/preformatted/style.css +2 -1
  250. package/build-style/query-pagination/style-rtl.css +4 -2
  251. package/build-style/query-pagination/style.css +4 -2
  252. package/build-style/social-links/style-rtl.css +7 -0
  253. package/build-style/social-links/style.css +7 -0
  254. package/build-style/style-rtl.css +36 -10
  255. package/build-style/style.css +36 -10
  256. package/build-style/video/style-rtl.css +1 -0
  257. package/build-style/video/style.css +1 -0
  258. package/package.json +33 -32
  259. package/src/audio/test/__snapshots__/edit.native.js.snap +118 -33
  260. package/src/avatar/block.json +3 -0
  261. package/src/avatar/edit.js +1 -0
  262. package/src/block/block.json +2 -1
  263. package/src/block/edit.js +1 -39
  264. package/src/block/editor.native.scss +2 -2
  265. package/src/buttons/edit.js +2 -2
  266. package/src/buttons/test/edit.native.js +4 -0
  267. package/src/column/edit.native.js +4 -10
  268. package/src/column/editor.native.scss +0 -4
  269. package/src/columns/edit.js +1 -0
  270. package/src/columns/test/edit.native.js +5 -0
  271. package/src/comment-author-avatar/edit.js +1 -0
  272. package/src/comment-template/index.php +7 -2
  273. package/src/cover/block.json +2 -1
  274. package/src/cover/deprecated.js +2 -0
  275. package/src/cover/test/edit.native.js +8 -0
  276. package/src/embed/embed-placeholder.native.js +80 -47
  277. package/src/embed/styles.native.scss +54 -18
  278. package/src/embed/test/index.native.js +13 -5
  279. package/src/file/block.json +1 -2
  280. package/src/file/index.php +20 -2
  281. package/src/file/inspector.js +1 -0
  282. package/src/file/test/__snapshots__/edit.native.js.snap +119 -33
  283. package/src/file/view-interactivity.js +18 -0
  284. package/src/file/view.js +5 -14
  285. package/src/footnotes/block.json +44 -2
  286. package/src/footnotes/edit.js +33 -2
  287. package/src/footnotes/format.js +90 -25
  288. package/src/footnotes/index.js +0 -1
  289. package/src/footnotes/index.php +207 -0
  290. package/src/footnotes/style.scss +6 -3
  291. package/src/gallery/edit.js +42 -38
  292. package/src/gallery/test/index.native.js +31 -18
  293. package/src/heading/test/index.native.js +4 -0
  294. package/src/home-link/index.php +15 -2
  295. package/src/image/block.json +2 -1
  296. package/src/image/deprecated.js +109 -3
  297. package/src/image/image.js +2 -2
  298. package/src/image/index.php +45 -8
  299. package/src/image/test/edit.native.js +1 -2
  300. package/src/index.js +5 -1
  301. package/src/latest-comments/edit.js +1 -0
  302. package/src/latest-posts/edit.js +2 -0
  303. package/src/list/edit.js +6 -4
  304. package/src/list/test/edit.native.js +134 -33
  305. package/src/list-item/hooks/use-merge.js +12 -5
  306. package/src/media-text/media-container.native.js +1 -0
  307. package/src/missing/edit.native.js +12 -10
  308. package/src/missing/style.native.scss +19 -12
  309. package/src/missing/test/__snapshots__/edit.native.js.snap +42 -13
  310. package/src/navigation/block.json +2 -3
  311. package/src/navigation/constants.js +12 -6
  312. package/src/navigation/edit/index.js +29 -1
  313. package/src/navigation/edit/inner-blocks.js +2 -2
  314. package/src/navigation/edit/menu-inspector-controls.js +1 -1
  315. package/src/navigation/edit/navigation-menu-selector.js +8 -4
  316. package/src/navigation/edit/unsaved-inner-blocks.js +2 -2
  317. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +17 -21
  318. package/src/navigation/index.php +50 -18
  319. package/src/navigation/style.scss +27 -8
  320. package/src/navigation/use-navigation-menu.js +39 -63
  321. package/src/navigation/view-interactivity.js +196 -0
  322. package/src/navigation/view-modal.js +127 -0
  323. package/src/navigation/view.js +96 -185
  324. package/src/navigation-link/edit.js +61 -47
  325. package/src/navigation-submenu/edit.js +2 -2
  326. package/src/paragraph/test/__snapshots__/edit.native.js.snap +1 -0
  327. package/src/paragraph/test/edit.native.js +81 -35
  328. package/src/pattern/edit.js +21 -0
  329. package/src/pattern/index.php +13 -1
  330. package/src/post-template/index.php +6 -2
  331. package/src/post-title/index.php +8 -3
  332. package/src/preformatted/block.json +4 -0
  333. package/src/preformatted/style.scss +4 -1
  334. package/src/preformatted/test/__snapshots__/edit.native.js.snap +2 -0
  335. package/src/pullquote/test/edit.native.js +12 -4
  336. package/src/query-pagination/edit.js +17 -14
  337. package/src/query-title/edit.js +48 -6
  338. package/src/quote/test/__snapshots__/transforms.native.js.snap +10 -0
  339. package/src/quote/test/edit.native.js +12 -4
  340. package/src/quote/test/transforms.native.js +5 -1
  341. package/src/quote/transforms.js +13 -0
  342. package/src/rss/edit.js +3 -0
  343. package/src/search/block.json +1 -0
  344. package/src/search/edit.js +4 -3
  345. package/src/search/index.php +26 -4
  346. package/src/search/test/__snapshots__/edit.native.js.snap +70 -0
  347. package/src/search/view.js +171 -67
  348. package/src/site-logo/edit.js +1 -0
  349. package/src/social-link/icons/index.js +1 -0
  350. package/src/social-link/icons/threads.js +10 -0
  351. package/src/social-link/index.php +4 -0
  352. package/src/social-link/socials-with-bg.scss +5 -0
  353. package/src/social-link/socials-without-bg.scss +4 -0
  354. package/src/social-link/variations.js +7 -0
  355. package/src/tag-cloud/edit.js +1 -0
  356. package/src/template-part/edit/import-controls.js +2 -2
  357. package/src/template-part/edit/index.js +1 -1
  358. package/src/template-part/index.php +7 -16
  359. package/src/text-columns/edit.js +1 -0
  360. package/src/video/style.scss +1 -0
  361. package/build/gallery/shared-icon.native.js +0 -38
  362. package/build/gallery/shared-icon.native.js.map +0 -1
  363. package/build-module/gallery/shared-icon.native.js +0 -24
  364. package/build-module/gallery/shared-icon.native.js.map +0 -1
  365. package/src/gallery/shared-icon.native.js +0 -23
@@ -2,6 +2,7 @@
2
2
  * External dependencies
3
3
  */
4
4
  import {
5
+ act,
5
6
  selectRangeInRichText,
6
7
  typeInRichText,
7
8
  fireEvent,
@@ -19,7 +20,7 @@ import {
19
20
  */
20
21
  import { getBlockTypes, unregisterBlockType } from '@wordpress/blocks';
21
22
  import { registerCoreBlocks } from '@wordpress/block-library';
22
- import { BACKSPACE } from '@wordpress/keycodes';
23
+ import { BACKSPACE, ENTER } from '@wordpress/keycodes';
23
24
 
24
25
  describe( 'List block', () => {
25
26
  beforeAll( () => {
@@ -338,34 +339,125 @@ describe( 'List block', () => {
338
339
  expect( getEditorHtml() ).toMatchSnapshot();
339
340
  } );
340
341
 
341
- it( 'merges with other lists', async () => {
342
+ it( 'splits empty list items into paragraphs', async () => {
343
+ // Arrange
342
344
  const initialHtml = `<!-- wp:list -->
343
345
  <ul><!-- wp:list-item -->
344
- <li>One</li><!-- /wp:list-item --></ul>
345
- <!-- /wp:list --><!-- wp:list -->
346
- <ul><!-- wp:list-item -->
346
+ <li>One</li><!-- /wp:list-item -->
347
+ <!-- wp:list-item -->
347
348
  <li>Two</li><!-- /wp:list-item --></ul>
348
349
  <!-- /wp:list -->`;
350
+ const screen = await initializeEditor( { initialHtml } );
349
351
 
350
- const screen = await initializeEditor( {
351
- initialHtml,
352
- } );
353
-
354
- // Select List block
355
- const [ listBlock ] = screen.getAllByLabelText( /List Block\. Row 2/ );
352
+ // Act
353
+ const listBlock = screen.getByLabelText( /List Block\. Row 1/ );
356
354
  fireEvent.press( listBlock );
357
355
  await triggerBlockListLayout( listBlock );
356
+ const listItemField = screen.getByLabelText( /Text input. .*One.*/ );
357
+ selectRangeInRichText( listItemField, 3 );
358
+ fireEvent( listItemField, 'onKeyDown', {
359
+ nativeEvent: {},
360
+ preventDefault() {},
361
+ keyCode: ENTER,
362
+ } );
363
+ const listItemField2 = screen.getByLabelText( /Text input. Empty/ );
364
+ fireEvent( listItemField2, 'onKeyDown', {
365
+ nativeEvent: {},
366
+ preventDefault() {},
367
+ keyCode: ENTER,
368
+ } );
358
369
 
359
- // Select List Item block
360
- const [ listItemBlock ] = within( listBlock ).getAllByLabelText(
361
- /List item Block\. Row 1/
362
- );
363
- fireEvent.press( listItemBlock );
370
+ // Assert
371
+ expect( getEditorHtml() ).toMatchInlineSnapshot( `
372
+ "<!-- wp:list -->
373
+ <ul><!-- wp:list-item -->
374
+ <li>One</li>
375
+ <!-- /wp:list-item --></ul>
376
+ <!-- /wp:list -->
364
377
 
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.*/ );
378
+ <!-- wp:paragraph -->
379
+ <p></p>
380
+ <!-- /wp:paragraph -->
381
+
382
+ <!-- wp:list -->
383
+ <ul><!-- wp:list-item -->
384
+ <li>Two</li>
385
+ <!-- /wp:list-item --></ul>
386
+ <!-- /wp:list -->"
387
+ ` );
388
+ } );
389
+
390
+ it( 'merges paragraphs into list items', async () => {
391
+ const initialHtml = `<!-- wp:list -->
392
+ <ul><!-- wp:list-item -->
393
+ <li>One</li>
394
+ <!-- /wp:list-item --></ul>
395
+ <!-- /wp:list -->
396
+
397
+ <!-- wp:paragraph -->
398
+ <p>Two</p>
399
+ <!-- /wp:paragraph -->
400
+
401
+ <!-- wp:list -->
402
+ <ul><!-- wp:list-item -->
403
+ <li>Three</li>
404
+ <!-- /wp:list-item --></ul>
405
+ <!-- /wp:list -->`;
406
+ const screen = await initializeEditor( { initialHtml } );
407
+
408
+ // Act
409
+ const paragraphField = screen.getByLabelText( /Text input. .*Two.*/ );
410
+ selectRangeInRichText( paragraphField, 0 );
411
+ fireEvent( paragraphField, 'onKeyDown', {
412
+ nativeEvent: {},
413
+ preventDefault() {},
414
+ keyCode: BACKSPACE,
415
+ } );
416
+
417
+ // Assert
418
+ expect( getEditorHtml() ).toMatchInlineSnapshot( `
419
+ "<!-- wp:list -->
420
+ <ul><!-- wp:list-item -->
421
+ <li>One</li>
422
+ <!-- /wp:list-item -->
423
+
424
+ <!-- wp:list-item -->
425
+ <li>Two</li>
426
+ <!-- /wp:list-item --></ul>
427
+ <!-- /wp:list -->
428
+
429
+ <!-- wp:list -->
430
+ <ul><!-- wp:list-item -->
431
+ <li>Three</li>
432
+ <!-- /wp:list-item --></ul>
433
+ <!-- /wp:list -->"
434
+ ` );
435
+ } );
436
+
437
+ it( 'merges lists into lists', async () => {
438
+ // Arrange
439
+ const initialHtml = `<!-- wp:list -->
440
+ <ul><!-- wp:list-item -->
441
+ <li>One</li>
442
+ <!-- /wp:list-item -->
443
+
444
+ <!-- wp:list-item -->
445
+ <li>Two</li>
446
+ <!-- /wp:list-item --></ul>
447
+ <!-- /wp:list -->
448
+
449
+ <!-- wp:list -->
450
+ <ul><!-- wp:list-item -->
451
+ <li>Three</li>
452
+ <!-- /wp:list-item --></ul>
453
+ <!-- /wp:list -->`;
454
+ const screen = await initializeEditor( { initialHtml } );
455
+
456
+ // Act
457
+ const listBlock = screen.getByLabelText( /List Block\. Row 2/ );
458
+ fireEvent.press( listBlock );
459
+ await triggerBlockListLayout( listBlock );
460
+ const listItemField = screen.getByLabelText( /Text input\..*Three/ );
369
461
  selectRangeInRichText( listItemField, 0 );
370
462
  fireEvent( listItemField, 'onKeyDown', {
371
463
  nativeEvent: {},
@@ -373,17 +465,22 @@ describe( 'List block', () => {
373
465
  keyCode: BACKSPACE,
374
466
  } );
375
467
 
468
+ // Assert
376
469
  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
- ` );
470
+ "<!-- wp:list -->
471
+ <ul><!-- wp:list-item -->
472
+ <li>One</li>
473
+ <!-- /wp:list-item -->
474
+
475
+ <!-- wp:list-item -->
476
+ <li>Two</li>
477
+ <!-- /wp:list-item -->
478
+
479
+ <!-- wp:list-item -->
480
+ <li>Three</li>
481
+ <!-- /wp:list-item --></ul>
482
+ <!-- /wp:list -->"
483
+ ` );
387
484
  } );
388
485
 
389
486
  it( 'unwraps first item when attempting to merge with non-list block', async () => {
@@ -481,21 +578,25 @@ describe( 'List block', () => {
481
578
  preventDefault() {},
482
579
  keyCode: BACKSPACE,
483
580
  } );
581
+ // Inner blocks batch store updates with microtasks.
582
+ // To avoid `act` warnings, we let queued microtasks to be executed.
583
+ // Reference: https://t.ly/b95nA
584
+ await act( async () => {} );
484
585
 
485
586
  expect( getEditorHtml() ).toMatchInlineSnapshot( `
486
587
  "<!-- wp:paragraph -->
487
588
  <p>A quick brown fox.</p>
488
589
  <!-- /wp:paragraph -->
489
-
590
+
490
591
  <!-- wp:paragraph -->
491
592
  <p>One</p>
492
593
  <!-- /wp:paragraph -->
493
-
594
+
494
595
  <!-- wp:list -->
495
596
  <ul><!-- wp:list-item -->
496
597
  <li>Two</li>
497
598
  <!-- /wp:list-item -->
498
-
599
+
499
600
  <!-- wp:list-item -->
500
601
  <li>Three</li>
501
602
  <!-- /wp:list-item --></ul>
@@ -107,11 +107,18 @@ export default function useMerge( clientId, onMerge ) {
107
107
  } else if ( previousBlockClientId ) {
108
108
  const trailingId = getTrailingId( previousBlockClientId );
109
109
  registry.batch( () => {
110
- moveBlocksToPosition(
111
- getBlockOrder( clientId ),
112
- clientId,
113
- previousBlockClientId
114
- );
110
+ // When merging a list item with a previous trailing list
111
+ // item, we also need to move any nested list items. First,
112
+ // check if there's a listed list. If there's a nested list,
113
+ // append its nested list items to the trailing list.
114
+ const [ nestedListClientId ] = getBlockOrder( clientId );
115
+ if ( nestedListClientId ) {
116
+ moveBlocksToPosition(
117
+ getBlockOrder( nestedListClientId ),
118
+ nestedListClientId,
119
+ getBlockRootClientId( trailingId )
120
+ );
121
+ }
115
122
  mergeBlocks( trailingId, clientId );
116
123
  } );
117
124
  } else {
@@ -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
  }
@@ -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>
@@ -31,11 +31,11 @@
31
31
  height: 36;
32
32
  padding-top: 8;
33
33
  padding-bottom: 8;
34
- color: $gray-darken-20;
34
+ color: $light-secondary;
35
35
  }
36
36
 
37
37
  .infoIconDark {
38
- color: $gray-20;
38
+ color: $dark-tertiary;
39
39
  }
40
40
 
41
41
  .infoSheetIcon {
@@ -82,7 +82,8 @@
82
82
  }
83
83
 
84
84
  .unsupportedBlock {
85
- background-color: $gray-lighten-30;
85
+ height: 142;
86
+ background-color: #e0e0e0; // $light-dim
86
87
  padding-top: 24;
87
88
  padding-bottom: 24;
88
89
  padding-left: 8;
@@ -96,31 +97,37 @@
96
97
  }
97
98
 
98
99
  .unsupportedBlockDark {
99
- background-color: $background-dark-secondary;
100
+ background-color: #1f1f1f; // $dark-dim
101
+ }
102
+
103
+ .unsupportedBlockHeader {
104
+ flex-direction: row;
105
+ align-items: center;
106
+ margin-top: 4;
107
+ margin-bottom: 8;
100
108
  }
101
109
 
102
110
  .unsupportedBlockIcon {
103
- color: $gray-dark;
111
+ color: $light-secondary;
104
112
  }
105
113
 
106
114
  .unsupportedBlockIconDark {
107
- color: $white;
115
+ color: $dark-tertiary;
108
116
  }
109
117
 
110
118
  .unsupportedBlockMessage {
111
- margin-top: 4;
112
119
  text-align: center;
113
- color: $gray-dark;
114
- font-size: 14;
115
- font-weight: 600;
120
+ color: $light-secondary;
121
+ font-size: 16;
122
+ font-weight: 400;
123
+ margin-left: 6;
116
124
  }
117
125
 
118
126
  .unsupportedBlockMessageDark {
119
- color: $white;
127
+ color: $dark-tertiary;
120
128
  }
121
129
 
122
130
  .unsupportedBlockSubtitle {
123
- margin-top: 2;
124
131
  text-align: center;
125
132
  color: $gray-darken-20;
126
133
  font-size: 12;
@@ -7,7 +7,11 @@ exports[`Missing block renders without crashing 1`] = `
7
7
  accessibilityRole="button"
8
8
  accessibilityState={
9
9
  {
10
+ "busy": undefined,
11
+ "checked": undefined,
10
12
  "disabled": true,
13
+ "expanded": undefined,
14
+ "selected": undefined,
11
15
  }
12
16
  }
13
17
  accessible={true}
@@ -24,7 +28,25 @@ exports[`Missing block renders without crashing 1`] = `
24
28
  accessibilityHint="Tap here to show help"
25
29
  accessibilityLabel="Help button"
26
30
  accessibilityRole="button"
31
+ accessibilityState={
32
+ {
33
+ "busy": undefined,
34
+ "checked": undefined,
35
+ "disabled": undefined,
36
+ "expanded": undefined,
37
+ "selected": undefined,
38
+ }
39
+ }
40
+ accessibilityValue={
41
+ {
42
+ "max": undefined,
43
+ "min": undefined,
44
+ "now": undefined,
45
+ "text": undefined,
46
+ }
47
+ }
27
48
  accessible={true}
49
+ collapsable={false}
28
50
  focusable={true}
29
51
  onClick={[Function]}
30
52
  onResponderGrant={[Function]}
@@ -33,6 +55,11 @@ exports[`Missing block renders without crashing 1`] = `
33
55
  onResponderTerminate={[Function]}
34
56
  onResponderTerminationRequest={[Function]}
35
57
  onStartShouldSetResponder={[Function]}
58
+ style={
59
+ {
60
+ "opacity": 1,
61
+ }
62
+ }
36
63
  >
37
64
  <Svg
38
65
  height={24}
@@ -45,19 +72,21 @@ exports[`Missing block renders without crashing 1`] = `
45
72
  Path
46
73
  </Svg>
47
74
  </View>
48
- <Svg
49
- color="white"
50
- height={24}
51
- style={{}}
52
- viewBox="0 0 24 24"
53
- width={24}
54
- xmlns="http://www.w3.org/2000/svg"
55
- >
56
- Path
57
- </Svg>
58
- <Text>
59
- missing/block/title
60
- </Text>
75
+ <View>
76
+ <Svg
77
+ fill="white"
78
+ height={24}
79
+ style={{}}
80
+ viewBox="0 0 24 24"
81
+ width={24}
82
+ xmlns="http://www.w3.org/2000/svg"
83
+ >
84
+ Path
85
+ </Svg>
86
+ <Text>
87
+ missing/block/title
88
+ </Text>
89
+ </View>
61
90
  <Text>
62
91
  Unsupported
63
92
  </Text>
@@ -131,10 +131,9 @@
131
131
  }
132
132
  }
133
133
  }
134
- },
135
- "interactivity": true
134
+ }
136
135
  },
137
- "viewScript": "file:./view.min.js",
136
+ "viewScript": [ "file:./view.min.js", "file:./view-modal.min.js" ],
138
137
  "editorStyle": "wp-block-navigation-editor",
139
138
  "style": "wp-block-navigation"
140
139
  }
@@ -20,13 +20,19 @@ export const PRIORITIZED_INSERTER_BLOCKS = [
20
20
  'core/navigation-link',
21
21
  ];
22
22
 
23
+ // These parameters must be kept aligned with those in
24
+ // lib/compat/wordpress-6.3/navigation-block-preloading.php
25
+ // and
26
+ // edit-site/src/components/sidebar-navigation-screen-navigation-menus/constants.js
27
+ export const PRELOADED_NAVIGATION_MENUS_QUERY = {
28
+ per_page: 100,
29
+ status: [ 'publish', 'draft' ],
30
+ order: 'desc',
31
+ orderby: 'date',
32
+ };
33
+
23
34
  export const SELECT_NAVIGATION_MENUS_ARGS = [
24
35
  'postType',
25
36
  'wp_navigation',
26
- {
27
- per_page: 100,
28
- status: [ 'publish', 'draft' ],
29
- order: 'desc',
30
- orderby: 'date',
31
- },
37
+ PRELOADED_NAVIGATION_MENUS_QUERY,
32
38
  ];
@@ -38,6 +38,7 @@ import {
38
38
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
39
39
  Button,
40
40
  Spinner,
41
+ Notice,
41
42
  } from '@wordpress/components';
42
43
  import { __, sprintf } from '@wordpress/i18n';
43
44
  import { speak } from '@wordpress/a11y';
@@ -196,7 +197,7 @@ function Navigation( {
196
197
  convert: convertClassicMenu,
197
198
  status: classicMenuConversionStatus,
198
199
  error: classicMenuConversionError,
199
- } = useConvertClassicToBlockMenu( clientId );
200
+ } = useConvertClassicToBlockMenu( createNavigationMenu );
200
201
 
201
202
  const isConvertingClassicMenu =
202
203
  classicMenuConversionStatus === CLASSIC_MENU_CONVERSION_PENDING;
@@ -485,6 +486,21 @@ function Navigation( {
485
486
  { open: overlayMenuPreview }
486
487
  );
487
488
 
489
+ const submenuAccessibilityNotice =
490
+ ! showSubmenuIcon && ! openSubmenusOnClick
491
+ ? __(
492
+ 'The current menu options offer reduced accessibility for users and are not recommended. Enabling either "Open on Click" or "Show arrow" offers enhanced accessibility by allowing keyboard users to browse submenus selectively.'
493
+ )
494
+ : '';
495
+
496
+ const isFirstRender = useRef( true ); // Don't speak on first render.
497
+ useEffect( () => {
498
+ if ( ! isFirstRender.current && submenuAccessibilityNotice ) {
499
+ speak( submenuAccessibilityNotice );
500
+ }
501
+ isFirstRender.current = false;
502
+ }, [ submenuAccessibilityNotice ] );
503
+
488
504
  const colorGradientSettings = useMultipleOriginColorsAndGradients();
489
505
  const stylingInspectorControls = (
490
506
  <>
@@ -578,6 +594,18 @@ function Navigation( {
578
594
  disabled={ attributes.openSubmenusOnClick }
579
595
  label={ __( 'Show arrow' ) }
580
596
  />
597
+
598
+ { submenuAccessibilityNotice && (
599
+ <div>
600
+ <Notice
601
+ spokenMessage={ null }
602
+ status="warning"
603
+ isDismissible={ false }
604
+ >
605
+ { submenuAccessibilityNotice }
606
+ </Notice>
607
+ </div>
608
+ ) }
581
609
  </>
582
610
  ) }
583
611
  </PanelBody>
@@ -98,8 +98,8 @@ export default function NavigationInnerBlocks( {
98
98
  onChange,
99
99
  allowedBlocks: ALLOWED_BLOCKS,
100
100
  prioritizedInserterBlocks: PRIORITIZED_INSERTER_BLOCKS,
101
- __experimentalDefaultBlock: DEFAULT_BLOCK,
102
- __experimentalDirectInsert: shouldDirectInsert,
101
+ defaultBlock: DEFAULT_BLOCK,
102
+ directInsert: shouldDirectInsert,
103
103
  orientation,
104
104
  templateLock,
105
105
 
@@ -103,7 +103,7 @@ const MainContent = ( {
103
103
  ? sprintf(
104
104
  /* translators: %s: The name of a menu. */
105
105
  __( 'Structure for navigation menu: %s' ),
106
- navigationMenu?.title?.rendered || __( 'Untitled menu' )
106
+ navigationMenu?.title || __( 'Untitled menu' )
107
107
  )
108
108
  : __(
109
109
  'You have not yet created any menus. Displaying a list of your Pages'
@@ -20,19 +20,19 @@ import useNavigationMenu from '../use-navigation-menu';
20
20
  import useNavigationEntities from '../use-navigation-entities';
21
21
 
22
22
  function buildMenuLabel( title, id, status ) {
23
- if ( ! title?.rendered ) {
23
+ if ( ! title ) {
24
24
  /* translators: %s is the index of the menu in the list of menus. */
25
25
  return sprintf( __( '(no title %s)' ), id );
26
26
  }
27
27
 
28
28
  if ( status === 'publish' ) {
29
- return decodeEntities( title?.rendered );
29
+ return decodeEntities( title );
30
30
  }
31
31
 
32
32
  return sprintf(
33
33
  // translators: %1s: title of the menu; %2s: status of the menu (draft, pending, etc.).
34
34
  __( '%1$s (%2$s)' ),
35
- decodeEntities( title?.rendered ),
35
+ decodeEntities( title ),
36
36
  status
37
37
  );
38
38
  }
@@ -72,7 +72,11 @@ function NavigationMenuSelector( {
72
72
  const menuChoices = useMemo( () => {
73
73
  return (
74
74
  navigationMenus?.map( ( { id, title, status }, index ) => {
75
- const label = buildMenuLabel( title, index + 1, status );
75
+ const label = buildMenuLabel(
76
+ title?.rendered,
77
+ index + 1,
78
+ status
79
+ );
76
80
 
77
81
  return {
78
82
  value: id,
@@ -68,8 +68,8 @@ export default function UnsavedInnerBlocks( {
68
68
  {
69
69
  renderAppender: hasSelection ? undefined : false,
70
70
  allowedBlocks: ALLOWED_BLOCKS,
71
- __experimentalDefaultBlock: DEFAULT_BLOCK,
72
- __experimentalDirectInsert: shouldDirectInsert,
71
+ defaultBlock: DEFAULT_BLOCK,
72
+ directInsert: shouldDirectInsert,
73
73
  }
74
74
  );
75
75