diff --git a/packages/edit-site/src/components/global-styles/color-utils.js b/packages/edit-site/src/components/global-styles/color-utils.js
new file mode 100644
index 0000000000000..6ff99bbfe678d
--- /dev/null
+++ b/packages/edit-site/src/components/global-styles/color-utils.js
@@ -0,0 +1,15 @@
+/**
+ * Internal dependencies
+ */
+
+import { getSupportedGlobalStylesPanels } from './hooks';
+
+export function useHasColorPanel( name ) {
+ const supports = getSupportedGlobalStylesPanels( name );
+ return (
+ supports.includes( 'color' ) ||
+ supports.includes( 'backgroundColor' ) ||
+ supports.includes( 'background' ) ||
+ supports.includes( 'linkColor' )
+ );
+}
diff --git a/packages/edit-site/src/components/global-styles/context-menu.js b/packages/edit-site/src/components/global-styles/context-menu.js
index 7686945e2621f..70b33622ba5a4 100644
--- a/packages/edit-site/src/components/global-styles/context-menu.js
+++ b/packages/edit-site/src/components/global-styles/context-menu.js
@@ -9,7 +9,7 @@ import { __ } from '@wordpress/i18n';
* Internal dependencies
*/
import { useHasBorderPanel } from './border-panel';
-import { useHasColorPanel } from './color-panel';
+import { useHasColorPanel } from './color-utils';
import { useHasDimensionsPanel } from './dimensions-panel';
import { useHasTypographyPanel } from './typography-panel';
import NavigationButton from './navigation-button';
diff --git a/packages/edit-site/src/components/global-styles/palette.js b/packages/edit-site/src/components/global-styles/palette.js
index 021392fcc5ab6..a729694d00d82 100644
--- a/packages/edit-site/src/components/global-styles/palette.js
+++ b/packages/edit-site/src/components/global-styles/palette.js
@@ -26,40 +26,32 @@ function Palette( { name } ) {
: '/blocks/' + name + '/colors/palette';
return (
-
-
- { __( 'Palette' ) }
-
-
-
-
-
- { colors
- .slice( 0, 5 )
- .map( ( { color } ) => (
-
- ) ) }
-
-
-
- { sprintf(
- // Translators: %d: Number of palette colors.
- _n(
- '%d color',
- '%d colors',
- colors.length
- ),
- colors.length
- ) }
-
-
-
-
-
-
+
+ { __( 'Palette' ) }
+
+
+
+
+
+ { colors.slice( 0, 5 ).map( ( { color } ) => (
+
+ ) ) }
+
+
+
+ { sprintf(
+ // Translators: %d: Number of palette colors.
+ _n( '%d color', '%d colors', colors.length ),
+ colors.length
+ ) }
+
+
+
+
+
);
}
diff --git a/packages/edit-site/src/components/global-styles/preview.js b/packages/edit-site/src/components/global-styles/preview.js
index c691e1134fe90..da8669a4adab0 100644
--- a/packages/edit-site/src/components/global-styles/preview.js
+++ b/packages/edit-site/src/components/global-styles/preview.js
@@ -18,11 +18,12 @@ const StylesPreview = () => {
const [ textColor = 'black' ] = useStyle( 'color.text' );
const [ linkColor = 'blue' ] = useStyle( 'elements.link.color.text' );
const [ backgroundColor = 'white' ] = useStyle( 'color.background' );
+ const [ gradientValue ] = useStyle( 'color.gradient' );
return (
Aa
diff --git a/packages/edit-site/src/components/global-styles/color-panel.js b/packages/edit-site/src/components/global-styles/screen-background-color.js
similarity index 57%
rename from packages/edit-site/src/components/global-styles/color-panel.js
rename to packages/edit-site/src/components/global-styles/screen-background-color.js
index 64d7ff33f1e6a..75a47f3f37fb8 100644
--- a/packages/edit-site/src/components/global-styles/color-panel.js
+++ b/packages/edit-site/src/components/global-styles/screen-background-color.js
@@ -1,27 +1,17 @@
/**
* WordPress dependencies
*/
-import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor';
import { __ } from '@wordpress/i18n';
+import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor';
/**
* Internal dependencies
*/
-
+import ScreenHeader from './header';
import { getSupportedGlobalStylesPanels, useSetting, useStyle } from './hooks';
-import Palette from './palette';
-
-export function useHasColorPanel( name ) {
- const supports = getSupportedGlobalStylesPanels( name );
- return (
- supports.includes( 'color' ) ||
- supports.includes( 'backgroundColor' ) ||
- supports.includes( 'background' ) ||
- supports.includes( 'linkColor' )
- );
-}
-export default function ColorPanel( { name } ) {
+function ScreenBackgroundColor( { name } ) {
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
const supports = getSupportedGlobalStylesPanels( name );
const [ solids ] = useSetting( 'color.palette', name );
const [ gradients ] = useSetting( 'color.gradients', name );
@@ -31,18 +21,8 @@ export default function ColorPanel( { name } ) {
name
);
- const [ isLinkEnabled ] = useSetting( 'color.link', name );
- const [ isTextEnabled ] = useSetting( 'color.text', name );
const [ isBackgroundEnabled ] = useSetting( 'color.background', name );
- const hasLinkColor =
- supports.includes( 'linkColor' ) &&
- isLinkEnabled &&
- ( solids.length > 0 || areCustomSolidsEnabled );
- const hasTextColor =
- supports.includes( 'color' ) &&
- isTextEnabled &&
- ( solids.length > 0 || areCustomSolidsEnabled );
const hasBackgroundColor =
supports.includes( 'backgroundColor' ) &&
isBackgroundEnabled &&
@@ -50,9 +30,6 @@ export default function ColorPanel( { name } ) {
const hasGradientColor =
supports.includes( 'background' ) &&
( gradients.length > 0 || areCustomGradientsEnabled );
-
- const [ color, setColor ] = useStyle( 'color.text', name );
- const [ userColor ] = useStyle( 'color.text', name, 'user' );
const [ backgroundColor, setBackgroundColor ] = useStyle(
'color.background',
name
@@ -64,26 +41,12 @@ export default function ColorPanel( { name } ) {
);
const [ gradient, setGradient ] = useStyle( 'color.gradient', name );
const [ userGradient ] = useStyle( 'color.gradient', name, 'user' );
- const [ linkColor, setLinkColor ] = useStyle(
- 'elements.link.color.text',
- name
- );
- const [ userLinkColor ] = useStyle(
- 'elements.link.color.text',
- name,
- 'user'
- );
- const settings = [];
- if ( hasTextColor ) {
- settings.push( {
- colorValue: color,
- onColorChange: setColor,
- label: __( 'Text color' ),
- clearable: color === userColor,
- } );
+ if ( ! hasBackgroundColor && ! hasGradientColor ) {
+ return null;
}
+ const settings = [];
let backgroundSettings = {};
if ( hasBackgroundColor ) {
backgroundSettings = {
@@ -107,26 +70,22 @@ export default function ColorPanel( { name } ) {
}
}
- if ( hasBackgroundColor || hasGradientColor ) {
- settings.push( {
- ...backgroundSettings,
- ...gradientSettings,
- label: __( 'Background color' ),
- } );
- }
-
- if ( hasLinkColor ) {
- settings.push( {
- colorValue: linkColor,
- onColorChange: setLinkColor,
- label: __( 'Link color' ),
- clearable: linkColor === userLinkColor,
- } );
- }
+ settings.push( {
+ ...backgroundSettings,
+ ...gradientSettings,
+ label: __( 'Background color' ),
+ } );
return (
<>
-
+
+
);
}
+
+export default ScreenBackgroundColor;
diff --git a/packages/edit-site/src/components/global-styles/screen-block-list.js b/packages/edit-site/src/components/global-styles/screen-block-list.js
index 159d273650675..354d49de2ef25 100644
--- a/packages/edit-site/src/components/global-styles/screen-block-list.js
+++ b/packages/edit-site/src/components/global-styles/screen-block-list.js
@@ -8,7 +8,7 @@ import { __ } from '@wordpress/i18n';
* Internal dependencies
*/
import { useHasBorderPanel } from './border-panel';
-import { useHasColorPanel } from './color-panel';
+import { useHasColorPanel } from './color-utils';
import { useHasDimensionsPanel } from './dimensions-panel';
import { useHasTypographyPanel } from './typography-panel';
import ScreenHeader from './header';
diff --git a/packages/edit-site/src/components/global-styles/screen-colors.js b/packages/edit-site/src/components/global-styles/screen-colors.js
index 09079bdc9d9d9..9c77c067e7bb2 100644
--- a/packages/edit-site/src/components/global-styles/screen-colors.js
+++ b/packages/edit-site/src/components/global-styles/screen-colors.js
@@ -2,12 +2,90 @@
* WordPress dependencies
*/
import { __ } from '@wordpress/i18n';
+import {
+ __experimentalItemGroup as ItemGroup,
+ __experimentalHStack as HStack,
+ __experimentalVStack as VStack,
+ FlexItem,
+ ColorIndicator,
+} from '@wordpress/components';
/**
* Internal dependencies
*/
-import ColorPanel from './color-panel';
import ScreenHeader from './header';
+import Palette from './palette';
+import NavigationButton from './navigation-button';
+import { getSupportedGlobalStylesPanels, useStyle } from './hooks';
+import Subtitle from './subtitle';
+
+function BackgroundColorItem( { name, parentMenu } ) {
+ const supports = getSupportedGlobalStylesPanels( name );
+ const hasSupport =
+ supports.includes( 'backgroundColor' ) ||
+ supports.includes( 'background' );
+ const [ backgroundColor ] = useStyle( 'color.background', name );
+ const [ gradientValue ] = useStyle( 'color.gradient', name );
+
+ if ( ! hasSupport ) {
+ return null;
+ }
+
+ return (
+
+
+
+
+
+ { __( 'Background' ) }
+
+
+ );
+}
+
+function TextColorItem( { name, parentMenu } ) {
+ const supports = getSupportedGlobalStylesPanels( name );
+ const hasSupport = supports.includes( 'color' );
+ const [ color ] = useStyle( 'color.text', name );
+
+ if ( ! hasSupport ) {
+ return null;
+ }
+
+ return (
+
+
+
+
+
+ { __( 'Text' ) }
+
+
+ );
+}
+
+function LinkColorItem( { name, parentMenu } ) {
+ const supports = getSupportedGlobalStylesPanels( name );
+ const hasSupport = supports.includes( 'linkColor' );
+ const [ color ] = useStyle( 'elements.link.color.text', name );
+
+ if ( ! hasSupport ) {
+ return null;
+ }
+
+ return (
+
+
+
+
+
+ { __( 'Links' ) }
+
+
+ );
+}
function ScreenColors( { name } ) {
const parentMenu = name === undefined ? '' : '/blocks/' + name;
@@ -21,7 +99,30 @@ function ScreenColors( { name } ) {
'Manage color palettes and how they affect the different elements of the site.'
) }
/>
-
+
+
+
+
+
+
+ { __( 'Elements' ) }
+
+
+
+
+
+
+
+
>
);
}
diff --git a/packages/edit-site/src/components/global-styles/screen-link-color.js b/packages/edit-site/src/components/global-styles/screen-link-color.js
new file mode 100644
index 0000000000000..8c2f468bccebe
--- /dev/null
+++ b/packages/edit-site/src/components/global-styles/screen-link-color.js
@@ -0,0 +1,70 @@
+/**
+ * WordPress dependencies
+ */
+import { __ } from '@wordpress/i18n';
+import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor';
+
+/**
+ * Internal dependencies
+ */
+import ScreenHeader from './header';
+import { getSupportedGlobalStylesPanels, useSetting, useStyle } from './hooks';
+
+function ScreenLinkColor( { name } ) {
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
+ const supports = getSupportedGlobalStylesPanels( name );
+ const [ solids ] = useSetting( 'color.palette', name );
+ const [ areCustomSolidsEnabled ] = useSetting( 'color.custom', name );
+
+ const [ isLinkEnabled ] = useSetting( 'color.link', name );
+
+ const hasLinkColor =
+ supports.includes( 'linkColor' ) &&
+ isLinkEnabled &&
+ ( solids.length > 0 || areCustomSolidsEnabled );
+
+ const [ linkColor, setLinkColor ] = useStyle(
+ 'elements.link.color.text',
+ name
+ );
+ const [ userLinkColor ] = useStyle(
+ 'elements.link.color.text',
+ name,
+ 'user'
+ );
+
+ if ( ! hasLinkColor ) {
+ return null;
+ }
+
+ const settings = [
+ {
+ colorValue: linkColor,
+ onColorChange: setLinkColor,
+ label: __( 'Link color' ),
+ clearable: linkColor === userLinkColor,
+ },
+ ];
+
+ return (
+ <>
+
+
+
+ >
+ );
+}
+
+export default ScreenLinkColor;
diff --git a/packages/edit-site/src/components/global-styles/screen-text-color.js b/packages/edit-site/src/components/global-styles/screen-text-color.js
new file mode 100644
index 0000000000000..fdb02fdba6a64
--- /dev/null
+++ b/packages/edit-site/src/components/global-styles/screen-text-color.js
@@ -0,0 +1,62 @@
+/**
+ * WordPress dependencies
+ */
+import { __ } from '@wordpress/i18n';
+import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor';
+
+/**
+ * Internal dependencies
+ */
+import ScreenHeader from './header';
+import { getSupportedGlobalStylesPanels, useSetting, useStyle } from './hooks';
+
+function ScreenTextColor( { name } ) {
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
+ const supports = getSupportedGlobalStylesPanels( name );
+ const [ solids ] = useSetting( 'color.palette', name );
+ const [ areCustomSolidsEnabled ] = useSetting( 'color.custom', name );
+ const [ isTextEnabled ] = useSetting( 'color.text', name );
+
+ const hasTextColor =
+ supports.includes( 'color' ) &&
+ isTextEnabled &&
+ ( solids.length > 0 || areCustomSolidsEnabled );
+
+ const [ color, setColor ] = useStyle( 'color.text', name );
+ const [ userColor ] = useStyle( 'color.text', name, 'user' );
+
+ if ( ! hasTextColor ) {
+ return null;
+ }
+
+ const settings = [
+ {
+ colorValue: color,
+ onColorChange: setColor,
+ label: __( 'Text color' ),
+ clearable: color === userColor,
+ },
+ ];
+
+ return (
+ <>
+
+
+
+ >
+ );
+}
+
+export default ScreenTextColor;
diff --git a/packages/edit-site/src/components/global-styles/style.scss b/packages/edit-site/src/components/global-styles/style.scss
index 4d330471cccc6..b17452da64e30 100644
--- a/packages/edit-site/src/components/global-styles/style.scss
+++ b/packages/edit-site/src/components/global-styles/style.scss
@@ -16,7 +16,7 @@
}
}
-.edit-site-global-style-palette {
+.edit-site-global-styles-screen-colors {
margin: $grid-unit-20;
.component-color-indicator {
@@ -33,3 +33,10 @@
.edit-site-global-styles-header__description {
padding: 0 $grid-unit-20;
}
+
+.edit-site-global-styles-subtitle {
+ // Need to override the too specific styles for complementary areas.
+ margin-bottom: 0 !important;
+ text-transform: uppercase;
+ font-weight: 500;
+}
diff --git a/packages/edit-site/src/components/global-styles/subtitle.js b/packages/edit-site/src/components/global-styles/subtitle.js
index dba8ec32bbbb6..7488f2dd79209 100644
--- a/packages/edit-site/src/components/global-styles/subtitle.js
+++ b/packages/edit-site/src/components/global-styles/subtitle.js
@@ -4,7 +4,11 @@
import { __experimentalHeading as Heading } from '@wordpress/components';
function Subtitle( { children } ) {
- return { children };
+ return (
+
+ { children }
+
+ );
}
export default Subtitle;
diff --git a/packages/edit-site/src/components/global-styles/ui.js b/packages/edit-site/src/components/global-styles/ui.js
index 180bf343dd120..6f90749cb2fbc 100644
--- a/packages/edit-site/src/components/global-styles/ui.js
+++ b/packages/edit-site/src/components/global-styles/ui.js
@@ -16,6 +16,9 @@ import ScreenBlock from './screen-block';
import ScreenTypography from './screen-typography';
import ScreenColors from './screen-colors';
import ScreenColorPalette from './screen-color-palette';
+import ScreenBackgroundColor from './screen-background-color';
+import ScreenTextColor from './screen-text-color';
+import ScreenLinkColor from './screen-link-color';
import ScreenLayout from './screen-layout';
function ContextScreens( { name } ) {
@@ -35,6 +38,18 @@ function ContextScreens( { name } ) {
+
+
+
+
+
+
+
+
+
+
+
+