import React$1 from 'react';

interface Subscriber {
    id: string;
    email: string;
    name?: string;
    locale?: string;
    subscriptionStatus: 'active' | 'unsubscribed' | 'pending';
    emailPreferences?: {
        newsletter?: boolean;
        announcements?: boolean;
        [key: string]: boolean | undefined;
    };
    source?: string;
    importedFromProvider?: boolean;
    utmParameters?: {
        source?: string;
        medium?: string;
        campaign?: string;
        content?: string;
        term?: string;
    };
    signupMetadata?: {
        ipAddress?: string;
        userAgent?: string;
        referrer?: string;
        signupPage?: string;
    };
    leadMagnet?: string;
    unsubscribedAt?: string;
    magicLinkToken?: string;
    magicLinkTokenExpiry?: string;
    createdAt: string;
    updatedAt: string;
}
interface SignupFormProps {
    onSuccess?: (subscriber: Subscriber) => void;
    onError?: (error: Error) => void;
    showName?: boolean;
    showPreferences?: boolean;
    leadMagnet?: {
        id: string;
        title: string;
        description?: string;
    };
    className?: string;
    styles?: {
        form?: React.CSSProperties;
        inputGroup?: React.CSSProperties;
        label?: React.CSSProperties;
        input?: React.CSSProperties;
        button?: React.CSSProperties;
        buttonDisabled?: React.CSSProperties;
        error?: React.CSSProperties;
        success?: React.CSSProperties;
        checkbox?: React.CSSProperties;
        checkboxInput?: React.CSSProperties;
        checkboxLabel?: React.CSSProperties;
    };
    apiEndpoint?: string;
    buttonText?: string;
    loadingText?: string;
    successMessage?: string;
    placeholders?: {
        email?: string;
        name?: string;
    };
    labels?: {
        email?: string;
        name?: string;
        newsletter?: string;
        announcements?: string;
    };
}
interface PreferencesFormProps {
    subscriber?: Subscriber;
    onSuccess?: (subscriber: Subscriber) => void;
    onError?: (error: Error) => void;
    className?: string;
    styles?: {
        container?: React.CSSProperties;
        heading?: React.CSSProperties;
        form?: React.CSSProperties;
        section?: React.CSSProperties;
        sectionTitle?: React.CSSProperties;
        inputGroup?: React.CSSProperties;
        label?: React.CSSProperties;
        input?: React.CSSProperties;
        select?: React.CSSProperties;
        checkbox?: React.CSSProperties;
        checkboxInput?: React.CSSProperties;
        checkboxLabel?: React.CSSProperties;
        buttonGroup?: React.CSSProperties;
        button?: React.CSSProperties;
        primaryButton?: React.CSSProperties;
        secondaryButton?: React.CSSProperties;
        dangerButton?: React.CSSProperties;
        error?: React.CSSProperties;
        success?: React.CSSProperties;
        info?: React.CSSProperties;
    };
    sessionToken?: string;
    apiEndpoint?: string;
    showUnsubscribe?: boolean;
    locales?: string[];
    labels?: {
        title?: string;
        personalInfo?: string;
        emailPreferences?: string;
        name?: string;
        language?: string;
        newsletter?: string;
        announcements?: string;
        saveButton?: string;
        unsubscribeButton?: string;
        saving?: string;
        saved?: string;
        unsubscribeConfirm?: string;
    };
}

declare const NewsletterForm: React$1.FC<SignupFormProps>;
declare function createNewsletterForm(defaultProps: Partial<SignupFormProps>): React$1.FC<SignupFormProps>;

declare const PreferencesForm: React$1.FC<PreferencesFormProps>;
declare function createPreferencesForm(defaultProps: Partial<PreferencesFormProps>): React$1.FC<PreferencesFormProps>;

interface MagicLinkVerifyProps {
    token?: string;
    onSuccess?: (sessionToken: string, subscriber: any) => void;
    onError?: (error: Error) => void;
    apiEndpoint?: string;
    className?: string;
    styles?: {
        container?: React$1.CSSProperties;
        heading?: React$1.CSSProperties;
        message?: React$1.CSSProperties;
        error?: React$1.CSSProperties;
        button?: React$1.CSSProperties;
    };
    labels?: {
        verifying?: string;
        success?: string;
        error?: string;
        expired?: string;
        invalid?: string;
        redirecting?: string;
        tryAgain?: string;
    };
}
declare const MagicLinkVerify: React$1.FC<MagicLinkVerifyProps>;
declare function createMagicLinkVerify(defaultProps: Partial<MagicLinkVerifyProps>): React$1.FC<MagicLinkVerifyProps>;

interface UseNewsletterAuthOptions {
}
interface UseNewsletterAuthReturn {
    subscriber: Subscriber | null;
    isAuthenticated: boolean;
    isLoading: boolean;
    loading: boolean;
    error: Error | null;
    signOut: () => Promise<void>;
    logout: () => Promise<void>;
    refreshAuth: () => Promise<void>;
    refreshSubscriber: () => Promise<void>;
    login: (token: string) => Promise<void>;
}
declare function useNewsletterAuth(_options?: UseNewsletterAuthOptions): UseNewsletterAuthReturn;

export { MagicLinkVerify, type MagicLinkVerifyProps, NewsletterForm, PreferencesForm, createMagicLinkVerify, createNewsletterForm, createPreferencesForm, useNewsletterAuth };
