Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duotone Settings: Add reset button and improve toggle rendering in FiltersPanel #68672

Merged
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import clsx from 'clsx';
import {
__experimentalToolsPanel as ToolsPanel,
__experimentalToolsPanelItem as ToolsPanelItem,
__experimentalItemGroup as ItemGroup,
__experimentalItem as Item,
__experimentalHStack as HStack,
__experimentalZStack as ZStack,
__experimentalDropdownContentWrapper as DropdownContentWrapper,
Expand All @@ -21,9 +19,11 @@ import {
Dropdown,
Flex,
FlexItem,
Button,
} from '@wordpress/components';
import { __, _x } from '@wordpress/i18n';
import { useCallback, useMemo } from '@wordpress/element';
import { useCallback, useMemo, useRef } from '@wordpress/element';
import { reset as resetIcon } from '@wordpress/icons';

/**
* Internal dependencies
Expand Down Expand Up @@ -117,6 +117,51 @@ const LabeledColorIndicator = ( { indicator, label } ) => (
</HStack>
);

const renderToggle =
( duotone, resetDuotone ) =>
( { onToggle, isOpen } ) => {
const duotoneButtonRef = useRef( undefined );

const toggleProps = {
onClick: onToggle,
className: clsx( { 'is-open': isOpen } ),
'aria-expanded': isOpen,
ref: duotoneButtonRef,
};

const removeButtonProps = {
onClick: () => {
if ( isOpen ) {
onToggle();
}
resetDuotone();
// Return focus to parent button.
duotoneButtonRef.current?.focus();
},
className: 'block-editor-panel-duotone-settings__reset',
label: __( 'Remove' ),
};

return (
<>
<Button __next40pxDefaultSize { ...toggleProps }>
<LabeledColorIndicator
indicator={ duotone }
label={ __( 'Duotone' ) }
/>
</Button>
{ duotone && (
<Button
__next40pxDefaultSize
size="small"
icon={ resetIcon }
{ ...removeButtonProps }
/>
) }
</>
);
};

export default function FiltersPanel( {
as: Wrapper = FiltersToolsPanel,
value,
Expand Down Expand Up @@ -182,24 +227,7 @@ export default function FiltersPanel( {
<Dropdown
popoverProps={ popoverProps }
className="block-editor-global-styles-filters-panel__dropdown"
renderToggle={ ( { onToggle, isOpen } ) => {
const toggleProps = {
onClick: onToggle,
className: clsx( { 'is-open': isOpen } ),
'aria-expanded': isOpen,
};

return (
<ItemGroup isBordered isSeparated>
<Item as="button" { ...toggleProps }>
<LabeledColorIndicator
indicator={ duotone }
label={ __( 'Duotone' ) }
/>
</Item>
</ItemGroup>
);
} }
renderToggle={ renderToggle( duotone, resetDuotone ) }
renderContent={ () => (
<DropdownContentWrapper paddingSize="small">
<MenuGroup label={ __( 'Duotone' ) }>
Expand Down
27 changes: 27 additions & 0 deletions packages/block-editor/src/components/global-styles/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@
}
}

.block-editor-global-styles-filters-panel__dropdown {
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: $radius-small;
}

// These styles are similar to the color palette.
.block-editor-global-styles__shadow-indicator {
appearance: none;
Expand Down Expand Up @@ -100,3 +105,25 @@
/*rtl:ignore*/
direction: ltr;
}

.block-editor-panel-duotone-settings__reset {
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-filters-panel__dropdown:hover &,
&:focus,
&:hover {
opacity: 1;
}

@media (hover: none) {
// Show reset button on devices that do not support hover.
opacity: 1;
}
}
Loading