@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
package/src/math/edit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { __ } from '@wordpress/i18n';
4
+ import { __, sprintf } from '@wordpress/i18n';
5
5
  import {
6
6
  useBlockProps,
7
7
  store as blockEditorStore,
@@ -98,7 +98,15 @@ export default function MathEdit( { attributes, setAttributes, isSelected } ) {
98
98
  setError( null );
99
99
  } catch ( err ) {
100
100
  setError( err.message );
101
- speak( err.message );
101
+ speak(
102
+ sprintf(
103
+ /* translators: %s: error message returned when parsing LaTeX. */
104
+ __(
105
+ 'Error parsing mathematical expression: %s'
106
+ ),
107
+ err.message
108
+ )
109
+ );
102
110
  }
103
111
  setAttributes( {
104
112
  mathML: newMathML,
@@ -113,7 +121,11 @@ export default function MathEdit( { attributes, setAttributes, isSelected } ) {
113
121
  intent="error"
114
122
  className="wp-block-math__error"
115
123
  >
116
- { error }
124
+ { sprintf(
125
+ /* translators: %s: error message returned when parsing LaTeX. */
126
+ __( 'Error: %s' ),
127
+ error
128
+ ) }
117
129
  </Badge>
118
130
  <style children=".wp-block-math__error .components-badge__content{white-space:normal}" />
119
131
  </>
@@ -54,7 +54,7 @@ export const settings = {
54
54
  deprecated,
55
55
  };
56
56
 
57
- if ( window.__experimentalContentOnlyPatternInsertion ) {
57
+ if ( window.__experimentalContentOnlyInspectorFields ) {
58
58
  settings[ fieldsKey ] = [
59
59
  {
60
60
  id: 'media',
package/src/more/index.js CHANGED
@@ -40,7 +40,7 @@ export const settings = {
40
40
  save,
41
41
  };
42
42
 
43
- if ( window.__experimentalContentOnlyPatternInsertion ) {
43
+ if ( window.__experimentalContentOnlyInspectorFields ) {
44
44
  settings[ fieldsKey ] = [
45
45
  {
46
46
  id: 'customText',
@@ -54,6 +54,9 @@
54
54
  "type": "string",
55
55
  "default": "mobile"
56
56
  },
57
+ "overlay": {
58
+ "type": "string"
59
+ },
57
60
  "icon": {
58
61
  "type": "string",
59
62
  "default": "handle"
@@ -34,11 +34,7 @@ import { useDispatch, useSelect } from '@wordpress/data';
34
34
  import {
35
35
  __experimentalToolsPanel as ToolsPanel,
36
36
  __experimentalToolsPanelItem as ToolsPanelItem,
37
- __experimentalToggleGroupControl as ToggleGroupControl,
38
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
39
- __experimentalVStack as VStack,
40
37
  ToggleControl,
41
- Button,
42
38
  Spinner,
43
39
  Notice,
44
40
  ToolbarButton,
@@ -46,7 +42,7 @@ import {
46
42
  } from '@wordpress/components';
47
43
  import { __ } from '@wordpress/i18n';
48
44
  import { speak } from '@wordpress/a11y';
49
- import { close, Icon, page } from '@wordpress/icons';
45
+ import { page } from '@wordpress/icons';
50
46
  import { createBlock } from '@wordpress/blocks';
51
47
  import { useInstanceId } from '@wordpress/compose';
52
48
 
@@ -62,8 +58,10 @@ import NavigationMenuNameControl from './navigation-menu-name-control';
62
58
  import UnsavedInnerBlocks from './unsaved-inner-blocks';
63
59
  import NavigationMenuDeleteControl from './navigation-menu-delete-control';
64
60
  import useNavigationNotice from './use-navigation-notice';
65
- import OverlayMenuIcon from './overlay-menu-icon';
66
61
  import OverlayMenuPreview from './overlay-menu-preview';
62
+ import OverlayPanel from './overlay-panel';
63
+ import OverlayVisibilityControl from './overlay-visibility-control';
64
+ import OverlayMenuPreviewButton from './overlay-menu-preview-button';
67
65
  import useConvertClassicToBlockMenu, {
68
66
  CLASSIC_MENU_CONVERSION_ERROR,
69
67
  CLASSIC_MENU_CONVERSION_PENDING,
@@ -263,6 +261,7 @@ function Navigation( {
263
261
  const {
264
262
  openSubmenusOnClick,
265
263
  overlayMenu,
264
+ overlay,
266
265
  showSubmenuIcon,
267
266
  templateLock,
268
267
  layout: {
@@ -288,6 +287,18 @@ function Navigation( {
288
287
 
289
288
  const blockEditingMode = useBlockEditingMode();
290
289
 
290
+ const { onNavigateToEntityRecord } = useSelect( ( select ) => {
291
+ const { getSettings } = select( blockEditorStore );
292
+ const settings = getSettings();
293
+ return {
294
+ onNavigateToEntityRecord: settings?.onNavigateToEntityRecord,
295
+ };
296
+ }, [] );
297
+
298
+ const isOverlayExperimentEnabled =
299
+ typeof window !== 'undefined' &&
300
+ window.__experimentalNavigationOverlays === true;
301
+
291
302
  // Preload classic menus, so that they don't suddenly pop-in when viewing
292
303
  // the Select Menu dropdown.
293
304
  const { menus: classicMenus } = useNavigationEntities();
@@ -658,89 +669,50 @@ function Navigation( {
658
669
  } }
659
670
  dropdownMenuProps={ dropdownMenuProps }
660
671
  >
661
- { isResponsive && (
672
+ { ! isOverlayExperimentEnabled && (
662
673
  <>
663
- <Button
664
- __next40pxDefaultSize
665
- className={ overlayMenuPreviewClasses }
666
- onClick={ () => {
667
- setOverlayMenuPreview(
668
- ! overlayMenuPreview
669
- );
670
- } }
671
- aria-label={ __( 'Overlay menu controls' ) }
672
- aria-controls={ overlayMenuPreviewId }
673
- aria-expanded={ overlayMenuPreview }
674
- >
675
- { hasIcon && (
676
- <>
677
- <OverlayMenuIcon icon={ icon } />
678
- <Icon icon={ close } />
679
- </>
680
- ) }
681
- { ! hasIcon && (
682
- <>
683
- <span>{ __( 'Menu' ) }</span>
684
- <span>{ __( 'Close' ) }</span>
685
- </>
686
- ) }
687
- </Button>
688
- { overlayMenuPreview && (
689
- <VStack
690
- id={ overlayMenuPreviewId }
691
- spacing={ 4 }
692
- style={ {
674
+ { isResponsive && (
675
+ <OverlayMenuPreviewButton
676
+ isResponsive={ isResponsive }
677
+ overlayMenuPreview={
678
+ overlayMenuPreview
679
+ }
680
+ setOverlayMenuPreview={
681
+ setOverlayMenuPreview
682
+ }
683
+ hasIcon={ hasIcon }
684
+ icon={ icon }
685
+ setAttributes={ setAttributes }
686
+ overlayMenuPreviewClasses={
687
+ overlayMenuPreviewClasses
688
+ }
689
+ overlayMenuPreviewId={
690
+ overlayMenuPreviewId
691
+ }
692
+ containerStyle={ {
693
693
  gridColumn: 'span 2',
694
694
  } }
695
- >
696
- <OverlayMenuPreview
697
- setAttributes={ setAttributes }
698
- hasIcon={ hasIcon }
699
- icon={ icon }
700
- hidden={ ! overlayMenuPreview }
701
- />
702
- </VStack>
695
+ />
703
696
  ) }
697
+
698
+ <ToolsPanelItem
699
+ hasValue={ () => overlayMenu !== 'mobile' }
700
+ label={ __( 'Overlay Visibility' ) }
701
+ onDeselect={ () =>
702
+ setAttributes( {
703
+ overlayMenu: 'mobile',
704
+ } )
705
+ }
706
+ isShownByDefault
707
+ >
708
+ <OverlayVisibilityControl
709
+ overlayMenu={ overlayMenu }
710
+ setAttributes={ setAttributes }
711
+ />
712
+ </ToolsPanelItem>
704
713
  </>
705
714
  ) }
706
715
 
707
- <ToolsPanelItem
708
- hasValue={ () => overlayMenu !== 'mobile' }
709
- label={ __( 'Overlay Menu' ) }
710
- onDeselect={ () =>
711
- setAttributes( { overlayMenu: 'mobile' } )
712
- }
713
- isShownByDefault
714
- >
715
- <ToggleGroupControl
716
- __next40pxDefaultSize
717
- __nextHasNoMarginBottom
718
- label={ __( 'Overlay Menu' ) }
719
- aria-label={ __( 'Configure overlay menu' ) }
720
- value={ overlayMenu }
721
- help={ __(
722
- 'Collapses the navigation options in a menu icon opening an overlay.'
723
- ) }
724
- onChange={ ( value ) =>
725
- setAttributes( { overlayMenu: value } )
726
- }
727
- isBlock
728
- >
729
- <ToggleGroupControlOption
730
- value="never"
731
- label={ __( 'Off' ) }
732
- />
733
- <ToggleGroupControlOption
734
- value="mobile"
735
- label={ __( 'Mobile' ) }
736
- />
737
- <ToggleGroupControlOption
738
- value="always"
739
- label={ __( 'Always' ) }
740
- />
741
- </ToggleGroupControl>
742
- </ToolsPanelItem>
743
-
744
716
  { hasSubmenus && (
745
717
  <>
746
718
  <h3 className="wp-block-navigation__submenu-header">
@@ -815,6 +787,23 @@ function Navigation( {
815
787
  </ToolsPanel>
816
788
  ) }
817
789
  </InspectorControls>
790
+ { isOverlayExperimentEnabled && (
791
+ <InspectorControls>
792
+ <OverlayPanel
793
+ overlayMenu={ overlayMenu }
794
+ overlay={ overlay }
795
+ setAttributes={ setAttributes }
796
+ onNavigateToEntityRecord={ onNavigateToEntityRecord }
797
+ overlayMenuPreview={ overlayMenuPreview }
798
+ setOverlayMenuPreview={ setOverlayMenuPreview }
799
+ hasIcon={ hasIcon }
800
+ icon={ icon }
801
+ overlayMenuPreviewClasses={ overlayMenuPreviewClasses }
802
+ overlayMenuPreviewId={ overlayMenuPreviewId }
803
+ isResponsive={ isResponsive }
804
+ />
805
+ </InspectorControls>
806
+ ) }
818
807
  <InspectorControls group="color">
819
808
  { /*
820
809
  * Avoid useMultipleOriginColorsAndGradients and detectColors
@@ -880,6 +869,8 @@ function Navigation( {
880
869
  isHiddenByDefault={ isHiddenByDefault }
881
870
  overlayBackgroundColor={ overlayBackgroundColor }
882
871
  overlayTextColor={ overlayTextColor }
872
+ overlay={ overlay }
873
+ onNavigateToEntityRecord={ onNavigateToEntityRecord }
883
874
  >
884
875
  <UnsavedInnerBlocks
885
876
  createNavigationMenu={ createNavigationMenu }
@@ -1042,6 +1033,10 @@ function Navigation( {
1042
1033
  overlayBackgroundColor
1043
1034
  }
1044
1035
  overlayTextColor={ overlayTextColor }
1036
+ overlay={ overlay }
1037
+ onNavigateToEntityRecord={
1038
+ onNavigateToEntityRecord
1039
+ }
1045
1040
  >
1046
1041
  { isEntityAvailable && (
1047
1042
  <NavigationInnerBlocks
@@ -0,0 +1,82 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { Button, __experimentalVStack as VStack } from '@wordpress/components';
5
+ import { __ } from '@wordpress/i18n';
6
+ import { Icon, close } from '@wordpress/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import OverlayMenuIcon from './overlay-menu-icon';
12
+ import OverlayMenuPreviewControls from './overlay-menu-preview-controls';
13
+
14
+ /**
15
+ * Overlay Menu Preview Button component.
16
+ *
17
+ * @param {Object} props Component props.
18
+ * @param {boolean} props.isResponsive Whether overlay menu is responsive.
19
+ * @param {boolean} props.overlayMenuPreview Whether overlay menu preview is open.
20
+ * @param {Function} props.setOverlayMenuPreview Function to toggle overlay menu preview.
21
+ * @param {boolean} props.hasIcon Whether the overlay menu has an icon.
22
+ * @param {string} props.icon Icon type for overlay menu.
23
+ * @param {Function} props.setAttributes Function to update block attributes.
24
+ * @param {string} props.overlayMenuPreviewClasses CSS classes for overlay menu preview button.
25
+ * @param {string} props.overlayMenuPreviewId ID for overlay menu preview.
26
+ * @param {string} props.containerStyle Optional style for the preview container.
27
+ * @return {JSX.Element|null} The overlay menu preview button or null if not responsive.
28
+ */
29
+ export default function OverlayMenuPreviewButton( {
30
+ isResponsive,
31
+ overlayMenuPreview,
32
+ setOverlayMenuPreview,
33
+ hasIcon,
34
+ icon,
35
+ setAttributes,
36
+ overlayMenuPreviewClasses,
37
+ overlayMenuPreviewId,
38
+ containerStyle,
39
+ } ) {
40
+ if ( ! isResponsive ) {
41
+ return null;
42
+ }
43
+
44
+ return (
45
+ <>
46
+ <Button
47
+ __next40pxDefaultSize
48
+ className={ overlayMenuPreviewClasses }
49
+ onClick={ () => setOverlayMenuPreview( ! overlayMenuPreview ) }
50
+ aria-label={ __( 'Overlay menu controls' ) }
51
+ aria-controls={ overlayMenuPreviewId }
52
+ aria-expanded={ overlayMenuPreview }
53
+ >
54
+ { hasIcon && (
55
+ <>
56
+ <OverlayMenuIcon icon={ icon } />
57
+ <Icon icon={ close } />
58
+ </>
59
+ ) }
60
+ { ! hasIcon && (
61
+ <>
62
+ <span>{ __( 'Menu' ) }</span>
63
+ <span>{ __( 'Close' ) }</span>
64
+ </>
65
+ ) }
66
+ </Button>
67
+ { overlayMenuPreview && (
68
+ <VStack
69
+ id={ overlayMenuPreviewId }
70
+ spacing={ 4 }
71
+ style={ containerStyle }
72
+ >
73
+ <OverlayMenuPreviewControls
74
+ hasIcon={ hasIcon }
75
+ icon={ icon }
76
+ setAttributes={ setAttributes }
77
+ />
78
+ </VStack>
79
+ ) }
80
+ </>
81
+ );
82
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalVStack as VStack,
6
+ __experimentalToggleGroupControl as ToggleGroupControl,
7
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
8
+ ToggleControl,
9
+ } from '@wordpress/components';
10
+ import { __ } from '@wordpress/i18n';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import OverlayMenuIcon from './overlay-menu-icon';
16
+
17
+ /**
18
+ * Overlay Menu Preview Controls component.
19
+ * Used within PanelBody context (not ToolsPanel).
20
+ *
21
+ * @param {Object} props Component props.
22
+ * @param {boolean} props.hasIcon Whether the overlay menu has an icon.
23
+ * @param {string} props.icon Icon type for overlay menu.
24
+ * @param {Function} props.setAttributes Function to update block attributes.
25
+ * @return {JSX.Element} The overlay menu preview controls.
26
+ */
27
+ export default function OverlayMenuPreviewControls( {
28
+ hasIcon,
29
+ icon,
30
+ setAttributes,
31
+ } ) {
32
+ return (
33
+ <VStack spacing={ 4 }>
34
+ <ToggleControl
35
+ __nextHasNoMarginBottom
36
+ label={ __( 'Show icon button' ) }
37
+ help={ __(
38
+ 'Configure the visual appearance of the button that toggles the overlay menu.'
39
+ ) }
40
+ onChange={ ( value ) => setAttributes( { hasIcon: value } ) }
41
+ checked={ hasIcon }
42
+ />
43
+ <ToggleGroupControl
44
+ __next40pxDefaultSize
45
+ __nextHasNoMarginBottom
46
+ className="wp-block-navigation__overlay-menu-icon-toggle-group"
47
+ label={ __( 'Icon' ) }
48
+ value={ icon }
49
+ onChange={ ( value ) => setAttributes( { icon: value } ) }
50
+ isBlock
51
+ >
52
+ <ToggleGroupControlOption
53
+ value="handle"
54
+ aria-label={ __( 'handle' ) }
55
+ label={ <OverlayMenuIcon icon="handle" /> }
56
+ />
57
+ <ToggleGroupControlOption
58
+ value="menu"
59
+ aria-label={ __( 'menu' ) }
60
+ label={ <OverlayMenuIcon icon="menu" /> }
61
+ />
62
+ </ToggleGroupControl>
63
+ </VStack>
64
+ );
65
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ PanelBody,
6
+ __experimentalVStack as VStack,
7
+ } from '@wordpress/components';
8
+ import { __ } from '@wordpress/i18n';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import OverlayTemplatePartSelector from './overlay-template-part-selector';
14
+ import OverlayVisibilityControl from './overlay-visibility-control';
15
+ import OverlayMenuPreviewButton from './overlay-menu-preview-button';
16
+
17
+ /**
18
+ * Overlay Panel component for Navigation block.
19
+ *
20
+ * @param {Object} props Component props.
21
+ * @param {string} props.overlayMenu Overlay menu setting ('never', 'mobile', 'always').
22
+ * @param {string} props.overlay Currently selected overlay template part ID.
23
+ * @param {Function} props.setAttributes Function to update block attributes.
24
+ * @param {Function} props.onNavigateToEntityRecord Function to navigate to template part editor.
25
+ * @param {boolean} props.overlayMenuPreview Whether overlay menu preview is open.
26
+ * @param {Function} props.setOverlayMenuPreview Function to toggle overlay menu preview.
27
+ * @param {boolean} props.hasIcon Whether the overlay menu has an icon.
28
+ * @param {string} props.icon Icon type for overlay menu.
29
+ * @param {string} props.overlayMenuPreviewClasses CSS classes for overlay menu preview button.
30
+ * @param {string} props.overlayMenuPreviewId ID for overlay menu preview.
31
+ * @param {boolean} props.isResponsive Whether overlay menu is responsive.
32
+ * @return {JSX.Element|null} The overlay panel component or null if overlay is disabled.
33
+ */
34
+ export default function OverlayPanel( {
35
+ overlayMenu,
36
+ overlay,
37
+ setAttributes,
38
+ onNavigateToEntityRecord,
39
+ overlayMenuPreview,
40
+ setOverlayMenuPreview,
41
+ hasIcon,
42
+ icon,
43
+ overlayMenuPreviewClasses,
44
+ overlayMenuPreviewId,
45
+ isResponsive,
46
+ } ) {
47
+ return (
48
+ <PanelBody title={ __( 'Overlay' ) } initialOpen>
49
+ <VStack spacing={ 4 }>
50
+ <OverlayVisibilityControl
51
+ overlayMenu={ overlayMenu }
52
+ setAttributes={ setAttributes }
53
+ />
54
+
55
+ { overlayMenu !== 'never' && (
56
+ <OverlayMenuPreviewButton
57
+ isResponsive={ isResponsive }
58
+ overlayMenuPreview={ overlayMenuPreview }
59
+ setOverlayMenuPreview={ setOverlayMenuPreview }
60
+ hasIcon={ hasIcon }
61
+ icon={ icon }
62
+ setAttributes={ setAttributes }
63
+ overlayMenuPreviewClasses={ overlayMenuPreviewClasses }
64
+ overlayMenuPreviewId={ overlayMenuPreviewId }
65
+ />
66
+ ) }
67
+
68
+ { overlayMenu !== 'never' && (
69
+ <OverlayTemplatePartSelector
70
+ overlay={ overlay }
71
+ setAttributes={ setAttributes }
72
+ onNavigateToEntityRecord={ onNavigateToEntityRecord }
73
+ />
74
+ ) }
75
+ </VStack>
76
+ </PanelBody>
77
+ );
78
+ }