From 9d04e38a9884380858267c0a4d2c824bba25ae9e Mon Sep 17 00:00:00 2001 From: Jorge Date: Thu, 2 Dec 2021 15:16:30 +0000 Subject: [PATCH 1/3] Update: PanelColorGradientSettings to use dropdowns --- .../panel-color-gradient-settings.js | 76 ++++++++++++++----- .../components/colors-gradients/style.scss | 36 +++++++++ .../global-styles/screen-background-color.js | 15 ++-- .../global-styles/screen-link-color.js | 20 ++--- .../global-styles/screen-text-color.js | 20 ++--- .../src/components/global-styles/style.scss | 6 ++ 6 files changed, 118 insertions(+), 55 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js b/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js index 02b7c086c27ea6..a1435428f65fd9 100644 --- a/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js +++ b/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js @@ -7,7 +7,16 @@ import { every, isEmpty } from 'lodash'; /** * WordPress dependencies */ -import { PanelBody, ColorIndicator } from '@wordpress/components'; +import { + __experimentalItemGroup as ItemGroup, + __experimentalItem as Item, + __experimentalHStack as HStack, + __experimentalSpacer as Spacer, + FlexItem, + ColorIndicator, + PanelBody, + Dropdown, +} from '@wordpress/components'; import { sprintf, __ } from '@wordpress/i18n'; /** @@ -136,23 +145,54 @@ export const PanelColorGradientSettingsInner = ( { title={ showTitle ? titleElement : undefined } { ...props } > - { settings.map( ( setting, index ) => ( - - ) ) } - { children } + + { settings.map( ( setting, index ) => ( + { + return ( + + + + + + { setting.label } + + + ); + } } + renderContent={ () => ( + + ) } + /> + ) ) } + + { !! children && ( + <> + { children } + + ) } ); }; diff --git a/packages/block-editor/src/components/colors-gradients/style.scss b/packages/block-editor/src/components/colors-gradients/style.scss index cae89427f50fa3..d3bbacf859dae9 100644 --- a/packages/block-editor/src/components/colors-gradients/style.scss +++ b/packages/block-editor/src/components/colors-gradients/style.scss @@ -38,4 +38,40 @@ .block-editor-block-inspector & .components-base-control { margin-bottom: inherit; } + + .components-dropdown { + display: block; + } + + // Allow horizontal overflow so the size-increasing color indicators don't cause a scrollbar. + .components-navigator-screen { + overflow-x: visible; + } + +} + +@include break-medium() { + .block-editor-panel-color-gradient-settings__dropdown .components-popover__content { + margin-right: #{ math.div($sidebar-width, 2) + $grid-unit-20 } !important; + margin-top: #{ -($grid-unit-60 + $grid-unit-15) } !important; + } +} + +.block-editor-panel-color-gradient-settings__item { + // @todo: this can be removed when https://github.com/WordPress/gutenberg/pull/37028 lands. + .component-color-indicator { + margin-left: 0; + display: block; + border-radius: 50%; + border: 0; + height: 24px; + width: 24px; + padding: 0; + background-image: + repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200), + repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200); + background-position: 0 0, 25px 25px; + background-size: calc(2 * 5px) calc(2 * 5px); + } } + diff --git a/packages/edit-site/src/components/global-styles/screen-background-color.js b/packages/edit-site/src/components/global-styles/screen-background-color.js index 3cbd0cacb3ed37..d8328a16586d1a 100644 --- a/packages/edit-site/src/components/global-styles/screen-background-color.js +++ b/packages/edit-site/src/components/global-styles/screen-background-color.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { __ } from '@wordpress/i18n'; -import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor'; +import { __experimentalColorGradientControl as ColorGradientControl } from '@wordpress/block-editor'; /** * Internal dependencies @@ -55,7 +55,6 @@ function ScreenBackgroundColor( { name } ) { return null; } - const settings = []; let backgroundSettings = {}; if ( hasBackgroundColor ) { backgroundSettings = { @@ -79,11 +78,10 @@ function ScreenBackgroundColor( { name } ) { } } - settings.push( { + const controlProps = { ...backgroundSettings, ...gradientSettings, - label: __( 'Background color' ), - } ); + }; return ( <> @@ -94,10 +92,8 @@ function ScreenBackgroundColor( { name } ) { 'Set a background color or gradient for the whole site.' ) } /> - - ); 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 index c18580ed118796..6d033a77f2ecd6 100644 --- a/packages/edit-site/src/components/global-styles/screen-link-color.js +++ b/packages/edit-site/src/components/global-styles/screen-link-color.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { __ } from '@wordpress/i18n'; -import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor'; +import { __experimentalColorGradientControl as ColorGradientControl } from '@wordpress/block-editor'; /** * Internal dependencies @@ -44,15 +44,6 @@ function ScreenLinkColor( { name } ) { return null; } - const settings = [ - { - colorValue: linkColor, - onColorChange: setLinkColor, - label: __( 'Link color' ), - clearable: linkColor === userLinkColor, - }, - ]; - return ( <> - - ); 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 index 599293265ae6d2..2ab386641b788d 100644 --- a/packages/edit-site/src/components/global-styles/screen-text-color.js +++ b/packages/edit-site/src/components/global-styles/screen-text-color.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { __ } from '@wordpress/i18n'; -import { __experimentalPanelColorGradientSettings as PanelColorGradientSettings } from '@wordpress/block-editor'; +import { __experimentalColorGradientControl as ColorGradientControl } from '@wordpress/block-editor'; /** * Internal dependencies @@ -36,15 +36,6 @@ function ScreenTextColor( { name } ) { return null; } - const settings = [ - { - colorValue: color, - onColorChange: setColor, - label: __( 'Text color' ), - clearable: color === userColor, - }, - ]; - return ( <> - - ); diff --git a/packages/edit-site/src/components/global-styles/style.scss b/packages/edit-site/src/components/global-styles/style.scss index ba9284f18d1020..a707e2b0a8ccca 100644 --- a/packages/edit-site/src/components/global-styles/style.scss +++ b/packages/edit-site/src/components/global-styles/style.scss @@ -66,3 +66,9 @@ h2.edit-site-global-styles-gradient-palette-panel__duotone-heading.components-he font-size: 11px; margin-bottom: $grid-unit-10; } + +.edit-site-screen-text-color__control, +.edit-site-screen-link-color__control, +.edit-site-screen-background-color__control { + padding: $grid-unit-20; +} From f1d9c6a34ac6b30f09a1cfa48e5efd90f30da90d Mon Sep 17 00:00:00 2001 From: jasmussen Date: Fri, 3 Dec 2021 11:27:37 +0100 Subject: [PATCH 2/3] Show diagonal indicator. --- .../src/components/colors-gradients/style.scss | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/style.scss b/packages/block-editor/src/components/colors-gradients/style.scss index d3bbacf859dae9..bc69ea351b39bc 100644 --- a/packages/block-editor/src/components/colors-gradients/style.scss +++ b/packages/block-editor/src/components/colors-gradients/style.scss @@ -58,20 +58,9 @@ } .block-editor-panel-color-gradient-settings__item { - // @todo: this can be removed when https://github.com/WordPress/gutenberg/pull/37028 lands. .component-color-indicator { - margin-left: 0; - display: block; - border-radius: 50%; - border: 0; - height: 24px; - width: 24px; - padding: 0; - background-image: - repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200), - repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200); - background-position: 0 0, 25px 25px; - background-size: calc(2 * 5px) calc(2 * 5px); + // Show a diagonal line (crossed out) for empty swatches. + background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%); } } From 9cb9d655a0a0d70c321dddd34080b999c6ce3f47 Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 8 Dec 2021 22:46:48 +0000 Subject: [PATCH 3/3] Ui enhancements --- .../panel-color-gradient-settings.js | 42 +++++++++++++------ .../components/colors-gradients/style.scss | 25 +++++++---- .../components/src/color-palette/index.js | 11 ++++- .../toggle-group-control-backdrop.tsx | 33 +++++++++++---- .../specs/editor/blocks/heading.test.js | 4 +- 5 files changed, 83 insertions(+), 32 deletions(-) diff --git a/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js b/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js index a1435428f65fd9..6b9623002f7f3d 100644 --- a/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js +++ b/packages/block-editor/src/components/colors-gradients/panel-color-gradient-settings.js @@ -17,7 +17,7 @@ import { PanelBody, Dropdown, } from '@wordpress/components'; -import { sprintf, __ } from '@wordpress/i18n'; +import { sprintf, __, isRTL } from '@wordpress/i18n'; /** * Internal dependencies @@ -136,6 +136,13 @@ export const PanelColorGradientSettingsInner = ( { ); + let dropdownPosition; + let popoverProps; + if ( __experimentalIsRenderedInSidebar ) { + dropdownPosition = isRTL() ? 'bottom right' : 'bottom left'; + popoverProps = { __unstableForcePosition: true }; + } + return ( - + { settings.map( ( setting, index ) => ( { + contentClassName="block-editor-panel-color-gradient-settings__dropdown-content" + renderToggle={ ( { isOpen, onToggle } ) => { return ( - - - + { setting.label } diff --git a/packages/block-editor/src/components/colors-gradients/style.scss b/packages/block-editor/src/components/colors-gradients/style.scss index bc69ea351b39bc..fe39ff0132182a 100644 --- a/packages/block-editor/src/components/colors-gradients/style.scss +++ b/packages/block-editor/src/components/colors-gradients/style.scss @@ -39,28 +39,39 @@ margin-bottom: inherit; } - .components-dropdown { + .block-editor-panel-color-gradient-settings__dropdown { display: block; } +} - // Allow horizontal overflow so the size-increasing color indicators don't cause a scrollbar. - .components-navigator-screen { - overflow-x: visible; +.block-editor-panel-color-gradient-settings__dropdown-content .components-popover__content { + & > div { + width: $sidebar-width; } - } @include break-medium() { - .block-editor-panel-color-gradient-settings__dropdown .components-popover__content { + .block-editor-panel-color-gradient-settings__dropdown-content .components-popover__content { margin-right: #{ math.div($sidebar-width, 2) + $grid-unit-20 } !important; margin-top: #{ -($grid-unit-60 + $grid-unit-15) } !important; } } +.block-editor-panel-color-gradient-settings__dropdown:last-child > div { + border-bottom-width: 0; +} + .block-editor-panel-color-gradient-settings__item { - .component-color-indicator { + padding-top: $grid-unit-15 !important; + padding-bottom: $grid-unit-15 !important; + .block-editor-panel-color-gradient-settings__color-indicator { // Show a diagonal line (crossed out) for empty swatches. background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%); } + + &.is-open { + background: $gray-100; + color: var(--wp-admin-theme-color); + } } diff --git a/packages/components/src/color-palette/index.js b/packages/components/src/color-palette/index.js index 39ec5ebfc09c3d..9a50a40d774571 100644 --- a/packages/components/src/color-palette/index.js +++ b/packages/components/src/color-palette/index.js @@ -10,7 +10,7 @@ import classnames from 'classnames'; /** * WordPress dependencies */ -import { __, sprintf } from '@wordpress/i18n'; +import { __, sprintf, isRTL } from '@wordpress/i18n'; import { useCallback, useMemo } from '@wordpress/element'; /** @@ -148,14 +148,23 @@ export default function ColorPalette( { /> ); + let dropdownPosition; + let popoverProps; + if ( __experimentalIsRenderedInSidebar ) { + dropdownPosition = isRTL() ? 'bottom right' : 'bottom left'; + popoverProps = { __unstableForcePosition: true }; + } + const colordColor = colord( value ); return ( { ! disableCustomColors && ( (