@wordpress/block-library 9.24.0 → 9.26.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 (300) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/avatar/edit.js +84 -39
  3. package/build/avatar/edit.js.map +1 -1
  4. package/build/avatar/user-control.js +32 -17
  5. package/build/avatar/user-control.js.map +1 -1
  6. package/build/button/edit.js +29 -17
  7. package/build/button/edit.js.map +1 -1
  8. package/build/columns/edit.js +18 -22
  9. package/build/columns/edit.js.map +1 -1
  10. package/build/comment-author-name/edit.js +41 -12
  11. package/build/comment-author-name/edit.js.map +1 -1
  12. package/build/comment-date/edit.js +41 -12
  13. package/build/comment-date/edit.js.map +1 -1
  14. package/build/comment-edit-link/edit.js +27 -7
  15. package/build/comment-edit-link/edit.js.map +1 -1
  16. package/build/comments/edit/comments-inspector-controls.js +1 -3
  17. package/build/comments/edit/comments-inspector-controls.js.map +1 -1
  18. package/build/comments-pagination/edit.js +23 -9
  19. package/build/comments-pagination/edit.js.map +1 -1
  20. package/build/comments-title/edit.js +41 -12
  21. package/build/comments-title/edit.js.map +1 -1
  22. package/build/details/edit.js +27 -3
  23. package/build/details/edit.js.map +1 -1
  24. package/build/embed/edit.js +2 -4
  25. package/build/embed/edit.js.map +1 -1
  26. package/build/embed/embed-controls.js +41 -22
  27. package/build/embed/embed-controls.js.map +1 -1
  28. package/build/embed/variations.js +0 -10
  29. package/build/embed/variations.js.map +1 -1
  30. package/build/file/inspector.js +73 -30
  31. package/build/file/inspector.js.map +1 -1
  32. package/build/form/edit.js +67 -38
  33. package/build/form/edit.js.map +1 -1
  34. package/build/form/index.js +3 -3
  35. package/build/form/index.js.map +1 -1
  36. package/build/form-input/edit.js +47 -18
  37. package/build/form-input/edit.js.map +1 -1
  38. package/build/form-input/index.js +2 -1
  39. package/build/form-input/index.js.map +1 -1
  40. package/build/form-submission-notification/index.js +2 -1
  41. package/build/form-submission-notification/index.js.map +1 -1
  42. package/build/form-submit-button/index.js +2 -1
  43. package/build/form-submit-button/index.js.map +1 -1
  44. package/build/image/image.js +1 -0
  45. package/build/image/image.js.map +1 -1
  46. package/build/image/view.js +0 -3
  47. package/build/image/view.js.map +1 -1
  48. package/build/latest-posts/edit.js +154 -82
  49. package/build/latest-posts/edit.js.map +1 -1
  50. package/build/list/ordered-list-settings.js +131 -52
  51. package/build/list/ordered-list-settings.js.map +1 -1
  52. package/build/navigation/edit/index.js +93 -51
  53. package/build/navigation/edit/index.js.map +1 -1
  54. package/build/navigation/edit/overlay-menu-preview.js +43 -27
  55. package/build/navigation/edit/overlay-menu-preview.js.map +1 -1
  56. package/build/navigation-link/edit.js +11 -0
  57. package/build/navigation-link/edit.js.map +1 -1
  58. package/build/navigation-link/index.js +3 -0
  59. package/build/navigation-link/index.js.map +1 -1
  60. package/build/navigation-link/transforms.js +2 -0
  61. package/build/navigation-link/transforms.js.map +1 -1
  62. package/build/navigation-link/update-attributes.js +1 -0
  63. package/build/navigation-link/update-attributes.js.map +1 -1
  64. package/build/navigation-submenu/index.js +3 -0
  65. package/build/navigation-submenu/index.js.map +1 -1
  66. package/build/post-author/edit.js +75 -18
  67. package/build/post-author/edit.js.map +1 -1
  68. package/build/post-comments-count/index.js +3 -1
  69. package/build/post-comments-count/index.js.map +1 -1
  70. package/build/post-comments-count/transforms.js +26 -0
  71. package/build/post-comments-count/transforms.js.map +1 -0
  72. package/build/post-comments-link/index.js +3 -1
  73. package/build/post-comments-link/index.js.map +1 -1
  74. package/build/post-comments-link/transforms.js +26 -0
  75. package/build/post-comments-link/transforms.js.map +1 -0
  76. package/build/post-navigation-link/edit.js +72 -33
  77. package/build/post-navigation-link/edit.js.map +1 -1
  78. package/build/post-title/edit.js +56 -18
  79. package/build/post-title/edit.js.map +1 -1
  80. package/build/query/edit/enhanced-pagination-modal.js +1 -1
  81. package/build/query/edit/enhanced-pagination-modal.js.map +1 -1
  82. package/build/query/edit/inspector-controls/enhanced-pagination-control.js +3 -6
  83. package/build/query/edit/inspector-controls/enhanced-pagination-control.js.map +1 -1
  84. package/build/rss/edit.js +120 -46
  85. package/build/rss/edit.js.map +1 -1
  86. package/build/separator/edit.js +52 -20
  87. package/build/separator/edit.js.map +1 -1
  88. package/build/shortcode/index.js +2 -1
  89. package/build/shortcode/index.js.map +1 -1
  90. package/build/site-logo/edit.js +53 -19
  91. package/build/site-logo/edit.js.map +1 -1
  92. package/build/social-link/edit.js +21 -5
  93. package/build/social-link/edit.js.map +1 -1
  94. package/build/social-link/edit.native.js +13 -5
  95. package/build/social-link/edit.native.js.map +1 -1
  96. package/build/social-link/social-list.js +17 -25
  97. package/build/social-link/social-list.js.map +1 -1
  98. package/build/social-link/variations.js +53 -48
  99. package/build/social-link/variations.js.map +1 -1
  100. package/build/social-links/edit.js +38 -45
  101. package/build/social-links/edit.js.map +1 -1
  102. package/build/video/tracks-editor.js +63 -21
  103. package/build/video/tracks-editor.js.map +1 -1
  104. package/build-module/avatar/edit.js +83 -38
  105. package/build-module/avatar/edit.js.map +1 -1
  106. package/build-module/avatar/user-control.js +33 -18
  107. package/build-module/avatar/user-control.js.map +1 -1
  108. package/build-module/button/edit.js +30 -18
  109. package/build-module/button/edit.js.map +1 -1
  110. package/build-module/columns/edit.js +18 -22
  111. package/build-module/columns/edit.js.map +1 -1
  112. package/build-module/comment-author-name/edit.js +42 -13
  113. package/build-module/comment-author-name/edit.js.map +1 -1
  114. package/build-module/comment-date/edit.js +42 -13
  115. package/build-module/comment-date/edit.js.map +1 -1
  116. package/build-module/comment-edit-link/edit.js +28 -8
  117. package/build-module/comment-edit-link/edit.js.map +1 -1
  118. package/build-module/comments/edit/comments-inspector-controls.js +1 -3
  119. package/build-module/comments/edit/comments-inspector-controls.js.map +1 -1
  120. package/build-module/comments-pagination/edit.js +24 -10
  121. package/build-module/comments-pagination/edit.js.map +1 -1
  122. package/build-module/comments-title/edit.js +42 -13
  123. package/build-module/comments-title/edit.js.map +1 -1
  124. package/build-module/details/edit.js +29 -5
  125. package/build-module/details/edit.js.map +1 -1
  126. package/build-module/embed/edit.js +2 -4
  127. package/build-module/embed/edit.js.map +1 -1
  128. package/build-module/embed/embed-controls.js +42 -23
  129. package/build-module/embed/embed-controls.js.map +1 -1
  130. package/build-module/embed/variations.js +0 -10
  131. package/build-module/embed/variations.js.map +1 -1
  132. package/build-module/file/inspector.js +74 -31
  133. package/build-module/file/inspector.js.map +1 -1
  134. package/build-module/form/edit.js +68 -39
  135. package/build-module/form/edit.js.map +1 -1
  136. package/build-module/form/index.js +3 -3
  137. package/build-module/form/index.js.map +1 -1
  138. package/build-module/form-input/edit.js +48 -19
  139. package/build-module/form-input/edit.js.map +1 -1
  140. package/build-module/form-input/index.js +2 -1
  141. package/build-module/form-input/index.js.map +1 -1
  142. package/build-module/form-submission-notification/index.js +2 -1
  143. package/build-module/form-submission-notification/index.js.map +1 -1
  144. package/build-module/form-submit-button/index.js +2 -1
  145. package/build-module/form-submit-button/index.js.map +1 -1
  146. package/build-module/image/image.js +1 -0
  147. package/build-module/image/image.js.map +1 -1
  148. package/build-module/image/view.js +0 -3
  149. package/build-module/image/view.js.map +1 -1
  150. package/build-module/latest-posts/edit.js +155 -83
  151. package/build-module/latest-posts/edit.js.map +1 -1
  152. package/build-module/list/ordered-list-settings.js +132 -53
  153. package/build-module/list/ordered-list-settings.js.map +1 -1
  154. package/build-module/navigation/edit/index.js +94 -52
  155. package/build-module/navigation/edit/index.js.map +1 -1
  156. package/build-module/navigation/edit/overlay-menu-preview.js +44 -28
  157. package/build-module/navigation/edit/overlay-menu-preview.js.map +1 -1
  158. package/build-module/navigation-link/edit.js +11 -0
  159. package/build-module/navigation-link/edit.js.map +1 -1
  160. package/build-module/navigation-link/index.js +3 -0
  161. package/build-module/navigation-link/index.js.map +1 -1
  162. package/build-module/navigation-link/transforms.js +2 -0
  163. package/build-module/navigation-link/transforms.js.map +1 -1
  164. package/build-module/navigation-link/update-attributes.js +1 -0
  165. package/build-module/navigation-link/update-attributes.js.map +1 -1
  166. package/build-module/navigation-submenu/index.js +3 -0
  167. package/build-module/navigation-submenu/index.js.map +1 -1
  168. package/build-module/post-author/edit.js +76 -19
  169. package/build-module/post-author/edit.js.map +1 -1
  170. package/build-module/post-comments-count/index.js +3 -1
  171. package/build-module/post-comments-count/index.js.map +1 -1
  172. package/build-module/post-comments-count/transforms.js +19 -0
  173. package/build-module/post-comments-count/transforms.js.map +1 -0
  174. package/build-module/post-comments-link/index.js +3 -1
  175. package/build-module/post-comments-link/index.js.map +1 -1
  176. package/build-module/post-comments-link/transforms.js +19 -0
  177. package/build-module/post-comments-link/transforms.js.map +1 -0
  178. package/build-module/post-navigation-link/edit.js +73 -34
  179. package/build-module/post-navigation-link/edit.js.map +1 -1
  180. package/build-module/post-title/edit.js +57 -19
  181. package/build-module/post-title/edit.js.map +1 -1
  182. package/build-module/query/edit/enhanced-pagination-modal.js +1 -1
  183. package/build-module/query/edit/enhanced-pagination-modal.js.map +1 -1
  184. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.js +3 -6
  185. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.js.map +1 -1
  186. package/build-module/rss/edit.js +121 -47
  187. package/build-module/rss/edit.js.map +1 -1
  188. package/build-module/separator/edit.js +54 -22
  189. package/build-module/separator/edit.js.map +1 -1
  190. package/build-module/shortcode/index.js +2 -1
  191. package/build-module/shortcode/index.js.map +1 -1
  192. package/build-module/site-logo/edit.js +54 -20
  193. package/build-module/site-logo/edit.js.map +1 -1
  194. package/build-module/social-link/edit.js +24 -8
  195. package/build-module/social-link/edit.js.map +1 -1
  196. package/build-module/social-link/edit.native.js +15 -6
  197. package/build-module/social-link/edit.native.js.map +1 -1
  198. package/build-module/social-link/social-list.js +16 -21
  199. package/build-module/social-link/social-list.js.map +1 -1
  200. package/build-module/social-link/variations.js +53 -48
  201. package/build-module/social-link/variations.js.map +1 -1
  202. package/build-module/social-links/edit.js +40 -47
  203. package/build-module/social-links/edit.js.map +1 -1
  204. package/build-module/video/tracks-editor.js +65 -23
  205. package/build-module/video/tracks-editor.js.map +1 -1
  206. package/build-style/calendar/style-rtl.css +7 -7
  207. package/build-style/calendar/style.css +7 -7
  208. package/build-style/comments-pagination/editor-rtl.css +0 -12
  209. package/build-style/comments-pagination/editor.css +0 -14
  210. package/build-style/comments-pagination/style-rtl.css +0 -7
  211. package/build-style/comments-pagination/style.css +0 -9
  212. package/build-style/editor-rtl.css +9 -21
  213. package/build-style/editor.css +9 -23
  214. package/build-style/gallery/style-rtl.css +1 -0
  215. package/build-style/gallery/style.css +1 -0
  216. package/build-style/navigation/editor-rtl.css +8 -3
  217. package/build-style/navigation/editor.css +8 -3
  218. package/build-style/navigation/style-rtl.css +4 -0
  219. package/build-style/navigation/style.css +4 -0
  220. package/build-style/pullquote/editor-rtl.css +1 -1
  221. package/build-style/pullquote/editor.css +1 -1
  222. package/build-style/pullquote/style-rtl.css +2 -3
  223. package/build-style/pullquote/style.css +2 -3
  224. package/build-style/pullquote/theme-rtl.css +2 -2
  225. package/build-style/pullquote/theme.css +2 -2
  226. package/build-style/style-rtl.css +14 -17
  227. package/build-style/style.css +14 -19
  228. package/build-style/theme-rtl.css +2 -2
  229. package/build-style/theme.css +2 -2
  230. package/package.json +35 -35
  231. package/src/avatar/edit.js +99 -51
  232. package/src/avatar/user-control.js +34 -29
  233. package/src/button/edit.js +44 -29
  234. package/src/calendar/style.scss +10 -10
  235. package/src/columns/edit.js +20 -31
  236. package/src/comment-author-name/edit.js +54 -13
  237. package/src/comment-date/edit.js +50 -15
  238. package/src/comment-edit-link/edit.js +39 -11
  239. package/src/comments/edit/comments-inspector-controls.js +0 -2
  240. package/src/comments-pagination/edit.js +29 -9
  241. package/src/comments-pagination/editor.scss +0 -15
  242. package/src/comments-pagination/style.scss +0 -8
  243. package/src/comments-title/edit.js +53 -15
  244. package/src/details/edit.js +36 -4
  245. package/src/editor.scss +0 -1
  246. package/src/embed/edit.js +3 -5
  247. package/src/embed/embed-controls.js +55 -33
  248. package/src/embed/variations.js +0 -8
  249. package/src/file/inspector.js +99 -45
  250. package/src/form/block.json +1 -2
  251. package/src/form/edit.js +91 -47
  252. package/src/form/index.js +1 -0
  253. package/src/form-input/edit.js +56 -18
  254. package/src/form-input/index.js +1 -0
  255. package/src/form-submission-notification/index.js +1 -0
  256. package/src/form-submit-button/index.js +1 -0
  257. package/src/gallery/style.scss +1 -0
  258. package/src/image/image.js +1 -0
  259. package/src/image/index.php +4 -1
  260. package/src/image/view.js +0 -3
  261. package/src/latest-posts/edit.js +206 -98
  262. package/src/list/ordered-list-settings.js +172 -62
  263. package/src/navigation/edit/index.js +127 -64
  264. package/src/navigation/edit/overlay-menu-preview.js +43 -26
  265. package/src/navigation/editor.scss +8 -4
  266. package/src/navigation/style.scss +8 -0
  267. package/src/navigation-link/block.json +3 -0
  268. package/src/navigation-link/edit.js +14 -1
  269. package/src/navigation-link/index.php +4 -0
  270. package/src/navigation-link/transforms.js +2 -1
  271. package/src/navigation-link/update-attributes.js +1 -0
  272. package/src/navigation-submenu/block.json +3 -0
  273. package/src/navigation-submenu/index.php +4 -0
  274. package/src/post-author/edit.js +91 -27
  275. package/src/post-comments-count/index.js +2 -0
  276. package/src/post-comments-count/transforms.js +20 -0
  277. package/src/post-comments-link/index.js +2 -0
  278. package/src/post-comments-link/transforms.js +20 -0
  279. package/src/post-navigation-link/edit.js +96 -51
  280. package/src/post-title/edit.js +76 -24
  281. package/src/pullquote/editor.scss +1 -1
  282. package/src/pullquote/style.scss +2 -3
  283. package/src/pullquote/theme.scss +2 -2
  284. package/src/query/edit/enhanced-pagination-modal.js +1 -5
  285. package/src/query/edit/inspector-controls/enhanced-pagination-control.js +3 -13
  286. package/src/rss/edit.js +141 -55
  287. package/src/separator/edit.js +66 -21
  288. package/src/shortcode/block.json +2 -1
  289. package/src/site-logo/edit.js +69 -26
  290. package/src/site-title/index.php +1 -1
  291. package/src/social-link/edit.js +18 -7
  292. package/src/social-link/edit.native.js +10 -4
  293. package/src/social-link/index.php +62 -49
  294. package/src/social-link/social-list.js +15 -20
  295. package/src/social-link/variations.js +53 -48
  296. package/src/social-links/edit.js +38 -60
  297. package/src/video/tracks-editor.js +75 -22
  298. package/build-style/post-author/editor-rtl.css +0 -140
  299. package/build-style/post-author/editor.css +0 -140
  300. package/src/post-author/editor.scss +0 -7
@@ -31,10 +31,12 @@ import { EntityProvider, store as coreStore } from '@wordpress/core-data';
31
31
 
32
32
  import { useDispatch, useSelect } from '@wordpress/data';
33
33
  import {
34
- PanelBody,
35
- ToggleControl,
34
+ __experimentalToolsPanel as ToolsPanel,
35
+ __experimentalToolsPanelItem as ToolsPanelItem,
36
36
  __experimentalToggleGroupControl as ToggleGroupControl,
37
37
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
38
+ __experimentalVStack as VStack,
39
+ ToggleControl,
38
40
  Button,
39
41
  Spinner,
40
42
  Notice,
@@ -72,6 +74,7 @@ import DeletedNavigationWarning from './deleted-navigation-warning';
72
74
  import AccessibleDescription from './accessible-description';
73
75
  import AccessibleMenuDescription from './accessible-menu-description';
74
76
  import { unlock } from '../../lock-unlock';
77
+ import { useToolsPanelDropdownMenuProps } from '../../utils/hooks';
75
78
 
76
79
  function ColorTools( {
77
80
  textColor,
@@ -591,11 +594,25 @@ function Navigation( {
591
594
  `overlay-menu-preview`
592
595
  );
593
596
 
597
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
598
+
594
599
  const stylingInspectorControls = (
595
600
  <>
596
601
  <InspectorControls>
597
602
  { hasSubmenuIndicatorSetting && (
598
- <PanelBody title={ __( 'Display' ) }>
603
+ <ToolsPanel
604
+ label={ __( 'Display' ) }
605
+ resetAll={ () => {
606
+ setAttributes( {
607
+ showSubmenuIcon: true,
608
+ openSubmenusOnClick: false,
609
+ overlayMenu: 'mobile',
610
+ hasIcon: true,
611
+ icon: 'handle',
612
+ } );
613
+ } }
614
+ dropdownMenuProps={ dropdownMenuProps }
615
+ >
599
616
  { isResponsive && (
600
617
  <>
601
618
  <Button
@@ -623,88 +640,134 @@ function Navigation( {
623
640
  </>
624
641
  ) }
625
642
  </Button>
626
- <div id={ overlayMenuPreviewId }>
627
- { overlayMenuPreview && (
643
+ { overlayMenuPreview && (
644
+ <VStack
645
+ id={ overlayMenuPreviewId }
646
+ spacing={ 4 }
647
+ style={ {
648
+ gridColumn: 'span 2',
649
+ } }
650
+ >
628
651
  <OverlayMenuPreview
629
652
  setAttributes={ setAttributes }
630
653
  hasIcon={ hasIcon }
631
654
  icon={ icon }
632
655
  hidden={ ! overlayMenuPreview }
633
656
  />
634
- ) }
635
- </div>
657
+ </VStack>
658
+ ) }
636
659
  </>
637
660
  ) }
638
- <ToggleGroupControl
639
- __next40pxDefaultSize
640
- __nextHasNoMarginBottom
661
+
662
+ <ToolsPanelItem
663
+ hasValue={ () => overlayMenu !== 'mobile' }
641
664
  label={ __( 'Overlay Menu' ) }
642
- aria-label={ __( 'Configure overlay menu' ) }
643
- value={ overlayMenu }
644
- help={ __(
645
- 'Collapses the navigation options in a menu icon opening an overlay.'
646
- ) }
647
- onChange={ ( value ) =>
648
- setAttributes( { overlayMenu: value } )
665
+ onDeselect={ () =>
666
+ setAttributes( { overlayMenu: 'mobile' } )
649
667
  }
650
- isBlock
668
+ isShownByDefault
651
669
  >
652
- <ToggleGroupControlOption
653
- value="never"
654
- label={ __( 'Off' ) }
655
- />
656
- <ToggleGroupControlOption
657
- value="mobile"
658
- label={ __( 'Mobile' ) }
659
- />
660
- <ToggleGroupControlOption
661
- value="always"
662
- label={ __( 'Always' ) }
663
- />
664
- </ToggleGroupControl>
670
+ <ToggleGroupControl
671
+ __next40pxDefaultSize
672
+ __nextHasNoMarginBottom
673
+ label={ __( 'Overlay Menu' ) }
674
+ aria-label={ __( 'Configure overlay menu' ) }
675
+ value={ overlayMenu }
676
+ help={ __(
677
+ 'Collapses the navigation options in a menu icon opening an overlay.'
678
+ ) }
679
+ onChange={ ( value ) =>
680
+ setAttributes( { overlayMenu: value } )
681
+ }
682
+ isBlock
683
+ >
684
+ <ToggleGroupControlOption
685
+ value="never"
686
+ label={ __( 'Off' ) }
687
+ />
688
+ <ToggleGroupControlOption
689
+ value="mobile"
690
+ label={ __( 'Mobile' ) }
691
+ />
692
+ <ToggleGroupControlOption
693
+ value="always"
694
+ label={ __( 'Always' ) }
695
+ />
696
+ </ToggleGroupControl>
697
+ </ToolsPanelItem>
698
+
665
699
  { hasSubmenus && (
666
700
  <>
667
- <h3>{ __( 'Submenus' ) }</h3>
668
- <ToggleControl
669
- __nextHasNoMarginBottom
670
- checked={ openSubmenusOnClick }
671
- onChange={ ( value ) => {
672
- setAttributes( {
673
- openSubmenusOnClick: value,
674
- ...( value && {
675
- showSubmenuIcon: true,
676
- } ), // Make sure arrows are shown when we toggle this on.
677
- } );
678
- } }
701
+ <h3 className="wp-block-navigation__submenu-header">
702
+ { __( 'Submenus' ) }
703
+ </h3>
704
+ <ToolsPanelItem
705
+ hasValue={ () => openSubmenusOnClick }
679
706
  label={ __( 'Open on click' ) }
680
- />
681
-
682
- <ToggleControl
683
- __nextHasNoMarginBottom
684
- checked={ showSubmenuIcon }
685
- onChange={ ( value ) => {
707
+ onDeselect={ () =>
686
708
  setAttributes( {
687
- showSubmenuIcon: value,
688
- } );
689
- } }
690
- disabled={ attributes.openSubmenusOnClick }
709
+ openSubmenusOnClick: false,
710
+ showSubmenuIcon: true,
711
+ } )
712
+ }
713
+ isShownByDefault
714
+ >
715
+ <ToggleControl
716
+ __nextHasNoMarginBottom
717
+ checked={ openSubmenusOnClick }
718
+ onChange={ ( value ) => {
719
+ setAttributes( {
720
+ openSubmenusOnClick: value,
721
+ ...( value && {
722
+ showSubmenuIcon: true,
723
+ } ), // Make sure arrows are shown when we toggle this on.
724
+ } );
725
+ } }
726
+ label={ __( 'Open on click' ) }
727
+ />
728
+ </ToolsPanelItem>
729
+
730
+ <ToolsPanelItem
731
+ hasValue={ () => ! showSubmenuIcon }
691
732
  label={ __( 'Show arrow' ) }
692
- />
733
+ onDeselect={ () =>
734
+ setAttributes( {
735
+ showSubmenuIcon: true,
736
+ } )
737
+ }
738
+ isDisabled={
739
+ attributes.openSubmenusOnClick
740
+ }
741
+ isShownByDefault
742
+ >
743
+ <ToggleControl
744
+ __nextHasNoMarginBottom
745
+ checked={ showSubmenuIcon }
746
+ onChange={ ( value ) => {
747
+ setAttributes( {
748
+ showSubmenuIcon: value,
749
+ } );
750
+ } }
751
+ disabled={
752
+ attributes.openSubmenusOnClick
753
+ }
754
+ label={ __( 'Show arrow' ) }
755
+ />
756
+ </ToolsPanelItem>
693
757
 
694
758
  { submenuAccessibilityNotice && (
695
- <div>
696
- <Notice
697
- spokenMessage={ null }
698
- status="warning"
699
- isDismissible={ false }
700
- >
701
- { submenuAccessibilityNotice }
702
- </Notice>
703
- </div>
759
+ <Notice
760
+ spokenMessage={ null }
761
+ status="warning"
762
+ isDismissible={ false }
763
+ className="wp-block-navigation__submenu-accessibility-notice"
764
+ >
765
+ { submenuAccessibilityNotice }
766
+ </Notice>
704
767
  ) }
705
768
  </>
706
769
  ) }
707
- </PanelBody>
770
+ </ToolsPanel>
708
771
  ) }
709
772
  </InspectorControls>
710
773
  <InspectorControls group="color">
@@ -5,6 +5,7 @@ import {
5
5
  ToggleControl,
6
6
  __experimentalToggleGroupControl as ToggleGroupControl,
7
7
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
8
+ __experimentalToolsPanelItem as ToolsPanelItem,
8
9
  } from '@wordpress/components';
9
10
  import { __ } from '@wordpress/i18n';
10
11
 
@@ -16,36 +17,52 @@ import OverlayMenuIcon from './overlay-menu-icon';
16
17
  export default function OverlayMenuPreview( { setAttributes, hasIcon, icon } ) {
17
18
  return (
18
19
  <>
19
- <ToggleControl
20
- __nextHasNoMarginBottom
20
+ <ToolsPanelItem
21
21
  label={ __( 'Show icon button' ) }
22
- help={ __(
23
- 'Configure the visual appearance of the button that toggles the overlay menu.'
24
- ) }
25
- onChange={ ( value ) => setAttributes( { hasIcon: value } ) }
26
- checked={ hasIcon }
27
- />
22
+ isShownByDefault
23
+ hasValue={ () => ! hasIcon }
24
+ onDeselect={ () => setAttributes( { hasIcon: true } ) }
25
+ >
26
+ <ToggleControl
27
+ __nextHasNoMarginBottom
28
+ label={ __( 'Show icon button' ) }
29
+ help={ __(
30
+ 'Configure the visual appearance of the button that toggles the overlay menu.'
31
+ ) }
32
+ onChange={ ( value ) =>
33
+ setAttributes( { hasIcon: value } )
34
+ }
35
+ checked={ hasIcon }
36
+ />
37
+ </ToolsPanelItem>
28
38
 
29
- <ToggleGroupControl
30
- __next40pxDefaultSize
31
- __nextHasNoMarginBottom
32
- className="wp-block-navigation__overlay-menu-icon-toggle-group"
39
+ <ToolsPanelItem
33
40
  label={ __( 'Icon' ) }
34
- value={ icon }
35
- onChange={ ( value ) => setAttributes( { icon: value } ) }
36
- isBlock
41
+ isShownByDefault
42
+ hasValue={ () => icon !== 'handle' }
43
+ onDeselect={ () => setAttributes( { icon: 'handle' } ) }
37
44
  >
38
- <ToggleGroupControlOption
39
- value="handle"
40
- aria-label={ __( 'handle' ) }
41
- label={ <OverlayMenuIcon icon="handle" /> }
42
- />
43
- <ToggleGroupControlOption
44
- value="menu"
45
- aria-label={ __( 'menu' ) }
46
- label={ <OverlayMenuIcon icon="menu" /> }
47
- />
48
- </ToggleGroupControl>
45
+ <ToggleGroupControl
46
+ __next40pxDefaultSize
47
+ __nextHasNoMarginBottom
48
+ className="wp-block-navigation__overlay-menu-icon-toggle-group"
49
+ label={ __( 'Icon' ) }
50
+ value={ icon }
51
+ onChange={ ( value ) => setAttributes( { icon: value } ) }
52
+ isBlock
53
+ >
54
+ <ToggleGroupControlOption
55
+ value="handle"
56
+ aria-label={ __( 'handle' ) }
57
+ label={ <OverlayMenuIcon icon="handle" /> }
58
+ />
59
+ <ToggleGroupControlOption
60
+ value="menu"
61
+ aria-label={ __( 'menu' ) }
62
+ label={ <OverlayMenuIcon icon="menu" /> }
63
+ />
64
+ </ToggleGroupControl>
65
+ </ToolsPanelItem>
49
66
  </>
50
67
  );
51
68
  }
@@ -569,7 +569,7 @@ body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-op
569
569
  // Ref - https://github.com/WordPress/gutenberg/pull/65075#discussion_r1746282734
570
570
  height: $grid-unit-40 * 2 !important;
571
571
 
572
- margin-bottom: $grid-unit-15;
572
+ grid-column: span 2;
573
573
 
574
574
  &.open {
575
575
  box-shadow: inset 0 0 0 $border-width $gray-200;
@@ -637,7 +637,11 @@ body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-op
637
637
  margin-left: 24px;
638
638
  }
639
639
 
640
- .wp-block-navigation__overlay-menu-icon-toggle-group {
641
- // Counteract the margin added by the block inspector.
642
- margin-bottom: $grid-unit-20;
640
+ .editor-sidebar__panel .wp-block-navigation__submenu-header {
641
+ margin-top: 0;
642
+ margin-bottom: 0;
643
+ }
644
+
645
+ .wp-block-navigation__submenu-accessibility-notice {
646
+ grid-column: span 2;
643
647
  }
@@ -310,6 +310,14 @@ button.wp-block-navigation-item__content {
310
310
 
311
311
  .wp-block-navigation-submenu__toggle {
312
312
  cursor: pointer;
313
+
314
+ // Rotate submenu icon when open.
315
+ &[aria-expanded="true"] {
316
+ + .wp-block-navigation__submenu-icon > svg,
317
+ > svg {
318
+ transform: rotate(180deg);
319
+ }
320
+ }
313
321
  }
314
322
 
315
323
  // When set to open on click, a button element is used.
@@ -35,6 +35,9 @@
35
35
  "url": {
36
36
  "type": "string"
37
37
  },
38
+ "title": {
39
+ "type": "string"
40
+ },
38
41
  "kind": {
39
42
  "type": "string"
40
43
  },
@@ -42,6 +42,7 @@ import { useMergeRefs, usePrevious } from '@wordpress/compose';
42
42
  import { LinkUI } from './link-ui';
43
43
  import { updateAttributes } from './update-attributes';
44
44
  import { getColors } from '../navigation/edit/utils';
45
+ import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
45
46
 
46
47
  const DEFAULT_BLOCK = { name: 'core/navigation-link' };
47
48
  const NESTING_BLOCK_NAMES = [
@@ -175,8 +176,20 @@ function getMissingText( type ) {
175
176
  */
176
177
  function Controls( { attributes, setAttributes, setIsLabelFieldFocused } ) {
177
178
  const { label, url, description, rel } = attributes;
179
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
178
180
  return (
179
- <ToolsPanel label={ __( 'Settings' ) }>
181
+ <ToolsPanel
182
+ label={ __( 'Settings' ) }
183
+ resetAll={ () => {
184
+ setAttributes( {
185
+ label: '',
186
+ url: '',
187
+ description: '',
188
+ rel: '',
189
+ } );
190
+ } }
191
+ dropdownMenuProps={ dropdownMenuProps }
192
+ >
180
193
  <ToolsPanelItem
181
194
  hasValue={ () => !! label }
182
195
  label={ __( 'Text' ) }
@@ -249,6 +249,10 @@ function render_block_core_navigation_link( $attributes, $content, $block ) {
249
249
  $html .= ' rel="nofollow"';
250
250
  }
251
251
 
252
+ if ( isset( $attributes['title'] ) ) {
253
+ $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
254
+ }
255
+
252
256
  // End appending HTML attributes to anchor tag.
253
257
 
254
258
  // Start anchor tag content.
@@ -115,12 +115,13 @@ const transforms = {
115
115
  {
116
116
  type: 'block',
117
117
  blocks: [ 'core/buttons' ],
118
- transform: ( { label, url, rel, opensInNewTab } ) => {
118
+ transform: ( { label, url, rel, title, opensInNewTab } ) => {
119
119
  return createBlock( 'core/buttons', {}, [
120
120
  createBlock( 'core/button', {
121
121
  text: label,
122
122
  url,
123
123
  rel,
124
+ title,
124
125
  linkTarget: opensInNewTab ? '_blank' : undefined,
125
126
  } ),
126
127
  ] );
@@ -19,6 +19,7 @@ import { safeDecodeURI } from '@wordpress/url';
19
19
  * @property {number} [id] A post or term id.
20
20
  * @property {boolean} [opensInNewTab] Sets link target to _blank when true.
21
21
  * @property {string} [url] Link href.
22
+ * @property {string} [title] Link title attribute.
22
23
  */
23
24
  /**
24
25
  * Link Control onChange handler that updates block attributes when a setting is changed.
@@ -30,6 +30,9 @@
30
30
  "url": {
31
31
  "type": "string"
32
32
  },
33
+ "title": {
34
+ "type": "string"
35
+ },
33
36
  "kind": {
34
37
  "type": "string"
35
38
  },
@@ -169,6 +169,10 @@ function render_block_core_navigation_submenu( $attributes, $content, $block ) {
169
169
  $html .= ' rel="nofollow"';
170
170
  }
171
171
 
172
+ if ( isset( $attributes['title'] ) ) {
173
+ $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
174
+ }
175
+
172
176
  $html .= '>';
173
177
  // End appending HTML attributes to anchor tag.
174
178
 
@@ -15,15 +15,20 @@ import {
15
15
  } from '@wordpress/block-editor';
16
16
  import {
17
17
  ComboboxControl,
18
- PanelBody,
19
18
  SelectControl,
20
19
  ToggleControl,
21
- __experimentalVStack as VStack,
20
+ __experimentalToolsPanel as ToolsPanel,
21
+ __experimentalToolsPanelItem as ToolsPanelItem,
22
22
  } from '@wordpress/components';
23
23
  import { useSelect, useDispatch } from '@wordpress/data';
24
24
  import { __, sprintf } from '@wordpress/i18n';
25
25
  import { store as coreStore } from '@wordpress/core-data';
26
26
 
27
+ /**
28
+ * Internal dependencies
29
+ */
30
+ import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
31
+
27
32
  const minimumUsersForCombobox = 25;
28
33
 
29
34
  const AUTHORS_QUERY = {
@@ -38,6 +43,8 @@ function PostAuthorEdit( {
38
43
  setAttributes,
39
44
  } ) {
40
45
  const isDescendentOfQueryLoop = Number.isFinite( queryId );
46
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
47
+
41
48
  const { authorId, authorDetails, authors, supportsAuthor } = useSelect(
42
49
  ( select ) => {
43
50
  const { getEditedEntityRecord, getUser, getUsers, getPostType } =
@@ -61,8 +68,15 @@ function PostAuthorEdit( {
61
68
 
62
69
  const { editEntityRecord } = useDispatch( coreStore );
63
70
 
64
- const { textAlign, showAvatar, showBio, byline, isLink, linkTarget } =
65
- attributes;
71
+ const {
72
+ textAlign,
73
+ showAvatar,
74
+ showBio,
75
+ byline,
76
+ isLink,
77
+ linkTarget,
78
+ avatarSize,
79
+ } = attributes;
66
80
  const avatarSizes = [];
67
81
  const authorName = authorDetails?.name || __( 'Post Author' );
68
82
  if ( authorDetails?.avatar_urls ) {
@@ -114,13 +128,21 @@ function PostAuthorEdit( {
114
128
  return (
115
129
  <>
116
130
  <InspectorControls>
117
- <PanelBody title={ __( 'Settings' ) }>
118
- <VStack
119
- spacing={ 4 }
120
- className="wp-block-post-author__inspector-settings"
121
- >
122
- { showAuthorControl &&
123
- ( ( showCombobox && (
131
+ <ToolsPanel
132
+ label={ __( 'Settings' ) }
133
+ resetAll={ () => {
134
+ setAttributes( {
135
+ avatarSize: 48,
136
+ showAvatar: true,
137
+ isLink: false,
138
+ linkTarget: '_self',
139
+ } );
140
+ } }
141
+ dropdownMenuProps={ dropdownMenuProps }
142
+ >
143
+ { showAuthorControl && (
144
+ <div style={ { gridColumn: '1 / -1' } }>
145
+ { ( showCombobox && (
124
146
  <ComboboxControl
125
147
  __next40pxDefaultSize
126
148
  __nextHasNoMarginBottom
@@ -139,21 +161,42 @@ function PostAuthorEdit( {
139
161
  options={ authorOptions }
140
162
  onChange={ handleSelect }
141
163
  />
142
- ) ) }
164
+ ) }
165
+ </div>
166
+ ) }
167
+ <ToolsPanelItem
168
+ label={ __( 'Show avatar' ) }
169
+ isShownByDefault
170
+ hasValue={ () => ! showAvatar }
171
+ onDeselect={ () =>
172
+ setAttributes( { showAvatar: true } )
173
+ }
174
+ >
143
175
  <ToggleControl
144
176
  __nextHasNoMarginBottom
145
177
  label={ __( 'Show avatar' ) }
146
178
  checked={ showAvatar }
147
179
  onChange={ () =>
148
- setAttributes( { showAvatar: ! showAvatar } )
180
+ setAttributes( {
181
+ showAvatar: ! showAvatar,
182
+ } )
149
183
  }
150
184
  />
151
- { showAvatar && (
185
+ </ToolsPanelItem>
186
+ { showAvatar && (
187
+ <ToolsPanelItem
188
+ label={ __( 'Avatar size' ) }
189
+ isShownByDefault
190
+ hasValue={ () => avatarSize !== 48 }
191
+ onDeselect={ () =>
192
+ setAttributes( { avatarSize: 48 } )
193
+ }
194
+ >
152
195
  <SelectControl
153
196
  __next40pxDefaultSize
154
197
  __nextHasNoMarginBottom
155
198
  label={ __( 'Avatar size' ) }
156
- value={ attributes.avatarSize }
199
+ value={ avatarSize }
157
200
  options={ avatarSizes }
158
201
  onChange={ ( size ) => {
159
202
  setAttributes( {
@@ -161,15 +204,31 @@ function PostAuthorEdit( {
161
204
  } );
162
205
  } }
163
206
  />
164
- ) }
207
+ </ToolsPanelItem>
208
+ ) }
209
+ <ToolsPanelItem
210
+ label={ __( 'Show bio' ) }
211
+ isShownByDefault
212
+ hasValue={ () => !! showBio }
213
+ onDeselect={ () =>
214
+ setAttributes( { showBio: undefined } )
215
+ }
216
+ >
165
217
  <ToggleControl
166
218
  __nextHasNoMarginBottom
167
219
  label={ __( 'Show bio' ) }
168
- checked={ showBio }
220
+ checked={ !! showBio }
169
221
  onChange={ () =>
170
222
  setAttributes( { showBio: ! showBio } )
171
223
  }
172
224
  />
225
+ </ToolsPanelItem>
226
+ <ToolsPanelItem
227
+ label={ __( 'Link author name to author page' ) }
228
+ isShownByDefault
229
+ hasValue={ () => !! isLink }
230
+ onDeselect={ () => setAttributes( { isLink: false } ) }
231
+ >
173
232
  <ToggleControl
174
233
  __nextHasNoMarginBottom
175
234
  label={ __( 'Link author name to author page' ) }
@@ -178,7 +237,16 @@ function PostAuthorEdit( {
178
237
  setAttributes( { isLink: ! isLink } )
179
238
  }
180
239
  />
181
- { isLink && (
240
+ </ToolsPanelItem>
241
+ { isLink && (
242
+ <ToolsPanelItem
243
+ label={ __( 'Link target' ) }
244
+ isShownByDefault
245
+ hasValue={ () => linkTarget !== '_self' }
246
+ onDeselect={ () =>
247
+ setAttributes( { linkTarget: '_self' } )
248
+ }
249
+ >
182
250
  <ToggleControl
183
251
  __nextHasNoMarginBottom
184
252
  label={ __( 'Open in new tab' ) }
@@ -189,9 +257,9 @@ function PostAuthorEdit( {
189
257
  }
190
258
  checked={ linkTarget === '_blank' }
191
259
  />
192
- ) }
193
- </VStack>
194
- </PanelBody>
260
+ </ToolsPanelItem>
261
+ ) }
262
+ </ToolsPanel>
195
263
  </InspectorControls>
196
264
 
197
265
  <BlockControls group="block">
@@ -207,12 +275,8 @@ function PostAuthorEdit( {
207
275
  { showAvatar && authorDetails?.avatar_urls && (
208
276
  <div className="wp-block-post-author__avatar">
209
277
  <img
210
- width={ attributes.avatarSize }
211
- src={
212
- authorDetails.avatar_urls[
213
- attributes.avatarSize
214
- ]
215
- }
278
+ width={ avatarSize }
279
+ src={ authorDetails.avatar_urls[ avatarSize ] }
216
280
  alt={ authorDetails.name }
217
281
  />
218
282
  </div>