import { type TvmNetworkConfig, AbstractStore } from '@broxus/js-core';
import { type AddNetwork, type Address, type AssetType, type Network } from 'everscale-inpage-provider';
import { type IReactionDisposer } from 'mobx';
import * as React from 'react';
import * as ReactDOM from 'react-dom/client';
import { type DisconnectOptions, type NekotonConnector } from '../core';
import { type TvmConnectServiceCtorParams, TvmConnectService } from '../services';
import { TvmConnectDialogStore } from '../stores';
import { type Account, type PopupType, type TvmWalletProviderConfig, type TvmWalletProviderInfo } from '../types';
export interface TvmConnectCtorParams extends TvmConnectServiceCtorParams {
    agreementsNote?: React.ReactNode | false;
    getProviderInfo?: (providerId: string, info: TvmWalletProviderInfo) => TvmWalletProviderInfo;
    locale?: string;
    popupType?: PopupType;
    qrEnabled?: boolean;
    onPreconnect?: (connector: NekotonConnector) => (Promise<void> | void);
}
export interface TvmConnectWatchData {
    account?: Account;
    address?: Account['address'];
    balance?: string;
    chainId?: number;
    network?: TvmNetworkConfig;
}
export type TvmConnectWatchCallback = (data: TvmConnectWatchData) => Promise<void> | void;
interface ConnectParams {
    network?: TvmNetworkConfig;
    popupType?: PopupType;
    qrEnabled?: boolean;
}
export declare class TvmConnect extends AbstractStore {
    protected readonly params?: Readonly<TvmConnectCtorParams> | undefined;
    readonly name = "TvmConnect";
    protected _root: ReactDOM.Root | undefined;
    protected _dialog: TvmConnectDialogStore;
    protected _service: TvmConnectService;
    constructor(params?: Readonly<TvmConnectCtorParams> | undefined);
    getDialog(): TvmConnectDialogStore;
    getService(): TvmConnectService;
    connect(params?: ConnectParams): Promise<NekotonConnector | undefined>;
    connectTo(providerConfig: TvmWalletProviderConfig, params?: ConnectParams): Promise<NekotonConnector | undefined>;
    disconnect(options?: DisconnectOptions): Promise<void>;
    addAsset(address: Address | string, type?: AssetType): Promise<boolean | undefined>;
    changeAccount(): Promise<void>;
    addNetwork(network: AddNetwork, switchNetwork?: boolean): Promise<Network | null>;
    switchNetwork(networkIdOParams: number | AddNetwork): Promise<Network | null>;
    watch(callback: TvmConnectWatchCallback): this;
    unwatch(): this;
    protected _render(): void;
    protected _watchDisposer: IReactionDisposer | undefined;
}
export {};
