/**
 * GrowthBook adapter for the ExperimentClient interface.
 *
 * This file is INTERNAL - consumers should only import from experiments/types.ts
 * and use the ExperimentClient interface.
 */
import type { Context as GrowthBookInitOptions } from '@growthbook/growthbook';
import { GrowthBook } from '@growthbook/growthbook';
import type { TileConfig } from '../../types';
import type { ExperimentClient } from '../types';
/**
 * Callback fired when a user is assigned to an experiment.
 */
export type ExperimentTrackingCallback = (experimentKey: string, variationId: number, variationName: string) => void;
/**
 * Default API host for GrowthBook experiments.
 */
export declare const DEFAULT_EXPERIMENT_API_HOST = "https://experiment.syntrologie.com";
export interface GrowthBookAdapterOptions extends GrowthBookInitOptions {
    /**
     * Existing GrowthBook instance to wrap.
     * If not provided, a new instance will be created.
     */
    client?: GrowthBook;
    /**
     * Auto-initialize with streaming enabled.
     */
    autoInit?: boolean;
    /**
     * Enable dev mode for URL parameter overrides and forced variations.
     * When true, allows ?syntro_exp=xxx&syntro_var=N to force specific variations.
     * @default true
     */
    enableDevMode?: boolean;
    /**
     * Callback fired when a user is assigned to an experiment.
     * Use this to send experiment data to your analytics provider.
     */
    onExperimentViewed?: ExperimentTrackingCallback;
}
/**
 * Internal adapter that implements ExperimentClient using GrowthBook.
 */
export declare class GrowthBookAdapter implements ExperimentClient {
    private readonly gb;
    private readonly featureListeners;
    constructor(options?: GrowthBookAdapterOptions);
    /**
     * Access to the underlying GrowthBook instance.
     * Only use this internally - don't expose to consumers.
     */
    get _internal(): GrowthBook;
    refreshFeatures(): Promise<void>;
    setAttributes(attrs: Record<string, unknown>): void;
    setForcedVariations(variations: Record<string, number>): void;
    getFeatureValue<T>(key: string, fallback: T): T;
    getAllFeatures(): Record<string, unknown>;
    shouldRenderRectangle(_tile: TileConfig): boolean;
    onFeaturesChanged(callback: () => void): () => void;
}
/**
 * Create an ExperimentClient backed by GrowthBook.
 */
export declare function createGrowthBookClient(options?: GrowthBookAdapterOptions): ExperimentClient;
