export declare enum EAnalyticsEvent {
    pageView = "Page view",
    featuredArticleClicked = "Featured article clicked",
    scienceCardClicked = "Science card clicked",
    articleCategoryClicked = "Article category clicked",
    userSelectedPlan = "User selected plan",
    mailchimpSubmitClicked = "Mailchimp submit clicked",
    iterableMailchimpSubmitClicked = "Iterable mailchimp submit clicked",
    articleScrolledBy = "Article scrolled by",
    ctaClicked = "CTA clicked",
    productGalleryCardClicked = "Product gallery card clicked"
}
export declare enum EAnalyticsEventType {
    view = "view",
    appearance = "appearance",
    interaction = "interaction"
}
export type TBasicAnalyticsEvent = {
    event: EAnalyticsEvent;
    location?: string;
    type: EAnalyticsEventType;
    component?: string;
    element?: string;
};
export type TPageViewEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.pageView;
    payload: {
        pageTitle: string;
        component: string;
        element: string;
        referrer: string;
        userAgent: string;
        viewportWidth: number;
        viewportHeight: number;
    };
};
export type TFeaturedArticleClickedEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.featuredArticleClicked;
    payload: {
        articleTitle: string;
    };
};
export type TScienceCardClickedEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.scienceCardClicked;
    payload: {
        scienceCardTitle: string;
    };
};
export type TArticleCategoryClickedEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.articleCategoryClicked;
    payload: {
        category: string;
    };
};
export type TUserSelectedPlanEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.userSelectedPlan;
    payload: {
        productId: string;
        planId: string;
        planPrice?: number;
        planDuration?: string;
    };
};
export type TSubscriptionClickedEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.mailchimpSubmitClicked | EAnalyticsEvent.iterableMailchimpSubmitClicked;
    payload: {
        email: string;
        pageTitle: string;
        component: string;
        element: string;
    };
};
export type TarticleScrolledByEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.articleScrolledBy;
    payload: {
        scrollDepth: number;
        articleTitle: string;
    };
};
export type TCTAClickedEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.ctaClicked;
    payload: {
        productId?: string;
        productName?: string;
        ctaLabel?: string;
        ctaLink?: string;
        selectedPlanId?: string;
    };
};
export type TProductGalleryCardClickedEvent = TBasicAnalyticsEvent & {
    event: EAnalyticsEvent.productGalleryCardClicked;
    payload: {
        zenpatientId: string;
        link: string;
        productName: string;
    };
};
export interface IEventBus {
    emitAsync<T>(event: string, ...args: T[]): Promise<void>;
    emit<T>(event: string, ...args: T[]): boolean;
    on<T>(event: string, listener: (...args: T[]) => void): IEventBus;
    off<T>(event: string, listener: (...args: T[]) => void): IEventBus;
    listeners<T>(event: string): Array<(...args: T[]) => void>;
}
export type TAnalyticsEvent = TPageViewEvent | TFeaturedArticleClickedEvent | TScienceCardClickedEvent | TArticleCategoryClickedEvent | TUserSelectedPlanEvent | TSubscriptionClickedEvent | TarticleScrolledByEvent | TCTAClickedEvent | TProductGalleryCardClickedEvent;
