/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ export type ReactNode = | React$Element | ReactPortal | ReactText | ReactFragment | ReactProvider | ReactConsumer; export type ReactEmpty = null | void | boolean; export type ReactFragment = ReactEmpty | Iterable; export type ReactNodeList = ReactEmpty | React$Node; export type ReactText = string | number; export type ReactProvider = { $$typeof: Symbol | number, type: ReactProviderType, key: null | string, ref: null, props: { value: T, children?: ReactNodeList, ... }, ... }; export type ReactProviderType = { $$typeof: Symbol | number, _context: ReactContext, ... }; export type ReactConsumer = { $$typeof: Symbol | number, type: ReactContext, key: null | string, ref: null, props: { children: (value: T) => ReactNodeList, ... }, ... }; export type ReactContext = { $$typeof: Symbol | number, Consumer: ReactContext, Provider: ReactProviderType, _currentValue: T, _currentValue2: T, _threadCount: number, // DEV only _currentRenderer?: Object | null, _currentRenderer2?: Object | null, // This value may be added by application code // to improve DEV tooling display names displayName?: string, ... }; export type ReactPortal = { $$typeof: Symbol | number, key: null | string, containerInfo: any, children: ReactNodeList, // TODO: figure out the API for cross-renderer implementation. implementation: any, ... }; export type RefObject = {| current: any, |}; export type ReactScope = {| $$typeof: Symbol | number, |}; export type ReactScopeQuery = ( type: string, props: {[string]: mixed, ...}, instance: mixed, ) => boolean; export type ReactScopeInstance = {| DO_NOT_USE_queryAllNodes(ReactScopeQuery): null | Array, DO_NOT_USE_queryFirstNode(ReactScopeQuery): null | Object, containsNode(Object): boolean, getChildContextValues: (context: ReactContext) => Array, |}; // The subset of a Thenable required by things thrown by Suspense. // This doesn't require a value to be passed to either handler. export interface Wakeable { then(onFulfill: () => mixed, onReject: () => mixed): void | Wakeable; } // The subset of a Promise that React APIs rely on. This resolves a value. // This doesn't require a return value neither from the handler nor the // then function. export interface Thenable<+R> { then( onFulfill: (value: R) => void | Thenable | U, onReject: (error: mixed) => void | Thenable | U, ): void | Thenable; } export type OffscreenMode = | 'hidden' | 'unstable-defer-without-hiding' | 'visible';