diff --git a/docs/manifest.json b/docs/manifest.json
index 8cc39af57531e..07910088feb5e 100644
--- a/docs/manifest.json
+++ b/docs/manifest.json
@@ -1055,6 +1055,12 @@
"markdown_source": "../packages/components/src/navigator/navigator-button/README.md",
"parent": "components"
},
+ {
+ "title": "NavigatorContainer",
+ "slug": "navigator-container",
+ "markdown_source": "../packages/components/src/navigator/navigator-container/README.md",
+ "parent": "components"
+ },
{
"title": "NavigatorProvider",
"slug": "navigator-provider",
diff --git a/packages/block-editor/src/components/inserter/block-patterns-tab.js b/packages/block-editor/src/components/inserter/block-patterns-tab.js
index 83d7b899f181f..9ddd2f0606ce8 100644
--- a/packages/block-editor/src/components/inserter/block-patterns-tab.js
+++ b/packages/block-editor/src/components/inserter/block-patterns-tab.js
@@ -15,6 +15,7 @@ import {
__experimentalItem as Item,
__experimentalHStack as HStack,
__experimentalNavigatorProvider as NavigatorProvider,
+ __experimentalNavigatorContainer as NavigatorContainer,
__experimentalNavigatorScreen as NavigatorScreen,
__experimentalNavigatorButton as NavigatorButton,
__experimentalNavigatorBackButton as NavigatorBackButton,
@@ -252,47 +253,51 @@ function BlockPatternsTabNavigation( { onInsert, rootClientId } ) {
return (
-
-
- { categories.map( ( category ) => (
-
-
- { category.label }
-
-
-
- ) ) }
-
-
+
+
+
+ { categories.map( ( category ) => (
+
+
+ { category.label }
+
+
+
+ ) ) }
+
+
- { categories.map( ( category ) => (
-
- (
+
- { __( 'Back' ) }
-
-
-
- ) ) }
+
+ { __( 'Back' ) }
+
+
+
+ ) ) }
+
);
}
diff --git a/packages/block-editor/src/components/inserter/media-tab/media-tab.js b/packages/block-editor/src/components/inserter/media-tab/media-tab.js
index 639a63df271d0..bae1b1381393d 100644
--- a/packages/block-editor/src/components/inserter/media-tab/media-tab.js
+++ b/packages/block-editor/src/components/inserter/media-tab/media-tab.js
@@ -13,6 +13,7 @@ import {
__experimentalItem as Item,
__experimentalHStack as HStack,
__experimentalNavigatorProvider as NavigatorProvider,
+ __experimentalNavigatorContainer as NavigatorContainer,
__experimentalNavigatorScreen as NavigatorScreen,
__experimentalNavigatorButton as NavigatorButton,
__experimentalNavigatorBackButton as NavigatorBackButton,
@@ -134,47 +135,51 @@ function MediaTab( {
function MediaTabNavigation( { onInsert, rootClientId, mediaCategories } ) {
return (
-
-
- { mediaCategories.map( ( category ) => (
-
-
- { category.label }
-
-
-
- ) ) }
-
-
- { mediaCategories.map( ( category ) => (
-
-
- { __( 'Back' ) }
-
-
+
+
+
+ { mediaCategories.map( ( category ) => (
+
+
+ { category.label }
+
+
+
+ ) ) }
+
- ) ) }
+ { mediaCategories.map( ( category ) => (
+
+
+ { __( 'Back' ) }
+
+
+
+ ) ) }
+
);
}
diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md
index 22a08c2f0dd08..76cd4f9b54b7f 100644
--- a/packages/components/CHANGELOG.md
+++ b/packages/components/CHANGELOG.md
@@ -14,6 +14,10 @@
- NumberControl: refactor styles/tests/stories to TypeScript, replace fireEvent with user-event ([#45990](https://github.com/WordPress/gutenberg/pull/45990)).
+### Experimental
+
+- `Navigator`: `NavigatorScreen` components must now be placed in a `NavigatorCnotainer` component ([#XXX](https://github.com/WordPress/gutenberg/pull/XXX)).
+
## 22.1.0 (2022-11-16)
### Enhancements
diff --git a/packages/components/src/index.js b/packages/components/src/index.js
index 114884690e482..b3838592818d5 100644
--- a/packages/components/src/index.js
+++ b/packages/components/src/index.js
@@ -112,6 +112,7 @@ export { default as __experimentalNavigationItem } from './navigation/item';
export { default as __experimentalNavigationMenu } from './navigation/menu';
export {
NavigatorProvider as __experimentalNavigatorProvider,
+ NavigatorContainer as __experimentalNavigatorContainer,
NavigatorScreen as __experimentalNavigatorScreen,
NavigatorButton as __experimentalNavigatorButton,
NavigatorBackButton as __experimentalNavigatorBackButton,
diff --git a/packages/components/src/navigator/index.ts b/packages/components/src/navigator/index.ts
index 49f5655dc4b39..e5c19c26fcc52 100644
--- a/packages/components/src/navigator/index.ts
+++ b/packages/components/src/navigator/index.ts
@@ -1,4 +1,5 @@
export { NavigatorProvider } from './navigator-provider';
+export { NavigatorContainer } from './navigator-container';
export { NavigatorScreen } from './navigator-screen';
export { NavigatorButton } from './navigator-button';
export { NavigatorBackButton } from './navigator-back-button';
diff --git a/packages/components/src/navigator/navigator-back-button/README.md b/packages/components/src/navigator/navigator-back-button/README.md
index d147027697597..526931fd3fd55 100644
--- a/packages/components/src/navigator/navigator-back-button/README.md
+++ b/packages/components/src/navigator/navigator-back-button/README.md
@@ -4,7 +4,7 @@
This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
-The `NavigatorBackButton` component can be used to navigate to a screen and should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorScreen`](/packages/components/src/navigator/navigator-screen/README.md) and the [`NavigatorButton`](/packages/components/src/navigator/navigator-button/README.md) components (or the `useNavigator` hook).
+The `NavigatorBackButton` component can be used to navigate to a screen and should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorContainer`](/packages/components/src/navigator/navigator-container/README.md), the [`NavigatorScreen`](/packages/components/src/navigator/navigator-screen/README.md) and the [`NavigatorButton`](/packages/components/src/navigator/navigator-button/README.md) components (or the `useNavigator` hook).
## Usage
diff --git a/packages/components/src/navigator/navigator-back-button/component.tsx b/packages/components/src/navigator/navigator-back-button/component.tsx
index 498096edd7d46..8a77adab0a621 100644
--- a/packages/components/src/navigator/navigator-back-button/component.tsx
+++ b/packages/components/src/navigator/navigator-back-button/component.tsx
@@ -23,13 +23,15 @@ function UnconnectedNavigatorBackButton(
/**
* The `NavigatorBackButton` component can be used to navigate to a screen and
* should be used in combination with the `NavigatorProvider`, the
- * `NavigatorScreen` and the `NavigatorButton` components (or the `useNavigator`
+ * `NavigatorContainer`, the `NavigatorScreen` and the `NavigatorButton`
+ * components (or the `useNavigator`
* hook).
*
* @example
* ```jsx
* import {
* __experimentalNavigatorProvider as NavigatorProvider,
+ * __experimentalNavigatorContainer as NavigatorContainer,
* __experimentalNavigatorScreen as NavigatorScreen,
* __experimentalNavigatorButton as NavigatorButton,
* __experimentalNavigatorBackButton as NavigatorBackButton,
@@ -37,19 +39,21 @@ function UnconnectedNavigatorBackButton(
*
* const MyNavigation = () => (
*
- *
- * This is the home screen.
- *
- * Navigate to child screen.
- *
- *
+ *
+ *
+ * This is the home screen.
+ *
+ * Navigate to child screen.
+ *
+ *
*
- *
- * This is the child screen.
- *
- * Go back
- *
- *
+ *
+ * This is the child screen.
+ *
+ * Go back
+ *
+ *
+ *
*
* );
* ```
diff --git a/packages/components/src/navigator/navigator-button/README.md b/packages/components/src/navigator/navigator-button/README.md
index fc96c358cdb02..638d4a15f78b8 100644
--- a/packages/components/src/navigator/navigator-button/README.md
+++ b/packages/components/src/navigator/navigator-button/README.md
@@ -4,7 +4,7 @@
This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
-The `NavigatorButton` component can be used to navigate to a screen and should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorScreen`](/packages/components/src/navigator/navigator-screen/README.md) and the [`NavigatorBackButton`](/packages/components/src/navigator/navigator-back-button/README.md) components (or the `useNavigator` hook).
+The `NavigatorButton` component can be used to navigate to a screen and should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorContainer`](/packages/components/src/navigator/navigator-container/README.md), the [`NavigatorScreen`](/packages/components/src/navigator/navigator-screen/README.md) and the [`NavigatorBackButton`](/packages/components/src/navigator/navigator-back-button/README.md) components (or the `useNavigator` hook).
## Usage
diff --git a/packages/components/src/navigator/navigator-button/component.tsx b/packages/components/src/navigator/navigator-button/component.tsx
index 2e446dac010c0..e48fe4a432204 100644
--- a/packages/components/src/navigator/navigator-button/component.tsx
+++ b/packages/components/src/navigator/navigator-button/component.tsx
@@ -21,14 +21,16 @@ function UnconnectedNavigatorButton(
}
/**
- * The `NavigatorButton` component can be used to navigate to a screen and should
- * be used in combination with the `NavigatorProvider`, the `NavigatorScreen`
- * and the `NavigatorBackButton` components (or the `useNavigator` hook).
+ * The `NavigatorButton` component can be used to navigate to a screen and
+ * should be used in combination with the `NavigatorProvider`, the
+ * `NavigatorContainer`, the `NavigatorScreen` and the `NavigatorBackButton`
+ * components (or the `useNavigator` hook).
*
* @example
* ```jsx
* import {
* __experimentalNavigatorProvider as NavigatorProvider,
+ * __experimentalNavigatorContainer as NavigatorContainer,
* __experimentalNavigatorScreen as NavigatorScreen,
* __experimentalNavigatorButton as NavigatorButton,
* __experimentalNavigatorBackButton as NavigatorBackButton,
@@ -36,19 +38,21 @@ function UnconnectedNavigatorButton(
*
* const MyNavigation = () => (
*
- *
- * This is the home screen.
- *
- * Navigate to child screen.
- *
- *
+ *
+ *
+ * This is the home screen.
+ *
+ * Navigate to child screen.
+ *
+ *
*
- *
- * This is the child screen.
- *
- * Go back
- *
- *
+ *
+ * This is the child screen.
+ *
+ * Go back
+ *
+ *
+ *
*
* );
* ```
diff --git a/packages/components/src/navigator/navigator-container/README.md b/packages/components/src/navigator/navigator-container/README.md
new file mode 100644
index 0000000000000..8b51cabafab1a
--- /dev/null
+++ b/packages/components/src/navigator/navigator-container/README.md
@@ -0,0 +1,21 @@
+# `NavigatorContainer`
+
+
+This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
+
+
+The `NavigatorContainer` component is a container for `NavigatorScreen` components to be placed in. It should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorContainer`](/packages/components/src/navigator/navigator-container/README.md), the [`NavigatorScreen`](/packages/components/src/navigator/navigator-screen/README.md) and the [`NavigatorBackButton`](/packages/components/src/navigator/navigator-back-button/README.md) components (or the `useNavigator` hook).
+
+## Usage
+
+Refer to [the `NavigatorProvider` component](/packages/components/src/navigator/navigator-provider/README.md#usage) for a usage example.
+
+## Props
+
+The component accepts the following props:
+
+### `className`: `string`
+
+Class name to add to the container element.
+
+- Required: No
diff --git a/packages/components/src/navigator/navigator-container/component.tsx b/packages/components/src/navigator/navigator-container/component.tsx
new file mode 100644
index 0000000000000..06e72de6f7680
--- /dev/null
+++ b/packages/components/src/navigator/navigator-container/component.tsx
@@ -0,0 +1,89 @@
+/**
+ * External dependencies
+ */
+import type { ForwardedRef } from 'react';
+import { css } from '@emotion/react';
+
+/**
+ * WordPress dependencies
+ */
+import { useMemo } from '@wordpress/element';
+
+/**
+ * Internal dependencies
+ */
+import {
+ contextConnect,
+ useContextSystem,
+ WordPressComponentProps,
+} from '../../ui/context';
+import { useCx } from '../../utils/hooks/use-cx';
+import { View } from '../../view';
+import type { NavigatorContainerProps } from '../types';
+
+function UnconnectedNavigatorContainer(
+ props: WordPressComponentProps< NavigatorContainerProps, 'div' >,
+ forwardedRef: ForwardedRef< any >
+) {
+ const { children, className, ...otherProps } = useContextSystem(
+ props,
+ 'NavigatorContainer'
+ );
+
+ const cx = useCx();
+ const classes = useMemo(
+ // Prevents horizontal overflow while animating screen transitions.
+ () => cx( css( { overflowX: 'hidden' } ), className ),
+ [ className, cx ]
+ );
+
+ return (
+
+ { children }
+
+ );
+}
+
+/**
+ * The `NavigatorContainer` component is a container for `NavigatorScreen`
+ * components to be placed in. It should be used in combination with the
+ * `NavigatorProvider`, the `NavigatorContainer`, the `NavigatorScreen` and the
+ * `NavigatorBackButton` components (or the `useNavigator` hook).
+ *
+ * @example
+ * ```jsx
+ * import {
+ * __experimentalNavigatorProvider as NavigatorProvider,
+ * __experimentalNavigatorContainer as NavigatorContainer,
+ * __experimentalNavigatorScreen as NavigatorScreen,
+ * __experimentalNavigatorButton as NavigatorButton,
+ * __experimentalNavigatorBackButton as NavigatorBackButton,
+ * } from '@wordpress/components';
+ *
+ * const MyNavigation = () => (
+ *
+ *
+ *
+ * This is the home screen.
+ *
+ * Navigate to child screen.
+ *
+ *
+ *
+ *
+ * This is the child screen.
+ *
+ * Go back
+ *
+ *
+ *
+ *
+ * );
+ * ```
+ */
+export const NavigatorContainer = contextConnect(
+ UnconnectedNavigatorContainer,
+ 'NavigatorContainer'
+);
+
+export default NavigatorContainer;
diff --git a/packages/components/src/navigator/navigator-container/index.ts b/packages/components/src/navigator/navigator-container/index.ts
new file mode 100644
index 0000000000000..8e329cc3699b9
--- /dev/null
+++ b/packages/components/src/navigator/navigator-container/index.ts
@@ -0,0 +1 @@
+export { default as NavigatorContainer } from './component';
diff --git a/packages/components/src/navigator/navigator-provider/README.md b/packages/components/src/navigator/navigator-provider/README.md
index d552d2bb20634..ff3200a2e9429 100644
--- a/packages/components/src/navigator/navigator-provider/README.md
+++ b/packages/components/src/navigator/navigator-provider/README.md
@@ -11,6 +11,7 @@ The `NavigatorProvider` component allows rendering nested views/panels/menus (vi
```jsx
import {
__experimentalNavigatorProvider as NavigatorProvider,
+ __experimentalNavigatorContainer as NavigatorContainer,
__experimentalNavigatorScreen as NavigatorScreen,
__experimentalNavigatorButton as NavigatorButton,
__experimentalNavigatorBackButton as NavigatorBackButton,
@@ -18,19 +19,21 @@ import {
const MyNavigation = () => (
-
- This is the home screen.
-
- Navigate to child screen.
-
-
-
-
- This is the child screen.
-
- Go back
-
-
+
+
+ This is the home screen.
+
+ Navigate to child screen.
+
+
+
+
+ This is the child screen.
+
+ Go back
+
+
+
);
```
diff --git a/packages/components/src/navigator/navigator-provider/component.tsx b/packages/components/src/navigator/navigator-provider/component.tsx
index 57b18f6d92dba..6cccefd452b80 100644
--- a/packages/components/src/navigator/navigator-provider/component.tsx
+++ b/packages/components/src/navigator/navigator-provider/component.tsx
@@ -1,37 +1,47 @@
-/**
- * External dependencies
- */
-import type { ForwardedRef } from 'react';
-import { css } from '@emotion/react';
-
/**
* WordPress dependencies
*/
-import { useMemo, useState, useCallback } from '@wordpress/element';
+import {
+ useMemo,
+ useState,
+ useCallback,
+ Children,
+ isValidElement,
+} from '@wordpress/element';
+import deprecated from '@wordpress/deprecated';
/**
* Internal dependencies
*/
-import {
- contextConnect,
- useContextSystem,
- WordPressComponentProps,
-} from '../../ui/context';
-import { useCx } from '../../utils/hooks/use-cx';
-import { View } from '../../view';
+import { useContextSystem, WordPressComponentProps } from '../../ui/context';
+import { contextConnectWithoutRef } from '../../ui/context/context-connect';
import { NavigatorContext } from '../context';
import type {
NavigatorProviderProps,
NavigatorLocation,
NavigatorContext as NavigatorContextType,
} from '../types';
+import { NavigatorScreen } from '../navigator-screen';
+import { NavigatorContainer } from '../navigator-container';
function UnconnectedNavigatorProvider(
- props: WordPressComponentProps< NavigatorProviderProps, 'div' >,
- forwardedRef: ForwardedRef< any >
+ props: WordPressComponentProps< NavigatorProviderProps, 'div', false >
) {
- const { initialPath, children, className, ...otherProps } =
- useContextSystem( props, 'NavigatorProvider' );
+ const contextProps = useContextSystem( props, 'NavigatorProvider' );
+ const { initialPath } = contextProps;
+ let { children } = contextProps;
+
+ const hasScreenChildren = Children.toArray( children ).some(
+ ( child ) => isValidElement( child ) && child.type === NavigatorScreen
+ );
+ if ( hasScreenChildren ) {
+ deprecated( 'NavigatorScreen as child of NavigatorProvider', {
+ since: '6.2',
+ version: '6.3',
+ alternative: 'NavigatorContainer',
+ } );
+ children = { children } ;
+ }
const [ locationHistory, setLocationHistory ] = useState<
NavigatorLocation[]
@@ -81,25 +91,16 @@ function UnconnectedNavigatorProvider(
[ locationHistory, goTo, goBack ]
);
- const cx = useCx();
- const classes = useMemo(
- // Prevents horizontal overflow while animating screen transitions.
- () => cx( css( { overflowX: 'hidden' } ), className ),
- [ className, cx ]
- );
-
return (
-
-
- { children }
-
-
+
+ { children }
+
);
}
/**
* The `NavigatorProvider` component allows rendering nested views/panels/menus
- * (via the `NavigatorScreen` component and navigate between these different
+ * (via the `NavigatorScreen` component) and navigate between these different
* view (via the `NavigatorButton` and `NavigatorBackButton` components or the
* `useNavigator` hook).
*
@@ -107,6 +108,7 @@ function UnconnectedNavigatorProvider(
* ```jsx
* import {
* __experimentalNavigatorProvider as NavigatorProvider,
+ * __experimentalNavigatorContainer as NavigatorContainer,
* __experimentalNavigatorScreen as NavigatorScreen,
* __experimentalNavigatorButton as NavigatorButton,
* __experimentalNavigatorBackButton as NavigatorBackButton,
@@ -114,24 +116,26 @@ function UnconnectedNavigatorProvider(
*
* const MyNavigation = () => (
*
- *
- * This is the home screen.
- *
- * Navigate to child screen.
- *
- *
+ *
+ *
+ * This is the home screen.
+ *
+ * Navigate to child screen.
+ *
+ *
*
- *
- * This is the child screen.
- *
- * Go back
- *
- *
+ *
+ * This is the child screen.
+ *
+ * Go back
+ *
+ *
+ *
*
* );
* ```
*/
-export const NavigatorProvider = contextConnect(
+export const NavigatorProvider = contextConnectWithoutRef(
UnconnectedNavigatorProvider,
'NavigatorProvider'
);
diff --git a/packages/components/src/navigator/navigator-screen/README.md b/packages/components/src/navigator/navigator-screen/README.md
index 5ba5af44fe8c1..c58062bad971e 100644
--- a/packages/components/src/navigator/navigator-screen/README.md
+++ b/packages/components/src/navigator/navigator-screen/README.md
@@ -4,7 +4,7 @@
This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
-The `NavigatorScreen` component represents a single view/screen/panel and should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorButton`](/packages/components/src/navigator/navigator-button/README.md) and the [`NavigatorBackButton`](/packages/components/src/navigator/navigator-back-button/README.md) components (or the `useNavigator` hook).
+The `NavigatorScreen` component represents a single view/screen/panel and should be used in combination with the [`NavigatorProvider`](/packages/components/src/navigator/navigator-provider/README.md), the [`NavigatorContainer`](/packages/components/src/navigator/navigator-container/README.md), the [`NavigatorButton`](/packages/components/src/navigator/navigator-button/README.md) and the [`NavigatorBackButton`](/packages/components/src/navigator/navigator-back-button/README.md) components (or the `useNavigator` hook).
## Usage
diff --git a/packages/components/src/navigator/navigator-screen/component.tsx b/packages/components/src/navigator/navigator-screen/component.tsx
index 266bd553e0a8d..9892608df1d1f 100644
--- a/packages/components/src/navigator/navigator-screen/component.tsx
+++ b/packages/components/src/navigator/navigator-screen/component.tsx
@@ -209,6 +209,7 @@ function UnconnectedNavigatorScreen(
* ```jsx
* import {
* __experimentalNavigatorProvider as NavigatorProvider,
+ * __experimentalNavigatorContainer as NavigatorContainer,
* __experimentalNavigatorScreen as NavigatorScreen,
* __experimentalNavigatorButton as NavigatorButton,
* __experimentalNavigatorBackButton as NavigatorBackButton,
@@ -216,19 +217,21 @@ function UnconnectedNavigatorScreen(
*
* const MyNavigation = () => (
*
- *
- * This is the home screen.
- *
- * Navigate to child screen.
- *
- *
+ *
+ *
+ * This is the home screen.
+ *
+ * Navigate to child screen.
+ *
+ *
*
- *
- * This is the child screen.
- *
- * Go back
- *
- *
+ *
+ * This is the child screen.
+ *
+ * Go back
+ *
+ *
+ *
*
* );
* ```
diff --git a/packages/components/src/navigator/stories/index.tsx b/packages/components/src/navigator/stories/index.tsx
index a1f6e2fbf0c9a..1236554b4fc1d 100644
--- a/packages/components/src/navigator/stories/index.tsx
+++ b/packages/components/src/navigator/stories/index.tsx
@@ -12,6 +12,7 @@ import { HStack } from '../../h-stack';
import Dropdown from '../../dropdown';
import {
NavigatorProvider,
+ NavigatorContainer,
NavigatorScreen,
NavigatorButton,
NavigatorBackButton,
@@ -22,7 +23,6 @@ const meta: ComponentMeta< typeof NavigatorProvider > = {
title: 'Components (Experimental)/Navigator',
subcomponents: { NavigatorScreen, NavigatorButton, NavigatorBackButton },
argTypes: {
- as: { control: { type: null } },
children: { control: { type: null } },
initialPath: { control: { type: null } },
},
@@ -37,135 +37,139 @@ const Template: ComponentStory< typeof NavigatorProvider > = ( {
style,
...props
} ) => (
-
-
-
-
- This is the home screen.
+
+
+
+
+
+ This is the home screen.
-
-
- Navigate to child screen.
-
+
+
+ Navigate to child screen.
+
-
- Navigate to screen with horizontal overflow.
-
+
+ Navigate to screen with horizontal overflow.
+
-
- Navigate to screen with sticky content.
-
+
+ Navigate to screen with sticky content.
+
- void;
- } ) => (
-
- Open test dialog
-
- ) }
- renderContent={ () => (
-
- Go
- Stuff
-
- ) }
- />
-
-
-
-
+ void;
+ } ) => (
+
+ Open test dialog
+
+ ) }
+ renderContent={ () => (
+
+ Go
+ Stuff
+
+ ) }
+ />
+
+
+
+
-
-
-
- This is the child screen.
-
- Go back
-
-
-
-
+
+
+
+ This is the child screen.
+
+ Go back
+
+
+
+
-
-
-
-
- Go back
-
-
-
+
+
+
+ Go back
+
+
- ¯\_(ツ)_/¯
-
-
-
-
-
+
+ ¯\_(ツ)_/¯
+
+
+
+
+
-
-
-
-
- Go back
-
-
-
-
-
A wild sticky element appears
-
-
-
-
-
+
+
+
+ Go back
+
+
+
+
+
A wild sticky element appears
+
+
+
+
+
+
Another wild sticky element appears
+
+
+
+
- Another wild sticky element appears
-
-
-
-
- Primary noop
-
-
-
+ Primary noop
+
+
+
+
);
diff --git a/packages/components/src/navigator/test/index.tsx b/packages/components/src/navigator/test/index.tsx
index be836f0152fc2..ba4c081972a81 100644
--- a/packages/components/src/navigator/test/index.tsx
+++ b/packages/components/src/navigator/test/index.tsx
@@ -15,6 +15,7 @@ import { useState } from '@wordpress/element';
*/
import {
NavigatorProvider,
+ NavigatorContainer,
NavigatorScreen,
NavigatorButton,
NavigatorBackButton,
@@ -146,73 +147,75 @@ const MyNavigation = ( {
return (
<>
-
- { SCREEN_TEXT.home }
-
- { BUTTON_TEXT.toNonExistingScreen }
-
-
- { BUTTON_TEXT.toChildScreen }
-
-
- { BUTTON_TEXT.toInvalidHtmlPathScreen }
-
-
-
-
- { SCREEN_TEXT.child }
-
- { BUTTON_TEXT.toNestedScreen }
-
-
- { BUTTON_TEXT.back }
-
-
- Inner input
- {
- setInnerInputValue( e.target.value );
- } }
- value={ innerInputValue }
- />
-
-
-
- { SCREEN_TEXT.nested }
-
- { BUTTON_TEXT.back }
-
-
-
-
- { SCREEN_TEXT.invalidHtmlPath }
-
- { BUTTON_TEXT.back }
-
-
-
- { /* A `NavigatorScreen` with `path={ PATHS.NOT_FOUND }` is purposefully not included. */ }
+
+
+ { SCREEN_TEXT.home }
+
+ { BUTTON_TEXT.toNonExistingScreen }
+
+
+ { BUTTON_TEXT.toChildScreen }
+
+
+ { BUTTON_TEXT.toInvalidHtmlPathScreen }
+
+
+
+
+ { SCREEN_TEXT.child }
+
+ { BUTTON_TEXT.toNestedScreen }
+
+
+ { BUTTON_TEXT.back }
+
+
+ Inner input
+ {
+ setInnerInputValue( e.target.value );
+ } }
+ value={ innerInputValue }
+ />
+
+
+
+ { SCREEN_TEXT.nested }
+
+ { BUTTON_TEXT.back }
+
+
+
+
+ { SCREEN_TEXT.invalidHtmlPath }
+
+ { BUTTON_TEXT.back }
+
+
+
+ { /* A `NavigatorScreen` with `path={ PATHS.NOT_FOUND }` is purposefully not included. */ }
+
Outer input
diff --git a/packages/components/src/navigator/types.ts b/packages/components/src/navigator/types.ts
index 0b1a6a077ea7a..f58f2a07518be 100644
--- a/packages/components/src/navigator/types.ts
+++ b/packages/components/src/navigator/types.ts
@@ -34,6 +34,13 @@ export type NavigatorProviderProps = {
children: ReactNode;
};
+export type NavigatorContainerProps = {
+ /**
+ * The children elements.
+ */
+ children: ReactNode;
+};
+
export type NavigatorScreenProps = {
/**
* The screen's path, matched against the current path stored in the navigator.
diff --git a/packages/edit-post/src/components/preferences-modal/test/__snapshots__/index.js.snap b/packages/edit-post/src/components/preferences-modal/test/__snapshots__/index.js.snap
index f9f7be89c82a0..d13f1a2de0861 100644
--- a/packages/edit-post/src/components/preferences-modal/test/__snapshots__/index.js.snap
+++ b/packages/edit-post/src/components/preferences-modal/test/__snapshots__/index.js.snap
@@ -696,9 +696,9 @@ exports[`EditPostPreferencesModal should match snapshot when the modal is active
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
- { blocks.map( ( block ) => (
-
-
+
+
- ) ) }
-
+
+
+
- { blocks.map( ( block ) => (
-
- ) ) }
+ { blocks.map( ( block ) => (
+
+
+
+ ) ) }
+
+
+
+ { blocks.map( ( block ) => (
+
+ ) ) }
+
);
}
diff --git a/packages/interface/src/components/preferences-modal-tabs/index.js b/packages/interface/src/components/preferences-modal-tabs/index.js
index bc8f7358b834d..3772e09b65f1c 100644
--- a/packages/interface/src/components/preferences-modal-tabs/index.js
+++ b/packages/interface/src/components/preferences-modal-tabs/index.js
@@ -4,6 +4,7 @@
import { useViewportMatch } from '@wordpress/compose';
import {
__experimentalNavigatorProvider as NavigatorProvider,
+ __experimentalNavigatorContainer as NavigatorContainer,
__experimentalNavigatorScreen as NavigatorScreen,
__experimentalNavigatorButton as NavigatorButton,
__experimentalNavigatorBackButton as NavigatorBackButton,
@@ -76,78 +77,77 @@ export default function PreferencesModalTabs( { sections } ) {
);
} else {
modalContent = (
-
-
-
-
-
- { tabs.map( ( tab ) => {
- return (
-
+
+
+
+
+
+ { tabs.map( ( tab ) => {
+ return (
+
+
+
+
+ { tab.title }
+
+
+
+
+
+
+
+ );
+ } ) }
+
+
+
+
+ { sections.length &&
+ sections.map( ( section ) => {
+ return (
+
+
+
-
-
-
- { tab.title }
-
-
-
-
-
-
-
- );
- } ) }
-
-
-
-
- { sections.length &&
- sections.map( ( section ) => {
- return (
-
-
-
-
-
- { section.tabLabel }
-
-
- { section.content }
-
-
- );
- } ) }
+
+
+ { section.tabLabel }
+
+
+ { section.content }
+
+
+ );
+ } ) }
+
);
}