import React, { ReactNode } from 'react';
export interface StatsigConfig {
    apiKey: string;
    baseUrl?: string;
    userAttributes?: Record<string, any>;
    sessionId?: string;
}
export interface FeatureFlagResult {
    enabled: boolean;
    matchedSegments?: string[];
    reason?: string;
}
export interface TrackEventData {
    eventName: string;
    userAttributes?: Record<string, any>;
    properties?: Record<string, any>;
    sessionId?: string;
}
export declare class StatsigClient {
    private config;
    private baseUrl;
    constructor(config: StatsigConfig);
    private generateSessionId;
    checkFeatureFlag(flagKey: string, userAttributes?: Record<string, any>): Promise<FeatureFlagResult>;
    trackEvent(data: TrackEventData): Promise<boolean>;
    trackPageView(page?: string, properties?: Record<string, any>): Promise<boolean>;
    trackClick(element: string, properties?: Record<string, any>): Promise<boolean>;
    trackCustomEvent(eventName: string, properties?: Record<string, any>): Promise<boolean>;
    setUserAttributes(userAttributes: Record<string, any>): void;
    setSessionId(sessionId: string): void;
    getUserAttributes(): Record<string, any> | undefined;
}
export declare const initialize: (config: StatsigConfig) => StatsigClient;
export declare const getInstance: () => StatsigClient | null;
export declare const checkFeatureFlag: (flagKey: string, userAttributes?: Record<string, any>) => Promise<FeatureFlagResult>;
export declare const trackEvent: (data: TrackEventData) => Promise<boolean>;
export declare const trackPageView: (page?: string, properties?: Record<string, any>) => Promise<boolean>;
export declare const trackClick: (element: string, properties?: Record<string, any>) => Promise<boolean>;
export declare const trackCustomEvent: (eventName: string, properties?: Record<string, any>) => Promise<boolean>;
export declare const setUserAttributes: (userAttributes: Record<string, any>) => void;
export declare const getUserAttributes: () => Record<string, any> | undefined;
interface StatsigProviderProps {
    config: StatsigConfig;
    children: ReactNode;
}
export declare const StatsigProvider: React.FC<StatsigProviderProps>;
export declare const useStatsig: () => StatsigClient;
export declare const useFeatureFlag: (flagKey: string, userAttributes?: Record<string, any>) => {
    enabled: boolean;
    loading: boolean;
    matchedSegments?: string[];
};
export declare const useTracking: () => {
    trackEvent: (data: TrackEventData) => Promise<boolean>;
    trackPageView: (page?: string, properties?: Record<string, any>) => Promise<boolean>;
    trackClick: (element: string, properties?: Record<string, any>) => Promise<boolean>;
    trackCustomEvent: (eventName: string, properties?: Record<string, any>) => Promise<boolean>;
};
export declare const useUserAttributes: () => {
    updateAttributes: (attributes: Record<string, any>) => void;
    getAttributes: () => Record<string, any> | undefined;
};
export declare const useAutoPageTracking: (enabled?: boolean) => void;
interface FeatureFlagProps {
    flagKey: string;
    userAttributes?: Record<string, any>;
    children: ReactNode;
    fallback?: ReactNode;
    loading?: ReactNode;
}
export declare const FeatureFlag: React.FC<FeatureFlagProps>;
export declare const withFeatureFlag: <P extends object>(flagKey: string, userAttributes?: Record<string, any>) => (Component: React.ComponentType<P>) => React.FC<P>;
export declare const useVariant: (flagKey: string, variants: string[], userAttributes?: Record<string, any>) => {
    variant: string | null;
    loading: boolean;
};
export default StatsigClient;
