@wordpress/block-library 8.5.0 → 8.6.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 (287) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/buttons/edit.native.js +1 -1
  3. package/build/buttons/edit.native.js.map +1 -1
  4. package/build/columns/edit.js +10 -8
  5. package/build/columns/edit.js.map +1 -1
  6. package/build/columns/edit.native.js +1 -1
  7. package/build/columns/edit.native.js.map +1 -1
  8. package/build/comments/edit/placeholder.js +8 -5
  9. package/build/comments/edit/placeholder.js.map +1 -1
  10. package/build/cover/index.js +13 -4
  11. package/build/cover/index.js.map +1 -1
  12. package/build/cover/variations.js +29 -0
  13. package/build/cover/variations.js.map +1 -0
  14. package/build/embed/edit.js +13 -14
  15. package/build/embed/edit.js.map +1 -1
  16. package/build/embed/edit.native.js +18 -14
  17. package/build/embed/edit.native.js.map +1 -1
  18. package/build/embed/util.js +39 -12
  19. package/build/embed/util.js.map +1 -1
  20. package/build/gallery/edit.js +1 -0
  21. package/build/gallery/edit.js.map +1 -1
  22. package/build/latest-posts/edit.js +10 -10
  23. package/build/latest-posts/edit.js.map +1 -1
  24. package/build/latest-posts/edit.native.js +3 -3
  25. package/build/latest-posts/edit.native.js.map +1 -1
  26. package/build/media-text/constants.js +17 -1
  27. package/build/media-text/constants.js.map +1 -1
  28. package/build/media-text/edit.js +7 -19
  29. package/build/media-text/edit.js.map +1 -1
  30. package/build/media-text/edit.native.js +6 -5
  31. package/build/media-text/edit.native.js.map +1 -1
  32. package/build/media-text/transforms.js +32 -44
  33. package/build/media-text/transforms.js.map +1 -1
  34. package/build/navigation/edit/index.js +56 -86
  35. package/build/navigation/edit/index.js.map +1 -1
  36. package/build/navigation/edit/inner-blocks.js +4 -1
  37. package/build/navigation/edit/inner-blocks.js.map +1 -1
  38. package/build/navigation/edit/menu-inspector-controls.js +2 -5
  39. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  40. package/build/navigation/edit/navigation-menu-selector.js +26 -22
  41. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  42. package/build/navigation/edit/unsaved-inner-blocks.js +14 -1
  43. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  44. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
  45. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  46. package/build/navigation/edit/use-create-navigation-menu.js +1 -1
  47. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  48. package/build/navigation/edit/use-navigation-notice.js +1 -1
  49. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  50. package/build/navigation-link/edit.js +0 -11
  51. package/build/navigation-link/edit.js.map +1 -1
  52. package/build/navigation-link/link-ui.js +0 -1
  53. package/build/navigation-link/link-ui.js.map +1 -1
  54. package/build/navigation-submenu/edit.js +1 -13
  55. package/build/navigation-submenu/edit.js.map +1 -1
  56. package/build/page-list/edit.js +59 -45
  57. package/build/page-list/edit.js.map +1 -1
  58. package/build/page-list-item/edit.js +3 -2
  59. package/build/page-list-item/edit.js.map +1 -1
  60. package/build/post-content/edit.js +6 -1
  61. package/build/post-content/edit.js.map +1 -1
  62. package/build/post-featured-image/dimension-controls.js +0 -6
  63. package/build/post-featured-image/dimension-controls.js.map +1 -1
  64. package/build/post-featured-image/edit.js +1 -1
  65. package/build/post-featured-image/edit.js.map +1 -1
  66. package/build/pullquote/deprecated.js +3 -3
  67. package/build/pullquote/deprecated.js.map +1 -1
  68. package/build/query/edit/query-placeholder.js +3 -2
  69. package/build/query/edit/query-placeholder.js.map +1 -1
  70. package/build/query/utils.js +26 -9
  71. package/build/query/utils.js.map +1 -1
  72. package/build/table/state.js +12 -4
  73. package/build/table/state.js.map +1 -1
  74. package/build/template-part/edit/import-controls.js +4 -24
  75. package/build/template-part/edit/import-controls.js.map +1 -1
  76. package/build/template-part/edit/utils/transformers.js +69 -19
  77. package/build/template-part/edit/utils/transformers.js.map +1 -1
  78. package/build/text-columns/edit.js +3 -7
  79. package/build/text-columns/edit.js.map +1 -1
  80. package/build/text-columns/save.js +11 -13
  81. package/build/text-columns/save.js.map +1 -1
  82. package/build-module/buttons/edit.native.js +1 -1
  83. package/build-module/buttons/edit.native.js.map +1 -1
  84. package/build-module/columns/edit.js +10 -7
  85. package/build-module/columns/edit.js.map +1 -1
  86. package/build-module/columns/edit.native.js +1 -1
  87. package/build-module/columns/edit.native.js.map +1 -1
  88. package/build-module/comments/edit/placeholder.js +9 -5
  89. package/build-module/comments/edit/placeholder.js.map +1 -1
  90. package/build-module/cover/index.js +12 -4
  91. package/build-module/cover/index.js.map +1 -1
  92. package/build-module/cover/variations.js +19 -0
  93. package/build-module/cover/variations.js.map +1 -0
  94. package/build-module/embed/edit.js +14 -15
  95. package/build-module/embed/edit.js.map +1 -1
  96. package/build-module/embed/edit.native.js +19 -15
  97. package/build-module/embed/edit.native.js.map +1 -1
  98. package/build-module/embed/util.js +34 -10
  99. package/build-module/embed/util.js.map +1 -1
  100. package/build-module/gallery/edit.js +1 -0
  101. package/build-module/gallery/edit.js.map +1 -1
  102. package/build-module/latest-posts/edit.js +10 -9
  103. package/build-module/latest-posts/edit.js.map +1 -1
  104. package/build-module/latest-posts/edit.native.js +3 -3
  105. package/build-module/latest-posts/edit.native.js.map +1 -1
  106. package/build-module/media-text/constants.js +10 -0
  107. package/build-module/media-text/constants.js.map +1 -1
  108. package/build-module/media-text/edit.js +2 -14
  109. package/build-module/media-text/edit.js.map +1 -1
  110. package/build-module/media-text/edit.native.js +4 -3
  111. package/build-module/media-text/edit.native.js.map +1 -1
  112. package/build-module/media-text/transforms.js +32 -44
  113. package/build-module/media-text/transforms.js.map +1 -1
  114. package/build-module/navigation/edit/index.js +58 -88
  115. package/build-module/navigation/edit/index.js.map +1 -1
  116. package/build-module/navigation/edit/inner-blocks.js +4 -1
  117. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  118. package/build-module/navigation/edit/menu-inspector-controls.js +2 -5
  119. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  120. package/build-module/navigation/edit/navigation-menu-selector.js +25 -22
  121. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  122. package/build-module/navigation/edit/unsaved-inner-blocks.js +14 -1
  123. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  124. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
  125. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  126. package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
  127. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  128. package/build-module/navigation/edit/use-navigation-notice.js +1 -1
  129. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  130. package/build-module/navigation-link/edit.js +0 -11
  131. package/build-module/navigation-link/edit.js.map +1 -1
  132. package/build-module/navigation-link/link-ui.js +0 -1
  133. package/build-module/navigation-link/link-ui.js.map +1 -1
  134. package/build-module/navigation-submenu/edit.js +1 -13
  135. package/build-module/navigation-submenu/edit.js.map +1 -1
  136. package/build-module/page-list/edit.js +61 -47
  137. package/build-module/page-list/edit.js.map +1 -1
  138. package/build-module/page-list-item/edit.js +3 -2
  139. package/build-module/page-list-item/edit.js.map +1 -1
  140. package/build-module/post-content/edit.js +6 -1
  141. package/build-module/post-content/edit.js.map +1 -1
  142. package/build-module/post-featured-image/dimension-controls.js +0 -6
  143. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  144. package/build-module/post-featured-image/edit.js +1 -1
  145. package/build-module/post-featured-image/edit.js.map +1 -1
  146. package/build-module/pullquote/deprecated.js +3 -2
  147. package/build-module/pullquote/deprecated.js.map +1 -1
  148. package/build-module/query/edit/query-placeholder.js +4 -3
  149. package/build-module/query/edit/query-placeholder.js.map +1 -1
  150. package/build-module/query/utils.js +21 -6
  151. package/build-module/query/utils.js.map +1 -1
  152. package/build-module/table/state.js +13 -5
  153. package/build-module/table/state.js.map +1 -1
  154. package/build-module/template-part/edit/import-controls.js +4 -23
  155. package/build-module/template-part/edit/import-controls.js.map +1 -1
  156. package/build-module/template-part/edit/utils/transformers.js +69 -20
  157. package/build-module/template-part/edit/utils/transformers.js.map +1 -1
  158. package/build-module/text-columns/edit.js +3 -6
  159. package/build-module/text-columns/edit.js.map +1 -1
  160. package/build-module/text-columns/save.js +11 -12
  161. package/build-module/text-columns/save.js.map +1 -1
  162. package/build-style/cover/style-rtl.css +11 -5
  163. package/build-style/cover/style.css +11 -5
  164. package/build-style/editor-rtl.css +5 -1
  165. package/build-style/editor.css +5 -1
  166. package/build-style/navigation/editor-rtl.css +1 -1
  167. package/build-style/navigation/editor.css +1 -1
  168. package/build-style/page-list/editor-rtl.css +4 -0
  169. package/build-style/page-list/editor.css +4 -0
  170. package/build-style/post-featured-image/style-rtl.css +1 -0
  171. package/build-style/post-featured-image/style.css +1 -0
  172. package/build-style/style-rtl.css +12 -5
  173. package/build-style/style.css +12 -5
  174. package/package.json +31 -31
  175. package/src/audio/test/__snapshots__/edit.native.js.snap +44 -4
  176. package/src/audio/test/__snapshots__/transforms.native.js.snap +25 -0
  177. package/src/audio/test/transforms.native.js +42 -0
  178. package/src/block/test/__snapshots__/transforms.native.js.snap +15 -0
  179. package/src/block/test/transforms.native.js +40 -0
  180. package/src/buttons/edit.native.js +1 -1
  181. package/src/buttons/test/__snapshots__/transforms.native.js.snap +31 -0
  182. package/src/buttons/test/transforms.native.js +48 -0
  183. package/src/columns/edit.js +28 -17
  184. package/src/columns/edit.native.js +1 -1
  185. package/src/columns/test/__snapshots__/transforms.native.js.snap +61 -0
  186. package/src/columns/test/transforms.native.js +91 -0
  187. package/src/comment-template/index.php +1 -2
  188. package/src/comments/edit/placeholder.js +16 -4
  189. package/src/cover/block.json +9 -3
  190. package/src/cover/index.js +2 -0
  191. package/src/cover/style.scss +16 -7
  192. package/src/cover/test/__snapshots__/transforms.native.js.snap +73 -0
  193. package/src/cover/test/transforms.native.js +112 -0
  194. package/src/cover/variations.js +20 -0
  195. package/src/embed/edit.js +16 -12
  196. package/src/embed/edit.native.js +28 -18
  197. package/src/embed/test/__snapshots__/transforms.native.js.snap +23 -0
  198. package/src/embed/test/index.js +12 -0
  199. package/src/embed/test/transforms.native.js +44 -0
  200. package/src/embed/util.js +29 -8
  201. package/src/file/test/__snapshots__/edit.native.js.snap +18 -2
  202. package/src/file/test/__snapshots__/transforms.native.js.snap +19 -0
  203. package/src/file/test/transforms.native.js +42 -0
  204. package/src/freeform/test/__snapshots__/transforms.native.js.snap +19 -0
  205. package/src/freeform/test/transforms.native.js +39 -0
  206. package/src/gallery/edit.js +3 -0
  207. package/src/gallery/test/__snapshots__/transforms.native.js.snap +53 -0
  208. package/src/gallery/test/transforms.native.js +52 -0
  209. package/src/group/test/__snapshots__/transforms.native.js.snap +35 -0
  210. package/src/group/test/transforms.native.js +75 -0
  211. package/src/heading/test/__snapshots__/transforms.native.js.snap +47 -0
  212. package/src/heading/test/transforms.native.js +46 -0
  213. package/src/image/test/__snapshots__/transforms.native.js.snap +49 -0
  214. package/src/image/test/transforms.native.js +48 -0
  215. package/src/latest-posts/edit.js +11 -16
  216. package/src/latest-posts/edit.native.js +3 -3
  217. package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +15 -0
  218. package/src/latest-posts/test/transforms.native.js +61 -0
  219. package/src/list/test/__snapshots__/transforms.native.js.snap +85 -0
  220. package/src/list/test/transforms.native.js +56 -0
  221. package/src/media-text/constants.js +16 -0
  222. package/src/media-text/edit.js +8 -18
  223. package/src/media-text/edit.native.js +3 -9
  224. package/src/media-text/test/__snapshots__/transforms.native.js.snap +73 -0
  225. package/src/media-text/test/transforms.native.js +112 -0
  226. package/src/media-text/transforms.js +24 -51
  227. package/src/missing/test/__snapshots__/edit.native.js.snap +20 -2
  228. package/src/more/test/__snapshots__/transforms.native.js.snap +19 -0
  229. package/src/more/test/transforms.native.js +42 -0
  230. package/src/navigation/edit/index.js +104 -107
  231. package/src/navigation/edit/inner-blocks.js +3 -0
  232. package/src/navigation/edit/menu-inspector-controls.js +2 -7
  233. package/src/navigation/edit/navigation-menu-selector.js +41 -25
  234. package/src/navigation/edit/unsaved-inner-blocks.js +46 -33
  235. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +82 -83
  236. package/src/navigation/edit/use-create-navigation-menu.js +1 -1
  237. package/src/navigation/edit/use-navigation-notice.js +1 -1
  238. package/src/navigation/editor.scss +23 -20
  239. package/src/navigation/index.php +18 -39
  240. package/src/navigation-link/edit.js +0 -9
  241. package/src/navigation-link/index.php +5 -8
  242. package/src/navigation-link/link-ui.js +0 -1
  243. package/src/navigation-submenu/edit.js +0 -10
  244. package/src/navigation-submenu/index.php +23 -6
  245. package/src/nextpage/test/__snapshots__/transforms.native.js.snap +19 -0
  246. package/src/nextpage/test/transforms.native.js +42 -0
  247. package/src/page-list/edit.js +78 -44
  248. package/src/page-list/editor.scss +6 -0
  249. package/src/page-list-item/edit.js +2 -3
  250. package/src/paragraph/test/__snapshots__/transforms.native.js.snap +59 -0
  251. package/src/paragraph/test/transforms.native.js +50 -0
  252. package/src/post-content/edit.js +5 -1
  253. package/src/post-excerpt/index.php +1 -2
  254. package/src/post-featured-image/dimension-controls.js +0 -8
  255. package/src/post-featured-image/edit.js +1 -1
  256. package/src/post-featured-image/style.scss +1 -0
  257. package/src/preformatted/test/__snapshots__/transforms.native.js.snap +31 -0
  258. package/src/preformatted/test/transforms.native.js +42 -0
  259. package/src/pullquote/deprecated.js +2 -6
  260. package/src/pullquote/test/__snapshots__/transforms.native.js.snap +47 -0
  261. package/src/pullquote/test/transforms.native.js +46 -0
  262. package/src/query/edit/query-placeholder.js +10 -5
  263. package/src/query/test/utils.js +33 -1
  264. package/src/query/utils.js +19 -6
  265. package/src/quote/test/__snapshots__/transforms.native.js.snap +39 -0
  266. package/src/quote/test/transforms.native.js +67 -0
  267. package/src/search/test/__snapshots__/edit.native.js.snap +11 -1
  268. package/src/search/test/__snapshots__/transforms.native.js.snap +15 -0
  269. package/src/search/test/transforms.native.js +40 -0
  270. package/src/separator/test/__snapshots__/transforms.native.js.snap +19 -0
  271. package/src/separator/test/transforms.native.js +42 -0
  272. package/src/shortcode/test/__snapshots__/transforms.native.js.snap +19 -0
  273. package/src/shortcode/test/transforms.native.js +42 -0
  274. package/src/social-links/test/__snapshots__/transforms.native.js.snap +31 -0
  275. package/src/social-links/test/transforms.native.js +53 -0
  276. package/src/spacer/test/__snapshots__/transforms.native.js.snap +19 -0
  277. package/src/spacer/test/transforms.native.js +42 -0
  278. package/src/table/state.js +8 -17
  279. package/src/template-part/edit/import-controls.js +2 -29
  280. package/src/template-part/edit/utils/transformers.js +96 -19
  281. package/src/text-columns/edit.js +1 -6
  282. package/src/text-columns/save.js +1 -6
  283. package/src/verse/test/__snapshots__/transforms.native.js.snap +25 -0
  284. package/src/verse/test/transforms.native.js +42 -0
  285. package/src/video/test/__snapshots__/transforms.native.js.snap +41 -0
  286. package/src/video/test/transforms.native.js +48 -0
  287. package/tsconfig.tsbuildinfo +1 -1
@@ -36,89 +36,88 @@ function useConvertClassicToBlockMenu( clientId ) {
36
36
  const [ status, setStatus ] = useState( CLASSIC_MENU_CONVERSION_IDLE );
37
37
  const [ error, setError ] = useState( null );
38
38
 
39
- async function convertClassicMenuToBlockMenu(
40
- menuId,
41
- menuName,
42
- postStatus = 'publish'
43
- ) {
44
- let navigationMenu;
45
- let classicMenuItems;
46
-
47
- // 1. Fetch the classic Menu items.
48
- try {
49
- classicMenuItems = await registry
50
- .resolveSelect( coreStore )
51
- .getMenuItems( {
52
- menus: menuId,
53
- per_page: -1,
54
- context: 'view',
55
- } );
56
- } catch ( err ) {
57
- throw new Error(
58
- sprintf(
59
- // translators: %s: the name of a menu (e.g. Header navigation).
60
- __( `Unable to fetch classic menu "%s" from API.` ),
61
- menuName
62
- ),
63
- {
64
- cause: err,
65
- }
66
- );
67
- }
68
-
69
- // Handle offline response which resolves to `null`.
70
- if ( classicMenuItems === null ) {
71
- throw new Error(
72
- sprintf(
73
- // translators: %s: the name of a menu (e.g. Header navigation).
74
- __( `Unable to fetch classic menu "%s" from API.` ),
75
- menuName
76
- )
77
- );
78
- }
79
-
80
- // 2. Convert the classic items into blocks.
81
- const { innerBlocks } = menuItemsToBlocks( classicMenuItems );
82
-
83
- // 3. Create the `wp_navigation` Post with the blocks.
84
- try {
85
- navigationMenu = await createNavigationMenu(
86
- menuName,
87
- innerBlocks,
88
- postStatus
89
- );
90
-
91
- /**
92
- * Immediately trigger editEntityRecord to change the wp_navigation post status to 'publish'.
93
- * This status change causes the menu to be displayed on the front of the site and sets the post state to be "dirty".
94
- * The problem being solved is if saveEditedEntityRecord was used here, the menu would be updated on the frontend and the editor _automatically_,
95
- * without user interaction.
96
- * If the user abandons the site editor without saving, there would still be a wp_navigation post created as draft.
97
- */
98
- await editEntityRecord(
99
- 'postType',
100
- 'wp_navigation',
101
- navigationMenu.id,
102
- {
103
- status: postStatus,
104
- },
105
- { throwOnError: true }
106
- );
107
- } catch ( err ) {
108
- throw new Error(
109
- sprintf(
110
- // translators: %s: the name of a menu (e.g. Header navigation).
111
- __( `Unable to create Navigation Menu "%s".` ),
112
- menuName
113
- ),
114
- {
115
- cause: err,
116
- }
117
- );
118
- }
119
-
120
- return navigationMenu;
121
- }
39
+ const convertClassicMenuToBlockMenu = useCallback(
40
+ async ( menuId, menuName, postStatus = 'publish' ) => {
41
+ let navigationMenu;
42
+ let classicMenuItems;
43
+
44
+ // 1. Fetch the classic Menu items.
45
+ try {
46
+ classicMenuItems = await registry
47
+ .resolveSelect( coreStore )
48
+ .getMenuItems( {
49
+ menus: menuId,
50
+ per_page: -1,
51
+ context: 'view',
52
+ } );
53
+ } catch ( err ) {
54
+ throw new Error(
55
+ sprintf(
56
+ // translators: %s: the name of a menu (e.g. Header navigation).
57
+ __( `Unable to fetch classic menu "%s" from API.` ),
58
+ menuName
59
+ ),
60
+ {
61
+ cause: err,
62
+ }
63
+ );
64
+ }
65
+
66
+ // Handle offline response which resolves to `null`.
67
+ if ( classicMenuItems === null ) {
68
+ throw new Error(
69
+ sprintf(
70
+ // translators: %s: the name of a menu (e.g. Header navigation).
71
+ __( `Unable to fetch classic menu "%s" from API.` ),
72
+ menuName
73
+ )
74
+ );
75
+ }
76
+
77
+ // 2. Convert the classic items into blocks.
78
+ const { innerBlocks } = menuItemsToBlocks( classicMenuItems );
79
+
80
+ // 3. Create the `wp_navigation` Post with the blocks.
81
+ try {
82
+ navigationMenu = await createNavigationMenu(
83
+ menuName,
84
+ innerBlocks,
85
+ postStatus
86
+ );
87
+
88
+ /**
89
+ * Immediately trigger editEntityRecord to change the wp_navigation post status to 'publish'.
90
+ * This status change causes the menu to be displayed on the front of the site and sets the post state to be "dirty".
91
+ * The problem being solved is if saveEditedEntityRecord was used here, the menu would be updated on the frontend and the editor _automatically_,
92
+ * without user interaction.
93
+ * If the user abandons the site editor without saving, there would still be a wp_navigation post created as draft.
94
+ */
95
+ await editEntityRecord(
96
+ 'postType',
97
+ 'wp_navigation',
98
+ navigationMenu.id,
99
+ {
100
+ status: postStatus,
101
+ },
102
+ { throwOnError: true }
103
+ );
104
+ } catch ( err ) {
105
+ throw new Error(
106
+ sprintf(
107
+ // translators: %s: the name of a menu (e.g. Header navigation).
108
+ __( `Unable to create Navigation Menu "%s".` ),
109
+ menuName
110
+ ),
111
+ {
112
+ cause: err,
113
+ }
114
+ );
115
+ }
116
+
117
+ return navigationMenu;
118
+ },
119
+ [ createNavigationMenu, editEntityRecord, registry ]
120
+ );
122
121
 
123
122
  const convert = useCallback(
124
123
  async ( menuId, menuName, postStatus ) => {
@@ -90,7 +90,7 @@ export default function useCreateNavigationMenu( clientId ) {
90
90
  } );
91
91
  } );
92
92
  },
93
- [ serialize, saveEntityRecord, editEntityRecord, generateDefaultTitle ]
93
+ [ saveEntityRecord, editEntityRecord, generateDefaultTitle ]
94
94
  );
95
95
 
96
96
  return {
@@ -23,7 +23,7 @@ function useNavigationNotice( { name, message = '' } = {} ) {
23
23
  type: 'snackbar',
24
24
  } );
25
25
  },
26
- [ noticeRef, createWarningNotice ]
26
+ [ noticeRef, createWarningNotice, message, name ]
27
27
  );
28
28
 
29
29
  const hideNotice = useCallback( () => {
@@ -39,8 +39,7 @@
39
39
  }
40
40
 
41
41
  // Only show the flyout on hover if the parent menu item is selected.
42
- .wp-block-navigation:not(.is-selected):not(.has-child-selected)
43
- .has-child:hover {
42
+ .wp-block-navigation:not(.is-selected):not(.has-child-selected) .has-child:hover {
44
43
  > .wp-block-navigation__submenu-container {
45
44
  opacity: 0;
46
45
  visibility: hidden;
@@ -49,6 +48,7 @@
49
48
 
50
49
  // Styles for submenu flyout.
51
50
  .has-child {
51
+
52
52
  &.is-selected,
53
53
  &.has-child-selected {
54
54
  > .wp-block-navigation__submenu-container {
@@ -76,8 +76,7 @@
76
76
  flex-direction: column;
77
77
  }
78
78
 
79
- .is-dragging-components-draggable
80
- .wp-block-navigation-link > .wp-block-navigation__container {
79
+ .is-dragging-components-draggable .wp-block-navigation-link > .wp-block-navigation__container {
81
80
  // Set opacity to 1 to still be able to show the draggable chip.
82
81
  opacity: 1;
83
82
  visibility: hidden;
@@ -117,6 +116,7 @@
117
116
  */
118
117
 
119
118
  $colors-selector-size: 22px;
119
+
120
120
  .block-library-colors-selector {
121
121
  width: auto;
122
122
 
@@ -151,7 +151,7 @@ $colors-selector-size: 22px;
151
151
  min-width: $colors-selector-size;
152
152
  height: $colors-selector-size;
153
153
  min-height: $colors-selector-size;
154
- line-height: ( $colors-selector-size - 2 );
154
+ line-height: ($colors-selector-size - 2);
155
155
  padding: 2px;
156
156
 
157
157
  > svg {
@@ -161,6 +161,7 @@ $colors-selector-size: 22px;
161
161
 
162
162
  // Styling icon color.
163
163
  &.has-text-color {
164
+
164
165
  > svg,
165
166
  > svg path {
166
167
  color: inherit;
@@ -171,6 +172,7 @@ $colors-selector-size: 22px;
171
172
 
172
173
  // Colors Selector Popover.
173
174
  $color-control-label-height: 20px;
175
+
174
176
  .block-library-colors-selector__popover {
175
177
  .color-palette-controller-container {
176
178
  padding: 16px;
@@ -222,13 +224,16 @@ $color-control-label-height: 20px;
222
224
  0% {
223
225
  opacity: 1;
224
226
  }
227
+
225
228
  50% {
226
229
  opacity: 0.5;
227
230
  }
231
+
228
232
  100% {
229
233
  opacity: 1;
230
234
  }
231
235
  }
236
+
232
237
  // Unstyle some inherited placeholder component styles.
233
238
  .components-placeholder.wp-block-navigation-placeholder {
234
239
  outline: none;
@@ -271,6 +276,7 @@ $color-control-label-height: 20px;
271
276
  // against any background color.
272
277
  color: currentColor;
273
278
  background: transparent;
279
+
274
280
  &::before {
275
281
  content: "";
276
282
  display: block;
@@ -338,6 +344,7 @@ $color-control-label-height: 20px;
338
344
  // Hide the navigation indicator when in small contexts.
339
345
  .is-small &,
340
346
  .is-medium & {
347
+
341
348
  .wp-block-navigation-placeholder__actions__indicator,
342
349
  .wp-block-navigation-placeholder__actions__indicator + hr {
343
350
  display: none;
@@ -427,15 +434,14 @@ $color-control-label-height: 20px;
427
434
  }
428
435
  }
429
436
  }
437
+
430
438
  // Emulate the fullscreen editing inside the editor.
431
439
  // Most of this can be removed when the iframe lands.
432
440
 
433
441
  // When not fullscreen.
434
442
  .wp-block-navigation__responsive-container.is-menu-open {
435
443
  position: fixed;
436
- top:
437
- $admin-bar-height-big + $header-height + $block-toolbar-height +
438
- $border-width;
444
+ top: $admin-bar-height-big + $header-height + $block-toolbar-height + $border-width;
439
445
 
440
446
  @include break-medium() {
441
447
  top: $admin-bar-height + $header-height + $border-width;
@@ -445,6 +451,7 @@ $color-control-label-height: 20px;
445
451
  @include break-medium() {
446
452
  left: $admin-sidebar-width-collapsed;
447
453
  }
454
+
448
455
  @include break-large() {
449
456
  left: $admin-sidebar-width;
450
457
  }
@@ -452,17 +459,13 @@ $color-control-label-height: 20px;
452
459
 
453
460
  .has-fixed-toolbar .wp-block-navigation__responsive-container.is-menu-open {
454
461
  @include break-medium() {
455
- top:
456
- $admin-bar-height + $header-height + $block-toolbar-height +
457
- $border-width;
462
+ top: $admin-bar-height + $header-height + $block-toolbar-height + $border-width;
458
463
  }
459
464
  }
460
465
 
461
466
  .is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,
462
467
  .is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open {
463
- top:
464
- $admin-bar-height + $header-height + $block-toolbar-height +
465
- $border-width;
468
+ top: $admin-bar-height + $header-height + $block-toolbar-height + $border-width;
466
469
  }
467
470
 
468
471
  .is-sidebar-opened .wp-block-navigation__responsive-container.is-menu-open {
@@ -473,9 +476,7 @@ $color-control-label-height: 20px;
473
476
  .is-fullscreen-mode {
474
477
  .wp-block-navigation__responsive-container.is-menu-open {
475
478
  left: 0; // Unset the value from non fullscreen mode.
476
- top:
477
- $admin-bar-height-big + $header-height + $block-toolbar-height +
478
- $border-width;
479
+ top: $admin-bar-height-big + $header-height + $block-toolbar-height + $border-width;
479
480
 
480
481
  @include break-medium() {
481
482
  top: $header-height + $border-width;
@@ -495,8 +496,7 @@ $color-control-label-height: 20px;
495
496
  }
496
497
 
497
498
  // The iframe makes these rules a lot simpler.
498
- body.editor-styles-wrapper
499
- .wp-block-navigation__responsive-container.is-menu-open {
499
+ body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-open {
500
500
  top: 0;
501
501
  right: 0;
502
502
  bottom: 0;
@@ -536,6 +536,7 @@ body.editor-styles-wrapper
536
536
  .components-heading.wp-block-navigation-off-canvas-editor__title {
537
537
  margin: 0;
538
538
  }
539
+
539
540
  .wp-block-navigation-off-canvas-editor__header {
540
541
  margin-bottom: $grid-unit-10;
541
542
  }
@@ -552,6 +553,7 @@ body.editor-styles-wrapper
552
553
  0% {
553
554
  opacity: 0;
554
555
  }
556
+
555
557
  100% {
556
558
  opacity: 1;
557
559
  }
@@ -559,7 +561,7 @@ body.editor-styles-wrapper
559
561
 
560
562
  // Space spinner to give it breathing
561
563
  // room when block is selected and has focus outline.
562
- .wp-block-navigation .components-spinner {
564
+ .wp-block-navigation__loading-indicator-container {
563
565
  padding: $grid-unit-10 $grid-unit-15;
564
566
  }
565
567
 
@@ -571,6 +573,7 @@ body.editor-styles-wrapper
571
573
  0% {
572
574
  opacity: 1;
573
575
  }
576
+
574
577
  100% {
575
578
  opacity: 0.5;
576
579
  }
@@ -348,7 +348,7 @@ function block_core_navigation_maybe_use_classic_menu_fallback() {
348
348
  $wp_insert_post_result = wp_insert_post(
349
349
  array(
350
350
  'post_content' => $classic_nav_menu_blocks,
351
- 'post_title' => $classic_nav_menu->slug,
351
+ 'post_title' => $classic_nav_menu->name,
352
352
  'post_name' => $classic_nav_menu->slug,
353
353
  'post_status' => 'publish',
354
354
  'post_type' => 'wp_navigation',
@@ -431,37 +431,6 @@ function block_core_navigation_block_contains_core_navigation( $inner_blocks ) {
431
431
  return false;
432
432
  }
433
433
 
434
- /**
435
- * Create and returns a navigation menu containing a page-list as a fallback.
436
- *
437
- * @return array the newly created navigation menu.
438
- */
439
- function block_core_navigation_get_default_pages_fallback() {
440
- $registry = WP_Block_Type_Registry::get_instance();
441
-
442
- // If `core/page-list` is not registered then use empty blocks.
443
- $default_blocks = $registry->is_registered( 'core/page-list' ) ? '<!-- wp:page-list /-->' : '';
444
-
445
- // Create a new navigation menu from the fallback blocks.
446
- $wp_insert_post_result = wp_insert_post(
447
- array(
448
- 'post_content' => $default_blocks,
449
- 'post_title' => 'Navigation', // TODO - use the template slug in future.
450
- 'post_name' => 'Navigation', // TODO - use the template slug in future.
451
- 'post_status' => 'publish',
452
- 'post_type' => 'wp_navigation',
453
- ),
454
- true // So that we can check whether the result is an error.
455
- );
456
-
457
- if ( is_wp_error( $wp_insert_post_result ) ) {
458
- return;
459
- }
460
-
461
- // Fetch the most recently published navigation which will be the default one created above.
462
- return block_core_navigation_get_most_recently_published_navigation();
463
- }
464
-
465
434
  /**
466
435
  * Retrieves the appropriate fallback to be used on the front of the
467
436
  * site when there is no menu assigned to the Nav block.
@@ -472,7 +441,18 @@ function block_core_navigation_get_default_pages_fallback() {
472
441
  * @return array the array of blocks to be used as a fallback.
473
442
  */
474
443
  function block_core_navigation_get_fallback_blocks() {
475
- // Get the most recently published Navigation post.
444
+ $page_list_fallback = array(
445
+ array(
446
+ 'blockName' => 'core/page-list',
447
+ ),
448
+ );
449
+
450
+ $registry = WP_Block_Type_Registry::get_instance();
451
+
452
+ // If `core/page-list` is not registered then return empty blocks.
453
+ $fallback_blocks = $registry->is_registered( 'core/page-list' ) ? $page_list_fallback : array();
454
+
455
+ // Default to a list of Pages.
476
456
  $navigation_post = block_core_navigation_get_most_recently_published_navigation();
477
457
 
478
458
  // If there are no navigation posts then try to find a classic menu
@@ -481,15 +461,14 @@ function block_core_navigation_get_fallback_blocks() {
481
461
  $navigation_post = block_core_navigation_maybe_use_classic_menu_fallback();
482
462
  }
483
463
 
484
- // If there are no navigation posts then default to a list of Pages.
485
- if ( ! $navigation_post ) {
486
- $navigation_post = block_core_navigation_get_default_pages_fallback();
487
- }
488
-
489
- // Use the first non-empty Navigation as fallback, there should always be one.
464
+ // Use the first non-empty Navigation as fallback if available.
490
465
  if ( $navigation_post ) {
491
466
  $parsed_blocks = parse_blocks( $navigation_post->post_content );
492
467
  $maybe_fallback = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
468
+
469
+ // Normalizing blocks may result in an empty array of blocks if they were all `null` blocks.
470
+ // In this case default to the (Page List) fallback.
471
+ $fallback_blocks = ! empty( $maybe_fallback ) ? $maybe_fallback : $fallback_blocks;
493
472
  }
494
473
 
495
474
  // Normalizing blocks may result in an empty array of blocks if they were all `null` blocks.
@@ -225,15 +225,6 @@ export default function NavigationLinkEdit( {
225
225
  [ clientId ]
226
226
  );
227
227
 
228
- useEffect( () => {
229
- // This side-effect should not create an undo level as those should
230
- // only be created via user interactions. Mark this change as
231
- // not persistent to avoid undo level creation.
232
- // See https://github.com/WordPress/gutenberg/issues/34564.
233
- __unstableMarkNextChangeAsNotPersistent();
234
- setAttributes( { isTopLevelLink } );
235
- }, [ isTopLevelLink ] );
236
-
237
228
  /**
238
229
  * Transform to submenu block.
239
230
  */
@@ -9,18 +9,17 @@
9
9
  * Build an array with CSS classes and inline styles defining the colors
10
10
  * which will be applied to the navigation markup in the front-end.
11
11
  *
12
- * @param array $context Navigation block context.
13
- * @param array $attributes Block attributes.
12
+ * @param array $context Navigation block context.
13
+ * @param array $attributes Block attributes.
14
+ * @param bool $is_sub_menu Whether the link is part of a sub-menu.
14
15
  * @return array Colors CSS classes and inline styles.
15
16
  */
16
- function block_core_navigation_link_build_css_colors( $context, $attributes ) {
17
+ function block_core_navigation_link_build_css_colors( $context, $attributes, $is_sub_menu = false ) {
17
18
  $colors = array(
18
19
  'css_classes' => array(),
19
20
  'inline_styles' => '',
20
21
  );
21
22
 
22
- $is_sub_menu = isset( $attributes['isTopLevelLink'] ) ? ( ! $attributes['isTopLevelLink'] ) : false;
23
-
24
23
  // Text color.
25
24
  $named_text_color = null;
26
25
  $custom_text_color = null;
@@ -174,13 +173,11 @@ function render_block_core_navigation_link( $attributes, $content, $block ) {
174
173
  return '';
175
174
  }
176
175
 
177
- $colors = block_core_navigation_link_build_css_colors( $block->context, $attributes );
178
176
  $font_sizes = block_core_navigation_link_build_css_font_sizes( $block->context );
179
177
  $classes = array_merge(
180
- $colors['css_classes'],
181
178
  $font_sizes['css_classes']
182
179
  );
183
- $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] );
180
+ $style_attribute = $font_sizes['inline_styles'];
184
181
 
185
182
  $css_classes = trim( implode( ' ', $classes ) );
186
183
  $has_submenu = count( $block->inner_blocks ) > 0;
@@ -165,7 +165,6 @@ export function LinkUI( props ) {
165
165
  placement="bottom"
166
166
  onClose={ props.onClose }
167
167
  anchor={ props.anchor }
168
- __unstableSlotName={ '__unstable-block-tools-after' }
169
168
  shift
170
169
  >
171
170
  <LinkControl
@@ -224,16 +224,6 @@ export default function NavigationSubmenuEdit( {
224
224
  }
225
225
  }, [] );
226
226
 
227
- // Store the colors from context as attributes for rendering.
228
- useEffect( () => {
229
- // This side-effect should not create an undo level as those should
230
- // only be created via user interactions. Mark this change as
231
- // not persistent to avoid undo level creation.
232
- // See https://github.com/WordPress/gutenberg/issues/34564.
233
- __unstableMarkNextChangeAsNotPersistent();
234
- setAttributes( { isTopLevelItem } );
235
- }, [ isTopLevelItem ] );
236
-
237
227
  /**
238
228
  * The hook shouldn't be necessary but due to a focus loss happening
239
229
  * when selecting a suggestion in the link popover, we force close on block unselection.
@@ -9,18 +9,17 @@
9
9
  * Build an array with CSS classes and inline styles defining the colors
10
10
  * which will be applied to the navigation markup in the front-end.
11
11
  *
12
- * @param array $context Navigation block context.
13
- * @param array $attributes Block attributes.
12
+ * @param array $context Navigation block context.
13
+ * @param array $attributes Block attributes.
14
+ * @param bool $is_sub_menu Whether the block is a sub-menu.
14
15
  * @return array Colors CSS classes and inline styles.
15
16
  */
16
- function block_core_navigation_submenu_build_css_colors( $context, $attributes ) {
17
+ function block_core_navigation_submenu_build_css_colors( $context, $attributes, $is_sub_menu = false ) {
17
18
  $colors = array(
18
19
  'css_classes' => array(),
19
20
  'inline_styles' => '',
20
21
  );
21
22
 
22
- $is_sub_menu = isset( $attributes['isTopLevelItem'] ) ? ( ! $attributes['isTopLevelItem'] ) : false;
23
-
24
23
  // Text color.
25
24
  $named_text_color = null;
26
25
  $custom_text_color = null;
@@ -250,6 +249,15 @@ function render_block_core_navigation_submenu( $attributes, $content, $block ) {
250
249
  }
251
250
 
252
251
  if ( $has_submenu ) {
252
+ $colors = block_core_navigation_submenu_build_css_colors( $block->context, $attributes, $has_submenu );
253
+ $classes = array_merge(
254
+ array( 'wp-block-navigation__submenu-container' ),
255
+ $colors['css_classes']
256
+ );
257
+ $css_classes = trim( implode( ' ', $classes ) );
258
+
259
+ $style_attribute = $colors['inline_styles'];
260
+
253
261
  $inner_blocks_html = '';
254
262
  foreach ( $block->inner_blocks as $inner_block ) {
255
263
  $inner_blocks_html .= $inner_block->render();
@@ -263,10 +271,19 @@ function render_block_core_navigation_submenu( $attributes, $content, $block ) {
263
271
  $html = $tag_processor->get_updated_html();
264
272
  }
265
273
 
274
+ $wrapper_attributes = get_block_wrapper_attributes(
275
+ array(
276
+ 'class' => $css_classes,
277
+ 'style' => $style_attribute,
278
+ )
279
+ );
280
+
266
281
  $html .= sprintf(
267
- '<ul class="wp-block-navigation__submenu-container">%s</ul>',
282
+ '<ul %s>%s</ul>',
283
+ $wrapper_attributes,
268
284
  $inner_blocks_html
269
285
  );
286
+
270
287
  }
271
288
 
272
289
  $html .= '</li>';
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Page Break block transforms to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:nextpage -->
7
+ <!--nextpage-->
8
+ <!-- /wp:nextpage --></div>
9
+ <!-- /wp:column --></div>
10
+ <!-- /wp:columns -->"
11
+ `;
12
+
13
+ exports[`Page Break block transforms to Group block 1`] = `
14
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
15
+ <div class="wp-block-group"><!-- wp:nextpage -->
16
+ <!--nextpage-->
17
+ <!-- /wp:nextpage --></div>
18
+ <!-- /wp:group -->"
19
+ `;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'Page Break';
13
+ const initialHtml = `
14
+ <!-- wp:nextpage -->
15
+ <!--nextpage-->
16
+ <!-- /wp:nextpage -->`;
17
+
18
+ const transformsWithInnerBlocks = [ 'Columns', 'Group' ];
19
+ const blockTransforms = [ ...transformsWithInnerBlocks ];
20
+
21
+ setupCoreBlocks();
22
+
23
+ describe( `${ block } block transforms`, () => {
24
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
25
+ const screen = await initializeEditor( { initialHtml } );
26
+ const newBlock = await transformBlock( screen, block, blockTransform, {
27
+ hasInnerBlocks:
28
+ transformsWithInnerBlocks.includes( blockTransform ),
29
+ } );
30
+ expect( newBlock ).toBeVisible();
31
+ expect( getEditorHtml() ).toMatchSnapshot();
32
+ } );
33
+
34
+ it( 'matches expected transformation options', async () => {
35
+ const screen = await initializeEditor( { initialHtml } );
36
+ const transformOptions = await getBlockTransformOptions(
37
+ screen,
38
+ block
39
+ );
40
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
41
+ } );
42
+ } );