expo-router 56.0.1 → 56.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/android/build.gradle +2 -2
  2. package/build/layouts/stack-utils/toolbar/StackToolbarButton/native.android.d.ts.map +1 -1
  3. package/build/layouts/stack-utils/toolbar/StackToolbarButton/native.android.js +1 -1
  4. package/build/layouts/stack-utils/toolbar/StackToolbarButton/native.android.js.map +1 -1
  5. package/build/layouts/stack-utils/toolbar/StackToolbarButton/types.d.ts +5 -0
  6. package/build/layouts/stack-utils/toolbar/StackToolbarButton/types.d.ts.map +1 -1
  7. package/build/layouts/stack-utils/toolbar/StackToolbarButton/types.js.map +1 -1
  8. package/build/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.d.ts.map +1 -1
  9. package/build/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.js +1 -1
  10. package/build/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.js.map +1 -1
  11. package/build/layouts/stack-utils/toolbar/StackToolbarMenu/types.d.ts +5 -0
  12. package/build/layouts/stack-utils/toolbar/StackToolbarMenu/types.d.ts.map +1 -1
  13. package/build/layouts/stack-utils/toolbar/StackToolbarMenu/types.js.map +1 -1
  14. package/build/native-tabs/NativeTabsView.android.d.ts.map +1 -1
  15. package/build/native-tabs/NativeTabsView.android.js +6 -3
  16. package/build/native-tabs/NativeTabsView.android.js.map +1 -1
  17. package/build/native-tabs/NativeTabsView.ios.d.ts.map +1 -1
  18. package/build/native-tabs/NativeTabsView.ios.js +14 -3
  19. package/build/native-tabs/NativeTabsView.ios.js.map +1 -1
  20. package/build/native-tabs/index.d.ts +1 -1
  21. package/build/native-tabs/index.d.ts.map +1 -1
  22. package/build/native-tabs/index.js.map +1 -1
  23. package/build/native-tabs/types.d.ts +15 -1
  24. package/build/native-tabs/types.d.ts.map +1 -1
  25. package/build/native-tabs/types.js.map +1 -1
  26. package/expo-module.config.json +1 -1
  27. package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.module → 56.0.3/expo.modules.router-56.0.3.module} +8 -8
  28. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.module.md5 +1 -0
  29. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.module.sha1 +1 -0
  30. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.module.sha256 +1 -0
  31. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.module.sha512 +1 -0
  32. package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.pom → 56.0.3/expo.modules.router-56.0.3.pom} +2 -2
  33. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.pom.md5 +1 -0
  34. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.pom.sha1 +1 -0
  35. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.pom.sha256 +1 -0
  36. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.3/expo.modules.router-56.0.3.pom.sha512 +1 -0
  37. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
  38. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
  39. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
  40. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
  41. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
  42. package/package.json +29 -29
  43. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.module.md5 +0 -1
  44. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.module.sha1 +0 -1
  45. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.module.sha256 +0 -1
  46. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.module.sha512 +0 -1
  47. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.pom.md5 +0 -1
  48. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.pom.sha1 +0 -1
  49. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.pom.sha256 +0 -1
  50. package/local-maven-repo/expo/modules/router/expo.modules.router/56.0.1/expo.modules.router-56.0.1.pom.sha512 +0 -1
  51. package/plugin/src/index.ts +0 -3
  52. package/plugin/src/withRouter.ts +0 -79
  53. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1-sources.jar → 56.0.3/expo.modules.router-56.0.3-sources.jar} +0 -0
  54. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1-sources.jar.md5 → 56.0.3/expo.modules.router-56.0.3-sources.jar.md5} +0 -0
  55. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1-sources.jar.sha1 → 56.0.3/expo.modules.router-56.0.3-sources.jar.sha1} +0 -0
  56. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1-sources.jar.sha256 → 56.0.3/expo.modules.router-56.0.3-sources.jar.sha256} +0 -0
  57. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1-sources.jar.sha512 → 56.0.3/expo.modules.router-56.0.3-sources.jar.sha512} +0 -0
  58. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.aar → 56.0.3/expo.modules.router-56.0.3.aar} +0 -0
  59. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.aar.md5 → 56.0.3/expo.modules.router-56.0.3.aar.md5} +0 -0
  60. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.aar.sha1 → 56.0.3/expo.modules.router-56.0.3.aar.sha1} +0 -0
  61. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.aar.sha256 → 56.0.3/expo.modules.router-56.0.3.aar.sha256} +0 -0
  62. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.0.1/expo.modules.router-56.0.1.aar.sha512 → 56.0.3/expo.modules.router-56.0.3.aar.sha512} +0 -0
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.router'
7
- version = '56.0.1'
7
+ version = '56.0.3'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.router"
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName "56.0.1"
13
+ versionName "56.0.3"
14
14
  }
15
15
  lintOptions {
16
16
  abortOnError false
@@ -1 +1 @@
1
- {"version":3,"file":"native.android.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/native.android.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAKxD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAwBlE,CAAC"}
1
+ {"version":3,"file":"native.android.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/native.android.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAKxD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA6BlE,CAAC"}
@@ -22,7 +22,7 @@ const NativeToolbarButton = (props) => {
22
22
  const tintColor = props.imageRenderingMode === 'original'
23
23
  ? undefined
24
24
  : (props.tintColor ?? toolbarColors.tintColor ?? (0, defaults_1.DEFAULT_TOOLBAR_TINT_COLOR)());
25
- return ((0, jsx_runtime_1.jsx)(AnimatedItemContainer_1.AnimatedItemContainer, { visible: !props.hidden, children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.IconButton, { onClick: props.onPress, enabled: !props.disabled, children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Icon, { source: props.source, tint: tintColor, size: 24 }) }) }));
25
+ return ((0, jsx_runtime_1.jsx)(AnimatedItemContainer_1.AnimatedItemContainer, { visible: !props.hidden, children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.IconButton, { onClick: props.onPress, enabled: !props.disabled, children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Icon, { source: props.source, tint: tintColor, size: 24, contentDescription: props.accessibilityLabel }) }) }));
26
26
  };
27
27
  exports.NativeToolbarButton = NativeToolbarButton;
28
28
  //# sourceMappingURL=native.android.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"native.android.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/native.android.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;AACb,8DAA4D;AAG5D,qFAAkF;AAClF,wCAA8C;AAC9C,0CAAyD;AAEzD;;;GAGG;AACI,MAAM,mBAAmB,GAAuC,CAAC,KAAK,EAAE,EAAE;IAC/E,MAAM,aAAa,GAAG,IAAA,0BAAgB,GAAE,CAAC;IAEzC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CACV,wNAAwN,CACzN,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GACb,KAAK,CAAC,kBAAkB,KAAK,UAAU;QACrC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,IAAI,IAAA,qCAA0B,GAAE,CAAC,CAAC;IAEnF,OAAO,CACL,uBAAC,6CAAqB,IAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,YAC3C,uBAAC,4BAAU,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,YAC1D,uBAAC,sBAAI,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAI,GAC9C,GACS,CACzB,CAAC;AACJ,CAAC,CAAC;AAxBW,QAAA,mBAAmB,uBAwB9B","sourcesContent":["'use client';\nimport { IconButton, Icon } from '@expo/ui/jetpack-compose';\n\nimport type { NativeToolbarButtonProps } from './types';\nimport { AnimatedItemContainer } from '../../../../toolbar/AnimatedItemContainer';\nimport { useToolbarColors } from '../context';\nimport { DEFAULT_TOOLBAR_TINT_COLOR } from '../defaults';\n\n/**\n * Native toolbar button component for Android bottom toolbar.\n * Renders as an IconButton with animated visibility.\n */\nexport const NativeToolbarButton: React.FC<NativeToolbarButtonProps> = (props) => {\n const toolbarColors = useToolbarColors();\n\n if (!props.source) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Stack.Toolbar.Button on Android requires an ImageSourcePropType icon. SF Symbols and xcasset icons are not supported. Use the `icon` prop with a require() or { uri } source, or use <Stack.Toolbar.Icon src={...} />.'\n );\n }\n return null;\n }\n\n const tintColor =\n props.imageRenderingMode === 'original'\n ? undefined\n : (props.tintColor ?? toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR());\n\n return (\n <AnimatedItemContainer visible={!props.hidden}>\n <IconButton onClick={props.onPress} enabled={!props.disabled}>\n <Icon source={props.source} tint={tintColor} size={24} />\n </IconButton>\n </AnimatedItemContainer>\n );\n};\n"]}
1
+ {"version":3,"file":"native.android.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/native.android.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;AACb,8DAA4D;AAG5D,qFAAkF;AAClF,wCAA8C;AAC9C,0CAAyD;AAEzD;;;GAGG;AACI,MAAM,mBAAmB,GAAuC,CAAC,KAAK,EAAE,EAAE;IAC/E,MAAM,aAAa,GAAG,IAAA,0BAAgB,GAAE,CAAC;IAEzC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CACV,wNAAwN,CACzN,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GACb,KAAK,CAAC,kBAAkB,KAAK,UAAU;QACrC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,IAAI,IAAA,qCAA0B,GAAE,CAAC,CAAC;IAEnF,OAAO,CACL,uBAAC,6CAAqB,IAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,YAC3C,uBAAC,4BAAU,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,YAC1D,uBAAC,sBAAI,IACH,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,EAAE,EACR,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,GAC5C,GACS,GACS,CACzB,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,mBAAmB,uBA6B9B","sourcesContent":["'use client';\nimport { IconButton, Icon } from '@expo/ui/jetpack-compose';\n\nimport type { NativeToolbarButtonProps } from './types';\nimport { AnimatedItemContainer } from '../../../../toolbar/AnimatedItemContainer';\nimport { useToolbarColors } from '../context';\nimport { DEFAULT_TOOLBAR_TINT_COLOR } from '../defaults';\n\n/**\n * Native toolbar button component for Android bottom toolbar.\n * Renders as an IconButton with animated visibility.\n */\nexport const NativeToolbarButton: React.FC<NativeToolbarButtonProps> = (props) => {\n const toolbarColors = useToolbarColors();\n\n if (!props.source) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Stack.Toolbar.Button on Android requires an ImageSourcePropType icon. SF Symbols and xcasset icons are not supported. Use the `icon` prop with a require() or { uri } source, or use <Stack.Toolbar.Icon src={...} />.'\n );\n }\n return null;\n }\n\n const tintColor =\n props.imageRenderingMode === 'original'\n ? undefined\n : (props.tintColor ?? toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR());\n\n return (\n <AnimatedItemContainer visible={!props.hidden}>\n <IconButton onClick={props.onPress} enabled={!props.disabled}>\n <Icon\n source={props.source}\n tint={tintColor}\n size={24}\n contentDescription={props.accessibilityLabel}\n />\n </IconButton>\n </AnimatedItemContainer>\n );\n};\n"]}
@@ -6,6 +6,11 @@ import type { BasicTextStyle } from '../../../../utils/font';
6
6
  import type { StackHeaderItemSharedProps } from '../shared';
7
7
  export interface StackToolbarButtonProps {
8
8
  /**
9
+ * Accessibility label spoken by screen readers (TalkBack/VoiceOver).
10
+ *
11
+ * @see [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.
12
+ *
13
+ * @platform android
9
14
  * @platform ios
10
15
  */
11
16
  accessibilityLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAE1C;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACpD;;;OAGG;IACH,OAAO,CAAC,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,kBAAkB,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAE1C;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB;;;;;;;;;;;;;;;;;;OAkBG;IACH,iBAAiB,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACpD;;;OAGG;IACH,OAAO,CAAC,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,kBAAkB,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageRef } from 'expo-image';\nimport type { ReactNode } from 'react';\nimport type { ColorValue, ImageSourcePropType, StyleProp, TextStyle } from 'react-native';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type { BasicTextStyle } from '../../../../utils/font';\nimport type { StackHeaderItemSharedProps } from '../shared';\n\nexport interface StackToolbarButtonProps {\n /**\n * @platform ios\n */\n accessibilityLabel?: string;\n /**\n * @platform ios\n */\n accessibilityHint?: string;\n /**\n * There are two ways to specify the content of the button:\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Page() {\n * return (\n * <>\n * <Stack.Toolbar placement=\"left\">\n * <Stack.Toolbar.Button icon=\"star.fill\">As text passed as children</Stack.Toolbar.Button>\n * </Stack.Toolbar>\n * <ScreenContent />\n * </>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Page() {\n * return (\n * <>\n * <Stack.Toolbar placement=\"left\">\n * <Stack.Toolbar.Button>\n * <Stack.Toolbar.Icon sf=\"star.fill\" />\n * <Stack.Toolbar.Label>As components</Stack.Toolbar.Label>\n * <Stack.Toolbar.Badge>3</Stack.Toolbar.Badge>\n * </Stack.Toolbar.Button>\n * </Stack.Toolbar>\n * <ScreenContent />\n * </>\n * );\n * }\n * ```\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).\n */\n children?: ReactNode;\n /**\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n /**\n * Whether the button should be hidden.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n hidden?: boolean;\n /**\n * Whether to hide the shared background.\n *\n * @platform iOS 26+\n */\n hidesSharedBackground?: boolean;\n /**\n * Icon to display in the button.\n *\n * On Android, only image source is supported.\n *\n * On iOS, it can be a string representing an SFSymbol, an image source or xcasset.\n *\n * > **Note**: When used in `placement=\"bottom\"` on iOS, only string SFSymbols are supported. Use the `image` prop to provide custom images.\n *\n * @platform android\n * @platform ios\n */\n icon?: StackHeaderItemSharedProps['icon'];\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display in the button.\n *\n * > **Note**: This prop is only supported in toolbar with `placement=\"bottom\"`.\n *\n * @platform ios\n */\n image?: ImageRef;\n /**\n * Controls how image-based icons are rendered.\n *\n * - `'template'`: applies tint color to the icon\n * - `'original'`: preserves original icon colors (useful for multi-color icons)\n *\n * **Default behavior on iOS:**\n * - If `tintColor` is specified, defaults to `'template'`\n * - If no `tintColor`, defaults to `'original'`\n *\n * **On Android:** defaults to `'template'`.\n *\n * This prop only affects image-based icons (not SF Symbols).\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information.\n *\n * @platform android\n * @platform ios\n */\n iconRenderingMode?: 'template' | 'original';\n onPress?: () => void;\n /**\n * Whether to separate the background of this item from other header items.\n *\n * @default false\n * @platform ios\n */\n separateBackground?: boolean;\n /**\n * Whether the button is in a selected state\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/isselected) for more information\n *\n * @platform ios\n */\n selected?: boolean;\n /**\n * Style for the label of the header item.\n *\n * @platform android\n * @platform ios\n */\n style?: StyleProp<TextStyle>;\n /**\n * The tint color to apply to the button item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information.\n * @see [Android documentation](https://developer.android.com/develop/ui/compose/graphics/images/customize#tint-image) for more information.\n *\n * @platform android\n * @platform ios\n */\n tintColor?: StackHeaderItemSharedProps['tintColor'];\n /**\n * @default 'plain'\n * @platform ios\n */\n variant?: StackHeaderItemSharedProps['variant'];\n}\n\nexport interface NativeToolbarButtonProps {\n accessibilityLabel?: string;\n accessibilityHint?: string;\n disabled?: boolean;\n hidden?: boolean;\n hidesSharedBackground?: boolean;\n icon?: SFSymbol;\n xcassetName?: string;\n image?: ImageRef;\n imageRenderingMode?: 'template' | 'original';\n onPress?: () => void;\n possibleTitles?: string[];\n selected?: boolean;\n separateBackground?: boolean;\n style?: StyleProp<BasicTextStyle>;\n tintColor?: ColorValue;\n variant?: 'plain' | 'done' | 'prominent';\n label?: string;\n /* @platform android */\n source?: ImageSourcePropType;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarButton/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageRef } from 'expo-image';\nimport type { ReactNode } from 'react';\nimport type { ColorValue, ImageSourcePropType, StyleProp, TextStyle } from 'react-native';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type { BasicTextStyle } from '../../../../utils/font';\nimport type { StackHeaderItemSharedProps } from '../shared';\n\nexport interface StackToolbarButtonProps {\n /**\n * Accessibility label spoken by screen readers (TalkBack/VoiceOver).\n *\n * @see [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.\n *\n * @platform android\n * @platform ios\n */\n accessibilityLabel?: string;\n /**\n * @platform ios\n */\n accessibilityHint?: string;\n /**\n * There are two ways to specify the content of the button:\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Page() {\n * return (\n * <>\n * <Stack.Toolbar placement=\"left\">\n * <Stack.Toolbar.Button icon=\"star.fill\">As text passed as children</Stack.Toolbar.Button>\n * </Stack.Toolbar>\n * <ScreenContent />\n * </>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Page() {\n * return (\n * <>\n * <Stack.Toolbar placement=\"left\">\n * <Stack.Toolbar.Button>\n * <Stack.Toolbar.Icon sf=\"star.fill\" />\n * <Stack.Toolbar.Label>As components</Stack.Toolbar.Label>\n * <Stack.Toolbar.Badge>3</Stack.Toolbar.Badge>\n * </Stack.Toolbar.Button>\n * </Stack.Toolbar>\n * <ScreenContent />\n * </>\n * );\n * }\n * ```\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).\n */\n children?: ReactNode;\n /**\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n /**\n * Whether the button should be hidden.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n hidden?: boolean;\n /**\n * Whether to hide the shared background.\n *\n * @platform iOS 26+\n */\n hidesSharedBackground?: boolean;\n /**\n * Icon to display in the button.\n *\n * On Android, only image source is supported.\n *\n * On iOS, it can be a string representing an SFSymbol, an image source or xcasset.\n *\n * > **Note**: When used in `placement=\"bottom\"` on iOS, only string SFSymbols are supported. Use the `image` prop to provide custom images.\n *\n * @platform android\n * @platform ios\n */\n icon?: StackHeaderItemSharedProps['icon'];\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display in the button.\n *\n * > **Note**: This prop is only supported in toolbar with `placement=\"bottom\"`.\n *\n * @platform ios\n */\n image?: ImageRef;\n /**\n * Controls how image-based icons are rendered.\n *\n * - `'template'`: applies tint color to the icon\n * - `'original'`: preserves original icon colors (useful for multi-color icons)\n *\n * **Default behavior on iOS:**\n * - If `tintColor` is specified, defaults to `'template'`\n * - If no `tintColor`, defaults to `'original'`\n *\n * **On Android:** defaults to `'template'`.\n *\n * This prop only affects image-based icons (not SF Symbols).\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information.\n *\n * @platform android\n * @platform ios\n */\n iconRenderingMode?: 'template' | 'original';\n onPress?: () => void;\n /**\n * Whether to separate the background of this item from other header items.\n *\n * @default false\n * @platform ios\n */\n separateBackground?: boolean;\n /**\n * Whether the button is in a selected state\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/isselected) for more information\n *\n * @platform ios\n */\n selected?: boolean;\n /**\n * Style for the label of the header item.\n *\n * @platform android\n * @platform ios\n */\n style?: StyleProp<TextStyle>;\n /**\n * The tint color to apply to the button item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information.\n * @see [Android documentation](https://developer.android.com/develop/ui/compose/graphics/images/customize#tint-image) for more information.\n *\n * @platform android\n * @platform ios\n */\n tintColor?: StackHeaderItemSharedProps['tintColor'];\n /**\n * @default 'plain'\n * @platform ios\n */\n variant?: StackHeaderItemSharedProps['variant'];\n}\n\nexport interface NativeToolbarButtonProps {\n accessibilityLabel?: string;\n accessibilityHint?: string;\n disabled?: boolean;\n hidden?: boolean;\n hidesSharedBackground?: boolean;\n icon?: SFSymbol;\n xcassetName?: string;\n image?: ImageRef;\n imageRenderingMode?: 'template' | 'original';\n onPress?: () => void;\n possibleTitles?: string[];\n selected?: boolean;\n separateBackground?: boolean;\n style?: StyleProp<BasicTextStyle>;\n tintColor?: ColorValue;\n variant?: 'plain' | 'done' | 'prominent';\n label?: string;\n /* @platform android */\n source?: ImageSourcePropType;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"native.android.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAqBpF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwG9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA4C1E,CAAC"}
1
+ {"version":3,"file":"native.android.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAqBpF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA6G9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA4C1E,CAAC"}
@@ -59,7 +59,7 @@ const NativeToolbarMenu = (props) => {
59
59
  }
60
60
  return null;
61
61
  }
62
- return ((0, jsx_runtime_1.jsx)(AnimatedItemContainer_1.AnimatedItemContainer, { visible: !props.hidden, children: (0, jsx_runtime_1.jsxs)(jetpack_compose_1.DropdownMenu, { expanded: expanded, onDismissRequest: () => setExpanded(false), color: backgroundColor, children: [(0, jsx_runtime_1.jsx)(jetpack_compose_1.DropdownMenu.Trigger, { children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.IconButton, { onClick: () => setExpanded(true), enabled: !props.disabled, modifiers: [(0, modifiers_1.background)(backgroundColor)], children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Icon, { source: props.source, tint: tintColor, size: 24 }) }) }), (0, jsx_runtime_1.jsx)(jetpack_compose_1.DropdownMenu.Items, { children: (0, jsx_runtime_1.jsx)(ToolbarMenuCloseContext, { value: closeMenu, children: props.children }) })] }) }));
62
+ return ((0, jsx_runtime_1.jsx)(AnimatedItemContainer_1.AnimatedItemContainer, { visible: !props.hidden, children: (0, jsx_runtime_1.jsxs)(jetpack_compose_1.DropdownMenu, { expanded: expanded, onDismissRequest: () => setExpanded(false), color: backgroundColor, children: [(0, jsx_runtime_1.jsx)(jetpack_compose_1.DropdownMenu.Trigger, { children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.IconButton, { onClick: () => setExpanded(true), enabled: !props.disabled, modifiers: [(0, modifiers_1.background)(backgroundColor)], children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Icon, { source: props.source, tint: tintColor, size: 24, contentDescription: props.accessibilityLabel }) }) }), (0, jsx_runtime_1.jsx)(jetpack_compose_1.DropdownMenu.Items, { children: (0, jsx_runtime_1.jsx)(ToolbarMenuCloseContext, { value: closeMenu, children: props.children }) })] }) }));
63
63
  };
64
64
  exports.NativeToolbarMenu = NativeToolbarMenu;
65
65
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"native.android.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport {\n DropdownMenu,\n DropdownMenuItem,\n HorizontalDivider,\n Icon,\n IconButton,\n Text as ComposeText,\n} from '@expo/ui/jetpack-compose';\nimport { background } from '@expo/ui/jetpack-compose/modifiers';\nimport { createContext, use, useCallback, useState } from 'react';\n\nimport type { NativeToolbarMenuActionProps, NativeToolbarMenuProps } from './types';\nimport { Label } from '../../../../primitives';\nimport { AnimatedItemContainer } from '../../../../toolbar/AnimatedItemContainer';\nimport { getFirstChildOfType } from '../../../../utils/children';\nimport { useToolbarColors } from '../context';\nimport {\n DEFAULT_DESTRUCTIVE_COLOR,\n DEFAULT_TOOLBAR_BACKGROUND_COLOR,\n DEFAULT_TOOLBAR_TINT_COLOR,\n} from '../defaults';\n\nconst arrowRightIcon = require('../../../../../assets/arrow_right.xml');\nconst checkmarkIcon = require('../../../../../assets/checkmark.xml');\n\n/**\n * Context for propagating menu close callbacks from root to nested menus.\n * - `null` means root level (no parent menu)\n * - A function means nested level (call to close entire menu chain)\n */\nconst ToolbarMenuCloseContext = createContext<(() => void) | null>(null);\n\n/**\n * Native toolbar menu component for Android bottom toolbar.\n * Renders as a DropdownMenu with IconButton trigger (root) or DropdownMenuItem trigger (nested).\n */\nexport const NativeToolbarMenu: React.FC<NativeToolbarMenuProps> = (props) => {\n const [expanded, setExpanded] = useState(false);\n const parentClose = use(ToolbarMenuCloseContext);\n const isNested = parentClose !== null;\n const toolbarColors = useToolbarColors();\n\n const tintColor =\n props.imageRenderingMode === 'original'\n ? undefined\n : (props.tintColor ?? toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR());\n\n const backgroundColor = (toolbarColors.backgroundColor ??\n DEFAULT_TOOLBAR_BACKGROUND_COLOR()) as string;\n\n const closeMenu = useCallback(() => {\n setExpanded(false);\n parentClose?.();\n }, [parentClose]);\n\n // Inline nested: render children directly with a divider separator\n if (isNested && props.inline) {\n return (\n <>\n <HorizontalDivider />\n {props.children}\n </>\n );\n }\n\n // Non-inline nested: DropdownMenu with DropdownMenuItem trigger\n if (isNested) {\n const trailingIcon = (\n <DropdownMenuItem.TrailingIcon>\n <Icon source={arrowRightIcon} tint={tintColor} size={24} />\n </DropdownMenuItem.TrailingIcon>\n );\n const leadingIcon = props.source ? (\n <DropdownMenuItem.LeadingIcon>\n <Icon source={props.source} tint={tintColor} size={24} />\n </DropdownMenuItem.LeadingIcon>\n ) : null;\n return (\n <DropdownMenu\n expanded={expanded}\n onDismissRequest={() => setExpanded(false)}\n color={backgroundColor}>\n <DropdownMenu.Trigger>\n <DropdownMenuItem\n onClick={() => {\n if (!props.disabled) setExpanded(true);\n }}\n modifiers={[background(backgroundColor)]}\n enabled={!props.disabled}>\n {leadingIcon}\n <DropdownMenuItem.Text>\n <ComposeText\n color={\n typeof props.tintColor === 'string'\n ? props.tintColor\n : ((toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR()) as string)\n }>\n {props.label}\n </ComposeText>\n </DropdownMenuItem.Text>\n {trailingIcon}\n </DropdownMenuItem>\n </DropdownMenu.Trigger>\n <DropdownMenu.Items>\n <ToolbarMenuCloseContext value={closeMenu}>{props.children}</ToolbarMenuCloseContext>\n </DropdownMenu.Items>\n </DropdownMenu>\n );\n }\n\n // Root: AnimatedItemContainer + IconButton trigger + DropdownMenu\n if (!props.source) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Stack.Toolbar.Menu on Android requires an ImageSourcePropType icon. SF Symbols and xcasset icons are not supported. Use the `icon` prop with a require() or { uri } source, or use <Stack.Toolbar.Icon src={...} />.'\n );\n }\n return null;\n }\n\n return (\n <AnimatedItemContainer visible={!props.hidden}>\n <DropdownMenu\n expanded={expanded}\n onDismissRequest={() => setExpanded(false)}\n color={backgroundColor}>\n <DropdownMenu.Trigger>\n <IconButton\n onClick={() => setExpanded(true)}\n enabled={!props.disabled}\n modifiers={[background(backgroundColor)]}>\n <Icon source={props.source} tint={tintColor} size={24} />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Items>\n <ToolbarMenuCloseContext value={closeMenu}>{props.children}</ToolbarMenuCloseContext>\n </DropdownMenu.Items>\n </DropdownMenu>\n </AnimatedItemContainer>\n );\n};\n\n/**\n * Native toolbar menu action component for Android.\n * Renders as a DropdownMenuItem.\n */\nexport const NativeToolbarMenuAction: React.FC<NativeToolbarMenuActionProps> = (props) => {\n const closeMenu = use(ToolbarMenuCloseContext);\n const toolbarColors = useToolbarColors();\n const tintColor = props.destructive\n ? (DEFAULT_DESTRUCTIVE_COLOR() as string)\n : ((toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR()) as string);\n\n const backgroundColor = (toolbarColors.backgroundColor ??\n DEFAULT_TOOLBAR_BACKGROUND_COLOR()) as string;\n\n const handleClick = useCallback(() => {\n props.onPress?.();\n if (!props.unstable_keepPresented) {\n closeMenu?.();\n }\n }, [props.onPress, props.unstable_keepPresented, closeMenu]);\n\n const areChildrenString = typeof props.children === 'string';\n const label = areChildrenString\n ? props.children\n : (getFirstChildOfType(props.children, Label)?.props.children ?? '');\n\n if (props.hidden) return null;\n\n return (\n <DropdownMenuItem\n onClick={handleClick}\n modifiers={[background(backgroundColor)]}\n enabled={!props.disabled}>\n <DropdownMenuItem.Text>\n <ComposeText color={tintColor}>{label}</ComposeText>\n </DropdownMenuItem.Text>\n {props.source && (\n <DropdownMenuItem.LeadingIcon>\n <Icon source={props.source} tint={tintColor} size={24} />\n </DropdownMenuItem.LeadingIcon>\n )}\n {props.isOn && (\n <DropdownMenuItem.TrailingIcon>\n <Icon source={checkmarkIcon} tint={tintColor} size={24} />\n </DropdownMenuItem.TrailingIcon>\n )}\n </DropdownMenuItem>\n );\n};\n"]}
1
+ {"version":3,"file":"native.android.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/native.android.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport {\n DropdownMenu,\n DropdownMenuItem,\n HorizontalDivider,\n Icon,\n IconButton,\n Text as ComposeText,\n} from '@expo/ui/jetpack-compose';\nimport { background } from '@expo/ui/jetpack-compose/modifiers';\nimport { createContext, use, useCallback, useState } from 'react';\n\nimport type { NativeToolbarMenuActionProps, NativeToolbarMenuProps } from './types';\nimport { Label } from '../../../../primitives';\nimport { AnimatedItemContainer } from '../../../../toolbar/AnimatedItemContainer';\nimport { getFirstChildOfType } from '../../../../utils/children';\nimport { useToolbarColors } from '../context';\nimport {\n DEFAULT_DESTRUCTIVE_COLOR,\n DEFAULT_TOOLBAR_BACKGROUND_COLOR,\n DEFAULT_TOOLBAR_TINT_COLOR,\n} from '../defaults';\n\nconst arrowRightIcon = require('../../../../../assets/arrow_right.xml');\nconst checkmarkIcon = require('../../../../../assets/checkmark.xml');\n\n/**\n * Context for propagating menu close callbacks from root to nested menus.\n * - `null` means root level (no parent menu)\n * - A function means nested level (call to close entire menu chain)\n */\nconst ToolbarMenuCloseContext = createContext<(() => void) | null>(null);\n\n/**\n * Native toolbar menu component for Android bottom toolbar.\n * Renders as a DropdownMenu with IconButton trigger (root) or DropdownMenuItem trigger (nested).\n */\nexport const NativeToolbarMenu: React.FC<NativeToolbarMenuProps> = (props) => {\n const [expanded, setExpanded] = useState(false);\n const parentClose = use(ToolbarMenuCloseContext);\n const isNested = parentClose !== null;\n const toolbarColors = useToolbarColors();\n\n const tintColor =\n props.imageRenderingMode === 'original'\n ? undefined\n : (props.tintColor ?? toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR());\n\n const backgroundColor = (toolbarColors.backgroundColor ??\n DEFAULT_TOOLBAR_BACKGROUND_COLOR()) as string;\n\n const closeMenu = useCallback(() => {\n setExpanded(false);\n parentClose?.();\n }, [parentClose]);\n\n // Inline nested: render children directly with a divider separator\n if (isNested && props.inline) {\n return (\n <>\n <HorizontalDivider />\n {props.children}\n </>\n );\n }\n\n // Non-inline nested: DropdownMenu with DropdownMenuItem trigger\n if (isNested) {\n const trailingIcon = (\n <DropdownMenuItem.TrailingIcon>\n <Icon source={arrowRightIcon} tint={tintColor} size={24} />\n </DropdownMenuItem.TrailingIcon>\n );\n const leadingIcon = props.source ? (\n <DropdownMenuItem.LeadingIcon>\n <Icon source={props.source} tint={tintColor} size={24} />\n </DropdownMenuItem.LeadingIcon>\n ) : null;\n return (\n <DropdownMenu\n expanded={expanded}\n onDismissRequest={() => setExpanded(false)}\n color={backgroundColor}>\n <DropdownMenu.Trigger>\n <DropdownMenuItem\n onClick={() => {\n if (!props.disabled) setExpanded(true);\n }}\n modifiers={[background(backgroundColor)]}\n enabled={!props.disabled}>\n {leadingIcon}\n <DropdownMenuItem.Text>\n <ComposeText\n color={\n typeof props.tintColor === 'string'\n ? props.tintColor\n : ((toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR()) as string)\n }>\n {props.label}\n </ComposeText>\n </DropdownMenuItem.Text>\n {trailingIcon}\n </DropdownMenuItem>\n </DropdownMenu.Trigger>\n <DropdownMenu.Items>\n <ToolbarMenuCloseContext value={closeMenu}>{props.children}</ToolbarMenuCloseContext>\n </DropdownMenu.Items>\n </DropdownMenu>\n );\n }\n\n // Root: AnimatedItemContainer + IconButton trigger + DropdownMenu\n if (!props.source) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Stack.Toolbar.Menu on Android requires an ImageSourcePropType icon. SF Symbols and xcasset icons are not supported. Use the `icon` prop with a require() or { uri } source, or use <Stack.Toolbar.Icon src={...} />.'\n );\n }\n return null;\n }\n\n return (\n <AnimatedItemContainer visible={!props.hidden}>\n <DropdownMenu\n expanded={expanded}\n onDismissRequest={() => setExpanded(false)}\n color={backgroundColor}>\n <DropdownMenu.Trigger>\n <IconButton\n onClick={() => setExpanded(true)}\n enabled={!props.disabled}\n modifiers={[background(backgroundColor)]}>\n <Icon\n source={props.source}\n tint={tintColor}\n size={24}\n contentDescription={props.accessibilityLabel}\n />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Items>\n <ToolbarMenuCloseContext value={closeMenu}>{props.children}</ToolbarMenuCloseContext>\n </DropdownMenu.Items>\n </DropdownMenu>\n </AnimatedItemContainer>\n );\n};\n\n/**\n * Native toolbar menu action component for Android.\n * Renders as a DropdownMenuItem.\n */\nexport const NativeToolbarMenuAction: React.FC<NativeToolbarMenuActionProps> = (props) => {\n const closeMenu = use(ToolbarMenuCloseContext);\n const toolbarColors = useToolbarColors();\n const tintColor = props.destructive\n ? (DEFAULT_DESTRUCTIVE_COLOR() as string)\n : ((toolbarColors.tintColor ?? DEFAULT_TOOLBAR_TINT_COLOR()) as string);\n\n const backgroundColor = (toolbarColors.backgroundColor ??\n DEFAULT_TOOLBAR_BACKGROUND_COLOR()) as string;\n\n const handleClick = useCallback(() => {\n props.onPress?.();\n if (!props.unstable_keepPresented) {\n closeMenu?.();\n }\n }, [props.onPress, props.unstable_keepPresented, closeMenu]);\n\n const areChildrenString = typeof props.children === 'string';\n const label = areChildrenString\n ? props.children\n : (getFirstChildOfType(props.children, Label)?.props.children ?? '');\n\n if (props.hidden) return null;\n\n return (\n <DropdownMenuItem\n onClick={handleClick}\n modifiers={[background(backgroundColor)]}\n enabled={!props.disabled}>\n <DropdownMenuItem.Text>\n <ComposeText color={tintColor}>{label}</ComposeText>\n </DropdownMenuItem.Text>\n {props.source && (\n <DropdownMenuItem.LeadingIcon>\n <Icon source={props.source} tint={tintColor} size={24} />\n </DropdownMenuItem.LeadingIcon>\n )}\n {props.isOn && (\n <DropdownMenuItem.TrailingIcon>\n <Icon source={checkmarkIcon} tint={tintColor} size={24} />\n </DropdownMenuItem.TrailingIcon>\n )}\n </DropdownMenuItem>\n );\n};\n"]}
@@ -6,6 +6,11 @@ import type { LinkMenuActionProps } from '../../../../link/elements';
6
6
  import type { StackHeaderItemSharedProps } from '../shared';
7
7
  export interface StackToolbarMenuProps {
8
8
  /**
9
+ * Accessibility label spoken by screen readers (TalkBack/VoiceOver).
10
+ *
11
+ * @see [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.
12
+ *
13
+ * @platform android
9
14
  * @platform ios
10
15
  */
11
16
  accessibilityLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageRef } from 'expo-image';\nimport type { ReactNode } from 'react';\nimport type { ColorValue, ImageSourcePropType, StyleProp, TextStyle } from 'react-native';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type { LinkMenuActionProps } from '../../../../link/elements';\nimport type { StackHeaderItemSharedProps } from '../shared';\n\nexport interface StackToolbarMenuProps {\n /**\n * @platform ios\n */\n accessibilityLabel?: string;\n /**\n * @platform ios\n */\n accessibilityHint?: string;\n /**\n * Menu content - can include icons, labels, badges and menu actions.\n *\n * @example\n * ```tsx\n * <Stack.Toolbar.Menu>\n * <Stack.Toolbar.Icon sfSymbol=\"ellipsis.circle\" />\n * <Stack.Toolbar.Label>Options</Stack.Toolbar.Label>\n * <Stack.Toolbar.MenuAction onPress={() => {}}>Action 1</Stack.Toolbar.MenuAction>\n * </Stack.Toolbar.Menu>\n * ```\n *\n * @platform android\n * @platform ios\n */\n children?: ReactNode;\n /**\n * If `true`, the menu item will be displayed as destructive.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.\n *\n * @platform ios\n */\n destructive?: boolean;\n /**\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display for the menu item.\n *\n * > **Note**: This prop is only supported in toolbar with `placement=\"bottom\"`.\n *\n * @platform ios\n */\n image?: ImageRef;\n /**\n * Whether to hide the shared background.\n *\n * @see [Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information.\n *\n * @platform iOS 26+\n */\n hidesSharedBackground?: boolean;\n /**\n * Whether the menu should be hidden.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n hidden?: boolean;\n /**\n * Icon for the menu item.\n *\n * Can be an SF Symbol name or an image source.\n *\n * > **Note**: When used in `placement=\"bottom\"` on iOS, only string SFSymbols are supported. Use the `image` prop to provide custom images.\n *\n * > **Note (Android)**: Only `ImageSourcePropType` icons are rendered at the menu root.\n * > SF Symbols and `xcasset` names are silently dropped — provide a `require()` or\n * > `{ uri }` source.\n *\n * @platform android\n * @platform ios\n */\n icon?: StackHeaderItemSharedProps['icon'];\n /**\n * Controls how image-based icons are rendered.\n *\n * - `'template'`: applies tint color to the icon (useful for monochrome icons)\n * - `'original'`: preserves original icon colors (useful for multi-color icons)\n *\n * **Default behavior on iOS:**\n * - If `tintColor` is specified, defaults to `'template'`\n * - If no `tintColor`, defaults to `'original'`\n *\n * **On Android:** defaults to `'template'`.\n *\n * This prop only affects image-based icons (not SF Symbols).\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information.\n *\n * @platform android\n * @platform ios\n */\n iconRenderingMode?: 'template' | 'original';\n /**\n * If `true`, the menu will be displayed inline.\n * This means that the menu will not be collapsed.\n *\n * > **Note**: Inline menus are only supported in submenus.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information.\n *\n * @platform android\n * @platform ios\n */\n inline?: boolean;\n /**\n * If `true`, the menu will be displayed as a palette.\n * This means that the menu will be displayed as one row.\n *\n * > **Note**: Palette menus are only supported in submenus.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette) for more information.\n *\n * @platform ios\n */\n palette?: boolean;\n /**\n * Whether to separate the background of this item from other header items.\n *\n * @default false\n * @platform ios\n */\n separateBackground?: boolean;\n /**\n * Style for the label of the header item.\n *\n * @platform android\n * @platform ios\n */\n style?: StackHeaderItemSharedProps['style'];\n /**\n * The tint color to apply to the button item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information.\n * @see [Android documentation](https://developer.android.com/develop/ui/compose/graphics/images/customize#tint-image) for more information.\n *\n * @platform android\n * @platform ios\n */\n tintColor?: StackHeaderItemSharedProps['tintColor'];\n /**\n * Optional title to show on top of the menu.\n *\n * @platform android\n * @platform ios\n */\n title?: string;\n /**\n * @default 'plain'\n *\n * @platform ios\n */\n variant?: StackHeaderItemSharedProps['variant'];\n // TODO(@ubax): Add elementSize support in react-native-screens for header menus.\n /**\n * The preferred size of the menu elements.\n *\n * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/preferredelementsize) for more information.\n *\n * @platform iOS 16.0+\n */\n elementSize?: 'auto' | 'small' | 'medium' | 'large';\n}\n\nexport interface NativeToolbarMenuProps {\n accessibilityLabel?: string;\n accessibilityHint?: string;\n children?: ReactNode;\n subtitle?: string;\n destructive?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n hidesSharedBackground?: boolean;\n icon?: SFSymbol;\n xcassetName?: string;\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display for the menu item.\n */\n image?: ImageRef;\n imageRenderingMode?: 'template' | 'original';\n inline?: boolean;\n label?: string;\n palette?: boolean;\n separateBackground?: boolean;\n style?: StyleProp<TextStyle>;\n title?: string;\n tintColor?: ColorValue;\n variant?: 'plain' | 'done' | 'prominent';\n elementSize?: 'auto' | 'small' | 'medium' | 'large';\n /** @platform android */\n source?: ImageSourcePropType;\n}\n\nexport interface StackToolbarMenuActionProps {\n /**\n * Can be an Icon, Label or string title.\n */\n children?: ReactNode;\n /**\n * If `true`, the menu item will be disabled and not selectable.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled) for more information.\n */\n disabled?: boolean;\n /**\n * Icon for the menu action.\n *\n * Can be an SF Symbol name or an image source.\n *\n * > **Note (Android)**: Only `ImageSourcePropType` icons are rendered. SF Symbols are\n * > silently dropped. Provide a `require()` or `{ uri }` source.\n */\n icon?: SFSymbol | ImageSourcePropType;\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display for the menu action.\n *\n * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.\n *\n * @platform ios\n */\n image?: ImageRef;\n /**\n * Controls how image-based icons are rendered on iOS.\n *\n * - `'template'`: iOS applies tint color to the icon (useful for monochrome icons)\n * - `'original'`: Preserves original icon colors (useful for multi-color icons)\n *\n * **Default behavior:**\n * - If `tintColor` is specified, defaults to `'template'`\n * - If no `tintColor`, defaults to `'original'`\n *\n * This prop only affects image-based icons (not SF Symbols).\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information.\n *\n * @platform ios\n */\n iconRenderingMode?: 'template' | 'original';\n /**\n * If `true`, the menu item will be displayed as destructive.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.\n *\n * @platform android\n * @platform ios\n */\n destructive?: boolean;\n /**\n * If `true`, the menu will be kept presented after the action is selected.\n *\n * This is marked as unstable, because when action is selected on iOS it will recreate\n * the menu, which will close all opened submenus and reset the scroll position.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented) for more information.\n *\n * @platform android\n * @platform ios\n */\n unstable_keepPresented?: boolean;\n /**\n * If `true`, the menu item will be displayed as selected.\n *\n * @platform android\n * @platform ios\n */\n isOn?: boolean;\n onPress?: () => void;\n /**\n * An elaborated title that explains the purpose of the action.\n *\n * @platform ios\n */\n discoverabilityLabel?: string;\n /**\n * An optional subtitle for the menu item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/subtitle) for more information.\n *\n * @platform ios\n */\n subtitle?: string;\n hidden?: boolean;\n}\n\nexport interface NativeToolbarMenuActionProps extends LinkMenuActionProps {\n /** @platform android */\n source?: ImageSourcePropType;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageRef } from 'expo-image';\nimport type { ReactNode } from 'react';\nimport type { ColorValue, ImageSourcePropType, StyleProp, TextStyle } from 'react-native';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type { LinkMenuActionProps } from '../../../../link/elements';\nimport type { StackHeaderItemSharedProps } from '../shared';\n\nexport interface StackToolbarMenuProps {\n /**\n * Accessibility label spoken by screen readers (TalkBack/VoiceOver).\n *\n * @see [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.\n *\n * @platform android\n * @platform ios\n */\n accessibilityLabel?: string;\n /**\n * @platform ios\n */\n accessibilityHint?: string;\n /**\n * Menu content - can include icons, labels, badges and menu actions.\n *\n * @example\n * ```tsx\n * <Stack.Toolbar.Menu>\n * <Stack.Toolbar.Icon sfSymbol=\"ellipsis.circle\" />\n * <Stack.Toolbar.Label>Options</Stack.Toolbar.Label>\n * <Stack.Toolbar.MenuAction onPress={() => {}}>Action 1</Stack.Toolbar.MenuAction>\n * </Stack.Toolbar.Menu>\n * ```\n *\n * @platform android\n * @platform ios\n */\n children?: ReactNode;\n /**\n * If `true`, the menu item will be displayed as destructive.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.\n *\n * @platform ios\n */\n destructive?: boolean;\n /**\n * @platform android\n * @platform ios\n */\n disabled?: boolean;\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display for the menu item.\n *\n * > **Note**: This prop is only supported in toolbar with `placement=\"bottom\"`.\n *\n * @platform ios\n */\n image?: ImageRef;\n /**\n * Whether to hide the shared background.\n *\n * @see [Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information.\n *\n * @platform iOS 26+\n */\n hidesSharedBackground?: boolean;\n /**\n * Whether the menu should be hidden.\n *\n * @default false\n *\n * @platform android\n * @platform ios\n */\n hidden?: boolean;\n /**\n * Icon for the menu item.\n *\n * Can be an SF Symbol name or an image source.\n *\n * > **Note**: When used in `placement=\"bottom\"` on iOS, only string SFSymbols are supported. Use the `image` prop to provide custom images.\n *\n * > **Note (Android)**: Only `ImageSourcePropType` icons are rendered at the menu root.\n * > SF Symbols and `xcasset` names are silently dropped — provide a `require()` or\n * > `{ uri }` source.\n *\n * @platform android\n * @platform ios\n */\n icon?: StackHeaderItemSharedProps['icon'];\n /**\n * Controls how image-based icons are rendered.\n *\n * - `'template'`: applies tint color to the icon (useful for monochrome icons)\n * - `'original'`: preserves original icon colors (useful for multi-color icons)\n *\n * **Default behavior on iOS:**\n * - If `tintColor` is specified, defaults to `'template'`\n * - If no `tintColor`, defaults to `'original'`\n *\n * **On Android:** defaults to `'template'`.\n *\n * This prop only affects image-based icons (not SF Symbols).\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information.\n *\n * @platform android\n * @platform ios\n */\n iconRenderingMode?: 'template' | 'original';\n /**\n * If `true`, the menu will be displayed inline.\n * This means that the menu will not be collapsed.\n *\n * > **Note**: Inline menus are only supported in submenus.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information.\n *\n * @platform android\n * @platform ios\n */\n inline?: boolean;\n /**\n * If `true`, the menu will be displayed as a palette.\n * This means that the menu will be displayed as one row.\n *\n * > **Note**: Palette menus are only supported in submenus.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette) for more information.\n *\n * @platform ios\n */\n palette?: boolean;\n /**\n * Whether to separate the background of this item from other header items.\n *\n * @default false\n * @platform ios\n */\n separateBackground?: boolean;\n /**\n * Style for the label of the header item.\n *\n * @platform android\n * @platform ios\n */\n style?: StackHeaderItemSharedProps['style'];\n /**\n * The tint color to apply to the button item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information.\n * @see [Android documentation](https://developer.android.com/develop/ui/compose/graphics/images/customize#tint-image) for more information.\n *\n * @platform android\n * @platform ios\n */\n tintColor?: StackHeaderItemSharedProps['tintColor'];\n /**\n * Optional title to show on top of the menu.\n *\n * @platform android\n * @platform ios\n */\n title?: string;\n /**\n * @default 'plain'\n *\n * @platform ios\n */\n variant?: StackHeaderItemSharedProps['variant'];\n // TODO(@ubax): Add elementSize support in react-native-screens for header menus.\n /**\n * The preferred size of the menu elements.\n *\n * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/preferredelementsize) for more information.\n *\n * @platform iOS 16.0+\n */\n elementSize?: 'auto' | 'small' | 'medium' | 'large';\n}\n\nexport interface NativeToolbarMenuProps {\n accessibilityLabel?: string;\n accessibilityHint?: string;\n children?: ReactNode;\n subtitle?: string;\n destructive?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n hidesSharedBackground?: boolean;\n icon?: SFSymbol;\n xcassetName?: string;\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display for the menu item.\n */\n image?: ImageRef;\n imageRenderingMode?: 'template' | 'original';\n inline?: boolean;\n label?: string;\n palette?: boolean;\n separateBackground?: boolean;\n style?: StyleProp<TextStyle>;\n title?: string;\n tintColor?: ColorValue;\n variant?: 'plain' | 'done' | 'prominent';\n elementSize?: 'auto' | 'small' | 'medium' | 'large';\n /** @platform android */\n source?: ImageSourcePropType;\n}\n\nexport interface StackToolbarMenuActionProps {\n /**\n * Can be an Icon, Label or string title.\n */\n children?: ReactNode;\n /**\n * If `true`, the menu item will be disabled and not selectable.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled) for more information.\n */\n disabled?: boolean;\n /**\n * Icon for the menu action.\n *\n * Can be an SF Symbol name or an image source.\n *\n * > **Note (Android)**: Only `ImageSourcePropType` icons are rendered. SF Symbols are\n * > silently dropped. Provide a `require()` or `{ uri }` source.\n */\n icon?: SFSymbol | ImageSourcePropType;\n // TODO(@ubax): Add useImage support in a follow-up PR.\n /**\n * Image to display for the menu action.\n *\n * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.\n *\n * @platform ios\n */\n image?: ImageRef;\n /**\n * Controls how image-based icons are rendered on iOS.\n *\n * - `'template'`: iOS applies tint color to the icon (useful for monochrome icons)\n * - `'original'`: Preserves original icon colors (useful for multi-color icons)\n *\n * **Default behavior:**\n * - If `tintColor` is specified, defaults to `'template'`\n * - If no `tintColor`, defaults to `'original'`\n *\n * This prop only affects image-based icons (not SF Symbols).\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiimage/renderingmode-swift.enum) for more information.\n *\n * @platform ios\n */\n iconRenderingMode?: 'template' | 'original';\n /**\n * If `true`, the menu item will be displayed as destructive.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.\n *\n * @platform android\n * @platform ios\n */\n destructive?: boolean;\n /**\n * If `true`, the menu will be kept presented after the action is selected.\n *\n * This is marked as unstable, because when action is selected on iOS it will recreate\n * the menu, which will close all opened submenus and reset the scroll position.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented) for more information.\n *\n * @platform android\n * @platform ios\n */\n unstable_keepPresented?: boolean;\n /**\n * If `true`, the menu item will be displayed as selected.\n *\n * @platform android\n * @platform ios\n */\n isOn?: boolean;\n onPress?: () => void;\n /**\n * An elaborated title that explains the purpose of the action.\n *\n * @platform ios\n */\n discoverabilityLabel?: string;\n /**\n * An optional subtitle for the menu item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/subtitle) for more information.\n *\n * @platform ios\n */\n subtitle?: string;\n hidden?: boolean;\n}\n\nexport interface NativeToolbarMenuActionProps extends LinkMenuActionProps {\n /** @platform android */\n source?: ImageSourcePropType;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NativeTabsView.android.d.ts","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAiD,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGlG,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAoDxD"}
1
+ {"version":3,"file":"NativeTabsView.android.d.ts","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAiD,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGlG,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAyDxD"}
@@ -10,7 +10,8 @@ const appearance_1 = require("./appearance");
10
10
  const types_1 = require("./types");
11
11
  const optionsIconConverter_1 = require("./utils/optionsIconConverter");
12
12
  function NativeTabsView(props) {
13
- const { disableIndicator, tabs } = props;
13
+ const { disableIndicator, tabs, unstable_nativeProps } = props;
14
+ const { android: rawAndroidProps, ios: _ignoredRawIosProps, ...rawHostRestProps } = unstable_nativeProps ?? {};
14
15
  const { selectedScreenKey, provenance } = (0, NativeTabsView_shared_1.useSelectedScreenKey)(props);
15
16
  const onTabSelected = (0, NativeTabsView_shared_1.useOnTabSelectedHandler)(props.onTabChange);
16
17
  // TODO(@ubax): add per screen labelVisibilityMode + validation function
@@ -30,9 +31,11 @@ function NativeTabsView(props) {
30
31
  if (children.length === 0) {
31
32
  return null;
32
33
  }
33
- return ((0, jsx_runtime_1.jsx)(react_native_screens_1.Tabs.Host, { navState: { selectedScreenKey, provenance },
34
+ return ((0, jsx_runtime_1.jsx)(react_native_screens_1.Tabs.Host
35
+ // TODO(@ubax): Adjust docs and add support for tabBarRespectsIMEInsets
36
+ , {
34
37
  // TODO(@ubax): Adjust docs and add support for tabBarRespectsIMEInsets
35
- android: {}, tabBarHidden: props.hidden, onTabSelected: onTabSelected, children: children }));
38
+ android: { ...rawAndroidProps }, tabBarHidden: props.hidden, ...rawHostRestProps, navState: { selectedScreenKey, provenance }, onTabSelected: onTabSelected, children: children }));
36
39
  }
37
40
  function Screen(props) {
38
41
  const { options, androidAppearance, contentRenderer } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeTabsView.android.js","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Tabs, type TabsScreenAppearanceAndroid } from 'react-native-screens';\nimport { SafeAreaView } from 'react-native-screens/experimental';\n\nimport {\n type InternalTabScreenProps as SharedInternalTabScreenProps,\n ScreenContent,\n useOnTabSelectedHandler,\n useSelectedScreenKey,\n useSharedScreenProps,\n} from './NativeTabsView.shared';\nimport { createAndroidScreenAppearance } from './appearance';\nimport { SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES, type NativeTabsViewProps } from './types';\nimport { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { disableIndicator, tabs } = props;\n\n const { selectedScreenKey, provenance } = useSelectedScreenKey(props);\n const onTabSelected = useOnTabSelectedHandler(props.onTabChange);\n\n // TODO(@ubax): add per screen labelVisibilityMode + validation function\n let labelVisibilityMode = props.labelVisibilityMode;\n if (labelVisibilityMode && !supportedTabBarItemLabelVisibilityModesSet.has(labelVisibilityMode)) {\n console.warn(\n `Unsupported labelVisibilityMode: ${labelVisibilityMode}. Supported values are: ${SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES.map((mode) => `\"${mode}\"`).join(', ')}`\n );\n labelVisibilityMode = undefined;\n }\n\n const androidAppearances = tabs.map((tab) =>\n createAndroidScreenAppearance({\n options: tab.options,\n tintColor: props.tintColor,\n rippleColor: props.rippleColor,\n disableIndicator,\n labelVisibilityMode,\n })\n );\n\n const children = tabs.map((tab, index) => (\n <Screen\n key={tab.routeKey}\n routeKey={tab.routeKey}\n name={tab.name}\n options={tab.options}\n isFocused={selectedScreenKey === tab.routeKey}\n androidAppearance={androidAppearances[index]!}\n contentRenderer={tab.contentRenderer}\n />\n ));\n\n if (children.length === 0) {\n return null;\n }\n\n return (\n // TODO(@ubax): add rawProps prop to tab host\n <Tabs.Host\n navState={{ selectedScreenKey, provenance }}\n // TODO(@ubax): Adjust docs and add support for tabBarRespectsIMEInsets\n android={{}}\n tabBarHidden={props.hidden}\n onTabSelected={onTabSelected}>\n {children}\n </Tabs.Host>\n );\n}\n\ninterface InternalTabScreenProps extends SharedInternalTabScreenProps {\n androidAppearance: TabsScreenAppearanceAndroid;\n}\n\nfunction Screen(props: InternalTabScreenProps) {\n const { options, androidAppearance, contentRenderer } = props;\n\n const shared = useSharedScreenProps(props);\n\n const androidIcon = convertOptionsIconToScreensPropsIcon(shared.icon);\n const androidSelectedIcon = convertOptionsIconToScreensPropsIcon(shared.selectedIcon);\n\n const content = <ScreenContent options={options} contentRenderer={contentRenderer} />;\n const wrappedContent = useMemo(() => {\n if (!options.disableAutomaticContentInsets) {\n return (\n <SafeAreaView\n // https://github.com/software-mansion/react-native-screens/issues/2662#issuecomment-2757735088\n collapsable={false}\n style={{ flex: 1 }}\n edges={{ bottom: true }}>\n {content}\n </SafeAreaView>\n );\n }\n return content;\n }, [content, options.disableAutomaticContentInsets]);\n\n return (\n <Tabs.Screen\n {...shared.options}\n pointerEvents={shared.pointerEvents}\n android={{\n icon: androidIcon,\n selectedIcon: androidSelectedIcon,\n standardAppearance: androidAppearance,\n ...shared.nativeAndroidOverrides,\n }}\n title={shared.title}\n {...shared.nativeRestOverrides}\n screenKey={shared.screenKey}>\n {wrappedContent}\n </Tabs.Screen>\n );\n}\n\nconst supportedTabBarItemLabelVisibilityModesSet = new Set<string>(\n SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES\n);\n"]}
1
+ {"version":3,"file":"NativeTabsView.android.js","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.android.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Tabs, type TabsScreenAppearanceAndroid } from 'react-native-screens';\nimport { SafeAreaView } from 'react-native-screens/experimental';\n\nimport {\n type InternalTabScreenProps as SharedInternalTabScreenProps,\n ScreenContent,\n useOnTabSelectedHandler,\n useSelectedScreenKey,\n useSharedScreenProps,\n} from './NativeTabsView.shared';\nimport { createAndroidScreenAppearance } from './appearance';\nimport { SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES, type NativeTabsViewProps } from './types';\nimport { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { disableIndicator, tabs, unstable_nativeProps } = props;\n const {\n android: rawAndroidProps,\n ios: _ignoredRawIosProps,\n ...rawHostRestProps\n } = unstable_nativeProps ?? {};\n\n const { selectedScreenKey, provenance } = useSelectedScreenKey(props);\n const onTabSelected = useOnTabSelectedHandler(props.onTabChange);\n\n // TODO(@ubax): add per screen labelVisibilityMode + validation function\n let labelVisibilityMode = props.labelVisibilityMode;\n if (labelVisibilityMode && !supportedTabBarItemLabelVisibilityModesSet.has(labelVisibilityMode)) {\n console.warn(\n `Unsupported labelVisibilityMode: ${labelVisibilityMode}. Supported values are: ${SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES.map((mode) => `\"${mode}\"`).join(', ')}`\n );\n labelVisibilityMode = undefined;\n }\n\n const androidAppearances = tabs.map((tab) =>\n createAndroidScreenAppearance({\n options: tab.options,\n tintColor: props.tintColor,\n rippleColor: props.rippleColor,\n disableIndicator,\n labelVisibilityMode,\n })\n );\n\n const children = tabs.map((tab, index) => (\n <Screen\n key={tab.routeKey}\n routeKey={tab.routeKey}\n name={tab.name}\n options={tab.options}\n isFocused={selectedScreenKey === tab.routeKey}\n androidAppearance={androidAppearances[index]!}\n contentRenderer={tab.contentRenderer}\n />\n ));\n\n if (children.length === 0) {\n return null;\n }\n\n return (\n <Tabs.Host\n // TODO(@ubax): Adjust docs and add support for tabBarRespectsIMEInsets\n android={{ ...rawAndroidProps }}\n tabBarHidden={props.hidden}\n {...rawHostRestProps}\n navState={{ selectedScreenKey, provenance }}\n onTabSelected={onTabSelected}>\n {children}\n </Tabs.Host>\n );\n}\n\ninterface InternalTabScreenProps extends SharedInternalTabScreenProps {\n androidAppearance: TabsScreenAppearanceAndroid;\n}\n\nfunction Screen(props: InternalTabScreenProps) {\n const { options, androidAppearance, contentRenderer } = props;\n\n const shared = useSharedScreenProps(props);\n\n const androidIcon = convertOptionsIconToScreensPropsIcon(shared.icon);\n const androidSelectedIcon = convertOptionsIconToScreensPropsIcon(shared.selectedIcon);\n\n const content = <ScreenContent options={options} contentRenderer={contentRenderer} />;\n const wrappedContent = useMemo(() => {\n if (!options.disableAutomaticContentInsets) {\n return (\n <SafeAreaView\n // https://github.com/software-mansion/react-native-screens/issues/2662#issuecomment-2757735088\n collapsable={false}\n style={{ flex: 1 }}\n edges={{ bottom: true }}>\n {content}\n </SafeAreaView>\n );\n }\n return content;\n }, [content, options.disableAutomaticContentInsets]);\n\n return (\n <Tabs.Screen\n {...shared.options}\n pointerEvents={shared.pointerEvents}\n android={{\n icon: androidIcon,\n selectedIcon: androidSelectedIcon,\n standardAppearance: androidAppearance,\n ...shared.nativeAndroidOverrides,\n }}\n title={shared.title}\n {...shared.nativeRestOverrides}\n screenKey={shared.screenKey}>\n {wrappedContent}\n </Tabs.Screen>\n );\n}\n\nconst supportedTabBarItemLabelVisibilityModesSet = new Set<string>(\n SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NativeTabsView.ios.d.ts","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.ios.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAwC,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAKzF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDAqDxD"}
1
+ {"version":3,"file":"NativeTabsView.ios.d.ts","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.ios.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAwC,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAKzF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kDA0ExD"}
@@ -13,7 +13,10 @@ const bottomAccessory_1 = require("./utils/bottomAccessory");
13
13
  const optionsIconConverter_1 = require("./utils/optionsIconConverter");
14
14
  const children_1 = require("../utils/children");
15
15
  function NativeTabsView(props) {
16
- const { minimizeBehavior, tabs, sidebarAdaptable, nonTriggerChildren } = props;
16
+ const { minimizeBehavior, tabs, sidebarAdaptable, nonTriggerChildren, unstable_nativeProps } = props;
17
+ // `ios`/`android` are the only platform-nested keys on `TabsHostProps`. We drop the inactive
18
+ // platform's slice so users writing universal code don't pass Android-only props to the iOS host.
19
+ const { ios: rawIosProps, android: _ignoredRawAndroidProps, ...rawHostRestProps } = unstable_nativeProps ?? {};
17
20
  const { selectedScreenKey, provenance } = (0, NativeTabsView_shared_1.useSelectedScreenKey)(props);
18
21
  const onTabSelected = (0, NativeTabsView_shared_1.useOnTabSelectedHandler)(props.onTabChange);
19
22
  const iosAppearances = tabs.map((tab) => ({
@@ -22,17 +25,25 @@ function NativeTabsView(props) {
22
25
  }));
23
26
  const bottomAccessory = (0, react_1.useMemo)(() => (0, children_1.getFirstChildOfType)(nonTriggerChildren, elements_1.NativeTabsBottomAccessory), [nonTriggerChildren]);
24
27
  const bottomAccessoryFn = (0, bottomAccessory_1.useBottomAccessoryFunctionFromBottomAccessories)(bottomAccessory);
28
+ if (process.env.NODE_ENV !== 'production' &&
29
+ bottomAccessory &&
30
+ rawIosProps &&
31
+ 'bottomAccessory' in rawIosProps) {
32
+ console.warn('<NativeTabs.BottomAccessory> is being overridden by `unstable_nativeProps.ios.bottomAccessory`. ' +
33
+ 'Either remove the `<NativeTabs.BottomAccessory>` child or stop passing `ios.bottomAccessory` via `unstable_nativeProps`.');
34
+ }
25
35
  const children = tabs.map((tab, index) => ((0, jsx_runtime_1.jsx)(Screen, { routeKey: tab.routeKey, name: tab.name, options: tab.options, isFocused: selectedScreenKey === tab.routeKey, standardAppearance: iosAppearances[index].standardAppearance, scrollEdgeAppearance: iosAppearances[index].scrollEdgeAppearance, contentRenderer: tab.contentRenderer }, tab.routeKey)));
26
36
  if (children.length === 0) {
27
37
  return null;
28
38
  }
29
39
  const tabBarControllerMode = sidebarAdaptable ? 'tabSidebar' : sidebarAdaptable === false ? 'tabBar' : 'automatic';
30
- return ((0, jsx_runtime_1.jsx)(TabsHostWrapper, { navState: { selectedScreenKey, provenance }, ios: {
40
+ return ((0, jsx_runtime_1.jsx)(TabsHostWrapper, { ios: {
31
41
  tabBarTintColor: props.tintColor,
32
42
  tabBarMinimizeBehavior: minimizeBehavior,
33
43
  tabBarControllerMode,
34
44
  bottomAccessory: bottomAccessoryFn,
35
- }, tabBarHidden: props.hidden, onTabSelected: onTabSelected, children: children }));
45
+ ...rawIosProps,
46
+ }, tabBarHidden: props.hidden, ...rawHostRestProps, navState: { selectedScreenKey, provenance }, onTabSelected: onTabSelected, children: children }));
36
47
  }
37
48
  function Screen(props) {
38
49
  const { options, standardAppearance, scrollEdgeAppearance, contentRenderer } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeTabsView.ios.js","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.ios.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\nimport { Tabs, type TabsHostProps, type TabsScreenAppearanceIOS } from 'react-native-screens';\n\nimport {\n type InternalTabScreenProps as SharedInternalTabScreenProps,\n ScreenContent,\n useOnTabSelectedHandler,\n useSelectedScreenKey,\n useSharedScreenProps,\n} from './NativeTabsView.shared';\nimport {\n createScrollEdgeAppearanceFromOptions,\n createStandardAppearanceFromOptions,\n} from './appearance';\nimport { NativeTabsBottomAccessory } from './common/elements';\nimport { SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS, type NativeTabsViewProps } from './types';\nimport { useBottomAccessoryFunctionFromBottomAccessories } from './utils/bottomAccessory';\nimport { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter';\nimport { getFirstChildOfType } from '../utils/children';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { minimizeBehavior, tabs, sidebarAdaptable, nonTriggerChildren } = props;\n\n const { selectedScreenKey, provenance } = useSelectedScreenKey(props);\n const onTabSelected = useOnTabSelectedHandler(props.onTabChange);\n\n const iosAppearances = tabs.map((tab) => ({\n standardAppearance: createStandardAppearanceFromOptions(tab.options),\n scrollEdgeAppearance: createScrollEdgeAppearanceFromOptions(tab.options),\n }));\n\n const bottomAccessory = useMemo(\n () => getFirstChildOfType(nonTriggerChildren, NativeTabsBottomAccessory),\n [nonTriggerChildren]\n );\n\n const bottomAccessoryFn = useBottomAccessoryFunctionFromBottomAccessories(bottomAccessory);\n\n const children = tabs.map((tab, index) => (\n <Screen\n key={tab.routeKey}\n routeKey={tab.routeKey}\n name={tab.name}\n options={tab.options}\n isFocused={selectedScreenKey === tab.routeKey}\n standardAppearance={iosAppearances[index]!.standardAppearance}\n scrollEdgeAppearance={iosAppearances[index]!.scrollEdgeAppearance}\n contentRenderer={tab.contentRenderer}\n />\n ));\n\n if (children.length === 0) {\n return null;\n }\n\n const tabBarControllerMode: NonNullable<TabsHostProps['ios']>['tabBarControllerMode'] =\n sidebarAdaptable ? 'tabSidebar' : sidebarAdaptable === false ? 'tabBar' : 'automatic';\n\n return (\n // TODO(@ubax): add rawProps prop to tab host\n <TabsHostWrapper\n navState={{ selectedScreenKey, provenance }}\n ios={{\n tabBarTintColor: props.tintColor,\n tabBarMinimizeBehavior: minimizeBehavior,\n tabBarControllerMode,\n bottomAccessory: bottomAccessoryFn,\n }}\n tabBarHidden={props.hidden}\n onTabSelected={onTabSelected}>\n {children}\n </TabsHostWrapper>\n );\n}\n\ninterface InternalTabScreenProps extends SharedInternalTabScreenProps {\n standardAppearance: TabsScreenAppearanceIOS;\n scrollEdgeAppearance: TabsScreenAppearanceIOS;\n}\n\nfunction Screen(props: InternalTabScreenProps) {\n const { options, standardAppearance, scrollEdgeAppearance, contentRenderer } = props;\n\n const shared = useSharedScreenProps(props);\n\n const iosIcon = convertOptionsIconToScreensPropsIcon(\n shared.icon,\n standardAppearance?.stacked?.normal?.tabBarItemIconColor\n );\n const iosSelectedIcon = convertOptionsIconToScreensPropsIcon(\n shared.selectedIcon,\n standardAppearance?.stacked?.selected?.tabBarItemIconColor\n );\n\n const content = <ScreenContent options={options} contentRenderer={contentRenderer} />;\n const wrappedContent = useMemo(() => <SafeAreaProvider>{content}</SafeAreaProvider>, [content]);\n\n return (\n <Tabs.Screen\n {...shared.options}\n pointerEvents={shared.pointerEvents}\n ios={{\n icon: iosIcon,\n selectedIcon: iosSelectedIcon,\n standardAppearance,\n scrollEdgeAppearance,\n systemItem: options.role,\n overrideScrollViewContentInsetAdjustmentBehavior: !options.disableAutomaticContentInsets,\n ...shared.nativeIosOverrides,\n }}\n title={shared.title}\n {...shared.nativeRestOverrides}\n screenKey={shared.screenKey}>\n {wrappedContent}\n </Tabs.Screen>\n );\n}\n\nconst supportedTabBarMinimizeBehaviorsSet = new Set<string>(SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS);\n\nfunction TabsHostWrapper(props: TabsHostProps) {\n // TODO(@ubax): add function for validation\n let validatedIos = props.ios;\n if (validatedIos?.tabBarMinimizeBehavior) {\n if (!supportedTabBarMinimizeBehaviorsSet.has(validatedIos.tabBarMinimizeBehavior)) {\n console.warn(\n `Unsupported minimizeBehavior: ${validatedIos.tabBarMinimizeBehavior}. Supported values are: ${SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS.map((behavior) => `\"${behavior}\"`).join(', ')}`\n );\n validatedIos = { ...validatedIos, tabBarMinimizeBehavior: undefined };\n }\n }\n\n return <Tabs.Host {...props} ios={validatedIos} />;\n}\n"]}
1
+ {"version":3,"file":"NativeTabsView.ios.js","sourceRoot":"","sources":["../../src/native-tabs/NativeTabsView.ios.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\nimport { Tabs, type TabsHostProps, type TabsScreenAppearanceIOS } from 'react-native-screens';\n\nimport {\n type InternalTabScreenProps as SharedInternalTabScreenProps,\n ScreenContent,\n useOnTabSelectedHandler,\n useSelectedScreenKey,\n useSharedScreenProps,\n} from './NativeTabsView.shared';\nimport {\n createScrollEdgeAppearanceFromOptions,\n createStandardAppearanceFromOptions,\n} from './appearance';\nimport { NativeTabsBottomAccessory } from './common/elements';\nimport { SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS, type NativeTabsViewProps } from './types';\nimport { useBottomAccessoryFunctionFromBottomAccessories } from './utils/bottomAccessory';\nimport { convertOptionsIconToScreensPropsIcon } from './utils/optionsIconConverter';\nimport { getFirstChildOfType } from '../utils/children';\n\nexport function NativeTabsView(props: NativeTabsViewProps) {\n const { minimizeBehavior, tabs, sidebarAdaptable, nonTriggerChildren, unstable_nativeProps } =\n props;\n // `ios`/`android` are the only platform-nested keys on `TabsHostProps`. We drop the inactive\n // platform's slice so users writing universal code don't pass Android-only props to the iOS host.\n const {\n ios: rawIosProps,\n android: _ignoredRawAndroidProps,\n ...rawHostRestProps\n } = unstable_nativeProps ?? {};\n\n const { selectedScreenKey, provenance } = useSelectedScreenKey(props);\n const onTabSelected = useOnTabSelectedHandler(props.onTabChange);\n\n const iosAppearances = tabs.map((tab) => ({\n standardAppearance: createStandardAppearanceFromOptions(tab.options),\n scrollEdgeAppearance: createScrollEdgeAppearanceFromOptions(tab.options),\n }));\n\n const bottomAccessory = useMemo(\n () => getFirstChildOfType(nonTriggerChildren, NativeTabsBottomAccessory),\n [nonTriggerChildren]\n );\n\n const bottomAccessoryFn = useBottomAccessoryFunctionFromBottomAccessories(bottomAccessory);\n\n if (\n process.env.NODE_ENV !== 'production' &&\n bottomAccessory &&\n rawIosProps &&\n 'bottomAccessory' in rawIosProps\n ) {\n console.warn(\n '<NativeTabs.BottomAccessory> is being overridden by `unstable_nativeProps.ios.bottomAccessory`. ' +\n 'Either remove the `<NativeTabs.BottomAccessory>` child or stop passing `ios.bottomAccessory` via `unstable_nativeProps`.'\n );\n }\n\n const children = tabs.map((tab, index) => (\n <Screen\n key={tab.routeKey}\n routeKey={tab.routeKey}\n name={tab.name}\n options={tab.options}\n isFocused={selectedScreenKey === tab.routeKey}\n standardAppearance={iosAppearances[index]!.standardAppearance}\n scrollEdgeAppearance={iosAppearances[index]!.scrollEdgeAppearance}\n contentRenderer={tab.contentRenderer}\n />\n ));\n\n if (children.length === 0) {\n return null;\n }\n\n const tabBarControllerMode: NonNullable<TabsHostProps['ios']>['tabBarControllerMode'] =\n sidebarAdaptable ? 'tabSidebar' : sidebarAdaptable === false ? 'tabBar' : 'automatic';\n\n return (\n <TabsHostWrapper\n ios={{\n tabBarTintColor: props.tintColor,\n tabBarMinimizeBehavior: minimizeBehavior,\n tabBarControllerMode,\n bottomAccessory: bottomAccessoryFn,\n ...rawIosProps,\n }}\n tabBarHidden={props.hidden}\n {...rawHostRestProps}\n navState={{ selectedScreenKey, provenance }}\n onTabSelected={onTabSelected}>\n {children}\n </TabsHostWrapper>\n );\n}\n\ninterface InternalTabScreenProps extends SharedInternalTabScreenProps {\n standardAppearance: TabsScreenAppearanceIOS;\n scrollEdgeAppearance: TabsScreenAppearanceIOS;\n}\n\nfunction Screen(props: InternalTabScreenProps) {\n const { options, standardAppearance, scrollEdgeAppearance, contentRenderer } = props;\n\n const shared = useSharedScreenProps(props);\n\n const iosIcon = convertOptionsIconToScreensPropsIcon(\n shared.icon,\n standardAppearance?.stacked?.normal?.tabBarItemIconColor\n );\n const iosSelectedIcon = convertOptionsIconToScreensPropsIcon(\n shared.selectedIcon,\n standardAppearance?.stacked?.selected?.tabBarItemIconColor\n );\n\n const content = <ScreenContent options={options} contentRenderer={contentRenderer} />;\n const wrappedContent = useMemo(() => <SafeAreaProvider>{content}</SafeAreaProvider>, [content]);\n\n return (\n <Tabs.Screen\n {...shared.options}\n pointerEvents={shared.pointerEvents}\n ios={{\n icon: iosIcon,\n selectedIcon: iosSelectedIcon,\n standardAppearance,\n scrollEdgeAppearance,\n systemItem: options.role,\n overrideScrollViewContentInsetAdjustmentBehavior: !options.disableAutomaticContentInsets,\n ...shared.nativeIosOverrides,\n }}\n title={shared.title}\n {...shared.nativeRestOverrides}\n screenKey={shared.screenKey}>\n {wrappedContent}\n </Tabs.Screen>\n );\n}\n\nconst supportedTabBarMinimizeBehaviorsSet = new Set<string>(SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS);\n\nfunction TabsHostWrapper(props: TabsHostProps) {\n // TODO(@ubax): add function for validation\n let validatedIos = props.ios;\n if (validatedIos?.tabBarMinimizeBehavior) {\n if (!supportedTabBarMinimizeBehaviorsSet.has(validatedIos.tabBarMinimizeBehavior)) {\n console.warn(\n `Unsupported minimizeBehavior: ${validatedIos.tabBarMinimizeBehavior}. Supported values are: ${SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS.map((behavior) => `\"${behavior}\"`).join(', ')}`\n );\n validatedIos = { ...validatedIos, tabBarMinimizeBehavior: undefined };\n }\n }\n\n return <Tabs.Host {...props} ios={validatedIos} />;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export type { NativeTabsTriggerLabelProps, SrcIcon, SFSymbolIcon, XcassetIcon, DrawableIcon, MaterialIcon, NativeTabsTriggerIconProps, NativeTabsTriggerBadgeProps, NativeTabsBottomAccessoryProps, } from './common/elements';
2
- export type { NativeTabsProps, NativeTabTriggerProps, NativeTabsLabelStyle, SymbolOrImageSource, NativeTabsTabBarItemLabelVisibilityMode, NativeTabsBlurEffect, NativeTabsTabBarMinimizeBehavior, NativeTabsTabBarItemRole, } from './types';
2
+ export type { NativeTabsProps, NativeTabTriggerProps, NativeTabsLabelStyle, NativeTabsHostNativeProps, SymbolOrImageSource, NativeTabsTabBarItemLabelVisibilityMode, NativeTabsBlurEffect, NativeTabsTabBarMinimizeBehavior, NativeTabsTabBarItemRole, } from './types';
3
3
  export { NativeTabTrigger } from './NativeTabTrigger';
4
4
  export { NativeTabs } from './NativeTabs';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/native-tabs/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,uCAAuC,EACvC,oBAAoB,EACpB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/native-tabs/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,OAAO,EACP,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,uCAAuC,EACvC,oBAAoB,EACpB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/native-tabs/index.ts"],"names":[],"mappings":";;;AAqBA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA","sourcesContent":["export type {\n NativeTabsTriggerLabelProps,\n SrcIcon,\n SFSymbolIcon,\n XcassetIcon,\n DrawableIcon,\n MaterialIcon,\n NativeTabsTriggerIconProps,\n NativeTabsTriggerBadgeProps,\n NativeTabsBottomAccessoryProps,\n} from './common/elements';\nexport type {\n NativeTabsProps,\n NativeTabTriggerProps,\n NativeTabsLabelStyle,\n SymbolOrImageSource,\n NativeTabsTabBarItemLabelVisibilityMode,\n NativeTabsBlurEffect,\n NativeTabsTabBarMinimizeBehavior,\n NativeTabsTabBarItemRole,\n} from './types';\nexport { NativeTabTrigger } from './NativeTabTrigger';\nexport { NativeTabs } from './NativeTabs';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/native-tabs/index.ts"],"names":[],"mappings":";;;AAsBA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA","sourcesContent":["export type {\n NativeTabsTriggerLabelProps,\n SrcIcon,\n SFSymbolIcon,\n XcassetIcon,\n DrawableIcon,\n MaterialIcon,\n NativeTabsTriggerIconProps,\n NativeTabsTriggerBadgeProps,\n NativeTabsBottomAccessoryProps,\n} from './common/elements';\nexport type {\n NativeTabsProps,\n NativeTabTriggerProps,\n NativeTabsLabelStyle,\n NativeTabsHostNativeProps,\n SymbolOrImageSource,\n NativeTabsTabBarItemLabelVisibilityMode,\n NativeTabsBlurEffect,\n NativeTabsTabBarMinimizeBehavior,\n NativeTabsTabBarItemRole,\n} from './types';\nexport { NativeTabTrigger } from './NativeTabTrigger';\nexport { NativeTabs } from './NativeTabs';\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { PropsWithChildren } from 'react';
2
2
  import type { ColorValue, ImageSourcePropType, StyleProp, TextStyle, ViewStyle } from 'react-native';
3
- import type { TabsScreenProps } from 'react-native-screens';
3
+ import type { TabsHostProps, TabsScreenProps } from 'react-native-screens';
4
4
  import type { SFSymbol } from 'sf-symbols-typescript';
5
5
  import type { DefaultRouterOptions, EventMapBase, NavigationState, ParamListBase, RouteProp, ScreenListeners, TabNavigationState } from '../react-navigation/native';
6
6
  /**
@@ -16,6 +16,10 @@ export type NativeTabNavigationEventMap = {
16
16
  };
17
17
  };
18
18
  export type NativeScreenProps = Partial<Omit<TabsScreenProps, 'screenKey'>>;
19
+ /**
20
+ * Props passed to the underlying tab host implementation in `react-native-screens`.
21
+ */
22
+ export type NativeTabsHostNativeProps = Partial<Omit<TabsHostProps, 'navState' | 'onTabSelected' | 'children'>>;
19
23
  export interface NativeTabOptions extends DefaultRouterOptions {
20
24
  icon?: SymbolOrImageSource;
21
25
  selectedIcon?: SymbolOrImageSource;
@@ -237,6 +241,16 @@ export interface NativeTabsProps extends PropsWithChildren {
237
241
  screenListeners?: ScreenListeners<TabNavigationState<ParamListBase>, NativeTabNavigationEventMap> | ((prop: {
238
242
  route: RouteProp<ParamListBase, string>;
239
243
  }) => ScreenListeners<TabNavigationState<ParamListBase>, NativeTabNavigationEventMap>);
244
+ /**
245
+ * Props passed to the underlying native tab host implementation in `react-native-screens`.
246
+ * Use this to configure props that are not directly exposed by Expo Router.
247
+ *
248
+ * > **Note**: This is an unstable API and may change or be removed in minor versions.
249
+ *
250
+ * @platform android
251
+ * @platform ios
252
+ */
253
+ unstable_nativeProps?: NativeTabsHostNativeProps;
240
254
  }
241
255
  export interface InternalNativeTabsProps extends NativeTabsProps {
242
256
  nonTriggerChildren?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":";;;AA4Ha,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,eAAe;IACf,YAAY;IACZ,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,yBAAyB;IACzB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AA2NE,QAAA,6CAA6C,GAAG;IAC3D,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;CACH,CAAC;AAUE,QAAA,oCAAoC,GAAG;IAClD,WAAW;IACX,OAAO;IACP,cAAc;IACd,YAAY;CACJ,CAAC;AAiIX,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC","sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { TabsScreenProps } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultRouterOptions,\n EventMapBase,\n NavigationState,\n ParamListBase,\n RouteProp,\n ScreenListeners,\n TabNavigationState,\n} from '../react-navigation/native';\n\n/**\n * Event map for `NativeTabs` navigation events.\n * Only `tabPress` is currently supported.\n */\nexport type NativeTabNavigationEventMap = {\n tabPress: { data: { __internalTabsType: 'native' }; canPreventDefault: false };\n};\n\nexport type NativeScreenProps = Partial<Omit<TabsScreenProps, 'screenKey'>>;\n\nexport interface NativeTabOptions extends DefaultRouterOptions {\n icon?: SymbolOrImageSource;\n selectedIcon?: SymbolOrImageSource;\n title?: string;\n badgeValue?: string;\n selectedLabelStyle?: NativeTabsLabelStyle;\n labelStyle?: NativeTabsLabelStyle;\n role?: NativeTabsTabBarItemRole;\n selectedIconColor?: ColorValue;\n selectedBadgeBackgroundColor?: ColorValue;\n badgeBackgroundColor?: ColorValue;\n badgeTextColor?: ColorValue;\n backgroundColor?: ColorValue;\n blurEffect?: NativeTabsBlurEffect;\n shadowColor?: ColorValue;\n iconColor?: ColorValue;\n disableTransparentOnScrollEdge?: boolean;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n selectedTitlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n indicatorColor?: ColorValue;\n hidden?: boolean;\n specialEffects?: TabsScreenProps['specialEffects'];\n nativeProps?: NativeScreenProps;\n disableAutomaticContentInsets?: boolean;\n contentStyle?: Pick<\n ViewStyle,\n | 'backgroundColor'\n | 'experimental_backgroundImage'\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingBlock'\n | 'paddingBlockEnd'\n | 'paddingBlockStart'\n | 'paddingInline'\n | 'paddingInlineEnd'\n | 'paddingInlineStart'\n | 'paddingEnd'\n | 'paddingHorizontal'\n | 'paddingVertical'\n | 'paddingStart'\n | 'alignContent'\n | 'alignItems'\n | 'justifyContent'\n | 'flexDirection'\n | 'gap'\n >;\n}\n\nexport type SymbolOrImageSource =\n | {\n /**\n * The name of the SF Symbol to use as an icon.\n * @platform iOS\n */\n sf?: SFSymbol;\n /**\n * The name of the iOS asset catalog image to use as an icon.\n * @platform iOS\n */\n xcasset?: string;\n /**\n * The name of the drawable resource to use as an icon.\n * @platform android\n */\n drawable?: string;\n }\n | {\n /**\n * The image source to use as an icon.\n */\n src?: ImageSourcePropType | Promise<ImageSourcePropType | null>;\n /**\n * Controls how the icon is rendered on iOS.\n * @platform ios\n * @default 'template'\n */\n renderingMode?: 'template' | 'original';\n };\n\nexport type NativeTabsLabelStyle = Pick<\n TextStyle,\n 'fontFamily' | 'fontSize' | 'fontStyle' | 'fontWeight' | 'color'\n>;\n\nexport const SUPPORTED_BLUR_EFFECTS = [\n 'none',\n 'systemDefault',\n 'extraLight',\n 'light',\n 'dark',\n 'regular',\n 'prominent',\n 'systemUltraThinMaterial',\n 'systemThinMaterial',\n 'systemMaterial',\n 'systemThickMaterial',\n 'systemChromeMaterial',\n 'systemUltraThinMaterialLight',\n 'systemThinMaterialLight',\n 'systemMaterialLight',\n 'systemThickMaterialLight',\n 'systemChromeMaterialLight',\n 'systemUltraThinMaterialDark',\n 'systemThinMaterialDark',\n 'systemMaterialDark',\n 'systemThickMaterialDark',\n 'systemChromeMaterialDark',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)\n */\nexport type NativeTabsBlurEffect = (typeof SUPPORTED_BLUR_EFFECTS)[number];\n\nexport interface NativeTabsProps extends PropsWithChildren {\n // #region common props\n /**\n * The style of the every tab label in the tab bar.\n */\n labelStyle?:\n | StyleProp<NativeTabsLabelStyle>\n | {\n default?: StyleProp<NativeTabsLabelStyle>;\n selected?: StyleProp<NativeTabsLabelStyle>;\n };\n /**\n * The color of every tab icon in the tab bar.\n */\n iconColor?: ColorValue | { default?: ColorValue; selected?: ColorValue };\n /**\n * The tint color of the tab icon.\n *\n * Can be overridden by icon color and label color for each tab individually.\n */\n tintColor?: ColorValue;\n /**\n * The background color of the tab bar.\n */\n backgroundColor?: ColorValue;\n /**\n * The background color of every badge in the tab bar.\n */\n badgeBackgroundColor?: ColorValue;\n /**\n * When set to `true`, hides the tab bar.\n *\n * @default false\n */\n hidden?: boolean;\n // #endregion common props\n // #region iOS props\n /**\n * Specifies the minimize behavior for the tab bar.\n *\n * Available starting from iOS 26.\n *\n * The following values are currently supported:\n *\n * - `automatic` - resolves to the system default minimize behavior\n * - `never` - the tab bar does not minimize\n * - `onScrollDown` - the tab bar minimizes when scrolling down and\n * expands when scrolling back up\n * - `onScrollUp` - the tab bar minimizes when scrolling up and expands\n * when scrolling back down\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior).\n *\n * @default automatic\n *\n * @platform iOS 26+\n */\n minimizeBehavior?: NativeTabsTabBarMinimizeBehavior;\n /**\n * The blur effect applied to the tab bar.\n *\n * @platform iOS\n */\n blurEffect?: NativeTabsBlurEffect;\n /**\n * The color of the shadow.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)\n *\n * @platform iOS\n */\n shadowColor?: ColorValue;\n /**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)\n *\n * @platform iOS\n */\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * When set to `true`, enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone.\n *\n * @platform iOS 18+\n */\n sidebarAdaptable?: boolean;\n // #endregion iOS props\n // #region android props\n /**\n * Disables the active indicator for the tab bar.\n *\n * @platform android\n */\n disableIndicator?: boolean;\n /**\n * The behavior when navigating back with the back button.\n *\n * @platform android\n */\n backBehavior?: 'none' | 'initialRoute' | 'history';\n /**\n * The visibility mode of the tab item label.\n *\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\n labelVisibilityMode?: NativeTabsTabBarItemLabelVisibilityMode;\n /**\n * The color of the ripple effect when the tab is pressed.\n *\n * @platform android\n */\n rippleColor?: ColorValue;\n /**\n * The color of the tab indicator.\n *\n * @platform android\n * @platform web\n */\n indicatorColor?: ColorValue;\n /**\n * The color of the badge text.\n *\n * @platform android\n * @platform web\n */\n badgeTextColor?: ColorValue;\n // #endregion android props\n /**\n * Listeners for navigation events on all tabs.\n *\n * Supported events:\n * - `tabPress` - called when a tab is pressed\n * - `focus` - called when the screen comes into focus\n * - `blur` - called when the screen loses focus\n *\n * @example\n * ```tsx\n * <NativeTabs\n * screenListeners={{\n * tabPress: (e) => {\n * console.log('Any tab pressed');\n * },\n * }}\n * >\n * ...\n * </NativeTabs>\n * ```\n */\n screenListeners?:\n | ScreenListeners<TabNavigationState<ParamListBase>, NativeTabNavigationEventMap>\n | ((prop: {\n route: RouteProp<ParamListBase, string>;\n }) => ScreenListeners<TabNavigationState<ParamListBase>, NativeTabNavigationEventMap>);\n}\n\nexport interface InternalNativeTabsProps extends NativeTabsProps {\n nonTriggerChildren?: React.ReactNode;\n}\nexport interface OnTabChangeEventPayload {\n /**\n * The route key of the tab the native side has just selected.\n */\n selectedKey: string;\n /**\n * The provenance value reported by the native side for this selection.\n *\n * The navigator echoes this back via `navState.provenance` on subsequent\n * JS-driven updates so the native side can distinguish stale updates from\n * fresh ones. See `TabsHostNavState` in `react-native-screens` for the full\n * contract.\n */\n provenance: number;\n // TODO(@ubax): consider renaming this field\n isNativeAction: boolean;\n}\n\nexport interface NativeTabsViewProps\n extends Omit<\n InternalNativeTabsProps,\n | 'labelStyle'\n | 'iconColor'\n | 'backgroundColor'\n | 'badgeBackgroundColor'\n | 'blurEffect'\n | 'indicatorColor'\n | 'badgeTextColor'\n > {\n focusedIndex: number;\n /**\n * Provenance counter associated with the currently rendered `focusedIndex`.\n */\n provenance: number;\n tabs: NativeTabsViewTabItem[];\n onTabChange: (event: OnTabChangeEventPayload) => void;\n}\n\nexport interface NativeTabsViewTabItem {\n options: NativeTabOptions;\n routeKey: string;\n name: string;\n contentRenderer: () => React.ReactNode;\n}\n\nexport const SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES = [\n 'auto',\n 'selected',\n 'labeled',\n 'unlabeled',\n] as const;\n\n/**\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\nexport type NativeTabsTabBarItemLabelVisibilityMode =\n (typeof SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES)[number];\n\nexport const SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS = [\n 'automatic',\n 'never',\n 'onScrollDown',\n 'onScrollUp',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)\n *\n * @platform iOS 26\n */\nexport type NativeTabsTabBarMinimizeBehavior =\n (typeof SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS)[number];\n\nexport interface NativeTabTriggerProps {\n /**\n * The name of the route.\n *\n * This is required when used inside a Layout component.\n *\n * When used in a route it has no effect.\n */\n name?: string;\n /**\n * If true, the tab will be hidden from the tab bar.\n *\n * > **Note**: Marking a tab as `hidden` means it cannot be navigated to in any way.\n *\n * > **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset.\n */\n hidden?: boolean;\n /**\n * Props passed to the underlying native tab screen implementation.\n * Use this to configure props not directly exposed by Expo Router, but available in `react-native-screens`.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform iOS\n */\n unstable_nativeProps?: NativeScreenProps;\n /**\n * If true, the tab will not pop stack to the root when selected again.\n *\n * @default false\n * @platform iOS\n */\n disablePopToTop?: boolean;\n /**\n * If true, the tab will not scroll to the top when selected again.\n * @default false\n *\n * @platform iOS\n */\n disableScrollToTop?: boolean;\n /**\n * The children of the trigger.\n *\n * Use `Icon`, `Label`, and `Badge` components to customize the tab.\n */\n children?: React.ReactNode;\n /**\n * System-provided tab bar item with predefined icon and title\n *\n * Uses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\n * standard iOS styling and localized titles. Custom `icon` or `selectedIcon`\n * properties will override the system icon, but the system-defined title cannot\n * be customized.\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem).\n * @platform ios\n */\n role?: NativeTabsTabBarItemRole;\n /**\n * The default behavior differs between iOS and Android.\n *\n * On **Android**, the content of a native tabs screen is automatically wrapped in a `SafeAreaView`,\n * and the **bottom** inset is applied. Other insets must be handled manually.\n *\n * On **iOS**, the first scroll view nested inside a native tabs screen has\n * [automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n *\n * When this property is set to `true`, automatic content inset adjustment is disabled for the screen\n * and must be managed manually. You can use `SafeAreaView` from `react-native-screens/experimental`\n * to handle safe area insets.\n *\n * @platform android\n * @platform ios\n */\n disableAutomaticContentInsets?: boolean;\n /**\n * The style applied to the content of the tab\n *\n * Note: Only certain style properties are supported.\n */\n contentStyle?: NativeTabOptions['contentStyle'];\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * When set on a trigger, it takes precedence over the value set on `NativeTabs`.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * Listeners for navigation events on this tab.\n *\n * Supported events:\n * - `tabPress` - called when this tab is pressed\n * - `focus` - called when this screen comes into focus\n * - `blur` - called when this screen loses focus\n *\n * @example\n * ```tsx\n * <NativeTabs.Trigger\n * name=\"home\"\n * listeners={{\n * tabPress: (e) => {\n * console.log('Home tab pressed');\n * },\n * }}\n * />\n * ```\n */\n listeners?:\n | ScreenListeners<NavigationState, EventMapBase>\n | ((prop: {\n route: RouteProp<ParamListBase, string>;\n }) => ScreenListeners<NavigationState, EventMapBase>);\n}\n\nconst SUPPORTED_TAB_BAR_ITEM_ROLES = [\n 'bookmarks',\n 'contacts',\n 'downloads',\n 'favorites',\n 'featured',\n 'history',\n 'more',\n 'mostRecent',\n 'mostViewed',\n 'recents',\n 'search',\n 'topRated',\n] as const;\n\nexport type NativeTabsTabBarItemRole = (typeof SUPPORTED_TAB_BAR_ITEM_ROLES)[number];\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/native-tabs/types.ts"],"names":[],"mappings":";;;AAmIa,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,eAAe;IACf,YAAY;IACZ,OAAO;IACP,MAAM;IACN,SAAS;IACT,WAAW;IACX,yBAAyB;IACzB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AAqOE,QAAA,6CAA6C,GAAG;IAC3D,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;CACH,CAAC;AAUE,QAAA,oCAAoC,GAAG;IAClD,WAAW;IACX,OAAO;IACP,cAAc;IACd,YAAY;CACJ,CAAC;AAiIX,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAC","sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { TabsHostProps, TabsScreenProps } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultRouterOptions,\n EventMapBase,\n NavigationState,\n ParamListBase,\n RouteProp,\n ScreenListeners,\n TabNavigationState,\n} from '../react-navigation/native';\n\n/**\n * Event map for `NativeTabs` navigation events.\n * Only `tabPress` is currently supported.\n */\nexport type NativeTabNavigationEventMap = {\n tabPress: { data: { __internalTabsType: 'native' }; canPreventDefault: false };\n};\n\nexport type NativeScreenProps = Partial<Omit<TabsScreenProps, 'screenKey'>>;\n\n/**\n * Props passed to the underlying tab host implementation in `react-native-screens`.\n */\nexport type NativeTabsHostNativeProps = Partial<\n Omit<TabsHostProps, 'navState' | 'onTabSelected' | 'children'>\n>;\n\nexport interface NativeTabOptions extends DefaultRouterOptions {\n icon?: SymbolOrImageSource;\n selectedIcon?: SymbolOrImageSource;\n title?: string;\n badgeValue?: string;\n selectedLabelStyle?: NativeTabsLabelStyle;\n labelStyle?: NativeTabsLabelStyle;\n role?: NativeTabsTabBarItemRole;\n selectedIconColor?: ColorValue;\n selectedBadgeBackgroundColor?: ColorValue;\n badgeBackgroundColor?: ColorValue;\n badgeTextColor?: ColorValue;\n backgroundColor?: ColorValue;\n blurEffect?: NativeTabsBlurEffect;\n shadowColor?: ColorValue;\n iconColor?: ColorValue;\n disableTransparentOnScrollEdge?: boolean;\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n selectedTitlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n indicatorColor?: ColorValue;\n hidden?: boolean;\n specialEffects?: TabsScreenProps['specialEffects'];\n nativeProps?: NativeScreenProps;\n disableAutomaticContentInsets?: boolean;\n contentStyle?: Pick<\n ViewStyle,\n | 'backgroundColor'\n | 'experimental_backgroundImage'\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingBlock'\n | 'paddingBlockEnd'\n | 'paddingBlockStart'\n | 'paddingInline'\n | 'paddingInlineEnd'\n | 'paddingInlineStart'\n | 'paddingEnd'\n | 'paddingHorizontal'\n | 'paddingVertical'\n | 'paddingStart'\n | 'alignContent'\n | 'alignItems'\n | 'justifyContent'\n | 'flexDirection'\n | 'gap'\n >;\n}\n\nexport type SymbolOrImageSource =\n | {\n /**\n * The name of the SF Symbol to use as an icon.\n * @platform iOS\n */\n sf?: SFSymbol;\n /**\n * The name of the iOS asset catalog image to use as an icon.\n * @platform iOS\n */\n xcasset?: string;\n /**\n * The name of the drawable resource to use as an icon.\n * @platform android\n */\n drawable?: string;\n }\n | {\n /**\n * The image source to use as an icon.\n */\n src?: ImageSourcePropType | Promise<ImageSourcePropType | null>;\n /**\n * Controls how the icon is rendered on iOS.\n * @platform ios\n * @default 'template'\n */\n renderingMode?: 'template' | 'original';\n };\n\nexport type NativeTabsLabelStyle = Pick<\n TextStyle,\n 'fontFamily' | 'fontSize' | 'fontStyle' | 'fontWeight' | 'color'\n>;\n\nexport const SUPPORTED_BLUR_EFFECTS = [\n 'none',\n 'systemDefault',\n 'extraLight',\n 'light',\n 'dark',\n 'regular',\n 'prominent',\n 'systemUltraThinMaterial',\n 'systemThinMaterial',\n 'systemMaterial',\n 'systemThickMaterial',\n 'systemChromeMaterial',\n 'systemUltraThinMaterialLight',\n 'systemThinMaterialLight',\n 'systemMaterialLight',\n 'systemThickMaterialLight',\n 'systemChromeMaterialLight',\n 'systemUltraThinMaterialDark',\n 'systemThinMaterialDark',\n 'systemMaterialDark',\n 'systemThickMaterialDark',\n 'systemChromeMaterialDark',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uiblureffect/style)\n */\nexport type NativeTabsBlurEffect = (typeof SUPPORTED_BLUR_EFFECTS)[number];\n\nexport interface NativeTabsProps extends PropsWithChildren {\n // #region common props\n /**\n * The style of the every tab label in the tab bar.\n */\n labelStyle?:\n | StyleProp<NativeTabsLabelStyle>\n | {\n default?: StyleProp<NativeTabsLabelStyle>;\n selected?: StyleProp<NativeTabsLabelStyle>;\n };\n /**\n * The color of every tab icon in the tab bar.\n */\n iconColor?: ColorValue | { default?: ColorValue; selected?: ColorValue };\n /**\n * The tint color of the tab icon.\n *\n * Can be overridden by icon color and label color for each tab individually.\n */\n tintColor?: ColorValue;\n /**\n * The background color of the tab bar.\n */\n backgroundColor?: ColorValue;\n /**\n * The background color of every badge in the tab bar.\n */\n badgeBackgroundColor?: ColorValue;\n /**\n * When set to `true`, hides the tab bar.\n *\n * @default false\n */\n hidden?: boolean;\n // #endregion common props\n // #region iOS props\n /**\n * Specifies the minimize behavior for the tab bar.\n *\n * Available starting from iOS 26.\n *\n * The following values are currently supported:\n *\n * - `automatic` - resolves to the system default minimize behavior\n * - `never` - the tab bar does not minimize\n * - `onScrollDown` - the tab bar minimizes when scrolling down and\n * expands when scrolling back up\n * - `onScrollUp` - the tab bar minimizes when scrolling up and expands\n * when scrolling back down\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior).\n *\n * @default automatic\n *\n * @platform iOS 26+\n */\n minimizeBehavior?: NativeTabsTabBarMinimizeBehavior;\n /**\n * The blur effect applied to the tab bar.\n *\n * @platform iOS\n */\n blurEffect?: NativeTabsBlurEffect;\n /**\n * The color of the shadow.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarappearance/shadowcolor)\n *\n * @platform iOS\n */\n shadowColor?: ColorValue;\n /**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/titlepositionadjustment)\n *\n * @platform iOS\n */\n titlePositionAdjustment?: {\n horizontal?: number;\n vertical?: number;\n };\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * When set to `true`, enables the sidebarAdaptable tab bar style on iPadOS and macOS. This prop has no effect on iPhone.\n *\n * @platform iOS 18+\n */\n sidebarAdaptable?: boolean;\n // #endregion iOS props\n // #region android props\n /**\n * Disables the active indicator for the tab bar.\n *\n * @platform android\n */\n disableIndicator?: boolean;\n /**\n * The behavior when navigating back with the back button.\n *\n * @platform android\n */\n backBehavior?: 'none' | 'initialRoute' | 'history';\n /**\n * The visibility mode of the tab item label.\n *\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\n labelVisibilityMode?: NativeTabsTabBarItemLabelVisibilityMode;\n /**\n * The color of the ripple effect when the tab is pressed.\n *\n * @platform android\n */\n rippleColor?: ColorValue;\n /**\n * The color of the tab indicator.\n *\n * @platform android\n * @platform web\n */\n indicatorColor?: ColorValue;\n /**\n * The color of the badge text.\n *\n * @platform android\n * @platform web\n */\n badgeTextColor?: ColorValue;\n // #endregion android props\n /**\n * Listeners for navigation events on all tabs.\n *\n * Supported events:\n * - `tabPress` - called when a tab is pressed\n * - `focus` - called when the screen comes into focus\n * - `blur` - called when the screen loses focus\n *\n * @example\n * ```tsx\n * <NativeTabs\n * screenListeners={{\n * tabPress: (e) => {\n * console.log('Any tab pressed');\n * },\n * }}\n * >\n * ...\n * </NativeTabs>\n * ```\n */\n screenListeners?:\n | ScreenListeners<TabNavigationState<ParamListBase>, NativeTabNavigationEventMap>\n | ((prop: {\n route: RouteProp<ParamListBase, string>;\n }) => ScreenListeners<TabNavigationState<ParamListBase>, NativeTabNavigationEventMap>);\n /**\n * Props passed to the underlying native tab host implementation in `react-native-screens`.\n * Use this to configure props that are not directly exposed by Expo Router.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform ios\n */\n unstable_nativeProps?: NativeTabsHostNativeProps;\n}\n\nexport interface InternalNativeTabsProps extends NativeTabsProps {\n nonTriggerChildren?: React.ReactNode;\n}\nexport interface OnTabChangeEventPayload {\n /**\n * The route key of the tab the native side has just selected.\n */\n selectedKey: string;\n /**\n * The provenance value reported by the native side for this selection.\n *\n * The navigator echoes this back via `navState.provenance` on subsequent\n * JS-driven updates so the native side can distinguish stale updates from\n * fresh ones. See `TabsHostNavState` in `react-native-screens` for the full\n * contract.\n */\n provenance: number;\n // TODO(@ubax): consider renaming this field\n isNativeAction: boolean;\n}\n\nexport interface NativeTabsViewProps\n extends Omit<\n InternalNativeTabsProps,\n | 'labelStyle'\n | 'iconColor'\n | 'backgroundColor'\n | 'badgeBackgroundColor'\n | 'blurEffect'\n | 'indicatorColor'\n | 'badgeTextColor'\n > {\n focusedIndex: number;\n /**\n * Provenance counter associated with the currently rendered `focusedIndex`.\n */\n provenance: number;\n tabs: NativeTabsViewTabItem[];\n onTabChange: (event: OnTabChangeEventPayload) => void;\n}\n\nexport interface NativeTabsViewTabItem {\n options: NativeTabOptions;\n routeKey: string;\n name: string;\n contentRenderer: () => React.ReactNode;\n}\n\nexport const SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES = [\n 'auto',\n 'selected',\n 'labeled',\n 'unlabeled',\n] as const;\n\n/**\n * @see [Material Components documentation](https://github.com/material-components/material-components-android/blob/master/docs/components/BottomNavigation.md#making-navigation-bar-accessible)\n *\n * @platform android\n */\nexport type NativeTabsTabBarItemLabelVisibilityMode =\n (typeof SUPPORTED_TAB_BAR_ITEM_LABEL_VISIBILITY_MODES)[number];\n\nexport const SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS = [\n 'automatic',\n 'never',\n 'onScrollDown',\n 'onScrollUp',\n] as const;\n\n/**\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbarcontroller/minimizebehavior)\n *\n * @platform iOS 26\n */\nexport type NativeTabsTabBarMinimizeBehavior =\n (typeof SUPPORTED_TAB_BAR_MINIMIZE_BEHAVIORS)[number];\n\nexport interface NativeTabTriggerProps {\n /**\n * The name of the route.\n *\n * This is required when used inside a Layout component.\n *\n * When used in a route it has no effect.\n */\n name?: string;\n /**\n * If true, the tab will be hidden from the tab bar.\n *\n * > **Note**: Marking a tab as `hidden` means it cannot be navigated to in any way.\n *\n * > **Note**: Dynamically hiding tabs will remount the navigator and the state will be reset.\n */\n hidden?: boolean;\n /**\n * Props passed to the underlying native tab screen implementation.\n * Use this to configure props not directly exposed by Expo Router, but available in `react-native-screens`.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform iOS\n */\n unstable_nativeProps?: NativeScreenProps;\n /**\n * If true, the tab will not pop stack to the root when selected again.\n *\n * @default false\n * @platform iOS\n */\n disablePopToTop?: boolean;\n /**\n * If true, the tab will not scroll to the top when selected again.\n * @default false\n *\n * @platform iOS\n */\n disableScrollToTop?: boolean;\n /**\n * The children of the trigger.\n *\n * Use `Icon`, `Label`, and `Badge` components to customize the tab.\n */\n children?: React.ReactNode;\n /**\n * System-provided tab bar item with predefined icon and title\n *\n * Uses Apple's built-in tab bar items (e.g., bookmarks, contacts, downloads) with\n * standard iOS styling and localized titles. Custom `icon` or `selectedIcon`\n * properties will override the system icon, but the system-defined title cannot\n * be customized.\n *\n * @see The supported values correspond to the official [Apple documentation](https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem).\n * @platform ios\n */\n role?: NativeTabsTabBarItemRole;\n /**\n * The default behavior differs between iOS and Android.\n *\n * On **Android**, the content of a native tabs screen is automatically wrapped in a `SafeAreaView`,\n * and the **bottom** inset is applied. Other insets must be handled manually.\n *\n * On **iOS**, the first scroll view nested inside a native tabs screen has\n * [automatic content inset adjustment](https://reactnative.dev/docs/scrollview#contentinsetadjustmentbehavior-ios) enabled\n *\n * When this property is set to `true`, automatic content inset adjustment is disabled for the screen\n * and must be managed manually. You can use `SafeAreaView` from `react-native-screens/experimental`\n * to handle safe area insets.\n *\n * @platform android\n * @platform ios\n */\n disableAutomaticContentInsets?: boolean;\n /**\n * The style applied to the content of the tab\n *\n * Note: Only certain style properties are supported.\n */\n contentStyle?: NativeTabOptions['contentStyle'];\n /**\n * When set to `true`, the tab bar will not become transparent when scrolled to the edge.\n *\n * When set on a trigger, it takes precedence over the value set on `NativeTabs`.\n *\n * @platform iOS\n */\n disableTransparentOnScrollEdge?: boolean;\n /**\n * Listeners for navigation events on this tab.\n *\n * Supported events:\n * - `tabPress` - called when this tab is pressed\n * - `focus` - called when this screen comes into focus\n * - `blur` - called when this screen loses focus\n *\n * @example\n * ```tsx\n * <NativeTabs.Trigger\n * name=\"home\"\n * listeners={{\n * tabPress: (e) => {\n * console.log('Home tab pressed');\n * },\n * }}\n * />\n * ```\n */\n listeners?:\n | ScreenListeners<NavigationState, EventMapBase>\n | ((prop: {\n route: RouteProp<ParamListBase, string>;\n }) => ScreenListeners<NavigationState, EventMapBase>);\n}\n\nconst SUPPORTED_TAB_BAR_ITEM_ROLES = [\n 'bookmarks',\n 'contacts',\n 'downloads',\n 'favorites',\n 'featured',\n 'history',\n 'more',\n 'mostRecent',\n 'mostViewed',\n 'recents',\n 'search',\n 'topRated',\n] as const;\n\nexport type NativeTabsTabBarItemRole = (typeof SUPPORTED_TAB_BAR_ITEM_ROLES)[number];\n"]}
@@ -9,7 +9,7 @@
9
9
  "publication": {
10
10
  "groupId": "expo.modules.router",
11
11
  "artifactId": "expo.modules.router",
12
- "version": "56.0.1",
12
+ "version": "56.0.3",
13
13
  "repository": "local-maven-repo"
14
14
  }
15
15
  }
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.router",
5
5
  "module": "expo.modules.router",
6
- "version": "56.0.1",
6
+ "version": "56.0.3",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,8 +24,8 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.router-56.0.1.aar",
28
- "url": "expo.modules.router-56.0.1.aar",
27
+ "name": "expo.modules.router-56.0.3.aar",
28
+ "url": "expo.modules.router-56.0.3.aar",
29
29
  "size": 15835,
30
30
  "sha512": "72b5be73401c4b0a8807373f01bd79e202212f07713d071019c24eb27227a4c8568d6148d0a48338f6955f9dbe713f56e7877d8e3fe0acec28dbb68533953d90",
31
31
  "sha256": "7c41d508ab24d199ead0eb06525957cdd227a73925863865bf2956d48cb707ef",
@@ -68,14 +68,14 @@
68
68
  "group": "io.github.lukmccall.pika",
69
69
  "module": "pika-api",
70
70
  "version": {
71
- "requires": "0.2.1-2.1.20"
71
+ "requires": "0.3.2"
72
72
  }
73
73
  }
74
74
  ],
75
75
  "files": [
76
76
  {
77
- "name": "expo.modules.router-56.0.1.aar",
78
- "url": "expo.modules.router-56.0.1.aar",
77
+ "name": "expo.modules.router-56.0.3.aar",
78
+ "url": "expo.modules.router-56.0.3.aar",
79
79
  "size": 15835,
80
80
  "sha512": "72b5be73401c4b0a8807373f01bd79e202212f07713d071019c24eb27227a4c8568d6148d0a48338f6955f9dbe713f56e7877d8e3fe0acec28dbb68533953d90",
81
81
  "sha256": "7c41d508ab24d199ead0eb06525957cdd227a73925863865bf2956d48cb707ef",
@@ -94,8 +94,8 @@
94
94
  },
95
95
  "files": [
96
96
  {
97
- "name": "expo.modules.router-56.0.1-sources.jar",
98
- "url": "expo.modules.router-56.0.1-sources.jar",
97
+ "name": "expo.modules.router-56.0.3-sources.jar",
98
+ "url": "expo.modules.router-56.0.3-sources.jar",
99
99
  "size": 2326,
100
100
  "sha512": "a1a1537b57bc0d66efbf2bdfd5f514684400b9598e549eaf53c528d1bf32ff42b7826e74fb6e115f8ec0490b9e06ffbb3c3efe9f2f703652c13291ef82b0fa03",
101
101
  "sha256": "2add0f802e663eb9b5f90e086dca0e0e337a1442e15fb372a05945e01ee0d289",
@@ -0,0 +1 @@
1
+ b6ed3e9635c58364a279f904d3102ae0795ec01435b614ef120cf4300b5a19ae
@@ -0,0 +1 @@
1
+ f365a771ee0f2d0408afaf4ca1ea02d289364ecd2e5da8e94572abdcbcad6a3b36c0f0e6e87c89f170e3f511f6104c73a1a11bb2e5997c0578e158d10d9bd82b
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>expo.modules.router</groupId>
11
11
  <artifactId>expo.modules.router</artifactId>
12
- <version>56.0.1</version>
12
+ <version>56.0.3</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.router</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -58,7 +58,7 @@
58
58
  <dependency>
59
59
  <groupId>io.github.lukmccall.pika</groupId>
60
60
  <artifactId>pika-api</artifactId>
61
- <version>0.2.1-2.1.20</version>
61
+ <version>0.3.2</version>
62
62
  <scope>runtime</scope>
63
63
  </dependency>
64
64
  </dependencies>
@@ -0,0 +1 @@
1
+ a45f195b2f98dd5c8e85548b395c6a44fcf443be3c6484a9127e3c44158a8d6c
@@ -0,0 +1 @@
1
+ 7b40f520c9d68bb9bac303b3f64a7d4e9bcc2d07db3892d1b074373926adba5ec613c943a9b51aff900a254f507439527982eb0b3e61e419e5e95c43680cddec
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.router</groupId>
4
4
  <artifactId>expo.modules.router</artifactId>
5
5
  <versioning>
6
- <latest>56.0.1</latest>
7
- <release>56.0.1</release>
6
+ <latest>56.0.3</latest>
7
+ <release>56.0.3</release>
8
8
  <versions>
9
- <version>56.0.1</version>
9
+ <version>56.0.3</version>
10
10
  </versions>
11
- <lastUpdated>20260505225001</lastUpdated>
11
+ <lastUpdated>20260506190010</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- dc19b924dca3d1226721e0bd6f0b1f9f
1
+ a0e874b8d3d064c0498a8b31cbe711f7
@@ -1 +1 @@
1
- 25204e7a43863328452e2488ed99d878e897021e
1
+ a7ece5a9177e93dbb538cbbf1eb0c83a6794f824
@@ -1 +1 @@
1
- 27e0621d72a835631008c49e180458ede92fca57ab1625ba6e8719cfee0e0b31
1
+ b2d1b8c3fd995a62decc14b9b9e70ff8cfe19bd18ec62ebc5d12eca66cb30d3d
@@ -1 +1 @@
1
- e87ab99d9d1a9584181f944ca120bcb28e91576d7ff6e3fd42bd3cb328efdbf99e823ba5b327cec4f4019b46db13b23870fb7a17b42adcd9babd575373e35730
1
+ b0556baca9ff3893d2243d0aff292ca3310c4299008b209008310e869c832b4f9896da5a56808a3f6c124f9f4138122b89cb7daf9243010cdfc1e162be3357d5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-router",
3
- "version": "56.0.1",
3
+ "version": "56.0.3",
4
4
  "description": "Expo Router is a file-based router for React Native and web applications.",
5
5
  "author": "650 Industries, Inc.",
6
6
  "license": "MIT",
@@ -73,34 +73,24 @@
73
73
  "url": "https://github.com/expo/expo/issues"
74
74
  },
75
75
  "homepage": "https://docs.expo.dev/routing/introduction/",
76
- "scripts": {
77
- "build": "node ./scripts/build.js",
78
- "clean": "expo-module clean",
79
- "lint": "expo-module lint",
80
- "test": "expo-module test",
81
- "test:rsc": "jest --config jest-rsc.config.js",
82
- "test:types": "expo-module build -p tsconfig.test.json",
83
- "prepublishOnly": "expo-module prepublishOnly",
84
- "expo-module": "expo-module"
85
- },
86
76
  "keywords": [
87
77
  "react-native",
88
78
  "expo"
89
79
  ],
90
80
  "peerDependencies": {
91
- "@expo/log-box": "56.0.1",
92
- "@expo/metro-runtime": "56.0.1",
81
+ "@expo/log-box": "56.0.3",
82
+ "@expo/metro-runtime": "^56.0.3",
93
83
  "@testing-library/react-native": ">= 13.2.0",
94
- "expo": "56.0.0-preview.2",
95
- "expo-constants": "56.0.1",
96
- "expo-linking": "56.0.0",
84
+ "expo": "*",
85
+ "expo-constants": "^56.0.3",
86
+ "expo-linking": "^56.0.2",
97
87
  "react": "*",
98
88
  "react-dom": "*",
99
89
  "react-native": "*",
100
90
  "react-native-gesture-handler": "*",
101
91
  "react-native-reanimated": "*",
102
92
  "react-native-safe-area-context": ">= 5.4.0",
103
- "react-native-screens": "~4.25.0-beta.1",
93
+ "react-native-screens": "4.25.0-beta.1",
104
94
  "react-native-web": "*",
105
95
  "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4"
106
96
  },
@@ -141,15 +131,16 @@
141
131
  "react-native-gesture-handler": "~2.30.0",
142
132
  "react-native-reanimated": "~4.3.0",
143
133
  "react-native-safe-area-context": "~5.6.2",
144
- "react-native-screens": "~4.25.0-beta.1",
134
+ "react-native-screens": "4.25.0-beta.1",
145
135
  "react-native-web": "~0.21.0",
146
136
  "react-server-dom-webpack": "~19.0.4",
147
- "tsd": "^0.33.0"
137
+ "tsd": "^0.33.0",
138
+ "expo": "56.0.0-preview.4"
148
139
  },
149
140
  "dependencies": {
150
- "@expo/metro-runtime": "56.0.1",
151
- "@expo/schema-utils": "56.0.0",
152
- "@expo/ui": "56.0.1",
141
+ "@expo/metro-runtime": "^56.0.3",
142
+ "@expo/schema-utils": "^56.0.0",
143
+ "@expo/ui": "^56.0.1",
153
144
  "@jest/globals": "^29.7.0",
154
145
  "@radix-ui/react-slot": "^1.2.0",
155
146
  "@radix-ui/react-tabs": "^1.1.12",
@@ -160,10 +151,10 @@
160
151
  "color": "^4.2.3",
161
152
  "debug": "^4.3.4",
162
153
  "escape-string-regexp": "^4.0.0",
163
- "expo-glass-effect": "56.0.1",
164
- "expo-image": "56.0.1",
165
- "expo-server": "56.0.0",
166
- "expo-symbols": "56.0.1",
154
+ "expo-glass-effect": "^56.0.3",
155
+ "expo-image": "^56.0.3",
156
+ "expo-server": "^56.0.0",
157
+ "expo-symbols": "^56.0.3",
167
158
  "fast-deep-equal": "^3.1.3",
168
159
  "invariant": "^2.2.4",
169
160
  "nanoid": "^3.3.8",
@@ -171,11 +162,20 @@
171
162
  "react-fast-compare": "^3.2.2",
172
163
  "react-is": "^19.1.0",
173
164
  "react-native-drawer-layout": "^4.2.2",
174
- "react-native-screens": "~4.25.0-beta.1",
165
+ "react-native-screens": "4.25.0-beta.1",
175
166
  "server-only": "^0.0.1",
176
167
  "sf-symbols-typescript": "^2.1.0",
177
168
  "shallowequal": "^1.1.0",
178
169
  "vaul": "^1.1.2"
179
170
  },
180
- "gitHead": "222b3b12610d69784bab6c5a188a46ea388f866a"
181
- }
171
+ "gitHead": "d2109c94206280625a070242b0cb6e2500357c46",
172
+ "scripts": {
173
+ "build": "node ./scripts/build.js",
174
+ "clean": "expo-module clean",
175
+ "lint": "expo-module lint",
176
+ "test": "expo-module test",
177
+ "test:rsc": "jest --config jest-rsc.config.js",
178
+ "test:types": "expo-module build -p tsconfig.test.json",
179
+ "expo-module": "expo-module"
180
+ }
181
+ }
@@ -1 +0,0 @@
1
- d4784e6045a057e449ad6395b66fa926077dbe06f178911f71ccc0686b9613fa
@@ -1 +0,0 @@
1
- 7efa2198ce896134856abda2757032c918b1023b0f1e397ee426077af764d74d5bc7335115afc8bf667dff98e791d7765a8a061ee8fc638fb9fb738626fa9651
@@ -1 +0,0 @@
1
- 6ad8e55ce4307424557deff3fd8bf4cff3c7c5b0884e5c3d2ab10fb674986981
@@ -1 +0,0 @@
1
- f651c905d338cd50fbd7990d8a64263f768dbc6d7a7c9d196fe48003737218130baeb51449f7df8ba9535387ab8112f27f4d8801a145a2c1e23f304d32743364
@@ -1,3 +0,0 @@
1
- import { Props } from './withRouter';
2
-
3
- export default (props: Props = {}): [string, Props] => ['expo-router', props];
@@ -1,79 +0,0 @@
1
- import { validate } from '@expo/schema-utils';
2
- import { ConfigPlugin, withInfoPlist, withPodfile } from 'expo/config-plugins';
3
-
4
- const schema = require('../options.json');
5
-
6
- const withExpoHeadIos: ConfigPlugin = (config) => {
7
- return withInfoPlist(config, (config) => {
8
- // TODO: Add a way to enable this...
9
- // config.modResults.CoreSpotlightContinuation = true;
10
-
11
- // $(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route
12
- if (!Array.isArray(config.modResults.NSUserActivityTypes)) {
13
- config.modResults.NSUserActivityTypes = [];
14
- }
15
- // This ensures that stored `NSUserActivityType`s can be opened in-app.
16
- // This is important for moving between native devices or from opening a link that was saved
17
- // in a Quick Note or Siri Reminder.
18
- const activityType = '$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route';
19
- if (!config.modResults.NSUserActivityTypes.includes(activityType)) {
20
- config.modResults.NSUserActivityTypes.push(activityType);
21
- }
22
- return config;
23
- });
24
- };
25
-
26
- const withGammaScreens: ConfigPlugin = (config) => {
27
- return withPodfile(config, (config) => {
28
- if (!config.modResults.contents.includes('RNS_GAMMA_ENABLED')) {
29
- config.modResults.contents = `# Set by expo-router. This enables Fabric-only features from react-native-screens\nENV['RNS_GAMMA_ENABLED'] ||= '1'\n${config.modResults.contents}`;
30
- }
31
- return config;
32
- });
33
- };
34
-
35
- export type Props = {
36
- /** Production origin URL where assets in the public folder are hosted. The fetch function is polyfilled to support relative requests from this origin in production, development origin is inferred using the Expo CLI development server. */
37
- origin?: string;
38
- /** A more specific origin URL used in the `expo-router/head` module for iOS handoff. Defaults to `origin`. */
39
- headOrigin?: string;
40
- /** Should Async Routes be enabled. `production` is currently web-only and will be disabled on native. */
41
- root?: string;
42
- /** Should Async Routes be enabled, currently only `development` is supported. */
43
- asyncRoutes?: string | { android?: string; ios?: string; web?: string; default?: string };
44
- /** Should the sitemap be generated. Defaults to `true` */
45
- sitemap?: boolean;
46
- /** Generate partial typed routes */
47
- partialTypedGroups?: boolean;
48
- /** A list of headers that are set on every route response from the server */
49
- headers?: Record<string, string | string[]>;
50
- /** Enable experimental server middleware support with a `+middleware.ts` file. Requires `web.output: 'server'` to be set in app config. */
51
- unstable_useServerMiddleware?: boolean;
52
- /** Enable experimental data loader support. Requires `web.output: 'static'` to be set in app config. */
53
- unstable_useServerDataLoaders?: boolean;
54
- /** Enable experimental server-side rendering. When enabled with `web.output: 'server'`, HTML is rendered at request time instead of being pre-rendered at build time. */
55
- unstable_useServerRendering?: boolean;
56
- /** Enable automatic app rerender on color scheme changes. Defaults to `true`. */
57
- adaptiveColors?: boolean;
58
- };
59
-
60
- const withRouter: ConfigPlugin<Props | void> = (config, _props) => {
61
- const props = _props || {};
62
- validate(schema, props);
63
-
64
- withExpoHeadIos(config);
65
- withGammaScreens(config);
66
-
67
- return {
68
- ...config,
69
- extra: {
70
- ...config.extra,
71
- router: {
72
- ...config.extra?.router,
73
- ...props,
74
- },
75
- },
76
- };
77
- };
78
-
79
- export default withRouter;