/// <reference types="gsi" />
/// <reference types="react" />
import * as react_jsx_runtime from 'react/jsx-runtime';
import * as react from 'react';
import { ReactNode, PropsWithChildren } from 'react';

declare const GSI_BUTTON_DEFAULT_CONFIGURATION: GsiButtonConfiguration;
interface GsiButtonProps {
    readonly configuration?: GsiButtonConfiguration;
    readonly fallback?: ReactNode;
}
declare function GsiButton(props: GsiButtonProps): react_jsx_runtime.JSX.Element;

interface UseRenderButtonProps {
    readonly parent: HTMLElement;
    readonly configuration: GsiButtonConfiguration;
    readonly onRender?: () => void;
}
declare function useRenderButton(props: UseRenderButtonProps): void;

type ScriptStatus = ScriptIdleStatus | ScriptLoadingStatus | ScriptLoadedStatus | ScriptErrorStatus;
interface ScriptIdleStatus {
    readonly type: 'idle';
}
interface ScriptLoadingStatus {
    readonly type: 'loading';
}
interface ScriptLoadedStatus {
    readonly type: 'loaded';
    readonly event: Event;
}
interface ScriptErrorStatus {
    readonly type: 'error';
    readonly event: ErrorEvent;
}
declare function isIdle(status: ScriptStatus): status is ScriptIdleStatus;
declare function isLoading(status: ScriptStatus): status is ScriptLoadingStatus;
declare function isLoaded(status: ScriptStatus): status is ScriptLoadedStatus;
declare function isError(status: ScriptStatus): status is ScriptErrorStatus;

type ScriptFallback<T extends ScriptStatus> = (status: T) => ReactNode;

interface GsiClientProps {
    readonly fallback?: ReactNode;
    readonly idle?: ScriptFallback<ScriptIdleStatus>;
    readonly loading?: ScriptFallback<ScriptLoadingStatus>;
    readonly error?: ScriptFallback<ScriptErrorStatus>;
}
declare function GsiClient(props: PropsWithChildren<GsiClientProps>): react_jsx_runtime.JSX.Element;

interface UseScriptReturn {
    readonly status: ScriptStatus;
}

declare const GOOGLE_GSI_CLIENT_URL = "https://accounts.google.com/gsi/client";
interface UseGsiClientProps {
    readonly src?: string;
}
declare function useGsiClient(props?: UseGsiClientProps): UseScriptReturn;

interface UseOneTapProps {
    readonly show?: boolean;
    readonly onNotify?: MomentListener;
}
interface UseOneTapReturn {
    readonly prompt: () => void;
    readonly cancel: () => void;
}
declare function useOneTap(props?: UseOneTapProps): UseOneTapReturn;

interface IdTokenProviderProps {
    readonly configuration: IdConfiguration;
}
declare function IdTokenProvider(props: PropsWithChildren<IdTokenProviderProps>): react_jsx_runtime.JSX.Element;

declare const IdTokenContext: react.Context<CredentialResponse | null>;
declare function useIdToken(): CredentialResponse | null;

export { GOOGLE_GSI_CLIENT_URL, GSI_BUTTON_DEFAULT_CONFIGURATION, GsiButton, GsiButtonProps, GsiClient, GsiClientProps, IdTokenContext, IdTokenProvider, IdTokenProviderProps, ScriptErrorStatus, ScriptFallback, ScriptIdleStatus, ScriptLoadedStatus, ScriptLoadingStatus, ScriptStatus, UseGsiClientProps, UseOneTapProps, UseOneTapReturn, UseRenderButtonProps, isError, isIdle, isLoaded, isLoading, useGsiClient, useIdToken, useOneTap, useRenderButton };
