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 && (
(