import React from "react";
import Realm, { App } from "realm";
import { RestrictivePick } from "./helpers";
/** Mutually exclusive props for the AppProvider component when using a {@link Realm.AppConfiguration} */
type AppProviderWithConfigurationProps = Omit<Realm.AppConfiguration, "app"> & {
    /**
     * A ref to the App instance. This is useful if you need to access the App
     * instance outside of a component that uses the App hooks.
     */
    appRef?: React.MutableRefObject<Realm.App | null>;
    children: React.ReactNode;
};
/** Props the AppProvider component when using an existing {@link Realm.App} instance */
type AppProviderWithAppProps = {
    app: Realm.App;
    children: React.ReactNode;
};
/** Combined props for the AppProvider component, used when defining mutually exclusive props */
type AppProviderProps = AppProviderWithAppProps & AppProviderWithConfigurationProps;
/** Mutually exclusive props for the AppProvider component when using an existing {@link Realm.App} instance */
type DynamicAppProviderWithAppProps = RestrictivePick<AppProviderProps, keyof AppProviderWithAppProps>;
/** Mutually exclusive props for the AppProvider component when using a {@link Realm.AppConfiguration} */
type DynamicAppProviderWithConfigurationProps = RestrictivePick<AppProviderProps, keyof AppProviderWithConfigurationProps>;
/**
 * Props for the AppProvider component. You can either pass an existing {@link Realm.App} through the `app` prop
 * or props that replicate the {@link Realm.AppConfiguration} that is used to create a Realm.App instance.
 */
type DynamicAppProviderProps = DynamicAppProviderWithAppProps | DynamicAppProviderWithConfigurationProps;
/**
 * React component providing a Realm App instance on the context for the
 * sync hooks to use. An `AppProvider` is required for an app to use the hooks.
 * @param props - Either the {@link Realm.AppConfiguration} for App Services passed as props **or** the {@link Realm.App} passed through the `app` prop.
 * @param appRef - Provides a ref to the app instance, which can be used to access the app instance outside of the React component tree. **Not available when using the `app` prop**.
 */
export declare function AppProvider(props: DynamicAppProviderProps): React.ReactNode;
/**
 * React component providing a Realm App instance on the context for the
 * sync hooks to use. An `AppProvider` is required for an app to use the hooks.
 * @param props - The {@link Realm.AppConfiguration} for App Services, passed as props.
 * @param appRef - A ref to the app instance, which can be used to access the app instance outside of the React component tree.
 */
export declare function AppProvider(props: DynamicAppProviderWithConfigurationProps): React.ReactNode;
/**
 * React component providing a Realm App instance on the context for the
 * sync hooks to use. An `AppProvider` is required for an app to use the hooks.
 * @param app - The {@link Realm.App} for the provider.
 */
export declare function AppProvider(props: DynamicAppProviderWithAppProps): React.ReactNode;
/**
 * Hook to access the current {@link Realm.App} from the {@link AppProvider} context.
 * @throws if an AppProvider does not exist in the component’s ancestors
 */
export declare const useApp: <FunctionsFactoryType extends Realm.DefaultFunctionsFactory, CustomDataType extends Record<string, unknown>>() => Realm.App<FunctionsFactoryType, CustomDataType>;
export declare const useAuthResult: () => [import("./types").OperationResult, React.Dispatch<React.SetStateAction<import("./types").OperationResult>>];
export {};
//# sourceMappingURL=AppProvider.d.ts.map