diff --git a/packages/block-editor/src/components/block-controls/index.js b/packages/block-editor/src/components/block-controls/index.js index 9ac9062a9efeff..fa947c20401158 100644 --- a/packages/block-editor/src/components/block-controls/index.js +++ b/packages/block-editor/src/components/block-controls/index.js @@ -45,19 +45,35 @@ function BlockControlsFill( { controls, children } ) { ); } -function BlockControls( { allowMultiple, ...props } ) { - const { isSelected, clientId } = useBlockEditContext(); - const isFirstMultiSelected = useSelect( ( select ) => - select( 'core/block-editor' ).isFirstMultiSelectedBlock( clientId ) +function BlockControls( { __experimentalAllowAnyMultiple, children } ) { + const { isSelected, clientId, name } = useBlockEditContext(); + const isFirstAndSameTypeMultiSelected = useSelect( + ( select ) => { + const { + getBlockName, + isFirstMultiSelectedBlock, + getMultiSelectedBlockClientIds, + } = select( 'core/block-editor' ); + + if ( ! isFirstMultiSelectedBlock( clientId ) ) { + return false; + } + + return ( + __experimentalAllowAnyMultiple || + getMultiSelectedBlockClientIds().every( + ( id ) => getBlockName( id ) === name + ) + ); + }, + [ __experimentalAllowAnyMultiple ] ); - if ( ! isSelected ) { - if ( ! allowMultiple || ! isFirstMultiSelected ) { - return null; - } + if ( ! isSelected && ! isFirstAndSameTypeMultiSelected ) { + return null; } - return ; + return { children }; } BlockControls.Slot = BlockControlsSlot; diff --git a/packages/block-editor/src/components/inspector-controls/index.js b/packages/block-editor/src/components/inspector-controls/index.js index a01b2ad590ee04..1141fc2c46bdf5 100644 --- a/packages/block-editor/src/components/inspector-controls/index.js +++ b/packages/block-editor/src/components/inspector-controls/index.js @@ -11,19 +11,35 @@ import { useBlockEditContext } from '../block-edit/context'; const { Fill, Slot } = createSlotFill( 'InspectorControls' ); -function InspectorControls( { allowMultiple, ...props } ) { - const { isSelected, clientId } = useBlockEditContext(); - const isFirstMultiSelected = useSelect( ( select ) => - select( 'core/block-editor' ).isFirstMultiSelectedBlock( clientId ) +function InspectorControls( { __experimentalAllowAnyMultiple, children } ) { + const { isSelected, clientId, name } = useBlockEditContext(); + const isFirstAndSameTypeMultiSelected = useSelect( + ( select ) => { + const { + getBlockName, + isFirstMultiSelectedBlock, + getMultiSelectedBlockClientIds, + } = select( 'core/block-editor' ); + + if ( ! isFirstMultiSelectedBlock( clientId ) ) { + return false; + } + + return ( + __experimentalAllowAnyMultiple || + getMultiSelectedBlockClientIds().every( + ( id ) => getBlockName( id ) === name + ) + ); + }, + [ __experimentalAllowAnyMultiple ] ); - if ( ! isSelected ) { - if ( ! allowMultiple || ! isFirstMultiSelected ) { - return null; - } + if ( ! isSelected && ! isFirstAndSameTypeMultiSelected ) { + return null; } - return ; + return { children }; } InspectorControls.Slot = Slot; diff --git a/packages/block-editor/src/hooks/color-panel.js b/packages/block-editor/src/hooks/color-panel.js index b1d04dc0dd02b8..94ad35c633bf0b 100644 --- a/packages/block-editor/src/hooks/color-panel.js +++ b/packages/block-editor/src/hooks/color-panel.js @@ -50,7 +50,7 @@ export default function ColorPanel( { } ); return ( - + + diff --git a/packages/block-library/src/paragraph/edit.js b/packages/block-library/src/paragraph/edit.js index 637c09c30ab4eb..391683b6b95f1a 100644 --- a/packages/block-library/src/paragraph/edit.js +++ b/packages/block-library/src/paragraph/edit.js @@ -120,7 +120,7 @@ function ParagraphBlock( { return ( <> - +