diff --git a/.github/workflows/agent-commands.yml b/.github/workflows/agent-commands.yml index 7ff4d9c1f23425..67d96867332437 100644 --- a/.github/workflows/agent-commands.yml +++ b/.github/workflows/agent-commands.yml @@ -809,9 +809,9 @@ jobs: # whole run: the first time this step's push was ever reached it died on # "could not read Username", after twelve minutes, a sandbox and two EAS # builds, with a findings comment already posted claiming a pull request - # that did not exist. `--dry-run` performs the real connection, the real - # authentication and the real ref negotiation, and writes nothing — so - # this answers "can we push?" in seconds, before anything is spent. + # that did not exist. Check API write + `git ls-remote` here — not a + # dry-run push of this checkout, which is often behind main and would + # look like a workflow-file update (PAT has no `workflow` scope). # # Its own step on purpose: "Run agent command" holds NO GitHub token, and # that is a property worth keeping. @@ -843,38 +843,24 @@ jobs: echo "::error::Could not resolve or create the bot fork $fork; fix mode refuses to use a secret-bearing same-repository branch." exit 1 fi - fork_default=$(gh api "repos/$fork" --jq .default_branch) - # The dedicated sync-expo-bot-fork workflow (DO_NOT_USE_EXPO_BOT_FORK_SYNC_TOKEN) - # is what is allowed to move workflow files. This token is not. - # Retry a few times: a verify that starts on the same push as a - # workflow change can land before that job finishes. Keep the API - # body — 422 is workflow scope, 404 is "cannot write this repo". - synced= - for attempt in 1 2 3 4; do - if sync_out=$(gh api -X POST "repos/$fork/merge-upstream" -f branch="$fork_default" 2>&1); then - synced=1 - printf '%s\n' "$sync_out" - break - fi - echo "merge-upstream attempt $attempt failed:" - printf '%s\n' "$sync_out" - [ "$attempt" -eq 4 ] && break - sleep 20 - done - if [ -z "$synced" ]; then - echo "::error::Could not synchronize $fork with upstream; refusing a push that may include stale workflow commits." + # Do not merge-upstream here. EXPO_BOT_GITHUB_TOKEN has no + # `workflow` scope; moving workflow files is the dedicated + # sync-expo-bot-fork job on every expo/expo main land. A dry-run + # push of this (possibly stale) checkout would false-fail the + # same way #33857 did. Check API write + git auth only. + can_push=$(gh api "repos/$fork" --jq '.permissions.push // false') + if [ "$can_push" != "true" ]; then + echo "::error::EXPO_BOT_GITHUB_TOKEN cannot push to the bot fork $fork, so fix mode could not open a pull request." exit 1 fi gh auth setup-git - # No pipe here: `git ... | tail` would report tail's exit status and - # the check would pass no matter what git did. - if ! git push --dry-run "https://github.com/$fork.git" "HEAD:refs/heads/agent-preflight-$GITHUB_RUN_ID"; then - echo "::error::EXPO_BOT_GITHUB_TOKEN cannot push to the bot fork $fork, so fix mode could not open a pull request." + if ! git ls-remote "https://github.com/$fork.git" HEAD >/dev/null; then + echo "::error::git cannot authenticate to $fork with EXPO_BOT_GITHUB_TOKEN." exit 1 fi echo "BOT_FORK_OWNER=$fork_owner" >> "$GITHUB_ENV" echo "BOT_FORK=$fork" >> "$GITHUB_ENV" - echo "preflight: push credentials work for $fork; fix mode can open a fork pull request" + echo "preflight: bot token can push to $fork; fix mode can open a fork pull request" fi - name: Run agent command @@ -1695,40 +1681,129 @@ jobs: # agent-authored change with repository secrets available. fork_owner=${BOT_FORK_OWNER:-} fork=${BOT_FORK:-} - # SYNC THE FORK FIRST. A branch pushed to a stale fork introduces - # every upstream commit between the fork's tip and this checkout — - # including any that touch .github/workflows/** — and a classic PAT - # carrying public_repo (which deliberately excludes `workflow`) is - # refused outright. Observed on run 31540508035: - # - # ! [remote rejected] HEAD -> verify/48804-31540508035 (refusing to - # allow a Personal Access Token to create or update workflow - # `.github/workflows/verify-command.yml` without `workflow` scope) - # - # The path denylist above already refuses an agent patch that touches - # .github/**, so once the fork is level with upstream the push carries - # only the agent's own commit and there is no workflow file in it. - # Note this gets WORSE the staler the fork is, so it is not optional. - if [ -n "$fork" ]; then - fork_default=$(gh api "repos/$fork" --jq .default_branch 2>/dev/null || echo main) - if ! sync_out=$(gh api -X POST "repos/$fork/merge-upstream" -f branch="$fork_default" 2>&1); then - gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but could not synchronize the bot fork. It refused to push a branch that might include stale workflow commits, and refused the secret-bearing same-repository fallback. The outcome comment still stands and describes the change. [Run log]($RUN_URL)" - echo "::error::could not sync $fork with upstream; refusing to push." - printf '%s\n' "$sync_out" - exit 1 - fi - echo "synced $fork ($fork_default) with upstream before pushing" - fi + # Do not merge-upstream here. EXPO_BOT_GITHUB_TOKEN has no + # `workflow` scope; sync-expo-bot-fork on every expo/expo main + # land is what fast-forwards expo-bot/expo. This step: + # 1. replays the publish commit onto current origin/main + # (denylist already forbids the agent from editing .github/**); + # 2. compares HEAD:.github/workflows to the fork default — that + # is what GitHub checks, not full commit SHA equality; + # 3. pushes when those trees match. If they do not, wait for the + # sync job (only needed when main moved a workflow file). + # Observed without this: run 31988056108 / #33857, and the + # earlier 31540508035 stale-fork reject. if [ -z "$fork" ]; then gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but could not resolve or create the bot fork. It refused to use a same-repository branch because that would run agent-authored code with CI secrets. The outcome comment still stands and describes the change. [Run log]($RUN_URL)" echo "::error::could not resolve or create the bot fork; refusing unsafe same-repository fallback." exit 1 fi - if ! git push -q "https://github.com/$fork.git" "HEAD:refs/heads/$branch"; then - gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but could not push it to the bot fork. It refused to use a same-repository branch because that would run agent-authored code with CI secrets. The outcome comment still stands and describes the change. [Run log]($RUN_URL)" - echo "::error::push to fork $fork failed; refusing unsafe same-repository fallback." + replay_onto_origin_main() { + git fetch --depth=1 origin main + base=$(git rev-parse HEAD~1) + tip=$(git rev-parse origin/main) + if [ "$base" = "$tip" ]; then + echo "publish commit already sits on origin/main" + return 0 + fi + agent=$(git rev-parse HEAD) + echo "origin/main moved under the run (${base:0:12} -> ${tip:0:12}); replaying ${agent:0:12} onto it" + git checkout --detach origin/main + if ! git cherry-pick "$agent"; then + conflicted=$(git diff --name-only --diff-filter=U | tr '\n' ' ') + git cherry-pick --abort >/dev/null 2>&1 || true + echo "::error::could not replay the publish commit onto origin/main (conflict: ${conflicted:-unknown})." + return 1 + fi + return 0 + } + local_workflows_tree() { + git rev-parse HEAD:.github/workflows 2>/dev/null || echo "" + } + fork_workflows_tree() { + default=$(gh api "repos/$fork" --jq .default_branch) + sha=$(gh api "repos/$fork/git/ref/heads/${default}" --jq .object.sha) + root=$(gh api "repos/$fork/git/commits/${sha}" --jq .tree.sha) + gh_dir=$(gh api "repos/$fork/git/trees/${root}" --jq '.tree[] | select(.path==".github") | .sha') + if [ -z "$gh_dir" ]; then + echo "" + return 0 + fi + gh api "repos/$fork/git/trees/${gh_dir}" --jq '.tree[] | select(.path=="workflows") | .sha' + } + sync_job_inflight() { + gh api "repos/${GITHUB_REPOSITORY}/actions/workflows/sync-expo-bot-fork.yml/runs?per_page=5" \ + --jq '[.workflow_runs[] | select(.status=="in_progress" or .status=="queued")] | length' + } + # Replay onto main, then push once HEAD's workflow tree matches + # the fork default. Wait only when those trees differ. + align_workflows_with_fork() { + rm -f "$RUNNER_TEMP/align.env" + deadline=$(( $(date +%s) + 420 )) + saw_inflight=0 + first_mismatch_at= + while [ "$(date +%s)" -lt "$deadline" ]; do + if ! replay_onto_origin_main; then + return 1 + fi + local_wf=$(local_workflows_tree) + fork_wf=$(fork_workflows_tree) + if [ "$local_wf" = "$fork_wf" ]; then + echo "workflow trees match (${local_wf:0:12})" + return 0 + fi + inflight=$(sync_job_inflight) + echo "workflow trees differ local=${local_wf:0:12} fork=${fork_wf:0:12} sync_inflight=$inflight" + if [ "${inflight:-0}" -gt 0 ]; then + saw_inflight=1 + first_mismatch_at= + elif [ "$saw_inflight" = 0 ]; then + # Grace: a main land from seconds ago may not have a + # queued run in the API yet. After 45s with no sync, + # the fork is stale and nothing will heal it. + if [ -z "$first_mismatch_at" ]; then + first_mismatch_at=$(date +%s) + elif [ $(( $(date +%s) - first_mismatch_at )) -ge 45 ]; then + echo "ALIGN_FAIL=stale_fork" >> "$RUNNER_TEMP/align.env" + echo "::error::fork $fork workflow tree differs from this commit and sync-expo-bot-fork is not running." + return 1 + fi + fi + sleep 15 + done + echo "ALIGN_FAIL=timeout" >> "$RUNNER_TEMP/align.env" + echo "::error::timed out waiting for $fork .github/workflows to match origin/main." + return 1 + } + rm -f "$RUNNER_TEMP/align.env" + if ! align_workflows_with_fork; then + fail_kind=$(grep '^ALIGN_FAIL=' "$RUNNER_TEMP/align.env" 2>/dev/null | cut -d= -f2 || true) + if [ "$fail_kind" = "stale_fork" ]; then + gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but the bot fork's workflow files do not match current \`main\`, and the dedicated sync job is not running. Land on \`main\` (or re-run \`sync-expo-bot-fork\`) and re-trigger. The outcome comment still stands. [Run log]($RUN_URL)" + echo "::error::stale fork with no in-flight sync; refusing to push." + else + gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but could not line its workflow files up with the bot fork in time (the dedicated sync job on \`expo/expo\` main is what fast-forwards the fork). Re-run once that job has finished. The outcome comment still stands. [Run log]($RUN_URL)" + echo "::error::could not match $fork .github/workflows to this commit; refusing to push." + fi exit 1 fi + push_err="$RUNNER_TEMP/fork-push.err" + if ! git push "https://github.com/$fork.git" "HEAD:refs/heads/$branch" >"$push_err" 2>&1; then + cat "$push_err" + if grep -q 'workflow scope' "$push_err"; then + echo "push rejected for workflow scope; re-comparing workflow trees and retrying once" + if align_workflows_with_fork && git push "https://github.com/$fork.git" "HEAD:refs/heads/$branch"; then + echo "push succeeded after workflow trees matched" + else + gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but could not push it to the bot fork (workflow-scope reject after waiting for the fork workflows to match). It refused to use a same-repository branch because that would run agent-authored code with CI secrets. The outcome comment still stands and describes the change. [Run log]($RUN_URL)" + echo "::error::push to fork $fork failed after workflow-tree wait; refusing unsafe same-repository fallback." + exit 1 + fi + else + gh issue comment "$ISSUE_NUMBER" --body "⛔ \`$command_name\` prepared the $change_name but could not push it to the bot fork. It refused to use a same-repository branch because that would run agent-authored code with CI secrets. The outcome comment still stands and describes the change. [Run log]($RUN_URL)" + echo "::error::push to fork $fork failed; refusing unsafe same-repository fallback." + exit 1 + fi + fi head_ref="$fork_owner:$branch" { # ONE LINE PER PARAGRAPH, however long. GitHub renders a newline diff --git a/docs/.vale.ini b/docs/.vale.ini index 8b1d2884e102ab..b7dc85057c604e 100644 --- a/docs/.vale.ini +++ b/docs/.vale.ini @@ -34,3 +34,6 @@ BasedOnStyles = [**/README.md] expo-docs.Prerequisites = NO expo-docs.KeyboardShortcuts = NO + +[**/pages/ja/**] +expo-docs.HeadingCase = NO diff --git a/docs/pages/get-started/set-up-your-environment.mdx b/docs/pages/get-started/set-up-your-environment.mdx index 0613949501f513..13d66ef9c32611 100644 --- a/docs/pages/get-started/set-up-your-environment.mdx +++ b/docs/pages/get-started/set-up-your-environment.mdx @@ -5,9 +5,12 @@ hideTOC: true searchRank: 3 --- +import { Download03Icon } from '@expo/styleguide-icons/outline/Download03Icon'; + import { DevelopmentEnvironmentInstructions } from '~/scenes/get-started/set-up-your-environment/DevelopmentEnvironmentInstructions'; import { DevelopmentModeForm } from '~/scenes/get-started/set-up-your-environment/DevelopmentModeForm'; import { PlatformAndDeviceForm } from '~/scenes/get-started/set-up-your-environment/PlatformAndDeviceForm'; +import { BoxLink } from '~/ui/components/BoxLink'; Let's set up a local development environment for running your project on Android and iOS. @@ -27,6 +30,13 @@ Expo Go is a playground for students and learners to try Expo quickly. A develop + + ## Next step You have a project and a development environment. Now it's time to start developing. diff --git a/docs/pages/versions/unversioned/sdk/audio.mdx b/docs/pages/versions/unversioned/sdk/audio.mdx index c534066a4e8b85..0cc101c536118f 100644 --- a/docs/pages/versions/unversioned/sdk/audio.mdx +++ b/docs/pages/versions/unversioned/sdk/audio.mdx @@ -58,7 +58,7 @@ You can configure `expo-audio` using its built-in [config plugin](/config-plugin name: 'microphonePermission', platform: 'ios', description: - 'A string to set the `NSMicrophoneUsageDescription` permission message. Setting it to `false` will disable the permission.', + 'A string to set the `NSMicrophoneUsageDescription` permission message. Setting it to `false` will disable the permission, in which case recording is unavailable and `getRecordingPermissionsAsync()` resolves with a `denied` status.', default: '"Allow $(PRODUCT_NAME) to access your microphone"', }, { diff --git a/docs/public/data/react-navigation-options.json b/docs/public/data/react-navigation-options.json index 4c92a4b25417d3..c7133c138f1aee 100644 --- a/docs/public/data/react-navigation-options.json +++ b/docs/public/data/react-navigation-options.json @@ -11,11 +11,11 @@ "url": "https://raw.githubusercontent.com/react-navigation/react-navigation.github.io/main/versioned_docs/version-7.x/bottom-tab-navigator.md" } ], - "fetchedAt": "2025-10-24T13:42:11.994Z", - "totalOptions": 75, + "fetchedAt": "2026-08-17T08:34:10.644Z", + "totalOptions": 79, "categories": { - "header": 27, - "other": 27, + "header": 28, + "other": 30, "tabBar": 21 }, "options": [ @@ -27,374 +27,402 @@ "origin": "native-stack-navigator" }, { - "name": "headerBackButtonMenuEnabled", - "description": "Boolean indicating whether to show the menu on longPress of iOS >= 14 back button. Defaults to `true`.", - "platform": "iOS only", - "category": "header", + "name": "statusBarAnimation", + "description": "Sets the status bar animation (similar to the `StatusBar` component). Defaults to `fade` on iOS and `none` on Android.\n\nSupported values: `\"fade\"`, `\"none\"`, `\"slide\"`\n\nOn Android, setting either `fade` or `slide` will set the transition of status bar color. On iOS, this option applies to the appearance animation of the status bar.\n\nRequires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerBackVisible", - "description": "Whether the back button is visible in the header. You can use it to show a back button alongside `headerLeft` if you have specified it.\n\nThis will have no effect on the first screen in the stack.", - "platform": "Both", - "category": "header", + "name": "statusBarHidden", + "description": "Whether the status bar should be hidden on this screen.\n\nRequires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerBackTitle", - "description": "Title string used by the back button on iOS. Defaults to the previous scene's title, \"Back\" or arrow icon depending on the available space. See `headerBackButtonDisplayMode` to read about limitations and customize the behavior.\n\nUse `headerBackButtonDisplayMode: \"minimal\"` to hide it.", - "platform": "iOS only", - "category": "header", + "name": "statusBarStyle", + "description": "Sets the status bar color (similar to the `StatusBar` component).\n\nSupported values: `\"auto\"`, `\"inverted\"`, `\"dark\"`, `\"light\"`\n\nDefaults to `auto` on iOS and `light` on Android.\n\nRequires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerBackButtonDisplayMode", - "description": "How the back button displays icon and title.\n\nSupported values:\n\n- \"default\" - Displays one of the following depending on the available space: previous screen's title, generic title (e.g. 'Back') or no title (only icon).\n- \"generic\" – Displays one of the following depending on the available space: generic title (e.g. 'Back') or no title (only icon).\n- \"minimal\" – Always displays only the icon without a title.\n\nThe space-aware behavior is disabled when:\n\n- The iOS version is 13 or lower\n- Custom font family or size is set (e.g. with `headerBackTitleStyle`)\n- Back button menu is disabled (e.g. with `headerBackButtonMenuEnabled`)\n\nIn such cases, a static title and icon are always displayed.", - "platform": "iOS only", - "category": "header", + "name": "statusBarBackgroundColor", + "description": "This option is deprecated and will be removed in a future release (for apps targeting Android SDK 35 or above edge-to-edge mode is enabled by default\nand it is expected that the edge-to-edge will be enforced in future SDKs, see here for more information).\n\nSets the background color of the status bar (similar to the `StatusBar` component).", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerBackTitleStyle", - "description": "Style object for header back title. Supported properties:\n\n- `fontFamily`\n- `fontSize`", - "platform": "iOS only", - "category": "header", + "name": "statusBarTranslucent", + "description": "This option is deprecated and will be removed in a future release (for apps targeting Android SDK 35 or above edge-to-edge mode is enabled by default\nand it is expected that the edge-to-edge will be enforced in future SDKs, see here for more information).\n\nSets the translucency of the status bar (similar to the `StatusBar` component). Defaults to `false`.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerBackImageSource", - "description": "Image to display in the header as the icon in the back button. Defaults to back icon image for the platform\n\n- A chevron on iOS\n- An arrow on Android", + "name": "contentStyle", + "description": "Style object for the scene content.", "platform": "Both", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerLargeStyle", - "description": "Style of the header when a large title is shown. The large title is shown if `headerLargeTitle` is `true` and the edge of any scrollable content reaches the matching edge of the header.\n\nSupported properties:\n\n- backgroundColor", + "name": "animationMatchesGesture", + "description": "Whether the gesture to dismiss should use animation provided to `animation` prop. Defaults to `false`.\n\nDoesn't affect the behavior of screens presented modally.", "platform": "iOS only", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerLargeTitle", - "description": "Whether to enable header with large title which collapses to regular header on scroll.\nDefaults to `false`.\n\nFor large title to collapse on scroll, the content of the screen should be wrapped in a scrollable view such as `ScrollView` or `FlatList`. If the scrollable area doesn't fill the screen, the large title won't collapse on scroll. You also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc.", + "name": "fullScreenGestureEnabled", + "description": "Whether the gesture to dismiss should work on the whole screen. Using gesture to dismiss with this option results in the same transition animation as `simple_push`. This behavior can be changed by setting `customAnimationOnGesture` prop. Achieving the default iOS animation isn't possible due to platform limitations. Defaults to `false`.\n\nDoesn't affect the behavior of screens presented modally.", "platform": "iOS only", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerLargeTitleShadowVisible", - "description": "Whether drop shadow of header is visible when a large title is shown.", + "name": "fullScreenGestureShadowEnabled", + "description": "Whether the full screen dismiss gesture has shadow under view during transition. Defaults to `true`.\n\nThis does not affect the behavior of transitions that don't use gestures enabled by `fullScreenGestureEnabled` prop.", "platform": "Both", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerLargeTitleStyle", - "description": "Style object for large title in header. Supported properties:\n\n- `fontFamily`\n- `fontSize`\n- `fontWeight`\n- `color`", + "name": "gestureEnabled", + "description": "Whether you can use gestures to dismiss this screen. Defaults to `true`.", "platform": "iOS only", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerShown", - "description": "Whether to show the header. The header is shown by default. Setting this to `false` hides the header.", + "name": "animationTypeForReplace", + "description": "The type of animation to use when this screen replaces another screen. Defaults to `push`.\n\nSupported values: `push`, `pop`\n\nThis can be useful to provide appropriate animations, such as `push` for login and `pop` for logout.", "platform": "Both", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerStyle", - "description": "Style object for header. Supported properties:\n\n- `backgroundColor`", - "platform": "Both", - "category": "header", + "name": "animation", + "description": "How the screen should animate when pushed or popped.\n\nSupported values: `default`, `fade`, `fade_from_bottom`, `flip`, `simple_push`, `slide_from_bottom`, `slide_from_right`, `slide_from_left`, `none`", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerShadowVisible", - "description": "Whether to hide the elevation shadow (Android) or the bottom border (iOS) on the header.", - "platform": "Both", - "category": "header", + "name": "presentation", + "description": "How should the screen be presented.\n\nSupported values: `card`, `modal`, `containedModal`, `fullScreenModal`, `transparentModal`, `containedTransparentModal`, `formSheet`", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerTransparent", - "description": "Boolean indicating whether the navigation bar is translucent.\n\nDefaults to `false`. Setting this to `true` makes the header absolutely positioned - so that the header floats over the screen so that it overlaps the content underneath, and changes the background color to `transparent` unless specified in `headerStyle`.\n\nThis is useful if you want to render a semi-transparent header or a blurred background.\n\nNote that if you don't want your content to appear under the header, you need to manually add a top margin to your content. React Navigation won't do it automatically.\n\nTo get the height of the header, you can use `HeaderHeightContext` with React's Context API or `useHeaderHeight`.", - "platform": "Both", - "category": "header", + "name": "orientation", + "description": "The display orientation to use for the screen.\n\nSupported values: `default`, `all`, `portrait`, `portrait_up`, `portrait_down`, `landscape`, `landscape_left`, `landscape_right`", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerBlurEffect", - "description": "Blur effect for the translucent header. The `headerTransparent` option needs to be set to `true` for this to work.\n\nSupported values: `extraLight`, `light`, `dark`, `regular`, `prominent`, `systemUltraThinMaterial`, `systemThinMaterial`, `systemMaterial`, `systemThickMaterial`, `systemChromeMaterial`, `systemUltraThinMaterialLight`, `systemThinMaterialLight`, `systemMaterialLight`, `systemThickMaterialLight`, `systemChromeMaterialLight`, `systemUltraThinMaterialDark`, `systemThinMaterialDark`, `systemMaterialDark`, `systemThickMaterialDark`, `systemChromeMaterialDark`", + "name": "autoHideHomeIndicator", + "description": "Boolean indicating whether the home indicator should prefer to stay hidden. Defaults to `false`.", "platform": "iOS only", - "category": "header", - "origin": "native-stack-navigator" - }, - { - "name": "headerBackground", - "description": "Function which returns a React Element to render as the background of the header. This is useful for using backgrounds such as an image or a gradient.", - "platform": "Both", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerTintColor", - "description": "Tint color for the header. Changes the color of back button and title.", - "platform": "Both", - "category": "header", + "name": "gestureDirection", + "description": "Sets the direction in which you should swipe to dismiss the screen.\n\nSupported values: `vertical`, `horizontal`\n\nWhen using `vertical` option, options `fullScreenGestureEnabled: true`, `customAnimationOnGesture: true` and `animation: 'slide_from_bottom'` are set by default.", + "platform": "iOS only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerLeft", - "description": "Function which returns a React Element to display on the left side of the header. This replaces the back button. See `headerBackVisible` to show the back button along side left element. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.\n- `label` - Label text for the button. Usually the title of the previous screen.\n- `href` - The `href` to use for the anchor tag on web", - "platform": "Both", - "category": "header", + "name": "animationDuration", + "description": "Changes the duration (in milliseconds) of `slide_from_bottom`, `fade_from_bottom`, `fade` and `simple_push` transitions on iOS. Defaults to `350`.\n\nFor screens with `default` and `flip` transitions, and, as of now, for screens with `presentation` set to `modal`, `formSheet`, `pageSheet` (regardless of transition), the duration isn't customizable.", + "platform": "iOS only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "unstable_headerLeftItems", - "description": "This option is experimental and may change in a minor release.\n\nFunction which returns an array of items to display as on the left side of the header. This will override `headerLeft` if both are specified. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.\n\nSee Header items for more information.", - "platform": "iOS only", - "category": "header", + "name": "navigationBarColor", + "description": "This option is deprecated and will be removed in a future release (for apps targeting Android SDK 35 or above edge-to-edge mode is enabled by default\nand it is expected that the edge-to-edge will be enforced in future SDKs, see here for more information).\n\nSets the navigation bar color. Defaults to initial status bar color.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerRight", - "description": "Function which returns a React Element to display on the right side of the header. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.", - "platform": "Both", - "category": "header", + "name": "navigationBarHidden", + "description": "Boolean indicating whether the navigation bar should be hidden. Defaults to `false`.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "unstable_headerRightItems", - "description": "This option is experimental and may change in a minor release.\n\nFunction which returns an array of items to display as on the right side of the header. This will override `headerRight` if both are specified. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.\n\nSee Header items for more information.", + "name": "freezeOnBlur", + "description": "Boolean indicating whether to prevent inactive screens from re-rendering. Defaults to `false`.\nDefaults to `true` when `enableFreeze()` from `react-native-screens` package is run at the top of the application.\n\nOnly supported on iOS and Android.", "platform": "iOS only", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerTitle", - "description": "String or a function that returns a React Element to be used by the header. Defaults to `title` or name of the screen.\n\nWhen a function is passed, it receives `tintColor` and`children` in the options object as an argument. The title string is passed in `children`.\n\nNote that if you render a custom element by passing a function, animations for the title won't work.", - "platform": "Both", - "category": "header", + "name": "scrollEdgeEffects", + "description": "Configures the scroll edge effect for the _content ScrollView_ (the ScrollView that is present in first descendants chain of the Screen).\nDepending on values set, it will blur the scrolling content below certain UI elements (e.g. header items, search bar) for the specified edge of the ScrollView.\nWhen set in nested containers, i.e. Native Stack inside Native Bottom Tabs, or the other way around, the ScrollView will use only the innermost one's config.\n\nEdge effects can be configured for each edge separately. The following values are currently supported:\n\n- `automatic` - the automatic scroll edge effect style,\n- `hard` - a scroll edge effect with a hard cutoff and dividing line,\n- `soft` - a soft-edged scroll edge effect,\n- `hidden` - no scroll edge effect.\n\nDefaults to `automatic` for each edge.\n\nUsing both `blurEffect` and `scrollEdgeEffects` (>= iOS 26) simultaneously may cause overlapping effects.\n\nOnly supported on iOS, starting from iOS 26.", + "platform": "iOS only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerTitleAlign", - "description": "How to align the header title. Possible values:\n\n- `left`\n \n\n- `center`\n \n\nDefaults to `left` on platforms other than iOS.\n\nNot supported on iOS. It's always `center` on iOS and cannot be changed.", - "platform": "Both", - "category": "header", + "name": "sheetAllowedDetents", + "description": "Describes heights where a sheet can rest.\n\nSupported values: `'fitToContents'` or an array of fractions (e.g. `[0.25, 0.5, 0.75]`). The array must be sorted in ascending order. This invariant is verified only in development mode, where violation results in an error. Android is limited to 3 detents.\n\nDefaults to `[1.0]`. \n\nSee Configuring sheet sizes for usage examples.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerTitleStyle", - "description": "Style object for header title. Supported properties:\n\n- `fontFamily`\n- `fontSize`\n- `fontWeight`\n- `color`", - "platform": "Both", - "category": "header", + "name": "sheetElevation", + "description": "Integer value describing elevation of the sheet, impacting shadow on the top edge.\n\nNot dynamic - changing it after the component is rendered won't have an effect.\n\nDefaults to `24`.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "headerSearchBarOptions", - "description": "Options to render a native search bar on iOS. Search bars are rarely static so normally it is controlled by passing an object to `headerSearchBarOptions` navigation option in the component's body.\n\nYou also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc. If you don't have a `ScrollView`, specify `headerTransparent: false`.\n\nSupported properties are:\n\n**ref**\n\nRef to manipulate the search input imperatively. It contains the following methods:\n\n- `focus` - focuses the search bar\n- `blur` - removes focus from the search bar\n- `setText` - sets the search bar's content to given value\n- `clearText` - removes any text present in the search bar input field\n- `cancelSearch` - cancel the search and close the search bar\n\n**autoCapitalize**\n\nControls whether the text is automatically auto-capitalized as it is entered by the user.\nPossible values:\n\n- `none`\n- `words`\n- `sentences`\n- `characters`\n\nDefaults to `sentences`.\n\n**autoFocus**\n\nWhether to automatically focus search bar when it's shown. Defaults to `false`.\n\n**barTintColor**\n\nThe search field background color. By default bar tint color is translucent.\n\n**tintColor**\n\nThe color for the cursor caret and cancel button text.\n\n**cancelButtonText**\n\nThe text to be used instead of default `Cancel` button text.\n\n**disableBackButtonOverride**\n\nWhether the back button should close search bar's text input or not. Defaults to `false`.\n\n**hideNavigationBar**\n\nBoolean indicating whether to hide the navigation bar during searching. Defaults to `true`.\n\n**hideWhenScrolling**\n\nBoolean indicating whether to hide the search bar when scrolling. Defaults to `true`.\n\n**inputType**\n\nThe type of the input. Defaults to `\"text\"`.\n\nSupported values: `\"text\"`, `\"phone\"`, `\"number\"`, `\"email\"`\n\n**obscureBackground**\n\nBoolean indicating whether to obscure the underlying content with semi-transparent overlay. Defaults to `true`.\n\n**placeholder**\n\nText displayed when search field is empty.\n\n**textColor**\n\nThe color of the text in the search field.\n\n**hintTextColor**\n\nThe color of the hint text in the search field.\n\n**headerIconColor**\n\nThe color of the search and close icons shown in the header\n\n**shouldShowHintSearchIcon**\n\nWhether to show the search hint icon when search bar is focused. Defaults to `true`.\n\n**onBlur**\n\nA callback that gets called when search bar has lost focus.\n\n**onCancelButtonPress**\n\nA callback that gets called when the cancel button is pressed.\n\n**onChangeText**\n\nA callback that gets called when the text changes. It receives the current text value of the search bar.", + "name": "sheetExpandsWhenScrolledToEdge", + "description": "Whether the sheet should expand to a larger detent when scrolling.\n\nThe `ScrollView` must be reachable by following the first child view at each level of the view hierarchy from the screen component.\n\nDefaults to `true`. \n\nSee Scroll behavior for more details.", "platform": "iOS only", - "category": "header", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "header", - "description": "Custom header to use instead of the default header.\n\nThis accepts a function that returns a React Element to display as a header. The function receives an object containing the following properties as the argument:\n\n- `navigation` - The navigation object for the current screen.\n- `route` - The route object for the current screen.\n- `options` - The options for the current screen\n- `back` - Options for the back button, contains an object with a `title` property to use for back button label.\n\nTo set a custom header for all the screens in the navigator, you can specify this option in the `screenOptions` prop of the navigator.\n\nNote that if you specify a custom header, the native functionality such as large title, search bar etc. won't work.", - "platform": "Both", - "category": "header", + "name": "sheetCornerRadius", + "description": "The corner radius of the sheet. If set to a non-negative value it will use the provided radius, otherwise the system default is used.", + "platform": "Android only", + "category": "other", "origin": "native-stack-navigator" }, { - "name": "statusBarAnimation", - "description": "Sets the status bar animation (similar to the `StatusBar` component). Defaults to `fade` on iOS and `none` on Android.\n\nSupported values: `\"fade\"`, `\"none\"`, `\"slide\"`\n\nOn Android, setting either `fade` or `slide` will set the transition of status bar color. On iOS, this option applies to appereance animation of the status bar.\n\nRequires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.", + "name": "sheetInitialDetentIndex", + "description": "Index of the detent the sheet should expand to after being opened. If the specified index is out of bounds of the `sheetAllowedDetents` array, an error will be thrown in development mode and the value will be reset to the default in production.\n\nCan also be set to `'last'` to open at the largest detent.\n\nDefaults to `0`. \n\nSee Configuring sheet sizes for usage examples.", "platform": "Android only", "category": "other", "origin": "native-stack-navigator" }, { - "name": "statusBarHidden", - "description": "Whether the status bar should be hidden on this screen.\n\nRequires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.", - "platform": "Android only", + "name": "sheetGrabberVisible", + "description": "Whether the sheet shows a grabber handle at the top.\n\nDefaults to `false`.", + "platform": "iOS only", "category": "other", "origin": "native-stack-navigator" }, { - "name": "statusBarStyle", - "description": "Sets the status bar color (similar to the `StatusBar` component).\n\nSupported values: `\"auto\"`, `\"inverted\"`, `\"dark\"`, `\"light\"`\n\nDefaults to `auto` on iOS and `light` on Android.\n\nRequires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.", + "name": "sheetLargestUndimmedDetentIndex", + "description": "The largest detent index for which the view underneath won't be dimmed.\n\nCan be set to a number (index into `sheetAllowedDetents`), `'none'` (always dim), or `'last'` (never dim).\n\nDefaults to `'none'`. \n\nSee Controlling dimming for usage examples.", "platform": "Android only", "category": "other", "origin": "native-stack-navigator" }, { - "name": "statusBarBackgroundColor", - "description": "This option is deprecated and will be removed in a future release (for apps targeting Android SDK 35 or above edge-to-edge mode is enabled by default\nand it is expected that the edge-to-edge will be enforced in future SDKs, see here for more information).\n\nSets the background color of the status bar (similar to the `StatusBar` component).", + "name": "sheetShouldOverflowTopInset", + "description": "Whether the sheet content should be rendered behind the status bar or display cutouts.\n\nWhen `true`, detent ratios in `sheetAllowedDetents` are measured relative to the full stack height. When `false`, they are measured relative to the adjusted height (excluding the top inset).\n\nDefaults to `false`.", "platform": "Android only", "category": "other", "origin": "native-stack-navigator" }, { - "name": "statusBarTranslucent", - "description": "This option is deprecated and will be removed in a future release (for apps targeting Android SDK 35 or above edge-to-edge mode is enabled by default\nand it is expected that the edge-to-edge will be enforced in future SDKs, see here for more information).\n\nSets the translucency of the status bar (similar to the `StatusBar` component). Defaults to `false`.", + "name": "sheetResizeAnimationEnabled", + "description": "Whether the default native animation should be used when the sheet's content size changes (specifically when using `fitToContents`).\n\nSet to `false` to implement custom resizing animations.\n\nDefaults to `true`.", "platform": "Android only", "category": "other", "origin": "native-stack-navigator" }, { - "name": "contentStyle", - "description": "Style object for the scene content.", + "name": "headerBackButtonMenuEnabled", + "description": "Boolean indicating whether to show the menu on longPress of iOS >= 14 back button. Defaults to `true`.", + "platform": "iOS only", + "category": "header", + "origin": "native-stack-navigator" + }, + { + "name": "headerBackVisible", + "description": "Whether the back button is visible in the header. You can use it to show a back button alongside `headerLeft` if you have specified it.\n\nThis will have no effect on the first screen in the stack.", "platform": "Both", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "animationMatchesGesture", - "description": "Whether the gesture to dismiss should use animation provided to `animation` prop. Defaults to `false`.\n\nDoesn't affect the behavior of screens presented modally.", + "name": "headerBackTitle", + "description": "Title string used by the back button on iOS. Defaults to the previous scene's title, \"Back\" or arrow icon depending on the available space. See `headerBackButtonDisplayMode` to read about limitations and customize the behavior.\n\nUse `headerBackButtonDisplayMode: \"minimal\"` to hide it.", "platform": "iOS only", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "fullScreenGestureEnabled", - "description": "Whether the gesture to dismiss should work on the whole screen. Using gesture to dismiss with this option results in the same transition animation as `simple_push`. This behavior can be changed by setting `customAnimationOnGesture` prop. Achieving the default iOS animation isn't possible due to platform limitations. Defaults to `false`.\n\nDoesn't affect the behavior of screens presented modally.", + "name": "headerBackButtonDisplayMode", + "description": "How the back button displays icon and title.\n\nSupported values:\n\n- \"default\" - Displays one of the following depending on the available space: previous screen's title, generic title (e.g. 'Back') or no title (only icon).\n- \"generic\" – Displays one of the following depending on the available space: generic title (e.g. 'Back') or no title (only icon).\n- \"minimal\" – Always displays only the icon without a title.\n\nThe space-aware behavior is disabled when:\n\n- The iOS version is 13 or lower\n- Custom font family or size is set (e.g. with `headerBackTitleStyle`)\n- Back button menu is disabled (e.g. with `headerBackButtonMenuEnabled`)\n\nIn such cases, a static title and icon are always displayed.", "platform": "iOS only", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "fullScreenGestureShadowEnabled", - "description": "Whether the full screen dismiss gesture has shadow under view during transition. Defaults to `true`.\n\nThis does not affect the behavior of transitions that don't use gestures enabled by `fullScreenGestureEnabled` prop.", + "name": "headerBackTitleStyle", + "description": "Style object for header back title. Supported properties:\n\n- `fontFamily`\n- `fontSize`", + "platform": "iOS only", + "category": "header", + "origin": "native-stack-navigator" + }, + { + "name": "headerBackIcon", + "description": "Icon to display in the header as the icon in the back button. Defaults to back icon image for the platform:\n\n- A chevron on iOS\n- An arrow on Android\n\nCurrently only supports image sources.", "platform": "Both", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "gestureEnabled", - "description": "Whether you can use gestures to dismiss this screen. Defaults to `true`.", + "name": "headerLargeStyle", + "description": "Style of the header when a large title is shown. The large title is shown if `headerLargeTitleEnabled` is `true` and the edge of any scrollable content reaches the matching edge of the header.\n\nSupported properties:\n\n- backgroundColor", "platform": "iOS only", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "animationTypeForReplace", - "description": "The type of animation to use when this screen replaces another screen. Defaults to `push`.\n\nSupported values: `push`, `pop`", + "name": "headerLargeTitleEnabled", + "description": "Whether to enable header with large title which collapses to regular header on scroll.\nDefaults to `false`.\n\nFor large title to collapse on scroll, the content of the screen should be wrapped in a scrollable view such as `ScrollView` or `FlatList`. If the scrollable area doesn't fill the screen, the large title won't collapse on scroll. You also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc.", + "platform": "iOS only", + "category": "header", + "origin": "native-stack-navigator" + }, + { + "name": "headerLargeTitleShadowVisible", + "description": "Whether drop shadow of header is visible when a large title is shown.", "platform": "Both", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "animation", - "description": "How the screen should animate when pushed or popped.\n\nSupported values: `default`, `fade`, `fade_from_bottom`, `flip`, `simple_push`, `slide_from_bottom`, `slide_from_right`, `slide_from_left`, `none`", - "platform": "Android only", - "category": "other", + "name": "headerLargeTitleStyle", + "description": "Style object for large title in header. Supported properties:\n\n- `fontFamily`\n- `fontSize`\n- `fontWeight`\n- `color`", + "platform": "iOS only", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "presentation", - "description": "How should the screen be presented.\n\nSupported values: `card`, `modal`, `transparentModal`, `containedModal`, `containedTransparentModal`, `fullScreenModal`, `formSheet`", - "platform": "Android only", - "category": "other", + "name": "headerStyle", + "description": "Style object for header. Supported properties:\n\n- `backgroundColor`", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetAllowedDetents", - "description": "Works only when `presentation` is set to `formSheet`.\n\nDescribes heights where a sheet can rest.\n\nSupported values: `fitToContents`\n\nDefaults to `[1.0]`.", + "name": "unstable_headerInsets", + "description": "Which edges of the native header apply window insets (e.g. statusbar inset) on Android.\n\nThe native header applies insets to every edge by default. Setting an edge to `false` removes the inset for that edge:\n\n```js\nunstable_headerInsets: {\n top: false,\n bottom: false,\n}\n```\n\nSupported edges are `top`, `left`, `right`, and `bottom`.\n\nDisabling an inset also disables it for nested headers. A nested header cannot re-enable an inset disabled by a parent header.\n\nThis API may change in a minor release.", "platform": "Android only", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetElevation", - "description": "Works only when `presentation` is set to `formSheet`.\n\nInteger value describing elevation of the sheet, impacting shadow on the top edge of the sheet.\n\nNot dynamic - changing it after the component is rendered won't have an effect.\n\nDefaults to `24`.", - "platform": "Android only", - "category": "other", + "name": "headerShadowVisible", + "description": "Whether to hide the elevation shadow (Android) or the bottom border (iOS) on the header.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetExpandsWhenScrolledToEdge", - "description": "Works only when `presentation` is set to `formSheet`.\n\nWhether the sheet should expand to larger detent when scrolling.\n\nDefaults to `true`.\n\nPlease note that for this interaction to work, the ScrollView must be \"first-subview-chain\" descendant of the Screen component. This restriction is due to platform requirements.", + "name": "headerTransparent", + "description": "Boolean indicating whether the navigation bar is translucent.\n\nDefaults to `false`. Setting this to `true` makes the header absolutely positioned - so that the header floats over the screen so that it overlaps the content underneath, and changes the background color to `transparent` unless specified in `headerStyle`.\n\nThis is useful if you want to render a semi-transparent header or a blurred background.\n\nNote that if you don't want your content to appear under the header, you need to manually add a top margin to your content. React Navigation won't do it automatically.\n\nTo get the height of the header, you can use `HeaderHeightContext` with React's Context API or `useHeaderHeight`.", + "platform": "Both", + "category": "header", + "origin": "native-stack-navigator" + }, + { + "name": "headerBlurEffect", + "description": "Blur effect for the translucent header. The `headerTransparent` option needs to be set to `true` for this to work.\n\nSupported values: `extraLight`, `light`, `regular`, `prominent`, `systemUltraThinMaterial`, `systemThinMaterial`, `systemMaterial`, `systemThickMaterial`, `systemChromeMaterial`, `systemUltraThinMaterialLight`, `systemThinMaterialLight`, `systemMaterialLight`, `systemThickMaterialLight`, `systemChromeMaterialLight`, `dark`, `systemUltraThinMaterialDark`, `systemThinMaterialDark`, `systemMaterialDark`, `systemThickMaterialDark`, `systemChromeMaterialDark`\n\nUsing both `headerBlurEffect` and `scrollEdgeEffects` (>= iOS 26) simultaneously may cause overlapping effects.", "platform": "iOS only", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetCornerRadius", - "description": "Works only when `presentation` is set to `formSheet`.\n\nThe corner radius that the sheet will try to render with.\n\nIf set to non-negative value it will try to render sheet with provided radius, else it will apply system default.\n\nIf left unset, system default is used.", - "platform": "Android only", - "category": "other", + "name": "headerBackground", + "description": "Function which returns a React Element to render as the background of the header. This is useful for using backgrounds such as an image or a gradient.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetInitialDetentIndex", - "description": "Works only when `presentation` is set to `formSheet`.\n\n**Index** of the detent the sheet should expand to after being opened.\n\nIf the specified index is out of bounds of `sheetAllowedDetents` array, in dev environment more errors will be thrown, in production the value will be reset to default value.\n\nAdditionaly there is `last` value available, when set the sheet will expand initially to last (largest) detent.\n\nDefaults to `0` - which represents first detent in the detents array.", - "platform": "Android only", - "category": "other", + "name": "headerTintColor", + "description": "Tint color for the header. Changes the color of back button and title.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetGrabberVisible", - "description": "Works only when `presentation` is set to `formSheet`.\n\nBoolean indicating whether the sheet shows a grabber at the top.\n\nDefaults to `false`.", - "platform": "iOS only", - "category": "other", + "name": "headerLeft", + "description": "Function which returns a React Element to display on the left side of the header. This replaces the back button. See `headerBackVisible` to show the back button along side left element. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.\n- `label` - Label text for the button. Usually the title of the previous screen.\n- `href` - The `href` to use for the anchor tag on web", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "sheetLargestUndimmedDetentIndex", - "description": "Works only when `presentation` is set to `formSheet`.\n\nThe largest sheet detent for which a view underneath won't be dimmed.\n\nThis prop can be set to an number, which indicates index of detent in `sheetAllowedDetents` array for which there won't be a dimming view beneath the sheet.\n\nAdditionaly there are following options available:\n\n- `none` - there will be dimming view for all detents levels,\n- `last` - there won't be a dimming view for any detent level.\n\nDefaults to `none`, indicating that the dimming view should be always present.", - "platform": "Android only", - "category": "other", + "name": "unstable_headerLeftItems", + "description": "This option is experimental and may change in a minor release.\n\nFunction which returns an array of items to display as on the left side of the header. This will override `headerLeft` if both are specified. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.\n\nSee Header items for more information.", + "platform": "iOS only", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "orientation", - "description": "The display orientation to use for the screen.\n\nSupported values: `default`, `all`, `portrait`, `portrait_up`, `portrait_down`, `landscape`, `landscape_left`, `landscape_right`", - "platform": "Android only", - "category": "other", + "name": "headerRight", + "description": "Function which returns a React Element to display on the right side of the header. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "autoHideHomeIndicator", - "description": "Boolean indicating whether the home indicator should prefer to stay hidden. Defaults to `false`.", + "name": "unstable_headerRightItems", + "description": "This option is experimental and may change in a minor release.\n\nFunction which returns an array of items to display as on the right side of the header. This will override `headerRight` if both are specified. It receives the following properties in the arguments:\n\n- `tintColor` - The tint color to apply. Defaults to the theme's primary color.\n- `canGoBack` - Boolean indicating whether there is a screen to go back to.\n\nSee Header items for more information.", "platform": "iOS only", - "category": "other", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "gestureDirection", - "description": "Sets the direction in which you should swipe to dismiss the screen.\n\nSupported values: `vertical`, `horizontal`\n\nWhen using `vertical` option, options `fullScreenGestureEnabled: true`, `customAnimationOnGesture: true` and `animation: 'slide_from_bottom'` are set by default.", - "platform": "iOS only", - "category": "other", + "name": "headerTitle", + "description": "String or a function that returns a React Element to be used by the header. Defaults to `title` or name of the screen.\n\nWhen a function is passed, it receives `tintColor` and`children` in the options object as an argument. The title string is passed in `children`.\n\nNote that if you render a custom element by passing a function, animations for the title won't work.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "animationDuration", - "description": "Changes the duration (in milliseconds) of `slide_from_bottom`, `fade_from_bottom`, `fade` and `simple_push` transitions on iOS. Defaults to `350`.\n\nThe duration of `default` and `flip` transitions isn't customizable.", - "platform": "iOS only", - "category": "other", + "name": "headerTitleAlign", + "description": "How to align the header title. Possible values:\n\n- `left`\n- `center`\n\nDefaults to `left` on platforms other than iOS.\n\nNot supported on iOS. It's always `center` on iOS and cannot be changed.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "navigationBarColor", - "description": "This option is deprecated and will be removed in a future release (for apps targeting Android SDK 35 or above edge-to-edge mode is enabled by default\nand it is expected that the edge-to-edge will be enforced in future SDKs, see here for more information).\n\nSets the navigation bar color. Defaults to initial status bar color.", - "platform": "Android only", - "category": "other", + "name": "headerTitleStyle", + "description": "Style object for header title. Supported properties:\n\n- `fontFamily`\n- `fontSize`\n- `fontWeight`\n- `color`", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "navigationBarHidden", - "description": "Boolean indicating whether the navigation bar should be hidden. Defaults to `false`.", - "platform": "Android only", - "category": "other", + "name": "headerSearchBarOptions", + "description": "Options to render a native search bar. Search bars are rarely static so normally it is controlled by passing an object to `headerSearchBarOptions` navigation option in the component's body.\n\nOn iOS, you also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc. If you don't have a `ScrollView`, specify `headerTransparent: false`.\n\nSupported properties are:\n\n**ref**\n\nRef to manipulate the search input imperatively. It contains the following methods:\n\n- `focus` - focuses the search bar\n- `blur` - removes focus from the search bar\n- `setText` - sets the search bar's content to given value\n- `clearText` - removes any text present in the search bar input field\n- `cancelSearch` - cancel the search and close the search bar\n- `toggleCancelButton` - depending on passed boolean value, hides or shows cancel button (only supported on iOS)\n\n**autoCapitalize**\n\nControls whether the text is automatically auto-capitalized as it is entered by the user.\nPossible values:\n\n- `systemDefault`\n- `none`\n- `words`\n- `sentences`\n- `characters`\n\nDefaults to `systemDefault` which is the same as `sentences` on iOS and `none` on Android.\n\n**autoFocus**\n\nWhether to automatically focus search bar when it's shown. Defaults to `false`.\n\n**barTintColor**\n\nThe search field background color. By default bar tint color is translucent.\n\n**tintColor**\n\nThe color for the cursor caret and cancel button text.\n\n**cancelButtonText**\n\nThe text to be used instead of default `Cancel` button text.\n\n **Deprecated** starting from iOS 26.\n\n**disableBackButtonOverride**\n\nWhether the back button should close search bar's text input or not. Defaults to `false`.\n\n**hideNavigationBar**\n\nBoolean indicating whether to hide the navigation bar during searching.\n\nIf left unset, system default is used.\n\n**hideWhenScrolling**\n\nBoolean indicating whether to hide the search bar when scrolling. Defaults to `true`.\n\n**inputType**\n\nThe type of the input. Defaults to `\"text\"`.\n\nSupported values: `\"text\"`, `\"phone\"`, `\"number\"`, `\"email\"`\n\n**obscureBackground**\n\nBoolean indicating whether to obscure the underlying content with semi-transparent overlay.\n\nIf left unset, system default is used.\n\n**placement**\n\nControls preferred placement of the search bar. Defaults to `automatic`.\n\nSupported values: `automatic`, `stacked`, `inline`, `integrated`, `integratedButton`, `integratedCentered`\n\n**allowToolbarIntegration**\n\nBoolean indicating whether the system can place the search bar among other toolbar items on iPhone.\n\nSet this prop to `false` to prevent the search bar from appearing in the toolbar when `placement` is `automatic`, `integrated`, `integratedButton` or `integratedCentered`.\n\nDefaults to `true`. If `placement` is set to `stacked`, the value of this prop will be overridden with `false`.\n\nOnly supported on iOS, starting from iOS 26.\n\n**placeholder**\n\nText displayed when search field is empty.\n\n**textColor**\n\nThe color of the text in the search field.\n\n**hintTextColor**\n\nThe color of the hint text in the search field.\n\n**headerIconColor**\n\nThe color of the search and close icons shown in the header\n\n**shouldShowHintSearchIcon**\n\nWhether to show the search hint icon when search bar is focused. Defaults to `true`.\n\n**onBlur**\n\nA callback that gets called when search bar has lost focus.\n\n**onCancelButtonPress**\n\nA callback that gets called when the cancel button is pressed.\n\n**onSearchButtonPress**\n\nA callback that gets called when the search button is pressed.\n\n```js\nconst [search, setSearch] = React.useState('');\n\nReact.useLayoutEffect(() => {\n navigation.setOptions({\n headerSearchBarOptions: {\n onSearchButtonPress: (event) => setSearch(event?.nativeEvent?.text),\n },\n });\n}, [navigation]);\n```\n\n**onChangeText**\n\nA callback that gets called when the text changes. It receives the current text value of the search bar.\n\n`headerShown`\n\nWhether to show the header. The header is shown by default. Setting this to `false` hides the header.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { - "name": "freezeOnBlur", - "description": "Boolean indicating whether to prevent inactive screens from re-rendering. Defaults to `false`.\nDefaults to `true` when `enableFreeze()` from `react-native-screens` package is run at the top of the application.\n\nOnly supported on iOS and Android.", - "platform": "iOS only", - "category": "other", + "name": "headerShown", + "description": "Whether to show the header. The header is shown by default. Setting this to `false` hides the header.", + "platform": "Both", + "category": "header", + "origin": "native-stack-navigator" + }, + { + "name": "header", + "description": "Custom header to use instead of the default header.\n\nThis accepts a function that returns a React Element to display as a header. The function receives an object containing the following properties as the argument:\n\n- `navigation` - The navigation object for the current screen.\n- `route` - The route object for the current screen.\n- `options` - The options for the current screen\n- `back` - Options for the back button, contains an object with a `title` property to use for back button label.\n\nTo set a custom header for all the screens in the navigator, you can specify this option in the `screenOptions` prop of the navigator.\n\nNote that if you specify a custom header, the native functionality such as large title, search bar etc. won't work.", + "platform": "Both", + "category": "header", "origin": "native-stack-navigator" }, { @@ -413,7 +441,7 @@ }, { "name": "tabBarLabelPosition", - "description": "Whether the label is shown below the icon or beside the icon.\n\nBy default, the position is chosen automatically based on device width.\n\n- `below-icon`: the label is shown below the icon (typical for iPhones)\n \n\n- `beside-icon` the label is shown next to the icon (typical for iPad)", + "description": "Whether the label is shown below the icon or beside the icon. By default, the position is chosen automatically based on device width.\n\n- `below-icon`\n\n The label is shown below the icon (typical for devices with smaller widths such as phones)\n\n- `beside-icon`\n\n The label is shown next to the icon (typical for larger devices such as tablets)", "platform": "Both", "category": "tabBar", "origin": "bottom-tab-navigator" @@ -462,7 +490,7 @@ }, { "name": "tabBarButton", - "description": "Function which returns a React element to render as the tab bar button. It wraps the icon and label. Renders `Pressable` by default.\n\nYou can specify a custom implementation here:\n\n```js\ntabBarButton: (props) => ;\n```", + "description": "Function which returns a React element to render as the tab bar button. It wraps the icon and label. Renders `PlatformPressable` by default.\n\nYou can specify a custom implementation here:\n\n```js\ntabBarButton: (props) => ;\n```", "platform": "Both", "category": "tabBar", "origin": "bottom-tab-navigator" @@ -518,21 +546,21 @@ }, { "name": "tabBarStyle", - "description": "Style object for the tab bar. You can configure styles such as background color here.\n\nTo show your screen under the tab bar, you can set the `position` style to absolute:\n\n```js\n\n```\n\nYou also might need to add a bottom margin to your content if you have an absolutely positioned tab bar. React Navigation won't do it automatically. See `useBottomTabBarHeight` for more details.", + "description": "Style object for the tab bar. You can configure styles such as background color here.\n\nTo show your screen under the tab bar, you can set the `position` style to absolute:\n\n```js\ncreateBottomTabNavigator({\n screenOptions: {\n tabBarStyle: { position: 'absolute' },\n },\n screens: {\n // ...\n },\n});\n```\n\n```js\n\n```\n\nYou also might need to add a bottom margin to your content if you have an absolutely positioned tab bar. React Navigation won't do it automatically. See `useBottomTabBarHeight` for more details.", "platform": "Both", "category": "tabBar", "origin": "bottom-tab-navigator" }, { "name": "tabBarBackground", - "description": "Function which returns a React Element to use as background for the tab bar. You could render an image, a gradient, blur view etc.:\n\n```js\nimport { BlurView } from 'expo-blur';\n\n// ...\n\n (\n \n ),\n }}\n>\n```\n\nWhen using `BlurView`, make sure to set `position: 'absolute'` in `tabBarStyle` as well. You'd also need to use `useBottomTabBarHeight` to add bottom padding to your content.", + "description": "Function which returns a React Element to use as background for the tab bar. You could render an image, a gradient, blur view etc.:\n\n```js\nimport { BlurView } from 'expo-blur';\nimport { StyleSheet } from 'react-native';\nimport { createBottomTabNavigator } from '@react-navigation/bottom-tabs';\n\n// ...\n\ncreateBottomTabNavigator({\n screenOptions: {\n tabBarStyle: { position: 'absolute' },\n tabBarBackground: () => (\n \n ),\n },\n screens: {\n // ...\n },\n});\n```\n\n```js\nimport { BlurView } from 'expo-blur';\nimport { StyleSheet } from 'react-native';\n\n// ...\n\n (\n \n ),\n }}\n>\n```\n\nWhen using `BlurView`, make sure to set `position: 'absolute'` in `tabBarStyle` as well. You'd also need to use `useBottomTabBarHeight` to add bottom padding to your content.", "platform": "Both", "category": "tabBar", "origin": "bottom-tab-navigator" }, { "name": "tabBarPosition", - "description": "Position of the tab bar. Available values are:\n\n- `bottom` (Default)\n- `top`\n- `left`\n- `right`\n\nWhen the tab bar is positioned on the `left` or `right`, it is styled as a sidebar. This can be useful when you want to show a sidebar on larger screens and a bottom tab bar on smaller screens:\n\n```js\n\n```", + "description": "Position of the tab bar. Available values are:\n\n- `bottom` (Default)\n- `top`\n- `left`\n- `right`\n\nWhen the tab bar is positioned on the `left` or `right`, it is styled as a sidebar. This can be useful when you want to show a sidebar on larger screens and a bottom tab bar on smaller screens:\n\nYou can also render a compact sidebar by placing the label below the icon. This is only supported when the `tabBarVariant` is set to `material`:", "platform": "Both", "category": "tabBar", "origin": "bottom-tab-navigator" diff --git a/docs/public/static/data/unversioned/expo-router/stack.json b/docs/public/static/data/unversioned/expo-router/stack.json index abda74ceae6057..baac70b807f790 100644 --- a/docs/public/static/data/unversioned/expo-router/stack.json +++ b/docs/public/static/data/unversioned/expo-router/stack.json @@ -1 +1 @@ -{"schemaVersion":"2.0","name":"expo-router/stack","variant":"project","kind":1,"children":[{"name":"StackHeaderItemSharedProps","variant":"declaration","kind":256,"children":[{"name":"accessibilityHint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"accessibilityLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidesSharedBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"icon","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}]}},{"name":"iconRenderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how image-based icons are rendered.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": applies tint color to the icon\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": preserves original icon colors (useful for multi-color icons)\n\n**Default behavior on iOS:**\n- If "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":" is specified, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":", defaults to "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":"\n\n**On Android:** defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":". The icon is always rendered through\nCompose's "},{"kind":"code","text":"`Icon`"},{"kind":"text","text":" and tinted unless "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":" is set explicitly.\n\nThis prop only affects image-based icons (not SF Symbols)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"separateBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/utils/font.ts","qualifiedName":"BasicTextStyle"},"name":"BasicTextStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"variant","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'plain'"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"done"},{"type":"literal","value":"plain"},{"type":"literal","value":"prominent"}]}}]},{"name":"StackHeaderProps","variant":"declaration","kind":256,"children":[{"name":"asChild","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When "},{"kind":"code","text":"`true`"},{"kind":"text","text":", renders children as a custom header component, replacing the default header entirely.\nUse this to implement fully custom header layouts."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"blurEffect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The blur effect to apply to the header background on iOS.\nCommon values include 'regular', 'prominent', 'systemMaterial', etc."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/components/shared/types.ts","qualifiedName":"BlurEffect"},"name":"BlurEffect","package":"react-native-screens"}},{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Child elements for custom header when "},{"kind":"code","text":"`asChild`"},{"kind":"text","text":" is true."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to hide the header completely. When set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the header will not be rendered."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"largeStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Style properties for the large title header (iOS).\n- "},{"kind":"code","text":"`backgroundColor`"},{"kind":"text","text":": Background color of the large title header\n- "},{"kind":"code","text":"`shadowColor`"},{"kind":"text","text":": Set to 'transparent' to hide the large title shadow/border"}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"shadowColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"literal","value":"transparent"}}]}}],"name":"StyleProp","package":"react-native"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Style properties for the standard-sized header.\n- "},{"kind":"code","text":"`color`"},{"kind":"text","text":": Tint color for header elements (similar to tintColor in React Navigation)\n- "},{"kind":"code","text":"`backgroundColor`"},{"kind":"text","text":": Background color of the header\n- "},{"kind":"code","text":"`shadowColor`"},{"kind":"text","text":": Set to 'transparent' to hide the header shadow/border"}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"shadowColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"literal","value":"transparent"}}]}}],"name":"StyleProp","package":"react-native"}},{"name":"transparent","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the header should be transparent.\nWhen "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the header is absolutely positioned and content scrolls underneath.\n\nAuto-enabled when:\n- "},{"kind":"code","text":"`style.backgroundColor`"},{"kind":"text","text":" is 'transparent'\n- "},{"kind":"code","text":"`blurEffect`"},{"kind":"text","text":" is set (required for blur to work)"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"StackScreenBackButtonProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The title to display for the back button."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"displayMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The display mode for the back button."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/types.tsx","qualifiedName":"BackButtonDisplayMode"},"name":"BackButtonDisplayMode","package":"react-native-screens"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to hide the back button."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"src","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Custom image source for the back button."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Style for the back button title."}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"fontFamily","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"fontSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}],"name":"StyleProp","package":"react-native"}},{"name":"withMenu","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to show a context menu when long pressing the back button."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"StackScreenProps","variant":"declaration","kind":256,"children":[{"name":"dangerouslySingular","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When enabled, the navigator will reuse an existing screen instead of pushing a new one.\n\nOnly supported when used inside a Layout component."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/useScreens.tsx","qualifiedName":"SingularOptions"},"name":"SingularOptions","package":"expo-router"}},{"name":"getId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Function to determine a unique ID for the screen."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`dangerouslySingular`"},{"kind":"text","text":" instead.\n\nOnly supported when used inside a Layout component."}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"__namedParameters","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"params","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"}}]}}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"undefined"}]}}]}}},{"name":"initialParams","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Initial params to pass to the route.\n\nOnly supported when used inside a Layout component."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"any"}],"name":"Record","package":"typescript"}},{"name":"listeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Listeners for navigation events.\n\nOnly supported when used inside a Layout component."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"gestureCancel","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a swipe back is canceled on iOS."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"gestureCancel"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"sheetDetentChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when screen is in sheet presentation & it's detent changes.\n\nIn payload it carries two fields:\n\n* "},{"kind":"code","text":"`index`"},{"kind":"text","text":" - current detent index in the "},{"kind":"code","text":"`sheetAllowedDetents`"},{"kind":"text","text":" array,\n* "},{"kind":"code","text":"`stable`"},{"kind":"text","text":" - on Android "},{"kind":"code","text":"`false`"},{"kind":"text","text":" value means that the user is dragging the sheet or it is settling; on iOS it is always "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"sheetDetentChange"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"transitionEnd","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a transition animation ends."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"transitionEnd"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"transitionStart","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a transition animation starts."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationEventMap"},"name":"NativeStackNavigationEventMap","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMapCore"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"}],"name":"EventMapCore","package":"expo-router"}]},{"type":"literal","value":"transitionStart"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"any"}},{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/useScreens.tsx","qualifiedName":"TState"},"name":"TState","package":"expo-router","refersToTypeParameter":true},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/useScreens.tsx","qualifiedName":"TEventMap"},"name":"TEventMap","package":"expo-router","refersToTypeParameter":true}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"name","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Name is required when used inside a Layout component."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Options to configure the screen.\n\nAccepts an object or a function returning an object.\nThe function form "},{"kind":"code","text":"`options={({ route }) => ({})}`"},{"kind":"text","text":" is only supported when used inside a Layout component.\nWhen used inside a page component, pass an options object directly."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"prop","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"any"}},{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"}}]}}]}},{"name":"redirect","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Redirect to the nearest sibling route.\nIf all children are "},{"kind":"code","text":"`redirect={true}`"},{"kind":"text","text":", the layout will render "},{"kind":"code","text":"`null`"},{"kind":"text","text":" as there are no children to render.\n\nOnly supported when used inside a Layout component."}]},"type":{"type":"intrinsic","name":"boolean"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.PropsWithChildren"},"name":"PropsWithChildren","package":"@types/react","qualifiedName":"React.PropsWithChildren"}]},{"name":"StackSearchBarProps","variant":"declaration","kind":256,"extendedTypes":[{"type":"reference","target":{"packageName":"react-native-screens","packagePath":"src/types.tsx","qualifiedName":"SearchBarProps"},"name":"SearchBarProps","package":"react-native-screens"}]},{"name":"StackToolbarBadgeProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the badge"}]},"type":{"type":"intrinsic","name":"string"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"},{"type":"union","types":[{"type":"literal","value":"fontFamily"},{"type":"literal","value":"fontWeight"},{"type":"literal","value":"color"},{"type":"literal","value":"backgroundColor"},{"type":"literal","value":"fontSize"}]}],"name":"Pick","package":"typescript"}],"name":"StyleProp","package":"react-native"}}]},{"name":"StackToolbarButtonProps","variant":"declaration","kind":256,"children":[{"name":"accessibilityHint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"accessibilityLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Accessibility label spoken by screen readers (TalkBack/VoiceOver)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Android — Compose accessibility for graphic elements](https://developer.android.com/develop/ui/compose/accessibility/api-defaults#graphic-elements) and [Apple — Supporting VoiceOver in your app](https://developer.apple.com/documentation/uikit/supporting-voiceover-in-your-app#Update-your-apps-accessibility) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"There are two ways to specify the content of the button:"}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Stack } from 'expo-router';\n\nexport default function Page() {\n return (\n <>\n \n As text passed as children\n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Stack } from 'expo-router';\n\nexport default function Page() {\n return (\n <>\n \n \n \n As components\n 3\n \n \n \n \n );\n}\n```"},{"kind":"text","text":"\n\n> **Note**: When icon is used, the label will not be shown and will be used for accessibility purposes only. Badge is only supported in left/right placements, not in bottom (iOS toolbar limitation)."}]}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the button should be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidesSharedBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to hide the shared background."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"icon","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Icon to display in the button.\n\nOn Android, only image source is supported.\n\nOn iOS, it can be a string representing an SFSymbol, an image source or xcasset.\n\n> **Note**: When used in "},{"kind":"code","text":"`placement=\"bottom\"`"},{"kind":"text","text":" on iOS, only string SFSymbols are supported. Use the "},{"kind":"code","text":"`image`"},{"kind":"text","text":" prop to provide custom images."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}]}},{"name":"iconRenderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how image-based icons are rendered.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": applies tint color to the icon\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": preserves original icon colors (useful for multi-color icons)\n\n**Default behavior on iOS:**\n- If "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":" is specified, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":", defaults to "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":"\n\n**On Android:** defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":".\n\nThis prop only affects image-based icons (not SF Symbols)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"image","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Image to display in the button.\n\n> **Note**: This prop is only supported in toolbar with "},{"kind":"code","text":"`placement=\"bottom\"`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/ts-declarations/SharedRef.ts","qualifiedName":"SharedRef"},"typeArguments":[{"type":"literal","value":"image"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"never"},{"type":"intrinsic","name":"never"}],"name":"Record","package":"typescript"}],"name":"SharedRef","package":"expo-modules-core"},{"type":"literal","value":null}]}},{"name":"onPress","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"selected","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the button is in a selected state"}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/isselected) for more information"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"separateBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to separate the background of this item from other header items."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Style for the label of the header item."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}],"name":"StyleProp","package":"react-native"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The tint color to apply to the button item."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":" - "},{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information."},{"kind":"text","text":"\n"},{"kind":"text","text":" - "},{"kind":"text","text":"[Android documentation](https://developer.android.com/develop/ui/compose/graphics/images/customize#tint-image) for more information."},{"kind":"text","text":"\n"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"variant","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'plain'"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"done"},{"type":"literal","value":"plain"},{"type":"literal","value":"prominent"}]}}]},{"name":"StackToolbarLabelProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text to display as the label for the tab."}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"StackToolbarMenuActionProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Can be an Icon, Label or string title."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"destructive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu item will be displayed as destructive."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu item will be disabled and not selectable."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled) for more information."}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"discoverabilityLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An elaborated title that explains the purpose of the action."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"icon","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Icon for the menu action.\n\nCan be an SF Symbol name or an image source.\n\n> **Note (Android)**: Only "},{"kind":"code","text":"`ImageSourcePropType`"},{"kind":"text","text":" icons are rendered. SF Symbols are\n> silently dropped. Provide a "},{"kind":"code","text":"`require()`"},{"kind":"text","text":" or "},{"kind":"code","text":"`{ uri }`"},{"kind":"text","text":" source."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}]}},{"name":"iconRenderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how image-based icons are rendered on iOS.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": iOS applies tint color to the icon (useful for monochrome icons)\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": Preserves original icon colors (useful for multi-color icons)\n\n**Default behavior:**\n- If "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":" is specified, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":", defaults to "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":"\n\nThis prop only affects image-based icons (not SF Symbols)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"image","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Image to display for the menu action.\n\n> **Note**: This prop is only supported in "},{"kind":"code","text":"`Stack.Toolbar.Bottom`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/ts-declarations/SharedRef.ts","qualifiedName":"SharedRef"},"typeArguments":[{"type":"literal","value":"image"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"never"},{"type":"intrinsic","name":"never"}],"name":"Record","package":"typescript"}],"name":"SharedRef","package":"expo-modules-core"},{"type":"literal","value":null}]}},{"name":"isOn","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu item will be displayed as selected."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"onPress","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"subtitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An optional subtitle for the menu item."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/subtitle) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"unstable_keepPresented","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu will be kept presented after the action is selected.\n\nThis is marked as unstable, because when action is selected on iOS it will recreate\nthe menu, which will close all opened submenus and reset the scroll position."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"StackToolbarMenuProps","variant":"declaration","kind":256,"children":[{"name":"accessibilityHint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"accessibilityLabel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Accessibility label spoken by screen readers (TalkBack/VoiceOver)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Android — Compose accessibility for graphic elements](https://developer.android.com/develop/ui/compose/accessibility/api-defaults#graphic-elements) and [Apple — Supporting VoiceOver in your app](https://developer.apple.com/documentation/uikit/supporting-voiceover-in-your-app#Update-your-apps-accessibility) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Menu content - can include icons, labels, badges and menu actions."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n \n Options\n {}}>Action 1\n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"destructive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu item will be displayed as destructive."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"disabled","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"elementSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The preferred size of the menu elements.\n\n> **Note**: This prop is only supported in "},{"kind":"code","text":"`Stack.Toolbar.Bottom`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/preferredelementsize) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 16.0+"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"small"},{"type":"literal","value":"medium"},{"type":"literal","value":"auto"},{"type":"literal","value":"large"}]}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the menu should be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidesSharedBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to hide the shared background."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"icon","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Icon for the menu item.\n\nCan be an SF Symbol name or an image source.\n\n> **Note**: When used in "},{"kind":"code","text":"`placement=\"bottom\"`"},{"kind":"text","text":" on iOS, only string SFSymbols are supported. Use the "},{"kind":"code","text":"`image`"},{"kind":"text","text":" prop to provide custom images.\n\n> **Note (Android)**: Only "},{"kind":"code","text":"`ImageSourcePropType`"},{"kind":"text","text":" icons are rendered at the menu root.\n> SF Symbols and "},{"kind":"code","text":"`xcasset`"},{"kind":"text","text":" names are silently dropped — provide a "},{"kind":"code","text":"`require()`"},{"kind":"text","text":" or\n> "},{"kind":"code","text":"`{ uri }`"},{"kind":"text","text":" source."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"},{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbols7_0"},"name":"SFSymbols7_0","package":"sf-symbols-typescript"}]}},{"name":"iconRenderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how image-based icons are rendered.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": applies tint color to the icon (useful for monochrome icons)\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": preserves original icon colors (useful for multi-color icons)\n\n**Default behavior on iOS:**\n- If "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":" is specified, defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- If no "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":", defaults to "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":"\n\n**On Android:** defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":".\n\nThis prop only affects image-based icons (not SF Symbols)."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"image","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Image to display for the menu item.\n\n> **Note**: This prop is only supported in toolbar with "},{"kind":"code","text":"`placement=\"bottom\"`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/ts-declarations/SharedRef.ts","qualifiedName":"SharedRef"},"typeArguments":[{"type":"literal","value":"image"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"never"},{"type":"intrinsic","name":"never"}],"name":"Record","package":"typescript"}],"name":"SharedRef","package":"expo-modules-core"},{"type":"literal","value":null}]}},{"name":"inline","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu will be displayed inline.\nThis means that the menu will not be collapsed.\n\n> **Note**: Inline menus are only supported in submenus."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"palette","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the menu will be displayed as a palette.\nThis means that the menu will be displayed as one row.\n\n> **Note**: Palette menus are only supported in submenus."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"separateBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to separate the background of this item from other header items."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Style for the label of the header item."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/utils/font.ts","qualifiedName":"BasicTextStyle"},"name":"BasicTextStyle","package":"expo-router"}],"name":"StyleProp","package":"react-native"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The tint color to apply to the button item."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":" - "},{"kind":"text","text":"[Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information."},{"kind":"text","text":"\n"},{"kind":"text","text":" - "},{"kind":"text","text":"[Android documentation](https://developer.android.com/develop/ui/compose/graphics/images/customize#tint-image) for more information."},{"kind":"text","text":"\n"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"title","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional title to show on top of the menu."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"variant","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'plain'"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"done"},{"type":"literal","value":"plain"},{"type":"literal","value":"prominent"}]}}]},{"name":"StackToolbarProps","variant":"declaration","kind":256,"children":[{"name":"asChild","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When "},{"kind":"code","text":"`true`"},{"kind":"text","text":", renders children as a custom component in the header area,\nreplacing the default header layout.\n\nOnly applies to "},{"kind":"code","text":"`placement=\"left\"`"},{"kind":"text","text":" and "},{"kind":"code","text":"`placement=\"right\"`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"backgroundColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Background color for the toolbar and its menus."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Child elements to compose the toolbar. Can include Stack.Toolbar.Button,\nStack.Toolbar.Menu, Stack.Toolbar.View, Stack.Toolbar.Spacer, and\nStack.Toolbar.SearchBarSlot (bottom placement, iOS only) components."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"disableImePadding","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"When "},{"kind":"code","text":"`true`"},{"kind":"text","text":", disables automatic keyboard (IME) padding on the bottom toolbar.\n\nOnly applies to "},{"kind":"code","text":"`placement=\"bottom\"`"},{"kind":"text","text":" on Android."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"placement","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The placement of the toolbar.\n\n- "},{"kind":"code","text":"`'left'`"},{"kind":"text","text":": Renders items in the left area of the header.\n- "},{"kind":"code","text":"`'right'`"},{"kind":"text","text":": Renders items in the right area of the header.\n- "},{"kind":"code","text":"`'bottom'`"},{"kind":"text","text":": Renders items in the bottom toolbar."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"'bottom'"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/layouts/stack-utils/toolbar/context.tsx","qualifiedName":"ToolbarPlacement"},"name":"ToolbarPlacement","package":"expo-router"}},{"name":"tintColor","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Tint color applied to toolbar items (buttons, menu icons, text).\nIndividual items can override this with their own "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":" prop."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}}]},{"name":"StackToolbarSearchBarSlotProps","variant":"declaration","kind":256,"children":[{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the search bar slot should be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidesSharedBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to hide the shared background."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"separateBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether this search bar slot has a separate background from adjacent items. When this prop is "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the search bar will always render as "},{"kind":"code","text":"`integratedButton`"},{"kind":"text","text":".\n\nIn order to render the search bar with a separate background, ensure that adjacent toolbar items have "},{"kind":"code","text":"`separateBackground`"},{"kind":"text","text":" set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":" or use "},{"kind":"code","text":"`Stack.Toolbar.Spacer`"},{"kind":"text","text":" to create spacing."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n{}} />\n\n \n \n \n\n```"}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"StackToolbarSpacerProps","variant":"declaration","kind":256,"children":[{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the spacer should be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"sharesBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether this spacer shares background with adjacent items.\n\nOnly available in bottom placement."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"width","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The width of the spacing element.\n\nIn Left/Right placements, width is required.\nIn Bottom placement, if width is not provided, the spacer will be flexible\nand expand to fill available space.\n\n> **Note:** On Android, "},{"kind":"code","text":"`width`"},{"kind":"text","text":" is required in every placement."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"number"}}]},{"name":"StackToolbarViewProps","variant":"declaration","kind":256,"children":[{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Can be any React node."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"typeArguments":[{"type":"intrinsic","name":"unknown"},{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.JSXElementConstructor"},"typeArguments":[{"type":"intrinsic","name":"any"}],"name":"JSXElementConstructor","package":"@types/react","qualifiedName":"React.JSXElementConstructor"}]}],"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"}},{"name":"hidden","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether the view should be hidden."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"hidesSharedBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to hide the shared background."}],"blockTags":[{"tag":"@see","content":[{"kind":"text","text":"[Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information."}]},{"tag":"@platform","content":[{"kind":"text","text":"iOS 26+"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"separateBackground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Whether to separate the background of this item from other items.\n\nOnly available in bottom placement."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"StackScreenTitleProps","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`StackTitleProps`"},{"kind":"text","text":" instead."}]}]},"type":{"type":"reference","name":"StackTitleProps","package":"expo-router"}},{"name":"StackTitleProps","variant":"declaration","kind":2097152,"children":[{"name":"asChild","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Use this to render a custom component as the header title."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\n\n \n\n```"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"children","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The title content. Pass a string for a plain text title,\nor a custom component when "},{"kind":"code","text":"`asChild`"},{"kind":"text","text":" is enabled."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"large","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Enables large title mode."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"largeStyle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Style properties for the large title header."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"fontFamily","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"indexedAccess","indexType":{"type":"literal","value":"fontFamily"},"objectType":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}}},{"name":"fontSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"indexedAccess","indexType":{"type":"literal","value":"fontSize"},"objectType":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}}},{"name":"fontWeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Exclude"},"typeArguments":[{"type":"indexedAccess","indexType":{"type":"literal","value":"fontWeight"},"objectType":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}},{"type":"intrinsic","name":"number"}],"name":"Exclude","package":"typescript"}}]}}],"name":"StyleProp","package":"react-native"}},{"name":"style","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"StyleProp"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheet.d.ts","qualifiedName":"ColorValue"},"name":"ColorValue","package":"react-native"}},{"name":"fontFamily","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"indexedAccess","indexType":{"type":"literal","value":"fontFamily"},"objectType":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}}},{"name":"fontSize","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"indexedAccess","indexType":{"type":"literal","value":"fontSize"},"objectType":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}}},{"name":"fontWeight","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Exclude"},"typeArguments":[{"type":"indexedAccess","indexType":{"type":"literal","value":"fontWeight"},"objectType":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/StyleSheet/StyleSheetTypes.d.ts","qualifiedName":"TextStyle"},"name":"TextStyle","package":"react-native"}},{"type":"intrinsic","name":"number"}],"name":"Exclude","package":"typescript"}},{"name":"textAlign","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":"left"},{"type":"literal","value":"center"}]}}]}}],"name":"StyleProp","package":"react-native"}}]},{"name":"StackToolbarIconProps","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the image icon is rendered.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": applies tint color to the icon\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": preserves original icon colors\n\n**Default behavior on iOS:**\n- With parent "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":": defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- Without parent "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":": defaults to "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":"\n\n**On Android:** defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":". Setting "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":" skips the tint so\nthe icon's source colors are preserved."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"src","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"react-native","packagePath":"Libraries/Image/Image.d.ts","qualifiedName":"ImageSourcePropType"},"name":"ImageSourcePropType","package":"react-native"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"sf","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Name of an SF Symbol to display."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"sf-symbols-typescript","packagePath":"dist/index.d.ts","qualifiedName":"SFSymbol"},"name":"SFSymbol","package":"sf-symbols-typescript"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"renderingMode","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Controls how the xcasset icon is rendered on iOS.\n\n- "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":": iOS applies tint color to the icon\n- "},{"kind":"code","text":"`'original'`"},{"kind":"text","text":": Preserves original icon colors\n\nDefaults based on parent component's "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":":\n- With "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":": defaults to "},{"kind":"code","text":"`'template'`"},{"kind":"text","text":"\n- Without "},{"kind":"code","text":"`tintColor`"},{"kind":"text","text":": defaults to "},{"kind":"code","text":"`'original'`"}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"template"},{"type":"literal","value":"original"}]}},{"name":"xcasset","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Name of an image in your Xcode asset catalog ("},{"kind":"code","text":"`.xcassets`"},{"kind":"text","text":")."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}}]}}]}},{"name":"Stack","variant":"declaration","kind":32,"flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Renders a native stack navigator."}],"blockTags":[{"tag":"@hideType","content":[]}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"intersection","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigatorProps"},"name":"NativeStackNavigatorProps","package":"expo-router"},{"type":"union","types":[{"type":"literal","value":"children"},{"type":"literal","value":"id"},{"type":"literal","value":"initialRouteName"},{"type":"literal","value":"layout"},{"type":"literal","value":"screenListeners"},{"type":"literal","value":"screenOptions"},{"type":"literal","value":"screenLayout"},{"type":"literal","value":"UNSTABLE_router"},{"type":"literal","value":"UNSTABLE_routeNamesChangeBehavior"}]}],"name":"Omit","package":"typescript"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"DefaultRouterOptions"},"typeArguments":[{"type":"intrinsic","name":"string"}],"name":"DefaultRouterOptions","package":"expo-router"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Children React Elements to extract the route configuration from.\nOnly "},{"kind":"code","text":"`Screen`"},{"kind":"text","text":", "},{"kind":"code","text":"`Group`"},{"kind":"text","text":" and "},{"kind":"code","text":"`React.Fragment`"},{"kind":"text","text":" are supported as children."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"layout","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Layout for the navigator.\nUseful for wrapping with a component with access to navigator's state and options."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"descriptors","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"Descriptor"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"Descriptor","package":"expo-router"}],"name":"Record","package":"typescript"}},{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"NavigationHelpers"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"NavigationHelpers","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"name":"StackNavigationState","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"}}]}}},{"name":"screenLayout","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Layout for all screens under this navigator."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenLayoutArgs"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"undefined"}],"name":"NativeStackNavigationProp","package":"expo-router"}],"name":"ScreenLayoutArgs","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"}}]}}},{"name":"screenListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Event listeners for all the screens in the navigator."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"beforeRemove"},{"type":"literal","value":true}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"blur"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"focus"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"gestureCancel","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a swipe back is canceled on iOS."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"gestureCancel"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"sheetDetentChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when screen is in sheet presentation & it's detent changes.\n\nIn payload it carries two fields:\n\n* "},{"kind":"code","text":"`index`"},{"kind":"text","text":" - current detent index in the "},{"kind":"code","text":"`sheetAllowedDetents`"},{"kind":"text","text":" array,\n* "},{"kind":"code","text":"`stable`"},{"kind":"text","text":" - on Android "},{"kind":"code","text":"`false`"},{"kind":"text","text":" value means that the user is dragging the sheet or it is settling; on iOS it is always "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"sheetDetentChange"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"state"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"transitionEnd","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a transition animation ends."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"transitionEnd"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"transitionStart","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a transition animation starts."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"intersection","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]},{"type":"literal","value":"transitionStart"},{"type":"intrinsic","name":"unknown"}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationProp"},"name":"NativeStackNavigationProp","package":"expo-router"}},{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"State"},"name":"State","package":"expo-router","refersToTypeParameter":true},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMap"},"name":"EventMap","package":"expo-router","refersToTypeParameter":true}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"screenOptions","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Default options for all screens under this navigator."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationProp"},"name":"NativeStackNavigationProp","package":"expo-router"}},{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"RouteProp","package":"expo-router"}},{"name":"theme","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"__global.ReactNavigation.Theme"},"name":"Theme","package":"expo-router","qualifiedName":"__global.ReactNavigation.Theme"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"}}]}}]}},{"name":"UNSTABLE_routeNamesChangeBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"What should happen when the available route names change.\ne.g. when different screens are rendered based on a condition.\n\n- 'firstMatch': Navigate to the first route in the new list of routes (default).\n- 'lastUnhandled': Restore the last state that was unhandled due to conditional render.\n\nExample cases where previous state might have been unhandled:\n- Opened a deep link to a screen, but a login screen was shown.\n- Navigated to a screen containing a navigator, but a different screen was shown.\n- Reset the navigator to a state with different routes not matching the current list of routes.\n\nIn these cases, 'lastUnhandled' will reuse the unhandled state if present.\nIf there's no unhandled state, it will fallback to 'firstMatch' behavior.\n\nCaveats:\n- Direct navigation is only handled for "},{"kind":"code","text":"`NAVIGATE`"},{"kind":"text","text":" actions.\n- Unhandled state is restored only if the current state becomes invalid, i.e. it doesn't contain any currently defined screens."}]},"type":{"type":"union","types":[{"type":"literal","value":"firstMatch"},{"type":"literal","value":"lastUnhandled"}]}},{"name":"UNSTABLE_router","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function returning overrides for the underlying router used by the navigator.\nThe overrides will be shallow merged onto the original router.\nIt receives the original router as an argument to the function.\n\nThis must be a pure function and cannot reference outside dynamic variables."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"typeParameters":[{"name":"Action","variant":"typeParam","kind":131072,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"payload","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Additional data for the action"}]},"type":{"type":"union","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]}},{"name":"source","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Key of the route which dispatched this action."}]},"type":{"type":"union","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]}},{"name":"target","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Key of the navigator which should handle this action."}]},"type":{"type":"union","types":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}]}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Type of the action (e.g. "},{"kind":"code","text":"`NAVIGATE`"},{"kind":"text","text":")"}]},"type":{"type":"intrinsic","name":"string"}}]}}],"name":"Readonly","package":"typescript"}}],"parameters":[{"name":"original","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"Router"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"}],"name":"StackNavigationState","package":"expo-router"},{"type":"reference","name":"Action","package":"expo-router","refersToTypeParameter":true}],"name":"Router","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"Router"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"State"},"name":"State","package":"expo-router","refersToTypeParameter":true},{"type":"reference","name":"Action","package":"expo-router","refersToTypeParameter":true}],"name":"Router","package":"expo-router"}],"name":"Partial","package":"typescript"}}]}}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"id","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"undefined"}}]}}]},{"type":"literal","value":"children"}],"name":"Omit","package":"typescript"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Pick"},"typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigatorProps"},"name":"NativeStackNavigatorProps","package":"expo-router"},{"type":"union","types":[{"type":"literal","value":"children"},{"type":"literal","value":"id"},{"type":"literal","value":"initialRouteName"},{"type":"literal","value":"layout"},{"type":"literal","value":"screenListeners"},{"type":"literal","value":"screenOptions"},{"type":"literal","value":"screenLayout"},{"type":"literal","value":"UNSTABLE_router"},{"type":"literal","value":"UNSTABLE_routeNamesChangeBehavior"}]}],"name":"Omit","package":"typescript"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"DefaultRouterOptions"},"typeArguments":[{"type":"intrinsic","name":"string"}],"name":"DefaultRouterOptions","package":"expo-router"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Children React Elements to extract the route configuration from.\nOnly "},{"kind":"code","text":"`Screen`"},{"kind":"text","text":", "},{"kind":"code","text":"`Group`"},{"kind":"text","text":" and "},{"kind":"code","text":"`React.Fragment`"},{"kind":"text","text":" are supported as children."}]},"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"layout","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Layout for the navigator.\nUseful for wrapping with a component with access to navigator's state and options."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"children","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactNode"},"name":"ReactNode","package":"@types/react","qualifiedName":"React.ReactNode"}},{"name":"descriptors","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"Record","package":"typescript"}},{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"NavigationHelpers"},"typeArguments":[{"type":"unknown","name":"..."}],"name":"NavigationHelpers","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"name":"StackNavigationState","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"}}]}}},{"name":"screenLayout","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Layout for all screens under this navigator."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenLayoutArgs"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"ParamListBase"},"name":"ParamListBase","package":"expo-router"},{"type":"intrinsic","name":"string"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationProp"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"NativeStackNavigationProp","package":"expo-router"}],"name":"ScreenLayoutArgs","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.ReactElement"},"name":"ReactElement","package":"@types/react","qualifiedName":"React.ReactElement"}}]}}},{"name":"screenListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Event listeners for all the screens in the navigator."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"beforeRemove","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"blur","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"focus","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"gestureCancel","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a swipe back is canceled on iOS."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"sheetDetentChange","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when screen is in sheet presentation & it's detent changes.\n\nIn payload it carries two fields:\n\n* "},{"kind":"code","text":"`index`"},{"kind":"text","text":" - current detent index in the "},{"kind":"code","text":"`sheetAllowedDetents`"},{"kind":"text","text":" array,\n* "},{"kind":"code","text":"`stable`"},{"kind":"text","text":" - on Android "},{"kind":"code","text":"`false`"},{"kind":"text","text":" value means that the user is dragging the sheet or it is settling; on iOS it is always "},{"kind":"code","text":"`true`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"state","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"transitionEnd","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a transition animation ends."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}},{"name":"transitionStart","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Event which fires when a transition animation starts."}]},"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventListenerCallback"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"EventListenerCallback","package":"expo-router"}}]}}],"name":"Partial","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationProp"},"name":"NativeStackNavigationProp","package":"expo-router"}},{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"unknown","name":"..."}],"name":"RouteProp","package":"expo-router"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"ScreenListeners"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"State"},"name":"State","package":"expo-router","refersToTypeParameter":true},{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"EventMap"},"name":"EventMap","package":"expo-router","refersToTypeParameter":true}],"name":"ScreenListeners","package":"expo-router"}}]}}]}},{"name":"screenOptions","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Default options for all screens under this navigator."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"props","variant":"param","kind":32768,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"navigation","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationProp"},"name":"NativeStackNavigationProp","package":"expo-router"}},{"name":"route","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"RouteProp"},"typeArguments":[{"type":"unknown","name":"..."}],"name":"RouteProp","package":"expo-router"}},{"name":"theme","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/core/types.tsx","qualifiedName":"__global.ReactNavigation.Theme"},"name":"Theme","package":"expo-router","qualifiedName":"__global.ReactNavigation.Theme"}}]}}}],"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/native-stack/types.tsx","qualifiedName":"NativeStackNavigationOptions"},"name":"NativeStackNavigationOptions","package":"expo-router"}}]}}]}},{"name":"UNSTABLE_routeNamesChangeBehavior","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"What should happen when the available route names change.\ne.g. when different screens are rendered based on a condition.\n\n- 'firstMatch': Navigate to the first route in the new list of routes (default).\n- 'lastUnhandled': Restore the last state that was unhandled due to conditional render.\n\nExample cases where previous state might have been unhandled:\n- Opened a deep link to a screen, but a login screen was shown.\n- Navigated to a screen containing a navigator, but a different screen was shown.\n- Reset the navigator to a state with different routes not matching the current list of routes.\n\nIn these cases, 'lastUnhandled' will reuse the unhandled state if present.\nIf there's no unhandled state, it will fallback to 'firstMatch' behavior.\n\nCaveats:\n- Direct navigation is only handled for "},{"kind":"code","text":"`NAVIGATE`"},{"kind":"text","text":" actions.\n- Unhandled state is restored only if the current state becomes invalid, i.e. it doesn't contain any currently defined screens."}]},"type":{"type":"union","types":[{"type":"literal","value":"firstMatch"},{"type":"literal","value":"lastUnhandled"}]}},{"name":"UNSTABLE_router","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function returning overrides for the underlying router used by the navigator.\nThe overrides will be shallow merged onto the original router.\nIt receives the original router as an argument to the function.\n\nThis must be a pure function and cannot reference outside dynamic variables."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"typeParameters":[{"name":"Action","variant":"typeParam","kind":131072,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Readonly"},"typeArguments":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"payload","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Additional data for the action"}]},"type":{"type":"unknown","name":"..."}},{"name":"source","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Key of the route which dispatched this action."}]},"type":{"type":"unknown","name":"..."}},{"name":"target","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Key of the navigator which should handle this action."}]},"type":{"type":"unknown","name":"..."}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Type of the action (e.g. "},{"kind":"code","text":"`NAVIGATE`"},{"kind":"text","text":")"}]},"type":{"type":"unknown","name":"..."}}]}}],"name":"Readonly","package":"typescript"}}],"parameters":[{"name":"original","variant":"param","kind":32768,"type":{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"Router"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/StackRouter.tsx","qualifiedName":"StackNavigationState"},"typeArguments":[{"type":"unknown","name":"..."}],"name":"StackNavigationState","package":"expo-router"},{"type":"reference","name":"Action","package":"expo-router","refersToTypeParameter":true}],"name":"Router","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/react-navigation/routers/types.tsx","qualifiedName":"Router"},"typeArguments":[{"type":"unknown","name":"..."},{"type":"unknown","name":"..."}],"name":"Router","package":"expo-router"}],"name":"Partial","package":"typescript"}}]}}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"id","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"undefined"}}]}}]},{"type":"literal","value":"children"}],"name":"Pick","package":"typescript"}],"name":"Partial","package":"typescript"},{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.RefAttributes"},"typeArguments":[{"type":"intrinsic","name":"unknown"}],"name":"RefAttributes","package":"@types/react","qualifiedName":"React.RefAttributes"}]}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"Header","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"The component used to configure header styling for a stack screen.\n\nUse this component to set header appearance properties like blur effect, background color,\nand shadow visibility."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Stack } from 'expo-router';\n\nexport default function Page() {\n return (\n <>\n \n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"text","text":"When used inside a layout with Stack.Screen:\n"},{"kind":"code","text":"```tsx\nimport { Stack } from 'expo-router';\n\nexport default function Layout() {\n return (\n \n \n \n \n \n );\n}\n```"},{"kind":"text","text":"\n\n> **Note:** If multiple instances of this component are rendered for the same screen,\nthe last one rendered in the component tree takes precedence."}]}]},"parameters":[{"name":"__namedParameters","variant":"param","kind":32768,"type":{"type":"reference","name":"StackHeaderProps","package":"expo-router"}}],"type":{"type":"literal","value":null}}]}},"defaultValue":"StackHeader"},{"name":"Protected","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"index.d.ts","qualifiedName":"React.FunctionComponent"},"typeArguments":[{"type":"reference","target":{"packageName":"expo-router","packagePath":"src/views/Protected.tsx","qualifiedName":"ProtectedProps"},"name":"ProtectedProps","package":"expo-router"}],"name":"FunctionComponent","package":"@types/react","qualifiedName":"React.FunctionComponent"}},{"name":"Screen","variant":"declaration","kind":1024,"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"__namedParameters","variant":"param","kind":32768,"type":{"type":"reference","name":"StackScreenProps","package":"expo-router"}}],"type":{"type":"reference","target":{"packageName":"@types/react","packagePath":"jsx-runtime.d.ts","qualifiedName":"JSX.Element"},"name":"Element","package":"@types/react","qualifiedName":"JSX.Element"}}]}},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"BackButton","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Component to configure the back button.\n\nCan be used inside Stack.Screen in a layout or directly inside a screen component."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Stack } from 'expo-router';\n\nexport default function Layout() {\n return (\n \n \n Back\n \n \n );\n}\n```"}]},{"tag":"@example","content":[{"kind":"code","text":"```tsx\nimport { Stack } from 'expo-router';\n\nexport default function Page() {\n return (\n <>\n