import * as React from 'react';
import type { AddNotificationInput, Notification, RenderNotificationTile } from './types';
interface NotificationsContextValue {
    notifications: Notification[];
    unreadCount: number;
    isOpen: boolean;
    showPopups: boolean;
    addNotification: (input: AddNotificationInput) => string;
    upsertNotification: (input: AddNotificationInput & {
        id: string;
    }) => string;
    setNotifications: (list: Notification[]) => void;
    markRead: (id: string) => void;
    markAllRead: () => void;
    markSettled: (id: string) => void;
    remove: (id: string) => void;
    clear: () => void;
    open: () => void;
    close: () => void;
    toggle: () => void;
    setShowPopups: (value: boolean) => void;
    /** OS-level notification preference; only meaningful when `desktopPopupsConfigured`. */
    showDesktopPopups: boolean;
    setShowDesktopPopups: (value: boolean) => void;
    /** True when the host app wired desktop notifications (passed `onShowDesktopPopupsChange`). */
    desktopPopupsConfigured: boolean;
    onHistoryClick?: () => void;
    hasMore: boolean;
    isLoadingMore: boolean;
    loadMore?: () => void;
    renderTile?: RenderNotificationTile;
}
export interface NotificationsActions {
    /** Called after the local reducer marks an item read; persist server-side. */
    onMarkRead?: (id: string) => void | Promise<void>;
    /** Called after the local reducer marks all read; persist server-side. */
    onMarkAllRead?: () => void | Promise<void>;
    /** Called after the local reducer removes an item; persist server-side. */
    onRemove?: (id: string) => void | Promise<void>;
    /** Called after the local reducer marks an item settled; optional persistence. */
    onMarkSettled?: (id: string) => void | Promise<void>;
}
export interface NotificationsProviderProps {
    children: React.ReactNode;
    initialNotifications?: Notification[];
    maxNotifications?: number;
    defaultShowPopups?: boolean;
    onShowPopupsChange?: (value: boolean) => void;
    /** Desktop (OS-level) notification preference; providing `onShowDesktopPopupsChange` opts into the drawer toggle. */
    defaultShowDesktopPopups?: boolean;
    onShowDesktopPopupsChange?: (value: boolean) => void;
    onHistoryClick?: () => void;
    actions?: NotificationsActions;
    /** Pagination — when omitted, the drawer hides its load-more sentinel. */
    hasMore?: boolean;
    isLoadingMore?: boolean;
    onLoadMore?: () => void;
    /** Override how individual tiles render (drawer + popups); falls back to `NotificationTile`. */
    renderTile?: RenderNotificationTile;
}
export declare function NotificationsProvider({ children, initialNotifications, maxNotifications, defaultShowPopups, onShowPopupsChange, defaultShowDesktopPopups, onShowDesktopPopupsChange, onHistoryClick, actions, hasMore, isLoadingMore, onLoadMore, renderTile, }: NotificationsProviderProps): React.JSX.Element;
export declare function useNotifications(): NotificationsContextValue;
export declare function useOptionalNotifications(): NotificationsContextValue | null;
export {};
//# sourceMappingURL=notifications-context.d.ts.map