@wordpress/block-library 9.36.1-next.8b30e05b0.0 → 9.37.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 (302) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/audio/index.js +1 -1
  3. package/build/audio/index.js.map +2 -2
  4. package/build/avatar/edit.js +13 -38
  5. package/build/avatar/edit.js.map +2 -2
  6. package/build/breadcrumbs/block.json +3 -2
  7. package/build/breadcrumbs/edit.js +18 -18
  8. package/build/breadcrumbs/edit.js.map +2 -2
  9. package/build/button/block.json +2 -3
  10. package/build/button/deprecated.js +203 -0
  11. package/build/button/deprecated.js.map +3 -3
  12. package/build/button/edit.js +13 -24
  13. package/build/button/edit.js.map +3 -3
  14. package/build/button/index.js +1 -1
  15. package/build/button/index.js.map +2 -2
  16. package/build/button/save.js +0 -2
  17. package/build/button/save.js.map +2 -2
  18. package/build/code/index.js +1 -1
  19. package/build/code/index.js.map +2 -2
  20. package/build/comments-pagination-numbers/block.json +7 -0
  21. package/build/cover/index.js +2 -2
  22. package/build/cover/index.js.map +2 -2
  23. package/build/details/index.js +1 -1
  24. package/build/details/index.js.map +2 -2
  25. package/build/file/index.js +1 -1
  26. package/build/file/index.js.map +2 -2
  27. package/build/freeform/block.json +0 -1
  28. package/build/gallery/edit.js +1 -1
  29. package/build/gallery/edit.js.map +2 -2
  30. package/build/gallery/transforms.js +7 -3
  31. package/build/gallery/transforms.js.map +2 -2
  32. package/build/heading/index.js +1 -1
  33. package/build/heading/index.js.map +2 -2
  34. package/build/html/modal.js +18 -7
  35. package/build/html/modal.js.map +2 -2
  36. package/build/image/index.js +1 -1
  37. package/build/image/index.js.map +2 -2
  38. package/build/index.js +9 -3
  39. package/build/index.js.map +2 -2
  40. package/build/list-item/index.js +1 -1
  41. package/build/list-item/index.js.map +2 -2
  42. package/build/math/edit.js +14 -2
  43. package/build/math/edit.js.map +2 -2
  44. package/build/media-text/index.js +1 -1
  45. package/build/media-text/index.js.map +2 -2
  46. package/build/more/index.js +1 -1
  47. package/build/more/index.js.map +2 -2
  48. package/build/navigation/block.json +3 -0
  49. package/build/navigation/edit/index.js +57 -83
  50. package/build/navigation/edit/index.js.map +3 -3
  51. package/build/navigation/edit/overlay-menu-preview-button.js +96 -0
  52. package/build/navigation/edit/overlay-menu-preview-button.js.map +7 -0
  53. package/build/navigation/edit/overlay-menu-preview-controls.js +90 -0
  54. package/build/navigation/edit/overlay-menu-preview-controls.js.map +7 -0
  55. package/build/navigation/edit/overlay-panel.js +86 -0
  56. package/build/navigation/edit/overlay-panel.js.map +7 -0
  57. package/build/navigation/edit/overlay-template-part-selector.js +163 -0
  58. package/build/navigation/edit/overlay-template-part-selector.js.map +7 -0
  59. package/build/navigation/edit/overlay-visibility-control.js +54 -0
  60. package/build/navigation/edit/overlay-visibility-control.js.map +7 -0
  61. package/build/navigation/edit/responsive-wrapper.js +14 -2
  62. package/build/navigation/edit/responsive-wrapper.js.map +2 -2
  63. package/build/navigation-link/edit.js +7 -21
  64. package/build/navigation-link/edit.js.map +2 -2
  65. package/build/navigation-link/index.js +1 -1
  66. package/build/navigation-link/index.js.map +2 -2
  67. package/build/navigation-link/shared/index.js +5 -2
  68. package/build/navigation-link/shared/index.js.map +2 -2
  69. package/build/navigation-link/shared/use-handle-link-change.js +84 -0
  70. package/build/navigation-link/shared/use-handle-link-change.js.map +7 -0
  71. package/build/navigation-submenu/index.js +1 -1
  72. package/build/navigation-submenu/index.js.map +2 -2
  73. package/build/page-list-item/edit.js +4 -3
  74. package/build/page-list-item/edit.js.map +2 -2
  75. package/build/paragraph/index.js +1 -1
  76. package/build/paragraph/index.js.map +2 -2
  77. package/build/post-title/edit.js +6 -4
  78. package/build/post-title/edit.js.map +2 -2
  79. package/build/preformatted/index.js +1 -1
  80. package/build/preformatted/index.js.map +2 -2
  81. package/build/pullquote/index.js +1 -1
  82. package/build/pullquote/index.js.map +2 -2
  83. package/build/query/edit/inspector-controls/author-control.js +0 -1
  84. package/build/query/edit/inspector-controls/author-control.js.map +2 -2
  85. package/build/query/edit/inspector-controls/format-controls.js +0 -1
  86. package/build/query/edit/inspector-controls/format-controls.js.map +2 -2
  87. package/build/query/edit/inspector-controls/parent-control.js +1 -2
  88. package/build/query/edit/inspector-controls/parent-control.js.map +2 -2
  89. package/build/query/edit/inspector-controls/taxonomy-controls.js +0 -1
  90. package/build/query/edit/inspector-controls/taxonomy-controls.js.map +2 -2
  91. package/build/search/index.js +1 -1
  92. package/build/search/index.js.map +2 -2
  93. package/build/social-link/index.js +1 -1
  94. package/build/social-link/index.js.map +2 -2
  95. package/build/template-part/edit/index.js +3 -31
  96. package/build/template-part/edit/index.js.map +2 -2
  97. package/build/template-part/edit/utils/get-template-part-icon.js +9 -4
  98. package/build/template-part/edit/utils/get-template-part-icon.js.map +3 -3
  99. package/build/template-part/edit/utils/hooks.js +3 -2
  100. package/build/template-part/edit/utils/hooks.js.map +2 -2
  101. package/build/terms-query/edit/inspector-controls/include-control.js +0 -1
  102. package/build/terms-query/edit/inspector-controls/include-control.js.map +2 -2
  103. package/build/utils/deprecated-text-align-attributes.js +70 -0
  104. package/build/utils/deprecated-text-align-attributes.js.map +7 -0
  105. package/build/utils/migrate-text-align.js +42 -0
  106. package/build/utils/migrate-text-align.js.map +7 -0
  107. package/build/verse/index.js +1 -1
  108. package/build/verse/index.js.map +2 -2
  109. package/build/video/index.js +1 -1
  110. package/build/video/index.js.map +2 -2
  111. package/build-module/audio/index.js +1 -1
  112. package/build-module/audio/index.js.map +2 -2
  113. package/build-module/avatar/edit.js +13 -38
  114. package/build-module/avatar/edit.js.map +2 -2
  115. package/build-module/breadcrumbs/block.json +3 -2
  116. package/build-module/breadcrumbs/edit.js +18 -18
  117. package/build-module/breadcrumbs/edit.js.map +2 -2
  118. package/build-module/button/block.json +2 -3
  119. package/build-module/button/deprecated.js +205 -1
  120. package/build-module/button/deprecated.js.map +2 -2
  121. package/build-module/button/edit.js +13 -25
  122. package/build-module/button/edit.js.map +2 -2
  123. package/build-module/button/index.js +1 -1
  124. package/build-module/button/index.js.map +2 -2
  125. package/build-module/button/save.js +0 -2
  126. package/build-module/button/save.js.map +2 -2
  127. package/build-module/code/index.js +1 -1
  128. package/build-module/code/index.js.map +2 -2
  129. package/build-module/comments-pagination-numbers/block.json +7 -0
  130. package/build-module/cover/index.js +2 -2
  131. package/build-module/cover/index.js.map +2 -2
  132. package/build-module/details/index.js +1 -1
  133. package/build-module/details/index.js.map +2 -2
  134. package/build-module/file/index.js +1 -1
  135. package/build-module/file/index.js.map +2 -2
  136. package/build-module/freeform/block.json +0 -1
  137. package/build-module/gallery/edit.js +1 -1
  138. package/build-module/gallery/edit.js.map +2 -2
  139. package/build-module/gallery/transforms.js +7 -3
  140. package/build-module/gallery/transforms.js.map +2 -2
  141. package/build-module/heading/index.js +1 -1
  142. package/build-module/heading/index.js.map +2 -2
  143. package/build-module/html/modal.js +19 -7
  144. package/build-module/html/modal.js.map +2 -2
  145. package/build-module/image/index.js +1 -1
  146. package/build-module/image/index.js.map +2 -2
  147. package/build-module/index.js +9 -3
  148. package/build-module/index.js.map +2 -2
  149. package/build-module/list-item/index.js +1 -1
  150. package/build-module/list-item/index.js.map +2 -2
  151. package/build-module/math/edit.js +15 -3
  152. package/build-module/math/edit.js.map +2 -2
  153. package/build-module/media-text/index.js +1 -1
  154. package/build-module/media-text/index.js.map +2 -2
  155. package/build-module/more/index.js +1 -1
  156. package/build-module/more/index.js.map +2 -2
  157. package/build-module/navigation/block.json +3 -0
  158. package/build-module/navigation/edit/index.js +58 -88
  159. package/build-module/navigation/edit/index.js.map +2 -2
  160. package/build-module/navigation/edit/overlay-menu-preview-button.js +65 -0
  161. package/build-module/navigation/edit/overlay-menu-preview-button.js.map +7 -0
  162. package/build-module/navigation/edit/overlay-menu-preview-controls.js +64 -0
  163. package/build-module/navigation/edit/overlay-menu-preview-controls.js.map +7 -0
  164. package/build-module/navigation/edit/overlay-panel.js +58 -0
  165. package/build-module/navigation/edit/overlay-panel.js.map +7 -0
  166. package/build-module/navigation/edit/overlay-template-part-selector.js +142 -0
  167. package/build-module/navigation/edit/overlay-template-part-selector.js.map +7 -0
  168. package/build-module/navigation/edit/overlay-visibility-control.js +36 -0
  169. package/build-module/navigation/edit/overlay-visibility-control.js.map +7 -0
  170. package/build-module/navigation/edit/responsive-wrapper.js +14 -2
  171. package/build-module/navigation/edit/responsive-wrapper.js.map +2 -2
  172. package/build-module/navigation-link/edit.js +9 -23
  173. package/build-module/navigation-link/edit.js.map +2 -2
  174. package/build-module/navigation-link/index.js +1 -1
  175. package/build-module/navigation-link/index.js.map +2 -2
  176. package/build-module/navigation-link/shared/index.js +3 -1
  177. package/build-module/navigation-link/shared/index.js.map +2 -2
  178. package/build-module/navigation-link/shared/use-handle-link-change.js +59 -0
  179. package/build-module/navigation-link/shared/use-handle-link-change.js.map +7 -0
  180. package/build-module/navigation-submenu/index.js +1 -1
  181. package/build-module/navigation-submenu/index.js.map +2 -2
  182. package/build-module/page-list-item/edit.js +4 -3
  183. package/build-module/page-list-item/edit.js.map +2 -2
  184. package/build-module/paragraph/index.js +1 -1
  185. package/build-module/paragraph/index.js.map +2 -2
  186. package/build-module/post-title/edit.js +6 -4
  187. package/build-module/post-title/edit.js.map +2 -2
  188. package/build-module/preformatted/index.js +1 -1
  189. package/build-module/preformatted/index.js.map +2 -2
  190. package/build-module/pullquote/index.js +1 -1
  191. package/build-module/pullquote/index.js.map +2 -2
  192. package/build-module/query/edit/inspector-controls/author-control.js +0 -1
  193. package/build-module/query/edit/inspector-controls/author-control.js.map +2 -2
  194. package/build-module/query/edit/inspector-controls/format-controls.js +0 -1
  195. package/build-module/query/edit/inspector-controls/format-controls.js.map +2 -2
  196. package/build-module/query/edit/inspector-controls/parent-control.js +1 -2
  197. package/build-module/query/edit/inspector-controls/parent-control.js.map +2 -2
  198. package/build-module/query/edit/inspector-controls/taxonomy-controls.js +0 -1
  199. package/build-module/query/edit/inspector-controls/taxonomy-controls.js.map +2 -2
  200. package/build-module/search/index.js +1 -1
  201. package/build-module/search/index.js.map +2 -2
  202. package/build-module/social-link/index.js +1 -1
  203. package/build-module/social-link/index.js.map +2 -2
  204. package/build-module/template-part/edit/index.js +3 -31
  205. package/build-module/template-part/edit/index.js.map +2 -2
  206. package/build-module/template-part/edit/utils/get-template-part-icon.js +10 -4
  207. package/build-module/template-part/edit/utils/get-template-part-icon.js.map +2 -2
  208. package/build-module/template-part/edit/utils/hooks.js +3 -2
  209. package/build-module/template-part/edit/utils/hooks.js.map +2 -2
  210. package/build-module/terms-query/edit/inspector-controls/include-control.js +0 -1
  211. package/build-module/terms-query/edit/inspector-controls/include-control.js.map +2 -2
  212. package/build-module/utils/deprecated-text-align-attributes.js +39 -0
  213. package/build-module/utils/deprecated-text-align-attributes.js.map +7 -0
  214. package/build-module/utils/migrate-text-align.js +21 -0
  215. package/build-module/utils/migrate-text-align.js.map +7 -0
  216. package/build-module/verse/index.js +1 -1
  217. package/build-module/verse/index.js.map +2 -2
  218. package/build-module/video/index.js +1 -1
  219. package/build-module/video/index.js.map +2 -2
  220. package/build-style/accordion-heading/style-rtl.css +2 -18
  221. package/build-style/accordion-heading/style.css +2 -18
  222. package/build-style/classic-rtl.css +24 -0
  223. package/build-style/classic.css +24 -0
  224. package/build-style/common-rtl.css +4 -4
  225. package/build-style/common.css +4 -0
  226. package/build-style/editor-rtl.css +5 -0
  227. package/build-style/editor.css +5 -0
  228. package/build-style/navigation/editor-rtl.css +5 -0
  229. package/build-style/navigation/editor.css +5 -0
  230. package/build-style/style-rtl.css +8 -22
  231. package/build-style/style.css +8 -18
  232. package/build-style/verse/style-rtl.css +2 -0
  233. package/build-style/verse/style.css +2 -0
  234. package/package.json +40 -38
  235. package/src/accordion-heading/style.scss +2 -30
  236. package/src/audio/index.js +1 -1
  237. package/src/avatar/edit.js +68 -83
  238. package/src/breadcrumbs/block.json +3 -2
  239. package/src/breadcrumbs/edit.js +18 -18
  240. package/src/breadcrumbs/index.php +38 -17
  241. package/src/button/block.json +2 -3
  242. package/src/button/deprecated.js +214 -0
  243. package/src/button/edit.js +2 -11
  244. package/src/button/index.js +1 -1
  245. package/src/button/save.js +0 -2
  246. package/src/classic.scss +38 -0
  247. package/src/code/index.js +1 -1
  248. package/src/comments-pagination-numbers/block.json +7 -0
  249. package/src/common.scss +4 -0
  250. package/src/cover/index.js +2 -2
  251. package/src/details/index.js +1 -1
  252. package/src/file/index.js +1 -1
  253. package/src/freeform/block.json +0 -1
  254. package/src/gallery/edit.js +4 -1
  255. package/src/gallery/transforms.js +6 -2
  256. package/src/heading/index.js +1 -1
  257. package/src/html/modal.js +39 -20
  258. package/src/image/index.js +1 -1
  259. package/src/index.js +9 -3
  260. package/src/list-item/index.js +1 -1
  261. package/src/math/edit.js +15 -3
  262. package/src/media-text/index.js +1 -1
  263. package/src/more/index.js +1 -1
  264. package/src/navigation/block.json +3 -0
  265. package/src/navigation/edit/index.js +77 -82
  266. package/src/navigation/edit/overlay-menu-preview-button.js +82 -0
  267. package/src/navigation/edit/overlay-menu-preview-controls.js +65 -0
  268. package/src/navigation/edit/overlay-panel.js +78 -0
  269. package/src/navigation/edit/overlay-template-part-selector.js +198 -0
  270. package/src/navigation/edit/overlay-visibility-control.js +40 -0
  271. package/src/navigation/edit/responsive-wrapper.js +16 -1
  272. package/src/navigation/edit/test/overlay-template-part-selector.js +461 -0
  273. package/src/navigation/editor.scss +5 -0
  274. package/src/navigation-link/edit.js +9 -26
  275. package/src/navigation-link/index.js +1 -1
  276. package/src/navigation-link/shared/index.js +1 -0
  277. package/src/navigation-link/shared/test/use-handle-link-change.test.js +804 -0
  278. package/src/navigation-link/shared/use-handle-link-change.js +91 -0
  279. package/src/navigation-submenu/index.js +1 -1
  280. package/src/page-list/index.php +3 -4
  281. package/src/page-list-item/edit.js +4 -3
  282. package/src/paragraph/index.js +1 -1
  283. package/src/post-title/edit.js +8 -4
  284. package/src/post-title/index.php +1 -1
  285. package/src/preformatted/index.js +1 -1
  286. package/src/pullquote/index.js +1 -1
  287. package/src/query/edit/inspector-controls/author-control.js +0 -1
  288. package/src/query/edit/inspector-controls/format-controls.js +0 -1
  289. package/src/query/edit/inspector-controls/parent-control.js +0 -1
  290. package/src/query/edit/inspector-controls/taxonomy-controls.js +0 -1
  291. package/src/search/index.js +1 -1
  292. package/src/social-link/index.js +1 -1
  293. package/src/template-part/edit/index.js +5 -41
  294. package/src/template-part/edit/utils/get-template-part-icon.js +23 -4
  295. package/src/template-part/edit/utils/hooks.js +10 -2
  296. package/src/terms-query/edit/inspector-controls/include-control.js +0 -1
  297. package/src/utils/deprecated-text-align-attributes.js +45 -0
  298. package/src/utils/migrate-text-align.js +22 -0
  299. package/src/verse/index.js +1 -1
  300. package/src/verse/style.scss +4 -0
  301. package/src/video/index.js +1 -1
  302. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,198 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+ import { useEntityRecords } from '@wordpress/core-data';
6
+ import { SelectControl, Spinner, Button } from '@wordpress/components';
7
+ import { __, sprintf } from '@wordpress/i18n';
8
+ import { decodeEntities } from '@wordpress/html-entities';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { createTemplatePartId } from '../../template-part/edit/utils/create-template-part-id';
14
+
15
+ /**
16
+ * Parses a template part ID into theme and slug components.
17
+ *
18
+ * @param {string} templatePartId Template part ID in format "theme//slug".
19
+ * @return {{theme: string, slug: string}|null} Parsed components or null if invalid.
20
+ */
21
+ function parseTemplatePartId( templatePartId ) {
22
+ if ( ! templatePartId || typeof templatePartId !== 'string' ) {
23
+ return null;
24
+ }
25
+
26
+ const parts = templatePartId.split( '//' );
27
+ if ( parts.length !== 2 ) {
28
+ return null;
29
+ }
30
+
31
+ return {
32
+ theme: parts[ 0 ],
33
+ slug: parts[ 1 ],
34
+ };
35
+ }
36
+
37
+ /**
38
+ * Overlay Template Part Selector component.
39
+ *
40
+ * @param {Object} props Component props.
41
+ * @param {string} props.overlay Currently selected overlay template part ID.
42
+ * @param {Function} props.setAttributes Function to update block attributes.
43
+ * @param {Function} props.onNavigateToEntityRecord Function to navigate to template part editor.
44
+ * @return {JSX.Element} The overlay template part selector component.
45
+ */
46
+ export default function OverlayTemplatePartSelector( {
47
+ overlay,
48
+ setAttributes,
49
+ onNavigateToEntityRecord,
50
+ } ) {
51
+ const {
52
+ records: templateParts,
53
+ isResolving,
54
+ hasResolved,
55
+ } = useEntityRecords( 'postType', 'wp_template_part', {
56
+ per_page: -1,
57
+ } );
58
+
59
+ // Filter template parts by overlay area
60
+ const overlayTemplateParts = useMemo( () => {
61
+ if ( ! templateParts ) {
62
+ return [];
63
+ }
64
+ return templateParts.filter(
65
+ ( templatePart ) => templatePart.area === 'overlay'
66
+ );
67
+ }, [ templateParts ] );
68
+
69
+ // Build options for SelectControl
70
+ const options = useMemo( () => {
71
+ const baseOptions = [
72
+ {
73
+ label: __( 'None (default)' ),
74
+ value: '',
75
+ },
76
+ ];
77
+
78
+ if ( ! hasResolved || isResolving ) {
79
+ return baseOptions;
80
+ }
81
+
82
+ const templatePartOptions = overlayTemplateParts.map(
83
+ ( templatePart ) => {
84
+ const templatePartId = createTemplatePartId(
85
+ templatePart.theme,
86
+ templatePart.slug
87
+ );
88
+ const label = templatePart.title?.rendered
89
+ ? decodeEntities( templatePart.title.rendered )
90
+ : templatePart.slug;
91
+
92
+ return {
93
+ label,
94
+ value: templatePartId,
95
+ };
96
+ }
97
+ );
98
+
99
+ return [ ...baseOptions, ...templatePartOptions ];
100
+ }, [ overlayTemplateParts, hasResolved, isResolving ] );
101
+
102
+ // Parse selected template part for navigation
103
+ const parsedTemplatePart = useMemo( () => {
104
+ return parseTemplatePartId( overlay );
105
+ }, [ overlay ] );
106
+
107
+ // Find the selected template part to get its title
108
+ const selectedTemplatePart = useMemo( () => {
109
+ if ( ! overlay || ! overlayTemplateParts ) {
110
+ return null;
111
+ }
112
+ return overlayTemplateParts.find( ( templatePart ) => {
113
+ const templatePartId = createTemplatePartId(
114
+ templatePart.theme,
115
+ templatePart.slug
116
+ );
117
+ return templatePartId === overlay;
118
+ } );
119
+ }, [ overlay, overlayTemplateParts ] );
120
+
121
+ const handleSelectChange = ( value ) => {
122
+ setAttributes( {
123
+ overlay: value || undefined,
124
+ } );
125
+ };
126
+
127
+ const handleEditClick = () => {
128
+ if ( ! overlay || ! onNavigateToEntityRecord ) {
129
+ return;
130
+ }
131
+
132
+ onNavigateToEntityRecord( {
133
+ postId: overlay,
134
+ postType: 'wp_template_part',
135
+ } );
136
+ };
137
+
138
+ const isEditButtonDisabled =
139
+ ! overlay ||
140
+ ! parsedTemplatePart ||
141
+ ! onNavigateToEntityRecord ||
142
+ isResolving;
143
+
144
+ if ( isResolving && ! hasResolved ) {
145
+ return (
146
+ <div className="wp-block-navigation__overlay-selector">
147
+ <Spinner />
148
+ <p>{ __( 'Loading overlays…' ) }</p>
149
+ </div>
150
+ );
151
+ }
152
+
153
+ return (
154
+ <div className="wp-block-navigation__overlay-selector">
155
+ <SelectControl
156
+ __next40pxDefaultSize
157
+ __nextHasNoMarginBottom
158
+ label={ __( 'Overlay template' ) }
159
+ value={ overlay || '' }
160
+ options={ options }
161
+ onChange={ handleSelectChange }
162
+ disabled={ isResolving }
163
+ accessibleWhenDisabled
164
+ help={
165
+ overlayTemplateParts.length === 0 && hasResolved
166
+ ? __( 'No overlays found.' )
167
+ : __( 'Select an overlay to use for the navigation.' )
168
+ }
169
+ />
170
+ { overlay && (
171
+ <Button
172
+ __next40pxDefaultSize
173
+ variant="secondary"
174
+ onClick={ handleEditClick }
175
+ disabled={ isEditButtonDisabled }
176
+ accessibleWhenDisabled
177
+ aria-label={
178
+ selectedTemplatePart
179
+ ? sprintf(
180
+ /* translators: %s: Overlay title. */
181
+ __( 'Edit overlay: %s' ),
182
+ selectedTemplatePart.title?.rendered
183
+ ? decodeEntities(
184
+ selectedTemplatePart.title
185
+ .rendered
186
+ )
187
+ : selectedTemplatePart.slug
188
+ )
189
+ : __( 'Edit overlay' )
190
+ }
191
+ className="wp-block-navigation__overlay-edit-button"
192
+ >
193
+ { __( 'Edit' ) }
194
+ </Button>
195
+ ) }
196
+ </div>
197
+ );
198
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalToggleGroupControl as ToggleGroupControl,
6
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
7
+ } from '@wordpress/components';
8
+ import { __ } from '@wordpress/i18n';
9
+
10
+ /**
11
+ * Overlay Visibility Control component.
12
+ *
13
+ * @param {Object} props Component props.
14
+ * @param {string} props.overlayMenu Overlay menu setting ('never', 'mobile', 'always').
15
+ * @param {Function} props.setAttributes Function to update block attributes.
16
+ * @return {JSX.Element} The overlay visibility control.
17
+ */
18
+ export default function OverlayVisibilityControl( {
19
+ overlayMenu,
20
+ setAttributes,
21
+ } ) {
22
+ return (
23
+ <ToggleGroupControl
24
+ __next40pxDefaultSize
25
+ __nextHasNoMarginBottom
26
+ label={ __( 'Overlay Visibility' ) }
27
+ aria-label={ __( 'Configure overlay visibility' ) }
28
+ value={ overlayMenu }
29
+ help={ __(
30
+ 'Collapses the navigation options in a menu icon opening an overlay.'
31
+ ) }
32
+ onChange={ ( value ) => setAttributes( { overlayMenu: value } ) }
33
+ isBlock
34
+ >
35
+ <ToggleGroupControlOption value="never" label={ __( 'Off' ) } />
36
+ <ToggleGroupControlOption value="mobile" label={ __( 'Mobile' ) } />
37
+ <ToggleGroupControlOption value="always" label={ __( 'Always' ) } />
38
+ </ToggleGroupControl>
39
+ );
40
+ }
@@ -27,6 +27,8 @@ export default function ResponsiveWrapper( {
27
27
  overlayTextColor,
28
28
  hasIcon,
29
29
  icon,
30
+ overlay,
31
+ onNavigateToEntityRecord,
30
32
  } ) {
31
33
  if ( ! isResponsive ) {
32
34
  return children;
@@ -75,6 +77,19 @@ export default function ResponsiveWrapper( {
75
77
  } ),
76
78
  };
77
79
 
80
+ const handleToggleClick = () => {
81
+ // If an overlay template part is selected, navigate to it instead of toggling
82
+ if ( overlay && onNavigateToEntityRecord ) {
83
+ onNavigateToEntityRecord( {
84
+ postId: overlay,
85
+ postType: 'wp_template_part',
86
+ } );
87
+ return;
88
+ }
89
+ // Otherwise, use normal toggle behavior
90
+ onToggle( true );
91
+ };
92
+
78
93
  return (
79
94
  <>
80
95
  { ! isOpen && (
@@ -83,7 +98,7 @@ export default function ResponsiveWrapper( {
83
98
  aria-haspopup="true"
84
99
  aria-label={ hasIcon && __( 'Open menu' ) }
85
100
  className={ openButtonClasses }
86
- onClick={ () => onToggle( true ) }
101
+ onClick={ handleToggleClick }
87
102
  >
88
103
  { hasIcon && <OverlayMenuIcon icon={ icon } /> }
89
104
  { ! hasIcon && __( 'Menu' ) }