diff --git a/404.html b/404.html index 81aae442a9..b58d7cc1c0 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -Page Not Found | React Navigation
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file +Page Not Found | React Navigation
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/assets/js/74cdd3dc.00dd111a.js b/assets/js/74cdd3dc.00dd111a.js new file mode 100644 index 0000000000..a5516e1288 --- /dev/null +++ b/assets/js/74cdd3dc.00dd111a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkreact_navigation_website_next=self.webpackChunkreact_navigation_website_next||[]).push([["87974"],{32609:function(e,n,t){t.r(n),t.d(n,{metadata:()=>a,contentTitle:()=>c,default:()=>b,assets:()=>d,toc:()=>h,frontMatter:()=>l});var a=JSON.parse('{"id":"material-top-tab-navigator","title":"Material Top Tabs Navigator","description":"A material-design themed tab bar on the top of the screen that lets you switch between different routes by tapping the tabs or swiping horizontally. Transitions are animated by default. Screen components for each route are mounted immediately.","source":"@site/versioned_docs/version-7.x/material-top-tab-navigator.md","sourceDirName":".","slug":"/material-top-tab-navigator","permalink":"/docs/material-top-tab-navigator","draft":false,"unlisted":false,"editUrl":"https://github.com/react-navigation/react-navigation.github.io/edit/main/versioned_docs/version-7.x/material-top-tab-navigator.md","tags":[],"version":"7.x","frontMatter":{"id":"material-top-tab-navigator","title":"Material Top Tabs Navigator","sidebar_label":"Material Top Tabs"},"sidebar":"docs","previous":{"title":"Drawer","permalink":"/docs/drawer-navigator"},"next":{"title":"Developer tools","permalink":"/docs/devtools"}}'),i=t("85893"),r=t("50065"),o=t("47902"),s=t("5525");let l={id:"material-top-tab-navigator",title:"Material Top Tabs Navigator",sidebar_label:"Material Top Tabs"},c=void 0,d={},h=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"API Definition",id:"api-definition",level:2},{value:"Props",id:"props",level:3},{value:"backBehavior",id:"backbehavior",level:4},{value:"tabBarPosition",id:"tabbarposition",level:4},{value:"keyboardDismissMode",id:"keyboarddismissmode",level:4},{value:"initialLayout",id:"initiallayout",level:4},{value:"style",id:"style",level:4},{value:"tabBar",id:"tabbar",level:4},{value:"Options",id:"options",level:3},{value:"title",id:"title",level:4},{value:"tabBarLabel",id:"tabbarlabel",level:4},{value:"tabBarAccessibilityLabel",id:"tabbaraccessibilitylabel",level:4},{value:"tabBarAllowFontScaling",id:"tabbarallowfontscaling",level:4},{value:"tabBarShowLabel",id:"tabbarshowlabel",level:4},{value:"tabBarIcon",id:"tabbaricon",level:4},{value:"tabBarShowIcon",id:"tabbarshowicon",level:4},{value:"tabBarBadge",id:"tabbarbadge",level:4},{value:"tabBarIndicator",id:"tabbarindicator",level:4},{value:"tabBarIndicatorStyle",id:"tabbarindicatorstyle",level:4},{value:"tabBarIndicatorContainerStyle",id:"tabbarindicatorcontainerstyle",level:4},{value:"tabBarButtonTestID",id:"tabbarbuttontestid",level:4},{value:"tabBarActiveTintColor",id:"tabbaractivetintcolor",level:4},{value:"tabBarInactiveTintColor",id:"tabbarinactivetintcolor",level:4},{value:"tabBarPressColor",id:"tabbarpresscolor",level:4},{value:"tabBarPressOpacity",id:"tabbarpressopacity",level:4},{value:"tabBarBounces",id:"tabbarbounces",level:4},{value:"tabBarScrollEnabled",id:"tabbarscrollenabled",level:4},{value:"tabBarLabelStyle",id:"tabbarlabelstyle",level:4},{value:"tabBarItemStyle",id:"tabbaritemstyle",level:4},{value:"tabBarContentContainerStyle",id:"tabbarcontentcontainerstyle",level:4},{value:"tabBarStyle",id:"tabbarstyle",level:4},{value:"swipeEnabled",id:"swipeenabled",level:4},{value:"lazy",id:"lazy",level:4},{value:"lazyPreloadDistance",id:"lazypreloaddistance",level:4},{value:"lazyPlaceholder",id:"lazyplaceholder",level:4},{value:"sceneStyle",id:"scenestyle",level:4},{value:"Events",id:"events",level:3},{value:"tabPress",id:"tabpress",level:4},{value:"tabLongPress",id:"tablongpress",level:4},{value:"Helpers",id:"helpers",level:3},{value:"jumpTo",id:"jumpto",level:4},{value:"Hooks",id:"hooks",level:3},{value:"useTabAnimation",id:"usetabanimation",level:4}];function u(e){let n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"A material-design themed tab bar on the top of the screen that lets you switch between different routes by tapping the tabs or swiping horizontally. Transitions are animated by default. Screen components for each route are mounted immediately."}),"\n",(0,i.jsx)("video",{playsInline:!0,autoPlay:!0,muted:!0,loop:!0,children:(0,i.jsx)("source",{src:"/assets/7.x/material-top-tabs.mp4"})}),"\n",(0,i.jsxs)(n.p,{children:["This wraps ",(0,i.jsx)(n.a,{href:"/docs/tab-view",children:(0,i.jsx)(n.code,{children:"react-native-tab-view"})}),". If you want to use the tab view without React Navigation integration, use the library directly instead."]}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["To use this navigator, ensure that you have ",(0,i.jsxs)(n.a,{href:"/docs/getting-started",children:[(0,i.jsx)(n.code,{children:"@react-navigation/native"})," and its dependencies (follow this guide)"]}),", then install ",(0,i.jsx)(n.a,{href:"https://github.com/react-navigation/react-navigation/tree/main/packages/material-top-tabs",children:(0,i.jsx)(n.code,{children:"@react-navigation/material-top-tabs"})}),":"]}),"\n",(0,i.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,i.jsx)(s.Z,{value:"npm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npm install @react-navigation/material-top-tabs\n"})})}),(0,i.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"yarn add @react-navigation/material-top-tabs\n"})})}),(0,i.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pnpm add @react-navigation/material-top-tabs\n"})})})]}),"\n",(0,i.jsxs)(n.p,{children:["Then, you need to install ",(0,i.jsx)(n.a,{href:"https://github.com/callstack/react-native-pager-view",children:(0,i.jsx)(n.code,{children:"react-native-pager-view"})})," which is required by the navigator."]}),"\n",(0,i.jsx)(n.p,{children:"If you have a Expo managed project, in your project directory, run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx expo install react-native-pager-view\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you have a bare React Native project, in your project directory, run:"}),"\n",(0,i.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,i.jsx)(s.Z,{value:"npm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npm install react-native-pager-view\n"})})}),(0,i.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"yarn add react-native-pager-view\n"})})}),(0,i.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pnpm add react-native-pager-view\n"})})})]}),"\n",(0,i.jsxs)(n.p,{children:["If you're on a Mac and developing for iOS, you also need to install the pods (via ",(0,i.jsx)(n.a,{href:"https://cocoapods.org/",children:"Cocoapods"}),") to complete the linking."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx pod-install ios\n"})}),"\n",(0,i.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,i.jsxs)(n.p,{children:["To use this navigator, import it from ",(0,i.jsx)(n.code,{children:"@react-navigation/material-top-tabs"}),":"]}),"\n",(0,i.jsxs)(o.Z,{groupId:"config",queryString:"config",children:[(0,i.jsx)(s.Z,{value:"static",label:"Static",default:!0,children:(0,i.jsx)(n.pre,{"data-name":"Material Top Tab Navigator","data-snack":"true",children:(0,i.jsx)(n.code,{className:"language-js",metastring:'name="Material Top Tab Navigator" snack',children:"import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport {\n createStaticNavigation,\n useNavigation,\n} from '@react-navigation/native';\nimport { Button } from '@react-navigation/elements';\n// codeblock-focus-start\nimport { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';\n\n// codeblock-focus-end\nfunction HomeScreen() {\n const navigation = useNavigation();\n\n return (\n \n Home Screen\n \n \n );\n}\n\nfunction ProfileScreen() {\n const navigation = useNavigation();\n\n return (\n \n Profile Screen\n \n \n );\n}\n\n// codeblock-focus-start\nconst MyTabs = createMaterialTopTabNavigator({\n screens: {\n Home: HomeScreen,\n Profile: ProfileScreen,\n },\n});\n// codeblock-focus-end\n\nconst Navigation = createStaticNavigation(MyTabs);\n\nexport default function App() {\n return ;\n}\n"})})}),(0,i.jsx)(s.Z,{value:"dynamic",label:"Dynamic",children:(0,i.jsx)(n.pre,{"data-name":"Material Top Tab Navigator","data-snack":"true",children:(0,i.jsx)(n.code,{className:"language-js",metastring:'name="Material Top Tab Navigator" snack',children:"import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport { NavigationContainer, useNavigation } from '@react-navigation/native';\nimport { Button } from '@react-navigation/elements';\n// codeblock-focus-start\nimport { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';\n\nconst Tab = createMaterialTopTabNavigator();\n\nfunction MyTabs() {\n return (\n \n \n \n \n );\n}\n// codeblock-focus-end\n\nfunction HomeScreen() {\n const navigation = useNavigation();\n\n return (\n \n Home Screen\n \n \n );\n}\n\nfunction ProfileScreen() {\n const navigation = useNavigation();\n\n return (\n \n Profile Screen\n \n \n );\n}\n\nexport default function App() {\n return (\n \n \n \n );\n}\n"})})})]}),"\n",(0,i.jsx)(n.h2,{id:"api-definition",children:"API Definition"}),"\n",(0,i.jsx)(n.h3,{id:"props",children:"Props"}),"\n",(0,i.jsxs)(n.p,{children:["In addition to the ",(0,i.jsx)(n.a,{href:"/docs/navigator#configuration",children:"common props"})," shared by all navigators, the material top tabs navigator component accepts the following additional props:"]}),"\n",(0,i.jsx)(n.h4,{id:"backbehavior",children:(0,i.jsx)(n.code,{children:"backBehavior"})}),"\n",(0,i.jsxs)(n.p,{children:["This controls what happens when ",(0,i.jsx)(n.code,{children:"goBack"})," is called in the navigator. This includes pressing the device's back button or back gesture on Android."]}),"\n",(0,i.jsx)(n.p,{children:"It supports the following values:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"firstRoute"})," - return to the first screen defined in the navigator (default)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"initialRoute"})," - return to initial screen passed in ",(0,i.jsx)(n.code,{children:"initialRouteName"})," prop, if not passed, defaults to the first screen"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"order"})," - return to screen defined before the focused screen"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"history"})," - return to last visited screen in the navigator; if the same screen is visited multiple times, the older entries are dropped from the history"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"none"})," - do not handle back button"]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarposition",children:(0,i.jsx)(n.code,{children:"tabBarPosition"})}),"\n",(0,i.jsxs)(n.p,{children:["Position of the tab bar in the tab view. Possible values are ",(0,i.jsx)(n.code,{children:"'top'"})," and ",(0,i.jsx)(n.code,{children:"'bottom'"}),". Defaults to ",(0,i.jsx)(n.code,{children:"'top'"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"keyboarddismissmode",children:(0,i.jsx)(n.code,{children:"keyboardDismissMode"})}),"\n",(0,i.jsx)(n.p,{children:"String indicating whether the keyboard gets dismissed in response to a drag gesture. Possible values are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"'auto'"})," (default): the keyboard is dismissed when the index changes."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"'on-drag'"}),": the keyboard is dismissed when a drag begins."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"'none'"}),": drags do not dismiss the keyboard."]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"initiallayout",children:(0,i.jsx)(n.code,{children:"initialLayout"})}),"\n",(0,i.jsx)(n.p,{children:"Object containing the initial height and width of the screens. Passing this will improve the initial rendering performance. For most apps, this is a good default:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"{\n width: Dimensions.get('window').width;\n}\n"})}),"\n",(0,i.jsx)(n.h4,{id:"style",children:(0,i.jsx)(n.code,{children:"style"})}),"\n",(0,i.jsx)(n.p,{children:"Style to apply to the tab view container."}),"\n",(0,i.jsx)(n.h4,{id:"tabbar",children:(0,i.jsx)(n.code,{children:"tabBar"})}),"\n",(0,i.jsx)(n.p,{children:"Function that returns a React element to display as the tab bar."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-custom-tab-bar"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import { Animated, View, TouchableOpacity, Platform } from 'react-native';\nimport { useLinkBuilder, useTheme } from '@react-navigation/native';\n\nfunction MyTabBar({ state, descriptors, navigation, position }) {\n const { colors } = useTheme();\n const { buildHref } = useLinkBuilder();\n\n return (\n \n {state.routes.map((route, index) => {\n const { options } = descriptors[route.key];\n const label =\n options.tabBarLabel !== undefined\n ? options.tabBarLabel\n : options.title !== undefined\n ? options.title\n : route.name;\n\n const isFocused = state.index === index;\n\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (!isFocused && !event.defaultPrevented) {\n navigation.navigate(route.name, route.params);\n }\n };\n\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n });\n };\n\n const inputRange = state.routes.map((_, i) => i);\n const opacity = position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === index ? 1 : 0)),\n });\n\n return (\n \n \n {label}\n \n \n );\n })}\n \n );\n}\n\n// ...\n\n }>\n {/* ... */}\n;\n"})}),"\n",(0,i.jsx)(n.p,{children:"This example will render a basic tab bar with labels."}),"\n",(0,i.jsxs)(n.p,{children:["Note that you ",(0,i.jsx)(n.strong,{children:"cannot"})," use the ",(0,i.jsx)(n.code,{children:"useNavigation"})," hook inside the ",(0,i.jsx)(n.code,{children:"tabBar"})," since ",(0,i.jsx)(n.code,{children:"useNavigation"})," is only available inside screens. You get a ",(0,i.jsx)(n.code,{children:"navigation"})," prop for your ",(0,i.jsx)(n.code,{children:"tabBar"})," which you can use instead:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"function MyTabBar({ navigation }) {\n return (\n {\n // Navigate using the `navigation` prop that you received\n // highlight-next-line\n navigation.navigate('SomeScreen');\n }}\n >\n Go somewhere\n \n );\n}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,i.jsxs)(n.p,{children:["The following ",(0,i.jsx)(n.a,{href:"/docs/screen-options",children:"options"})," can be used to configure the screens in the navigator:"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-options"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"\n {/* ... */}\n\n"})}),"\n",(0,i.jsx)(n.h4,{id:"title",children:(0,i.jsx)(n.code,{children:"title"})}),"\n",(0,i.jsxs)(n.p,{children:["Generic title that can be used as a fallback for ",(0,i.jsx)(n.code,{children:"headerTitle"})," and ",(0,i.jsx)(n.code,{children:"tabBarLabel"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarlabel",children:(0,i.jsx)(n.code,{children:"tabBarLabel"})}),"\n",(0,i.jsxs)(n.p,{children:["Title string of a tab displayed in the tab bar or a function that given ",(0,i.jsx)(n.code,{children:"{ focused: boolean, color: string }"})," returns a React.Node, to display in tab bar. When undefined, scene ",(0,i.jsx)(n.code,{children:"title"})," is used. To hide, see ",(0,i.jsx)(n.a,{href:"#tabbarshowlabel",children:(0,i.jsx)(n.code,{children:"tabBarShowLabel"})})," option."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbaraccessibilitylabel",children:(0,i.jsx)(n.code,{children:"tabBarAccessibilityLabel"})}),"\n",(0,i.jsx)(n.p,{children:"Accessibility label for the tab button. This is read by the screen reader when the user taps the tab. It's recommended to set this if you don't have a label for the tab."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarallowfontscaling",children:(0,i.jsx)(n.code,{children:"tabBarAllowFontScaling"})}),"\n",(0,i.jsx)(n.p,{children:"Whether label font should scale to respect Text Size accessibility settings."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarshowlabel",children:(0,i.jsx)(n.code,{children:"tabBarShowLabel"})}),"\n",(0,i.jsxs)(n.p,{children:["Whether the tab label should be visible. Defaults to ",(0,i.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbaricon",children:(0,i.jsx)(n.code,{children:"tabBarIcon"})}),"\n",(0,i.jsxs)(n.p,{children:["Function that given ",(0,i.jsx)(n.code,{children:"{ focused: boolean, color: string }"})," returns a React.Node, to display in the tab bar."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarshowicon",children:(0,i.jsx)(n.code,{children:"tabBarShowIcon"})}),"\n",(0,i.jsxs)(n.p,{children:["Whether the tab icon should be visible. Defaults to ",(0,i.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarbadge",children:(0,i.jsx)(n.code,{children:"tabBarBadge"})}),"\n",(0,i.jsx)(n.p,{children:"Function that returns a React element to use as a badge for the tab."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarindicator",children:(0,i.jsx)(n.code,{children:"tabBarIndicator"})}),"\n",(0,i.jsx)(n.p,{children:"Function that returns a React element as the tab bar indicator."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarindicatorstyle",children:(0,i.jsx)(n.code,{children:"tabBarIndicatorStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab bar indicator."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarindicatorcontainerstyle",children:(0,i.jsx)(n.code,{children:"tabBarIndicatorContainerStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the view containing the tab bar indicator."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarbuttontestid",children:(0,i.jsx)(n.code,{children:"tabBarButtonTestID"})}),"\n",(0,i.jsx)(n.p,{children:"ID to locate this tab button in tests."}),"\n",(0,i.jsx)(n.h4,{id:"tabbaractivetintcolor",children:(0,i.jsx)(n.code,{children:"tabBarActiveTintColor"})}),"\n",(0,i.jsx)(n.p,{children:"Color for the icon and label in the active tab."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarinactivetintcolor",children:(0,i.jsx)(n.code,{children:"tabBarInactiveTintColor"})}),"\n",(0,i.jsx)(n.p,{children:"Color for the icon and label in the inactive tabs."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarpresscolor",children:(0,i.jsx)(n.code,{children:"tabBarPressColor"})}),"\n",(0,i.jsx)(n.p,{children:"Color for material ripple (Android >= 5.0 only)."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarpressopacity",children:(0,i.jsx)(n.code,{children:"tabBarPressOpacity"})}),"\n",(0,i.jsx)(n.p,{children:"Opacity for pressed tab (iOS and Android < 5.0 only)."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarbounces",children:(0,i.jsx)(n.code,{children:"tabBarBounces"})}),"\n",(0,i.jsx)(n.p,{children:"Boolean indicating whether the tab bar bounces when overscrolling."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarscrollenabled",children:(0,i.jsx)(n.code,{children:"tabBarScrollEnabled"})}),"\n",(0,i.jsx)(n.p,{children:"Boolean indicating whether to make the tab bar scrollable."}),"\n",(0,i.jsxs)(n.p,{children:["If you set this to ",(0,i.jsx)(n.code,{children:"true"}),", you should also specify a width in ",(0,i.jsx)(n.code,{children:"tabBarItemStyle"})," to improve the performance of initial render."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarlabelstyle",children:(0,i.jsx)(n.code,{children:"tabBarLabelStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab label."}),"\n",(0,i.jsx)(n.h4,{id:"tabbaritemstyle",children:(0,i.jsx)(n.code,{children:"tabBarItemStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the individual tab items."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarcontentcontainerstyle",children:(0,i.jsx)(n.code,{children:"tabBarContentContainerStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the view containing the tab items."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarstyle",children:(0,i.jsx)(n.code,{children:"tabBarStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab bar."}),"\n",(0,i.jsx)(n.h4,{id:"swipeenabled",children:(0,i.jsx)(n.code,{children:"swipeEnabled"})}),"\n",(0,i.jsxs)(n.p,{children:["Boolean indicating whether to enable swipe gestures. Swipe gestures are enabled by default. Passing ",(0,i.jsx)(n.code,{children:"false"})," will disable swipe gestures, but the user can still switch tabs by pressing the tab bar."]}),"\n",(0,i.jsx)(n.h4,{id:"lazy",children:(0,i.jsx)(n.code,{children:"lazy"})}),"\n",(0,i.jsxs)(n.p,{children:["Whether this screen should be lazily rendered. When this is set to ",(0,i.jsx)(n.code,{children:"true"}),", the screen will be rendered as it comes into the viewport. By default all screens are rendered to provide a smoother swipe experience. But you might want to defer the rendering of screens out of the viewport until the user sees them. To enable lazy rendering for this screen, set ",(0,i.jsx)(n.code,{children:"lazy"})," to ",(0,i.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["When you enable ",(0,i.jsx)(n.code,{children:"lazy"}),", the lazy loaded screens will usually take some time to render when they come into the viewport. You can use the ",(0,i.jsx)(n.code,{children:"lazyPlaceholder"})," prop to customize what the user sees during this short period."]}),"\n",(0,i.jsx)(n.h4,{id:"lazypreloaddistance",children:(0,i.jsx)(n.code,{children:"lazyPreloadDistance"})}),"\n",(0,i.jsxs)(n.p,{children:["When ",(0,i.jsx)(n.code,{children:"lazy"})," is enabled, you can specify how many adjacent screens should be preloaded in advance with this prop. This value defaults to ",(0,i.jsx)(n.code,{children:"0"})," which means lazy pages are loaded as they come into the viewport."]}),"\n",(0,i.jsx)(n.h4,{id:"lazyplaceholder",children:(0,i.jsx)(n.code,{children:"lazyPlaceholder"})}),"\n",(0,i.jsxs)(n.p,{children:["Function that returns a React element to render if this screen hasn't been rendered yet. The ",(0,i.jsx)(n.code,{children:"lazy"})," option also needs to be enabled for this to work."]}),"\n",(0,i.jsx)(n.p,{children:"This view is usually only shown for a split second. Keep it lightweight."}),"\n",(0,i.jsxs)(n.p,{children:["By default, this renders ",(0,i.jsx)(n.code,{children:"null"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"scenestyle",children:(0,i.jsx)(n.code,{children:"sceneStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style to apply to the view wrapping each screen. You can pass this to override some default styles such as overflow clipping."}),"\n",(0,i.jsx)(n.h3,{id:"events",children:"Events"}),"\n",(0,i.jsxs)(n.p,{children:["The navigator can ",(0,i.jsx)(n.a,{href:"/docs/navigation-events",children:"emit events"})," on certain actions. Supported events are:"]}),"\n",(0,i.jsx)(n.h4,{id:"tabpress",children:(0,i.jsx)(n.code,{children:"tabPress"})}),"\n",(0,i.jsx)(n.p,{children:"This event is fired when the user presses the tab button for the current screen in the tab bar. By default a tab press does several things:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"If the tab is not focused, tab press will focus that tab"}),"\n",(0,i.jsxs)(n.li,{children:["If the tab is already focused:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If the screen for the tab renders a scroll view, you can use ",(0,i.jsx)(n.a,{href:"/docs/use-scroll-to-top",children:(0,i.jsx)(n.code,{children:"useScrollToTop"})})," to scroll it to top"]}),"\n",(0,i.jsxs)(n.li,{children:["If the screen for the tab renders a stack navigator, a ",(0,i.jsx)(n.code,{children:"popToTop"})," action is performed on the stack"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["To prevent the default behavior, you can call ",(0,i.jsx)(n.code,{children:"event.preventDefault"}),":"]}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-prevent-default"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"React.useEffect(() => {\n const unsubscribe = navigation.addListener('tabPress', (e) => {\n // Prevent default behavior\n e.preventDefault();\n\n // Do something manually\n // ...\n });\n\n return unsubscribe;\n}, [navigation]);\n"})}),"\n",(0,i.jsx)(n.h4,{id:"tablongpress",children:(0,i.jsx)(n.code,{children:"tabLongPress"})}),"\n",(0,i.jsx)(n.p,{children:"This event is fired when the user presses the tab button for the current screen in the tab bar for an extended period."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"React.useEffect(() => {\n const unsubscribe = navigation.addListener('tabLongPress', (e) => {\n // Do something\n });\n\n return unsubscribe;\n}, [navigation]);\n"})}),"\n",(0,i.jsx)(n.h3,{id:"helpers",children:"Helpers"}),"\n",(0,i.jsx)(n.p,{children:"The tab navigator adds the following methods to the navigation object:"}),"\n",(0,i.jsx)(n.h4,{id:"jumpto",children:(0,i.jsx)(n.code,{children:"jumpTo"})}),"\n",(0,i.jsx)(n.p,{children:"Navigates to an existing screen in the tab navigator. The method accepts following arguments:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"})," - ",(0,i.jsx)(n.em,{children:"string"})," - Name of the route to jump to."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"params"})," - ",(0,i.jsx)(n.em,{children:"object"})," - Screen params to pass to the destination route."]}),"\n"]}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-jump-to"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"navigation.jumpTo('Profile', { name: 'Micha\u015B' });\n"})}),"\n",(0,i.jsx)(n.h3,{id:"hooks",children:"Hooks"}),"\n",(0,i.jsx)(n.p,{children:"The material top tab navigator exports the following hooks:"}),"\n",(0,i.jsx)(n.h4,{id:"usetabanimation",children:(0,i.jsx)(n.code,{children:"useTabAnimation"})}),"\n",(0,i.jsx)(n.p,{children:"This hook returns an object containing an animated value that represents the current position of the tabs. This can be used to animate elements based on the swipe position of the tabs, such as the tab indicator:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import { Animated } from 'react-native';\nimport { useTabAnimation } from '@react-navigation/material-top-tabs';\n\nfunction MyView() {\n const { position } = useTabAnimation();\n\n return (\n \n );\n}\n"})})]})}function b(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},5525:function(e,n,t){t.d(n,{Z:()=>o});var a=t("85893");t("67294");var i=t("67026");let r="tabItem_Ymn6";function o(e){let{children:n,hidden:t,className:o}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r,o),hidden:t,children:n})}},47902:function(e,n,t){t.d(n,{Z:()=>f});var a=t("85893"),i=t("67294"),r=t("67026"),o=t("69599"),s=t("16550"),l=t("32000"),c=t("4520"),d=t("38341"),h=t("76009");function u(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,i.isValidElement)(e)&&function(e){let{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw Error("Docusaurus error: Bad child <".concat("string"==typeof e.type?e.type:e.type.name,'>: all children of the component should be , and every should have a unique "value" prop.'))}))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function b(e){let{value:n,tabValues:t}=e;return t.some(e=>e.value===n)}var p=t("7227");let v="tabList__CuJ",x="tabItem_LNqP";function j(e){let{className:n,block:t,selectedValue:i,selectValue:s,tabValues:l}=e,c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),h=e=>{let n=e.currentTarget,t=l[c.indexOf(n)].value;t!==i&&(d(n),s(t))},u=e=>{var n,t;let a=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{let t=c.indexOf(e.currentTarget)+1;a=null!==(n=c[t])&&void 0!==n?n:c[0];break}case"ArrowLeft":{let n=c.indexOf(e.currentTarget)-1;a=null!==(t=c[n])&&void 0!==t?t:c[c.length-1]}}null==a||a.focus()};return(0,a.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:l.map(e=>{let{value:n,label:t,attributes:o}=e;return(0,a.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>c.push(e),onKeyDown:u,onClick:h,...o,className:(0,r.Z)("tabs__item",x,null==o?void 0:o.className,{"tabs__item--active":i===n}),children:null!=t?t:n},n)})})}function m(e){let{lazy:n,children:t,selectedValue:o}=e,s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){let e=s.find(e=>e.props.value===o);return e?(0,i.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,a.jsx)("div",{className:"margin-top--md",children:s.map((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==o}))})}function g(e){let n=function(e){let{defaultValue:n,queryString:t=!1,groupId:a}=e,r=function(e){let{values:n,children:t}=e;return(0,i.useMemo)(()=>{let e=null!=n?n:u(t).map(e=>{let{props:{value:n,label:t,attributes:a,default:i}}=e;return{value:n,label:t,attributes:a,default:i}});return!function(e){let n=(0,d.lx)(e,(e,n)=>e.value===n.value);if(n.length>0)throw Error('Docusaurus error: Duplicate values "'.concat(n.map(e=>e.value).join(", "),'" found in . Every value needs to be unique.'))}(e),e},[n,t])}(e),[o,p]=(0,i.useState)(()=>(function(e){var n;let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw Error('Docusaurus error: The has a defaultValue "'.concat(t,'" but none of its children has the corresponding value. Available values are: ').concat(a.map(e=>e.value).join(", "),". If you intend to show no default tab, use defaultValue={null} instead."));return t}let i=null!==(n=a.find(e=>e.default))&&void 0!==n?n:a[0];if(!i)throw Error("Unexpected error: 0 tabValues");return i.value})({defaultValue:n,tabValues:r})),[v,x]=function(e){let{queryString:n=!1,groupId:t}=e,a=(0,s.k6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:n,groupId:t}),o=(0,c._X)(r);return[o,(0,i.useCallback)(e=>{if(!r)return;let n=new URLSearchParams(a.location.search);n.set(r,e),a.replace({...a.location,search:n.toString()})},[r,a])]}({queryString:t,groupId:a}),[j,m]=function(e){var n;let{groupId:t}=e;let a=(n=t)?"docusaurus.tab.".concat(n):null,[r,o]=(0,h.Nk)(a);return[r,(0,i.useCallback)(e=>{if(!!a)o.set(e)},[a,o])]}({groupId:a}),g=(()=>{let e=null!=v?v:j;return b({value:e,tabValues:r})?e:null})();return(0,l.Z)(()=>{g&&p(g)},[g]),{selectedValue:o,selectValue:(0,i.useCallback)(e=>{if(!b({value:e,tabValues:r}))throw Error("Can't select invalid tab value=".concat(e));p(e),x(e),m(e)},[x,m,r]),tabValues:r}}(e);return(0,a.jsxs)("div",{className:(0,r.Z)("tabs-container",v),children:[(0,a.jsx)(j,{...n,...e}),(0,a.jsx)(m,{...n,...e})]})}function f(e){let n=(0,p.Z)();return(0,a.jsx)(g,{...e,children:u(e.children)},String(n))}},50065:function(e,n,t){t.d(n,{Z:function(){return s},a:function(){return o}});var a=t(67294);let i={},r=a.createContext(i);function o(e){let n=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/74cdd3dc.07389b48.js b/assets/js/74cdd3dc.07389b48.js deleted file mode 100644 index 41edd8f55d..0000000000 --- a/assets/js/74cdd3dc.07389b48.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkreact_navigation_website_next=self.webpackChunkreact_navigation_website_next||[]).push([["87974"],{32609:function(e,n,t){t.r(n),t.d(n,{metadata:()=>a,contentTitle:()=>c,default:()=>b,assets:()=>d,toc:()=>h,frontMatter:()=>l});var a=JSON.parse('{"id":"material-top-tab-navigator","title":"Material Top Tabs Navigator","description":"A material-design themed tab bar on the top of the screen that lets you switch between different routes by tapping the tabs or swiping horizontally. Transitions are animated by default. Screen components for each route are mounted immediately.","source":"@site/versioned_docs/version-7.x/material-top-tab-navigator.md","sourceDirName":".","slug":"/material-top-tab-navigator","permalink":"/docs/material-top-tab-navigator","draft":false,"unlisted":false,"editUrl":"https://github.com/react-navigation/react-navigation.github.io/edit/main/versioned_docs/version-7.x/material-top-tab-navigator.md","tags":[],"version":"7.x","frontMatter":{"id":"material-top-tab-navigator","title":"Material Top Tabs Navigator","sidebar_label":"Material Top Tabs"},"sidebar":"docs","previous":{"title":"Drawer","permalink":"/docs/drawer-navigator"},"next":{"title":"Developer tools","permalink":"/docs/devtools"}}'),i=t("85893"),r=t("50065"),o=t("47902"),s=t("5525");let l={id:"material-top-tab-navigator",title:"Material Top Tabs Navigator",sidebar_label:"Material Top Tabs"},c=void 0,d={},h=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"API Definition",id:"api-definition",level:2},{value:"Props",id:"props",level:3},{value:"backBehavior",id:"backbehavior",level:4},{value:"tabBarPosition",id:"tabbarposition",level:4},{value:"keyboardDismissMode",id:"keyboarddismissmode",level:4},{value:"initialLayout",id:"initiallayout",level:4},{value:"style",id:"style",level:4},{value:"tabBar",id:"tabbar",level:4},{value:"Options",id:"options",level:3},{value:"title",id:"title",level:4},{value:"tabBarLabel",id:"tabbarlabel",level:4},{value:"tabBarAccessibilityLabel",id:"tabbaraccessibilitylabel",level:4},{value:"tabBarAllowFontScaling",id:"tabbarallowfontscaling",level:4},{value:"tabBarShowLabel",id:"tabbarshowlabel",level:4},{value:"tabBarIcon",id:"tabbaricon",level:4},{value:"tabBarShowIcon",id:"tabbarshowicon",level:4},{value:"tabBarBadge",id:"tabbarbadge",level:4},{value:"tabBarIndicator",id:"tabbarindicator",level:4},{value:"tabBarIndicatorStyle",id:"tabbarindicatorstyle",level:4},{value:"tabBarIndicatorContainerStyle",id:"tabbarindicatorcontainerstyle",level:4},{value:"tabBarButtonTestID",id:"tabbarbuttontestid",level:4},{value:"tabBarActiveTintColor",id:"tabbaractivetintcolor",level:4},{value:"tabBarInactiveTintColor",id:"tabbarinactivetintcolor",level:4},{value:"tabBarPressColor",id:"tabbarpresscolor",level:4},{value:"tabBarPressOpacity",id:"tabbarpressopacity",level:4},{value:"tabBarBounces",id:"tabbarbounces",level:4},{value:"tabBarScrollEnabled",id:"tabbarscrollenabled",level:4},{value:"tabBarIconStyle",id:"tabbariconstyle",level:4},{value:"tabBarLabelStyle",id:"tabbarlabelstyle",level:4},{value:"tabBarItemStyle",id:"tabbaritemstyle",level:4},{value:"tabBarContentContainerStyle",id:"tabbarcontentcontainerstyle",level:4},{value:"tabBarStyle",id:"tabbarstyle",level:4},{value:"swipeEnabled",id:"swipeenabled",level:4},{value:"lazy",id:"lazy",level:4},{value:"lazyPreloadDistance",id:"lazypreloaddistance",level:4},{value:"lazyPlaceholder",id:"lazyplaceholder",level:4},{value:"sceneStyle",id:"scenestyle",level:4},{value:"Events",id:"events",level:3},{value:"tabPress",id:"tabpress",level:4},{value:"tabLongPress",id:"tablongpress",level:4},{value:"Helpers",id:"helpers",level:3},{value:"jumpTo",id:"jumpto",level:4},{value:"Hooks",id:"hooks",level:3},{value:"useTabAnimation",id:"usetabanimation",level:4}];function u(e){let n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"A material-design themed tab bar on the top of the screen that lets you switch between different routes by tapping the tabs or swiping horizontally. Transitions are animated by default. Screen components for each route are mounted immediately."}),"\n",(0,i.jsx)("video",{playsInline:!0,autoPlay:!0,muted:!0,loop:!0,children:(0,i.jsx)("source",{src:"/assets/7.x/material-top-tabs.mp4"})}),"\n",(0,i.jsxs)(n.p,{children:["This wraps ",(0,i.jsx)(n.a,{href:"/docs/tab-view",children:(0,i.jsx)(n.code,{children:"react-native-tab-view"})}),". If you want to use the tab view without React Navigation integration, use the library directly instead."]}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["To use this navigator, ensure that you have ",(0,i.jsxs)(n.a,{href:"/docs/getting-started",children:[(0,i.jsx)(n.code,{children:"@react-navigation/native"})," and its dependencies (follow this guide)"]}),", then install ",(0,i.jsx)(n.a,{href:"https://github.com/react-navigation/react-navigation/tree/main/packages/material-top-tabs",children:(0,i.jsx)(n.code,{children:"@react-navigation/material-top-tabs"})}),":"]}),"\n",(0,i.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,i.jsx)(s.Z,{value:"npm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npm install @react-navigation/material-top-tabs\n"})})}),(0,i.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"yarn add @react-navigation/material-top-tabs\n"})})}),(0,i.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pnpm add @react-navigation/material-top-tabs\n"})})})]}),"\n",(0,i.jsxs)(n.p,{children:["Then, you need to install ",(0,i.jsx)(n.a,{href:"https://github.com/callstack/react-native-pager-view",children:(0,i.jsx)(n.code,{children:"react-native-pager-view"})})," which is required by the navigator."]}),"\n",(0,i.jsx)(n.p,{children:"If you have a Expo managed project, in your project directory, run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx expo install react-native-pager-view\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you have a bare React Native project, in your project directory, run:"}),"\n",(0,i.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,i.jsx)(s.Z,{value:"npm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npm install react-native-pager-view\n"})})}),(0,i.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"yarn add react-native-pager-view\n"})})}),(0,i.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pnpm add react-native-pager-view\n"})})})]}),"\n",(0,i.jsxs)(n.p,{children:["If you're on a Mac and developing for iOS, you also need to install the pods (via ",(0,i.jsx)(n.a,{href:"https://cocoapods.org/",children:"Cocoapods"}),") to complete the linking."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx pod-install ios\n"})}),"\n",(0,i.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,i.jsxs)(n.p,{children:["To use this navigator, import it from ",(0,i.jsx)(n.code,{children:"@react-navigation/material-top-tabs"}),":"]}),"\n",(0,i.jsxs)(o.Z,{groupId:"config",queryString:"config",children:[(0,i.jsx)(s.Z,{value:"static",label:"Static",default:!0,children:(0,i.jsx)(n.pre,{"data-name":"Material Top Tab Navigator","data-snack":"true",children:(0,i.jsx)(n.code,{className:"language-js",metastring:'name="Material Top Tab Navigator" snack',children:"import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport {\n createStaticNavigation,\n useNavigation,\n} from '@react-navigation/native';\nimport { Button } from '@react-navigation/elements';\n// codeblock-focus-start\nimport { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';\n\n// codeblock-focus-end\nfunction HomeScreen() {\n const navigation = useNavigation();\n\n return (\n \n Home Screen\n \n \n );\n}\n\nfunction ProfileScreen() {\n const navigation = useNavigation();\n\n return (\n \n Profile Screen\n \n \n );\n}\n\n// codeblock-focus-start\nconst MyTabs = createMaterialTopTabNavigator({\n screens: {\n Home: HomeScreen,\n Profile: ProfileScreen,\n },\n});\n// codeblock-focus-end\n\nconst Navigation = createStaticNavigation(MyTabs);\n\nexport default function App() {\n return ;\n}\n"})})}),(0,i.jsx)(s.Z,{value:"dynamic",label:"Dynamic",children:(0,i.jsx)(n.pre,{"data-name":"Material Top Tab Navigator","data-snack":"true",children:(0,i.jsx)(n.code,{className:"language-js",metastring:'name="Material Top Tab Navigator" snack',children:"import * as React from 'react';\nimport { Text, View } from 'react-native';\nimport { NavigationContainer, useNavigation } from '@react-navigation/native';\nimport { Button } from '@react-navigation/elements';\n// codeblock-focus-start\nimport { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';\n\nconst Tab = createMaterialTopTabNavigator();\n\nfunction MyTabs() {\n return (\n \n \n \n \n );\n}\n// codeblock-focus-end\n\nfunction HomeScreen() {\n const navigation = useNavigation();\n\n return (\n \n Home Screen\n \n \n );\n}\n\nfunction ProfileScreen() {\n const navigation = useNavigation();\n\n return (\n \n Profile Screen\n \n \n );\n}\n\nexport default function App() {\n return (\n \n \n \n );\n}\n"})})})]}),"\n",(0,i.jsx)(n.h2,{id:"api-definition",children:"API Definition"}),"\n",(0,i.jsx)(n.h3,{id:"props",children:"Props"}),"\n",(0,i.jsxs)(n.p,{children:["In addition to the ",(0,i.jsx)(n.a,{href:"/docs/navigator#configuration",children:"common props"})," shared by all navigators, the material top tabs navigator component accepts the following additional props:"]}),"\n",(0,i.jsx)(n.h4,{id:"backbehavior",children:(0,i.jsx)(n.code,{children:"backBehavior"})}),"\n",(0,i.jsxs)(n.p,{children:["This controls what happens when ",(0,i.jsx)(n.code,{children:"goBack"})," is called in the navigator. This includes pressing the device's back button or back gesture on Android."]}),"\n",(0,i.jsx)(n.p,{children:"It supports the following values:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"firstRoute"})," - return to the first screen defined in the navigator (default)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"initialRoute"})," - return to initial screen passed in ",(0,i.jsx)(n.code,{children:"initialRouteName"})," prop, if not passed, defaults to the first screen"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"order"})," - return to screen defined before the focused screen"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"history"})," - return to last visited screen in the navigator; if the same screen is visited multiple times, the older entries are dropped from the history"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"none"})," - do not handle back button"]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarposition",children:(0,i.jsx)(n.code,{children:"tabBarPosition"})}),"\n",(0,i.jsxs)(n.p,{children:["Position of the tab bar in the tab view. Possible values are ",(0,i.jsx)(n.code,{children:"'top'"})," and ",(0,i.jsx)(n.code,{children:"'bottom'"}),". Defaults to ",(0,i.jsx)(n.code,{children:"'top'"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"keyboarddismissmode",children:(0,i.jsx)(n.code,{children:"keyboardDismissMode"})}),"\n",(0,i.jsx)(n.p,{children:"String indicating whether the keyboard gets dismissed in response to a drag gesture. Possible values are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"'auto'"})," (default): the keyboard is dismissed when the index changes."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"'on-drag'"}),": the keyboard is dismissed when a drag begins."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"'none'"}),": drags do not dismiss the keyboard."]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"initiallayout",children:(0,i.jsx)(n.code,{children:"initialLayout"})}),"\n",(0,i.jsx)(n.p,{children:"Object containing the initial height and width of the screens. Passing this will improve the initial rendering performance. For most apps, this is a good default:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"{\n width: Dimensions.get('window').width;\n}\n"})}),"\n",(0,i.jsx)(n.h4,{id:"style",children:(0,i.jsx)(n.code,{children:"style"})}),"\n",(0,i.jsx)(n.p,{children:"Style to apply to the tab view container."}),"\n",(0,i.jsx)(n.h4,{id:"tabbar",children:(0,i.jsx)(n.code,{children:"tabBar"})}),"\n",(0,i.jsx)(n.p,{children:"Function that returns a React element to display as the tab bar."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-custom-tab-bar"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import { Animated, View, TouchableOpacity, Platform } from 'react-native';\nimport { useLinkBuilder, useTheme } from '@react-navigation/native';\n\nfunction MyTabBar({ state, descriptors, navigation, position }) {\n const { colors } = useTheme();\n const { buildHref } = useLinkBuilder();\n\n return (\n \n {state.routes.map((route, index) => {\n const { options } = descriptors[route.key];\n const label =\n options.tabBarLabel !== undefined\n ? options.tabBarLabel\n : options.title !== undefined\n ? options.title\n : route.name;\n\n const isFocused = state.index === index;\n\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (!isFocused && !event.defaultPrevented) {\n navigation.navigate(route.name, route.params);\n }\n };\n\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n });\n };\n\n const inputRange = state.routes.map((_, i) => i);\n const opacity = position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === index ? 1 : 0)),\n });\n\n return (\n \n \n {label}\n \n \n );\n })}\n \n );\n}\n\n// ...\n\n }>\n {/* ... */}\n;\n"})}),"\n",(0,i.jsx)(n.p,{children:"This example will render a basic tab bar with labels."}),"\n",(0,i.jsxs)(n.p,{children:["Note that you ",(0,i.jsx)(n.strong,{children:"cannot"})," use the ",(0,i.jsx)(n.code,{children:"useNavigation"})," hook inside the ",(0,i.jsx)(n.code,{children:"tabBar"})," since ",(0,i.jsx)(n.code,{children:"useNavigation"})," is only available inside screens. You get a ",(0,i.jsx)(n.code,{children:"navigation"})," prop for your ",(0,i.jsx)(n.code,{children:"tabBar"})," which you can use instead:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"function MyTabBar({ navigation }) {\n return (\n {\n // Navigate using the `navigation` prop that you received\n // highlight-next-line\n navigation.navigate('SomeScreen');\n }}\n >\n Go somewhere\n \n );\n}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,i.jsxs)(n.p,{children:["The following ",(0,i.jsx)(n.a,{href:"/docs/screen-options",children:"options"})," can be used to configure the screens in the navigator:"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-options"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"\n {/* ... */}\n\n"})}),"\n",(0,i.jsx)(n.h4,{id:"title",children:(0,i.jsx)(n.code,{children:"title"})}),"\n",(0,i.jsxs)(n.p,{children:["Generic title that can be used as a fallback for ",(0,i.jsx)(n.code,{children:"headerTitle"})," and ",(0,i.jsx)(n.code,{children:"tabBarLabel"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarlabel",children:(0,i.jsx)(n.code,{children:"tabBarLabel"})}),"\n",(0,i.jsxs)(n.p,{children:["Title string of a tab displayed in the tab bar or a function that given ",(0,i.jsx)(n.code,{children:"{ focused: boolean, color: string }"})," returns a React.Node, to display in tab bar. When undefined, scene ",(0,i.jsx)(n.code,{children:"title"})," is used. To hide, see ",(0,i.jsx)(n.a,{href:"#tabbarshowlabel",children:(0,i.jsx)(n.code,{children:"tabBarShowLabel"})})," option."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbaraccessibilitylabel",children:(0,i.jsx)(n.code,{children:"tabBarAccessibilityLabel"})}),"\n",(0,i.jsx)(n.p,{children:"Accessibility label for the tab button. This is read by the screen reader when the user taps the tab. It's recommended to set this if you don't have a label for the tab."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarallowfontscaling",children:(0,i.jsx)(n.code,{children:"tabBarAllowFontScaling"})}),"\n",(0,i.jsx)(n.p,{children:"Whether label font should scale to respect Text Size accessibility settings."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarshowlabel",children:(0,i.jsx)(n.code,{children:"tabBarShowLabel"})}),"\n",(0,i.jsxs)(n.p,{children:["Whether the tab label should be visible. Defaults to ",(0,i.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbaricon",children:(0,i.jsx)(n.code,{children:"tabBarIcon"})}),"\n",(0,i.jsxs)(n.p,{children:["Function that given ",(0,i.jsx)(n.code,{children:"{ focused: boolean, color: string }"})," returns a React.Node, to display in the tab bar."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarshowicon",children:(0,i.jsx)(n.code,{children:"tabBarShowIcon"})}),"\n",(0,i.jsxs)(n.p,{children:["Whether the tab icon should be visible. Defaults to ",(0,i.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbarbadge",children:(0,i.jsx)(n.code,{children:"tabBarBadge"})}),"\n",(0,i.jsx)(n.p,{children:"Function that returns a React element to use as a badge for the tab."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarindicator",children:(0,i.jsx)(n.code,{children:"tabBarIndicator"})}),"\n",(0,i.jsx)(n.p,{children:"Function that returns a React element as the tab bar indicator."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarindicatorstyle",children:(0,i.jsx)(n.code,{children:"tabBarIndicatorStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab bar indicator."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarindicatorcontainerstyle",children:(0,i.jsx)(n.code,{children:"tabBarIndicatorContainerStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the view containing the tab bar indicator."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarbuttontestid",children:(0,i.jsx)(n.code,{children:"tabBarButtonTestID"})}),"\n",(0,i.jsx)(n.p,{children:"ID to locate this tab button in tests."}),"\n",(0,i.jsx)(n.h4,{id:"tabbaractivetintcolor",children:(0,i.jsx)(n.code,{children:"tabBarActiveTintColor"})}),"\n",(0,i.jsx)(n.p,{children:"Color for the icon and label in the active tab."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarinactivetintcolor",children:(0,i.jsx)(n.code,{children:"tabBarInactiveTintColor"})}),"\n",(0,i.jsx)(n.p,{children:"Color for the icon and label in the inactive tabs."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarpresscolor",children:(0,i.jsx)(n.code,{children:"tabBarPressColor"})}),"\n",(0,i.jsx)(n.p,{children:"Color for material ripple (Android >= 5.0 only)."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarpressopacity",children:(0,i.jsx)(n.code,{children:"tabBarPressOpacity"})}),"\n",(0,i.jsx)(n.p,{children:"Opacity for pressed tab (iOS and Android < 5.0 only)."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarbounces",children:(0,i.jsx)(n.code,{children:"tabBarBounces"})}),"\n",(0,i.jsx)(n.p,{children:"Boolean indicating whether the tab bar bounces when overscrolling."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarscrollenabled",children:(0,i.jsx)(n.code,{children:"tabBarScrollEnabled"})}),"\n",(0,i.jsx)(n.p,{children:"Boolean indicating whether to make the tab bar scrollable."}),"\n",(0,i.jsxs)(n.p,{children:["If you set this to ",(0,i.jsx)(n.code,{children:"true"}),", you should also specify a width in ",(0,i.jsx)(n.code,{children:"tabBarItemStyle"})," to improve the performance of initial render."]}),"\n",(0,i.jsx)(n.h4,{id:"tabbariconstyle",children:(0,i.jsx)(n.code,{children:"tabBarIconStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab icon container."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarlabelstyle",children:(0,i.jsx)(n.code,{children:"tabBarLabelStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab label."}),"\n",(0,i.jsx)(n.h4,{id:"tabbaritemstyle",children:(0,i.jsx)(n.code,{children:"tabBarItemStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the individual tab items."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarcontentcontainerstyle",children:(0,i.jsx)(n.code,{children:"tabBarContentContainerStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the view containing the tab items."}),"\n",(0,i.jsx)(n.h4,{id:"tabbarstyle",children:(0,i.jsx)(n.code,{children:"tabBarStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style object for the tab bar."}),"\n",(0,i.jsx)(n.h4,{id:"swipeenabled",children:(0,i.jsx)(n.code,{children:"swipeEnabled"})}),"\n",(0,i.jsxs)(n.p,{children:["Boolean indicating whether to enable swipe gestures. Swipe gestures are enabled by default. Passing ",(0,i.jsx)(n.code,{children:"false"})," will disable swipe gestures, but the user can still switch tabs by pressing the tab bar."]}),"\n",(0,i.jsx)(n.h4,{id:"lazy",children:(0,i.jsx)(n.code,{children:"lazy"})}),"\n",(0,i.jsxs)(n.p,{children:["Whether this screen should be lazily rendered. When this is set to ",(0,i.jsx)(n.code,{children:"true"}),", the screen will be rendered as it comes into the viewport. By default all screens are rendered to provide a smoother swipe experience. But you might want to defer the rendering of screens out of the viewport until the user sees them. To enable lazy rendering for this screen, set ",(0,i.jsx)(n.code,{children:"lazy"})," to ",(0,i.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["When you enable ",(0,i.jsx)(n.code,{children:"lazy"}),", the lazy loaded screens will usually take some time to render when they come into the viewport. You can use the ",(0,i.jsx)(n.code,{children:"lazyPlaceholder"})," prop to customize what the user sees during this short period."]}),"\n",(0,i.jsx)(n.h4,{id:"lazypreloaddistance",children:(0,i.jsx)(n.code,{children:"lazyPreloadDistance"})}),"\n",(0,i.jsxs)(n.p,{children:["When ",(0,i.jsx)(n.code,{children:"lazy"})," is enabled, you can specify how many adjacent screens should be preloaded in advance with this prop. This value defaults to ",(0,i.jsx)(n.code,{children:"0"})," which means lazy pages are loaded as they come into the viewport."]}),"\n",(0,i.jsx)(n.h4,{id:"lazyplaceholder",children:(0,i.jsx)(n.code,{children:"lazyPlaceholder"})}),"\n",(0,i.jsxs)(n.p,{children:["Function that returns a React element to render if this screen hasn't been rendered yet. The ",(0,i.jsx)(n.code,{children:"lazy"})," option also needs to be enabled for this to work."]}),"\n",(0,i.jsx)(n.p,{children:"This view is usually only shown for a split second. Keep it lightweight."}),"\n",(0,i.jsxs)(n.p,{children:["By default, this renders ",(0,i.jsx)(n.code,{children:"null"}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"scenestyle",children:(0,i.jsx)(n.code,{children:"sceneStyle"})}),"\n",(0,i.jsx)(n.p,{children:"Style to apply to the view wrapping each screen. You can pass this to override some default styles such as overflow clipping."}),"\n",(0,i.jsx)(n.h3,{id:"events",children:"Events"}),"\n",(0,i.jsxs)(n.p,{children:["The navigator can ",(0,i.jsx)(n.a,{href:"/docs/navigation-events",children:"emit events"})," on certain actions. Supported events are:"]}),"\n",(0,i.jsx)(n.h4,{id:"tabpress",children:(0,i.jsx)(n.code,{children:"tabPress"})}),"\n",(0,i.jsx)(n.p,{children:"This event is fired when the user presses the tab button for the current screen in the tab bar. By default a tab press does several things:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"If the tab is not focused, tab press will focus that tab"}),"\n",(0,i.jsxs)(n.li,{children:["If the tab is already focused:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If the screen for the tab renders a scroll view, you can use ",(0,i.jsx)(n.a,{href:"/docs/use-scroll-to-top",children:(0,i.jsx)(n.code,{children:"useScrollToTop"})})," to scroll it to top"]}),"\n",(0,i.jsxs)(n.li,{children:["If the screen for the tab renders a stack navigator, a ",(0,i.jsx)(n.code,{children:"popToTop"})," action is performed on the stack"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["To prevent the default behavior, you can call ",(0,i.jsx)(n.code,{children:"event.preventDefault"}),":"]}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-prevent-default"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"React.useEffect(() => {\n const unsubscribe = navigation.addListener('tabPress', (e) => {\n // Prevent default behavior\n e.preventDefault();\n\n // Do something manually\n // ...\n });\n\n return unsubscribe;\n}, [navigation]);\n"})}),"\n",(0,i.jsx)(n.h4,{id:"tablongpress",children:(0,i.jsx)(n.code,{children:"tabLongPress"})}),"\n",(0,i.jsx)(n.p,{children:"This event is fired when the user presses the tab button for the current screen in the tab bar for an extended period."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"React.useEffect(() => {\n const unsubscribe = navigation.addListener('tabLongPress', (e) => {\n // Do something\n });\n\n return unsubscribe;\n}, [navigation]);\n"})}),"\n",(0,i.jsx)(n.h3,{id:"helpers",children:"Helpers"}),"\n",(0,i.jsx)(n.p,{children:"The tab navigator adds the following methods to the navigation object:"}),"\n",(0,i.jsx)(n.h4,{id:"jumpto",children:(0,i.jsx)(n.code,{children:"jumpTo"})}),"\n",(0,i.jsx)(n.p,{children:"Navigates to an existing screen in the tab navigator. The method accepts following arguments:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"})," - ",(0,i.jsx)(n.em,{children:"string"})," - Name of the route to jump to."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"params"})," - ",(0,i.jsx)(n.em,{children:"object"})," - Screen params to pass to the destination route."]}),"\n"]}),"\n",(0,i.jsx)("samp",{id:"material-top-tab-jump-to"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"navigation.jumpTo('Profile', { name: 'Micha\u015B' });\n"})}),"\n",(0,i.jsx)(n.h3,{id:"hooks",children:"Hooks"}),"\n",(0,i.jsx)(n.p,{children:"The material top tab navigator exports the following hooks:"}),"\n",(0,i.jsx)(n.h4,{id:"usetabanimation",children:(0,i.jsx)(n.code,{children:"useTabAnimation"})}),"\n",(0,i.jsx)(n.p,{children:"This hook returns an object containing an animated value that represents the current position of the tabs. This can be used to animate elements based on the swipe position of the tabs, such as the tab indicator:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import { Animated } from 'react-native';\nimport { useTabAnimation } from '@react-navigation/material-top-tabs';\n\nfunction MyView() {\n const { position } = useTabAnimation();\n\n return (\n \n );\n}\n"})})]})}function b(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},5525:function(e,n,t){t.d(n,{Z:()=>o});var a=t("85893");t("67294");var i=t("67026");let r="tabItem_Ymn6";function o(e){let{children:n,hidden:t,className:o}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r,o),hidden:t,children:n})}},47902:function(e,n,t){t.d(n,{Z:()=>f});var a=t("85893"),i=t("67294"),r=t("67026"),o=t("69599"),s=t("16550"),l=t("32000"),c=t("4520"),d=t("38341"),h=t("76009");function u(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,i.isValidElement)(e)&&function(e){let{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw Error("Docusaurus error: Bad child <".concat("string"==typeof e.type?e.type:e.type.name,'>: all children of the component should be , and every should have a unique "value" prop.'))}))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function b(e){let{value:n,tabValues:t}=e;return t.some(e=>e.value===n)}var p=t("7227");let v="tabList__CuJ",x="tabItem_LNqP";function j(e){let{className:n,block:t,selectedValue:i,selectValue:s,tabValues:l}=e,c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),h=e=>{let n=e.currentTarget,t=l[c.indexOf(n)].value;t!==i&&(d(n),s(t))},u=e=>{var n,t;let a=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{let t=c.indexOf(e.currentTarget)+1;a=null!==(n=c[t])&&void 0!==n?n:c[0];break}case"ArrowLeft":{let n=c.indexOf(e.currentTarget)-1;a=null!==(t=c[n])&&void 0!==t?t:c[c.length-1]}}null==a||a.focus()};return(0,a.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:l.map(e=>{let{value:n,label:t,attributes:o}=e;return(0,a.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>c.push(e),onKeyDown:u,onClick:h,...o,className:(0,r.Z)("tabs__item",x,null==o?void 0:o.className,{"tabs__item--active":i===n}),children:null!=t?t:n},n)})})}function m(e){let{lazy:n,children:t,selectedValue:o}=e,s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){let e=s.find(e=>e.props.value===o);return e?(0,i.cloneElement)(e,{className:(0,r.Z)("margin-top--md",e.props.className)}):null}return(0,a.jsx)("div",{className:"margin-top--md",children:s.map((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==o}))})}function g(e){let n=function(e){let{defaultValue:n,queryString:t=!1,groupId:a}=e,r=function(e){let{values:n,children:t}=e;return(0,i.useMemo)(()=>{let e=null!=n?n:u(t).map(e=>{let{props:{value:n,label:t,attributes:a,default:i}}=e;return{value:n,label:t,attributes:a,default:i}});return!function(e){let n=(0,d.lx)(e,(e,n)=>e.value===n.value);if(n.length>0)throw Error('Docusaurus error: Duplicate values "'.concat(n.map(e=>e.value).join(", "),'" found in . Every value needs to be unique.'))}(e),e},[n,t])}(e),[o,p]=(0,i.useState)(()=>(function(e){var n;let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw Error('Docusaurus error: The has a defaultValue "'.concat(t,'" but none of its children has the corresponding value. Available values are: ').concat(a.map(e=>e.value).join(", "),". If you intend to show no default tab, use defaultValue={null} instead."));return t}let i=null!==(n=a.find(e=>e.default))&&void 0!==n?n:a[0];if(!i)throw Error("Unexpected error: 0 tabValues");return i.value})({defaultValue:n,tabValues:r})),[v,x]=function(e){let{queryString:n=!1,groupId:t}=e,a=(0,s.k6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:n,groupId:t}),o=(0,c._X)(r);return[o,(0,i.useCallback)(e=>{if(!r)return;let n=new URLSearchParams(a.location.search);n.set(r,e),a.replace({...a.location,search:n.toString()})},[r,a])]}({queryString:t,groupId:a}),[j,m]=function(e){var n;let{groupId:t}=e;let a=(n=t)?"docusaurus.tab.".concat(n):null,[r,o]=(0,h.Nk)(a);return[r,(0,i.useCallback)(e=>{if(!!a)o.set(e)},[a,o])]}({groupId:a}),g=(()=>{let e=null!=v?v:j;return b({value:e,tabValues:r})?e:null})();return(0,l.Z)(()=>{g&&p(g)},[g]),{selectedValue:o,selectValue:(0,i.useCallback)(e=>{if(!b({value:e,tabValues:r}))throw Error("Can't select invalid tab value=".concat(e));p(e),x(e),m(e)},[x,m,r]),tabValues:r}}(e);return(0,a.jsxs)("div",{className:(0,r.Z)("tabs-container",v),children:[(0,a.jsx)(j,{...n,...e}),(0,a.jsx)(m,{...n,...e})]})}function f(e){let n=(0,p.Z)();return(0,a.jsx)(g,{...e,children:u(e.children)},String(n))}},50065:function(e,n,t){t.d(n,{Z:function(){return s},a:function(){return o}});var a=t(67294);let i={},r=a.createContext(i);function o(e){let n=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.48432d49.js b/assets/js/runtime~main.2ccceae1.js similarity index 99% rename from assets/js/runtime~main.48432d49.js rename to assets/js/runtime~main.2ccceae1.js index 7f195712c5..8f16928695 100644 --- a/assets/js/runtime~main.48432d49.js +++ b/assets/js/runtime~main.2ccceae1.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b,t,n,r={},o={};function i(e){var f=o[e];if(void 0!==f)return f.exports;var a=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=r,i.c=o,i.n=function(e){var f=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(f,{a:f}),f},f=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},i.t=function(a,c){if(1&c&&(a=this(a)),8&c||"object"==typeof a&&a&&(4&c&&a.__esModule||16&c&&"function"==typeof a.then))return a;var d=Object.create(null);i.r(d);var b={};e=e||[null,f({}),f([]),f(f)];for(var t=2&c&&a;"object"==typeof t&&!~e.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(function(e){b[e]=function(){return a[e]}});return b.default=function(){return a},i.d(d,b),d},i.d=function(e,f){for(var a in f)i.o(f,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},i.f={},i.e=function(e){return Promise.all(Object.keys(i.f).reduce(function(f,a){return i.f[a](e,f),f},[]))},i.hmd=function(e){return!(e=Object.create(e)).children&&(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},i.u=function(e){return"assets/js/"+(({10106:"814f3328",10129:"bd109270",10385:"b265e1a0",10428:"a2205702",10647:"1eecde9e",107:"8a143e5b",10707:"82bb8736",10742:"857226cd",10845:"ae5fe58f",11:"ddf45c7d",11252:"db124b13",11289:"cf1736b4",11295:"d08734b9",11393:"f171b4fe",11447:"5f5c23d7",11485:"29af1846",11489:"0058b4c6",11527:"a50c5cfe",11565:"4097ee88",11659:"1b06775d",11845:"9b2fbcce",11905:"81cb56fd",12143:"d52010ac",12575:"cb1ca3b7",12761:"a5a8f997",1324:"fb896c9f",13447:"7aa771dd",13466:"68b0fc05",13481:"2c6e00e5",13825:"b319bd37",13926:"a7b093db",13937:"1233d971",14005:"7745b380",14096:"0732884c",1410:"75a3cde9",14617:"b540d135",15112:"aba21aa0",15397:"8d3063a8",1558:"1fc9112c",15639:"682ce172",15879:"1e63bad8",15948:"28ae1e59",16039:"cd3769cf",16063:"53be29f2",16378:"c088c624",16973:"0ad77dda",17146:"6354cbd6",17155:"87087cb3",17277:"67bc1365",17383:"86d1f714",17448:"f33b6a3d",17596:"47cdb689",17810:"6f9c9b78",18037:"1ca07b31",18077:"8d30a36f",18378:"9a16bb9d",18511:"1be5ddd6",18559:"7a359cef",1896:"76725556",1925:"96c45902",19306:"5050cca3",19403:"a4ac0748",19641:"d3ee3b94",19718:"34e8079f",19914:"a94703ab",2007:"d84a04ad",20262:"8927ca75",2037:"723a1d1f",20468:"9b7f82fe",20634:"55b92464",20787:"a62e5334",20973:"c2c0d6a0",21210:"11c37a84",21408:"208b9e32",21489:"51368b5b",21741:"d4bc90ec",21817:"fd014fef",22:"e0160539",22067:"45e61a04",22147:"2bba45e9",22337:"904009dc",226:"15cb52a8",22749:"1c007cbb",22776:"891dacb7",22882:"6f67031a",22908:"f82f4518",23202:"51035c32",23256:"b324ebf9",2327:"d92e70e8",23311:"42baf60a",23322:"cb5b2a41",23482:"0f251e76",23864:"2bf47602",24470:"06aa38ed",24558:"23dd3248",2472:"a44cee0b",24852:"66875650",24968:"884b85fa",25082:"3a7a90e6",25149:"b89e1214",25270:"9a1d032e",25310:"6a7fdb9e",25358:"ff849402",25472:"f60c941b",25537:"7e788281",25630:"6351806c",25836:"f0d91a18",25939:"36dd008b",26073:"2a1e22c6",26078:"41d864f0",26082:"a76a7284",26091:"5f623a5c",26199:"11edefd1",26211:"f3886628",26384:"868d8162",26457:"b93a612d",26952:"2f88b479",2703:"6289cd6c",27117:"07fb801c",27298:"c9bae406",27447:"b2248fa5",27627:"acecf23e",27672:"1c2eab2d",27681:"ec406ec4",27741:"f45c00a7",2818:"93402b4f",28586:"79dbb029",28630:"8a507deb",29056:"f6f7d065",29491:"4d2cce11",2952:"2ad06cff",29617:"a9397062",2976:"6b20cb2f",29841:"d40bf6ce",29937:"691c8b2c",29979:"320f57a7",2998:"ccc49370",30181:"662e2520",30274:"38945924",30408:"ab534dd1",30428:"fa388b7d",30945:"e3d4941e",30966:"f97eb74e",31017:"585dd972",3140:"48bce793",31523:"38f0ae39",31619:"cec331df",31776:"4971bf21",32058:"e88484b3",3214:"524cb6b9",32169:"b8aafcf7",32413:"ef7138f6",32427:"c183ab7f",32764:"13e4d9ef",33178:"cf282c29",33346:"055cb6cb",33401:"66e8e455",33481:"6f0a4736",33775:"b62ae7ee",33805:"2152a276",33931:"8674297c",34459:"0ca22e55",34613:"4294b48d",34654:"cf1b6d54",34781:"47734c36",348:"09dc4294",34899:"c414ff41",34941:"ae733de4",3513:"9150b537",35164:"c94cee29",352:"017fa78e",35524:"f81c1134",35757:"79893160",35774:"db02a756",35824:"f265caf3",36041:"be35566b",36130:"5a6e47ce",36579:"eebb4bfa",37159:"0bcf026f",37300:"3288f5dd",37538:"df5aa17f",37784:"66b225ca",37819:"a92cc67c",37833:"541e64db",37867:"57bdb9cf",38010:"957ba597",38191:"20989594",38229:"f4398715",38299:"00d72952",38375:"553b20f2",38561:"bc98b856",38768:"8386ba1d",39215:"52030153",39328:"b48787b6",39471:"73cd3c7f",39854:"621db11d",40166:"c320ebc8",40211:"d5baa5c1",40271:"b0c8eb24",40326:"a601a56a",40565:"01a85c17",40569:"9d130922",41178:"6a29eacd",41675:"69e3adff",42829:"94d96abc",42875:"8520aa43",43230:"08c74c36",43512:"c2e8381f",43618:"23828948",43879:"220adfdd",43897:"7f3ebd16",43917:"f3898f13",43950:"f5632d3b",44063:"fc5e52ef",44424:"5834e856",44457:"3dd22c0a",44578:"a8527a90",44895:"fe0c5989",45221:"ad88f797",45449:"2c1dfa59",45617:"d4a28cdc",45797:"156bcb80",46106:"8526e2d7",46150:"2e363522",47092:"e95c8dff",47143:"3a2db09e",47233:"ce5a6cfc",47248:"18bf351a",47293:"9e4087bc",47354:"4dad2d95",47511:"48627ccf",47575:"99b846b2",47730:"1f27758d",4774:"188f698f",47900:"f3135da8",47993:"34a92c49",47996:"58932f68",48304:"e3217e06",48538:"08731dbd",48719:"b3da0717",48740:"9d86e7fa",49194:"f2fd19de",49599:"ee216893",49622:"7278614b",49710:"5a783331",49933:"ecd87419",50196:"11fb85f3",50219:"f176e462",50484:"7c94a739",50651:"8da40a13",50787:"beb39e3f",5090:"d547d075",5116:"979dc077",51508:"fdeac899",51741:"732a0bdd",51989:"f066ce3d",52023:"a103d9cd",52285:"cb35979a",52527:"6054d54f",52536:"ac6d5fda",52727:"5f32cb9f",53043:"34737634",53673:"de6d21b5",53686:"3ddd3618",53696:"4affc812",53967:"38e75df9",5405:"0e9dd1f6",54416:"a06a0936",54450:"14616538",54501:"2742fd1f",54514:"506fd606",54869:"f745e7d6",54870:"c90d5789",54904:"17b59e25",54948:"915d8cad",55211:"a7bd4aaa",55215:"5f99a06b",55315:"bdc0380f",55643:"c716f0e7",55941:"693618f8",56106:"493070b6",56130:"7f0203ae",56618:"c9cac9d9",56644:"2a793fe9",56876:"825d5fdb",5691:"ef628c14",57437:"78260baf",57467:"8fea52f3",57499:"b91c78db",57520:"be5f3a5f",57562:"db2d2c66",57790:"43895b73",58143:"2725af3e",58146:"ae4abcdb",58201:"af4cf38c",58431:"9585dc18",58434:"d8cb0df4",58851:"5ee02d5e",58982:"ea8a36e7",5905:"243e06fb",59228:"6d6cabdc",59283:"6f680f40",59364:"769a6239",59468:"d7f84142",59580:"5fa530cd",59995:"b03300d9",60011:"48179b36",60083:"6875c492",61253:"75086e52",6130:"c4f5d8e4",61312:"87fb05fe",6150:"6ba5b985",61587:"d9dcdbb0",61649:"7bf45219",61790:"5a6dc606",62351:"df9f3515",62494:"8ea09047",62602:"480dd063",62698:"6df3dc9e",62875:"dc42149f",6302:"a4bf4271",63218:"317e2018",6343:"b5e8ae63",63432:"5e95c892",63469:"dde9984f",6391:"cde59865",63983:"4d989974",64553:"385a96ec",64733:"9ff2e65d",64807:"4f9396e4",64952:"9dbca327",65409:"54ce2ec1",65422:"882617a0",65451:"fffa478c",65482:"ff57007e",65522:"eef70735",65694:"cdc21849",6589:"38fc62f0",66058:"8dffd375",66108:"572e4edf",66301:"e222d324",66466:"d57ffbba",66552:"d42d1fd9",66672:"726a3ae5",66749:"7396804a",66811:"f04ef758",66823:"55b83a48",66899:"1f922c0a",67178:"060b58ec",67189:"17ec3dcd",67273:"7f524dd3",67365:"a7456010",67369:"e4e30971",67439:"508f3f9b",67775:"116934ab",68025:"f71ac7f0",68065:"a4e31e78",68431:"f123de88",69170:"4dd5a1e2",69501:"86ee57b9",69726:"34750482",69745:"ea5ec219",69942:"322cbdb3",7027:"74ef9c09",70329:"37bf63f8",70593:"b65a55e7",70777:"dbb6f292",70894:"27e00fa9",70927:"2330c7a5",71136:"4ed526a6",71212:"2345d271",71368:"3473afe0",7149:"990502fa",71846:"4790fcfc",7226:"472ed44a",72629:"682ba1cc",7265:"34b88438",72792:"36994c47",7284:"b38ea63a",72841:"1279275a",7285:"4f17f4e8",72904:"a187e2b2",73113:"8d8bf681",73201:"a178b8fa",73291:"ccb322b4",73443:"dd056032",73613:"2895d14d",7367:"af725e73",73681:"14716511",73693:"ceb96a6a",73743:"1ae011e9",73890:"421dbb3b",73915:"debf69ae",73931:"198136e6",74090:"2faf7e03",74250:"b296b8b0",7427:"0cd801b6",74400:"deb950c3",75185:"d71b2077",75216:"0e9f90e2",75423:"9ae89415",75688:"aeac9b7f",75921:"22592995",75991:"2f8e0f44",76171:"baaf111f",76235:"7d87cf11",76338:"82bb0d50",7663:"298dce3d",76661:"d513a03c",7667:"6fc7b633",76672:"0fd48e70",76927:"7ac60746",76964:"88089c81",76970:"7bde2dda",76982:"bbc7a4b0",77132:"a2851e91",77266:"c47cf68d",77278:"f22d3a1f",77499:"9b8e03c9",77576:"ef5f5123",77638:"f100c192",77738:"c141421f",77860:"7be16658",78e3:"5240ccd3",78269:"5fa34f3e",78543:"34642e36",78771:"b6e1e9f1",78835:"79ac6895",78973:"a345bb73",79194:"86f1fc09",79359:"c15d9823",79429:"2e5371a8",79556:"94bac345",79740:"7c7f82ce",79807:"f6756196",79926:"d1b2904b",80471:"b0b51b63",80491:"0e0a3cb0",8061:"3f09e8c5",80745:"f81e0c67",81176:"4de4f0aa",81646:"a90dbb68",81780:"cdf30472",82003:"6f2d5ee8",82281:"720ec844",82650:"a11e2eb6",82674:"02f293a2",82734:"1d424ec3",83213:"6578c24b",83305:"6bc8f2a2",83333:"6bcec069",834:"e83bbd46",83565:"885db2d5",83769:"4a85a9e1",83885:"168ed425",83899:"18b2070b",84047:"a83f720f",8458:"4f52b89f",84609:"b89f9e6f",84919:"1b79fc76",85033:"85ef44ad",85120:"190dc87f",85230:"1a4e3797",85257:"2965ee69",85261:"3fe99ec0",85335:"22cce5e3",85443:"ab0218ea",85725:"63a36266",85739:"c0782dcc",86162:"7cbef4dd",8627:"3d65d037",86329:"abac2178",86415:"fdba686e",86587:"66169356",87048:"17896441",87063:"3d5c69eb",87236:"c7ff647e",87618:"cafedc52",87974:"74cdd3dc",88294:"22f4682c",88808:"c6c8c51b",88926:"7a316a81",88937:"9122f241",89384:"15f1c7c7",89464:"17d003f0",89784:"72a85bb9",89885:"77aa6ed4",89911:"b6ac21f8",90502:"454aff66",90561:"8521727c",90580:"c259c03a",90690:"0334870a",90826:"cdb30427",90878:"f1d3306a",90975:"f6147c3e",91215:"f75590ae",91311:"b81de6e7",91472:"61322d15",91617:"61da15b7",91705:"d67ed22e",92134:"ef8b811a",92332:"14acaad8",92359:"802bca5d",92493:"1f391b9e",92561:"242b7c9d",92785:"63f4abc2",93118:"2bc9c82b",9329:"278698af",93711:"31a4dab7",93749:"a5ae78fa",93773:"6f859436",93803:"3d2d3ec8",9389:"430040aa",94095:"72619197",94169:"482751c5",94496:"029dc854",94622:"966cb129",94629:"4aa34a2d",94641:"bf3d013e",9475:"b9ccf281",95197:"56fbc2ce",95256:"f4e7a611",95822:"349caeb8",95935:"8c4738b1",95971:"20697995",96010:"69616a12",96029:"4554b8eb",96077:"5f7a57d5",9615:"34afa66a",96345:"0f789a65",96402:"2e2591dd",96631:"c71fcd84",96735:"32c90e4f",96898:"50f409bc",96955:"3bdd1be4",97241:"e14b9321",97379:"9af3f201",97390:"65636706",97754:"87288241",98249:"16d126b2",98293:"c8d61245",98320:"900b69c6",98329:"95e9668b",98514:"a6aa9e1f",98573:"a5ad4ffe",98609:"f60d5e0f",98920:"fca5fd4e",98993:"3e290227",99163:"c96bcf0e",99284:"20f68260",99866:"7a69f3f2"})[e]||e)+"."+({10106:"4a9aa425",10129:"73cf8b79",10385:"f1a7cfb1",10428:"21b3efed",10647:"08ed36eb",107:"a7d374bd",10707:"49c2a62c",10742:"8845f0d9",10845:"68f72506",11:"b274e797",11252:"c622515d",11289:"89dec3e7",11295:"e36d4cdb",11393:"908fbc53",11447:"ba8895ac",11485:"08849750",11489:"f9c11529",11527:"26cbd553",11565:"caa3ee2f",11659:"047b403f",11845:"d4dc9a8e",11905:"b380da61",12143:"618d66e5",12575:"83c2bc8e",12761:"4e97a327",1324:"3bf7527a",13447:"8936e8d6",13466:"97e24a1c",13481:"a05b0bca",13825:"f8688f6e",13926:"b0607d27",13937:"86e416a7",14005:"64b45f88",14096:"92e5809c",1410:"7458dab5",14617:"57fce2a9",15112:"eec51e63",15397:"b40918fd",1558:"94238fd3",15639:"3169cfa4",15879:"430a3eac",15948:"cb40c738",16039:"813ece75",16063:"70792b50",16378:"af8b93f7",16973:"8dafbdca",17146:"47ba1062",17155:"f5d4cac4",17277:"9414fec2",17383:"a6eb9b1d",17448:"aac2cd00",17596:"776ead09",17810:"0ae98f5e",18037:"b7cc50ae",18077:"e8046f60",18378:"dbb8277b",18511:"43200485",18559:"69265929",1896:"8fa491be",1925:"decac3c5",19306:"099fee30",19403:"31915c89",19641:"fa0e6946",19718:"bdc393b2",19914:"eede3d81",2007:"7f95d611",20262:"6bd610af",2037:"bceed48d",20468:"3afbdeb2",20634:"4b5973fd",20787:"11dfadd2",20973:"0131f5d8",21210:"bf84d331",21408:"381941da",21489:"e34be2bc",21741:"318a0675",21817:"fbc68816",22:"591caf3a",22067:"dd82e091",22147:"0e46e28c",22337:"518c30c1",226:"f2380f06",22749:"9d78a60a",22776:"af7c3b9d",22882:"b99f017c",22908:"5832f7ce",23202:"a2fdefb2",23256:"226d5327",2327:"2c757b0d",23311:"9e33ae27",23322:"4d85a030",23482:"60cae136",23864:"cd2837ac",24470:"f7fcd7dd",24558:"e0d4c079",2472:"8822e9b1",24852:"44b43d26",24968:"e8ecc6ec",25082:"b816475c",25149:"dccda7e6",25270:"56e0c9be",25310:"553344fa",25358:"75355890",25472:"e9a89f53",25537:"e7ed3654",25630:"a4b8f64d",25836:"af89abd8",25939:"b95e6771",26073:"44f8d8f0",26078:"5bf54f3b",26082:"0c2ddced",26091:"5f47c449",26199:"a4da761d",26211:"dfd5d1ba",26384:"cbc37d6a",26457:"ef7b8fcf",26952:"2fb526d3",2703:"3d35a343",27117:"08fb46fb",27298:"a3bff57f",27447:"13c29bdb",27627:"9e1a99be",27672:"3c20df5e",27681:"0f1032dc",27741:"c74cc34a",2818:"a5dbd4ab",28586:"ddca9062",28630:"7cc5bbd5",29056:"3ad55f7c",29491:"0b263d69",2952:"7aecea83",29617:"70eae5f8",2976:"4487a436",29841:"d290bdd9",29937:"61e8fb8f",29979:"9970af3b",2998:"9d294596",30181:"ed6cee0d",30274:"989a7597",30288:"0caa8c54",30408:"fe2a1ace",30428:"788103e8",30945:"37d62a99",30966:"351d5a75",31017:"a2337a02",3140:"73c146c1",31523:"1e327ea3",31619:"2dce55ad",31776:"08def6e6",32058:"3609335e",3214:"c28a01f2",32169:"4657874f",32413:"09e20321",32427:"459df564",32764:"6ae07e44",33178:"ddeb4233",33346:"f8dd95d9",33401:"6d188207",33481:"f35e53a2",33775:"84e86cf0",33805:"20350934",33931:"b26e070e",34459:"7015e119",34613:"9aec12a6",34654:"7251cbea",34781:"d989934b",348:"323f4a62",34899:"fd11ca89",34941:"c2cf631e",3513:"94ad98dd",35164:"99df13ec",352:"b6dcd636",35524:"8a5bc3fe",35757:"9b520aa0",35774:"56b4d419",35824:"563fc242",36041:"b06e1abb",36130:"c0982f19",36579:"1f51ab35",37159:"67a7a3f3",37300:"130f6342",37538:"eb591ac9",37784:"1ab7fe73",37819:"f541df99",37833:"5b8f64e4",37867:"13bf2e65",38010:"6ed39c8f",38191:"b98a7c5f",38229:"4f8401aa",38299:"4d3b2092",38375:"ab3124e4",38561:"ac10136f",38768:"80210780",39215:"ec553b13",39328:"a1ed080d",39471:"5ea13cc4",39854:"d37be431",40166:"df2da06d",40211:"ad0d0cf2",40271:"08026608",40326:"19924f94",40565:"4e9ca58a",40569:"90efae79",41178:"e5c37e8e",41675:"34be54ec",42829:"b8864c47",42875:"89654618",43230:"322957e6",43512:"1fcf92b1",43618:"35a4bc19",43879:"9d191948",43897:"662922e9",43917:"10282acd",43950:"c15f94cc",44063:"137d9c69",44424:"82c86d43",44457:"038a6afa",44578:"be90acdc",44895:"2994c952",45221:"502710ca",45449:"ad540212",45617:"37d1efae",45797:"f9ad6eda",45995:"4ac80c40",46106:"f57a40f9",46150:"4d7d70b2",47092:"1fdeef59",47143:"3912162a",47233:"1fc7f611",47248:"c1cbc97d",47293:"92e845d9",47354:"0834031c",47511:"19418d29",47575:"11f13a94",47730:"59ea1100",4774:"dfe96241",47900:"20fbf438",47993:"dfa12622",47996:"bdc33612",48304:"704700a3",48538:"77bcc5bf",48719:"e0159929",48740:"0ab2829f",49194:"95593c34",49599:"f8e9c908",49622:"ff06d4ed",49710:"8c869534",49933:"17299056",50196:"11de0448",50219:"097d68f4",50484:"9bf4af3b",50651:"0237e04b",50787:"0b6c8d6d",5090:"82d8c1e7",50955:"750034af",5116:"97ce2430",51508:"65798653",51741:"88050a8b",51989:"4ceab001",52023:"bdf13bf0",52285:"620009bd",52527:"d3cfa03f",52536:"ae0b9734",52727:"86d91a77",53043:"1de6a714",53192:"07cae9fa",53673:"fb4f2315",53686:"b1b05e0e",53696:"8bb3c187",53967:"1197c800",5405:"bc7a0328",54416:"7cacb38f",54450:"bcd86590",54501:"f82b80a9",54514:"ab3a9196",54869:"6fc9c9b5",54870:"0e8fe6af",54904:"1dfda9ab",54948:"5a49656a",55211:"a634d32d",55215:"05d65cb3",55315:"67dad65c",55643:"ee07bd58",55941:"6a3a7064",56106:"1885093a",56130:"0ce1e176",56618:"e6ff323e",56644:"68b93078",56876:"7061e94d",5691:"b0d2ccce",57437:"966260d4",57467:"6b48f8aa",57499:"71d392d0",57520:"ea444320",57562:"1c7e6e4e",57790:"5299553e",58143:"f3b2b351",58146:"50383561",58201:"932e95f3",58431:"7d9771b2",58434:"40c2532a",58851:"0c2ae5cf",58982:"39e0efd8",5905:"5ffe0a58",59228:"702e3650",59283:"94e63cde",59364:"e7cfe9dc",59468:"071cc6c9",59580:"46c7f9eb",59952:"b94c7811",59995:"4db9261a",60011:"45b0353d",60083:"beedb49a",60740:"08bcd753",61253:"77a00f75",6130:"aea842c9",61312:"81b780a7",6150:"0d7f6a89",61587:"9a00538f",61649:"12257f42",61790:"05966bac",62154:"02cbab24",62351:"7092abdb",62494:"ed2bcca2",62602:"06680cee",62698:"74baa7b2",62875:"02b9c3e0",6302:"763de2b2",63218:"7512906b",6343:"ef529722",63432:"cc3ce17c",63469:"f0412400",6391:"f1fd529e",63983:"e3132a39",64553:"41a04306",64733:"0a79d5dc",64807:"18dd31e8",64952:"0510a5b4",65409:"e9f658c0",65422:"d372bb76",65451:"dae0bd42",65482:"7ca9491e",65522:"482e2e21",65694:"0577da25",6589:"63532197",66058:"8e46f716",66108:"09e92820",66301:"9ee8df9c",66466:"9d2722ae",66552:"a1912779",66672:"e77cf0aa",66749:"afed9119",66811:"ea3992fd",66823:"93ee3adf",66899:"d6941731",67178:"60c17831",67189:"ecdb98c1",67273:"a342a6ae",67365:"d63ddd76",67369:"b5196472",67439:"6c9a6fd8",67775:"093f6639",68025:"bce90ae4",68065:"8bacad14",68431:"ef76ee6b",69170:"6af9732b",69196:"b3245c95",69501:"c4aa5b1d",69726:"bede5120",69745:"9cca3c0b",69942:"dd3738a7",7027:"ee5c732c",70329:"c7940891",70593:"a3324838",70777:"e01d7e10",70894:"215bfdc5",70927:"f471a328",71136:"3b1626c1",71212:"ad430db4",71368:"0fc9ec8c",7149:"ef4a49ce",71846:"837cb833",7226:"5257e67c",72629:"c896461c",7265:"59b070b2",72792:"613a0c61",7284:"1a73d7d9",72841:"f6386c12",7285:"b18e1711",72904:"86801be2",73113:"eff0dc39",73201:"ee75637a",73291:"a0690560",73443:"ec4aad56",73613:"fecab395",73643:"cb4eb069",7367:"6b1def9f",73681:"a2cafb9b",73693:"2a644075",73743:"2c77e21f",73890:"5e0797c1",73915:"9a3696c0",73931:"bef3acc5",74090:"f26714a3",74250:"703a69f1",7427:"b8195c26",74400:"89c6ae5b",75185:"58588e23",75216:"861cba25",75423:"ba756397",75688:"637edf05",75921:"b979f9e2",75991:"c183c2b3",76171:"1b622b11",76235:"cf3d0a8c",76338:"31b61eec",7663:"1ff20553",76661:"bea10d66",7667:"a61c2703",76672:"fe602648",76927:"4d3b0d12",76964:"e1e8bedb",76970:"a7d1e095",76982:"1e429695",77132:"fabc2046",77266:"ecdd1cb0",77278:"9a251375",77499:"3eb63103",77576:"9f8c2f95",77638:"2d7bf1c4",77738:"21c72d69",77860:"5ba868d9",78e3:"bdb5776e",78269:"6d0ea00b",78543:"f9ad3bd4",78771:"9eac54d7",78835:"20147030",78973:"ff7bc587",79194:"e57a5f4a",79359:"db29f565",79429:"de1c917f",79556:"07522c7a",79740:"a1163cbb",79807:"622d7d6f",79926:"72e486a0",80471:"9fd29d82",80491:"546509ba",8061:"e1b9a09c",80745:"f51e68b7",81176:"29c30f89",81646:"e3e235d6",81780:"c7a65845",82003:"3e871cd3",82281:"61600038",82650:"76f68df6",82674:"347d8448",82734:"9de241dc",83213:"842da069",83305:"5a61f9ac",83333:"7b2b64fe",834:"e46c410e",83565:"b15a90bb",83769:"3272bd27",83885:"62750c74",83899:"f1b774d4",84047:"ef9e374a",84373:"275dddb1",8458:"98a02135",84609:"b0b8eec9",84919:"328eebdf",85033:"35794e85",85120:"7fe83369",85230:"6110359f",85257:"73ededec",85261:"655bf086",85335:"06624ab7",85443:"a42b43f6",85725:"5a8978d4",85739:"48e84e31",86162:"c79a9c85",8627:"82d36cde",86329:"a02d7b40",86415:"e0654cfe",86587:"1e8ef1d3",87048:"928ee8ef",87063:"e86a76d6",87236:"bd99dd9b",87618:"ad20b6a5",87974:"07389b48",88294:"844834ee",88808:"91545c4c",88926:"3148546a",88937:"45112d53",89384:"da776abf",89464:"58ec9650",89784:"b96811d9",89885:"a98e62ba",89911:"e20cd525",90502:"4d1cd0da",90561:"ea6777da",90580:"28fdd18d",90690:"80b641a0",90826:"5e648714",90878:"fe36ce39",90975:"8e80f158",91215:"716a27d2",91311:"efcc18f7",91472:"dca514fd",91617:"76bef3e6",91705:"63293c2e",92134:"a3013deb",92332:"470caf47",92359:"5d3005cf",92493:"e90ff1f8",92561:"8669c45e",92785:"a16bf11e",93118:"b0061c93",9329:"129f6970",93711:"65ed8cfc",93749:"4524f0ea",93773:"cf83e4e3",93803:"04e17f13",9389:"fdb38db7",94095:"15ffd9a6",94169:"3f063e1d",94496:"70461a94",94622:"48c9f665",94629:"9af8579e",94641:"47b9e937",9475:"23c019ef",95197:"10be8751",95256:"9687c5be",95265:"13e69c08",95822:"aa06e67e",95935:"e7f53e24",95971:"3d5e0c05",96010:"90b6989e",96029:"ab141838",96077:"b817a619",9615:"b6aa280c",96345:"cb9df05d",96402:"cfb3afdc",96631:"d86ef482",96735:"6f07ddf4",96898:"f94bb8bc",96955:"5c7f7827",97241:"f6db64bd",97379:"42dd1211",97390:"42140a3f",97626:"17ee787e",97754:"50a4a9bd",98249:"d60f49e0",98293:"c05887a6",98320:"c1073806",98329:"20cfdaf6",98514:"e0dc828f",98573:"4cb69f30",98609:"9433ae86",98920:"129d904f",98993:"e521595d",99163:"551d072f",99284:"5948a447",99866:"3a19fd05"})[e]+".js"},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=function(e,f){return Object.prototype.hasOwnProperty.call(e,f)},a={},c="react-navigation-website-next:",i.l=function(e,f,d,b){if(a[e]){a[e].push(f);return}if(void 0!==d){for(var t,n,r=document.getElementsByTagName("script"),o=0;o0&&d[b-1][2]>c;b--)d[b]=d[b-1];d[b]=[f,a,c];return}for(var t=1/0,b=0;b=c)&&Object.keys(i.O).every(function(e){return i.O[e](f[r])})?f.splice(r--,1):(n=!1,c{"use strict";var e,f,a,c,d,b,t,n,r={},o={};function i(e){var f=o[e];if(void 0!==f)return f.exports;var a=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=r,i.c=o,i.n=function(e){var f=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(f,{a:f}),f},f=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},i.t=function(a,c){if(1&c&&(a=this(a)),8&c||"object"==typeof a&&a&&(4&c&&a.__esModule||16&c&&"function"==typeof a.then))return a;var d=Object.create(null);i.r(d);var b={};e=e||[null,f({}),f([]),f(f)];for(var t=2&c&&a;"object"==typeof t&&!~e.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(function(e){b[e]=function(){return a[e]}});return b.default=function(){return a},i.d(d,b),d},i.d=function(e,f){for(var a in f)i.o(f,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},i.f={},i.e=function(e){return Promise.all(Object.keys(i.f).reduce(function(f,a){return i.f[a](e,f),f},[]))},i.hmd=function(e){return!(e=Object.create(e)).children&&(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},i.u=function(e){return"assets/js/"+(({10106:"814f3328",10129:"bd109270",10385:"b265e1a0",10428:"a2205702",10647:"1eecde9e",107:"8a143e5b",10707:"82bb8736",10742:"857226cd",10845:"ae5fe58f",11:"ddf45c7d",11252:"db124b13",11289:"cf1736b4",11295:"d08734b9",11393:"f171b4fe",11447:"5f5c23d7",11485:"29af1846",11489:"0058b4c6",11527:"a50c5cfe",11565:"4097ee88",11659:"1b06775d",11845:"9b2fbcce",11905:"81cb56fd",12143:"d52010ac",12575:"cb1ca3b7",12761:"a5a8f997",1324:"fb896c9f",13447:"7aa771dd",13466:"68b0fc05",13481:"2c6e00e5",13825:"b319bd37",13926:"a7b093db",13937:"1233d971",14005:"7745b380",14096:"0732884c",1410:"75a3cde9",14617:"b540d135",15112:"aba21aa0",15397:"8d3063a8",1558:"1fc9112c",15639:"682ce172",15879:"1e63bad8",15948:"28ae1e59",16039:"cd3769cf",16063:"53be29f2",16378:"c088c624",16973:"0ad77dda",17146:"6354cbd6",17155:"87087cb3",17277:"67bc1365",17383:"86d1f714",17448:"f33b6a3d",17596:"47cdb689",17810:"6f9c9b78",18037:"1ca07b31",18077:"8d30a36f",18378:"9a16bb9d",18511:"1be5ddd6",18559:"7a359cef",1896:"76725556",1925:"96c45902",19306:"5050cca3",19403:"a4ac0748",19641:"d3ee3b94",19718:"34e8079f",19914:"a94703ab",2007:"d84a04ad",20262:"8927ca75",2037:"723a1d1f",20468:"9b7f82fe",20634:"55b92464",20787:"a62e5334",20973:"c2c0d6a0",21210:"11c37a84",21408:"208b9e32",21489:"51368b5b",21741:"d4bc90ec",21817:"fd014fef",22:"e0160539",22067:"45e61a04",22147:"2bba45e9",22337:"904009dc",226:"15cb52a8",22749:"1c007cbb",22776:"891dacb7",22882:"6f67031a",22908:"f82f4518",23202:"51035c32",23256:"b324ebf9",2327:"d92e70e8",23311:"42baf60a",23322:"cb5b2a41",23482:"0f251e76",23864:"2bf47602",24470:"06aa38ed",24558:"23dd3248",2472:"a44cee0b",24852:"66875650",24968:"884b85fa",25082:"3a7a90e6",25149:"b89e1214",25270:"9a1d032e",25310:"6a7fdb9e",25358:"ff849402",25472:"f60c941b",25537:"7e788281",25630:"6351806c",25836:"f0d91a18",25939:"36dd008b",26073:"2a1e22c6",26078:"41d864f0",26082:"a76a7284",26091:"5f623a5c",26199:"11edefd1",26211:"f3886628",26384:"868d8162",26457:"b93a612d",26952:"2f88b479",2703:"6289cd6c",27117:"07fb801c",27298:"c9bae406",27447:"b2248fa5",27627:"acecf23e",27672:"1c2eab2d",27681:"ec406ec4",27741:"f45c00a7",2818:"93402b4f",28586:"79dbb029",28630:"8a507deb",29056:"f6f7d065",29491:"4d2cce11",2952:"2ad06cff",29617:"a9397062",2976:"6b20cb2f",29841:"d40bf6ce",29937:"691c8b2c",29979:"320f57a7",2998:"ccc49370",30181:"662e2520",30274:"38945924",30408:"ab534dd1",30428:"fa388b7d",30945:"e3d4941e",30966:"f97eb74e",31017:"585dd972",3140:"48bce793",31523:"38f0ae39",31619:"cec331df",31776:"4971bf21",32058:"e88484b3",3214:"524cb6b9",32169:"b8aafcf7",32413:"ef7138f6",32427:"c183ab7f",32764:"13e4d9ef",33178:"cf282c29",33346:"055cb6cb",33401:"66e8e455",33481:"6f0a4736",33775:"b62ae7ee",33805:"2152a276",33931:"8674297c",34459:"0ca22e55",34613:"4294b48d",34654:"cf1b6d54",34781:"47734c36",348:"09dc4294",34899:"c414ff41",34941:"ae733de4",3513:"9150b537",35164:"c94cee29",352:"017fa78e",35524:"f81c1134",35757:"79893160",35774:"db02a756",35824:"f265caf3",36041:"be35566b",36130:"5a6e47ce",36579:"eebb4bfa",37159:"0bcf026f",37300:"3288f5dd",37538:"df5aa17f",37784:"66b225ca",37819:"a92cc67c",37833:"541e64db",37867:"57bdb9cf",38010:"957ba597",38191:"20989594",38229:"f4398715",38299:"00d72952",38375:"553b20f2",38561:"bc98b856",38768:"8386ba1d",39215:"52030153",39328:"b48787b6",39471:"73cd3c7f",39854:"621db11d",40166:"c320ebc8",40211:"d5baa5c1",40271:"b0c8eb24",40326:"a601a56a",40565:"01a85c17",40569:"9d130922",41178:"6a29eacd",41675:"69e3adff",42829:"94d96abc",42875:"8520aa43",43230:"08c74c36",43512:"c2e8381f",43618:"23828948",43879:"220adfdd",43897:"7f3ebd16",43917:"f3898f13",43950:"f5632d3b",44063:"fc5e52ef",44424:"5834e856",44457:"3dd22c0a",44578:"a8527a90",44895:"fe0c5989",45221:"ad88f797",45449:"2c1dfa59",45617:"d4a28cdc",45797:"156bcb80",46106:"8526e2d7",46150:"2e363522",47092:"e95c8dff",47143:"3a2db09e",47233:"ce5a6cfc",47248:"18bf351a",47293:"9e4087bc",47354:"4dad2d95",47511:"48627ccf",47575:"99b846b2",47730:"1f27758d",4774:"188f698f",47900:"f3135da8",47993:"34a92c49",47996:"58932f68",48304:"e3217e06",48538:"08731dbd",48719:"b3da0717",48740:"9d86e7fa",49194:"f2fd19de",49599:"ee216893",49622:"7278614b",49710:"5a783331",49933:"ecd87419",50196:"11fb85f3",50219:"f176e462",50484:"7c94a739",50651:"8da40a13",50787:"beb39e3f",5090:"d547d075",5116:"979dc077",51508:"fdeac899",51741:"732a0bdd",51989:"f066ce3d",52023:"a103d9cd",52285:"cb35979a",52527:"6054d54f",52536:"ac6d5fda",52727:"5f32cb9f",53043:"34737634",53673:"de6d21b5",53686:"3ddd3618",53696:"4affc812",53967:"38e75df9",5405:"0e9dd1f6",54416:"a06a0936",54450:"14616538",54501:"2742fd1f",54514:"506fd606",54869:"f745e7d6",54870:"c90d5789",54904:"17b59e25",54948:"915d8cad",55211:"a7bd4aaa",55215:"5f99a06b",55315:"bdc0380f",55643:"c716f0e7",55941:"693618f8",56106:"493070b6",56130:"7f0203ae",56618:"c9cac9d9",56644:"2a793fe9",56876:"825d5fdb",5691:"ef628c14",57437:"78260baf",57467:"8fea52f3",57499:"b91c78db",57520:"be5f3a5f",57562:"db2d2c66",57790:"43895b73",58143:"2725af3e",58146:"ae4abcdb",58201:"af4cf38c",58431:"9585dc18",58434:"d8cb0df4",58851:"5ee02d5e",58982:"ea8a36e7",5905:"243e06fb",59228:"6d6cabdc",59283:"6f680f40",59364:"769a6239",59468:"d7f84142",59580:"5fa530cd",59995:"b03300d9",60011:"48179b36",60083:"6875c492",61253:"75086e52",6130:"c4f5d8e4",61312:"87fb05fe",6150:"6ba5b985",61587:"d9dcdbb0",61649:"7bf45219",61790:"5a6dc606",62351:"df9f3515",62494:"8ea09047",62602:"480dd063",62698:"6df3dc9e",62875:"dc42149f",6302:"a4bf4271",63218:"317e2018",6343:"b5e8ae63",63432:"5e95c892",63469:"dde9984f",6391:"cde59865",63983:"4d989974",64553:"385a96ec",64733:"9ff2e65d",64807:"4f9396e4",64952:"9dbca327",65409:"54ce2ec1",65422:"882617a0",65451:"fffa478c",65482:"ff57007e",65522:"eef70735",65694:"cdc21849",6589:"38fc62f0",66058:"8dffd375",66108:"572e4edf",66301:"e222d324",66466:"d57ffbba",66552:"d42d1fd9",66672:"726a3ae5",66749:"7396804a",66811:"f04ef758",66823:"55b83a48",66899:"1f922c0a",67178:"060b58ec",67189:"17ec3dcd",67273:"7f524dd3",67365:"a7456010",67369:"e4e30971",67439:"508f3f9b",67775:"116934ab",68025:"f71ac7f0",68065:"a4e31e78",68431:"f123de88",69170:"4dd5a1e2",69501:"86ee57b9",69726:"34750482",69745:"ea5ec219",69942:"322cbdb3",7027:"74ef9c09",70329:"37bf63f8",70593:"b65a55e7",70777:"dbb6f292",70894:"27e00fa9",70927:"2330c7a5",71136:"4ed526a6",71212:"2345d271",71368:"3473afe0",7149:"990502fa",71846:"4790fcfc",7226:"472ed44a",72629:"682ba1cc",7265:"34b88438",72792:"36994c47",7284:"b38ea63a",72841:"1279275a",7285:"4f17f4e8",72904:"a187e2b2",73113:"8d8bf681",73201:"a178b8fa",73291:"ccb322b4",73443:"dd056032",73613:"2895d14d",7367:"af725e73",73681:"14716511",73693:"ceb96a6a",73743:"1ae011e9",73890:"421dbb3b",73915:"debf69ae",73931:"198136e6",74090:"2faf7e03",74250:"b296b8b0",7427:"0cd801b6",74400:"deb950c3",75185:"d71b2077",75216:"0e9f90e2",75423:"9ae89415",75688:"aeac9b7f",75921:"22592995",75991:"2f8e0f44",76171:"baaf111f",76235:"7d87cf11",76338:"82bb0d50",7663:"298dce3d",76661:"d513a03c",7667:"6fc7b633",76672:"0fd48e70",76927:"7ac60746",76964:"88089c81",76970:"7bde2dda",76982:"bbc7a4b0",77132:"a2851e91",77266:"c47cf68d",77278:"f22d3a1f",77499:"9b8e03c9",77576:"ef5f5123",77638:"f100c192",77738:"c141421f",77860:"7be16658",78e3:"5240ccd3",78269:"5fa34f3e",78543:"34642e36",78771:"b6e1e9f1",78835:"79ac6895",78973:"a345bb73",79194:"86f1fc09",79359:"c15d9823",79429:"2e5371a8",79556:"94bac345",79740:"7c7f82ce",79807:"f6756196",79926:"d1b2904b",80471:"b0b51b63",80491:"0e0a3cb0",8061:"3f09e8c5",80745:"f81e0c67",81176:"4de4f0aa",81646:"a90dbb68",81780:"cdf30472",82003:"6f2d5ee8",82281:"720ec844",82650:"a11e2eb6",82674:"02f293a2",82734:"1d424ec3",83213:"6578c24b",83305:"6bc8f2a2",83333:"6bcec069",834:"e83bbd46",83565:"885db2d5",83769:"4a85a9e1",83885:"168ed425",83899:"18b2070b",84047:"a83f720f",8458:"4f52b89f",84609:"b89f9e6f",84919:"1b79fc76",85033:"85ef44ad",85120:"190dc87f",85230:"1a4e3797",85257:"2965ee69",85261:"3fe99ec0",85335:"22cce5e3",85443:"ab0218ea",85725:"63a36266",85739:"c0782dcc",86162:"7cbef4dd",8627:"3d65d037",86329:"abac2178",86415:"fdba686e",86587:"66169356",87048:"17896441",87063:"3d5c69eb",87236:"c7ff647e",87618:"cafedc52",87974:"74cdd3dc",88294:"22f4682c",88808:"c6c8c51b",88926:"7a316a81",88937:"9122f241",89384:"15f1c7c7",89464:"17d003f0",89784:"72a85bb9",89885:"77aa6ed4",89911:"b6ac21f8",90502:"454aff66",90561:"8521727c",90580:"c259c03a",90690:"0334870a",90826:"cdb30427",90878:"f1d3306a",90975:"f6147c3e",91215:"f75590ae",91311:"b81de6e7",91472:"61322d15",91617:"61da15b7",91705:"d67ed22e",92134:"ef8b811a",92332:"14acaad8",92359:"802bca5d",92493:"1f391b9e",92561:"242b7c9d",92785:"63f4abc2",93118:"2bc9c82b",9329:"278698af",93711:"31a4dab7",93749:"a5ae78fa",93773:"6f859436",93803:"3d2d3ec8",9389:"430040aa",94095:"72619197",94169:"482751c5",94496:"029dc854",94622:"966cb129",94629:"4aa34a2d",94641:"bf3d013e",9475:"b9ccf281",95197:"56fbc2ce",95256:"f4e7a611",95822:"349caeb8",95935:"8c4738b1",95971:"20697995",96010:"69616a12",96029:"4554b8eb",96077:"5f7a57d5",9615:"34afa66a",96345:"0f789a65",96402:"2e2591dd",96631:"c71fcd84",96735:"32c90e4f",96898:"50f409bc",96955:"3bdd1be4",97241:"e14b9321",97379:"9af3f201",97390:"65636706",97754:"87288241",98249:"16d126b2",98293:"c8d61245",98320:"900b69c6",98329:"95e9668b",98514:"a6aa9e1f",98573:"a5ad4ffe",98609:"f60d5e0f",98920:"fca5fd4e",98993:"3e290227",99163:"c96bcf0e",99284:"20f68260",99866:"7a69f3f2"})[e]||e)+"."+({10106:"4a9aa425",10129:"73cf8b79",10385:"f1a7cfb1",10428:"21b3efed",10647:"08ed36eb",107:"a7d374bd",10707:"49c2a62c",10742:"8845f0d9",10845:"68f72506",11:"b274e797",11252:"c622515d",11289:"89dec3e7",11295:"e36d4cdb",11393:"908fbc53",11447:"ba8895ac",11485:"08849750",11489:"f9c11529",11527:"26cbd553",11565:"caa3ee2f",11659:"047b403f",11845:"d4dc9a8e",11905:"b380da61",12143:"618d66e5",12575:"83c2bc8e",12761:"4e97a327",1324:"3bf7527a",13447:"8936e8d6",13466:"97e24a1c",13481:"a05b0bca",13825:"f8688f6e",13926:"b0607d27",13937:"86e416a7",14005:"64b45f88",14096:"92e5809c",1410:"7458dab5",14617:"57fce2a9",15112:"eec51e63",15397:"b40918fd",1558:"94238fd3",15639:"3169cfa4",15879:"430a3eac",15948:"cb40c738",16039:"813ece75",16063:"70792b50",16378:"af8b93f7",16973:"8dafbdca",17146:"47ba1062",17155:"f5d4cac4",17277:"9414fec2",17383:"a6eb9b1d",17448:"aac2cd00",17596:"776ead09",17810:"0ae98f5e",18037:"b7cc50ae",18077:"e8046f60",18378:"dbb8277b",18511:"43200485",18559:"69265929",1896:"8fa491be",1925:"decac3c5",19306:"099fee30",19403:"31915c89",19641:"fa0e6946",19718:"bdc393b2",19914:"eede3d81",2007:"7f95d611",20262:"6bd610af",2037:"bceed48d",20468:"3afbdeb2",20634:"4b5973fd",20787:"11dfadd2",20973:"0131f5d8",21210:"bf84d331",21408:"381941da",21489:"e34be2bc",21741:"318a0675",21817:"fbc68816",22:"591caf3a",22067:"dd82e091",22147:"0e46e28c",22337:"518c30c1",226:"f2380f06",22749:"9d78a60a",22776:"af7c3b9d",22882:"b99f017c",22908:"5832f7ce",23202:"a2fdefb2",23256:"226d5327",2327:"2c757b0d",23311:"9e33ae27",23322:"4d85a030",23482:"60cae136",23864:"cd2837ac",24470:"f7fcd7dd",24558:"e0d4c079",2472:"8822e9b1",24852:"44b43d26",24968:"e8ecc6ec",25082:"b816475c",25149:"dccda7e6",25270:"56e0c9be",25310:"553344fa",25358:"75355890",25472:"e9a89f53",25537:"e7ed3654",25630:"a4b8f64d",25836:"af89abd8",25939:"b95e6771",26073:"44f8d8f0",26078:"5bf54f3b",26082:"0c2ddced",26091:"5f47c449",26199:"a4da761d",26211:"dfd5d1ba",26384:"cbc37d6a",26457:"ef7b8fcf",26952:"2fb526d3",2703:"3d35a343",27117:"08fb46fb",27298:"a3bff57f",27447:"13c29bdb",27627:"9e1a99be",27672:"3c20df5e",27681:"0f1032dc",27741:"c74cc34a",2818:"a5dbd4ab",28586:"ddca9062",28630:"7cc5bbd5",29056:"3ad55f7c",29491:"0b263d69",2952:"7aecea83",29617:"70eae5f8",2976:"4487a436",29841:"d290bdd9",29937:"61e8fb8f",29979:"9970af3b",2998:"9d294596",30181:"ed6cee0d",30274:"989a7597",30288:"0caa8c54",30408:"fe2a1ace",30428:"788103e8",30945:"37d62a99",30966:"351d5a75",31017:"a2337a02",3140:"73c146c1",31523:"1e327ea3",31619:"2dce55ad",31776:"08def6e6",32058:"3609335e",3214:"c28a01f2",32169:"4657874f",32413:"09e20321",32427:"459df564",32764:"6ae07e44",33178:"ddeb4233",33346:"f8dd95d9",33401:"6d188207",33481:"f35e53a2",33775:"84e86cf0",33805:"20350934",33931:"b26e070e",34459:"7015e119",34613:"9aec12a6",34654:"7251cbea",34781:"d989934b",348:"323f4a62",34899:"fd11ca89",34941:"c2cf631e",3513:"94ad98dd",35164:"99df13ec",352:"b6dcd636",35524:"8a5bc3fe",35757:"9b520aa0",35774:"56b4d419",35824:"563fc242",36041:"b06e1abb",36130:"c0982f19",36579:"1f51ab35",37159:"67a7a3f3",37300:"130f6342",37538:"eb591ac9",37784:"1ab7fe73",37819:"f541df99",37833:"5b8f64e4",37867:"13bf2e65",38010:"6ed39c8f",38191:"b98a7c5f",38229:"4f8401aa",38299:"4d3b2092",38375:"ab3124e4",38561:"ac10136f",38768:"80210780",39215:"ec553b13",39328:"a1ed080d",39471:"5ea13cc4",39854:"d37be431",40166:"df2da06d",40211:"ad0d0cf2",40271:"08026608",40326:"19924f94",40565:"4e9ca58a",40569:"90efae79",41178:"e5c37e8e",41675:"34be54ec",42829:"b8864c47",42875:"89654618",43230:"322957e6",43512:"1fcf92b1",43618:"35a4bc19",43879:"9d191948",43897:"662922e9",43917:"10282acd",43950:"c15f94cc",44063:"137d9c69",44424:"82c86d43",44457:"038a6afa",44578:"be90acdc",44895:"2994c952",45221:"502710ca",45449:"ad540212",45617:"37d1efae",45797:"f9ad6eda",45995:"4ac80c40",46106:"f57a40f9",46150:"4d7d70b2",47092:"1fdeef59",47143:"3912162a",47233:"1fc7f611",47248:"c1cbc97d",47293:"92e845d9",47354:"0834031c",47511:"19418d29",47575:"11f13a94",47730:"59ea1100",4774:"dfe96241",47900:"20fbf438",47993:"dfa12622",47996:"bdc33612",48304:"704700a3",48538:"77bcc5bf",48719:"e0159929",48740:"0ab2829f",49194:"95593c34",49599:"f8e9c908",49622:"ff06d4ed",49710:"8c869534",49933:"17299056",50196:"11de0448",50219:"097d68f4",50484:"9bf4af3b",50651:"0237e04b",50787:"0b6c8d6d",5090:"82d8c1e7",50955:"750034af",5116:"97ce2430",51508:"65798653",51741:"88050a8b",51989:"4ceab001",52023:"bdf13bf0",52285:"620009bd",52527:"d3cfa03f",52536:"ae0b9734",52727:"86d91a77",53043:"1de6a714",53192:"07cae9fa",53673:"fb4f2315",53686:"b1b05e0e",53696:"8bb3c187",53967:"1197c800",5405:"bc7a0328",54416:"7cacb38f",54450:"bcd86590",54501:"f82b80a9",54514:"ab3a9196",54869:"6fc9c9b5",54870:"0e8fe6af",54904:"1dfda9ab",54948:"5a49656a",55211:"a634d32d",55215:"05d65cb3",55315:"67dad65c",55643:"ee07bd58",55941:"6a3a7064",56106:"1885093a",56130:"0ce1e176",56618:"e6ff323e",56644:"68b93078",56876:"7061e94d",5691:"b0d2ccce",57437:"966260d4",57467:"6b48f8aa",57499:"71d392d0",57520:"ea444320",57562:"1c7e6e4e",57790:"5299553e",58143:"f3b2b351",58146:"50383561",58201:"932e95f3",58431:"7d9771b2",58434:"40c2532a",58851:"0c2ae5cf",58982:"39e0efd8",5905:"5ffe0a58",59228:"702e3650",59283:"94e63cde",59364:"e7cfe9dc",59468:"071cc6c9",59580:"46c7f9eb",59952:"b94c7811",59995:"4db9261a",60011:"45b0353d",60083:"beedb49a",60740:"08bcd753",61253:"77a00f75",6130:"aea842c9",61312:"81b780a7",6150:"0d7f6a89",61587:"9a00538f",61649:"12257f42",61790:"05966bac",62154:"02cbab24",62351:"7092abdb",62494:"ed2bcca2",62602:"06680cee",62698:"74baa7b2",62875:"02b9c3e0",6302:"763de2b2",63218:"7512906b",6343:"ef529722",63432:"cc3ce17c",63469:"f0412400",6391:"f1fd529e",63983:"e3132a39",64553:"41a04306",64733:"0a79d5dc",64807:"18dd31e8",64952:"0510a5b4",65409:"e9f658c0",65422:"d372bb76",65451:"dae0bd42",65482:"7ca9491e",65522:"482e2e21",65694:"0577da25",6589:"63532197",66058:"8e46f716",66108:"09e92820",66301:"9ee8df9c",66466:"9d2722ae",66552:"a1912779",66672:"e77cf0aa",66749:"afed9119",66811:"ea3992fd",66823:"93ee3adf",66899:"d6941731",67178:"60c17831",67189:"ecdb98c1",67273:"a342a6ae",67365:"d63ddd76",67369:"b5196472",67439:"6c9a6fd8",67775:"093f6639",68025:"bce90ae4",68065:"8bacad14",68431:"ef76ee6b",69170:"6af9732b",69196:"b3245c95",69501:"c4aa5b1d",69726:"bede5120",69745:"9cca3c0b",69942:"dd3738a7",7027:"ee5c732c",70329:"c7940891",70593:"a3324838",70777:"e01d7e10",70894:"215bfdc5",70927:"f471a328",71136:"3b1626c1",71212:"ad430db4",71368:"0fc9ec8c",7149:"ef4a49ce",71846:"837cb833",7226:"5257e67c",72629:"c896461c",7265:"59b070b2",72792:"613a0c61",7284:"1a73d7d9",72841:"f6386c12",7285:"b18e1711",72904:"86801be2",73113:"eff0dc39",73201:"ee75637a",73291:"a0690560",73443:"ec4aad56",73613:"fecab395",73643:"cb4eb069",7367:"6b1def9f",73681:"a2cafb9b",73693:"2a644075",73743:"2c77e21f",73890:"5e0797c1",73915:"9a3696c0",73931:"bef3acc5",74090:"f26714a3",74250:"703a69f1",7427:"b8195c26",74400:"89c6ae5b",75185:"58588e23",75216:"861cba25",75423:"ba756397",75688:"637edf05",75921:"b979f9e2",75991:"c183c2b3",76171:"1b622b11",76235:"cf3d0a8c",76338:"31b61eec",7663:"1ff20553",76661:"bea10d66",7667:"a61c2703",76672:"fe602648",76927:"4d3b0d12",76964:"e1e8bedb",76970:"a7d1e095",76982:"1e429695",77132:"fabc2046",77266:"ecdd1cb0",77278:"9a251375",77499:"3eb63103",77576:"9f8c2f95",77638:"2d7bf1c4",77738:"21c72d69",77860:"5ba868d9",78e3:"bdb5776e",78269:"6d0ea00b",78543:"f9ad3bd4",78771:"9eac54d7",78835:"20147030",78973:"ff7bc587",79194:"e57a5f4a",79359:"db29f565",79429:"de1c917f",79556:"07522c7a",79740:"a1163cbb",79807:"622d7d6f",79926:"72e486a0",80471:"9fd29d82",80491:"546509ba",8061:"e1b9a09c",80745:"f51e68b7",81176:"29c30f89",81646:"e3e235d6",81780:"c7a65845",82003:"3e871cd3",82281:"61600038",82650:"76f68df6",82674:"347d8448",82734:"9de241dc",83213:"842da069",83305:"5a61f9ac",83333:"7b2b64fe",834:"e46c410e",83565:"b15a90bb",83769:"3272bd27",83885:"62750c74",83899:"f1b774d4",84047:"ef9e374a",84373:"275dddb1",8458:"98a02135",84609:"b0b8eec9",84919:"328eebdf",85033:"35794e85",85120:"7fe83369",85230:"6110359f",85257:"73ededec",85261:"655bf086",85335:"06624ab7",85443:"a42b43f6",85725:"5a8978d4",85739:"48e84e31",86162:"c79a9c85",8627:"82d36cde",86329:"a02d7b40",86415:"e0654cfe",86587:"1e8ef1d3",87048:"928ee8ef",87063:"e86a76d6",87236:"bd99dd9b",87618:"ad20b6a5",87974:"00dd111a",88294:"844834ee",88808:"91545c4c",88926:"3148546a",88937:"45112d53",89384:"da776abf",89464:"58ec9650",89784:"b96811d9",89885:"a98e62ba",89911:"e20cd525",90502:"4d1cd0da",90561:"ea6777da",90580:"28fdd18d",90690:"80b641a0",90826:"5e648714",90878:"fe36ce39",90975:"8e80f158",91215:"716a27d2",91311:"efcc18f7",91472:"dca514fd",91617:"76bef3e6",91705:"63293c2e",92134:"a3013deb",92332:"470caf47",92359:"5d3005cf",92493:"e90ff1f8",92561:"8669c45e",92785:"a16bf11e",93118:"b0061c93",9329:"129f6970",93711:"65ed8cfc",93749:"4524f0ea",93773:"cf83e4e3",93803:"04e17f13",9389:"fdb38db7",94095:"15ffd9a6",94169:"3f063e1d",94496:"70461a94",94622:"48c9f665",94629:"9af8579e",94641:"47b9e937",9475:"23c019ef",95197:"10be8751",95256:"9687c5be",95265:"13e69c08",95822:"aa06e67e",95935:"e7f53e24",95971:"3d5e0c05",96010:"90b6989e",96029:"ab141838",96077:"b817a619",9615:"b6aa280c",96345:"cb9df05d",96402:"cfb3afdc",96631:"d86ef482",96735:"6f07ddf4",96898:"f94bb8bc",96955:"5c7f7827",97241:"f6db64bd",97379:"42dd1211",97390:"42140a3f",97626:"17ee787e",97754:"50a4a9bd",98249:"d60f49e0",98293:"c05887a6",98320:"c1073806",98329:"20cfdaf6",98514:"e0dc828f",98573:"4cb69f30",98609:"9433ae86",98920:"129d904f",98993:"e521595d",99163:"551d072f",99284:"5948a447",99866:"3a19fd05"})[e]+".js"},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=function(e,f){return Object.prototype.hasOwnProperty.call(e,f)},a={},c="react-navigation-website-next:",i.l=function(e,f,d,b){if(a[e]){a[e].push(f);return}if(void 0!==d){for(var t,n,r=document.getElementsByTagName("script"),o=0;o0&&d[b-1][2]>c;b--)d[b]=d[b-1];d[b]=[f,a,c];return}for(var t=1/0,b=0;b=c)&&Object.keys(i.O).every(function(e){return i.O[e](f[r])})?f.splice(r--,1):(n=!1,cReact Navigation 1.0 (goodbye, beta!) | React Navigation

React Navigation 1.0 (goodbye, beta!)

· 2 min read
Brent Vatne
Core Team

As of today, React Navigation version 1.0 has been released! To see a list of recent improvements leading up to the release, refer to the “Renewed Path to React Navigation V1.0” issue. Thank you to everybody who has filed high-quality bug reports, submitted pull requests, and helped out fellow developers while we were in beta!

+React Navigation 1.0 (goodbye, beta!) | React Navigation

React Navigation 1.0 (goodbye, beta!)

· 2 min read
Brent Vatne
Core Team

As of today, React Navigation version 1.0 has been released! To see a list of recent improvements leading up to the release, refer to the “Renewed Path to React Navigation V1.0” issue. Thank you to everybody who has filed high-quality bug reports, submitted pull requests, and helped out fellow developers while we were in beta!

This release isn’t meant to be interpreted as a signal that React Navigation is “finished" — work is already underway on a number of significant changes to the API that aim to make React Navigation easier to use and more powerful. These changes will be run through our new RFC process. For example, the Navigator View API RFC outlines a plan to decouple views from the router in order to make it easier for other navigation APIs, such as react-native-router-flux and react-router-native, to build on top of the same navigation views. We’re also very excited about a plan (no RFC is open yet, but keep an eye out for it) to use react-native-gesture-handler to run navigation gestures (sliding a drawer open, or swiping back on a stack, for example) on the UI thread using the Animated native driver.

Last week we released an updated version of our documentation website, built using Docusaurus. We hope that the new documentation will help newcomers get onboarded with the fundamentals of React Navigation, and serve as an ongoing resource to handle specific use cases as you come across them (under the “How do I do..?” section). Contributions to the documentation are very welcome.

Give React Navigation 1.0 a try, post a feature request if you think something is missing, open a RFC if you have an idea of how to implement it, file a detailed bug report when you encounter problems (or open a pull request if you know how to fix them)! Updating your existing installation should be easy if you have tracked releases over recent months — read the brief release notes for more information.

\ No newline at end of file diff --git a/blog/2018/04/06/react-navigation-2.0-rc/index.html b/blog/2018/04/06/react-navigation-2.0-rc/index.html index 12fd952a65..1271f74c50 100644 --- a/blog/2018/04/06/react-navigation-2.0-rc/index.html +++ b/blog/2018/04/06/react-navigation-2.0-rc/index.html @@ -1,4 +1,4 @@ -2.0 release candidate | React Navigation

2.0 release candidate

· 5 min read
Brent Vatne
Core Team

Exactly two months after the release of React Navigation 1.0, we are close to another major version release. We’d like to invite developers that use the library to give the release candidate a try in your app and let us know if you encounter any issues.

+2.0 release candidate | React Navigation

2.0 release candidate

· 5 min read
Brent Vatne
Core Team

Exactly two months after the release of React Navigation 1.0, we are close to another major version release. We’d like to invite developers that use the library to give the release candidate a try in your app and let us know if you encounter any issues.

yarn add react-navigation@^2.0.0-rc.1

The documentation for 2.0 is available at reactnavigation.org

We’re bumping the major version because some of the changes in this release are backwards incompatible. That said, this should be a fairly easy upgrade. We are improving React Navigation incrementally because we don't want to leave developers feeling stranded in an old version. If you use React Navigation in a conventional way and don't have any custom navigators, I can't imagine this update would take you more than an hour.

diff --git a/blog/2018/05/07/react-navigation-2.0/index.html b/blog/2018/05/07/react-navigation-2.0/index.html index 06ebfba954..c007b422c3 100644 --- a/blog/2018/05/07/react-navigation-2.0/index.html +++ b/blog/2018/05/07/react-navigation-2.0/index.html @@ -1,4 +1,4 @@ -React Navigation 2.0 | React Navigation

React Navigation 2.0

· 7 min read
Brent Vatne
Core Team

The documentation is now live at reactnavigation.org, and v1 lives here.

+React Navigation 2.0 | React Navigation

React Navigation 2.0

· 7 min read
Brent Vatne
Core Team

The documentation is now live at reactnavigation.org, and v1 lives here.

Significant breaking changes

The following changes are considered “significant” because they can’t be fixed by search and replace or something that is similarly mechanical.

diff --git a/blog/2018/11/01/react-navigation-3.0-rc/index.html b/blog/2018/11/01/react-navigation-3.0-rc/index.html index 5aeaa23101..8dc96e20cf 100644 --- a/blog/2018/11/01/react-navigation-3.0-rc/index.html +++ b/blog/2018/11/01/react-navigation-3.0-rc/index.html @@ -1,4 +1,4 @@ -3.0 release candidate | React Navigation

3.0 release candidate

· 8 min read
Brent Vatne
Core Team

We are excited to announce the release candidate of version 3.0 today!

+3.0 release candidate | React Navigation

3.0 release candidate

· 8 min read
Brent Vatne
Core Team

We are excited to announce the release candidate of version 3.0 today!

This is the first release where React Navigation depends on a native module outside of React Native core: it now depends on react-native-gesture-handler. This library provides an excellent set of primitives for leveraging the operating systems’ native gesture APIs and has enabled us to fix a variety of issues with stack and drawer navigators. React Navigation also depends on react-native-screens, but you don’t need to install the native module if you prefer not to use it (we have a blog post coming soon that will explain what react-native-screens is and why you may want to use it, or you can watch this talk by the author of the library).

We didn’t get around to every feature that we wanted to land for this release, but we also didn’t want to hold it up further because we expect that you will want to start using it right away - the release includes performance improvements, bugfixes, ergonomics improvements, some handy new features, and a re-organizing of the internals to improve support for web as a target of React Navigation.

Let’s get started with react-navigation 3.0.

diff --git a/blog/2018/11/17/react-navigation-3.0/index.html b/blog/2018/11/17/react-navigation-3.0/index.html index ddb7fbdbee..ce098ae6b1 100644 --- a/blog/2018/11/17/react-navigation-3.0/index.html +++ b/blog/2018/11/17/react-navigation-3.0/index.html @@ -1,4 +1,4 @@ -React Navigation 3.0 | React Navigation

React Navigation 3.0

· 9 min read
Brent Vatne
Core Team

The documentation is now live at reactnavigation.org, and v2 lives here.

+React Navigation 3.0 | React Navigation

React Navigation 3.0

· 9 min read
Brent Vatne
Core Team

The documentation is now live at reactnavigation.org, and v2 lives here.

This is the first release where React Navigation depends on a native module outside of React Native core: it now depends on react-native-gesture-handler. This library provides an excellent set of primitives for leveraging the operating systems’ native gesture APIs and has enabled us to fix a variety of issues with stack and drawer navigators. React Navigation also depends on react-native-screens, but you don’t need to install the native module if you prefer not to use it (we have a blog post coming soon that will explain what react-native-screens is and why you may want to use it, or you can watch this talk by the author of the library).

We didn’t get around to every feature that we wanted to land for this release, but we also didn’t want to hold it up further because we expect that you will want to start using it right away - the release includes performance improvements, bugfixes, ergonomics improvements, some handy new features, and a re-organizing of the internals to improve support for web as a target of React Navigation.

Let’s get started with react-navigation 3.0.

diff --git a/blog/2019/09/16/react-navigation-4.0/index.html b/blog/2019/09/16/react-navigation-4.0/index.html index 4f6607c87d..a7bc7e0ae0 100644 --- a/blog/2019/09/16/react-navigation-4.0/index.html +++ b/blog/2019/09/16/react-navigation-4.0/index.html @@ -1,4 +1,4 @@ -React Navigation 4.0 | React Navigation

React Navigation 4.0

· 2 min read

The documentation is now live at reactnavigation.org, and v3 lives here.

+React Navigation 4.0 | React Navigation

React Navigation 4.0

· 2 min read

The documentation is now live at reactnavigation.org, and v3 lives here.

In this release, we have removed the navigators from the react-navigation package. The navigators have lived in separate packages for quite a while and you could already use those packages manually, but we still bundled them in the react-navigation package. This made it difficult for us to release significant updates to navigators, because we had to then do a major version release of react-navigation too. By separating the navigator packages there is more freedom to update and improve navigators without any impact on folks that don't use them.

For example, you will find when you install the latest versions of the drawer and tab navigators that the animations are more performant because they use react-native-reanimated to smoothly animate gestures. These have been available in react-navigation-drawer and react-navigation-tabs for several months now but we delayed updating them in react-navigation itself because we did not want to force every user to update.

With this version, you now install the navigators from their respective packages, which means that you can independently update them.

diff --git a/blog/2019/10/17/react-navigation-native/index.html b/blog/2019/10/17/react-navigation-native/index.html index a2c5efa5f8..f23af37938 100644 --- a/blog/2019/10/17/react-navigation-native/index.html +++ b/blog/2019/10/17/react-navigation-native/index.html @@ -1,4 +1,4 @@ -React Navigation meets native | React Navigation

React Navigation meets native

· 3 min read
Michał Osadnik
Michał Osadnik
Core Team

React Navigation steps firmly into the next level and we’re very excited to announce to you something great happening in React Navigation codebase.

+React Navigation meets native | React Navigation

React Navigation meets native

· 3 min read
Michał Osadnik
Michał Osadnik
Core Team

React Navigation steps firmly into the next level and we’re very excited to announce to you something great happening in React Navigation codebase.

Make it custom

From the very beginning of React Navigation we have been following the important motto to make navigation experience customizable in every detail. We, front-end engineers, mobile developers and User Experience lovers, have a deep need to make decisions about each layout component.

Guided by this idea we (well, not necessarily “we” because I haven’t even written a single line of code this time 😄) made architectural decisions, which might appear controversial for developers with the native background.

diff --git a/blog/2019/11/04/using-react-navigation-5-with-ui-kitten/index.html b/blog/2019/11/04/using-react-navigation-5-with-ui-kitten/index.html index df40512d3f..ce6dfa8706 100644 --- a/blog/2019/11/04/using-react-navigation-5-with-ui-kitten/index.html +++ b/blog/2019/11/04/using-react-navigation-5-with-ui-kitten/index.html @@ -1,4 +1,4 @@ -Using React Navigation 5 with UI Kitten | React Navigation

Using React Navigation 5 with UI Kitten

· 12 min read
Artur Yorsh
Artur Yorsh
UI Kitten Team

This is a guest post by the UI Kitten team. If you like this guide, checkout UI Kitten for more! +Using React Navigation 5 with UI Kitten | React Navigation

Using React Navigation 5 with UI Kitten

· 12 min read
Artur Yorsh
Artur Yorsh
UI Kitten Team

This is a guest post by the UI Kitten team. If you like this guide, checkout UI Kitten for more! In this blog post, we'll show a step-by-step guide on using React Navigation 5 with UI Kitten.

Introduction

The new React Navigation comes with several significant improvements such as improving animation performance with gesture-handler and reanimated libraries. What's more, it was migrated to TypeScript for improving the quality of your code base with type checking and more. But the biggest update is migrating to component-based API.

diff --git a/blog/2020/01/29/using-react-navigation-5-with-react-native-paper/index.html b/blog/2020/01/29/using-react-navigation-5-with-react-native-paper/index.html index aaaae9c023..28f74af412 100644 --- a/blog/2020/01/29/using-react-navigation-5-with-react-native-paper/index.html +++ b/blog/2020/01/29/using-react-navigation-5-with-react-native-paper/index.html @@ -1,4 +1,4 @@ -React Navigation v5 + React Native Paper = ❤️ | React Navigation

React Navigation v5 + React Native Paper = ❤️

· 19 min read
Dawid Urbaniak
Dawid Urbaniak
React Native Paper Team

This is a guest post by the React Native Paper team. If you like this guide, check out React Native Paper for more!

+React Navigation v5 + React Native Paper = ❤️ | React Navigation

React Navigation v5 + React Native Paper = ❤️

· 19 min read
Dawid Urbaniak
Dawid Urbaniak
React Native Paper Team

This is a guest post by the React Native Paper team. If you like this guide, check out React Native Paper for more!

In this blog post, we'll show you how to build a Twitter clone app using React Navigation v5 and Paper.

Introduction

The React Navigation v5 comes with many great improvements compared to previous version. It not only provides a cross-platform native Stack, but also the API was redesigned from the ground up to allow things that were never possible before. Thanks to the component-based API, all of the configuration is happening inside the render method. This means we can access props, state and context and can dynamically change configuration for the navigator.

diff --git a/blog/2020/02/06/react-navigation-5.0/index.html b/blog/2020/02/06/react-navigation-5.0/index.html index af724af7c4..e9eafe359f 100644 --- a/blog/2020/02/06/react-navigation-5.0/index.html +++ b/blog/2020/02/06/react-navigation-5.0/index.html @@ -1,4 +1,4 @@ -React Navigation 5.0 - A new way to navigate | React Navigation

React Navigation 5.0 - A new way to navigate

· 7 min read
Michał Osadnik
Michał Osadnik
Core Team

Exactly two years ago, we published the first stable version of React Navigation. Throughout this time, the library has been actively developed by adding many new features and bug fixes. The essence of React Navigation was that it was a project that was to become not only a project of individual programmers adapting it to their requirements, but a community as a whole, hence the emphasis on versatility, extensibility, and the tendency to reconsider the assumptions if there were such needs. Thanks to this, the Library has been undergoing metamorphosis of both incremental and completely reorganized shape.

+React Navigation 5.0 - A new way to navigate | React Navigation

React Navigation 5.0 - A new way to navigate

· 7 min read
Michał Osadnik
Michał Osadnik
Core Team

Exactly two years ago, we published the first stable version of React Navigation. Throughout this time, the library has been actively developed by adding many new features and bug fixes. The essence of React Navigation was that it was a project that was to become not only a project of individual programmers adapting it to their requirements, but a community as a whole, hence the emphasis on versatility, extensibility, and the tendency to reconsider the assumptions if there were such needs. Thanks to this, the Library has been undergoing metamorphosis of both incremental and completely reorganized shape.

This led us to the moment when React Navigation became one of the most popular navigation solutions in React Native and we are incredibly proud of it.

Today is the day, when we want to mark this vision and major refactoring of the project, that has taken place over the last six months, as stable. One could say that this significant change concerned the core library, and therefore the API, which has been developed and made more dynamic.

Highlights

diff --git a/blog/2020/05/16/web-support/index.html b/blog/2020/05/16/web-support/index.html index a7d301de6b..284f9ae365 100644 --- a/blog/2020/05/16/web-support/index.html +++ b/blog/2020/05/16/web-support/index.html @@ -1,4 +1,4 @@ -React Navigation on the Web | React Navigation

React Navigation on the Web

· 6 min read

React Native has made cross-platform development much easier than before, and with React Native for Web, you can reuse code across Android, iOS and Web too!

+React Navigation on the Web | React Navigation

React Navigation on the Web

· 6 min read

React Native has made cross-platform development much easier than before, and with React Native for Web, you can reuse code across Android, iOS and Web too!

One major pain point of reusing code for the web app has been navigation. React Navigation is one of the most widely used navigation libraries for React Native, but it didn’t support web. While you could run apps using React Navigation on the Web, a lot of things were missing, such as proper integration with URLs on the browser.

We have finally added preliminary web support to React Navigation. Let's take a look at the changes.

Integration with URLs in browsers

diff --git a/blog/2020/05/19/joining-github-sponsors/index.html b/blog/2020/05/19/joining-github-sponsors/index.html index 9ec2622ba5..e966ff47e2 100644 --- a/blog/2020/05/19/joining-github-sponsors/index.html +++ b/blog/2020/05/19/joining-github-sponsors/index.html @@ -1,4 +1,4 @@ -React Navigation joins GitHub Sponsors | React Navigation

React Navigation joins GitHub Sponsors

· 4 min read
Brent Vatne
Core Team

tl;dr: We joined GitHub Sponsors, click here to see our sponsors page and become a sponsor!

+React Navigation joins GitHub Sponsors | React Navigation

React Navigation joins GitHub Sponsors

· 4 min read
Brent Vatne
Core Team

tl;dr: We joined GitHub Sponsors, click here to see our sponsors page and become a sponsor!


React Navigation is depended on by some of the most respected engineering organizations, well-known brands, and talented startups. It's used by financial services apps like Brex and Coinbase Pro; educational apps like Codecademy Go and DataCamp; consumer apps like Shop from Shopify, Bloomberg, TaskRabbit, and Th3rdwave; entertainment apps like the National Football League (NFL) (in their main app and several others), Cameo, Tracker Network for Fortnite, and the Call of Duty companion app from Activision Blizzard. One of my personal favourite apps using React Navigation is Readwise, I love making my coffee with Single Origin 2, and managing household chores with Sweepy.

We've also seen React Navigation used in apps that help in the fight against COVID-19. Our favourites are How We Feel by Pinterest co-founder and CEO Ben Silbermann and a team from Pinterest in collaboration with leading scientists (article) and COVID Symptom Study by ZOE Global in association with King's College London (article).

diff --git a/blog/2021/03/12/react-navigation-6.0-next/index.html b/blog/2021/03/12/react-navigation-6.0-next/index.html index 40b9fe7291..d9ec07f69d 100644 --- a/blog/2021/03/12/react-navigation-6.0-next/index.html +++ b/blog/2021/03/12/react-navigation-6.0-next/index.html @@ -1,4 +1,4 @@ -On the way to React Navigation 6.0 | React Navigation

On the way to React Navigation 6.0

· 3 min read

We're excited to announce that we finally have a prerelease version of React Navigation 6. We released React Navigation 5 more than half a year ago, and it brought a lot of new possibilities with the new dynamic API, and was met with overwhelmingly positive reaction. Since then, we've been working on incremental improvements and refinements to the library and thinking about how to make it even better. This brings us to the next major version of React Navigation.

+On the way to React Navigation 6.0 | React Navigation

On the way to React Navigation 6.0

· 3 min read

We're excited to announce that we finally have a prerelease version of React Navigation 6. We released React Navigation 5 more than half a year ago, and it brought a lot of new possibilities with the new dynamic API, and was met with overwhelmingly positive reaction. Since then, we've been working on incremental improvements and refinements to the library and thinking about how to make it even better. This brings us to the next major version of React Navigation.

While React Navigation 5 was complete overhaul to the API of React Navigation, React Navigation 6 keeps the same API, with some breaking changes to make things more consistent and provide more flexibility. We also tried to address some common pain points and confusions that users had.

We'll share few highlights of the release in this blog post. If you're looking for a detailed upgrade guide, you can find it here.

Highlights

diff --git a/blog/2021/08/14/react-navigation-6.0/index.html b/blog/2021/08/14/react-navigation-6.0/index.html index b043c74078..da4e2a5f09 100644 --- a/blog/2021/08/14/react-navigation-6.0/index.html +++ b/blog/2021/08/14/react-navigation-6.0/index.html @@ -1,4 +1,4 @@ -React Navigation 6.0 | React Navigation

React Navigation 6.0

· 6 min read

The documentation is now live at reactnavigation.org, and v5 lives here.

+React Navigation 6.0 | React Navigation

React Navigation 6.0

· 6 min read

The documentation is now live at reactnavigation.org, and v5 lives here.

React Navigation 6 keeps mostly the same core API as React Navigation 5, and you can think of it as further polishing what was in React Navigation 5. Let's talk about the highlights of this release in this blog post.

Highlights

More flexible navigators

diff --git a/blog/2024/03/25/introducing-static-api/index.html b/blog/2024/03/25/introducing-static-api/index.html index 839affd02d..d51f9bf2bc 100644 --- a/blog/2024/03/25/introducing-static-api/index.html +++ b/blog/2024/03/25/introducing-static-api/index.html @@ -1,4 +1,4 @@ -Introducing Static API | React Navigation

Introducing Static API

· 5 min read

Two of the major pain points of using React Navigation have been TypeScript and deep linking configuration. Due to the dynamic nature of the navigators, it is necessary to manually maintain the TypeScript and deep linking configuration to match the navigation structure. This can be error-prone and time-consuming.

+Introducing Static API | React Navigation

Introducing Static API

· 5 min read

Two of the major pain points of using React Navigation have been TypeScript and deep linking configuration. Due to the dynamic nature of the navigators, it is necessary to manually maintain the TypeScript and deep linking configuration to match the navigation structure. This can be error-prone and time-consuming.

To solve this, we’re adding a new static API to React Navigation 7. It’s not the same API as React Navigation 4, but it’s similar. Many apps don’t need the features that the dynamic API provides, and they can use the simpler static API instead to simplify their codebase.

note

The static API it’s an additional optional API. The dynamic API isn’t going away and will remain a first-class API of React Navigation. In fact, the static API is written entirely on top of the dynamic API.

Overview

diff --git a/blog/2024/06/27/react-navigation-7.0-rc/index.html b/blog/2024/06/27/react-navigation-7.0-rc/index.html index 93d5c1dff1..d62102badf 100644 --- a/blog/2024/06/27/react-navigation-7.0-rc/index.html +++ b/blog/2024/06/27/react-navigation-7.0-rc/index.html @@ -1,4 +1,4 @@ -React Navigation 7.0 Release Candidate | React Navigation

React Navigation 7.0 Release Candidate

· 4 min read

We're excited to announce the release candidate of React Navigation 7.0.

+React Navigation 7.0 Release Candidate | React Navigation

React Navigation 7.0 Release Candidate

· 4 min read

We're excited to announce the release candidate of React Navigation 7.0.

This release includes a new static API that simplifies the configuration of navigators and improves TypeScript and deep linking support. As well as various other improvements and new features.

You can read the full list of changes in the upgrade guide. Here are some highlights:

Highlights

diff --git a/blog/2024/11/06/react-navigation-7.0/index.html b/blog/2024/11/06/react-navigation-7.0/index.html index 1b360ec36a..0ca5fe559f 100644 --- a/blog/2024/11/06/react-navigation-7.0/index.html +++ b/blog/2024/11/06/react-navigation-7.0/index.html @@ -1,4 +1,4 @@ -React Navigation 7.0 | React Navigation

React Navigation 7.0

· 3 min read

The documentation is now live at reactnavigation.org, and v6 lives here.

+React Navigation 7.0 | React Navigation

React Navigation 7.0

· 3 min read

The documentation is now live at reactnavigation.org, and v6 lives here.

React Navigation 7 aims to improve the developer experience with a new static API as well as bring many new features and improvements.

Highlights