@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
@@ -6,16 +6,17 @@ import { renderHook, act } from '@testing-library/react';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useDispatch } from '@wordpress/data';
9
+ import { useDispatch, useSelect } from '@wordpress/data';
10
10
 
11
11
  /**
12
12
  * Internal dependencies
13
13
  */
14
14
  import useCreateOverlayTemplatePart from '../use-create-overlay';
15
15
 
16
- // Mock useDispatch
16
+ // Mock useDispatch and useSelect
17
17
  jest.mock( '@wordpress/data', () => ( {
18
18
  useDispatch: jest.fn(),
19
+ useSelect: jest.fn(),
19
20
  } ) );
20
21
 
21
22
  // Mock coreStore
@@ -23,9 +24,27 @@ jest.mock( '@wordpress/core-data', () => ( {
23
24
  store: {},
24
25
  } ) );
25
26
 
27
+ // Mock blockEditorStore
28
+ jest.mock( '@wordpress/block-editor', () => ( {
29
+ store: {},
30
+ } ) );
31
+
26
32
  // Mock @wordpress/blocks
27
33
  jest.mock( '@wordpress/blocks', () => ( {
28
34
  serialize: jest.fn( ( blocks ) => JSON.stringify( blocks ) ),
35
+ parse: jest.fn( ( content ) => {
36
+ // Return mock blocks when parsing pattern content
37
+ if ( content && typeof content === 'string' ) {
38
+ return [
39
+ {
40
+ name: 'core/group',
41
+ attributes: {},
42
+ innerBlocks: [],
43
+ },
44
+ ];
45
+ }
46
+ return [];
47
+ } ),
29
48
  createBlock: jest.fn( ( name ) => ( {
30
49
  name,
31
50
  attributes: {},
@@ -33,14 +52,42 @@ jest.mock( '@wordpress/blocks', () => ( {
33
52
  } ) ),
34
53
  } ) );
35
54
 
55
+ // Mock lock-unlock
56
+ const mockUnlock = jest.fn();
57
+ jest.mock( '../../../lock-unlock', () => ( {
58
+ unlock: ( select ) => mockUnlock( select ),
59
+ } ) );
60
+
36
61
  describe( 'useCreateOverlayTemplatePart', () => {
37
62
  const mockSaveEntityRecord = jest.fn();
63
+ const mockGetPatternBySlug = jest.fn();
38
64
 
39
65
  beforeEach( () => {
40
66
  jest.clearAllMocks();
41
67
  useDispatch.mockReturnValue( {
42
68
  saveEntityRecord: mockSaveEntityRecord,
43
69
  } );
70
+
71
+ mockUnlock.mockReturnValue( {
72
+ getPatternBySlug: mockGetPatternBySlug,
73
+ } );
74
+
75
+ useSelect.mockImplementation( ( selector ) => {
76
+ const mockSelect = jest.fn( ( store ) => {
77
+ if ( store === require( '@wordpress/block-editor' ).store ) {
78
+ return {}; // Return mock block editor store
79
+ }
80
+ return {};
81
+ } );
82
+ return selector( mockSelect );
83
+ } );
84
+
85
+ mockGetPatternBySlug.mockReturnValue( {
86
+ name: 'gutenberg/navigation-overlay',
87
+ title: 'Navigation Overlay',
88
+ content:
89
+ '<!-- wp:group --><div class="wp-block-group"><!-- wp:navigation-overlay-close /--><!-- wp:navigation /--></div><!-- /wp:group -->',
90
+ } );
44
91
  } );
45
92
 
46
93
  it( 'should save a new overlay with correct parameters when no overlays exist', async () => {
@@ -125,6 +172,86 @@ describe( 'useCreateOverlayTemplatePart', () => {
125
172
  );
126
173
  } );
127
174
 
175
+ it( 'should use pattern content when pattern is found', async () => {
176
+ const overlayTemplateParts = [];
177
+ const createdOverlay = {
178
+ id: 'twentytwentyfive//overlay',
179
+ theme: 'twentytwentyfive',
180
+ slug: 'overlay',
181
+ title: {
182
+ rendered: 'Overlay',
183
+ },
184
+ area: 'navigation-overlay',
185
+ };
186
+
187
+ mockSaveEntityRecord.mockResolvedValue( createdOverlay );
188
+
189
+ // Import mocked functions
190
+ const blocksModule = require( '@wordpress/blocks' );
191
+ const { parse, serialize } = blocksModule;
192
+
193
+ const { result: createOverlayTemplatePart } = renderHook( () =>
194
+ useCreateOverlayTemplatePart( overlayTemplateParts )
195
+ );
196
+
197
+ await act( async () => {
198
+ await createOverlayTemplatePart.current();
199
+ } );
200
+
201
+ expect( mockGetPatternBySlug ).toHaveBeenCalledWith(
202
+ 'gutenberg/navigation-overlay'
203
+ );
204
+
205
+ expect( parse ).toHaveBeenCalledWith( mockGetPatternBySlug().content, {
206
+ __unstableSkipMigrationLogs: true,
207
+ } );
208
+
209
+ expect( serialize ).toHaveBeenCalled();
210
+ } );
211
+
212
+ it( 'should use empty paragraph when pattern is not found', async () => {
213
+ const overlayTemplateParts = [];
214
+ const createdOverlay = {
215
+ id: 'twentytwentyfive//overlay',
216
+ theme: 'twentytwentyfive',
217
+ slug: 'overlay',
218
+ title: {
219
+ rendered: 'Overlay',
220
+ },
221
+ area: 'navigation-overlay',
222
+ };
223
+
224
+ mockSaveEntityRecord.mockResolvedValue( createdOverlay );
225
+ mockGetPatternBySlug.mockReturnValue( null );
226
+
227
+ // Import mocked functions
228
+ const blocksModule = require( '@wordpress/blocks' );
229
+ const { createBlock, serialize } = blocksModule;
230
+
231
+ const { result: createOverlayTemplatePart } = renderHook( () =>
232
+ useCreateOverlayTemplatePart( overlayTemplateParts )
233
+ );
234
+
235
+ await act( async () => {
236
+ await createOverlayTemplatePart.current();
237
+ } );
238
+
239
+ expect( createBlock ).toHaveBeenCalledWith( 'core/paragraph' );
240
+
241
+ expect( serialize ).toHaveBeenCalledWith( [
242
+ expect.objectContaining( { name: 'core/paragraph' } ),
243
+ ] );
244
+
245
+ expect( mockSaveEntityRecord ).toHaveBeenCalledWith(
246
+ 'postType',
247
+ 'wp_template_part',
248
+ expect.objectContaining( {
249
+ content: expect.any( String ),
250
+ } ),
251
+ { throwOnError: true }
252
+ );
253
+ } );
254
+
128
255
  it( 'should throw errors when save fails', async () => {
129
256
  const overlayTemplateParts = [];
130
257
  const error = new Error( 'Failed to save' );
@@ -2,16 +2,18 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useCallback } from '@wordpress/element';
5
- import { useDispatch } from '@wordpress/data';
5
+ import { useDispatch, useSelect } from '@wordpress/data';
6
6
  import { store as coreStore } from '@wordpress/core-data';
7
+ import { store as blockEditorStore } from '@wordpress/block-editor';
7
8
  import { __ } from '@wordpress/i18n';
8
- import { serialize, createBlock } from '@wordpress/blocks';
9
+ import { parse, serialize, createBlock } from '@wordpress/blocks';
9
10
 
10
11
  /**
11
12
  * Internal dependencies
12
13
  */
13
14
  import { getUniqueTemplatePartTitle, getCleanTemplatePartSlug } from './utils';
14
15
  import { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';
16
+ import { unlock } from '../../lock-unlock';
15
17
 
16
18
  /**
17
19
  * Hook to create a new overlay template part.
@@ -22,6 +24,13 @@ import { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';
22
24
  */
23
25
  export default function useCreateOverlayTemplatePart( overlayTemplateParts ) {
24
26
  const { saveEntityRecord } = useDispatch( coreStore );
27
+ const pattern = useSelect(
28
+ ( select ) =>
29
+ unlock( select( blockEditorStore ) ).getPatternBySlug(
30
+ 'gutenberg/navigation-overlay'
31
+ ),
32
+ []
33
+ );
25
34
 
26
35
  const createOverlayTemplatePart = useCallback( async () => {
27
36
  // Generate unique name using only overlay area template parts
@@ -35,6 +44,19 @@ export default function useCreateOverlayTemplatePart( overlayTemplateParts ) {
35
44
  );
36
45
  const cleanSlug = getCleanTemplatePartSlug( uniqueTitle );
37
46
 
47
+ let initialContent = '';
48
+
49
+ if ( pattern?.content ) {
50
+ // Parse the pattern content into blocks and serialize it
51
+ const blocks = parse( pattern.content, {
52
+ __unstableSkipMigrationLogs: true,
53
+ } );
54
+ initialContent = serialize( blocks );
55
+ } else {
56
+ // Fallback to empty paragraph if pattern is not found
57
+ initialContent = serialize( [ createBlock( 'core/paragraph' ) ] );
58
+ }
59
+
38
60
  // Create the template part
39
61
  const templatePart = await saveEntityRecord(
40
62
  'postType',
@@ -42,14 +64,14 @@ export default function useCreateOverlayTemplatePart( overlayTemplateParts ) {
42
64
  {
43
65
  slug: cleanSlug,
44
66
  title: uniqueTitle,
45
- content: serialize( [ createBlock( 'core/paragraph' ) ] ),
67
+ content: initialContent,
46
68
  area: NAVIGATION_OVERLAY_TEMPLATE_PART_AREA,
47
69
  },
48
70
  { throwOnError: true }
49
71
  );
50
72
 
51
73
  return templatePart;
52
- }, [ overlayTemplateParts, saveEntityRecord ] );
74
+ }, [ overlayTemplateParts, saveEntityRecord, pattern ] );
53
75
 
54
76
  return createOverlayTemplatePart;
55
77
  }
@@ -669,3 +669,54 @@ body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-op
669
669
  right: 0;
670
670
  z-index: 1;
671
671
  }
672
+
673
+ // Overlay Preview styles
674
+ .wp-block-navigation__overlay-preview {
675
+ margin-top: $grid-unit-20;
676
+ border: 1px solid $gray-300;
677
+ border-radius: 2px;
678
+ overflow-y: auto;
679
+ max-height: 200px;
680
+ background: $white;
681
+ }
682
+
683
+ .wp-block-navigation__overlay-preview-loading {
684
+ display: flex;
685
+ align-items: center;
686
+ justify-content: center;
687
+ min-height: 200px;
688
+ background: $gray-100;
689
+ }
690
+
691
+ .wp-block-navigation__overlay-preview-empty {
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: center;
695
+ min-height: 200px;
696
+ padding: $grid-unit-20;
697
+ text-align: center;
698
+ color: $gray-700;
699
+ background: $gray-100;
700
+ font-style: italic;
701
+ }
702
+
703
+ .wp-block-navigation__overlay-preview-placeholder {
704
+ width: 100%;
705
+ height: 200px;
706
+ background: $gray-100;
707
+ animation: wp-block-navigation-overlay-preview-pulse 1.5s ease-in-out infinite;
708
+ }
709
+
710
+ @keyframes wp-block-navigation-overlay-preview-pulse {
711
+ 0%,
712
+ 100% {
713
+ opacity: 1;
714
+ }
715
+ 50% {
716
+ opacity: 0.5;
717
+ }
718
+ }
719
+
720
+ .wp-block-navigation__deleted-overlay-warning {
721
+ margin-top: $grid-unit-15;
722
+ }
@@ -5,6 +5,37 @@
5
5
  * @package WordPress
6
6
  */
7
7
 
8
+ /**
9
+ * Returns the submenu visibility value with backward compatibility
10
+ * for the deprecated openSubmenusOnClick attribute.
11
+ *
12
+ * NOTE: Keep this function in sync with getSubmenuVisibility in
13
+ * packages/block-library/src/navigation/utils/get-submenu-visibility.js
14
+ *
15
+ * This function centralizes the migration logic from the boolean
16
+ * openSubmenusOnClick to the new submenuVisibility enum.
17
+ *
18
+ * @since 6.9.0
19
+ *
20
+ * @param array $attributes Block attributes containing submenuVisibility and/or openSubmenusOnClick.
21
+ * @return string The visibility mode: 'hover', 'click', or 'always'.
22
+ */
23
+ function block_core_navigation_get_submenu_visibility( $attributes ) {
24
+ $submenu_visibility = isset( $attributes['submenuVisibility'] ) ? $attributes['submenuVisibility'] : null;
25
+ $open_submenus_on_click = isset( $attributes['openSubmenusOnClick'] ) ? $attributes['openSubmenusOnClick'] : null;
26
+
27
+ // If new attribute is set, use it.
28
+ if ( null !== $submenu_visibility ) {
29
+ return $submenu_visibility;
30
+ }
31
+
32
+ // Fall back to old attribute for backward compatibility.
33
+ // openSubmenusOnClick: true -> 'click'
34
+ // openSubmenusOnClick: false -> 'hover'
35
+ // openSubmenusOnClick: null -> 'hover' (default)
36
+ return ! empty( $open_submenus_on_click ) ? 'click' : 'hover';
37
+ }
38
+
8
39
  /**
9
40
  * Helper functions used to render the navigation block.
10
41
  *
@@ -119,9 +150,12 @@ class WP_Navigation_Block_Renderer {
119
150
  * @return bool Returns whether or not to load the view script.
120
151
  */
121
152
  private static function is_interactive( $attributes, $inner_blocks ) {
122
- $has_submenus = static::has_submenus( $inner_blocks );
123
- $is_responsive_menu = static::is_responsive( $attributes );
124
- return ( $has_submenus && ( $attributes['openSubmenusOnClick'] || $attributes['showSubmenuIcon'] ) ) || $is_responsive_menu;
153
+ $has_submenus = static::has_submenus( $inner_blocks );
154
+ $is_responsive_menu = static::is_responsive( $attributes );
155
+ $computed_visibility = block_core_navigation_get_submenu_visibility( $attributes );
156
+ $open_on_click = 'click' === $computed_visibility;
157
+ $show_submenu_icon = ! empty( $attributes['showSubmenuIcon'] );
158
+ return ( $has_submenus && ( $open_on_click || $show_submenu_icon ) ) || $is_responsive_menu;
125
159
  }
126
160
 
127
161
  /**
@@ -354,14 +388,18 @@ class WP_Navigation_Block_Renderer {
354
388
  }
355
389
 
356
390
  // Parse the template part ID (format: "theme//slug").
391
+ // If it's just a slug, construct the full ID using the current theme.
357
392
  $parts = explode( '//', $overlay_template_part_id, 2 );
358
- if ( count( $parts ) !== 2 ) {
359
- return new WP_Block_List( array(), $attributes );
393
+ if ( count( $parts ) === 2 ) {
394
+ // Already in "theme//slug" format (backward compatibility).
395
+ $theme = $parts[0];
396
+ $slug = $parts[1];
397
+ } else {
398
+ // Just a slug, use current theme.
399
+ $theme = get_stylesheet();
400
+ $slug = $overlay_template_part_id;
360
401
  }
361
402
 
362
- $theme = $parts[0];
363
- $slug = $parts[1];
364
-
365
403
  // Only query for template parts from the active theme.
366
404
  if ( get_stylesheet() !== $theme ) {
367
405
  return new WP_Block_List( array(), $attributes );
@@ -390,7 +428,9 @@ class WP_Navigation_Block_Renderer {
390
428
 
391
429
  if ( ! $template_part_post ) {
392
430
  // Try to get from theme file if not in database.
393
- $block_template = get_block_file_template( $overlay_template_part_id, 'wp_template_part' );
431
+ // Construct the full template part ID for get_block_file_template.
432
+ $full_template_part_id = $theme . '//' . $slug;
433
+ $block_template = get_block_file_template( $full_template_part_id, 'wp_template_part' );
394
434
  if ( isset( $block_template->content ) ) {
395
435
  $parsed_blocks = parse_blocks( $block_template->content );
396
436
  $blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
@@ -962,8 +1002,13 @@ class WP_Navigation_Block_Renderer {
962
1002
 
963
1003
  static::handle_view_script_module_loading( $attributes, $block, $inner_blocks );
964
1004
 
1005
+ // Use div wrapper if this navigation block is within an overlay template part.
1006
+ $is_within_overlay = $attributes['_isWithinOverlayTemplatePart'] ?? false;
1007
+ $tag_name = $is_within_overlay ? 'div' : 'nav';
1008
+
965
1009
  return sprintf(
966
- '<nav %1$s>%2$s</nav>',
1010
+ '<%1$s %2$s>%3$s</%1$s>',
1011
+ $tag_name,
967
1012
  static::get_nav_attributes( $attributes, $inner_blocks ),
968
1013
  static::get_inner_block_markup( $attributes, $inner_blocks )
969
1014
  );
@@ -1109,7 +1154,10 @@ function block_core_navigation_add_directives_to_submenu( $tags, $block_attribut
1109
1154
  // event.
1110
1155
  $tags->set_attribute( 'tabindex', '-1' );
1111
1156
 
1112
- if ( ! isset( $block_attributes['openSubmenusOnClick'] ) || false === $block_attributes['openSubmenusOnClick'] ) {
1157
+ $computed_visibility = block_core_navigation_get_submenu_visibility( $block_attributes );
1158
+ $open_on_hover = 'hover' === $computed_visibility;
1159
+
1160
+ if ( $open_on_hover ) {
1113
1161
  $tags->set_attribute( 'data-wp-on--mouseenter', 'actions.openMenuOnHover' );
1114
1162
  $tags->set_attribute( 'data-wp-on--mouseleave', 'actions.closeMenuOnHover' );
1115
1163
  }
@@ -237,19 +237,76 @@ $navigation-icon-size: 24px;
237
237
  }
238
238
 
239
239
  // Custom menu items.
240
+ // Mixin for showing submenu containers
241
+ @mixin show-submenu {
242
+ visibility: visible;
243
+ overflow: visible;
244
+ opacity: 1;
245
+ width: auto;
246
+ height: auto;
247
+ }
248
+
240
249
  // Show submenus on hover unless they open on click.
241
250
  &:not(.open-on-click):hover > .wp-block-navigation__submenu-container,
242
251
  // Keep submenus open when focus is within.
243
252
  &:not(.open-on-click):not(.open-on-hover-click):focus-within > .wp-block-navigation__submenu-container,
244
253
  // Show submenus on click.
245
254
  .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container {
246
- visibility: visible;
247
- overflow: visible;
248
- opacity: 1;
249
- width: auto;
250
- height: auto;
255
+ @include show-submenu;
251
256
  min-width: 200px;
252
257
  }
258
+
259
+ // Always show submenus when open-always class is present
260
+ &.open-always {
261
+ flex-wrap: var(--navigation-layout-wrap, wrap);
262
+ flex-direction: var(--navigation-layout-direction, initial);
263
+ justify-content: var(--navigation-layout-justify, initial);
264
+ align-items: var(--navigation-layout-align, initial);
265
+ gap: var(--wp--style--block-gap, 2em);
266
+
267
+ .wp-block-navigation-item {
268
+ justify-content: var(--navigation-layout-justify, initial);
269
+ }
270
+
271
+ // Reset gap for submenus so they can rely on consistent gap spacing between items.
272
+ &.wp-block-navigation-submenu,
273
+ .wp-block-navigation__submenu-container {
274
+ gap: var(--wp--style--block-gap, 2em);
275
+ }
276
+
277
+ // Reset padding top for submenus so they can rely on consistent gap spacing between items.
278
+ &.wp-block-navigation-submenu,
279
+ .wp-block-navigation__submenu-container,
280
+ .wp-block-navigation-item {
281
+ padding-top: 0;
282
+ padding-bottom: 0;
283
+ }
284
+
285
+ // Give auto indention for submenus sized by the gap spacing
286
+ .wp-block-navigation__submenu-container {
287
+ padding-left: var(--wp--style--block-gap, 2em);
288
+ padding-right: var(--wp--style--block-gap, 2em);
289
+
290
+ // Padding reset
291
+ .wp-block-navigation-item__content {
292
+ padding: 0;
293
+ }
294
+ }
295
+
296
+ > .wp-block-navigation-item__content,
297
+ .wp-block-navigation__submenu-container > .wp-block-navigation-item > .wp-block-navigation-item__content {
298
+ flex-grow: 0;
299
+ }
300
+
301
+ > .wp-block-navigation__submenu-container {
302
+ @include show-submenu;
303
+ flex-basis: 100%;
304
+ position: static;
305
+ border: none;
306
+ background-color: transparent;
307
+ color: inherit;
308
+ }
309
+ }
253
310
  }
254
311
 
255
312
  // Submenu indentation when there's a background.
@@ -527,89 +584,92 @@ button.wp-block-navigation-item__content {
527
584
  padding-top: calc(2rem + #{ $navigation-icon-size });
528
585
  }
529
586
 
530
- .wp-block-navigation__responsive-container-content {
531
- // Don't crop the focus style.
532
- overflow: visible;
533
-
534
- // Override the container flex layout settings
535
- // because we want overlay menu to always display
536
- // as a column.
537
- display: flex;
538
- flex-direction: column;
539
- flex-wrap: nowrap;
540
-
541
- // Inherit alignment settings from container.
542
- align-items: var(--navigation-layout-justification-setting, inherit);
543
-
544
- // Always align the contents of the menu to the top.
545
- &,
546
- .wp-block-page-list,
547
- .wp-block-navigation__container {
548
- justify-content: flex-start;
549
- }
587
+ &:where(:not(.disable-default-overlay)) {
550
588
 
551
- .wp-block-navigation__submenu-icon {
552
- display: none;
553
- }
589
+ .wp-block-navigation__responsive-container-content {
590
+ // Don't crop the focus style.
591
+ overflow: visible;
554
592
 
555
- // Always expand/unfold submenus inside the modal.
556
- .has-child .wp-block-navigation__submenu-container {
557
- // Unset CSS that hides dropdown menus.
558
- opacity: 1;
559
- visibility: visible;
560
- height: auto;
561
- width: auto;
562
- overflow: initial;
563
- min-width: 200px;
564
-
565
- // Position and style.
566
- position: static;
567
- border: none;
568
- padding-left: 2rem;
569
- padding-right: 2rem;
570
- }
593
+ // Override the container flex layout settings
594
+ // because we want overlay menu to always display
595
+ // as a column.
596
+ display: flex;
597
+ flex-direction: column;
598
+ flex-wrap: nowrap;
571
599
 
572
- // Space unfolded items using gap and padding for submenus.
573
- .wp-block-navigation__submenu-container,
574
- .wp-block-navigation__container {
575
- gap: inherit;
576
- }
600
+ // Inherit alignment settings from container.
601
+ align-items: var(--navigation-layout-justification-setting, inherit);
577
602
 
578
- // Apply top padding to nested submenus.
579
- .wp-block-navigation__submenu-container {
580
- padding-top: var(--wp--style--block-gap, 2em);
581
- }
603
+ // Always align the contents of the menu to the top.
604
+ &,
605
+ .wp-block-page-list,
606
+ .wp-block-navigation__container {
607
+ justify-content: flex-start;
608
+ }
582
609
 
583
- // A default padding is added to submenu items. It's not appropriate inside the modal.
584
- .wp-block-navigation-item__content {
585
- padding: 0;
610
+ .wp-block-navigation__submenu-icon {
611
+ display: none;
612
+ }
613
+
614
+ // Always expand/unfold submenus inside the modal.
615
+ .has-child .wp-block-navigation__submenu-container {
616
+ // Unset CSS that hides dropdown menus.
617
+ opacity: 1;
618
+ visibility: visible;
619
+ height: auto;
620
+ width: auto;
621
+ overflow: initial;
622
+ min-width: 200px;
623
+
624
+ // Position and style.
625
+ position: static;
626
+ border: none;
627
+ padding-left: 2rem;
628
+ padding-right: 2rem;
629
+ }
630
+
631
+ // Space unfolded items using gap and padding for submenus.
632
+ .wp-block-navigation__submenu-container,
633
+ .wp-block-navigation__container {
634
+ gap: inherit;
635
+ }
636
+
637
+ // Apply top padding to nested submenus.
638
+ .wp-block-navigation__submenu-container {
639
+ padding-top: var(--wp--style--block-gap, 2em);
640
+ }
641
+
642
+ // A default padding is added to submenu items. It's not appropriate inside the modal.
643
+ .wp-block-navigation-item__content {
644
+ padding: 0;
645
+ }
646
+
647
+ // Default column display for overlay menu contents.
648
+ .wp-block-navigation__container,
649
+ .wp-block-navigation-item,
650
+ .wp-block-page-list {
651
+ display: flex;
652
+ flex-direction: column;
653
+ // Inherit alignment settings from container.
654
+ align-items: var(--navigation-layout-justification-setting, initial);
655
+ }
586
656
  }
587
657
 
588
- // Default column display for overlay menu contents.
658
+ // Remove background colors for items inside the overlay menu.
659
+ // Has to be !important to override global styles.
660
+ .wp-block-navigation-item .wp-block-navigation__submenu-container,
589
661
  .wp-block-navigation__container,
590
662
  .wp-block-navigation-item,
591
663
  .wp-block-page-list {
592
- display: flex;
593
- flex-direction: column;
594
- // Inherit alignment settings from container.
595
- align-items: var(--navigation-layout-justification-setting, initial);
664
+ color: inherit !important;
665
+ background: transparent !important;
596
666
  }
597
- }
598
667
 
599
- // Remove background colors for items inside the overlay menu.
600
- // Has to be !important to override global styles.
601
- .wp-block-navigation-item .wp-block-navigation__submenu-container,
602
- .wp-block-navigation__container,
603
- .wp-block-navigation-item,
604
- .wp-block-page-list {
605
- color: inherit !important;
606
- background: transparent !important;
607
- }
608
-
609
- // Override justification dropdown menu positioning rules.
610
- .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container {
611
- right: auto;
612
- left: auto;
668
+ // Override justification dropdown menu positioning rules.
669
+ .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container {
670
+ right: auto;
671
+ left: auto;
672
+ }
613
673
  }
614
674
  }
615
675
 
@@ -621,6 +681,10 @@ button.wp-block-navigation-item__content {
621
681
  width: 100%;
622
682
  }
623
683
 
684
+ .wp-block-navigation__responsive-close {
685
+ max-width: none;
686
+ }
687
+
624
688
  // When menu is open with custom overlay, hide default navigation and show overlay.
625
689
  &.is-menu-open {
626
690
  .wp-block-navigation__responsive-container-content {