@wordpress/block-library 7.0.2 → 7.1.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 (447) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/audio/edit.js +4 -4
  3. package/build/audio/edit.js.map +1 -1
  4. package/build/audio/edit.native.js +4 -4
  5. package/build/audio/edit.native.js.map +1 -1
  6. package/build/audio/transforms.js +1 -1
  7. package/build/audio/transforms.js.map +1 -1
  8. package/build/block/edit.js +3 -9
  9. package/build/block/edit.js.map +1 -1
  10. package/build/button/edit.js +3 -2
  11. package/build/button/edit.js.map +1 -1
  12. package/build/button/edit.native.js +2 -2
  13. package/build/button/edit.native.js.map +1 -1
  14. package/build/buttons/transforms.js +8 -8
  15. package/build/buttons/transforms.js.map +1 -1
  16. package/build/categories/edit.js +15 -26
  17. package/build/categories/edit.js.map +1 -1
  18. package/build/code/index.js +0 -1
  19. package/build/code/index.js.map +1 -1
  20. package/build/columns/columnCalculations.native.js +1 -1
  21. package/build/columns/columnCalculations.native.js.map +1 -1
  22. package/build/columns/edit.js +1 -1
  23. package/build/columns/edit.js.map +1 -1
  24. package/build/columns/edit.native.js +3 -3
  25. package/build/columns/edit.native.js.map +1 -1
  26. package/build/cover/controls.native.js +5 -5
  27. package/build/cover/controls.native.js.map +1 -1
  28. package/build/cover/deprecated.js +188 -17
  29. package/build/cover/deprecated.js.map +1 -1
  30. package/build/cover/edit.js +8 -11
  31. package/build/cover/edit.js.map +1 -1
  32. package/build/cover/edit.native.js +8 -8
  33. package/build/cover/edit.native.js.map +1 -1
  34. package/build/cover/overlay-color-settings.native.js +3 -3
  35. package/build/cover/overlay-color-settings.native.js.map +1 -1
  36. package/build/cover/save.js +1 -1
  37. package/build/cover/save.js.map +1 -1
  38. package/build/cover/shared.js +2 -2
  39. package/build/cover/shared.js.map +1 -1
  40. package/build/embed/edit.js +1 -1
  41. package/build/embed/edit.js.map +1 -1
  42. package/build/embed/edit.native.js +1 -1
  43. package/build/embed/edit.native.js.map +1 -1
  44. package/build/embed/util.js +2 -2
  45. package/build/embed/util.js.map +1 -1
  46. package/build/embed/variations.js +1 -1
  47. package/build/embed/variations.js.map +1 -1
  48. package/build/file/edit.js +20 -17
  49. package/build/file/edit.js.map +1 -1
  50. package/build/file/edit.native.js +1 -1
  51. package/build/file/edit.native.js.map +1 -1
  52. package/build/file/save.js +7 -3
  53. package/build/file/save.js.map +1 -1
  54. package/build/freeform/edit.js +2 -2
  55. package/build/freeform/edit.js.map +1 -1
  56. package/build/gallery/edit.js +1 -1
  57. package/build/gallery/edit.js.map +1 -1
  58. package/build/gallery/gallery.native.js +1 -1
  59. package/build/gallery/gallery.native.js.map +1 -1
  60. package/build/gallery/v1/edit.js +3 -3
  61. package/build/gallery/v1/edit.js.map +1 -1
  62. package/build/gallery/v1/gallery-image.native.js +3 -3
  63. package/build/gallery/v1/gallery-image.native.js.map +1 -1
  64. package/build/gallery/v1/gallery.native.js +2 -2
  65. package/build/gallery/v1/gallery.native.js.map +1 -1
  66. package/build/group/index.js +3 -37
  67. package/build/group/index.js.map +1 -1
  68. package/build/group/transforms.js +45 -0
  69. package/build/group/transforms.js.map +1 -0
  70. package/build/home-link/edit.js +1 -1
  71. package/build/home-link/edit.js.map +1 -1
  72. package/build/image/edit.js +7 -6
  73. package/build/image/edit.js.map +1 -1
  74. package/build/image/edit.native.js +25 -10
  75. package/build/image/edit.native.js.map +1 -1
  76. package/build/image/transforms.js +1 -1
  77. package/build/image/transforms.js.map +1 -1
  78. package/build/index.js +3 -4
  79. package/build/index.js.map +1 -1
  80. package/build/index.native.js +2 -2
  81. package/build/index.native.js.map +1 -1
  82. package/build/media-text/edit.js +21 -2
  83. package/build/media-text/edit.js.map +1 -1
  84. package/build/media-text/edit.native.js +2 -2
  85. package/build/media-text/edit.native.js.map +1 -1
  86. package/build/media-text/media-container.native.js +1 -1
  87. package/build/media-text/media-container.native.js.map +1 -1
  88. package/build/missing/edit.native.js +1 -1
  89. package/build/missing/edit.native.js.map +1 -1
  90. package/build/more/transforms.js +2 -2
  91. package/build/more/transforms.js.map +1 -1
  92. package/build/navigation/edit/index.js +134 -60
  93. package/build/navigation/edit/index.js.map +1 -1
  94. package/build/navigation/edit/inner-blocks.js +8 -3
  95. package/build/navigation/edit/inner-blocks.js.map +1 -1
  96. package/build/navigation/edit/navigation-menu-selector.js +66 -53
  97. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  98. package/build/navigation/edit/placeholder/index.js +31 -46
  99. package/build/navigation/edit/placeholder/index.js.map +1 -1
  100. package/build/navigation/edit/placeholder/placeholder-preview.js +3 -12
  101. package/build/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
  102. package/build/navigation/edit/unsaved-inner-blocks.js +3 -1
  103. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  104. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +120 -0
  105. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
  106. package/build/navigation/edit/use-create-navigation-menu.js +53 -4
  107. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  108. package/build/navigation/edit/use-navigation-notice.js +3 -3
  109. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  110. package/build/navigation/menu-items-to-blocks.js +1 -1
  111. package/build/navigation/menu-items-to-blocks.js.map +1 -1
  112. package/build/navigation/use-navigation-entities.js +25 -49
  113. package/build/navigation/use-navigation-entities.js.map +1 -1
  114. package/build/navigation/use-navigation-menu.js +2 -0
  115. package/build/navigation/use-navigation-menu.js.map +1 -1
  116. package/build/navigation-link/fallback-variations.js +1 -1
  117. package/build/navigation-link/fallback-variations.js.map +1 -1
  118. package/build/navigation-link/hooks.js +2 -2
  119. package/build/navigation-link/hooks.js.map +1 -1
  120. package/build/navigation-submenu/edit.js +2 -2
  121. package/build/navigation-submenu/edit.js.map +1 -1
  122. package/build/page-list/convert-to-links-modal.js +13 -23
  123. package/build/page-list/convert-to-links-modal.js.map +1 -1
  124. package/build/page-list/edit.js +8 -22
  125. package/build/page-list/edit.js.map +1 -1
  126. package/build/post-author-name/edit.js +2 -1
  127. package/build/post-author-name/edit.js.map +1 -1
  128. package/build/post-comments-form/edit.js +3 -1
  129. package/build/post-comments-form/edit.js.map +1 -1
  130. package/build/post-excerpt/edit.js +7 -4
  131. package/build/post-excerpt/edit.js.map +1 -1
  132. package/build/post-terms/edit.js +3 -1
  133. package/build/post-terms/edit.js.map +1 -1
  134. package/build/query-title/edit.js +0 -1
  135. package/build/query-title/edit.js.map +1 -1
  136. package/build/search/edit.js +4 -1
  137. package/build/search/edit.js.map +1 -1
  138. package/build/search/edit.native.js +1 -1
  139. package/build/search/edit.native.js.map +1 -1
  140. package/build/separator/save.js +4 -4
  141. package/build/separator/save.js.map +1 -1
  142. package/build/separator/separator-settings.native.js +1 -1
  143. package/build/separator/separator-settings.native.js.map +1 -1
  144. package/build/site-logo/edit.js +1 -1
  145. package/build/site-logo/edit.js.map +1 -1
  146. package/build/social-link/edit.native.js +11 -3
  147. package/build/social-link/edit.native.js.map +1 -1
  148. package/build/spacer/controls.js +5 -5
  149. package/build/spacer/controls.js.map +1 -1
  150. package/build/spacer/controls.native.js +5 -5
  151. package/build/spacer/controls.native.js.map +1 -1
  152. package/build/table/edit.js +2 -2
  153. package/build/table/edit.js.map +1 -1
  154. package/build/video/edit.js +4 -4
  155. package/build/video/edit.js.map +1 -1
  156. package/build/video/edit.native.js +3 -3
  157. package/build/video/edit.native.js.map +1 -1
  158. package/build-module/audio/edit.js +4 -4
  159. package/build-module/audio/edit.js.map +1 -1
  160. package/build-module/audio/edit.native.js +4 -4
  161. package/build-module/audio/edit.native.js.map +1 -1
  162. package/build-module/audio/transforms.js +1 -1
  163. package/build-module/audio/transforms.js.map +1 -1
  164. package/build-module/block/edit.js +5 -11
  165. package/build-module/block/edit.js.map +1 -1
  166. package/build-module/button/edit.js +3 -2
  167. package/build-module/button/edit.js.map +1 -1
  168. package/build-module/button/edit.native.js +2 -2
  169. package/build-module/button/edit.native.js.map +1 -1
  170. package/build-module/buttons/transforms.js +8 -8
  171. package/build-module/buttons/transforms.js.map +1 -1
  172. package/build-module/categories/edit.js +15 -25
  173. package/build-module/categories/edit.js.map +1 -1
  174. package/build-module/code/index.js +0 -1
  175. package/build-module/code/index.js.map +1 -1
  176. package/build-module/columns/columnCalculations.native.js +1 -1
  177. package/build-module/columns/columnCalculations.native.js.map +1 -1
  178. package/build-module/columns/edit.js +1 -1
  179. package/build-module/columns/edit.js.map +1 -1
  180. package/build-module/columns/edit.native.js +3 -3
  181. package/build-module/columns/edit.native.js.map +1 -1
  182. package/build-module/cover/controls.native.js +5 -5
  183. package/build-module/cover/controls.native.js.map +1 -1
  184. package/build-module/cover/deprecated.js +190 -17
  185. package/build-module/cover/deprecated.js.map +1 -1
  186. package/build-module/cover/edit.js +8 -11
  187. package/build-module/cover/edit.js.map +1 -1
  188. package/build-module/cover/edit.native.js +8 -8
  189. package/build-module/cover/edit.native.js.map +1 -1
  190. package/build-module/cover/overlay-color-settings.native.js +3 -3
  191. package/build-module/cover/overlay-color-settings.native.js.map +1 -1
  192. package/build-module/cover/save.js +1 -1
  193. package/build-module/cover/save.js.map +1 -1
  194. package/build-module/cover/shared.js +2 -2
  195. package/build-module/cover/shared.js.map +1 -1
  196. package/build-module/embed/edit.js +1 -1
  197. package/build-module/embed/edit.js.map +1 -1
  198. package/build-module/embed/edit.native.js +1 -1
  199. package/build-module/embed/edit.native.js.map +1 -1
  200. package/build-module/embed/util.js +2 -2
  201. package/build-module/embed/util.js.map +1 -1
  202. package/build-module/embed/variations.js +1 -1
  203. package/build-module/embed/variations.js.map +1 -1
  204. package/build-module/file/edit.js +21 -18
  205. package/build-module/file/edit.js.map +1 -1
  206. package/build-module/file/edit.native.js +1 -1
  207. package/build-module/file/edit.native.js.map +1 -1
  208. package/build-module/file/save.js +7 -3
  209. package/build-module/file/save.js.map +1 -1
  210. package/build-module/freeform/edit.js +2 -2
  211. package/build-module/freeform/edit.js.map +1 -1
  212. package/build-module/gallery/edit.js +1 -1
  213. package/build-module/gallery/edit.js.map +1 -1
  214. package/build-module/gallery/gallery.native.js +1 -1
  215. package/build-module/gallery/gallery.native.js.map +1 -1
  216. package/build-module/gallery/v1/edit.js +3 -3
  217. package/build-module/gallery/v1/edit.js.map +1 -1
  218. package/build-module/gallery/v1/gallery-image.native.js +3 -3
  219. package/build-module/gallery/v1/gallery-image.native.js.map +1 -1
  220. package/build-module/gallery/v1/gallery.native.js +2 -2
  221. package/build-module/gallery/v1/gallery.native.js.map +1 -1
  222. package/build-module/group/index.js +2 -36
  223. package/build-module/group/index.js.map +1 -1
  224. package/build-module/group/transforms.js +36 -0
  225. package/build-module/group/transforms.js.map +1 -0
  226. package/build-module/home-link/edit.js +1 -1
  227. package/build-module/home-link/edit.js.map +1 -1
  228. package/build-module/image/edit.js +7 -6
  229. package/build-module/image/edit.js.map +1 -1
  230. package/build-module/image/edit.native.js +25 -10
  231. package/build-module/image/edit.native.js.map +1 -1
  232. package/build-module/image/transforms.js +1 -1
  233. package/build-module/image/transforms.js.map +1 -1
  234. package/build-module/index.js +4 -5
  235. package/build-module/index.js.map +1 -1
  236. package/build-module/index.native.js +2 -2
  237. package/build-module/index.native.js.map +1 -1
  238. package/build-module/media-text/edit.js +20 -2
  239. package/build-module/media-text/edit.js.map +1 -1
  240. package/build-module/media-text/edit.native.js +2 -2
  241. package/build-module/media-text/edit.native.js.map +1 -1
  242. package/build-module/media-text/media-container.native.js +1 -1
  243. package/build-module/media-text/media-container.native.js.map +1 -1
  244. package/build-module/missing/edit.native.js +1 -1
  245. package/build-module/missing/edit.native.js.map +1 -1
  246. package/build-module/more/transforms.js +2 -2
  247. package/build-module/more/transforms.js.map +1 -1
  248. package/build-module/navigation/edit/index.js +128 -60
  249. package/build-module/navigation/edit/index.js.map +1 -1
  250. package/build-module/navigation/edit/inner-blocks.js +8 -3
  251. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  252. package/build-module/navigation/edit/navigation-menu-selector.js +66 -50
  253. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  254. package/build-module/navigation/edit/placeholder/index.js +32 -45
  255. package/build-module/navigation/edit/placeholder/index.js.map +1 -1
  256. package/build-module/navigation/edit/placeholder/placeholder-preview.js +3 -9
  257. package/build-module/navigation/edit/placeholder/placeholder-preview.js.map +1 -1
  258. package/build-module/navigation/edit/unsaved-inner-blocks.js +3 -1
  259. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  260. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +100 -0
  261. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -0
  262. package/build-module/navigation/edit/use-create-navigation-menu.js +48 -5
  263. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  264. package/build-module/navigation/edit/use-navigation-notice.js +3 -3
  265. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  266. package/build-module/navigation/menu-items-to-blocks.js +1 -1
  267. package/build-module/navigation/menu-items-to-blocks.js.map +1 -1
  268. package/build-module/navigation/use-navigation-entities.js +26 -50
  269. package/build-module/navigation/use-navigation-entities.js.map +1 -1
  270. package/build-module/navigation/use-navigation-menu.js +2 -0
  271. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  272. package/build-module/navigation-link/fallback-variations.js +1 -1
  273. package/build-module/navigation-link/fallback-variations.js.map +1 -1
  274. package/build-module/navigation-link/hooks.js +2 -2
  275. package/build-module/navigation-link/hooks.js.map +1 -1
  276. package/build-module/navigation-submenu/edit.js +2 -2
  277. package/build-module/navigation-submenu/edit.js.map +1 -1
  278. package/build-module/page-list/convert-to-links-modal.js +15 -25
  279. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  280. package/build-module/page-list/edit.js +9 -23
  281. package/build-module/page-list/edit.js.map +1 -1
  282. package/build-module/post-author-name/edit.js +2 -1
  283. package/build-module/post-author-name/edit.js.map +1 -1
  284. package/build-module/post-comments-form/edit.js +4 -2
  285. package/build-module/post-comments-form/edit.js.map +1 -1
  286. package/build-module/post-excerpt/edit.js +9 -6
  287. package/build-module/post-excerpt/edit.js.map +1 -1
  288. package/build-module/post-terms/edit.js +2 -1
  289. package/build-module/post-terms/edit.js.map +1 -1
  290. package/build-module/query-title/edit.js +0 -1
  291. package/build-module/query-title/edit.js.map +1 -1
  292. package/build-module/search/edit.js +3 -1
  293. package/build-module/search/edit.js.map +1 -1
  294. package/build-module/search/edit.native.js +1 -1
  295. package/build-module/search/edit.native.js.map +1 -1
  296. package/build-module/separator/save.js +4 -4
  297. package/build-module/separator/save.js.map +1 -1
  298. package/build-module/separator/separator-settings.native.js +1 -1
  299. package/build-module/separator/separator-settings.native.js.map +1 -1
  300. package/build-module/site-logo/edit.js +1 -1
  301. package/build-module/site-logo/edit.js.map +1 -1
  302. package/build-module/social-link/edit.native.js +11 -3
  303. package/build-module/social-link/edit.native.js.map +1 -1
  304. package/build-module/spacer/controls.js +5 -5
  305. package/build-module/spacer/controls.js.map +1 -1
  306. package/build-module/spacer/controls.native.js +5 -5
  307. package/build-module/spacer/controls.native.js.map +1 -1
  308. package/build-module/table/edit.js +2 -2
  309. package/build-module/table/edit.js.map +1 -1
  310. package/build-module/video/edit.js +4 -4
  311. package/build-module/video/edit.js.map +1 -1
  312. package/build-module/video/edit.native.js +3 -3
  313. package/build-module/video/edit.native.js.map +1 -1
  314. package/build-style/button/editor-rtl.css +0 -3
  315. package/build-style/button/editor.css +0 -3
  316. package/build-style/code/style-rtl.css +2 -1
  317. package/build-style/code/style.css +2 -1
  318. package/build-style/code/theme-rtl.css +0 -3
  319. package/build-style/code/theme.css +0 -3
  320. package/build-style/common-rtl.css +1 -1
  321. package/build-style/common.css +1 -1
  322. package/build-style/cover/style-rtl.css +1 -5
  323. package/build-style/cover/style.css +1 -5
  324. package/build-style/editor-rtl.css +16 -3
  325. package/build-style/editor.css +16 -3
  326. package/build-style/image/style-rtl.css +2 -1
  327. package/build-style/image/style.css +2 -1
  328. package/build-style/navigation/editor-rtl.css +16 -0
  329. package/build-style/navigation/editor.css +16 -0
  330. package/build-style/style-rtl.css +12 -10
  331. package/build-style/style.css +12 -10
  332. package/build-style/tag-cloud/style-rtl.css +6 -2
  333. package/build-style/tag-cloud/style.css +6 -2
  334. package/build-style/theme-rtl.css +0 -3
  335. package/build-style/theme.css +0 -3
  336. package/package.json +32 -28
  337. package/src/audio/edit.js +4 -4
  338. package/src/audio/edit.native.js +4 -4
  339. package/src/audio/transforms.js +1 -1
  340. package/src/block/edit.js +7 -22
  341. package/src/block/test/edit.native.js +9 -9
  342. package/src/button/edit.js +2 -1
  343. package/src/button/edit.native.js +2 -2
  344. package/src/button/editor.scss +0 -5
  345. package/src/buttons/test/edit.native.js +3 -3
  346. package/src/buttons/transforms.js +8 -8
  347. package/src/categories/edit.js +12 -22
  348. package/src/code/block.json +0 -1
  349. package/src/code/style.scss +4 -2
  350. package/src/code/theme.scss +0 -3
  351. package/src/columns/columnCalculations.native.js +1 -1
  352. package/src/columns/edit.js +1 -1
  353. package/src/columns/edit.native.js +3 -3
  354. package/src/comments-pagination-numbers/index.php +1 -1
  355. package/src/common.scss +1 -1
  356. package/src/cover/controls.native.js +1 -1
  357. package/src/cover/deprecated.js +214 -1
  358. package/src/cover/edit.js +6 -8
  359. package/src/cover/edit.native.js +8 -8
  360. package/src/cover/overlay-color-settings.native.js +3 -3
  361. package/src/cover/save.js +4 -3
  362. package/src/cover/shared.js +2 -2
  363. package/src/cover/style.scss +1 -3
  364. package/src/cover/test/edit.native.js +39 -39
  365. package/src/embed/edit.js +1 -1
  366. package/src/embed/edit.native.js +1 -1
  367. package/src/embed/test/index.native.js +105 -105
  368. package/src/embed/util.js +2 -2
  369. package/src/embed/variations.js +1 -1
  370. package/src/file/edit.js +19 -17
  371. package/src/file/edit.native.js +1 -1
  372. package/src/file/save.js +9 -3
  373. package/src/file/style.native.scss +1 -0
  374. package/src/freeform/edit.js +2 -2
  375. package/src/gallery/edit.js +1 -1
  376. package/src/gallery/gallery.native.js +1 -1
  377. package/src/gallery/test/__snapshots__/index.native.js.snap +164 -0
  378. package/src/gallery/test/helpers.native.js +293 -0
  379. package/src/gallery/test/index.native.js +583 -65
  380. package/src/gallery/v1/edit.js +3 -4
  381. package/src/gallery/v1/gallery-image.native.js +3 -3
  382. package/src/gallery/v1/gallery.native.js +2 -2
  383. package/src/group/index.js +2 -54
  384. package/src/group/transforms.js +52 -0
  385. package/src/home-link/edit.js +1 -1
  386. package/src/image/edit.js +7 -6
  387. package/src/image/edit.native.js +25 -8
  388. package/src/image/style.scss +2 -1
  389. package/src/image/test/edit.native.js +1 -1
  390. package/src/image/transforms.js +1 -1
  391. package/src/index.js +2 -3
  392. package/src/index.native.js +2 -2
  393. package/src/media-text/edit.js +20 -2
  394. package/src/media-text/edit.native.js +2 -2
  395. package/src/media-text/media-container.native.js +1 -1
  396. package/src/media-text/style.native.scss +1 -0
  397. package/src/missing/edit.native.js +1 -1
  398. package/src/missing/test/edit-integration.native.js +4 -4
  399. package/src/missing/test/edit.native.js +2 -2
  400. package/src/more/transforms.js +2 -2
  401. package/src/navigation/edit/index.js +194 -69
  402. package/src/navigation/edit/inner-blocks.js +11 -4
  403. package/src/navigation/edit/navigation-menu-selector.js +97 -79
  404. package/src/navigation/edit/placeholder/index.js +61 -84
  405. package/src/navigation/edit/placeholder/placeholder-preview.js +3 -10
  406. package/src/navigation/edit/unsaved-inner-blocks.js +3 -1
  407. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +137 -0
  408. package/src/navigation/edit/use-create-navigation-menu.js +59 -8
  409. package/src/navigation/edit/use-navigation-notice.js +3 -3
  410. package/src/navigation/editor.scss +23 -1
  411. package/src/navigation/menu-items-to-blocks.js +1 -1
  412. package/src/navigation/test/menu-items-to-blocks.js +1 -1
  413. package/src/navigation/use-navigation-entities.js +26 -60
  414. package/src/navigation/use-navigation-menu.js +5 -0
  415. package/src/navigation-link/fallback-variations.js +1 -1
  416. package/src/navigation-link/hooks.js +2 -2
  417. package/src/navigation-link/test/edit.js +5 -5
  418. package/src/navigation-submenu/edit.js +2 -2
  419. package/src/page-list/convert-to-links-modal.js +17 -31
  420. package/src/page-list/edit.js +14 -23
  421. package/src/post-author-name/edit.js +1 -0
  422. package/src/post-author-name/index.php +1 -1
  423. package/src/post-comments-form/edit.js +7 -3
  424. package/src/post-excerpt/edit.js +9 -12
  425. package/src/post-terms/edit.js +2 -1
  426. package/src/query-title/edit.js +0 -1
  427. package/src/search/edit.js +6 -0
  428. package/src/search/edit.native.js +1 -1
  429. package/src/search/index.php +3 -2
  430. package/src/search/test/edit.native.js +0 -1
  431. package/src/separator/save.js +4 -4
  432. package/src/separator/separator-settings.native.js +1 -1
  433. package/src/site-logo/edit.js +1 -1
  434. package/src/social-link/edit.native.js +17 -8
  435. package/src/social-link/test/index.native.js +138 -0
  436. package/src/spacer/controls.js +1 -1
  437. package/src/spacer/controls.native.js +1 -1
  438. package/src/table/edit.js +2 -2
  439. package/src/tag-cloud/style.scss +12 -7
  440. package/src/video/edit.js +4 -4
  441. package/src/video/edit.native.js +3 -3
  442. package/src/video/style.native.scss +1 -0
  443. package/build/navigation/use-convert-classic-menu.js +0 -59
  444. package/build/navigation/use-convert-classic-menu.js.map +0 -1
  445. package/build-module/navigation/use-convert-classic-menu.js +0 -47
  446. package/build-module/navigation/use-convert-classic-menu.js.map +0 -1
  447. package/src/navigation/use-convert-classic-menu.js +0 -58
@@ -1,117 +1,94 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { Placeholder, Button, DropdownMenu } from '@wordpress/components';
4
+ import { Placeholder, Button, Spinner } from '@wordpress/components';
5
5
  import { __ } from '@wordpress/i18n';
6
6
  import { navigation, Icon } from '@wordpress/icons';
7
+ import { speak } from '@wordpress/a11y';
8
+ import { useEffect } from '@wordpress/element';
7
9
 
8
10
  /**
9
11
  * Internal dependencies
10
12
  */
11
-
12
13
  import useNavigationEntities from '../../use-navigation-entities';
13
14
  import PlaceholderPreview from './placeholder-preview';
14
- import useNavigationMenu from '../../use-navigation-menu';
15
- import useCreateNavigationMenu from '../use-create-navigation-menu';
16
15
  import NavigationMenuSelector from '../navigation-menu-selector';
17
16
 
18
17
  export default function NavigationPlaceholder( {
18
+ isSelected,
19
+ currentMenuId,
19
20
  clientId,
20
- onFinish,
21
- canSwitchNavigationMenu,
22
- hasResolvedNavigationMenus,
23
21
  canUserCreateNavigationMenu = false,
22
+ isResolvingCanUserCreateNavigationMenu,
23
+ onFinish,
24
+ onCreateEmpty,
24
25
  } ) {
25
- const createNavigationMenu = useCreateNavigationMenu( clientId );
26
+ const { isResolvingMenus, hasResolvedMenus } = useNavigationEntities();
26
27
 
27
- const onFinishMenuCreation = async (
28
- blocks,
29
- navigationMenuTitle = null
30
- ) => {
31
- if ( ! canUserCreateNavigationMenu ) {
28
+ useEffect( () => {
29
+ if ( ! isSelected ) {
32
30
  return;
33
31
  }
34
32
 
35
- const navigationMenu = await createNavigationMenu(
36
- navigationMenuTitle,
37
- blocks
38
- );
39
- onFinish( navigationMenu, blocks );
40
- };
41
-
42
- const {
43
- isResolvingPages,
44
- isResolvingMenus,
45
- hasMenus,
46
- } = useNavigationEntities();
47
-
48
- const isStillLoading = isResolvingPages || isResolvingMenus;
49
-
50
- const onCreateEmptyMenu = () => {
51
- onFinishMenuCreation( [] );
52
- };
53
-
54
- const { navigationMenus } = useNavigationMenu();
33
+ if ( isResolvingMenus ) {
34
+ speak( __( 'Loading Navigation block setup options.' ) );
35
+ }
55
36
 
56
- const hasNavigationMenus = !! navigationMenus?.length;
37
+ if ( hasResolvedMenus ) {
38
+ speak( __( 'Navigation block setup options ready.' ) );
39
+ }
40
+ }, [ isResolvingMenus, isSelected ] );
57
41
 
58
- const showSelectMenus =
59
- ( canSwitchNavigationMenu || canUserCreateNavigationMenu ) &&
60
- ( hasNavigationMenus || hasMenus );
42
+ const isResolvingActions =
43
+ isResolvingMenus && isResolvingCanUserCreateNavigationMenu;
61
44
 
62
45
  return (
63
46
  <>
64
- { ( ! hasResolvedNavigationMenus || isStillLoading ) && (
65
- <PlaceholderPreview isLoading />
66
- ) }
67
- { hasResolvedNavigationMenus && ! isStillLoading && (
68
- <Placeholder className="wp-block-navigation-placeholder">
69
- <PlaceholderPreview />
70
- <div className="wp-block-navigation-placeholder__controls">
71
- <div className="wp-block-navigation-placeholder__actions">
72
- <div className="wp-block-navigation-placeholder__actions__indicator">
73
- <Icon icon={ navigation } />{ ' ' }
74
- { __( 'Navigation' ) }
75
- </div>
47
+ <Placeholder className="wp-block-navigation-placeholder">
48
+ {
49
+ // The <PlaceholderPreview> component is displayed conditionally via CSS depending on
50
+ // whether the block is selected or not. This is achieved via CSS to avoid
51
+ // component re-renders
52
+ }
53
+ <PlaceholderPreview isVisible={ ! isSelected } />
54
+ <div
55
+ aria-hidden={ ! isSelected ? true : undefined }
56
+ className="wp-block-navigation-placeholder__controls"
57
+ >
58
+ <div className="wp-block-navigation-placeholder__actions">
59
+ <div className="wp-block-navigation-placeholder__actions__indicator">
60
+ <Icon icon={ navigation } /> { __( 'Navigation' ) }
61
+ </div>
76
62
 
77
- <hr />
63
+ <hr />
78
64
 
79
- { showSelectMenus ? (
80
- <>
81
- <DropdownMenu
82
- text={ __( 'Select menu' ) }
83
- icon={ null }
84
- toggleProps={ {
85
- variant: 'tertiary',
86
- iconPosition: 'right',
87
- className:
88
- 'wp-block-navigation-placeholder__actions__dropdown',
89
- } }
90
- popoverProps={ { isAlternate: true } }
91
- >
92
- { () => (
93
- <NavigationMenuSelector
94
- clientId={ clientId }
95
- onSelect={ onFinish }
96
- />
97
- ) }
98
- </DropdownMenu>
99
- <hr />
100
- </>
101
- ) : undefined }
65
+ { isResolvingActions && <Spinner /> }
102
66
 
103
- { canUserCreateNavigationMenu && (
104
- <Button
105
- variant="tertiary"
106
- onClick={ onCreateEmptyMenu }
107
- >
108
- { __( 'Start empty' ) }
109
- </Button>
110
- ) }
111
- </div>
67
+ <NavigationMenuSelector
68
+ currentMenuId={ currentMenuId }
69
+ clientId={ clientId }
70
+ onSelect={ onFinish }
71
+ toggleProps={ {
72
+ variant: 'tertiary',
73
+ iconPosition: 'right',
74
+ className:
75
+ 'wp-block-navigation-placeholder__actions__dropdown',
76
+ } }
77
+ />
78
+
79
+ <hr />
80
+
81
+ { canUserCreateNavigationMenu && (
82
+ <Button
83
+ variant="tertiary"
84
+ onClick={ onCreateEmpty }
85
+ >
86
+ { __( 'Start empty' ) }
87
+ </Button>
88
+ ) }
112
89
  </div>
113
- </Placeholder>
114
- ) }
90
+ </div>
91
+ </Placeholder>
115
92
  </>
116
93
  );
117
94
  }
@@ -1,21 +1,14 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
9
4
  import { Icon, navigation } from '@wordpress/icons';
10
5
  import { __ } from '@wordpress/i18n';
11
6
 
12
- const PlaceholderPreview = ( { isLoading } ) => {
7
+ const PlaceholderPreview = ( { isVisible = true } ) => {
13
8
  return (
14
9
  <div
15
- className={ classnames(
16
- 'wp-block-navigation-placeholder__preview',
17
- { 'is-loading': isLoading }
18
- ) }
10
+ aria-hidden={ ! isVisible ? true : undefined }
11
+ className="wp-block-navigation-placeholder__preview"
19
12
  >
20
13
  <div className="wp-block-navigation-placeholder__actions__indicator">
21
14
  <Icon icon={ navigation } />
@@ -72,7 +72,9 @@ export default function UnsavedInnerBlocks( {
72
72
 
73
73
  const { hasResolvedNavigationMenus, navigationMenus } = useNavigationMenu();
74
74
 
75
- const createNavigationMenu = useCreateNavigationMenu( clientId );
75
+ const { create: createNavigationMenu } = useCreateNavigationMenu(
76
+ clientId
77
+ );
76
78
 
77
79
  // Automatically save the uncontrolled blocks.
78
80
  useEffect( async () => {
@@ -0,0 +1,137 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useRegistry } from '@wordpress/data';
5
+ import { store as coreStore } from '@wordpress/core-data';
6
+ import { useState, useCallback } from '@wordpress/element';
7
+ import { __, sprintf } from '@wordpress/i18n';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import useCreateNavigationMenu from './use-create-navigation-menu';
13
+ import menuItemsToBlocks from '../menu-items-to-blocks';
14
+
15
+ export const CLASSIC_MENU_CONVERSION_SUCCESS = 'success';
16
+ export const CLASSIC_MENU_CONVERSION_ERROR = 'error';
17
+ export const CLASSIC_MENU_CONVERSION_PENDING = 'pending';
18
+ export const CLASSIC_MENU_CONVERSION_IDLE = 'idle';
19
+
20
+ function useConvertClassicToBlockMenu( clientId ) {
21
+ const { create: createNavigationMenu } = useCreateNavigationMenu(
22
+ clientId
23
+ );
24
+ const registry = useRegistry();
25
+
26
+ const [ status, setStatus ] = useState( CLASSIC_MENU_CONVERSION_IDLE );
27
+ const [ value, setValue ] = useState( null );
28
+ const [ error, setError ] = useState( null );
29
+
30
+ async function convertClassicMenuToBlockMenu( menuId, menuName ) {
31
+ let navigationMenu;
32
+ let classicMenuItems;
33
+
34
+ // 1. Fetch the classic Menu items.
35
+ try {
36
+ classicMenuItems = await registry
37
+ .resolveSelect( coreStore )
38
+ .getMenuItems( {
39
+ menus: menuId,
40
+ per_page: -1,
41
+ context: 'view',
42
+ } );
43
+ } catch ( err ) {
44
+ throw new Error(
45
+ sprintf(
46
+ // translators: %s: the name of a menu (e.g. Header navigation).
47
+ __( `Unable to fetch classic menu "%s" from API.` ),
48
+ menuName
49
+ ),
50
+ {
51
+ cause: err,
52
+ }
53
+ );
54
+ }
55
+
56
+ // Handle offline response which resolves to `null`.
57
+ if ( classicMenuItems === null ) {
58
+ throw new Error(
59
+ sprintf(
60
+ // translators: %s: the name of a menu (e.g. Header navigation).
61
+ __( `Unable to fetch classic menu "%s" from API.` ),
62
+ menuName
63
+ )
64
+ );
65
+ }
66
+
67
+ // 2. Convert the classic items into blocks.
68
+ const { innerBlocks } = menuItemsToBlocks( classicMenuItems );
69
+
70
+ // 3. Create the `wp_navigation` Post with the blocks.
71
+ try {
72
+ navigationMenu = await createNavigationMenu(
73
+ menuName,
74
+ innerBlocks
75
+ );
76
+ } catch ( err ) {
77
+ throw new Error(
78
+ sprintf(
79
+ // translators: %s: the name of a menu (e.g. Header navigation).
80
+ __( `Unable to create Navigation Menu "%s".` ),
81
+ menuName
82
+ ),
83
+ {
84
+ cause: err,
85
+ }
86
+ );
87
+ }
88
+
89
+ return navigationMenu;
90
+ }
91
+
92
+ const convert = useCallback(
93
+ ( menuId, menuName ) => {
94
+ if ( ! menuId || ! menuName ) {
95
+ setError( 'Unable to convert menu. Missing menu details.' );
96
+ setStatus( CLASSIC_MENU_CONVERSION_ERROR );
97
+ return;
98
+ }
99
+
100
+ setStatus( CLASSIC_MENU_CONVERSION_PENDING );
101
+ setValue( null );
102
+ setError( null );
103
+
104
+ convertClassicMenuToBlockMenu( menuId, menuName )
105
+ .then( ( navMenu ) => {
106
+ setValue( navMenu );
107
+ setStatus( CLASSIC_MENU_CONVERSION_SUCCESS );
108
+ } )
109
+ .catch( ( err ) => {
110
+ setError( err?.message );
111
+ setStatus( CLASSIC_MENU_CONVERSION_ERROR );
112
+
113
+ // Rethrow error for debugging.
114
+ throw new Error(
115
+ sprintf(
116
+ // translators: %s: the name of a menu (e.g. Header navigation).
117
+ __( `Unable to create Navigation Menu "%s".` ),
118
+ menuName
119
+ ),
120
+ {
121
+ cause: err,
122
+ }
123
+ );
124
+ } );
125
+ },
126
+ [ clientId ]
127
+ );
128
+
129
+ return {
130
+ convert,
131
+ status,
132
+ value,
133
+ error,
134
+ };
135
+ }
136
+
137
+ export default useConvertClassicToBlockMenu;
@@ -4,23 +4,58 @@
4
4
  import { serialize } from '@wordpress/blocks';
5
5
  import { store as coreStore } from '@wordpress/core-data';
6
6
  import { useDispatch } from '@wordpress/data';
7
- import { useCallback } from '@wordpress/element';
7
+ import { useState, useCallback } from '@wordpress/element';
8
8
 
9
9
  /**
10
10
  * Internal dependencies
11
11
  */
12
12
  import useGenerateDefaultNavigationTitle from './use-generate-default-navigation-title';
13
13
 
14
+ export const CREATE_NAVIGATION_MENU_SUCCESS = 'success';
15
+ export const CREATE_NAVIGATION_MENU_ERROR = 'error';
16
+ export const CREATE_NAVIGATION_MENU_PENDING = 'pending';
17
+ export const CREATE_NAVIGATION_MENU_IDLE = 'idle';
18
+
14
19
  export default function useCreateNavigationMenu( clientId ) {
20
+ const [ status, setStatus ] = useState( CREATE_NAVIGATION_MENU_IDLE );
21
+ const [ value, setValue ] = useState( null );
22
+ const [ error, setError ] = useState( null );
23
+
15
24
  const { saveEntityRecord } = useDispatch( coreStore );
16
25
  const generateDefaultTitle = useGenerateDefaultNavigationTitle( clientId );
17
26
 
18
27
  // This callback uses data from the two placeholder steps and only creates
19
28
  // a new navigation menu when the user completes the final step.
20
- return useCallback(
29
+ const create = useCallback(
21
30
  async ( title = null, blocks = [] ) => {
31
+ // Guard against creating Navigations without a title.
32
+ // Note you can pass no title, but if one is passed it must be
33
+ // a string otherwise the title may end up being empty.
34
+ if ( title && typeof title !== 'string' ) {
35
+ setError(
36
+ 'Invalid title supplied when creating Navigation Menu.'
37
+ );
38
+ setStatus( CREATE_NAVIGATION_MENU_ERROR );
39
+ throw new Error(
40
+ `Value of supplied title argument was not a string.`
41
+ );
42
+ }
43
+
44
+ setStatus( CREATE_NAVIGATION_MENU_PENDING );
45
+ setValue( null );
46
+ setError( null );
47
+
22
48
  if ( ! title ) {
23
- title = await generateDefaultTitle();
49
+ title = await generateDefaultTitle().catch( ( err ) => {
50
+ setError( err?.message );
51
+ setStatus( CREATE_NAVIGATION_MENU_ERROR );
52
+ throw new Error(
53
+ 'Failed to create title when saving new Navigation Menu.',
54
+ {
55
+ cause: err,
56
+ }
57
+ );
58
+ } );
24
59
  }
25
60
  const record = {
26
61
  title,
@@ -28,12 +63,28 @@ export default function useCreateNavigationMenu( clientId ) {
28
63
  status: 'publish',
29
64
  };
30
65
 
31
- return await saveEntityRecord(
32
- 'postType',
33
- 'wp_navigation',
34
- record
35
- );
66
+ // Return affords ability to await on this function directly
67
+ return saveEntityRecord( 'postType', 'wp_navigation', record )
68
+ .then( ( response ) => {
69
+ setValue( response );
70
+ setStatus( CREATE_NAVIGATION_MENU_SUCCESS );
71
+ return response;
72
+ } )
73
+ .catch( ( err ) => {
74
+ setError( err?.message );
75
+ setStatus( CREATE_NAVIGATION_MENU_ERROR );
76
+ throw new Error( 'Unable to save new Navigation Menu', {
77
+ cause: err,
78
+ } );
79
+ } );
36
80
  },
37
81
  [ serialize, saveEntityRecord ]
38
82
  );
83
+
84
+ return {
85
+ create,
86
+ status,
87
+ value,
88
+ error,
89
+ };
39
90
  }
@@ -5,19 +5,19 @@ import { useRef } from '@wordpress/element';
5
5
  import { useDispatch } from '@wordpress/data';
6
6
  import { store as noticeStore } from '@wordpress/notices';
7
7
 
8
- function useNavigationNotice( { name, message } = {} ) {
8
+ function useNavigationNotice( { name, message = '' } = {} ) {
9
9
  const noticeRef = useRef();
10
10
 
11
11
  const { createWarningNotice, removeNotice } = useDispatch( noticeStore );
12
12
 
13
- const showNotice = () => {
13
+ const showNotice = ( customMsg ) => {
14
14
  if ( noticeRef.current ) {
15
15
  return;
16
16
  }
17
17
 
18
18
  noticeRef.current = name;
19
19
 
20
- createWarningNotice( message, {
20
+ createWarningNotice( customMsg || message, {
21
21
  id: noticeRef.current,
22
22
  type: 'snackbar',
23
23
  } );
@@ -119,7 +119,6 @@
119
119
  display: none;
120
120
  }
121
121
 
122
-
123
122
  /**
124
123
  * Colors Selector component
125
124
  */
@@ -262,6 +261,10 @@ $color-control-label-height: 20px;
262
261
  }
263
262
  }
264
263
 
264
+ .wp-block-navigation-placeholder .components-spinner {
265
+ margin-top: 0;
266
+ }
267
+
265
268
  // Unselected state.
266
269
  .wp-block-navigation-placeholder__preview {
267
270
  display: flex;
@@ -558,6 +561,12 @@ body.editor-styles-wrapper
558
561
  }
559
562
  }
560
563
 
564
+ // Space spinner to give it breathing
565
+ // room when block is selected and has focus outline.
566
+ .wp-block-navigation .components-spinner {
567
+ padding: $grid-unit-10 $grid-unit-15;
568
+ }
569
+
561
570
  .wp-block-navigation__unsaved-changes {
562
571
  position: relative;
563
572
 
@@ -608,3 +617,16 @@ body.editor-styles-wrapper
608
617
  background-color: $white;
609
618
  }
610
619
  }
620
+
621
+ // Temp - hide toolbar component when Nav Menu Selector is empty.
622
+ // TODO - extract state to common hook or parent component to avoid render.
623
+ .wp-block-navigation__toolbar-menu-selector.components-toolbar-group:empty {
624
+ display: none;
625
+ }
626
+
627
+ // Temp - hide adjacent <hr>s when Nav Menu Selector is empty.
628
+ // TODO - extract state to common hook or parent component to avoid render of <hr>.
629
+ .wp-block-navigation-placeholder__actions hr + hr {
630
+ display: none;
631
+ }
632
+
@@ -78,7 +78,7 @@ function mapMenuItemsToBlocks( menuItems ) {
78
78
  // Create block with nested "innerBlocks".
79
79
  const block = createBlock( blockType, attributes, nestedBlocks );
80
80
 
81
- // Create mapping for menuItem -> block
81
+ // Create mapping for menuItem -> block.
82
82
  mapping[ menuItem.id ] = block.clientId;
83
83
 
84
84
  return block;
@@ -320,7 +320,7 @@ describe( 'converting menu items to blocks', () => {
320
320
  type_label: 'Custom Link',
321
321
  object: 'custom',
322
322
  parent: 0,
323
- menu_order: 0, // capturing 0 edge case.
323
+ menu_order: 0, // Capturing 0 edge case.
324
324
  target: '',
325
325
  classes: [ '' ],
326
326
  xfn: [ '' ],
@@ -2,7 +2,10 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect } from '@wordpress/data';
5
- import { store as coreStore } from '@wordpress/core-data';
5
+ import {
6
+ store as coreStore,
7
+ __experimentalUseEntityRecords as useEntityRecords,
8
+ } from '@wordpress/core-data';
6
9
 
7
10
  /**
8
11
  * @typedef {Object} NavigationEntitiesData
@@ -34,31 +37,17 @@ export default function useNavigationEntities( menuId ) {
34
37
  }
35
38
 
36
39
  function useMenuEntities() {
37
- const { menus, isResolvingMenus, hasResolvedMenus } = useSelect(
38
- ( select ) => {
39
- const { getMenus, isResolving, hasFinishedResolution } = select(
40
- coreStore
41
- );
42
-
43
- const menusParameters = [ { per_page: -1, context: 'view' } ];
44
-
45
- return {
46
- menus: getMenus( ...menusParameters ),
47
- isResolvingMenus: isResolving( 'getMenus', menusParameters ),
48
- hasResolvedMenus: hasFinishedResolution(
49
- 'getMenus',
50
- menusParameters
51
- ),
52
- };
53
- },
54
- []
40
+ const { records, isResolving, hasResolved } = useEntityRecords(
41
+ 'root',
42
+ 'menu',
43
+ { per_page: -1, context: 'view' }
55
44
  );
56
45
 
57
46
  return {
58
- menus,
59
- isResolvingMenus,
60
- hasResolvedMenus,
61
- hasMenus: !! ( hasResolvedMenus && menus?.length ),
47
+ menus: records,
48
+ isResolvingMenus: isResolving,
49
+ hasResolvedMenus: hasResolved,
50
+ hasMenus: !! ( hasResolved && records?.length ),
62
51
  };
63
52
  }
64
53
 
@@ -100,45 +89,22 @@ function useMenuItemEntities( menuId ) {
100
89
  }
101
90
 
102
91
  function usePageEntities() {
103
- const { pages, isResolvingPages, hasResolvedPages } = useSelect(
104
- ( select ) => {
105
- const {
106
- getEntityRecords,
107
- isResolving,
108
- hasFinishedResolution,
109
- } = select( coreStore );
110
-
111
- const pagesParameters = [
112
- 'postType',
113
- 'page',
114
- {
115
- parent: 0,
116
- order: 'asc',
117
- orderby: 'id',
118
- per_page: -1,
119
- context: 'view',
120
- },
121
- ];
122
-
123
- return {
124
- pages: getEntityRecords( ...pagesParameters ) || null,
125
- isResolvingPages: isResolving(
126
- 'getEntityRecords',
127
- pagesParameters
128
- ),
129
- hasResolvedPages: hasFinishedResolution(
130
- 'getEntityRecords',
131
- pagesParameters
132
- ),
133
- };
134
- },
135
- []
92
+ const { records, isResolving, hasResolved } = useEntityRecords(
93
+ 'postType',
94
+ 'page',
95
+ {
96
+ parent: 0,
97
+ order: 'asc',
98
+ orderby: 'id',
99
+ per_page: -1,
100
+ context: 'view',
101
+ }
136
102
  );
137
103
 
138
104
  return {
139
- pages,
140
- isResolvingPages,
141
- hasResolvedPages,
142
- hasPages: !! ( hasResolvedPages && pages?.length ),
105
+ pages: records,
106
+ isResolvingPages: isResolving,
107
+ hasResolvedPages: hasResolved,
108
+ hasPages: !! ( hasResolved && records?.length ),
143
109
  };
144
110
  }
@@ -12,6 +12,7 @@ export default function useNavigationMenu( ref ) {
12
12
  getEditedEntityRecord,
13
13
  getEntityRecords,
14
14
  hasFinishedResolution,
15
+ isResolving,
15
16
  canUser,
16
17
  } = select( coreStore );
17
18
 
@@ -80,6 +81,10 @@ export default function useNavigationMenu( ref ) {
80
81
  [ 'delete', 'navigation', ref ]
81
82
  ),
82
83
  canUserCreateNavigationMenu: canUser( 'create', 'navigation' ),
84
+ isResolvingCanUserCreateNavigationMenu: isResolving(
85
+ 'canUser',
86
+ [ 'create', 'navigation' ]
87
+ ),
83
88
  hasResolvedCanUserCreateNavigationMenu: hasFinishedResolution(
84
89
  'canUser',
85
90
  [ 'create', 'navigation' ]
@@ -12,7 +12,7 @@ import {
12
12
  // FALLBACK: this is only used when the server does not understand the variations property in the
13
13
  // register_block_type call. see navigation-link/index.php.
14
14
  // Delete this file when supported WP ranges understand the `variations` property when passed to
15
- // register_block_type in index.php
15
+ // register_block_type in index.php.
16
16
  const fallbackVariations = [
17
17
  {
18
18
  name: 'link',