diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md
index 37dd824c6b6247..825839531b0bdc 100644
--- a/packages/components/CHANGELOG.md
+++ b/packages/components/CHANGELOG.md
@@ -15,6 +15,8 @@
- `ColorPicker`: fix layout overflow [#42992](https://github.com/WordPress/gutenberg/pull/42992)).
- `ToolsPanel`: Constrain grid columns to 50% max-width ([#42795](https://github.com/WordPress/gutenberg/pull/42795)).
- `Popover`: anchor correctly to parent node when no explicit anchor is passed ([#42971](https://github.com/WordPress/gutenberg/pull/42971)).
+- `ColorPalette`: forward correctly `popoverProps` in the `CustomColorPickerDropdown` component [#42989](https://github.com/WordPress/gutenberg/pull/42989)).
+- `ColorPalette`, `CustomGradientBar`: restore correct color picker popover position [#42989](https://github.com/WordPress/gutenberg/pull/42989)).
### Enhancements
diff --git a/packages/components/src/color-palette/index.js b/packages/components/src/color-palette/index.js
index 024fabdb672028..876c9ccbf1f3bb 100644
--- a/packages/components/src/color-palette/index.js
+++ b/packages/components/src/color-palette/index.js
@@ -112,19 +112,35 @@ function MultiplePalettes( {
);
}
-export function CustomColorPickerDropdown( { isRenderedInSidebar, ...props } ) {
+export function CustomColorPickerDropdown( {
+ isRenderedInSidebar,
+ popoverProps: receivedPopoverProps,
+ ...props
+} ) {
+ const popoverProps = useMemo(
+ () => ( {
+ __unstableShift: true,
+ ...( isRenderedInSidebar
+ ? {
+ // When in the sidebar: open to the left (stacking),
+ // leaving the same gap as the parent popover.
+ placement: 'left-start',
+ offset: 34,
+ }
+ : {
+ // Default behavior: open below the anchor
+ placement: 'bottom',
+ offset: 8,
+ } ),
+ ...receivedPopoverProps,
+ } ),
+ [ isRenderedInSidebar, receivedPopoverProps ]
+ );
+
return (
);
diff --git a/packages/components/src/color-palette/test/__snapshots__/index.js.snap b/packages/components/src/color-palette/test/__snapshots__/index.js.snap
index cca33e76e0e926..f229e98a0278fa 100644
--- a/packages/components/src/color-palette/test/__snapshots__/index.js.snap
+++ b/packages/components/src/color-palette/test/__snapshots__/index.js.snap
@@ -357,6 +357,13 @@ exports[`ColorPalette Dropdown should render it correctly 1`] = `
@@ -728,6 +735,13 @@ exports[`ColorPalette should render a dynamic toolbar of colors 1`] = `
>
diff --git a/packages/components/src/custom-gradient-bar/control-points.js b/packages/components/src/custom-gradient-bar/control-points.js
index 65856d3069f6a9..44e31ef4f784ff 100644
--- a/packages/components/src/custom-gradient-bar/control-points.js
+++ b/packages/components/src/custom-gradient-bar/control-points.js
@@ -17,6 +17,7 @@ import { LEFT, RIGHT } from '@wordpress/keycodes';
* Internal dependencies
*/
import Button from '../button';
+import { HStack } from '../h-stack';
import { ColorPicker } from '../color-picker';
import { VisuallyHidden } from '../visually-hidden';
import { CustomColorPickerDropdown } from '../color-palette';
@@ -73,23 +74,16 @@ function ControlPointButton( { isOpen, position, color, ...additionalProps } ) {
);
}
-function GradientColorPickerDropdown( {
- isRenderedInSidebar,
- gradientPickerDomRef,
- ...props
-} ) {
- const popoverProps = useMemo( () => {
- const result = {
- className:
- 'components-custom-gradient-picker__color-picker-popover',
- position: 'top',
- };
- if ( isRenderedInSidebar ) {
- result.anchorRef = gradientPickerDomRef.current;
- result.position = 'bottom left';
- }
- return result;
- }, [ gradientPickerDomRef, isRenderedInSidebar ] );
+function GradientColorPickerDropdown( { isRenderedInSidebar, ...props } ) {
+ // Open the popover below the gradient control/insertion point
+ const popoverProps = useMemo(
+ () => ( {
+ placement: 'bottom',
+ offset: 8,
+ } ),
+ []
+ );
+
return (
{ ! disableRemove && controlPoints.length > 2 && (
-
+
+
) }
>
) }
@@ -288,12 +285,10 @@ function InsertPoint( {
insertPosition,
disableAlpha,
__experimentalIsRenderedInSidebar,
- gradientPickerDomRef,
} ) {
const [ alreadyInsertedPoint, setAlreadyInsertedPoint ] = useState( false );
return (
{
diff --git a/packages/components/src/custom-gradient-bar/index.js b/packages/components/src/custom-gradient-bar/index.js
index 088ccd994297a5..6898619e086431 100644
--- a/packages/components/src/custom-gradient-bar/index.js
+++ b/packages/components/src/custom-gradient-bar/index.js
@@ -136,9 +136,6 @@ export default function CustomGradientBar( {
__experimentalIsRenderedInSidebar={
__experimentalIsRenderedInSidebar
}
- gradientPickerDomRef={
- gradientMarkersContainerDomRef
- }
disableAlpha={ disableAlpha }
insertPosition={ gradientBarState.insertPosition }
value={ controlPoints }
diff --git a/packages/components/src/custom-gradient-picker/style.scss b/packages/components/src/custom-gradient-picker/style.scss
index 10d15992566aa6..2b62dfcf7debe0 100644
--- a/packages/components/src/custom-gradient-picker/style.scss
+++ b/packages/components/src/custom-gradient-picker/style.scss
@@ -59,11 +59,8 @@ $components-custom-gradient-picker__padding: $grid-unit-20; // 48px container, 1
}
}
-.components-custom-gradient-picker__color-picker-popover .components-custom-gradient-picker__remove-control-point {
- margin-left: auto;
- margin-right: auto;
- display: block;
- margin-bottom: $grid-unit-10;
+.components-custom-gradient-picker__remove-control-point-wrapper {
+ padding-bottom: $grid-unit-10;
}
.components-custom-gradient-picker__inserter {