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 (
<>
-
+