import { ReactNode } from 'react';
import * as react_jsx_runtime from 'react/jsx-runtime';

type ScreenshotType = "full-screenshot" | "selected-screenshot";
type ScreenshotBlobs = Array<{
    blob: Blob;
    type: ScreenshotType;
}>;
interface User {
    id?: string;
    name?: string;
    email: string;
    customData?: Record<string, any>;
}
interface FormDataProps {
    email?: string;
    message: string;
    screenshotBlobs: ScreenshotBlobs;
}
interface NotificationMessage {
    message: string;
    type: "info" | "hint" | "offer" | "reward" | "social" | "urgent";
}
type IslandPlacement = "left-center" | "left-bottom" | "right-center" | "right-bottom" | "bottom-left" | "bottom-right";
type IslandMode = "default" | "icon";
type FormSubmitHandler = (data: FormDataProps) => Promise<boolean>;
interface WidgetCustomizeProps {
    form?: {
        className?: string;
        errorMessage?: string;
        successMessage?: string;
        submitButton?: {
            label?: string;
            className?: string;
        };
        cancelButton?: {
            label?: string;
            className?: string;
        };
        messageInput?: {
            placeholder?: string;
            className?: string;
        };
        output?: {
            excludeFullPageScreenshot?: boolean;
            excludeSelectedElementScreenshot?: boolean;
        };
    };
    island?: {
        mode?: IslandMode;
        placement?: IslandPlacement;
        className?: string;
        label?: string;
        switchButton?: {
            className?: string;
            thumb?: {
                className?: string;
            };
        };
    };
    notifications?: {
        enable?: boolean;
        repeatDelay?: number;
        displayDuration?: number;
        repeatAllowed?: boolean;
        allowDismissal?: boolean;
        allowParmanentDismissal?: boolean;
        paramanentDismissalExpiryDays?: number;
        messages?: NotificationMessage[];
    };
}
interface BaseWidgetProviderProps {
    customize?: WidgetCustomizeProps;
    hideIsland?: boolean;
    children: ReactNode;
}
interface LocalWidgetProviderProps extends BaseWidgetProviderProps {
    mode: "local";
    siteId?: never;
    onFormSubmit: FormSubmitHandler;
}
interface RemoteWidgetProviderProps extends BaseWidgetProviderProps {
    siteId: string;
    mode?: "remote";
    onFormSubmit?: never;
}
type WidgetProviderProps = LocalWidgetProviderProps | RemoteWidgetProviderProps;

declare const WidgetProvider: ({ children, ...props }: WidgetProviderProps) => react_jsx_runtime.JSX.Element;

declare const useReactRoast: () => {
    isWidgetActive: boolean;
    toggleWidget: () => void;
    avoidElementClassName: string;
    setIslandVisiblity: (visible: boolean) => void;
    setUser: (user: User) => void;
};

export { WidgetProvider as default, useReactRoast };
export type { FormDataProps, WidgetProviderProps };
