@wordpress/block-library 9.38.0 → 9.39.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 (470) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/block/block.json +2 -1
  3. package/build/breadcrumbs/edit.cjs +15 -5
  4. package/build/breadcrumbs/edit.cjs.map +2 -2
  5. package/build/breadcrumbs/index.cjs +1 -0
  6. package/build/breadcrumbs/index.cjs.map +2 -2
  7. package/build/button/index.cjs +3 -0
  8. package/build/button/index.cjs.map +2 -2
  9. package/build/comment-date/block.json +1 -0
  10. package/build/comment-edit-link/block.json +1 -3
  11. package/build/comment-edit-link/deprecated.cjs +91 -0
  12. package/build/comment-edit-link/deprecated.cjs.map +7 -0
  13. package/build/comment-edit-link/edit.cjs +6 -18
  14. package/build/comment-edit-link/edit.cjs.map +3 -3
  15. package/build/comment-edit-link/index.cjs +2 -0
  16. package/build/comment-edit-link/index.cjs.map +3 -3
  17. package/build/comment-reply-link/block.json +1 -5
  18. package/build/comment-reply-link/deprecated.cjs +84 -0
  19. package/build/comment-reply-link/deprecated.cjs.map +7 -0
  20. package/build/comment-reply-link/edit.cjs +10 -23
  21. package/build/comment-reply-link/edit.cjs.map +3 -3
  22. package/build/comment-reply-link/index.cjs +2 -0
  23. package/build/comment-reply-link/index.cjs.map +3 -3
  24. package/build/comments-title/block.json +1 -3
  25. package/build/comments-title/deprecated.cjs +148 -24
  26. package/build/comments-title/deprecated.cjs.map +3 -3
  27. package/build/comments-title/edit.cjs +17 -31
  28. package/build/comments-title/edit.cjs.map +3 -3
  29. package/build/cover/edit/block-controls.cjs +10 -2
  30. package/build/cover/edit/block-controls.cjs.map +2 -2
  31. package/build/cover/edit/embed-video-url-input.cjs +6 -2
  32. package/build/cover/edit/embed-video-url-input.cjs.map +2 -2
  33. package/build/cover/edit/inspector-controls.cjs +1 -1
  34. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  35. package/build/details/index.cjs +3 -0
  36. package/build/details/index.cjs.map +2 -2
  37. package/build/embed/util.cjs +9 -0
  38. package/build/embed/util.cjs.map +2 -2
  39. package/build/freeform/block.json +2 -1
  40. package/build/heading/index.cjs +3 -0
  41. package/build/heading/index.cjs.map +2 -2
  42. package/build/html/block.json +2 -1
  43. package/build/image/image.cjs +43 -9
  44. package/build/image/image.cjs.map +2 -2
  45. package/build/image/index.cjs +1 -1
  46. package/build/image/index.cjs.map +2 -2
  47. package/build/index.cjs +6 -0
  48. package/build/index.cjs.map +2 -2
  49. package/build/list-item/index.cjs +12 -1
  50. package/build/list-item/index.cjs.map +2 -2
  51. package/build/missing/block.json +2 -1
  52. package/build/more/block.json +2 -1
  53. package/build/more/index.cjs +1 -1
  54. package/build/more/index.cjs.map +2 -2
  55. package/build/navigation/block.json +5 -4
  56. package/build/navigation/deprecated.cjs +133 -5
  57. package/build/navigation/deprecated.cjs.map +2 -2
  58. package/build/navigation/edit/deleted-overlay-warning.cjs +70 -0
  59. package/build/navigation/edit/deleted-overlay-warning.cjs.map +7 -0
  60. package/build/navigation/edit/index.cjs +143 -65
  61. package/build/navigation/edit/index.cjs.map +3 -3
  62. package/build/navigation/edit/overlay-panel.cjs +10 -1
  63. package/build/navigation/edit/overlay-panel.cjs.map +3 -3
  64. package/build/navigation/edit/overlay-preview.cjs +120 -0
  65. package/build/navigation/edit/overlay-preview.cjs.map +7 -0
  66. package/build/navigation/edit/overlay-template-part-selector.cjs +59 -24
  67. package/build/navigation/edit/overlay-template-part-selector.cjs.map +3 -3
  68. package/build/navigation/edit/responsive-wrapper.cjs +12 -1
  69. package/build/navigation/edit/responsive-wrapper.cjs.map +3 -3
  70. package/build/navigation/edit/use-create-overlay.cjs +19 -2
  71. package/build/navigation/edit/use-create-overlay.cjs.map +3 -3
  72. package/build/navigation/utils/get-submenu-visibility.cjs +37 -0
  73. package/build/navigation/utils/get-submenu-visibility.cjs.map +7 -0
  74. package/build/navigation-link/edit.cjs +2 -40
  75. package/build/navigation-link/edit.cjs.map +2 -2
  76. package/build/navigation-link/shared/index.cjs +6 -0
  77. package/build/navigation-link/shared/index.cjs.map +2 -2
  78. package/build/navigation-link/shared/select-label-text.cjs +40 -0
  79. package/build/navigation-link/shared/select-label-text.cjs.map +7 -0
  80. package/build/navigation-link/shared/use-is-dragging-within.cjs +59 -0
  81. package/build/navigation-link/shared/use-is-dragging-within.cjs.map +7 -0
  82. package/build/navigation-submenu/block.json +1 -1
  83. package/build/navigation-submenu/edit.cjs +8 -47
  84. package/build/navigation-submenu/edit.cjs.map +2 -2
  85. package/build/navigation-submenu/index.cjs +2 -2
  86. package/build/navigation-submenu/index.cjs.map +2 -2
  87. package/build/nextpage/block.json +2 -1
  88. package/build/paragraph/block.json +1 -0
  89. package/build/paragraph/index.cjs +1 -1
  90. package/build/paragraph/index.cjs.map +2 -2
  91. package/build/post-excerpt/edit.cjs +1 -1
  92. package/build/post-excerpt/edit.cjs.map +2 -2
  93. package/build/shortcode/block.json +2 -1
  94. package/build/tab/add-tab-toolbar-control.cjs +31 -9
  95. package/build/tab/add-tab-toolbar-control.cjs.map +2 -2
  96. package/build/tab/block.json +18 -4
  97. package/build/tab/controls.cjs +4 -8
  98. package/build/tab/controls.cjs.map +3 -3
  99. package/build/tab/edit.cjs +46 -118
  100. package/build/tab/edit.cjs.map +3 -3
  101. package/build/tab/remove-tab-toolbar-control.cjs +91 -0
  102. package/build/tab/remove-tab-toolbar-control.cjs.map +7 -0
  103. package/build/tab/save.cjs +2 -2
  104. package/build/tab/save.cjs.map +2 -2
  105. package/build/tab-panels/block.json +70 -0
  106. package/build/tab-panels/edit.cjs +63 -0
  107. package/build/tab-panels/edit.cjs.map +7 -0
  108. package/build/tab-panels/icon.cjs +29 -0
  109. package/build/tab-panels/icon.cjs.map +7 -0
  110. package/build/tab-panels/index.cjs +58 -0
  111. package/build/tab-panels/index.cjs.map +7 -0
  112. package/build/tab-panels/save.cjs +33 -0
  113. package/build/tab-panels/save.cjs.map +7 -0
  114. package/build/tabs/block.json +61 -90
  115. package/build/tabs/controls.cjs +19 -221
  116. package/build/tabs/controls.cjs.map +3 -3
  117. package/build/tabs/deprecated.cjs +179 -0
  118. package/build/tabs/deprecated.cjs.map +7 -0
  119. package/build/tabs/edit.cjs +84 -62
  120. package/build/tabs/edit.cjs.map +3 -3
  121. package/build/tabs/index.cjs +3 -1
  122. package/build/tabs/index.cjs.map +3 -3
  123. package/build/tabs/save.cjs +6 -9
  124. package/build/tabs/save.cjs.map +2 -2
  125. package/build/tabs-menu/block.json +77 -0
  126. package/build/tabs-menu/edit.cjs +204 -0
  127. package/build/tabs-menu/edit.cjs.map +7 -0
  128. package/build/tabs-menu/icon.cjs +29 -0
  129. package/build/tabs-menu/icon.cjs.map +7 -0
  130. package/build/tabs-menu/index.cjs +58 -0
  131. package/build/tabs-menu/index.cjs.map +7 -0
  132. package/build/tabs-menu/save.cjs +35 -0
  133. package/build/tabs-menu/save.cjs.map +7 -0
  134. package/build/tabs-menu-item/block.json +98 -0
  135. package/build/tabs-menu-item/controls.cjs +247 -0
  136. package/build/tabs-menu-item/controls.cjs.map +7 -0
  137. package/build/tabs-menu-item/edit.cjs +272 -0
  138. package/build/tabs-menu-item/edit.cjs.map +7 -0
  139. package/build/tabs-menu-item/icon.cjs +29 -0
  140. package/build/tabs-menu-item/icon.cjs.map +7 -0
  141. package/build/tabs-menu-item/index.cjs +58 -0
  142. package/build/tabs-menu-item/index.cjs.map +7 -0
  143. package/build/tabs-menu-item/save.cjs +50 -0
  144. package/build/tabs-menu-item/save.cjs.map +7 -0
  145. package/build/template-part/edit/index.cjs +2 -2
  146. package/build/template-part/edit/index.cjs.map +2 -2
  147. package/build/utils/caption.cjs +4 -6
  148. package/build/utils/caption.cjs.map +3 -3
  149. package/build/verse/block.json +1 -3
  150. package/build/verse/deprecated.cjs +74 -5
  151. package/build/verse/deprecated.cjs.map +3 -3
  152. package/build/verse/edit.cjs +33 -48
  153. package/build/verse/edit.cjs.map +3 -3
  154. package/build/verse/save.cjs +2 -16
  155. package/build/verse/save.cjs.map +3 -3
  156. package/build/video/edit.cjs +4 -2
  157. package/build/video/edit.cjs.map +2 -2
  158. package/build-module/block/block.json +2 -1
  159. package/build-module/breadcrumbs/edit.mjs +15 -5
  160. package/build-module/breadcrumbs/edit.mjs.map +2 -2
  161. package/build-module/breadcrumbs/index.mjs +1 -0
  162. package/build-module/breadcrumbs/index.mjs.map +2 -2
  163. package/build-module/button/index.mjs +3 -0
  164. package/build-module/button/index.mjs.map +2 -2
  165. package/build-module/comment-date/block.json +1 -0
  166. package/build-module/comment-edit-link/block.json +1 -3
  167. package/build-module/comment-edit-link/deprecated.mjs +60 -0
  168. package/build-module/comment-edit-link/deprecated.mjs.map +7 -0
  169. package/build-module/comment-edit-link/edit.mjs +7 -24
  170. package/build-module/comment-edit-link/edit.mjs.map +2 -2
  171. package/build-module/comment-edit-link/index.mjs +2 -0
  172. package/build-module/comment-edit-link/index.mjs.map +2 -2
  173. package/build-module/comment-reply-link/block.json +1 -5
  174. package/build-module/comment-reply-link/deprecated.mjs +53 -0
  175. package/build-module/comment-reply-link/deprecated.mjs.map +7 -0
  176. package/build-module/comment-reply-link/edit.mjs +12 -29
  177. package/build-module/comment-reply-link/edit.mjs.map +2 -2
  178. package/build-module/comment-reply-link/index.mjs +2 -0
  179. package/build-module/comment-reply-link/index.mjs.map +2 -2
  180. package/build-module/comments-title/block.json +1 -3
  181. package/build-module/comments-title/deprecated.mjs +148 -24
  182. package/build-module/comments-title/deprecated.mjs.map +2 -2
  183. package/build-module/comments-title/edit.mjs +17 -32
  184. package/build-module/comments-title/edit.mjs.map +2 -2
  185. package/build-module/cover/edit/block-controls.mjs +11 -3
  186. package/build-module/cover/edit/block-controls.mjs.map +2 -2
  187. package/build-module/cover/edit/embed-video-url-input.mjs +6 -2
  188. package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
  189. package/build-module/cover/edit/inspector-controls.mjs +1 -1
  190. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  191. package/build-module/details/index.mjs +3 -0
  192. package/build-module/details/index.mjs.map +2 -2
  193. package/build-module/embed/util.mjs +8 -0
  194. package/build-module/embed/util.mjs.map +2 -2
  195. package/build-module/freeform/block.json +2 -1
  196. package/build-module/heading/index.mjs +3 -0
  197. package/build-module/heading/index.mjs.map +2 -2
  198. package/build-module/html/block.json +2 -1
  199. package/build-module/image/image.mjs +43 -9
  200. package/build-module/image/image.mjs.map +2 -2
  201. package/build-module/image/index.mjs +1 -1
  202. package/build-module/image/index.mjs.map +2 -2
  203. package/build-module/index.mjs +6 -0
  204. package/build-module/index.mjs.map +2 -2
  205. package/build-module/list-item/index.mjs +12 -1
  206. package/build-module/list-item/index.mjs.map +2 -2
  207. package/build-module/missing/block.json +2 -1
  208. package/build-module/more/block.json +2 -1
  209. package/build-module/more/index.mjs +1 -1
  210. package/build-module/more/index.mjs.map +2 -2
  211. package/build-module/navigation/block.json +5 -4
  212. package/build-module/navigation/deprecated.mjs +133 -5
  213. package/build-module/navigation/deprecated.mjs.map +2 -2
  214. package/build-module/navigation/edit/deleted-overlay-warning.mjs +49 -0
  215. package/build-module/navigation/edit/deleted-overlay-warning.mjs.map +7 -0
  216. package/build-module/navigation/edit/index.mjs +145 -65
  217. package/build-module/navigation/edit/index.mjs.map +2 -2
  218. package/build-module/navigation/edit/overlay-panel.mjs +10 -1
  219. package/build-module/navigation/edit/overlay-panel.mjs.map +2 -2
  220. package/build-module/navigation/edit/overlay-preview.mjs +99 -0
  221. package/build-module/navigation/edit/overlay-preview.mjs.map +7 -0
  222. package/build-module/navigation/edit/overlay-template-part-selector.mjs +61 -26
  223. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
  224. package/build-module/navigation/edit/responsive-wrapper.mjs +12 -1
  225. package/build-module/navigation/edit/responsive-wrapper.mjs.map +2 -2
  226. package/build-module/navigation/edit/use-create-overlay.mjs +21 -4
  227. package/build-module/navigation/edit/use-create-overlay.mjs.map +2 -2
  228. package/build-module/navigation/utils/get-submenu-visibility.mjs +12 -0
  229. package/build-module/navigation/utils/get-submenu-visibility.mjs.map +7 -0
  230. package/build-module/navigation-link/edit.mjs +4 -40
  231. package/build-module/navigation-link/edit.mjs.map +2 -2
  232. package/build-module/navigation-link/shared/index.mjs +4 -0
  233. package/build-module/navigation-link/shared/index.mjs.map +2 -2
  234. package/build-module/navigation-link/shared/select-label-text.mjs +15 -0
  235. package/build-module/navigation-link/shared/select-label-text.mjs.map +7 -0
  236. package/build-module/navigation-link/shared/use-is-dragging-within.mjs +34 -0
  237. package/build-module/navigation-link/shared/use-is-dragging-within.mjs.map +7 -0
  238. package/build-module/navigation-submenu/block.json +1 -1
  239. package/build-module/navigation-submenu/edit.mjs +10 -47
  240. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  241. package/build-module/navigation-submenu/index.mjs +2 -2
  242. package/build-module/navigation-submenu/index.mjs.map +2 -2
  243. package/build-module/nextpage/block.json +2 -1
  244. package/build-module/paragraph/block.json +1 -0
  245. package/build-module/paragraph/index.mjs +1 -1
  246. package/build-module/paragraph/index.mjs.map +2 -2
  247. package/build-module/post-excerpt/edit.mjs +1 -1
  248. package/build-module/post-excerpt/edit.mjs.map +2 -2
  249. package/build-module/shortcode/block.json +2 -1
  250. package/build-module/tab/add-tab-toolbar-control.mjs +32 -10
  251. package/build-module/tab/add-tab-toolbar-control.mjs.map +2 -2
  252. package/build-module/tab/block.json +18 -4
  253. package/build-module/tab/controls.mjs +4 -8
  254. package/build-module/tab/controls.mjs.map +2 -2
  255. package/build-module/tab/edit.mjs +48 -128
  256. package/build-module/tab/edit.mjs.map +2 -2
  257. package/build-module/tab/remove-tab-toolbar-control.mjs +73 -0
  258. package/build-module/tab/remove-tab-toolbar-control.mjs.map +7 -0
  259. package/build-module/tab/save.mjs +2 -2
  260. package/build-module/tab/save.mjs.map +2 -2
  261. package/build-module/tab-panels/block.json +70 -0
  262. package/build-module/tab-panels/edit.mjs +36 -0
  263. package/build-module/tab-panels/edit.mjs.map +7 -0
  264. package/build-module/tab-panels/icon.mjs +8 -0
  265. package/build-module/tab-panels/icon.mjs.map +7 -0
  266. package/build-module/tab-panels/index.mjs +20 -0
  267. package/build-module/tab-panels/index.mjs.map +7 -0
  268. package/build-module/tab-panels/save.mjs +12 -0
  269. package/build-module/tab-panels/save.mjs.map +7 -0
  270. package/build-module/tabs/block.json +61 -90
  271. package/build-module/tabs/controls.mjs +21 -228
  272. package/build-module/tabs/controls.mjs.map +2 -2
  273. package/build-module/tabs/deprecated.mjs +158 -0
  274. package/build-module/tabs/deprecated.mjs.map +7 -0
  275. package/build-module/tabs/edit.mjs +87 -64
  276. package/build-module/tabs/edit.mjs.map +2 -2
  277. package/build-module/tabs/index.mjs +3 -1
  278. package/build-module/tabs/index.mjs.map +2 -2
  279. package/build-module/tabs/save.mjs +7 -10
  280. package/build-module/tabs/save.mjs.map +2 -2
  281. package/build-module/tabs-menu/block.json +77 -0
  282. package/build-module/tabs-menu/edit.mjs +186 -0
  283. package/build-module/tabs-menu/edit.mjs.map +7 -0
  284. package/build-module/tabs-menu/icon.mjs +8 -0
  285. package/build-module/tabs-menu/icon.mjs.map +7 -0
  286. package/build-module/tabs-menu/index.mjs +20 -0
  287. package/build-module/tabs-menu/index.mjs.map +7 -0
  288. package/build-module/tabs-menu/save.mjs +14 -0
  289. package/build-module/tabs-menu/save.mjs.map +7 -0
  290. package/build-module/tabs-menu-item/block.json +98 -0
  291. package/build-module/tabs-menu-item/controls.mjs +227 -0
  292. package/build-module/tabs-menu-item/controls.mjs.map +7 -0
  293. package/build-module/tabs-menu-item/edit.mjs +253 -0
  294. package/build-module/tabs-menu-item/edit.mjs.map +7 -0
  295. package/build-module/tabs-menu-item/icon.mjs +8 -0
  296. package/build-module/tabs-menu-item/icon.mjs.map +7 -0
  297. package/build-module/tabs-menu-item/index.mjs +20 -0
  298. package/build-module/tabs-menu-item/index.mjs.map +7 -0
  299. package/build-module/tabs-menu-item/save.mjs +29 -0
  300. package/build-module/tabs-menu-item/save.mjs.map +7 -0
  301. package/build-module/template-part/edit/index.mjs +2 -2
  302. package/build-module/template-part/edit/index.mjs.map +2 -2
  303. package/build-module/utils/caption.mjs +1 -3
  304. package/build-module/utils/caption.mjs.map +2 -2
  305. package/build-module/verse/block.json +1 -3
  306. package/build-module/verse/deprecated.mjs +74 -5
  307. package/build-module/verse/deprecated.mjs.map +2 -2
  308. package/build-module/verse/edit.mjs +35 -55
  309. package/build-module/verse/edit.mjs.map +2 -2
  310. package/build-module/verse/save.mjs +2 -6
  311. package/build-module/verse/save.mjs.map +2 -2
  312. package/build-module/video/edit.mjs +4 -2
  313. package/build-module/video/edit.mjs.map +2 -2
  314. package/build-style/editor-rtl.css +64 -21
  315. package/build-style/editor.css +64 -21
  316. package/build-style/gallery/style-rtl.css +1 -1
  317. package/build-style/gallery/style.css +1 -1
  318. package/build-style/media-text/style-rtl.css +2 -0
  319. package/build-style/media-text/style.css +2 -0
  320. package/build-style/navigation/editor-rtl.css +48 -0
  321. package/build-style/navigation/editor.css +48 -0
  322. package/build-style/navigation/style-rtl.css +64 -18
  323. package/build-style/navigation/style.css +64 -18
  324. package/build-style/style-rtl.css +109 -171
  325. package/build-style/style.css +109 -171
  326. package/build-style/tab/style-rtl.css +7 -1
  327. package/build-style/tab/style.css +7 -1
  328. package/build-style/tab-panels/style-rtl.css +4 -0
  329. package/build-style/tab-panels/style.css +4 -0
  330. package/build-style/tabs/style-rtl.css +1 -167
  331. package/build-style/tabs/style.css +1 -167
  332. package/build-style/tabs-menu/editor-rtl.css +4 -0
  333. package/build-style/tabs-menu/editor.css +4 -0
  334. package/build-style/tabs-menu/style-rtl.css +8 -0
  335. package/build-style/tabs-menu/style.css +8 -0
  336. package/build-style/tabs-menu-item/editor-rtl.css +16 -0
  337. package/build-style/tabs-menu-item/editor.css +16 -0
  338. package/build-style/tabs-menu-item/style-rtl.css +34 -0
  339. package/build-style/tabs-menu-item/style.css +34 -0
  340. package/build-style/verse/style-rtl.css +1 -0
  341. package/build-style/verse/style.css +1 -0
  342. package/package.json +37 -37
  343. package/src/block/block.json +2 -1
  344. package/src/breadcrumbs/edit.js +10 -2
  345. package/src/breadcrumbs/index.js +1 -0
  346. package/src/button/index.js +4 -0
  347. package/src/categories/index.php +5 -1
  348. package/src/comment-date/block.json +1 -0
  349. package/src/comment-edit-link/block.json +1 -3
  350. package/src/comment-edit-link/deprecated.js +63 -0
  351. package/src/comment-edit-link/edit.js +7 -31
  352. package/src/comment-edit-link/index.js +2 -0
  353. package/src/comment-reply-link/block.json +1 -5
  354. package/src/comment-reply-link/deprecated.js +56 -0
  355. package/src/comment-reply-link/edit.js +6 -35
  356. package/src/comment-reply-link/index.js +2 -0
  357. package/src/comments-title/block.json +1 -3
  358. package/src/comments-title/deprecated.js +153 -23
  359. package/src/comments-title/edit.js +9 -25
  360. package/src/cover/edit/block-controls.js +14 -3
  361. package/src/cover/edit/embed-video-url-input.js +6 -2
  362. package/src/cover/edit/inspector-controls.js +1 -3
  363. package/src/details/index.js +4 -0
  364. package/src/editor.scss +2 -1
  365. package/src/embed/test/index.js +49 -0
  366. package/src/embed/util.js +21 -0
  367. package/src/freeform/block.json +2 -1
  368. package/src/gallery/style.scss +1 -1
  369. package/src/heading/index.js +4 -0
  370. package/src/html/block.json +2 -1
  371. package/src/image/image.js +63 -11
  372. package/src/image/index.js +4 -1
  373. package/src/index.js +6 -0
  374. package/src/list-item/index.js +16 -0
  375. package/src/media-text/style.scss +2 -0
  376. package/src/missing/block.json +2 -1
  377. package/src/more/block.json +2 -1
  378. package/src/more/index.js +4 -1
  379. package/src/navigation/block.json +5 -4
  380. package/src/navigation/deprecated.js +144 -5
  381. package/src/navigation/edit/deleted-overlay-warning.js +56 -0
  382. package/src/navigation/edit/index.js +181 -70
  383. package/src/navigation/edit/overlay-panel.js +10 -0
  384. package/src/navigation/edit/overlay-preview.js +133 -0
  385. package/src/navigation/edit/overlay-template-part-selector.js +76 -26
  386. package/src/navigation/edit/responsive-wrapper.js +14 -1
  387. package/src/navigation/edit/test/overlay-template-part-selector.js +24 -16
  388. package/src/navigation/edit/test/responsive-wrapper.js +179 -0
  389. package/src/navigation/edit/test/use-create-overlay.js +129 -2
  390. package/src/navigation/edit/use-create-overlay.js +26 -4
  391. package/src/navigation/editor.scss +51 -0
  392. package/src/navigation/index.php +59 -11
  393. package/src/navigation/style.scss +140 -76
  394. package/src/navigation/utils/get-submenu-visibility.js +27 -0
  395. package/src/navigation/utils/test/get-submenu-visibility.js +47 -0
  396. package/src/navigation-link/edit.js +3 -67
  397. package/src/navigation-link/shared/index.js +2 -0
  398. package/src/navigation-link/shared/select-label-text.js +16 -0
  399. package/src/navigation-link/shared/use-is-dragging-within.js +55 -0
  400. package/src/navigation-submenu/block.json +1 -1
  401. package/src/navigation-submenu/edit.js +10 -73
  402. package/src/navigation-submenu/index.js +6 -3
  403. package/src/navigation-submenu/index.php +36 -5
  404. package/src/nextpage/block.json +2 -1
  405. package/src/paragraph/block.json +1 -0
  406. package/src/paragraph/index.js +4 -1
  407. package/src/post-excerpt/edit.js +1 -1
  408. package/src/post-excerpt/index.php +39 -16
  409. package/src/shortcode/block.json +2 -1
  410. package/src/style.scss +3 -0
  411. package/src/tab/add-tab-toolbar-control.js +36 -11
  412. package/src/tab/block.json +18 -4
  413. package/src/tab/controls.js +4 -5
  414. package/src/tab/edit.js +75 -150
  415. package/src/tab/index.php +5 -63
  416. package/src/tab/remove-tab-toolbar-control.js +103 -0
  417. package/src/tab/save.js +1 -3
  418. package/src/tab/style.scss +8 -1
  419. package/src/tab-panels/block.json +70 -0
  420. package/src/tab-panels/edit.js +44 -0
  421. package/src/tab-panels/icon.js +10 -0
  422. package/src/tab-panels/index.js +21 -0
  423. package/src/tab-panels/save.js +11 -0
  424. package/src/tab-panels/style.scss +4 -0
  425. package/src/tabs/block.json +61 -90
  426. package/src/tabs/controls.js +7 -221
  427. package/src/tabs/deprecated.js +214 -0
  428. package/src/tabs/edit.js +108 -68
  429. package/src/tabs/index.js +2 -0
  430. package/src/tabs/index.php +86 -191
  431. package/src/tabs/save.js +6 -13
  432. package/src/tabs/style.scss +1 -187
  433. package/src/tabs-menu/block.json +77 -0
  434. package/src/tabs-menu/edit.js +251 -0
  435. package/src/tabs-menu/editor.scss +6 -0
  436. package/src/tabs-menu/icon.js +10 -0
  437. package/src/tabs-menu/index.js +21 -0
  438. package/src/tabs-menu/index.php +74 -0
  439. package/src/tabs-menu/save.js +18 -0
  440. package/src/tabs-menu/style.scss +8 -0
  441. package/src/tabs-menu-item/block.json +98 -0
  442. package/src/tabs-menu-item/controls.js +262 -0
  443. package/src/tabs-menu-item/edit.js +322 -0
  444. package/src/tabs-menu-item/editor.scss +20 -0
  445. package/src/tabs-menu-item/icon.js +10 -0
  446. package/src/tabs-menu-item/index.js +21 -0
  447. package/src/tabs-menu-item/index.php +82 -0
  448. package/src/tabs-menu-item/save.js +44 -0
  449. package/src/tabs-menu-item/style.scss +42 -0
  450. package/src/template-part/edit/index.js +2 -4
  451. package/src/utils/caption.js +1 -7
  452. package/src/verse/block.json +1 -3
  453. package/src/verse/deprecated.js +83 -4
  454. package/src/verse/edit.js +37 -56
  455. package/src/verse/save.js +2 -11
  456. package/src/verse/style.scss +1 -0
  457. package/src/video/edit.js +4 -2
  458. package/build/tab/tabs-list.cjs +0 -132
  459. package/build/tab/tabs-list.cjs.map +0 -7
  460. package/build/tabs/style-engine.cjs +0 -119
  461. package/build/tabs/style-engine.cjs.map +0 -7
  462. package/build-module/tab/tabs-list.mjs +0 -101
  463. package/build-module/tab/tabs-list.mjs.map +0 -7
  464. package/build-module/tabs/style-engine.mjs +0 -101
  465. package/build-module/tabs/style-engine.mjs.map +0 -7
  466. package/build-style/tabs/editor-rtl.css +0 -26
  467. package/build-style/tabs/editor.css +0 -26
  468. package/src/tab/tabs-list.js +0 -122
  469. package/src/tabs/editor.scss +0 -30
  470. package/src/tabs/style-engine.js +0 -164
@@ -29,12 +29,13 @@ import {
29
29
  BlockControls,
30
30
  } from '@wordpress/block-editor';
31
31
  import { EntityProvider, store as coreStore } from '@wordpress/core-data';
32
-
33
32
  import { useDispatch, useSelect } from '@wordpress/data';
34
33
  import {
35
34
  __experimentalToolsPanel as ToolsPanel,
36
35
  __experimentalToolsPanelItem as ToolsPanelItem,
37
36
  ToggleControl,
37
+ __experimentalToggleGroupControl as ToggleGroupControl,
38
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
38
39
  Spinner,
39
40
  Notice,
40
41
  ToolbarButton,
@@ -77,7 +78,9 @@ import AccessibleDescription from './accessible-description';
77
78
  import AccessibleMenuDescription from './accessible-menu-description';
78
79
  import { unlock } from '../../lock-unlock';
79
80
  import { useToolsPanelDropdownMenuProps } from '../../utils/hooks';
81
+ import { isWithinNavigationOverlay } from '../../utils/is-within-overlay';
80
82
  import { DEFAULT_BLOCK } from '../constants';
83
+ import { getSubmenuVisibility } from '../utils/get-submenu-visibility';
81
84
 
82
85
  /**
83
86
  * Component that renders the Add page button for the Navigation block.
@@ -139,6 +142,10 @@ function ColorTools( {
139
142
  setDetectedOverlayBackgroundColor,
140
143
  ] = useState();
141
144
  const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();
145
+
146
+ // Detect if we're editing inside an overlay template part.
147
+ const isWithinOverlay = useSelect( () => isWithinNavigationOverlay(), [] );
148
+
142
149
  // Turn on contrast checker for web only since it's not supported on mobile yet.
143
150
  const enableContrastChecking = Platform.OS === 'web';
144
151
  useEffect( () => {
@@ -179,48 +186,57 @@ function ColorTools( {
179
186
  if ( ! colorGradientSettings.hasColorsOrGradients ) {
180
187
  return null;
181
188
  }
189
+
190
+ const colorSettings = [
191
+ {
192
+ colorValue: textColor.color,
193
+ label: __( 'Text' ),
194
+ onColorChange: setTextColor,
195
+ resetAllFilter: () => setTextColor(),
196
+ clearable: true,
197
+ enableAlpha: true,
198
+ },
199
+ {
200
+ colorValue: backgroundColor.color,
201
+ label: __( 'Background' ),
202
+ onColorChange: setBackgroundColor,
203
+ resetAllFilter: () => setBackgroundColor(),
204
+ clearable: true,
205
+ enableAlpha: true,
206
+ },
207
+ ];
208
+
209
+ // Only show overlay controls when not in an overlay template.
210
+ colorSettings.push(
211
+ {
212
+ colorValue: overlayTextColor.color,
213
+ label:
214
+ hasCustomOverlay || isWithinOverlay
215
+ ? __( 'Submenu text' )
216
+ : __( 'Submenu & overlay text' ),
217
+ onColorChange: setOverlayTextColor,
218
+ resetAllFilter: () => setOverlayTextColor(),
219
+ clearable: true,
220
+ enableAlpha: true,
221
+ },
222
+ {
223
+ colorValue: overlayBackgroundColor.color,
224
+ label:
225
+ hasCustomOverlay || isWithinOverlay
226
+ ? __( 'Submenu background' )
227
+ : __( 'Submenu & overlay background' ),
228
+ onColorChange: setOverlayBackgroundColor,
229
+ resetAllFilter: () => setOverlayBackgroundColor(),
230
+ clearable: true,
231
+ enableAlpha: true,
232
+ }
233
+ );
234
+
182
235
  return (
183
236
  <>
184
237
  <ColorGradientSettingsDropdown
185
238
  __experimentalIsRenderedInSidebar
186
- settings={ [
187
- {
188
- colorValue: textColor.color,
189
- label: __( 'Text' ),
190
- onColorChange: setTextColor,
191
- resetAllFilter: () => setTextColor(),
192
- clearable: true,
193
- enableAlpha: true,
194
- },
195
- {
196
- colorValue: backgroundColor.color,
197
- label: __( 'Background' ),
198
- onColorChange: setBackgroundColor,
199
- resetAllFilter: () => setBackgroundColor(),
200
- clearable: true,
201
- enableAlpha: true,
202
- },
203
- {
204
- colorValue: overlayTextColor.color,
205
- label: hasCustomOverlay
206
- ? __( 'Submenu text' )
207
- : __( 'Submenu & overlay text' ),
208
- onColorChange: setOverlayTextColor,
209
- resetAllFilter: () => setOverlayTextColor(),
210
- clearable: true,
211
- enableAlpha: true,
212
- },
213
- {
214
- colorValue: overlayBackgroundColor.color,
215
- label: hasCustomOverlay
216
- ? __( 'Submenu background' )
217
- : __( 'Submenu & overlay background' ),
218
- onColorChange: setOverlayBackgroundColor,
219
- resetAllFilter: () => setOverlayBackgroundColor(),
220
- clearable: true,
221
- enableAlpha: true,
222
- },
223
- ] }
239
+ settings={ colorSettings }
224
240
  panelId={ clientId }
225
241
  { ...colorGradientSettings }
226
242
  gradients={ [] }
@@ -263,7 +279,7 @@ function Navigation( {
263
279
  __unstableLayoutClassNames: layoutClassNames,
264
280
  } ) {
265
281
  const {
266
- openSubmenusOnClick,
282
+ submenuVisibility,
267
283
  overlayMenu,
268
284
  overlay,
269
285
  showSubmenuIcon,
@@ -286,18 +302,36 @@ function Navigation( {
286
302
  [ setAttributes ]
287
303
  );
288
304
 
305
+ // Reset submenuVisibility to default if orientation changes to horizontal while "always" is selected
306
+ useEffect( () => {
307
+ if ( orientation === 'horizontal' && submenuVisibility === 'always' ) {
308
+ setAttributes( {
309
+ submenuVisibility: 'hover',
310
+ showSubmenuIcon: true,
311
+ } );
312
+ }
313
+ }, [ orientation, submenuVisibility, setAttributes ] );
314
+
289
315
  const recursionId = `navigationMenu/${ ref }`;
290
- const hasAlreadyRendered = useHasRecursion( recursionId );
291
316
 
292
- const blockEditingMode = useBlockEditingMode();
317
+ // Skip recursion check when in preview mode.
318
+ const recursionDetected = useHasRecursion( recursionId );
319
+ const { isPreviewMode, onNavigateToEntityRecord, currentTheme } = useSelect(
320
+ ( select ) => {
321
+ const { getSettings } = select( blockEditorStore );
322
+ const settings = getSettings();
323
+ return {
324
+ isPreviewMode: settings.isPreviewMode,
325
+ onNavigateToEntityRecord: settings?.onNavigateToEntityRecord,
326
+ // Needed to construct the template part ID for the overlay preview.
327
+ currentTheme: select( coreStore ).getCurrentTheme()?.stylesheet,
328
+ };
329
+ },
330
+ []
331
+ );
332
+ const hasAlreadyRendered = isPreviewMode ? false : recursionDetected;
293
333
 
294
- const { onNavigateToEntityRecord } = useSelect( ( select ) => {
295
- const { getSettings } = select( blockEditorStore );
296
- const settings = getSettings();
297
- return {
298
- onNavigateToEntityRecord: settings?.onNavigateToEntityRecord,
299
- };
300
- }, [] );
334
+ const blockEditingMode = useBlockEditingMode();
301
335
 
302
336
  const isOverlayExperimentEnabled =
303
337
  typeof window !== 'undefined' &&
@@ -440,8 +474,12 @@ function Navigation( {
440
474
 
441
475
  const navRef = useRef();
442
476
 
443
- // The standard HTML5 tag for the block wrapper.
444
- const TagName = 'nav';
477
+ // Detect if we're editing inside an overlay template part.
478
+ const isWithinOverlay = useSelect( () => isWithinNavigationOverlay(), [] );
479
+
480
+ // Use div wrapper if this navigation block is within an overlay template part.
481
+ // Otherwise, use nav as the standard HTML5 tag.
482
+ const TagName = isWithinOverlay ? 'div' : 'nav';
445
483
 
446
484
  // "placeholder" shown if:
447
485
  // - there is no ref attribute pointing to a Navigation Post.
@@ -477,6 +515,39 @@ function Navigation( {
477
515
  ),
478
516
  [ clientId ]
479
517
  );
518
+
519
+ // Configure navigation blocks in overlay templates.
520
+ const hasSetOverlayDefault = useRef( false );
521
+ useEffect( () => {
522
+ if ( ! isWithinOverlay ) {
523
+ return;
524
+ }
525
+
526
+ // Prevent nested overlays.
527
+ if ( overlayMenu !== 'never' ) {
528
+ setAttributes( { overlayMenu: 'never' } );
529
+ }
530
+
531
+ // Set vertical orientation and always-open submenus for new blocks.
532
+ if ( ! hasSetOverlayDefault.current && ! ref ) {
533
+ hasSetOverlayDefault.current = true;
534
+ setAttributes( {
535
+ submenuVisibility: 'always',
536
+ layout: {
537
+ ...attributes.layout,
538
+ orientation: 'vertical',
539
+ },
540
+ showSubmenuIcon: false,
541
+ } );
542
+ }
543
+ }, [
544
+ attributes.layout,
545
+ isWithinOverlay,
546
+ overlayMenu,
547
+ ref,
548
+ setAttributes,
549
+ ] );
550
+
480
551
  const isResponsive = 'never' !== overlayMenu;
481
552
  const blockProps = useBlockProps( {
482
553
  ref: navRef,
@@ -634,8 +705,12 @@ function Navigation( {
634
705
  { open: overlayMenuPreview }
635
706
  );
636
707
 
708
+ const computedSubmenuVisibility = getSubmenuVisibility( attributes );
709
+
637
710
  const submenuAccessibilityNotice =
638
- ! showSubmenuIcon && ! openSubmenusOnClick
711
+ ! showSubmenuIcon &&
712
+ computedSubmenuVisibility !== 'click' &&
713
+ computedSubmenuVisibility !== 'always'
639
714
  ? __(
640
715
  '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.'
641
716
  )
@@ -665,7 +740,7 @@ function Navigation( {
665
740
  resetAll={ () => {
666
741
  setAttributes( {
667
742
  showSubmenuIcon: true,
668
- openSubmenusOnClick: false,
743
+ submenuVisibility: 'hover',
669
744
  overlayMenu: 'mobile',
670
745
  hasIcon: true,
671
746
  icon: 'handle',
@@ -723,28 +798,59 @@ function Navigation( {
723
798
  { __( 'Submenus' ) }
724
799
  </h3>
725
800
  <ToolsPanelItem
726
- hasValue={ () => openSubmenusOnClick }
727
- label={ __( 'Open on click' ) }
801
+ hasValue={ () =>
802
+ submenuVisibility !== 'hover'
803
+ }
804
+ label={ __( 'Submenu Visibility' ) }
728
805
  onDeselect={ () =>
729
806
  setAttributes( {
730
- openSubmenusOnClick: false,
731
- showSubmenuIcon: true,
807
+ submenuVisibility: 'hover',
732
808
  } )
733
809
  }
734
810
  isShownByDefault
735
811
  >
736
- <ToggleControl
737
- checked={ openSubmenusOnClick }
812
+ <ToggleGroupControl
813
+ __nextHasNoMarginBottom
814
+ __next40pxDefaultSize
815
+ label={ __( 'Submenu Visibility' ) }
816
+ value={ submenuVisibility }
738
817
  onChange={ ( value ) => {
739
- setAttributes( {
740
- openSubmenusOnClick: value,
741
- ...( value && {
742
- showSubmenuIcon: true,
743
- } ), // Make sure arrows are shown when we toggle this on.
744
- } );
818
+ const newAttributes = {
819
+ submenuVisibility: value,
820
+ };
821
+ const prevSubmenuVisibility =
822
+ submenuVisibility;
823
+ // If "always" is selected, hide the arrow because the formatting is broken for it when using center alignment.
824
+ if ( value === 'always' ) {
825
+ newAttributes.showSubmenuIcon = false;
826
+ } else if (
827
+ value === 'click' ||
828
+ prevSubmenuVisibility ===
829
+ 'always'
830
+ ) {
831
+ // When switching to "click" or away from "always", show the arrow
832
+ newAttributes.showSubmenuIcon = true;
833
+ }
834
+
835
+ setAttributes( newAttributes );
745
836
  } }
746
- label={ __( 'Open on click' ) }
747
- />
837
+ isBlock
838
+ >
839
+ <ToggleGroupControlOption
840
+ value="hover"
841
+ label={ __( 'Hover' ) }
842
+ />
843
+ <ToggleGroupControlOption
844
+ value="click"
845
+ label={ __( 'Click' ) }
846
+ />
847
+ { orientation === 'vertical' && (
848
+ <ToggleGroupControlOption
849
+ value="always"
850
+ label={ __( 'Always' ) }
851
+ />
852
+ ) }
853
+ </ToggleGroupControl>
748
854
  </ToolsPanelItem>
749
855
 
750
856
  <ToolsPanelItem
@@ -756,7 +862,8 @@ function Navigation( {
756
862
  } )
757
863
  }
758
864
  isDisabled={
759
- attributes.openSubmenusOnClick
865
+ computedSubmenuVisibility === 'click' ||
866
+ computedSubmenuVisibility === 'always'
760
867
  }
761
868
  isShownByDefault
762
869
  >
@@ -768,7 +875,10 @@ function Navigation( {
768
875
  } );
769
876
  } }
770
877
  disabled={
771
- attributes.openSubmenusOnClick
878
+ computedSubmenuVisibility ===
879
+ 'click' ||
880
+ computedSubmenuVisibility ===
881
+ 'always'
772
882
  }
773
883
  label={ __( 'Show arrow' ) }
774
884
  />
@@ -789,7 +899,7 @@ function Navigation( {
789
899
  </ToolsPanel>
790
900
  ) }
791
901
  </InspectorControls>
792
- { isOverlayExperimentEnabled && (
902
+ { isOverlayExperimentEnabled && ! isWithinOverlay && (
793
903
  <InspectorControls>
794
904
  <OverlayPanel
795
905
  overlayMenu={ overlayMenu }
@@ -803,6 +913,7 @@ function Navigation( {
803
913
  overlayMenuPreviewClasses={ overlayMenuPreviewClasses }
804
914
  overlayMenuPreviewId={ overlayMenuPreviewId }
805
915
  isResponsive={ isResponsive }
916
+ currentTheme={ currentTheme }
806
917
  />
807
918
  </InspectorControls>
808
919
  ) }
@@ -13,6 +13,7 @@ import { __ } from '@wordpress/i18n';
13
13
  import OverlayTemplatePartSelector from './overlay-template-part-selector';
14
14
  import OverlayVisibilityControl from './overlay-visibility-control';
15
15
  import OverlayMenuPreviewButton from './overlay-menu-preview-button';
16
+ import OverlayPreview from './overlay-preview';
16
17
 
17
18
  /**
18
19
  * Overlay Panel component for Navigation block.
@@ -29,6 +30,7 @@ import OverlayMenuPreviewButton from './overlay-menu-preview-button';
29
30
  * @param {string} props.overlayMenuPreviewClasses CSS classes for overlay menu preview button.
30
31
  * @param {string} props.overlayMenuPreviewId ID for overlay menu preview.
31
32
  * @param {boolean} props.isResponsive Whether overlay menu is responsive.
33
+ * @param {string} props.currentTheme Current theme stylesheet name.
32
34
  * @return {JSX.Element|null} The overlay panel component or null if overlay is disabled.
33
35
  */
34
36
  export default function OverlayPanel( {
@@ -43,6 +45,7 @@ export default function OverlayPanel( {
43
45
  overlayMenuPreviewClasses,
44
46
  overlayMenuPreviewId,
45
47
  isResponsive,
48
+ currentTheme,
46
49
  } ) {
47
50
  return (
48
51
  <PanelBody title={ __( 'Overlay' ) } initialOpen>
@@ -72,6 +75,13 @@ export default function OverlayPanel( {
72
75
  onNavigateToEntityRecord={ onNavigateToEntityRecord }
73
76
  />
74
77
  ) }
78
+
79
+ { overlayMenu !== 'never' && overlay && (
80
+ <OverlayPreview
81
+ overlay={ overlay }
82
+ currentTheme={ currentTheme }
83
+ />
84
+ ) }
75
85
  </VStack>
76
86
  </PanelBody>
77
87
  );
@@ -0,0 +1,133 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { store as coreStore } from '@wordpress/core-data';
6
+ import { useMemo } from '@wordpress/element';
7
+ import { parse } from '@wordpress/blocks';
8
+ import { Spinner } from '@wordpress/components';
9
+ import { __ } from '@wordpress/i18n';
10
+ import { BlockPreview } from '@wordpress/block-editor';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import { createTemplatePartId } from '../../template-part/edit/utils/create-template-part-id';
16
+
17
+ /**
18
+ * Component that displays a read-only visual preview of the selected overlay template part.
19
+ *
20
+ * @param {Object} props Component props.
21
+ * @param {string} props.overlay The overlay template part slug.
22
+ * @param {string} props.currentTheme The current theme stylesheet name.
23
+ * @return {JSX.Element|null} The overlay preview component or null if no overlay is selected.
24
+ */
25
+ export default function OverlayPreview( { overlay, currentTheme } ) {
26
+ const templatePartId = useMemo( () => {
27
+ if ( ! overlay || ! currentTheme ) {
28
+ return null;
29
+ }
30
+ return createTemplatePartId( currentTheme, overlay );
31
+ }, [ currentTheme, overlay ] );
32
+
33
+ const { content, editedBlocks, hasResolved, recordExists } = useSelect(
34
+ ( select ) => {
35
+ if ( ! templatePartId ) {
36
+ return {
37
+ content: null,
38
+ editedBlocks: null,
39
+ hasResolved: true,
40
+ recordExists: false,
41
+ };
42
+ }
43
+
44
+ const { getEditedEntityRecord, hasFinishedResolution } =
45
+ select( coreStore );
46
+
47
+ const editedRecord = getEditedEntityRecord(
48
+ 'postType',
49
+ 'wp_template_part',
50
+ templatePartId,
51
+ { context: 'view' }
52
+ );
53
+
54
+ return {
55
+ content: editedRecord?.content,
56
+ editedBlocks: editedRecord?.blocks,
57
+ hasResolved: hasFinishedResolution( 'getEditedEntityRecord', [
58
+ 'postType',
59
+ 'wp_template_part',
60
+ templatePartId,
61
+ { context: 'view' },
62
+ ] ),
63
+ recordExists: !! editedRecord,
64
+ };
65
+ },
66
+ [ templatePartId ]
67
+ );
68
+
69
+ const blocks = useMemo( () => {
70
+ if ( ! templatePartId ) {
71
+ return null;
72
+ }
73
+
74
+ if ( editedBlocks && editedBlocks.length > 0 ) {
75
+ return editedBlocks;
76
+ }
77
+
78
+ if ( content && typeof content === 'string' ) {
79
+ return parse( content );
80
+ }
81
+
82
+ return [];
83
+ }, [ templatePartId, editedBlocks, content ] );
84
+
85
+ if ( ! overlay ) {
86
+ return null;
87
+ }
88
+
89
+ if ( ! hasResolved ) {
90
+ return (
91
+ <div className="wp-block-navigation__overlay-preview-loading">
92
+ <Spinner />
93
+ </div>
94
+ );
95
+ }
96
+
97
+ // Show message if the overlay template part has been deleted.
98
+ if ( hasResolved && ! recordExists ) {
99
+ return (
100
+ <div className="wp-block-navigation__overlay-preview-empty">
101
+ { __( 'This overlay template part no longer exists.' ) }
102
+ </div>
103
+ );
104
+ }
105
+
106
+ if ( ! blocks || blocks.length === 0 ) {
107
+ return (
108
+ <div className="wp-block-navigation__overlay-preview-empty">
109
+ { __( 'This overlay is empty.' ) }
110
+ </div>
111
+ );
112
+ }
113
+
114
+ return (
115
+ <div
116
+ className="wp-block-navigation__overlay-preview"
117
+ aria-label={ __( 'Navigation Overlay template part preview' ) }
118
+ role="region"
119
+ >
120
+ <BlockPreview.Async
121
+ placeholder={
122
+ <div className="wp-block-navigation__overlay-preview-placeholder" />
123
+ }
124
+ >
125
+ <BlockPreview
126
+ blocks={ blocks }
127
+ viewportWidth={ 400 }
128
+ minHeight={ 200 }
129
+ />
130
+ </BlockPreview.Async>
131
+ </div>
132
+ );
133
+ }