@wordpress/edit-site 4.7.0 → 4.10.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 (248) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/add-new-template/add-custom-generic-template-modal.js +84 -0
  3. package/build/components/add-new-template/add-custom-generic-template-modal.js.map +1 -0
  4. package/build/components/add-new-template/add-custom-template-modal.js +224 -0
  5. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -0
  6. package/build/components/add-new-template/new-template.js +94 -33
  7. package/build/components/add-new-template/new-template.js.map +1 -1
  8. package/build/components/add-new-template/utils.js +405 -0
  9. package/build/components/add-new-template/utils.js.map +1 -0
  10. package/build/components/block-editor/block-inspector-button.js.map +1 -1
  11. package/build/components/block-editor/index.js.map +1 -1
  12. package/build/components/code-editor/index.js +17 -4
  13. package/build/components/code-editor/index.js.map +1 -1
  14. package/build/components/edit-template-part-menu-button/index.js.map +1 -1
  15. package/build/components/editor/index.js +16 -0
  16. package/build/components/editor/index.js.map +1 -1
  17. package/build/components/error-boundary/index.js +6 -0
  18. package/build/components/error-boundary/index.js.map +1 -1
  19. package/build/components/global-styles/context-menu.js +6 -3
  20. package/build/components/global-styles/context-menu.js.map +1 -1
  21. package/build/components/global-styles/dimensions-panel.js +2 -6
  22. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  23. package/build/components/global-styles/global-styles-provider.js +4 -2
  24. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  25. package/build/components/global-styles/gradients-palette-panel.js +3 -7
  26. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  27. package/build/components/global-styles/hooks.js +11 -2
  28. package/build/components/global-styles/hooks.js.map +1 -1
  29. package/build/components/global-styles/palette.js +2 -1
  30. package/build/components/global-styles/palette.js.map +1 -1
  31. package/build/components/global-styles/screen-block-list.js +4 -1
  32. package/build/components/global-styles/screen-block-list.js.map +1 -1
  33. package/build/components/global-styles/screen-button-color.js +80 -0
  34. package/build/components/global-styles/screen-button-color.js.map +1 -0
  35. package/build/components/global-styles/screen-color-palette.js +13 -17
  36. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  37. package/build/components/global-styles/screen-colors.js +56 -8
  38. package/build/components/global-styles/screen-colors.js.map +1 -1
  39. package/build/components/global-styles/screen-link-color.js +48 -14
  40. package/build/components/global-styles/screen-link-color.js.map +1 -1
  41. package/build/components/global-styles/screen-root.js +4 -2
  42. package/build/components/global-styles/screen-root.js.map +1 -1
  43. package/build/components/global-styles/screen-style-variations.js +9 -1
  44. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  45. package/build/components/global-styles/screen-typography-element.js +4 -0
  46. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  47. package/build/components/global-styles/screen-typography.js +9 -1
  48. package/build/components/global-styles/screen-typography.js.map +1 -1
  49. package/build/components/global-styles/ui.js +11 -0
  50. package/build/components/global-styles/ui.js.map +1 -1
  51. package/build/components/global-styles/use-global-styles-output.js +199 -30
  52. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  53. package/build/components/global-styles/utils.js +4 -2
  54. package/build/components/global-styles/utils.js.map +1 -1
  55. package/build/components/header/index.js +28 -10
  56. package/build/components/header/index.js.map +1 -1
  57. package/build/components/header/mode-switcher/index.js.map +1 -1
  58. package/build/components/header/more-menu/copy-content-menu-item.js +1 -1
  59. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  60. package/build/components/header/more-menu/site-export.js +4 -1
  61. package/build/components/header/more-menu/site-export.js.map +1 -1
  62. package/build/components/header/undo-redo/redo.js +13 -4
  63. package/build/components/header/undo-redo/redo.js.map +1 -1
  64. package/build/components/header/undo-redo/undo.js +13 -4
  65. package/build/components/header/undo-redo/undo.js.map +1 -1
  66. package/build/components/keyboard-shortcut-help-modal/config.js +17 -0
  67. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  68. package/build/components/keyboard-shortcut-help-modal/index.js +1 -3
  69. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  70. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  71. package/build/components/list/actions/index.js.map +1 -1
  72. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  73. package/build/components/list/added-by.js.map +1 -1
  74. package/build/components/navigation-sidebar/index.js.map +1 -1
  75. package/build/components/save-button/index.js.map +1 -1
  76. package/build/components/sidebar/index.js.map +1 -1
  77. package/build/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  78. package/build/components/sidebar/template-card/index.js +19 -7
  79. package/build/components/sidebar/template-card/index.js.map +1 -1
  80. package/build/components/sidebar/template-card/template-actions.js +64 -0
  81. package/build/components/sidebar/template-card/template-actions.js.map +1 -0
  82. package/build/components/sidebar/template-card/template-areas.js.map +1 -1
  83. package/build/components/template-details/edit-template-title.js +11 -3
  84. package/build/components/template-details/edit-template-title.js.map +1 -1
  85. package/build/components/template-details/index.js +1 -20
  86. package/build/components/template-details/index.js.map +1 -1
  87. package/build/components/template-details/template-areas.js.map +1 -1
  88. package/build/components/template-part-converter/index.js.map +1 -1
  89. package/build/components/url-query-controller/index.js.map +1 -1
  90. package/build/store/actions.js.map +1 -1
  91. package/build/store/selectors.js +4 -1
  92. package/build/store/selectors.js.map +1 -1
  93. package/build-module/components/add-new-template/add-custom-generic-template-modal.js +77 -0
  94. package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +1 -0
  95. package/build-module/components/add-new-template/add-custom-template-modal.js +209 -0
  96. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -0
  97. package/build-module/components/add-new-template/new-template.js +93 -34
  98. package/build-module/components/add-new-template/new-template.js.map +1 -1
  99. package/build-module/components/add-new-template/utils.js +365 -0
  100. package/build-module/components/add-new-template/utils.js.map +1 -0
  101. package/build-module/components/block-editor/block-inspector-button.js.map +1 -1
  102. package/build-module/components/block-editor/index.js.map +1 -1
  103. package/build-module/components/code-editor/index.js +18 -5
  104. package/build-module/components/code-editor/index.js.map +1 -1
  105. package/build-module/components/edit-template-part-menu-button/index.js.map +1 -1
  106. package/build-module/components/editor/index.js +16 -0
  107. package/build-module/components/editor/index.js.map +1 -1
  108. package/build-module/components/error-boundary/index.js +5 -0
  109. package/build-module/components/error-boundary/index.js.map +1 -1
  110. package/build-module/components/global-styles/context-menu.js +6 -3
  111. package/build-module/components/global-styles/context-menu.js.map +1 -1
  112. package/build-module/components/global-styles/dimensions-panel.js +2 -6
  113. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  114. package/build-module/components/global-styles/global-styles-provider.js +4 -2
  115. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  116. package/build-module/components/global-styles/gradients-palette-panel.js +3 -5
  117. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  118. package/build-module/components/global-styles/hooks.js +11 -2
  119. package/build-module/components/global-styles/hooks.js.map +1 -1
  120. package/build-module/components/global-styles/palette.js +2 -1
  121. package/build-module/components/global-styles/palette.js.map +1 -1
  122. package/build-module/components/global-styles/screen-block-list.js +4 -1
  123. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  124. package/build-module/components/global-styles/screen-button-color.js +67 -0
  125. package/build-module/components/global-styles/screen-button-color.js.map +1 -0
  126. package/build-module/components/global-styles/screen-color-palette.js +14 -19
  127. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  128. package/build-module/components/global-styles/screen-colors.js +57 -9
  129. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  130. package/build-module/components/global-styles/screen-link-color.js +47 -14
  131. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  132. package/build-module/components/global-styles/screen-root.js +4 -2
  133. package/build-module/components/global-styles/screen-root.js.map +1 -1
  134. package/build-module/components/global-styles/screen-style-variations.js +9 -1
  135. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  136. package/build-module/components/global-styles/screen-typography-element.js +4 -0
  137. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  138. package/build-module/components/global-styles/screen-typography.js +10 -2
  139. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  140. package/build-module/components/global-styles/ui.js +10 -0
  141. package/build-module/components/global-styles/ui.js.map +1 -1
  142. package/build-module/components/global-styles/use-global-styles-output.js +198 -32
  143. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  144. package/build-module/components/global-styles/utils.js +5 -3
  145. package/build-module/components/global-styles/utils.js.map +1 -1
  146. package/build-module/components/header/index.js +29 -11
  147. package/build-module/components/header/index.js.map +1 -1
  148. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  149. package/build-module/components/header/more-menu/copy-content-menu-item.js +1 -1
  150. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -1
  151. package/build-module/components/header/more-menu/site-export.js +4 -1
  152. package/build-module/components/header/more-menu/site-export.js.map +1 -1
  153. package/build-module/components/header/undo-redo/redo.js +9 -3
  154. package/build-module/components/header/undo-redo/redo.js.map +1 -1
  155. package/build-module/components/header/undo-redo/undo.js +9 -3
  156. package/build-module/components/header/undo-redo/undo.js.map +1 -1
  157. package/build-module/components/keyboard-shortcut-help-modal/config.js +17 -0
  158. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  159. package/build-module/components/keyboard-shortcut-help-modal/index.js +1 -2
  160. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  161. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  162. package/build-module/components/list/actions/index.js.map +1 -1
  163. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  164. package/build-module/components/list/added-by.js.map +1 -1
  165. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  166. package/build-module/components/save-button/index.js.map +1 -1
  167. package/build-module/components/sidebar/index.js.map +1 -1
  168. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +1 -1
  169. package/build-module/components/sidebar/template-card/index.js +18 -7
  170. package/build-module/components/sidebar/template-card/index.js.map +1 -1
  171. package/build-module/components/sidebar/template-card/template-actions.js +49 -0
  172. package/build-module/components/sidebar/template-card/template-actions.js.map +1 -0
  173. package/build-module/components/sidebar/template-card/template-areas.js.map +1 -1
  174. package/build-module/components/template-details/edit-template-title.js +12 -3
  175. package/build-module/components/template-details/edit-template-title.js.map +1 -1
  176. package/build-module/components/template-details/index.js +2 -21
  177. package/build-module/components/template-details/index.js.map +1 -1
  178. package/build-module/components/template-details/template-areas.js.map +1 -1
  179. package/build-module/components/template-part-converter/index.js.map +1 -1
  180. package/build-module/components/url-query-controller/index.js.map +1 -1
  181. package/build-module/store/actions.js.map +1 -1
  182. package/build-module/store/selectors.js +5 -2
  183. package/build-module/store/selectors.js.map +1 -1
  184. package/build-style/style-rtl.css +188 -42
  185. package/build-style/style.css +188 -42
  186. package/package.json +29 -29
  187. package/src/components/add-new-template/add-custom-generic-template-modal.js +97 -0
  188. package/src/components/add-new-template/add-custom-template-modal.js +265 -0
  189. package/src/components/add-new-template/new-template.js +194 -70
  190. package/src/components/add-new-template/style.scss +137 -0
  191. package/src/components/add-new-template/utils.js +369 -0
  192. package/src/components/block-editor/block-inspector-button.js +2 -3
  193. package/src/components/block-editor/index.js +4 -9
  194. package/src/components/code-editor/index.js +15 -5
  195. package/src/components/edit-template-part-menu-button/index.js +2 -3
  196. package/src/components/editor/index.js +15 -5
  197. package/src/components/error-boundary/index.js +5 -0
  198. package/src/components/global-styles/context-menu.js +3 -0
  199. package/src/components/global-styles/dimensions-panel.js +2 -7
  200. package/src/components/global-styles/global-styles-provider.js +12 -17
  201. package/src/components/global-styles/gradients-palette-panel.js +2 -5
  202. package/src/components/global-styles/hooks.js +20 -3
  203. package/src/components/global-styles/palette.js +4 -1
  204. package/src/components/global-styles/screen-block-list.js +14 -5
  205. package/src/components/global-styles/screen-button-color.js +102 -0
  206. package/src/components/global-styles/screen-color-palette.js +25 -27
  207. package/src/components/global-styles/screen-colors.js +58 -7
  208. package/src/components/global-styles/screen-link-color.js +65 -23
  209. package/src/components/global-styles/screen-root.js +12 -5
  210. package/src/components/global-styles/screen-style-variations.js +10 -4
  211. package/src/components/global-styles/screen-typography-element.js +4 -0
  212. package/src/components/global-styles/screen-typography.js +17 -2
  213. package/src/components/global-styles/style.scss +14 -8
  214. package/src/components/global-styles/test/use-global-styles-output.js +250 -16
  215. package/src/components/global-styles/ui.js +13 -0
  216. package/src/components/global-styles/use-global-styles-output.js +246 -32
  217. package/src/components/global-styles/utils.js +5 -2
  218. package/src/components/header/index.js +38 -13
  219. package/src/components/header/mode-switcher/index.js +4 -4
  220. package/src/components/header/more-menu/copy-content-menu-item.js +3 -4
  221. package/src/components/header/more-menu/site-export.js +5 -3
  222. package/src/components/header/style.scss +53 -5
  223. package/src/components/header/undo-redo/redo.js +6 -1
  224. package/src/components/header/undo-redo/undo.js +6 -1
  225. package/src/components/keyboard-shortcut-help-modal/config.js +12 -0
  226. package/src/components/keyboard-shortcut-help-modal/index.js +1 -2
  227. package/src/components/keyboard-shortcut-help-modal/style.scss +0 -5
  228. package/src/components/keyboard-shortcuts/index.js +6 -10
  229. package/src/components/list/actions/index.js +2 -3
  230. package/src/components/list/actions/rename-menu-item.js +4 -6
  231. package/src/components/list/added-by.js +4 -3
  232. package/src/components/list/style.scss +0 -8
  233. package/src/components/navigation-sidebar/index.js +2 -4
  234. package/src/components/save-button/index.js +2 -4
  235. package/src/components/sidebar/index.js +6 -6
  236. package/src/components/sidebar/navigation-menu-sidebar/navigation-inspector.js +6 -9
  237. package/src/components/sidebar/template-card/index.js +17 -9
  238. package/src/components/sidebar/template-card/style.scss +49 -35
  239. package/src/components/sidebar/template-card/template-actions.js +43 -0
  240. package/src/components/sidebar/template-card/template-areas.js +6 -6
  241. package/src/components/template-details/edit-template-title.js +10 -2
  242. package/src/components/template-details/index.js +4 -21
  243. package/src/components/template-details/template-areas.js +6 -6
  244. package/src/components/template-part-converter/index.js +2 -3
  245. package/src/components/test/error-boundary.js +38 -0
  246. package/src/components/url-query-controller/index.js +2 -3
  247. package/src/store/actions.js +257 -233
  248. package/src/store/selectors.js +19 -14
@@ -40,10 +40,10 @@ function useSortedBlockTypes() {
40
40
  type.push( block );
41
41
  return blocks;
42
42
  };
43
- const {
44
- core: coreItems,
45
- noncore: nonCoreItems,
46
- } = blockItems.reduce( groupByType, { core: [], noncore: [] } );
43
+ const { core: coreItems, noncore: nonCoreItems } = blockItems.reduce(
44
+ groupByType,
45
+ { core: [], noncore: [] }
46
+ );
47
47
  return [ ...coreItems, ...nonCoreItems ];
48
48
  }
49
49
 
@@ -60,8 +60,17 @@ function BlockMenuItem( { block } ) {
60
60
  return null;
61
61
  }
62
62
 
63
+ const navigationButtonLabel = sprintf(
64
+ // translators: %s: is the name of a block e.g., 'Image' or 'Table'.
65
+ __( '%s block styles' ),
66
+ block.title
67
+ );
68
+
63
69
  return (
64
- <NavigationButtonAsItem path={ '/blocks/' + block.name }>
70
+ <NavigationButtonAsItem
71
+ path={ '/blocks/' + block.name }
72
+ aria-label={ navigationButtonLabel }
73
+ >
65
74
  <HStack justify="flex-start">
66
75
  <BlockIcon icon={ block.icon } />
67
76
  <FlexItem>{ block.title }</FlexItem>
@@ -0,0 +1,102 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { __experimentalColorGradientControl as ColorGradientControl } from '@wordpress/block-editor';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import ScreenHeader from './header';
11
+ import {
12
+ getSupportedGlobalStylesPanels,
13
+ useSetting,
14
+ useStyle,
15
+ useColorsPerOrigin,
16
+ } from './hooks';
17
+
18
+ function ScreenButtonColor( { name } ) {
19
+ const supports = getSupportedGlobalStylesPanels( name );
20
+ const [ solids ] = useSetting( 'color.palette', name );
21
+ const [ areCustomSolidsEnabled ] = useSetting( 'color.custom', name );
22
+
23
+ const colorsPerOrigin = useColorsPerOrigin( name );
24
+
25
+ const [ isBackgroundEnabled ] = useSetting( 'color.background', name );
26
+
27
+ const hasButtonColor =
28
+ supports.includes( 'buttonColor' ) &&
29
+ isBackgroundEnabled &&
30
+ ( solids.length > 0 || areCustomSolidsEnabled );
31
+
32
+ const [ buttonTextColor, setButtonTextColor ] = useStyle(
33
+ 'elements.button.color.text',
34
+ name
35
+ );
36
+ const [ userButtonTextColor ] = useStyle(
37
+ 'elements.button.color.text',
38
+ name,
39
+ 'user'
40
+ );
41
+
42
+ const [ buttonBgColor, setButtonBgColor ] = useStyle(
43
+ 'elements.button.color.background',
44
+ name
45
+ );
46
+ const [ userButtonBgColor ] = useStyle(
47
+ 'elements.button.color.background',
48
+ name,
49
+ 'user'
50
+ );
51
+
52
+ if ( ! hasButtonColor ) {
53
+ return null;
54
+ }
55
+
56
+ return (
57
+ <>
58
+ <ScreenHeader
59
+ title={ __( 'Buttons' ) }
60
+ description={ __(
61
+ 'Set the default colors used for buttons across the site.'
62
+ ) }
63
+ />
64
+
65
+ <h4 className="edit-site-global-styles-section-title">
66
+ { __( 'Text color' ) }
67
+ </h4>
68
+
69
+ <ColorGradientControl
70
+ className="edit-site-screen-button-color__control"
71
+ colors={ colorsPerOrigin }
72
+ disableCustomColors={ ! areCustomSolidsEnabled }
73
+ __experimentalHasMultipleOrigins
74
+ showTitle={ false }
75
+ enableAlpha
76
+ __experimentalIsRenderedInSidebar
77
+ colorValue={ buttonTextColor }
78
+ onColorChange={ setButtonTextColor }
79
+ clearable={ buttonTextColor === userButtonTextColor }
80
+ />
81
+
82
+ <h4 className="edit-site-global-styles-section-title">
83
+ { __( 'Background color' ) }
84
+ </h4>
85
+
86
+ <ColorGradientControl
87
+ className="edit-site-screen-button-color__control"
88
+ colors={ colorsPerOrigin }
89
+ disableCustomColors={ ! areCustomSolidsEnabled }
90
+ __experimentalHasMultipleOrigins
91
+ showTitle={ false }
92
+ enableAlpha
93
+ __experimentalIsRenderedInSidebar
94
+ colorValue={ buttonBgColor }
95
+ onColorChange={ setButtonBgColor }
96
+ clearable={ buttonBgColor === userButtonBgColor }
97
+ />
98
+ </>
99
+ );
100
+ }
101
+
102
+ export default ScreenButtonColor;
@@ -2,11 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import {
6
- __experimentalToggleGroupControl as ToggleGroupControl,
7
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
8
- } from '@wordpress/components';
9
- import { useState } from '@wordpress/element';
5
+ import { TabPanel } from '@wordpress/components';
10
6
 
11
7
  /**
12
8
  * Internal dependencies
@@ -16,8 +12,6 @@ import GradientPalettePanel from './gradients-palette-panel';
16
12
  import ScreenHeader from './header';
17
13
 
18
14
  function ScreenColorPalette( { name } ) {
19
- const [ currentTab, setCurrentTab ] = useState( 'solid' );
20
-
21
15
  return (
22
16
  <>
23
17
  <ScreenHeader
@@ -26,27 +20,31 @@ function ScreenColorPalette( { name } ) {
26
20
  'Palettes are used to provide default color options for blocks and various design tools. Here you can edit the colors with their labels.'
27
21
  ) }
28
22
  />
29
- <ToggleGroupControl
30
- className="edit-site-screen-color-palette-toggle"
31
- value={ currentTab }
32
- onChange={ setCurrentTab }
33
- label={ __( 'Select palette type' ) }
34
- hideLabelFromVision
35
- isBlock
23
+ <TabPanel
24
+ tabs={ [
25
+ {
26
+ name: 'solid',
27
+ title: 'Solid color',
28
+ value: 'solid',
29
+ },
30
+ {
31
+ name: 'gradient',
32
+ title: 'Gradient',
33
+ value: 'gradient',
34
+ },
35
+ ] }
36
36
  >
37
- <ToggleGroupControlOption
38
- value="solid"
39
- label={ __( 'Solid' ) }
40
- />
41
- <ToggleGroupControlOption
42
- value="gradient"
43
- label={ __( 'Gradient' ) }
44
- />
45
- </ToggleGroupControl>
46
- { currentTab === 'solid' && <ColorPalettePanel name={ name } /> }
47
- { currentTab === 'gradient' && (
48
- <GradientPalettePanel name={ name } />
49
- ) }
37
+ { ( tab ) => (
38
+ <>
39
+ { tab.value === 'solid' && (
40
+ <ColorPalettePanel name={ name } />
41
+ ) }
42
+ { tab.value === 'gradient' && (
43
+ <GradientPalettePanel name={ name } />
44
+ ) }
45
+ </>
46
+ ) }
47
+ </TabPanel>
50
48
  </>
51
49
  );
52
50
  }
@@ -6,6 +6,7 @@ import {
6
6
  __experimentalItemGroup as ItemGroup,
7
7
  __experimentalHStack as HStack,
8
8
  __experimentalVStack as VStack,
9
+ __experimentalZStack as ZStack,
9
10
  FlexItem,
10
11
  ColorIndicator,
11
12
  } from '@wordpress/components';
@@ -33,11 +34,15 @@ function BackgroundColorItem( { name, parentMenu } ) {
33
34
  }
34
35
 
35
36
  return (
36
- <NavigationButtonAsItem path={ parentMenu + '/colors/background' }>
37
+ <NavigationButtonAsItem
38
+ path={ parentMenu + '/colors/background' }
39
+ aria-label={ __( 'Colors background styles' ) }
40
+ >
37
41
  <HStack justify="flex-start">
38
42
  <ColorIndicatorWrapper expanded={ false }>
39
43
  <ColorIndicator
40
44
  colorValue={ gradientValue ?? backgroundColor }
45
+ data-testid="background-color-indicator"
41
46
  />
42
47
  </ColorIndicatorWrapper>
43
48
  <FlexItem>{ __( 'Background' ) }</FlexItem>
@@ -56,10 +61,16 @@ function TextColorItem( { name, parentMenu } ) {
56
61
  }
57
62
 
58
63
  return (
59
- <NavigationButtonAsItem path={ parentMenu + '/colors/text' }>
64
+ <NavigationButtonAsItem
65
+ path={ parentMenu + '/colors/text' }
66
+ aria-label={ __( 'Colors text styles' ) }
67
+ >
60
68
  <HStack justify="flex-start">
61
69
  <ColorIndicatorWrapper expanded={ false }>
62
- <ColorIndicator colorValue={ color } />
70
+ <ColorIndicator
71
+ colorValue={ color }
72
+ data-testid="text-color-indicator"
73
+ />
63
74
  </ColorIndicatorWrapper>
64
75
  <FlexItem>{ __( 'Text' ) }</FlexItem>
65
76
  </HStack>
@@ -71,23 +82,59 @@ function LinkColorItem( { name, parentMenu } ) {
71
82
  const supports = getSupportedGlobalStylesPanels( name );
72
83
  const hasSupport = supports.includes( 'linkColor' );
73
84
  const [ color ] = useStyle( 'elements.link.color.text', name );
85
+ const [ colorHover ] = useStyle( 'elements.link.:hover.color.text', name );
74
86
 
75
87
  if ( ! hasSupport ) {
76
88
  return null;
77
89
  }
78
90
 
79
91
  return (
80
- <NavigationButtonAsItem path={ parentMenu + '/colors/link' }>
92
+ <NavigationButtonAsItem
93
+ path={ parentMenu + '/colors/link' }
94
+ aria-label={ __( 'Colors link styles' ) }
95
+ >
81
96
  <HStack justify="flex-start">
82
- <ColorIndicatorWrapper expanded={ false }>
83
- <ColorIndicator colorValue={ color } />
84
- </ColorIndicatorWrapper>
97
+ <ZStack isLayered={ false } offset={ -8 }>
98
+ <ColorIndicatorWrapper expanded={ false }>
99
+ <ColorIndicator colorValue={ color } />
100
+ </ColorIndicatorWrapper>
101
+ <ColorIndicatorWrapper expanded={ false }>
102
+ <ColorIndicator colorValue={ colorHover } />
103
+ </ColorIndicatorWrapper>
104
+ </ZStack>
85
105
  <FlexItem>{ __( 'Links' ) }</FlexItem>
86
106
  </HStack>
87
107
  </NavigationButtonAsItem>
88
108
  );
89
109
  }
90
110
 
111
+ function ButtonColorItem( { name, parentMenu } ) {
112
+ const supports = getSupportedGlobalStylesPanels( name );
113
+ const hasSupport = supports.includes( 'buttonColor' );
114
+ const [ color ] = useStyle( 'elements.button.color.text', name );
115
+ const [ bgColor ] = useStyle( 'elements.button.color.background', name );
116
+
117
+ if ( ! hasSupport ) {
118
+ return null;
119
+ }
120
+
121
+ return (
122
+ <NavigationButtonAsItem path={ parentMenu + '/colors/button' }>
123
+ <HStack justify="flex-start">
124
+ <ZStack isLayered={ false } offset={ -8 }>
125
+ <ColorIndicatorWrapper expanded={ false }>
126
+ <ColorIndicator colorValue={ bgColor } />
127
+ </ColorIndicatorWrapper>
128
+ <ColorIndicatorWrapper expanded={ false }>
129
+ <ColorIndicator colorValue={ color } />
130
+ </ColorIndicatorWrapper>
131
+ </ZStack>
132
+ <FlexItem>{ __( 'Buttons' ) }</FlexItem>
133
+ </HStack>
134
+ </NavigationButtonAsItem>
135
+ );
136
+ }
137
+
91
138
  function ScreenColors( { name } ) {
92
139
  const parentMenu = name === undefined ? '' : '/blocks/' + name;
93
140
 
@@ -119,6 +166,10 @@ function ScreenColors( { name } ) {
119
166
  name={ name }
120
167
  parentMenu={ parentMenu }
121
168
  />
169
+ <ButtonColorItem
170
+ name={ name }
171
+ parentMenu={ parentMenu }
172
+ />
122
173
  </ItemGroup>
123
174
  </VStack>
124
175
  </VStack>
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import { __experimentalColorGradientControl as ColorGradientControl } from '@wordpress/block-editor';
6
-
6
+ import { TabPanel } from '@wordpress/components';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
@@ -29,40 +29,82 @@ function ScreenLinkColor( { name } ) {
29
29
  isLinkEnabled &&
30
30
  ( solids.length > 0 || areCustomSolidsEnabled );
31
31
 
32
- const [ linkColor, setLinkColor ] = useStyle(
33
- 'elements.link.color.text',
34
- name
35
- );
36
- const [ userLinkColor ] = useStyle(
37
- 'elements.link.color.text',
38
- name,
39
- 'user'
40
- );
32
+ const pseudoStates = {
33
+ default: {
34
+ label: __( 'Default' ),
35
+ value: useStyle( 'elements.link.color.text', name )[ 0 ],
36
+ handler: useStyle( 'elements.link.color.text', name )[ 1 ],
37
+ userValue: useStyle(
38
+ 'elements.link.color.text',
39
+ name,
40
+ 'user'
41
+ )[ 0 ],
42
+ },
43
+ hover: {
44
+ label: __( 'Hover' ),
45
+ value: useStyle( 'elements.link.:hover.color.text', name )[ 0 ],
46
+ handler: useStyle( 'elements.link.:hover.color.text', name )[ 1 ],
47
+ userValue: useStyle(
48
+ 'elements.link.:hover.color.text',
49
+ name,
50
+ 'user'
51
+ )[ 0 ],
52
+ },
53
+ };
41
54
 
42
55
  if ( ! hasLinkColor ) {
43
56
  return null;
44
57
  }
45
58
 
59
+ const tabs = Object.entries( pseudoStates ).map(
60
+ ( [ selector, config ] ) => {
61
+ return {
62
+ name: selector,
63
+ title: config.label,
64
+ className: `color-text-${ selector }`,
65
+ };
66
+ }
67
+ );
68
+
46
69
  return (
47
70
  <>
48
71
  <ScreenHeader
49
72
  title={ __( 'Links' ) }
50
73
  description={ __(
51
- 'Set the default color used for links across the site.'
74
+ 'Set the colors used for links across the site.'
52
75
  ) }
53
76
  />
54
- <ColorGradientControl
55
- className="edit-site-screen-link-color__control"
56
- colors={ colorsPerOrigin }
57
- disableCustomColors={ ! areCustomSolidsEnabled }
58
- __experimentalHasMultipleOrigins
59
- showTitle={ false }
60
- enableAlpha
61
- __experimentalIsRenderedInSidebar
62
- colorValue={ linkColor }
63
- onColorChange={ setLinkColor }
64
- clearable={ linkColor === userLinkColor }
65
- />
77
+
78
+ <TabPanel tabs={ tabs }>
79
+ { ( tab ) => {
80
+ const pseudoSelectorConfig =
81
+ pseudoStates[ tab.name ] ?? null;
82
+
83
+ if ( ! pseudoSelectorConfig ) {
84
+ return null;
85
+ }
86
+
87
+ return (
88
+ <>
89
+ <ColorGradientControl
90
+ className="edit-site-screen-link-color__control"
91
+ colors={ colorsPerOrigin }
92
+ disableCustomColors={ ! areCustomSolidsEnabled }
93
+ __experimentalHasMultipleOrigins
94
+ showTitle={ false }
95
+ enableAlpha
96
+ __experimentalIsRenderedInSidebar
97
+ colorValue={ pseudoSelectorConfig.value }
98
+ onColorChange={ pseudoSelectorConfig.handler }
99
+ clearable={
100
+ pseudoSelectorConfig.value ===
101
+ pseudoSelectorConfig.userValue
102
+ }
103
+ />
104
+ </>
105
+ );
106
+ } }
107
+ </TabPanel>
66
108
  </>
67
109
  );
68
110
  }
@@ -28,9 +28,10 @@ import StylesPreview from './preview';
28
28
  function ScreenRoot() {
29
29
  const { variations } = useSelect( ( select ) => {
30
30
  return {
31
- variations: select(
32
- coreStore
33
- ).__experimentalGetCurrentThemeGlobalStylesVariations(),
31
+ variations:
32
+ select(
33
+ coreStore
34
+ ).__experimentalGetCurrentThemeGlobalStylesVariations(),
34
35
  };
35
36
  }, [] );
36
37
 
@@ -45,7 +46,10 @@ function ScreenRoot() {
45
46
  </Card>
46
47
  { !! variations?.length && (
47
48
  <ItemGroup>
48
- <NavigationButtonAsItem path="/variations">
49
+ <NavigationButtonAsItem
50
+ path="/variations"
51
+ aria-label={ __( 'Browse styles' ) }
52
+ >
49
53
  <HStack justify="space-between">
50
54
  <FlexItem>
51
55
  { __( 'Browse styles' ) }
@@ -81,7 +85,10 @@ function ScreenRoot() {
81
85
  ) }
82
86
  </Spacer>
83
87
  <ItemGroup>
84
- <NavigationButtonAsItem path="/blocks">
88
+ <NavigationButtonAsItem
89
+ path="/blocks"
90
+ aria-label={ __( 'Blocks styles' ) }
91
+ >
85
92
  <HStack justify="space-between">
86
93
  <FlexItem>{ __( 'Blocks' ) }</FlexItem>
87
94
  <IconWithCurrentColor
@@ -79,6 +79,7 @@ function Variation( { variation } ) {
79
79
  onKeyDown={ selectOnEnter }
80
80
  tabIndex="0"
81
81
  aria-label={ variation?.title }
82
+ aria-current={ isActive }
82
83
  onFocus={ () => setIsFocused( true ) }
83
84
  onBlur={ () => setIsFocused( false ) }
84
85
  >
@@ -96,9 +97,10 @@ function Variation( { variation } ) {
96
97
  function ScreenStyleVariations() {
97
98
  const { variations } = useSelect( ( select ) => {
98
99
  return {
99
- variations: select(
100
- coreStore
101
- ).__experimentalGetCurrentThemeGlobalStylesVariations(),
100
+ variations:
101
+ select(
102
+ coreStore
103
+ ).__experimentalGetCurrentThemeGlobalStylesVariations(),
102
104
  };
103
105
  }, [] );
104
106
 
@@ -109,7 +111,11 @@ function ScreenStyleVariations() {
109
111
  settings: {},
110
112
  styles: {},
111
113
  },
112
- ...variations,
114
+ ...variations.map( ( variation ) => ( {
115
+ ...variation,
116
+ settings: variation.settings ?? {},
117
+ styles: variation.styles ?? {},
118
+ } ) ),
113
119
  ];
114
120
  }, [ variations ] );
115
121
 
@@ -18,6 +18,10 @@ const elements = {
18
18
  description: __( 'Manage the fonts and typography used on the links.' ),
19
19
  title: __( 'Links' ),
20
20
  },
21
+ button: {
22
+ description: __( 'Manage the fonts and typography used on buttons.' ),
23
+ title: __( 'Buttons' ),
24
+ },
21
25
  };
22
26
 
23
27
  function ScreenTypographyElement( { name, element } ) {
@@ -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
  __experimentalItemGroup as ItemGroup,
7
7
  __experimentalVStack as VStack,
@@ -43,8 +43,17 @@ function Item( { name, parentMenu, element, label } ) {
43
43
  return null;
44
44
  }
45
45
 
46
+ const navigationButtonLabel = sprintf(
47
+ // translators: %s: is a subset of Typography, e.g., 'text' or 'links'.
48
+ __( 'Typography %s styles' ),
49
+ label
50
+ );
51
+
46
52
  return (
47
- <NavigationButtonAsItem path={ parentMenu + '/typography/' + element }>
53
+ <NavigationButtonAsItem
54
+ path={ parentMenu + '/typography/' + element }
55
+ aria-label={ navigationButtonLabel }
56
+ >
48
57
  <HStack justify="flex-start">
49
58
  <FlexItem
50
59
  className="edit-site-global-styles-screen-typography__indicator"
@@ -95,6 +104,12 @@ function ScreenTypography( { name } ) {
95
104
  element="link"
96
105
  label={ __( 'Links' ) }
97
106
  />
107
+ <Item
108
+ name={ name }
109
+ parentMenu={ parentMenu }
110
+ element="button"
111
+ label={ __( 'Buttons' ) }
112
+ />
98
113
  </ItemGroup>
99
114
  </VStack>
100
115
  </div>
@@ -57,21 +57,27 @@
57
57
  font-size: 11px !important;
58
58
  }
59
59
 
60
- .edit-site-screen-color-palette-toggle.edit-site-screen-color-palette-toggle {
61
- margin-right: $grid-unit-20;
62
- margin-left: $grid-unit-20;
63
- width: unset;
64
- .components-toggle-group-control {
65
- min-height: $grid-unit-40;
66
- }
60
+ .edit-site-global-styles-section-title {
61
+ color: $gray-800;
62
+ font-weight: 600;
63
+ line-height: 1.2;
64
+ padding: $grid-unit-20;
65
+ padding-bottom: 0;
66
+ margin: 0;
67
67
  }
68
68
 
69
69
  .edit-site-screen-text-color__control,
70
70
  .edit-site-screen-link-color__control,
71
- .edit-site-screen-background-color__control {
71
+ .edit-site-screen-button-color__control {
72
72
  padding: $grid-unit-20;
73
73
  }
74
74
 
75
+ .edit-site-screen-background-color__control {
76
+ .block-editor-color-gradient-control__tab-panel {
77
+ padding: $grid-unit-20;
78
+ }
79
+ }
80
+
75
81
  .edit-site-global-styles-variations_item {
76
82
  box-sizing: border-box;
77
83