From 2ab371d3c3cdb6dbb72d4ada2abe070c28c1e80c Mon Sep 17 00:00:00 2001 From: tellthemachines Date: Wed, 25 Feb 2026 16:41:54 +1100 Subject: [PATCH] Add previews for style variation transforms --- .../src/components/block-styles/menu-items.js | 19 ++++---- .../block-switcher/block-styles-menu.js | 48 ++++++++++++++++++- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/packages/block-editor/src/components/block-styles/menu-items.js b/packages/block-editor/src/components/block-styles/menu-items.js index 927a7f9d7a5099..321c4d79f81ba6 100644 --- a/packages/block-editor/src/components/block-styles/menu-items.js +++ b/packages/block-editor/src/components/block-styles/menu-items.js @@ -4,19 +4,14 @@ import { MenuItem, __experimentalText as Text } from '@wordpress/components'; import { check } from '@wordpress/icons'; -/** - * Internal dependencies - */ -import useStylesForBlocks from './use-styles-for-block'; - const noop = () => {}; -export default function BlockStylesMenuItems( { clientId, onSwitch = noop } ) { - const { onSelect, stylesToRender, activeStyle } = useStylesForBlocks( { - clientId, - onSwitch, - } ); - +export default function BlockStylesMenuItems( { + stylesToRender, + activeStyle, + onSelect = noop, + onHoverStyle = noop, +} ) { if ( ! stylesToRender || stylesToRender.length === 0 ) { return null; } @@ -29,6 +24,8 @@ export default function BlockStylesMenuItems( { clientId, onSwitch = noop } ) { key={ style.name } icon={ activeStyle.name === style.name ? check : null } onClick={ () => onSelect( style ) } + onMouseEnter={ () => onHoverStyle( style ) } + onMouseLeave={ () => onHoverStyle( null ) } > { + if ( ! hoveredStyle || ! genericPreviewBlock ) { + return null; + } + const previewClassName = replaceActiveStyle( + className, + activeStyle, + hoveredStyle + ); + return [ + { + ...genericPreviewBlock, + attributes: { + ...( genericPreviewBlock.attributes || {} ), + className: previewClassName, + }, + }, + ]; + }, [ hoveredStyle, genericPreviewBlock, className, activeStyle ] ); + + if ( ! stylesToRender || stylesToRender.length === 0 ) { + return null; + } return ( - + { previewBlocks && ( + + ) } + ); }