import { BeamPlugin, BeamConfigOptions } from './beam.js';
import '../chunks/types-CPxMwnoR.esm.js';

type beforeLogEventFn = (eventName: string, eventValue: any, metadata: Record<string, any>) => Record<string, any>;
/**
 * StatSig Docs:  https://docs.statsig.com/client/jsClientSDK
 */
type StatsigPluginOptions = {
    statsigApiKey: string;
    beforeLogEvent?: beforeLogEventFn;
};
declare global {
    interface Window {
        statsig?: any;
    }
}
type Experiments = {
    /** Whether Beam widgets should be shown to users */
    shouldShowBeam: boolean;
    /** Whether events should be logged to Statsig */
    isLoggingEnabled: boolean;
};
/**
 * Sets up Statsig for A/B testing and shows/hides Beam based on default experiment rules.
 * @example
 * import { StatsigPlugin } from '@beamimpact/web-sdk/dist/integrations/statsig'
 * import { init } from '@beamimpact/web-sdk/dist/integrations/beam'
 *
 * const beam = await init({
 *   apiKey: '',
 *   chainId: 1,
 *   storeId: 1,
 *   domain: 'my-store.com' // in case site uses subdomains for different pages
 *   plugins: [
 *     new StatsigPlugin({ statsigApiKey: '' })
 *   ]
 * })
 *
 * // Once initialized, all Beam widgets have display: none unless user is assigned to A/B test group that shows Beam
 * // To hide additional elements, add the CSS className "beam-sync-visibility" to them
 * // To programmatically access the experiment state: getConfig().plugins.statsig.experiments.shouldShowBeam
 */
declare class StatsigPlugin implements BeamPlugin {
    #private;
    name: string;
    statsig: any;
    statsigApiKey: string;
    experiments: Experiments;
    stableId?: string;
    beforeLogEvent?: beforeLogEventFn;
    constructor(options: StatsigPluginOptions);
    init(config: BeamConfigOptions): Promise<void>;
    logEvent(name: string, value: string | number | boolean, metadata?: Record<string, any>): void;
}

export { StatsigPlugin };
