From 3188b7812dff3e797b8d297d9243beedb7c14c52 Mon Sep 17 00:00:00 2001 From: Yogesh Bhutkar Date: Mon, 3 Feb 2025 15:31:45 +0530 Subject: [PATCH] Shadow Panel: Add reset button (#68981) * feat: add remove button for block editor shadow panel * refactor: simplify the markup * refactor: revert `toggle` markup and use consistent wording * a11y: return focus to parent button on reset Co-authored-by: yogeshbhutkar Co-authored-by: t-hamano Co-authored-by: Mamaduka --- .../global-styles/shadow-panel-components.js | 55 ++++++++++++++----- .../src/components/global-styles/style.scss | 23 ++++++++ 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/packages/block-editor/src/components/global-styles/shadow-panel-components.js b/packages/block-editor/src/components/global-styles/shadow-panel-components.js index 1cfdff0be286ee..c335ef29384f4d 100644 --- a/packages/block-editor/src/components/global-styles/shadow-panel-components.js +++ b/packages/block-editor/src/components/global-styles/shadow-panel-components.js @@ -13,8 +13,8 @@ import { Composite, Tooltip, } from '@wordpress/components'; -import { useMemo } from '@wordpress/element'; -import { shadow as shadowIcon, Icon, check } from '@wordpress/icons'; +import { useMemo, useRef } from '@wordpress/element'; +import { shadow as shadowIcon, Icon, check, reset } from '@wordpress/icons'; /** * External dependencies @@ -119,7 +119,7 @@ export function ShadowPopover( { shadow, onShadowChange, settings } ) { ( { + const shadowButtonRef = useRef( undefined ); + const toggleProps = { onClick: onToggle, className: clsx( { 'is-open': isOpen } ), 'aria-expanded': isOpen, + ref: shadowButtonRef, + }; + + const removeButtonProps = { + onClick: () => { + if ( isOpen ) { + onToggle(); + } + onShadowChange( undefined ); + // Return focus to parent button. + shadowButtonRef.current?.focus(); + }, + className: clsx( + 'block-editor-global-styles__shadow-editor__remove-button', + { 'is-open': isOpen } + ), + label: __( 'Remove' ), }; return ( - + { !! shadow && ( + + ) } + ); }; } diff --git a/packages/block-editor/src/components/global-styles/style.scss b/packages/block-editor/src/components/global-styles/style.scss index c51ffa3116d9f0..5684cf9c0d3034 100644 --- a/packages/block-editor/src/components/global-styles/style.scss +++ b/packages/block-editor/src/components/global-styles/style.scss @@ -24,6 +24,7 @@ .block-editor-global-styles__shadow-dropdown { display: block; padding: 0; + position: relative; button { width: 100%; @@ -35,6 +36,28 @@ } } +.block-editor-global-styles__shadow-editor__remove-button { + position: absolute; + right: 0; + top: $grid-unit; + margin: auto $grid-unit auto; + opacity: 0; + @media not (prefers-reduced-motion) { + transition: opacity 0.1s ease-in-out; + } + + .block-editor-global-styles__shadow-dropdown:hover &, + &:focus, + &:hover { + opacity: 1; + } + + @media (hover: none) { + // Show reset button on devices that do not support hover. + opacity: 1; + } +} + // These styles are similar to the color palette. .block-editor-global-styles__shadow-indicator { appearance: none;