diff --git a/packages/base-styles/_variables.scss b/packages/base-styles/_variables.scss
index 8539e6a22fd4db..d1d6cb848876ee 100644
--- a/packages/base-styles/_variables.scss
+++ b/packages/base-styles/_variables.scss
@@ -111,6 +111,7 @@ $block-bg-padding--h: 2.375em;
// Dimensions.
$mobile-header-toolbar-height: 44px;
+$mobile-header-toolbar-expanded-height: 52px;
$mobile-floating-toolbar-height: 44px;
$mobile-floating-toolbar-margin: 8px;
$mobile-color-swatch: 48px;
diff --git a/packages/block-editor/src/components/inserter/index.native.js b/packages/block-editor/src/components/inserter/index.native.js
index 04085f5e57b50e..8667ccc3cd8665 100644
--- a/packages/block-editor/src/components/inserter/index.native.js
+++ b/packages/block-editor/src/components/inserter/index.native.js
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { AccessibilityInfo, Platform } from 'react-native';
+import { AccessibilityInfo, Platform, Text } from 'react-native';
import { delay } from 'lodash';
/**
@@ -15,6 +15,7 @@ import { compose, withPreferredColorScheme } from '@wordpress/compose';
import { isUnmodifiedDefaultBlock } from '@wordpress/blocks';
import {
Icon,
+ plus,
plusCircle,
plusCircleFilled,
insertAfter,
@@ -32,27 +33,51 @@ import { store as blockEditorStore } from '../../store';
const VOICE_OVER_ANNOUNCEMENT_DELAY = 1000;
-const defaultRenderToggle = ( { onToggle, disabled, style, onLongPress } ) => (
-
- }
- onClick={ onToggle }
- extraProps={ {
- hint: __( 'Double tap to add a block' ),
- // testID is present to disambiguate this element for native UI tests. It's not
- // usually required for components. See: https://git.io/JeQ7G.
- testID: 'add-block-button',
- onLongPress,
- } }
- isDisabled={ disabled }
- />
-);
+const defaultRenderToggle = ( {
+ onToggle,
+ disabled,
+ style,
+ containerStyle,
+ onLongPress,
+ useExpandedMode,
+} ) => {
+ // The "expanded mode" refers to the editor's appearance when no blocks
+ // are currently selected. The "add block" button has a separate style
+ // for the "expanded mode", which are added via the below "expandedModeViewProps"
+ // and "expandedModeViewText" variables.
+ const expandedModeViewProps = useExpandedMode && {
+ icon: ,
+ customContainerStyles: containerStyle,
+ fixedRatio: false,
+ };
+ const expandedModeViewText = (
+
+ { __( 'Add Blocks' ) }
+
+ );
+
+ return (
+ }
+ onClick={ onToggle }
+ extraProps={ {
+ hint: __( 'Double tap to add a block' ),
+ // testID is present to disambiguate this element for native UI tests. It's not
+ // usually required for components. See: https://git.io/JeQ7G.
+ testID: 'add-block-button',
+ onLongPress,
+ } }
+ isDisabled={ disabled }
+ { ...expandedModeViewProps }
+ >
+ { useExpandedMode && expandedModeViewText }
+
+ );
+};
export class Inserter extends Component {
constructor() {
@@ -219,13 +244,21 @@ export class Inserter extends Component {
renderToggle = defaultRenderToggle,
getStylesFromColorScheme,
showSeparator,
+ useExpandedMode,
} = this.props;
if ( showSeparator && isOpen ) {
return ;
}
- const style = getStylesFromColorScheme(
- styles.addBlockButton,
- styles.addBlockButtonDark
+ const style = useExpandedMode
+ ? styles[ 'inserter-menu__add-block-button-icon--expanded' ]
+ : getStylesFromColorScheme(
+ styles[ 'inserter-menu__add-block-button-icon' ],
+ styles[ 'inserter-menu__add-block-button-icon--dark' ]
+ );
+
+ const containerStyle = getStylesFromColorScheme(
+ styles[ 'inserter-menu__add-block-button' ],
+ styles[ 'inserter-menu__add-block-button--dark' ]
);
const onPress = () => {
@@ -265,7 +298,9 @@ export class Inserter extends Component {
isOpen,
disabled,
style,
+ containerStyle,
onLongPress,
+ useExpandedMode,
} ) }
( this.picker = instance ) }
diff --git a/packages/block-editor/src/components/inserter/style.native.scss b/packages/block-editor/src/components/inserter/style.native.scss
index 105af1f72b7d91..d132adf72ed9b8 100644
--- a/packages/block-editor/src/components/inserter/style.native.scss
+++ b/packages/block-editor/src/components/inserter/style.native.scss
@@ -1,13 +1,34 @@
/** @format */
-.addBlockButton {
- color: $blue-wordpress;
+.inserter-menu__add-block-button-icon {
+ color: $blue-50;
}
-.addBlockButtonDark {
+.inserter-menu__add-block-button-icon--dark {
color: $blue-30;
}
+.inserter-menu__add-block-button-icon--expanded {
+ color: $white;
+}
+
+.inserter-menu__add-block-button {
+ border-radius: 22px;
+ background-color: $blue-50;
+ margin: 8px;
+ padding: 6px 16px 6px 12px;
+}
+
+.inserter-menu__add-block-button--dark {
+ background-color: $blue-30;
+}
+
+.inserter-menu__add-block-button-text {
+ color: $white;
+ font-weight: 500;
+ align-self: center;
+}
+
.inserter-menu__list-wrapper {
flex: 1;
}
diff --git a/packages/edit-post/src/components/header/header-toolbar/index.native.js b/packages/edit-post/src/components/header/header-toolbar/index.native.js
index 3a3d1ad1f7875b..1a9ded1a63dcd5 100644
--- a/packages/edit-post/src/components/header/header-toolbar/index.native.js
+++ b/packages/edit-post/src/components/header/header-toolbar/index.native.js
@@ -6,7 +6,7 @@ import { Platform, ScrollView, View } from 'react-native';
/**
* WordPress dependencies
*/
-import { useRef } from '@wordpress/element';
+import { useCallback, useRef, useState } from '@wordpress/element';
import { compose, withPreferredColorScheme } from '@wordpress/compose';
import { withSelect, withDispatch } from '@wordpress/data';
import { withViewportMatch } from '@wordpress/viewport';
@@ -40,7 +40,11 @@ function HeaderToolbar( {
getStylesFromColorScheme,
onHideKeyboard,
isRTL,
+ noContentSelected,
} ) {
+ const wasNoContentSelected = useRef( noContentSelected );
+ const [ isInserterOpen, setIsInserterOpen ] = useState( false );
+
const scrollViewRef = useRef( null );
const scrollToStart = () => {
// scrollview doesn't seem to automatically adjust to RTL on Android so, scroll to end when Android
@@ -79,12 +83,32 @@ function HeaderToolbar( {
return isRTL ? buttons.reverse() : buttons;
};
+ const onToggleInserter = useCallback(
+ ( isOpen ) => {
+ if ( isOpen ) {
+ wasNoContentSelected.current = noContentSelected;
+ }
+ setIsInserterOpen( isOpen );
+ },
+ [ noContentSelected ]
+ );
+
+ // Expanded mode should be preserved while the inserter is open.
+ // This way we prevent style updates during the opening transition.
+ const useExpandedMode = isInserterOpen
+ ? wasNoContentSelected.current
+ : noContentSelected;
+
return (
-
+
{ renderHistoryButtons() }
{ showKeyboardHideButton && (
-
+
{
diff --git a/packages/edit-post/src/components/header/header-toolbar/style.native.scss b/packages/edit-post/src/components/header/header-toolbar/style.native.scss
index 7087d3c2cdef78..031d082706656a 100644
--- a/packages/edit-post/src/components/header/header-toolbar/style.native.scss
+++ b/packages/edit-post/src/components/header/header-toolbar/style.native.scss
@@ -1,5 +1,5 @@
-.container {
+.header-toolbar__container {
height: $mobile-header-toolbar-height;
flex-direction: row;
background-color: $app-background;
@@ -7,16 +7,20 @@
border-top-width: 1px;
}
-.containerDark {
+.header-toolbar__container--dark {
background-color: $app-background-dark-alt;
border-top-color: $background-dark-elevated;
}
-.scrollableContent {
+.header-toolbar__container--expanded {
+ height: $mobile-header-toolbar-expanded-height;
+}
+
+.header-toolbar__scrollable-content {
flex-grow: 1; // Fixes RTL issue on Android.
}
-.keyboardHideContainer {
+.header-toolbar__keyboard-hide-container {
padding-right: 0;
padding-left: 0;
padding-top: 4px;
diff --git a/packages/edit-post/src/components/layout/index.native.js b/packages/edit-post/src/components/layout/index.native.js
index 8e137b18987b42..27c743ed31bed6 100644
--- a/packages/edit-post/src/components/layout/index.native.js
+++ b/packages/edit-post/src/components/layout/index.native.js
@@ -115,7 +115,7 @@ class Layout extends Component {
// Add a margin view at the bottom for the header.
const marginBottom =
Platform.OS === 'android' && ! isHtmlView
- ? headerToolbarStyles.container.height
+ ? headerToolbarStyles[ 'header-toolbar__container' ].height
: 0;
const toolbarKeyboardAvoidingViewStyle = {
diff --git a/packages/react-native-editor/CHANGELOG.md b/packages/react-native-editor/CHANGELOG.md
index a017db6b70cf91..e39d51bd962031 100644
--- a/packages/react-native-editor/CHANGELOG.md
+++ b/packages/react-native-editor/CHANGELOG.md
@@ -11,6 +11,7 @@ For each user feature we should also add a importance categorization label to i
## Unreleased
+- [**] Update "add block" button's style in default editor view. [#39726]
- [*] Remove banner error notification on upload failure [#39694]
## 1.73.1
diff --git a/test/native/__mocks__/styleMock.js b/test/native/__mocks__/styleMock.js
index 4e08af483885f0..873fa71bb2de0c 100644
--- a/test/native/__mocks__/styleMock.js
+++ b/test/native/__mocks__/styleMock.js
@@ -156,4 +156,7 @@ module.exports = {
addMediaButton: {
color: 'white',
},
+ 'header-toolbar__container': {
+ height: 44,
+ },
};