diff --git a/docs/manifest.json b/docs/manifest.json index 7886fe11ea0628..02ac6098ef9679 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1068,9 +1068,15 @@ "parent": "components" }, { - "title": "Navigator", - "slug": "navigator", - "markdown_source": "../packages/components/src/navigator/README.md", + "title": "NavigatorProvider", + "slug": "navigator-provider", + "markdown_source": "../packages/components/src/navigator/navigator-provider/README.md", + "parent": "components" + }, + { + "title": "NavigatorScreen", + "slug": "navigator-screen", + "markdown_source": "../packages/components/src/navigator/navigator-screen/README.md", "parent": "components" }, { diff --git a/packages/components/src/index.js b/packages/components/src/index.js index 4e3560104e3b31..28f8e245941e81 100644 --- a/packages/components/src/index.js +++ b/packages/components/src/index.js @@ -97,7 +97,7 @@ export { default as __experimentalNavigationGroup } from './navigation/group'; export { default as __experimentalNavigationItem } from './navigation/item'; export { default as __experimentalNavigationMenu } from './navigation/menu'; export { - Navigator as __experimentalNavigator, + NavigatorProvider as __experimentalNavigatorProvider, NavigatorScreen as __experimentalNavigatorScreen, useNavigator as __experimentalUseNavigator, } from './navigator'; diff --git a/packages/components/src/navigator/index.js b/packages/components/src/navigator/index.js index c00a6a12043366..b30e5cdf396de8 100644 --- a/packages/components/src/navigator/index.js +++ b/packages/components/src/navigator/index.js @@ -1,3 +1,3 @@ -export { default as Navigator } from './navigator'; -export { default as NavigatorScreen } from './screen'; +export { default as NavigatorProvider } from './navigator-provider'; +export { default as NavigatorScreen } from './navigator-screen'; export { default as useNavigator } from './use-navigator'; diff --git a/packages/components/src/navigator/README.md b/packages/components/src/navigator/navigator-provider/README.md similarity index 58% rename from packages/components/src/navigator/README.md rename to packages/components/src/navigator/navigator-provider/README.md index 99eb5e78413f43..dead39a0bb7f6d 100644 --- a/packages/components/src/navigator/README.md +++ b/packages/components/src/navigator/navigator-provider/README.md @@ -1,18 +1,18 @@ -# Navigator +# `NavigatorProvider`
This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
-The Navigator components allows rendering nested panels or menus (also called screens) and navigate between these different states. The Global Styles sidebar is an example of this. +The `NavigatorProvider` component allows rendering nested panels or menus (via the [`NavigatorScreen` component](/packages/components/src/navigator/navigator-screen/README.md)) and navigate between these different states (via the `useNavigator` hook). The Global Styles sidebar is an example of this. -The components is not opinionated in terms of UI, it lets compose any UI components to navigate between the nested screens. +The `Navigator*` family of components is _not_ opinionated in terms of UI, and can be composed with any UI components to navigate between the nested screens. ## Usage ```jsx import { - __experimentalNavigator as Navigator, + __experimentalNavigatorProvider as NavigatorProvider, __experimentalNavigatorScreen as NavigatorScreen, __experimentalUseNavigator as useNavigator, } from '@wordpress/components'; @@ -32,7 +32,7 @@ function NavigatorButton( { } const MyNavigation = () => ( - +

This is the home screen.

@@ -46,43 +46,31 @@ const MyNavigation = () => ( Go back
-
+ ); ``` -## Navigator Props +## Props -`Navigator` supports the following props. +The component accepts the following props: -### `initialPath` - -- Type: `string` -- Required: No +### `initialPath`: `string` The initial active path. -## NavigatorScreen Props - -`NavigatorScreen` supports the following props. - -### `path` - -- Type: `string` -- Required: Yes +- Required: No -The path of the current screen. -## The navigator object. +## The navigator object You can retrieve a `navigator` instance by using the `useNavigator` hook. -The navigator offers the following methods: -### `push` +The hook offers the following methods: -- Type: `( path: string, options ) => void` +### `push`: `( path: string, options ) => void` The `push` function allows you to navigate to a given path. The second argument can augment the navigation operations with different options. The available options are: - - `isBack` (`boolean): A boolean flag indicating that we're moving back to a previous state. +- `isBack` (`boolean): A boolean flag indicating that we're moving back to a previous state. --> diff --git a/packages/components/src/navigator/navigator.js b/packages/components/src/navigator/navigator-provider/component.js similarity index 68% rename from packages/components/src/navigator/navigator.js rename to packages/components/src/navigator/navigator-provider/component.js index 2073374771921c..a49553ac5377c4 100644 --- a/packages/components/src/navigator/navigator.js +++ b/packages/components/src/navigator/navigator-provider/component.js @@ -6,9 +6,9 @@ import { useState } from '@wordpress/element'; /** * Internal dependencies */ -import { NavigatorContext } from './context'; +import { NavigatorContext } from '../context'; -function Navigator( { initialPath, children } ) { +function NavigatorProvider( { initialPath, children } ) { const [ path, setPath ] = useState( { path: initialPath } ); return ( @@ -18,4 +18,4 @@ function Navigator( { initialPath, children } ) { ); } -export default Navigator; +export default NavigatorProvider; diff --git a/packages/components/src/navigator/navigator-provider/index.js b/packages/components/src/navigator/navigator-provider/index.js new file mode 100644 index 00000000000000..b404d7fd44a81a --- /dev/null +++ b/packages/components/src/navigator/navigator-provider/index.js @@ -0,0 +1 @@ +export { default } from './component'; diff --git a/packages/components/src/navigator/navigator-screen/README.md b/packages/components/src/navigator/navigator-screen/README.md new file mode 100644 index 00000000000000..65957155b04881 --- /dev/null +++ b/packages/components/src/navigator/navigator-screen/README.md @@ -0,0 +1,22 @@ +# `NavigatorScreen` + +
+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/menu and is supposed to be used in combination with [the `NavigatorProvider` component](/packages/components/src/navigator/navigator-provider/README.md). + +## 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: + +### `path` + +- Type: `string` +- Required: Yes + +The path of the current screen. diff --git a/packages/components/src/navigator/screen.js b/packages/components/src/navigator/navigator-screen/component.js similarity index 97% rename from packages/components/src/navigator/screen.js rename to packages/components/src/navigator/navigator-screen/component.js index 1d27e413a093f8..3a5e33605a0b3e 100644 --- a/packages/components/src/navigator/screen.js +++ b/packages/components/src/navigator/navigator-screen/component.js @@ -14,7 +14,7 @@ import { isRTL } from '@wordpress/i18n'; /** * Internal dependencies */ -import { NavigatorContext } from './context'; +import { NavigatorContext } from '../context'; const animationEnterDelay = 0; const animationEnterDuration = 0.14; diff --git a/packages/components/src/navigator/navigator-screen/index.js b/packages/components/src/navigator/navigator-screen/index.js new file mode 100644 index 00000000000000..b404d7fd44a81a --- /dev/null +++ b/packages/components/src/navigator/navigator-screen/index.js @@ -0,0 +1 @@ +export { default } from './component'; diff --git a/packages/components/src/navigator/stories/index.js b/packages/components/src/navigator/stories/index.js index 7a1352c30ffe3a..42a5a639e6e671 100644 --- a/packages/components/src/navigator/stories/index.js +++ b/packages/components/src/navigator/stories/index.js @@ -2,11 +2,11 @@ * Internal dependencies */ import Button from '../../button'; -import { Navigator, NavigatorScreen, useNavigator } from '../'; +import { NavigatorProvider, NavigatorScreen, useNavigator } from '../'; export default { title: 'Components (Experimental)/Navigator', - component: Navigator, + component: NavigatorProvider, }; function NavigatorButton( { path, isBack = false, ...props } ) { @@ -20,7 +20,7 @@ function NavigatorButton( { path, isBack = false, ...props } ) { } const MyNavigation = () => ( - +

This is the home screen.

@@ -34,7 +34,7 @@ const MyNavigation = () => ( Go back
-
+ ); export const _default = () => { diff --git a/packages/components/src/navigator/test/index.js b/packages/components/src/navigator/test/index.js index 3aa2840d0972fc..31e8305e2a1dd7 100644 --- a/packages/components/src/navigator/test/index.js +++ b/packages/components/src/navigator/test/index.js @@ -6,7 +6,7 @@ import { render, screen, fireEvent } from '@testing-library/react'; /** * Internal dependencies */ -import { Navigator, NavigatorScreen, useNavigator } from '../'; +import { NavigatorProvider, NavigatorScreen, useNavigator } from '../'; jest.mock( 'framer-motion', () => { const actual = jest.requireActual( 'framer-motion' ); @@ -47,7 +47,7 @@ const MyNavigation = ( { initialPath = PATHS.HOME, onNavigatorButtonClick, } ) => ( - +

This is the home screen.

{ /* A `NavigatorScreen` with `path={ PATHS.NOT_FOUND }` is purposefully not included */ } -
+ ); const getNavigationScreenByText = ( text, { throwIfNotFound = true } = {} ) => { diff --git a/packages/edit-site/src/components/sidebar/global-styles-sidebar.js b/packages/edit-site/src/components/sidebar/global-styles-sidebar.js index 2d740ec9a8f3e2..46b465cc492b57 100644 --- a/packages/edit-site/src/components/sidebar/global-styles-sidebar.js +++ b/packages/edit-site/src/components/sidebar/global-styles-sidebar.js @@ -8,7 +8,7 @@ import { map } from 'lodash'; */ import { Button, - __experimentalNavigator as Navigator, + __experimentalNavigatorProvider as NavigatorProvider, __experimentalNavigatorScreen as NavigatorScreen, __experimentalUseNavigator as useNavigator, __experimentalItemGroup as ItemGroup, @@ -257,7 +257,7 @@ export default function GlobalStylesSidebar() { } > - + @@ -324,7 +324,7 @@ export default function GlobalStylesSidebar() { setSetting={ setSetting } /> ) ) } - + ); }