@apexnative/navigation 1.0.0-alpha.1 → 1.0.0-alpha.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 (163) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +147 -51
  3. package/android/CLAUDE.md +31 -6
  4. package/android/CORE.md +7 -2
  5. package/android/RECIPES.md +4 -3
  6. package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +29 -1
  7. package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +7 -3
  8. package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +5 -4
  9. package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +75 -60
  10. package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +3 -2
  11. package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +1 -1
  12. package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +5 -4
  13. package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +7 -6
  14. package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +3 -35
  15. package/android/src/main/java/dev/apexnative/navigation/react/events/EventContract.kt +226 -0
  16. package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +101 -87
  17. package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +0 -6
  18. package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +3 -3
  19. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +13 -5
  20. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +76 -13
  21. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +3 -3
  22. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +28 -7
  23. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +1 -1
  24. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +22 -24
  25. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +86 -16
  26. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +21 -6
  27. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +41 -23
  28. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +24 -20
  29. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetStops.kt +25 -0
  30. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +4 -0
  31. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +42 -4
  32. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +29 -6
  33. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +2 -0
  34. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +3 -3
  35. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +3 -0
  36. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +5 -3
  37. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +4 -7
  38. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +16 -7
  39. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +8 -1
  40. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +16 -2
  41. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/BackPreview.kt +287 -0
  42. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +148 -6
  43. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +24 -0
  44. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +51 -11
  45. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +26 -8
  46. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +105 -2
  47. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +123 -8
  48. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +19 -0
  49. package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +29 -11
  50. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +5 -5
  51. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStep.kt +31 -0
  52. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +85 -27
  53. package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +5 -4
  54. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +9 -6
  55. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionViews.kt +100 -0
  56. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +45 -1
  57. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +3 -5
  58. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +3 -5
  59. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +3 -5
  60. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +2 -0
  61. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +4 -6
  62. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +4 -6
  63. package/android/src/main/java/dev/apexnative/navigation/views/stack/ScreenEdge.kt +15 -0
  64. package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +137 -1
  65. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +8 -1
  66. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +26 -4
  67. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +4 -3
  68. package/cli/app.js +1 -1
  69. package/cli/project.js +6 -2
  70. package/cli/setup/index.js +13 -0
  71. package/cli/setup/steps/appDelegate.js +66 -11
  72. package/cli/setup/steps/sceneDelegate.js +108 -0
  73. package/docs-md/architecture/transitions.md +7 -1
  74. package/docs-md/containers/modals.md +4 -2
  75. package/docs-md/containers/overlays.md +3 -1
  76. package/docs-md/containers/side-menu.md +4 -2
  77. package/docs-md/containers/tabs.md +2 -0
  78. package/docs-md/flows/forms-in-a-modal.md +1 -1
  79. package/docs-md/guides/deep-links.md +15 -33
  80. package/docs-md/help/glossary.md +1 -1
  81. package/docs-md/index.json +8 -0
  82. package/docs-md/screen-ui/back-and-gestures.md +6 -0
  83. package/docs-md/screen-ui/system-ui.md +1 -1
  84. package/docs-md/start/installation.md +1 -0
  85. package/ios/Animations/ANNTransitionAnimator.mm +13 -11
  86. package/ios/Animations/ANNTransitionWait.mm +6 -7
  87. package/ios/Animations/Elements/ANNElementFinder.h +57 -0
  88. package/ios/Animations/Elements/ANNElementFinder.mm +174 -2
  89. package/ios/Animations/Elements/ANNElementTransition.h +7 -5
  90. package/ios/Animations/Elements/ANNElementTransition.mm +17 -19
  91. package/ios/Animations/Elements/ANNSharedElementFlight.h +13 -8
  92. package/ios/Animations/Elements/ANNSharedElementFlight.mm +59 -24
  93. package/ios/CLAUDE.md +10 -2
  94. package/ios/CORE.md +3 -2
  95. package/ios/Contract/ANNCommandAnswer.h +4 -3
  96. package/ios/Contract/ANNCommandAnswer.mm +12 -2
  97. package/ios/Contract/ANNCommandRunner.h +2 -2
  98. package/ios/Contract/ANNCommandRunner.mm +1 -1
  99. package/ios/Contract/ANNErrorTexts.h +6 -2
  100. package/ios/Contract/ANNErrorTexts.mm +18 -10
  101. package/ios/Core/ANNDeepLinkQueue.h +20 -1
  102. package/ios/Core/ANNDeepLinkQueue.mm +107 -12
  103. package/ios/Core/ANNErrorHandler.h +8 -3
  104. package/ios/Core/ANNErrorHandler.mm +17 -1
  105. package/ios/Core/ANNEventContract.h +246 -0
  106. package/ios/Core/ANNEventContract.mm +225 -0
  107. package/ios/Core/ANNEventEmitter.h +5 -1
  108. package/ios/Core/ANNEventEmitter.mm +117 -80
  109. package/ios/Core/ANNHinge.mm +6 -4
  110. package/ios/Core/ANNSceneDelegate.mm +25 -15
  111. package/ios/Core/ANNSystemUI.h +3 -2
  112. package/ios/Core/ANNSystemUI.mm +7 -0
  113. package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +6 -4
  114. package/ios/Layouts/Modal/ANNModalCoordinator.mm +1 -1
  115. package/ios/Layouts/Modal/ANNModalPresentation.h +8 -5
  116. package/ios/Layouts/Modal/ANNModalPresentation.mm +12 -12
  117. package/ios/Layouts/Modal/ANNSheetPresenter.mm +83 -1
  118. package/ios/Layouts/Root/ANNRootCoordinator.mm +12 -3
  119. package/ios/Layouts/Screen/ANNComponentPresenter.h +11 -3
  120. package/ios/Layouts/Screen/ANNComponentPresenter.mm +34 -6
  121. package/ios/Layouts/Screen/ANNComponentViewController.mm +28 -7
  122. package/ios/Layouts/Screen/ANNNativeScreenContext.mm +7 -5
  123. package/ios/Layouts/Screen/ANNScreenInsets.mm +6 -4
  124. package/ios/Layouts/Screen/ANNScreenRegions.mm +9 -6
  125. package/ios/Layouts/SplitView/ANNSplitViewController.mm +4 -7
  126. package/ios/Options/ANNSheetOptions.h +4 -1
  127. package/ios/Public/ApexNavigation/ANNSceneDelegate.h +3 -0
  128. package/ios/RECIPES.md +2 -1
  129. package/ios/TurboModules/ANNTurboEventEmitter.mm +4 -35
  130. package/ios/TurboModules/ANNTurboModule.mm +5 -2
  131. package/lib/module/ARCHITECTURE.md +7 -4
  132. package/lib/module/api/app/createNavigation.js +2 -0
  133. package/lib/module/api/app/createNavigation.js.map +1 -1
  134. package/lib/module/api/hooks/useNavigation.js +8 -3
  135. package/lib/module/api/hooks/useNavigation.js.map +1 -1
  136. package/lib/module/api/linking/dispatchedLinks.js +23 -0
  137. package/lib/module/api/linking/dispatchedLinks.js.map +1 -0
  138. package/lib/module/interfaces/contract/errors.json +275 -0
  139. package/lib/typescript/api/app/createNavigation.d.ts.map +1 -1
  140. package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -1
  141. package/lib/typescript/api/linking/dispatchedLinks.d.ts +7 -0
  142. package/lib/typescript/api/linking/dispatchedLinks.d.ts.map +1 -0
  143. package/lib/typescript/interfaces/Events.d.ts +9 -0
  144. package/lib/typescript/interfaces/Events.d.ts.map +1 -1
  145. package/lib/typescript/interfaces/options/animations.d.ts +27 -18
  146. package/lib/typescript/interfaces/options/animations.d.ts.map +1 -1
  147. package/lib/typescript/interfaces/options/modals.d.ts +33 -24
  148. package/lib/typescript/interfaces/options/modals.d.ts.map +1 -1
  149. package/lib/typescript/interfaces/options/sideMenu.d.ts +7 -6
  150. package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -1
  151. package/lib/typescript/interfaces/options/system.d.ts +10 -6
  152. package/lib/typescript/interfaces/options/system.d.ts.map +1 -1
  153. package/package.json +1 -1
  154. package/src/ARCHITECTURE.md +7 -4
  155. package/src/api/app/createNavigation.ts +2 -0
  156. package/src/api/hooks/useNavigation.ts +8 -3
  157. package/src/api/linking/dispatchedLinks.ts +18 -0
  158. package/src/interfaces/Events.ts +10 -0
  159. package/src/interfaces/contract/errors.json +275 -0
  160. package/src/interfaces/options/animations.ts +27 -18
  161. package/src/interfaces/options/modals.ts +33 -24
  162. package/src/interfaces/options/sideMenu.ts +7 -6
  163. package/src/interfaces/options/system.ts +10 -6
@@ -3,21 +3,25 @@
3
3
  * `'overCurrentContext'`, `'currentContext'` or `'popover'`. It is read once, when the modal shows, from the modal's
4
4
  * final options; `mergeOptions` afterwards doesn't change it, and neither does a change of theme or a rotation. Without
5
5
  * it the platform decides: on iOS the automatic style of UIKit (a sheet on iPhone, a card on iPad), on Android the
6
- * whole screen. An unknown string shows a full-screen modal on iOS and counts as not set on Android.
6
+ * whole screen, or the Material bottom sheet when `modal.sheet` is set. An unknown string shows a full-screen modal on
7
+ * iOS and counts as not set on Android.
7
8
  *
8
- * - `'pageSheet'`: (iOS) a sheet that leaves the screen below visible and pushed back; on iPad a wide card. Android
9
- * shows the whole screen, or the Material bottom sheet when `modal.sheet` is set.
10
- * - `'formSheet'`: (iOS) a sheet on iPhone, a card in the middle on iPad whose size is `modal.contentSize`. Android
11
- * shows the whole screen, or the bottom sheet when `modal.sheet` is set.
12
- * - `'fullScreen'`, `'currentContext'`: the whole screen; the screen below is taken off. Both platforms treat the two
13
- * alike.
14
- * - `'overFullScreen'`, `'overCurrentContext'`: the whole screen with the screen below kept in place. It shows
15
- * through only where the modal screen is transparent (`layout.backgroundColor` and `layout.componentBackgroundColor`
16
- * both `'transparent'`); the style does not make anything transparent by itself.
9
+ * - `'pageSheet'`: a sheet that leaves the screen below visible. On iOS the screen below is pushed back, and on iPad
10
+ * the sheet is a wide card. On Android it is the Material modal bottom sheet over a dimmed screen, at the full height
11
+ * under the status bar (`modal.sheet` changes its stops), at most 640 dp wide and in the middle of a wider window.
12
+ * - `'formSheet'`: on iOS a sheet on iPhone, a card in the middle on iPad whose size is `modal.contentSize`. On Android
13
+ * the same bottom sheet as `'pageSheet'`; `modal.contentSize` does nothing there.
14
+ * - `'fullScreen'`, `'currentContext'`: the whole screen; the screen below is taken off once the modal has come in.
15
+ * Both platforms treat the two alike. The modal comes up from the bottom: on Android with the system's motion of a
16
+ * window over another (300 ms up, 250 ms down), without a fade.
17
+ * - `'overFullScreen'`, `'overCurrentContext'`: the same, with the screen below kept in place under the modal. It
18
+ * shows through only where the modal screen is transparent (`layout.backgroundColor` and
19
+ * `layout.componentBackgroundColor` both `'transparent'`); the style does not make anything transparent by itself.
17
20
  * - `'popover'`: (iOS) a popover with an arrow on iPad, a sheet on iPhone unless `modal.popover.adaptive` is `false`.
18
- * Android has no popovers and shows the whole screen.
21
+ * Android has no popovers and shows the bottom sheet of `'pageSheet'`.
19
22
  *
20
- * The options of the sheet (`modal.sheet`) apply with `'pageSheet'`, `'formSheet'` and without a style.
23
+ * The options of the sheet (`modal.sheet`) apply with `'pageSheet'`, `'formSheet'` and without a style, and on
24
+ * Android with `'popover'` too.
21
25
  */
22
26
  export type OptionsModalPresentationStyle =
23
27
  | 'pageSheet'
@@ -32,9 +36,11 @@ export type OptionsModalPresentationStyle =
32
36
  * (iOS) The system transition a modal comes and goes with: `'coverVertical'` (from below), `'crossDissolve'` (a fade),
33
37
  * `'flipHorizontal'` (a flip) or `'partialCurl'`. It is read when the modal shows and doesn't change afterwards;
34
38
  * `animations.showModal` with values of its own, and the zoom of iOS 18, go over it. UIKit flips only a modal over the
35
- * whole screen (`'fullScreen'`, `'overFullScreen'`): a sheet comes in as usual and flips only on its way out, and
36
- * `'partialCurl'` is accepted by UIKit only for a full-screen modal. An unknown string means `'coverVertical'`. Android
37
- * doesn't read it.
39
+ * whole screen (`'fullScreen'`, `'overFullScreen'`): a sheet comes in as usual and flips only on its way out. UIKit
40
+ * curls only a `'fullScreen'` modal over a screen that fills the window, so `'partialCurl'` with any other
41
+ * `modalPresentationStyle` (or without one), or over a modal that doesn't fill the screen, shows as `'coverVertical'`.
42
+ * A modal shown with `'partialCurl'` can't show another modal over it: that `showModal` rejects. An unknown string
43
+ * means `'coverVertical'`. Android doesn't read it.
38
44
  */
39
45
  export type OptionsModalTransitionStyle =
40
46
  'coverVertical' | 'crossDissolve' | 'flipHorizontal' | 'partialCurl';
@@ -53,24 +59,27 @@ export type OptionsModalSheetDetent = 'medium' | 'large' | 'content' | number;
53
59
  /**
54
60
  * The settings of a sheet: a modal that comes from below and rests on one of several heights, its stops (detents). On
55
61
  * iOS they configure the system sheet of a modal presented as `'pageSheet'`, `'formSheet'` or without a style. On
56
- * Android any one of them turns the modal into a Material bottom sheet, again for those styles only. They are read when
62
+ * Android they configure the Material bottom sheet of `'pageSheet'`, `'formSheet'` and `'popover'`, and without a style
63
+ * any one of them turns the modal into that sheet. They are read when
57
64
  * the modal shows, and a `mergeOptions` on any screen of the modal changes them while it is shown, with an animation.
58
65
  * Objects merge key by key; `detents` is replaced as a whole.
59
66
  */
60
67
  export interface OptionsModalSheet {
61
68
  /**
62
- * The stops the sheet can rest on, and the user drags it between. On Android they are sorted by height and repeats
63
- * dropped; the Material sheet has three resting places at most: the lowest stop of the list, the highest, and
64
- * `'medium'` between them when the list has both `'medium'` and `'large'`. A stop without a place is dropped. On iOS
65
- * the stops are handed to UIKit in the order given, which wants them from the lowest to the highest; a list left
66
- * empty by unsupported values gives `['large']`.
69
+ * The stops the sheet can rest on, and the user drags it between, in any order: on both platforms they are sorted by
70
+ * height and repeats dropped. On iOS `'medium'` counts as half of `'large'` there, and `'content'` takes its place by
71
+ * the height of the content, again whenever that changes; a list left empty by unsupported values gives
72
+ * `['large']`. On Android the Material sheet has three resting places at most: the lowest stop of the list, the
73
+ * highest, and `'medium'` between them when the list has both `'medium'` and `'large'`. A stop without a place is
74
+ * dropped.
67
75
  * @default ['large']
68
76
  */
69
77
  detents?: OptionsModalSheetDetent[];
70
78
  /**
71
- * The stop the sheet opens on; a new value in `mergeOptions` moves the sheet there with an animation, and doesn't
72
- * send `sheetDetentChanged`. A value that isn't among `detents` opens on the lowest stop on iOS and is ignored on
73
- * Android.
79
+ * The stop the sheet opens on; a `mergeOptions` that names it moves the sheet there with an animation, and doesn't
80
+ * send `sheetDetentChanged`. Nothing else moves the sheet off the stop it stands at, the one the user dragged it to
81
+ * included: a `mergeOptions` without it, a new layout or new content. A value that isn't among `detents` opens on
82
+ * the lowest stop on iOS and is ignored on Android.
74
83
  * Without it, the lowest stop.
75
84
  */
76
85
  selectedDetent?: OptionsModalSheetDetent;
@@ -18,8 +18,8 @@ export interface SideMenuSide {
18
18
  visible?: boolean;
19
19
  /**
20
20
  * Whether the opening or closing that `visible` asks for is animated. With `false` it happens at once and the
21
- * screens of the menu get the same appearance events in the same order, except that on Android a menu that opens at
22
- * once sends its screens DidAppear without WillAppear. It acts only together with `visible` in the same merge.
21
+ * screens of the menu get the same appearance events in the same order: WillAppear, then DidAppear. It acts only
22
+ * together with `visible` in the same merge.
23
23
  * @default true
24
24
  */
25
25
  animate?: boolean;
@@ -32,15 +32,16 @@ export interface SideMenuSide {
32
32
  enabled?: boolean;
33
33
  /**
34
34
  * The width of the menu, in points on iOS and dp on Android. It is capped at the width of the side menu (iOS) and at
35
- * that width less 64 dp (Android). On iOS a change applies at once, also to an open menu. On Android it applies the
36
- * next time a screen in the side menu appears, the center's or a menu's.
35
+ * that width less 64 dp (Android). A change in `mergeOptions` applies at once, also to an open menu. A width set by
36
+ * a screen of the center acts while that screen shows.
37
37
  * Without it, 280 points on iOS and the width of the side menu less 64 dp on Android (the least gap the Material
38
38
  * drawer leaves).
39
39
  */
40
40
  width?: number;
41
41
  /**
42
- * (Android) The height of the menu in dp; a menu lower than the container is pinned to the top. It is read only when
43
- * the side menu is created. Without it, the menu takes the full height under the status bar. iOS doesn't read it.
42
+ * (Android) The height of the menu in dp; a menu lower than the container is pinned to the top. A change in
43
+ * `mergeOptions` applies at once, also to an open menu. Without it, the menu takes the full height under the status
44
+ * bar. iOS doesn't read it.
44
45
  */
45
46
  height?: number;
46
47
  /**
@@ -46,8 +46,9 @@ export interface OptionsLayout {
46
46
  * The color of the screen, also under its React content. On iOS it is the background of the screen's view (the
47
47
  * system background without it); stacks, tabs and side menus paint their view with the color of the screen that
48
48
  * shows, seen behind transparent bars and around screens during transitions. On Android it fills the screen and
49
- * its containers but leaves room at the top for the status bar while it shows. `null` makes the background
50
- * transparent. Without it, Android shows the window's background (the app theme).
49
+ * its containers but leaves room at the top for the status bar while it shows; without it a React screen takes
50
+ * `android:colorBackground` of the app's theme (in a sheet it shows the sheet's surface, and a native screen paints
51
+ * its own view), so the screen below never shows through. `null` makes the background transparent.
51
52
  */
52
53
  backgroundColor?: Color;
53
54
  /**
@@ -152,7 +153,9 @@ export interface OptionsStatusBar {
152
153
  * and buttons sits below the bar), and a screen without a top bar starts below the bar. `true` lets a screen without
153
154
  * a top bar start at the top of the window, with its safe area keeping content below. `false` starts the top bar
154
155
  * below the status bar, which keeps its own color. A sheet modal has no status bar above it, so this does not apply
155
- * there. On iOS the screen is always under the status bar and the safe area keeps the content below.
156
+ * there. An overlay covers the whole window, so its screens go under the status bar without it (a dimmed backdrop
157
+ * dims the status bar too), and `false`, in its options or in the default options, starts them below. On iOS the
158
+ * screen is always under the status bar and the safe area keeps the content below.
156
159
  */
157
160
  drawBehind?: boolean;
158
161
  /**
@@ -177,9 +180,10 @@ export interface OptionsStatusBar {
177
180
  */
178
181
  hideWithTopBar?: boolean;
179
182
  /**
180
- * (iOS) Whether a blur shows under the status bar, drawn over the screen in the frame the status bar has when the
181
- * option applies. It applies when the screen appears and through `mergeOptions`; `false` removes it. The blur does
182
- * not follow a rotation or a change of window size.
183
+ * (iOS) Whether a blur shows under the status bar, drawn over the screen in the status bar's frame. It applies when
184
+ * the screen appears and through `mergeOptions`; `false` removes it. The blur follows the status bar's frame as it
185
+ * changes: a rotation, a new window size, the status bar hidden or shown. Android has no blur under the status bar,
186
+ * so it does nothing there.
183
187
  * @default false
184
188
  */
185
189
  blur?: boolean;