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 {ViewProps} from '../Components/View/ViewPropTypes';
12import {NativeSyntheticEvent} from '../Types/CoreEventTypes';
13
14export interface ModalBaseProps {
15  /**
16   * @deprecated Use animationType instead
17   */
18  animated?: boolean | undefined;
19  /**
20   * The `animationType` prop controls how the modal animates.
21   *
22   * - `slide` slides in from the bottom
23   * - `fade` fades into view
24   * - `none` appears without an animation
25   */
26  animationType?: 'none' | 'slide' | 'fade' | undefined;
27  /**
28   * The `transparent` prop determines whether your modal will fill the entire view.
29   * Setting this to `true` will render the modal over a transparent background.
30   */
31  transparent?: boolean | undefined;
32  /**
33   * The `visible` prop determines whether your modal is visible.
34   */
35  visible?: boolean | undefined;
36  /**
37   * The `onRequestClose` callback is called when the user taps the hardware back button on Android or the menu button on Apple TV.
38   *
39   * This is required on Apple TV and Android.
40   */
41  onRequestClose?: ((event: NativeSyntheticEvent<any>) => void) | undefined;
42  /**
43   * The `onShow` prop allows passing a function that will be called once the modal has been shown.
44   */
45  onShow?: ((event: NativeSyntheticEvent<any>) => void) | undefined;
46}
47
48export interface ModalPropsIOS {
49  /**
50   * The `presentationStyle` determines the style of modal to show
51   */
52  presentationStyle?:
53    | 'fullScreen'
54    | 'pageSheet'
55    | 'formSheet'
56    | 'overFullScreen'
57    | undefined;
58
59  /**
60   * The `supportedOrientations` prop allows the modal to be rotated to any of the specified orientations.
61   * On iOS, the modal is still restricted by what's specified in your app's Info.plist's UISupportedInterfaceOrientations field.
62   */
63  supportedOrientations?:
64    | Array<
65        | 'portrait'
66        | 'portrait-upside-down'
67        | 'landscape'
68        | 'landscape-left'
69        | 'landscape-right'
70      >
71    | undefined;
72
73  /**
74   * The `onDismiss` prop allows passing a function that will be called once the modal has been dismissed.
75   */
76  onDismiss?: (() => void) | undefined;
77
78  /**
79   * The `onOrientationChange` callback is called when the orientation changes while the modal is being displayed.
80   * The orientation provided is only 'portrait' or 'landscape'. This callback is also called on initial render, regardless of the current orientation.
81   */
82  onOrientationChange?:
83    | ((event: NativeSyntheticEvent<any>) => void)
84    | undefined;
85}
86
87export interface ModalPropsAndroid {
88  /**
89   *  Controls whether to force hardware acceleration for the underlying window.
90   */
91  hardwareAccelerated?: boolean | undefined;
92
93  /**
94   *  Determines whether your modal should go under the system statusbar.
95   */
96  statusBarTranslucent?: boolean | undefined;
97}
98
99export type ModalProps = ModalBaseProps &
100  ModalPropsIOS &
101  ModalPropsAndroid &
102  ViewProps;
103
104export class Modal extends React.Component<ModalProps> {}
105