import type { ReactNode } from 'react';
/**
 * Readiness Status interface. It represents the readiness state of an SDK client.
 */
export interface ISplitStatus extends SplitIO.ReadinessStatus {
}
/**
 * Update Props interface. It defines the props used to configure what SDK events are listened to update the component.
 */
export interface IUpdateProps {
    /**
     * `updateOnSdkUpdate` indicates if the hook or component will update (i.e., re-render) or not in case of an `SDK_UPDATE` event.
     * It's value is `true` by default.
     */
    updateOnSdkUpdate?: boolean;
    /**
     * `updateOnSdkTimedout` indicates if the hook or component will update (i.e., re-render) or not in case of a `SDK_READY_TIMED_OUT` event.
     * It's value is `true` by default.
     */
    updateOnSdkTimedout?: boolean;
    /**
     * `updateOnSdkReady` indicates if the hook or component will update (i.e., re-render) or not in case of a `SDK_READY` event.
     * It's value is `true` by default.
     */
    updateOnSdkReady?: boolean;
    /**
     * `updateOnSdkReadyFromCache` indicates if the hook or component will update (i.e., re-render) or not in case of a `SDK_READY_FROM_CACHE` event.
     * This params is only relevant when using `'LOCALSTORAGE'` as storage type, since otherwise the event is never emitted.
     * It's value is `true` by default.
     */
    updateOnSdkReadyFromCache?: boolean;
}
/**
 * Split Context Value interface. It is used to define the value types of Split Context
 */
export interface ISplitContextValues extends ISplitStatus, IUpdateProps {
    /**
     * Split factory instance.
     *
     * NOTE: This property is available for accessing factory methods not covered by the library hooks,
     * such as Logging configuration and User Consent.
     * @see {@link https://developer.harness.io/docs/feature-management-experimentation/sdks-and-infrastructure/client-side-sdks/javascript-sdk/#logging}),
     * @see {@link https://developer.harness.io/docs/feature-management-experimentation/sdks-and-infrastructure/client-side-sdks/javascript-sdk/#user-consent}
     */
    factory?: SplitIO.IBrowserSDK;
    /**
     * Split client instance.
     *
     * NOTE: This property is not recommended for direct use, as better alternatives are available:
     * - `useSplitTreatments` hook to evaluate feature flags.
     * - `useTrack` hook to track events.
     *
     * @see {@link https://developer.harness.io/docs/feature-management-experimentation/sdks-and-infrastructure/client-side-sdks/javascript-sdk/#2-instantiate-the-sdk-and-create-a-new-split-client}
     */
    client?: SplitIO.IBrowserClient;
}
/**
 * Props interface for components wrapped by the `withSplitFactory` HOC. These props are provided by the HOC to the wrapped component.
 *
 * @deprecated `withSplitFactory` will be removed in a future major release. We recommend replacing it with the `SplitFactoryProvider` component.
 */
export interface ISplitFactoryChildProps extends ISplitContextValues {
}
/**
 * SplitFactoryProvider Props interface. These are the props accepted by the `SplitFactoryProvider` component,
 * used to instantiate a factory and provide it to the Split Context.
 */
export interface ISplitFactoryProviderProps extends IUpdateProps {
    /**
     * Config object used to instantiate a Split factory.
     * @see {@link https://developer.harness.io/docs/feature-management-experimentation/sdks-and-infrastructure/client-side-sdks/javascript-sdk/#configuration}
     */
    config?: SplitIO.IBrowserSettings;
    /**
     * Split factory instance to use instead of creating a new one with the `config` object.
     *
     * If both `factory` and `config` are provided, the `config` prop is ignored.
     */
    factory?: SplitIO.IBrowserSDK;
    /**
     * An object of type Attributes used to evaluate the feature flags.
     */
    attributes?: SplitIO.Attributes;
    /**
     * Children of the `SplitFactoryProvider` component.
     */
    children: ReactNode;
}
/**
 * Options object accepted by the `useSplitClient` hook, used to retrieve a client instance and update the component on SDK events.
 */
export interface IUseSplitClientOptions extends IUpdateProps {
    /**
     * The customer identifier. If not provided, the hook will use the client available in the Split context, which is the default client by default (i.e., `factory.client()`),
     * except the hook is wrapped by a `SplitClient` component, in which case the Split context might be updated with a different client.
     */
    splitKey?: SplitIO.SplitKey;
    /**
     * An object of type Attributes used to evaluate the feature flags.
     */
    attributes?: SplitIO.Attributes;
}
/**
 * SplitClient Child Props interface. These are the props that the child as a function receives from the 'SplitClient' component.
 */
export interface ISplitClientChildProps extends ISplitContextValues {
}
/**
 * SplitClient Props interface. These are the props accepted by SplitClient component,
 * used to instantiate a new client instance, update the Split context, and listen for SDK events.
 */
export interface ISplitClientProps extends IUseSplitClientOptions {
    /**
     * Children of the SplitClient component. It can be a functional component (child as a function) or a React element.
     */
    children: ((props: ISplitClientChildProps) => ReactNode) | ReactNode;
}
/**
 * Result of the `useSplitManager` hook.
 */
export interface IUseSplitManagerResult extends ISplitContextValues {
    /**
     * Split manager instance.
     *
     * @see {@link https://developer.harness.io/docs/feature-management-experimentation/sdks-and-infrastructure/client-side-sdks/javascript-sdk/#manager}
     */
    manager?: SplitIO.IManager;
}
declare type EvaluationOptions = SplitIO.EvaluationOptions & {
    /**
     * An object of type Attributes used to evaluate the feature flags.
     */
    attributes?: SplitIO.Attributes;
};
/**
 * @deprecated `useSplitTreatments` will be removed in a future major release. We recommend replacing it with the `useTreatment*` hooks.
 */
export declare type GetTreatmentsOptions = ({
    /**
     * List of feature flag names to evaluate. Either this or the `flagSets` property must be provided. If both are provided, the `flagSets` option is ignored.
     */
    names: string[];
    flagSets?: undefined;
} | {
    /**
     * List of feature flag sets to evaluate. Either this or the `names` property must be provided. If both are provided, the `flagSets` option is ignored.
     */
    flagSets: string[];
    names?: undefined;
}) & EvaluationOptions;
/**
 * Options object accepted by the `useSplitTreatments` hook, used to call `client.getTreatmentsWithConfig()`, or `client.getTreatmentsWithConfigByFlagSets()`,
 * depending on whether `names` or `flagSets` options are provided, and to retrieve the result along with the Split context.
 *
 * @deprecated `useSplitTreatments` will be removed in a future major release. We recommend replacing it with the `useTreatment*` hooks.
 */
export declare type IUseSplitTreatmentsOptions = GetTreatmentsOptions & IUseSplitClientOptions;
/**
 * Options object accepted by the `useTreatment` and `useTreatmentWithConfig` hooks.
 */
export declare type IUseTreatmentOptions = {
    /**
     * Feature flag name to evaluate.
     */
    name: string;
} & EvaluationOptions & IUseSplitClientOptions;
/**
 * Options object accepted by the `useTreatments` and `useTreatmentsWithConfig` hooks.
 */
export declare type IUseTreatmentsOptions = ({
    /**
     * List of feature flag names to evaluate. Either this or the `flagSets` property must be provided. If both are provided, the `flagSets` option is ignored.
     */
    names: string[];
    flagSets?: undefined;
} | {
    /**
     * List of feature flag sets to evaluate. Either this or the `names` property must be provided. If both are provided, the `flagSets` option is ignored.
     */
    flagSets: string[];
    names?: undefined;
}) & EvaluationOptions & IUseSplitClientOptions;
/**
 * SplitTreatments Child Props interface. These are the props that the child component receives from the 'SplitTreatments' component.
 *
 * @deprecated `SplitTreatments` will be removed in a future major release. We recommend replacing it with the `useTreatments*` hooks.
 */
export interface ISplitTreatmentsChildProps extends ISplitContextValues {
    /**
     * An object with the treatments with configs for a bulk of feature flags, returned by client.getTreatmentsWithConfig().
     * Each existing configuration is a stringified version of the JSON you defined on the Split user interface. For example:
     *
     * ```js
     *   {
     *     feature1: { treatment: 'on', config: null },
     *     feature2: { treatment: 'off', config: '{"bannerText":"Click here."}' }
     *   }
     * ```
     */
    treatments: SplitIO.TreatmentsWithConfig;
}
/**
 * Result of the `useTreatment` hook.
 */
export interface IUseTreatmentResult extends ISplitContextValues {
    /**
     * The treatment string for a feature flag, returned by client.getTreatment().
     */
    treatment: SplitIO.Treatment;
}
/**
 * Result of the `useTreatmentWithConfig` hook.
 */
export interface IUseTreatmentWithConfigResult extends ISplitContextValues {
    /**
     * The treatment with config for a feature flag, returned by client.getTreatmentWithConfig().
     */
    treatment: SplitIO.TreatmentWithConfig;
}
/**
 * Result of the `useTreatments` hook.
 */
export interface IUseTreatmentsResult extends ISplitContextValues {
    /**
     * An object with the treatment strings for a bulk of feature flags, returned by client.getTreatments() or client.getTreatmentsByFlagSets().
     * For example:
     *
     * ```js
     *   {
     *     feature1: 'on',
     *     feature2: 'off'
     *   }
     * ```
     */
    treatments: SplitIO.Treatments;
}
/**
 * Result of the `useTreatmentsWithConfig` hook.
 */
export interface IUseTreatmentsWithConfigResult extends ISplitContextValues {
    /**
     * An object with the treatments with configs for a bulk of feature flags, returned by client.getTreatmentsWithConfig() or client.getTreatmentsWithConfigByFlagSets().
     * Each existing configuration is a stringified version of the JSON you defined on the Split user interface. For example:
     *
     * ```js
     *   {
     *     feature1: { treatment: 'on', config: null },
     *     feature2: { treatment: 'off', config: '{"bannerText":"Click here."}' }
     *   }
     * ```
     */
    treatments: SplitIO.TreatmentsWithConfig;
}
/**
 * SplitTreatments Props interface. These are the props accepted by SplitTreatments component, used to call 'client.getTreatmentsWithConfig()', or 'client.getTreatmentsWithConfigByFlagSets()',
 * depending on whether `names` or `flagSets` props are provided, and to pass the result to the child component.
 *
 * @deprecated `SplitTreatments` will be removed in a future major release. We recommend replacing it with the `useTreatments*` hooks.
 */
export declare type ISplitTreatmentsProps = IUseSplitTreatmentsOptions & {
    /**
     * Children of the SplitTreatments component. It must be a functional component (child as a function) you want to show.
     */
    children: ((props: ISplitTreatmentsChildProps) => ReactNode);
};
export {};
