1/**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @format
8 */
9
10import type * as React from 'react';
11import {ColorValue} from '../../StyleSheet/StyleSheet';
12
13export type StatusBarStyle = 'default' | 'light-content' | 'dark-content';
14
15export type StatusBarAnimation = 'none' | 'fade' | 'slide';
16
17export interface StatusBarPropsIOS {
18  /**
19   * If the network activity indicator should be visible.
20   *
21   * @platform ios
22   */
23  networkActivityIndicatorVisible?: boolean | undefined;
24
25  /**
26   * The transition effect when showing and hiding the status bar using
27   * the hidden prop. Defaults to 'fade'.
28   *
29   * @platform ios
30   */
31  showHideTransition?: null | 'fade' | 'slide' | 'none' | undefined;
32}
33
34export interface StatusBarPropsAndroid {
35  /**
36   * The background color of the status bar.
37   *
38   * @platform android
39   */
40  backgroundColor?: ColorValue | undefined;
41
42  /**
43   * If the status bar is translucent. When translucent is set to true,
44   * the app will draw under the status bar. This is useful when using a
45   * semi transparent status bar color.
46   *
47   * @platform android
48   */
49  translucent?: boolean | undefined;
50}
51
52export interface StatusBarProps
53  extends StatusBarPropsIOS,
54    StatusBarPropsAndroid {
55  /**
56   * If the transition between status bar property changes should be
57   * animated. Supported for backgroundColor, barStyle and hidden.
58   */
59  animated?: boolean | undefined;
60
61  /**
62   * Sets the color of the status bar text.
63   */
64  barStyle?: null | StatusBarStyle | undefined;
65
66  /**
67   * If the status bar is hidden.
68   */
69  hidden?: boolean | undefined;
70}
71
72export class StatusBar extends React.Component<StatusBarProps> {
73  /**
74   * The current height of the status bar on the device.
75   * @platform android
76   */
77  static currentHeight?: number | undefined;
78
79  /**
80   * Show or hide the status bar
81   * @param hidden The dialog's title.
82   * @param animation Optional animation when
83   *    changing the status bar hidden property.
84   */
85  static setHidden: (hidden: boolean, animation?: StatusBarAnimation) => void;
86
87  /**
88   * Set the status bar style
89   * @param style Status bar style to set
90   * @param animated Animate the style change.
91   */
92  static setBarStyle: (style: StatusBarStyle, animated?: boolean) => void;
93
94  /**
95   * Control the visibility of the network activity indicator
96   * @param visible Show the indicator.
97   */
98  static setNetworkActivityIndicatorVisible: (visible: boolean) => void;
99
100  /**
101   * Set the background color for the status bar
102   * @param color Background color.
103   * @param animated Animate the style change.
104   */
105  static setBackgroundColor: (color: ColorValue, animated?: boolean) => void;
106
107  /**
108   * Control the translucency of the status bar
109   * @param translucent Set as translucent.
110   */
111  static setTranslucent: (translucent: boolean) => void;
112
113  /**
114   * Push a StatusBar entry onto the stack.
115   * The return value should be passed to `popStackEntry` when complete.
116   *
117   * @param props Object containing the StatusBar props to use in the stack entry.
118   */
119  static pushStackEntry: (props: StatusBarProps) => StatusBarProps;
120
121  /**
122   * Pop a StatusBar entry from the stack.
123   *
124   * @param entry Entry returned from `pushStackEntry`.
125   */
126  static popStackEntry: (entry: StatusBarProps) => void;
127
128  /**
129   * Replace an existing StatusBar stack entry with new props.
130   *
131   * @param entry Entry returned from `pushStackEntry` to replace.
132   * @param props Object containing the StatusBar props to use in the replacement stack entry.
133   */
134  static replaceStackEntry: (
135    entry: StatusBarProps,
136    props: StatusBarProps,
137  ) => StatusBarProps;
138}
139