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..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 @@ -7,8 +7,17 @@ import { every, isEmpty } from 'lodash'; /** * WordPress dependencies */ -import { PanelBody, ColorIndicator } from '@wordpress/components'; -import { sprintf, __ } from '@wordpress/i18n'; +import { + __experimentalItemGroup as ItemGroup, + __experimentalItem as Item, + __experimentalHStack as HStack, + __experimentalSpacer as Spacer, + FlexItem, + ColorIndicator, + PanelBody, + Dropdown, +} from '@wordpress/components'; +import { sprintf, __, isRTL } from '@wordpress/i18n'; /** * Internal dependencies @@ -127,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 ) => ( - - ) ) } - { 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..fe39ff0132182a 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; } + + .block-editor-panel-color-gradient-settings__dropdown { + display: block; + } +} + +.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-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 { + 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 && ( (