@wordpress/block-library 8.14.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 (260) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/avatar/edit.js +1 -0
  3. package/build/avatar/edit.js.map +1 -1
  4. package/build/block/index.js +2 -1
  5. package/build/block/index.js.map +1 -1
  6. package/build/buttons/edit.js +2 -2
  7. package/build/buttons/edit.js.map +1 -1
  8. package/build/column/edit.native.js +1 -4
  9. package/build/column/edit.native.js.map +1 -1
  10. package/build/columns/edit.js +1 -0
  11. package/build/columns/edit.js.map +1 -1
  12. package/build/comment-author-avatar/edit.js +1 -0
  13. package/build/comment-author-avatar/edit.js.map +1 -1
  14. package/build/cover/deprecated.js +4 -2
  15. package/build/cover/deprecated.js.map +1 -1
  16. package/build/embed/embed-placeholder.native.js +37 -13
  17. package/build/embed/embed-placeholder.native.js.map +1 -1
  18. package/build/file/index.js +1 -2
  19. package/build/file/index.js.map +1 -1
  20. package/build/file/inspector.js +1 -0
  21. package/build/file/inspector.js.map +1 -1
  22. package/build/file/view-interactivity.js +23 -0
  23. package/build/file/view-interactivity.js.map +1 -0
  24. package/build/file/view.js +1 -15
  25. package/build/file/view.js.map +1 -1
  26. package/build/footnotes/edit.js +20 -1
  27. package/build/footnotes/edit.js.map +1 -1
  28. package/build/footnotes/format.js +19 -16
  29. package/build/footnotes/format.js.map +1 -1
  30. package/build/footnotes/index.js +0 -1
  31. package/build/footnotes/index.js.map +1 -1
  32. package/build/gallery/edit.js +1 -1
  33. package/build/gallery/edit.js.map +1 -1
  34. package/build/latest-comments/edit.js +1 -0
  35. package/build/latest-comments/edit.js.map +1 -1
  36. package/build/latest-posts/edit.js +2 -0
  37. package/build/latest-posts/edit.js.map +1 -1
  38. package/build/list/edit.js +4 -4
  39. package/build/list/edit.js.map +1 -1
  40. package/build/media-text/media-container.native.js +2 -1
  41. package/build/media-text/media-container.native.js.map +1 -1
  42. package/build/missing/edit.native.js +7 -5
  43. package/build/missing/edit.native.js.map +1 -1
  44. package/build/navigation/constants.js +10 -4
  45. package/build/navigation/constants.js.map +1 -1
  46. package/build/navigation/edit/index.js +16 -2
  47. package/build/navigation/edit/index.js.map +1 -1
  48. package/build/navigation/edit/inner-blocks.js +2 -2
  49. package/build/navigation/edit/inner-blocks.js.map +1 -1
  50. package/build/navigation/edit/unsaved-inner-blocks.js +2 -2
  51. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  52. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -15
  53. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  54. package/build/navigation/index.js +2 -3
  55. package/build/navigation/index.js.map +1 -1
  56. package/build/navigation/use-navigation-menu.js +33 -45
  57. package/build/navigation/use-navigation-menu.js.map +1 -1
  58. package/build/navigation/view-interactivity.js +185 -0
  59. package/build/navigation/view-interactivity.js.map +1 -0
  60. package/build/navigation/view-modal.js +64 -0
  61. package/build/navigation/view-modal.js.map +1 -0
  62. package/build/navigation/view.js +50 -174
  63. package/build/navigation/view.js.map +1 -1
  64. package/build/navigation-link/edit.js +12 -7
  65. package/build/navigation-link/edit.js.map +1 -1
  66. package/build/navigation-submenu/edit.js +2 -2
  67. package/build/navigation-submenu/edit.js.map +1 -1
  68. package/build/query-pagination/edit.js +1 -1
  69. package/build/query-pagination/edit.js.map +1 -1
  70. package/build/query-title/edit.js +43 -1
  71. package/build/query-title/edit.js.map +1 -1
  72. package/build/quote/transforms.js +8 -0
  73. package/build/quote/transforms.js.map +1 -1
  74. package/build/rss/edit.js +3 -0
  75. package/build/rss/edit.js.map +1 -1
  76. package/build/search/edit.js +4 -3
  77. package/build/search/edit.js.map +1 -1
  78. package/build/search/index.js +1 -0
  79. package/build/search/index.js.map +1 -1
  80. package/build/site-logo/edit.js +1 -0
  81. package/build/site-logo/edit.js.map +1 -1
  82. package/build/tag-cloud/edit.js +1 -0
  83. package/build/tag-cloud/edit.js.map +1 -1
  84. package/build/template-part/edit/index.js +1 -1
  85. package/build/template-part/edit/index.js.map +1 -1
  86. package/build/text-columns/edit.js +1 -0
  87. package/build/text-columns/edit.js.map +1 -1
  88. package/build-module/avatar/edit.js +1 -0
  89. package/build-module/avatar/edit.js.map +1 -1
  90. package/build-module/block/index.js +2 -1
  91. package/build-module/block/index.js.map +1 -1
  92. package/build-module/buttons/edit.js +2 -2
  93. package/build-module/buttons/edit.js.map +1 -1
  94. package/build-module/column/edit.native.js +1 -4
  95. package/build-module/column/edit.native.js.map +1 -1
  96. package/build-module/columns/edit.js +1 -0
  97. package/build-module/columns/edit.js.map +1 -1
  98. package/build-module/comment-author-avatar/edit.js +1 -0
  99. package/build-module/comment-author-avatar/edit.js.map +1 -1
  100. package/build-module/cover/deprecated.js +4 -2
  101. package/build-module/cover/deprecated.js.map +1 -1
  102. package/build-module/embed/embed-placeholder.native.js +37 -14
  103. package/build-module/embed/embed-placeholder.native.js.map +1 -1
  104. package/build-module/file/index.js +1 -2
  105. package/build-module/file/index.js.map +1 -1
  106. package/build-module/file/inspector.js +1 -0
  107. package/build-module/file/inspector.js.map +1 -1
  108. package/build-module/file/view-interactivity.js +19 -0
  109. package/build-module/file/view-interactivity.js.map +1 -0
  110. package/build-module/file/view.js +2 -15
  111. package/build-module/file/view.js.map +1 -1
  112. package/build-module/footnotes/edit.js +18 -2
  113. package/build-module/footnotes/edit.js.map +1 -1
  114. package/build-module/footnotes/format.js +19 -16
  115. package/build-module/footnotes/format.js.map +1 -1
  116. package/build-module/footnotes/index.js +0 -1
  117. package/build-module/footnotes/index.js.map +1 -1
  118. package/build-module/gallery/edit.js +1 -1
  119. package/build-module/gallery/edit.js.map +1 -1
  120. package/build-module/latest-comments/edit.js +1 -0
  121. package/build-module/latest-comments/edit.js.map +1 -1
  122. package/build-module/latest-posts/edit.js +2 -0
  123. package/build-module/latest-posts/edit.js.map +1 -1
  124. package/build-module/list/edit.js +4 -4
  125. package/build-module/list/edit.js.map +1 -1
  126. package/build-module/media-text/media-container.native.js +2 -1
  127. package/build-module/media-text/media-container.native.js.map +1 -1
  128. package/build-module/missing/edit.native.js +8 -6
  129. package/build-module/missing/edit.native.js.map +1 -1
  130. package/build-module/navigation/constants.js +8 -3
  131. package/build-module/navigation/constants.js.map +1 -1
  132. package/build-module/navigation/edit/index.js +17 -3
  133. package/build-module/navigation/edit/index.js.map +1 -1
  134. package/build-module/navigation/edit/inner-blocks.js +2 -2
  135. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  136. package/build-module/navigation/edit/unsaved-inner-blocks.js +2 -2
  137. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  138. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +10 -14
  139. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  140. package/build-module/navigation/index.js +2 -3
  141. package/build-module/navigation/index.js.map +1 -1
  142. package/build-module/navigation/use-navigation-menu.js +35 -47
  143. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  144. package/build-module/navigation/view-interactivity.js +182 -0
  145. package/build-module/navigation/view-interactivity.js.map +1 -0
  146. package/build-module/navigation/view-modal.js +58 -0
  147. package/build-module/navigation/view-modal.js.map +1 -0
  148. package/build-module/navigation/view.js +50 -173
  149. package/build-module/navigation/view.js.map +1 -1
  150. package/build-module/navigation-link/edit.js +12 -7
  151. package/build-module/navigation-link/edit.js.map +1 -1
  152. package/build-module/navigation-submenu/edit.js +2 -2
  153. package/build-module/navigation-submenu/edit.js.map +1 -1
  154. package/build-module/query-pagination/edit.js +1 -1
  155. package/build-module/query-pagination/edit.js.map +1 -1
  156. package/build-module/query-title/edit.js +44 -3
  157. package/build-module/query-title/edit.js.map +1 -1
  158. package/build-module/quote/transforms.js +8 -0
  159. package/build-module/quote/transforms.js.map +1 -1
  160. package/build-module/rss/edit.js +3 -0
  161. package/build-module/rss/edit.js.map +1 -1
  162. package/build-module/search/edit.js +4 -3
  163. package/build-module/search/edit.js.map +1 -1
  164. package/build-module/search/index.js +1 -0
  165. package/build-module/search/index.js.map +1 -1
  166. package/build-module/site-logo/edit.js +1 -0
  167. package/build-module/site-logo/edit.js.map +1 -1
  168. package/build-module/tag-cloud/edit.js +1 -0
  169. package/build-module/tag-cloud/edit.js.map +1 -1
  170. package/build-module/template-part/edit/index.js +1 -1
  171. package/build-module/template-part/edit/index.js.map +1 -1
  172. package/build-module/text-columns/edit.js +1 -0
  173. package/build-module/text-columns/edit.js.map +1 -1
  174. package/build-style/details/style-rtl.css +4 -2
  175. package/build-style/details/style.css +4 -2
  176. package/build-style/footnotes/style-rtl.css +4 -3
  177. package/build-style/footnotes/style.css +4 -3
  178. package/build-style/navigation/style-rtl.css +14 -2
  179. package/build-style/navigation/style.css +14 -2
  180. package/build-style/query-pagination/style-rtl.css +4 -2
  181. package/build-style/query-pagination/style.css +4 -2
  182. package/build-style/style-rtl.css +26 -9
  183. package/build-style/style.css +26 -9
  184. package/package.json +33 -32
  185. package/src/audio/test/__snapshots__/edit.native.js.snap +58 -33
  186. package/src/avatar/edit.js +1 -0
  187. package/src/block/block.json +2 -1
  188. package/src/block/editor.native.scss +2 -2
  189. package/src/buttons/edit.js +2 -2
  190. package/src/column/edit.native.js +4 -10
  191. package/src/column/editor.native.scss +0 -4
  192. package/src/columns/edit.js +1 -0
  193. package/src/comment-author-avatar/edit.js +1 -0
  194. package/src/comment-template/index.php +5 -2
  195. package/src/cover/deprecated.js +2 -0
  196. package/src/embed/embed-placeholder.native.js +80 -47
  197. package/src/embed/styles.native.scss +54 -18
  198. package/src/embed/test/index.native.js +5 -5
  199. package/src/file/block.json +1 -2
  200. package/src/file/index.php +19 -1
  201. package/src/file/inspector.js +1 -0
  202. package/src/file/test/__snapshots__/edit.native.js.snap +58 -33
  203. package/src/file/view-interactivity.js +18 -0
  204. package/src/file/view.js +5 -14
  205. package/src/footnotes/block.json +0 -1
  206. package/src/footnotes/edit.js +21 -2
  207. package/src/footnotes/format.js +22 -20
  208. package/src/footnotes/style.scss +6 -3
  209. package/src/gallery/edit.js +1 -1
  210. package/src/gallery/test/index.native.js +17 -16
  211. package/src/home-link/index.php +15 -2
  212. package/src/image/index.php +47 -8
  213. package/src/image/test/edit.native.js +1 -1
  214. package/src/latest-comments/edit.js +1 -0
  215. package/src/latest-posts/edit.js +2 -0
  216. package/src/list/edit.js +6 -4
  217. package/src/list/test/edit.native.js +129 -33
  218. package/src/media-text/media-container.native.js +1 -0
  219. package/src/missing/edit.native.js +12 -10
  220. package/src/missing/style.native.scss +19 -12
  221. package/src/missing/test/__snapshots__/edit.native.js.snap +21 -13
  222. package/src/navigation/block.json +2 -3
  223. package/src/navigation/constants.js +12 -6
  224. package/src/navigation/edit/index.js +29 -1
  225. package/src/navigation/edit/inner-blocks.js +2 -2
  226. package/src/navigation/edit/unsaved-inner-blocks.js +2 -2
  227. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +17 -21
  228. package/src/navigation/index.php +24 -6
  229. package/src/navigation/style.scss +27 -8
  230. package/src/navigation/use-navigation-menu.js +39 -63
  231. package/src/navigation/view-interactivity.js +196 -0
  232. package/src/navigation/view-modal.js +78 -0
  233. package/src/navigation/view.js +67 -189
  234. package/src/navigation-link/edit.js +61 -47
  235. package/src/navigation-submenu/edit.js +2 -2
  236. package/src/paragraph/test/__snapshots__/edit.native.js.snap +1 -0
  237. package/src/paragraph/test/edit.native.js +26 -0
  238. package/src/post-template/index.php +4 -2
  239. package/src/post-title/index.php +6 -3
  240. package/src/preformatted/test/__snapshots__/edit.native.js.snap +2 -0
  241. package/src/query-pagination/edit.js +17 -14
  242. package/src/query-title/edit.js +48 -6
  243. package/src/quote/test/__snapshots__/transforms.native.js.snap +10 -0
  244. package/src/quote/test/transforms.native.js +5 -1
  245. package/src/quote/transforms.js +13 -0
  246. package/src/rss/edit.js +3 -0
  247. package/src/search/block.json +1 -0
  248. package/src/search/edit.js +4 -3
  249. package/src/search/index.php +22 -4
  250. package/src/search/test/__snapshots__/edit.native.js.snap +7 -0
  251. package/src/site-logo/edit.js +1 -0
  252. package/src/tag-cloud/edit.js +1 -0
  253. package/src/template-part/edit/index.js +1 -1
  254. package/src/template-part/index.php +9 -15
  255. package/src/text-columns/edit.js +1 -0
  256. package/build/gallery/shared-icon.native.js +0 -38
  257. package/build/gallery/shared-icon.native.js.map +0 -1
  258. package/build-module/gallery/shared-icon.native.js +0 -24
  259. package/build-module/gallery/shared-icon.native.js.map +0 -1
  260. package/src/gallery/shared-icon.native.js +0 -23
@@ -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 ) =>
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>
@@ -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;
@@ -25,6 +25,7 @@ exports[`Missing block renders without crashing 1`] = `
25
25
  accessibilityLabel="Help button"
26
26
  accessibilityRole="button"
27
27
  accessible={true}
28
+ collapsable={false}
28
29
  focusable={true}
29
30
  onClick={[Function]}
30
31
  onResponderGrant={[Function]}
@@ -33,6 +34,11 @@ exports[`Missing block renders without crashing 1`] = `
33
34
  onResponderTerminate={[Function]}
34
35
  onResponderTerminationRequest={[Function]}
35
36
  onStartShouldSetResponder={[Function]}
37
+ style={
38
+ {
39
+ "opacity": 1,
40
+ }
41
+ }
36
42
  >
37
43
  <Svg
38
44
  height={24}
@@ -45,19 +51,21 @@ exports[`Missing block renders without crashing 1`] = `
45
51
  Path
46
52
  </Svg>
47
53
  </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>
54
+ <View>
55
+ <Svg
56
+ fill="white"
57
+ height={24}
58
+ style={{}}
59
+ viewBox="0 0 24 24"
60
+ width={24}
61
+ xmlns="http://www.w3.org/2000/svg"
62
+ >
63
+ Path
64
+ </Svg>
65
+ <Text>
66
+ missing/block/title
67
+ </Text>
68
+ </View>
61
69
  <Text>
62
70
  Unsupported
63
71
  </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
 
@@ -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
 
@@ -9,7 +9,6 @@ import { __, sprintf } from '@wordpress/i18n';
9
9
  /**
10
10
  * Internal dependencies
11
11
  */
12
- import useCreateNavigationMenu from './use-create-navigation-menu';
13
12
  import menuItemsToBlocks from '../menu-items-to-blocks';
14
13
 
15
14
  export const CLASSIC_MENU_CONVERSION_SUCCESS = 'success';
@@ -21,15 +20,10 @@ export const CLASSIC_MENU_CONVERSION_IDLE = 'idle';
21
20
  // do not import the same classic menu twice.
22
21
  let classicMenuBeingConvertedId = null;
23
22
 
24
- function useConvertClassicToBlockMenu( clientId ) {
25
- /*
26
- * The wp_navigation post is created as a draft so the changes on the frontend and
27
- * the site editor are not permanent without a save interaction done by the user.
28
- */
29
- const { create: createNavigationMenu } = useCreateNavigationMenu(
30
- clientId,
31
- 'draft'
32
- );
23
+ function useConvertClassicToBlockMenu(
24
+ createNavigationMenu,
25
+ { throwOnError = false } = {}
26
+ ) {
33
27
  const registry = useRegistry();
34
28
  const { editEntityRecord } = useDispatch( coreStore );
35
29
 
@@ -158,19 +152,21 @@ function useConvertClassicToBlockMenu( clientId ) {
158
152
  classicMenuBeingConvertedId = null;
159
153
 
160
154
  // Rethrow error for debugging.
161
- throw new Error(
162
- sprintf(
163
- // translators: %s: the name of a menu (e.g. Header navigation).
164
- __( `Unable to create Navigation Menu "%s".` ),
165
- menuName
166
- ),
167
- {
168
- cause: err,
169
- }
170
- );
155
+ if ( throwOnError ) {
156
+ throw new Error(
157
+ sprintf(
158
+ // translators: %s: the name of a menu (e.g. Header navigation).
159
+ __( `Unable to create Navigation Menu "%s".` ),
160
+ menuName
161
+ ),
162
+ {
163
+ cause: err,
164
+ }
165
+ );
166
+ }
171
167
  } );
172
168
  },
173
- [ convertClassicMenuToBlockMenu ]
169
+ [ convertClassicMenuToBlockMenu, throwOnError ]
174
170
  );
175
171
 
176
172
  return {
@@ -65,6 +65,9 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
65
65
 
66
66
  return $menu_items_by_parent_id;
67
67
  }
68
+ }
69
+
70
+ if ( gutenberg_should_block_use_interactivity_api( 'core/navigation' ) ) {
68
71
 
69
72
  /**
70
73
  * Add Interactivity API directives to the navigation-submenu and page-list blocks markup using the Tag Processor
@@ -138,8 +141,23 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
138
141
  }
139
142
  return $w->get_updated_html();
140
143
  };
141
- }
142
144
 
145
+ /**
146
+ * Replaces view script for the Navigation block with version using Interactivity API.
147
+ *
148
+ * @param array $metadata Block metadata as read in via block.json.
149
+ *
150
+ * @return array Filtered block type metadata.
151
+ */
152
+ function gutenberg_block_core_navigation_update_interactive_view_script( $metadata ) {
153
+ if ( 'core/navigation' === $metadata['name'] ) {
154
+ $metadata['viewScript'] = array( 'file:./view-interactivity.min.js' );
155
+ $metadata['supports']['interactivity'] = true;
156
+ }
157
+ return $metadata;
158
+ }
159
+ add_filter( 'block_type_metadata', 'gutenberg_block_core_navigation_update_interactive_view_script', 10, 1 );
160
+ }
143
161
 
144
162
 
145
163
  /**
@@ -670,7 +688,7 @@ function render_block_core_navigation( $attributes, $content, $block ) {
670
688
  }
671
689
 
672
690
  // Add directives to the submenu if needed.
673
- if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN && $has_submenus && $should_load_view_script ) {
691
+ if ( gutenberg_should_block_use_interactivity_api( 'core/navigation' ) && $has_submenus && $should_load_view_script ) {
674
692
  $w = new WP_HTML_Tag_Processor( $inner_blocks_html );
675
693
  $inner_blocks_html = block_core_navigation_add_directives_to_submenu( $w, $attributes );
676
694
  }
@@ -718,7 +736,7 @@ function render_block_core_navigation( $attributes, $content, $block ) {
718
736
  $responsive_container_directives = '';
719
737
  $responsive_dialog_directives = '';
720
738
  $close_button_directives = '';
721
- if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN && $should_load_view_script ) {
739
+ if ( gutenberg_should_block_use_interactivity_api( 'core/navigation' ) && $should_load_view_script ) {
722
740
  $nav_element_directives = '
723
741
  data-wp-interactive
724
742
  data-wp-context=\'{ "core": { "navigation": { "overlayOpenedBy": {}, "type": "overlay", "roleAttribute": "" } } }\'
@@ -746,11 +764,11 @@ function render_block_core_navigation( $attributes, $content, $block ) {
746
764
  }
747
765
 
748
766
  $responsive_container_markup = sprintf(
749
- '<button aria-haspopup="true" %3$s class="%6$s" %11$s>%9$s</button>
767
+ '<button aria-haspopup="true" %3$s class="%6$s" data-micromodal-trigger="%1$s" %11$s>%9$s</button>
750
768
  <div class="%5$s" style="%7$s" id="%1$s" %12$s>
751
- <div class="wp-block-navigation__responsive-close" tabindex="-1">
769
+ <div class="wp-block-navigation__responsive-close" tabindex="-1" data-micromodal-close>
752
770
  <div class="wp-block-navigation__responsive-dialog" aria-label="%8$s" %13$s>
753
- <button %4$s class="wp-block-navigation__responsive-container-close" %14$s>%10$s</button>
771
+ <button %4$s data-micromodal-close class="wp-block-navigation__responsive-container-close" %14$s>%10$s</button>
754
772
  <div class="wp-block-navigation__responsive-container-content" id="%1$s-content">
755
773
  %2$s
756
774
  </div>