import { PropertyValueMap, LitElement } from 'lit';
import { InfiniteQueryController } from '../controllers/infinite-query-controller';
import { WeavySubAppComponent } from '../classes/weavy-sub-app-component';
import { ShadowPartsController } from '../controllers/shadow-parts-controller';
import { NotificationTypes, NotificationsResultType } from '../types/notifications.types';
declare global {
    interface HTMLElementTagNameMap {
        "wy-notification-list": WyNotificationList;
        "wy-notification-header": WyNotificationHeader;
    }
}
/**
 * Displays a list of notifications with tabs and paging.
 *
 * **Used sub components:**
 *
 * - [`<wy-buttons>`](./ui/wy-buttons.ts)
 * - [`<wy-button>`](./ui/wy-button.ts)
 * - [`<wy-icon>`](./ui/wy-icon.ts)
 * - [`<wy-notification-list-item>`](./wy-notification-list-item.ts)
 * - [`<wy-empty>`](./wy-empty.ts)
 * - [`<wy-progress-circular>`](./ui/wy-progress-circular.ts)
 * - [`<wy-presence>`](./ui/wy-presence.ts)
 * - [`<wy-avatar>`](./ui/wy-avatar.ts)
 *
 * @slot buttons - Extra buttons to render in the toolbar.
 * @slot empty - Fallback content when there are no notifications.
 *
 * @csspart wy-pane-toolbar - Toolbar area containing tabs and actions.
 * @csspart wy-pane-body - Body wrapper for the list.
 * @csspart wy-pane-group - Group wrapper inside the pane body.
 * @csspart wy-pager - Pager container.
 * @csspart wy-pager-bottom - Pager modifier for bottom placement.
 *
 * @fires {WyActionEventType} wy-action - Emitted when a notification is selected.
 */
export declare class WyNotificationList extends WeavySubAppComponent {
    #private;
    static styles: import('lit').CSSResult[];
    /** @internal */
    protected exportParts: ShadowPartsController;
    /**
     * Identifier of the notification that should appear selected.
     */
    notificationId?: number;
    /**
     * Active notification filter.
     *
     * @type {"" | "activity" | "mention" | "reaction"}
     * @default ""
     */
    typeFilter: NotificationTypes;
    /**
     * Infinite query controller providing paged notifications.
     *
     * @internal
     */
    notificationsQuery: InfiniteQueryController<NotificationsResultType>;
    /**
     * Mutation handler used to mark notifications read or unread.
     *
     * @internal
     */
    private markNotificationMutation?;
    /**
     * Intersection observer driving infinite scrolling.
     *
     * @internal
     */
    private infiniteScroll;
    /**
     * Pager sentinel element for infinite scrolling.
     *
     * @internal
     */
    private pagerRef;
    /**
     * Mark or unmark a notification as read.
     *
     * @param notificationId - Target notification id.
     * @param markAsRead - Desired read state.
     */
    markAsRead(notificationId: number, markAsRead?: boolean): Promise<void>;
    /**
     * Select the provided notification and emit a `wy-action` event.
     *
     * @internal
     * @param notification - Notification to select.
     */
    private selectNotification;
    /**
     * Triggers `wy-action` event.
     *
     * @internal
     * @param action - The performed action.
     * @param notification - Selected notification payload.
     * @returns Whether the event was successful.
     */
    private dispatchAction;
    /**
     * Refresh notifications when realtime updates arrive.
     *
     * @internal
     */
    private handleRefresh;
    protected willUpdate(changedProperties: PropertyValueMap<this>): Promise<void>;
    protected update(changedProperties: PropertyValueMap<this>): void;
    /**
     * Render the notifications collection.
     *
     * @internal
     * @param user - Current user.
     * @param infiniteData - Notification pages.
     */
    private renderNotifications;
    render(): import('../../node_modules/lit-html/node/lit-html.js').TemplateResult<1>;
    disconnectedCallback(): void;
}
/**
 * A header with filtering for notifications.
 *
 * **Used sub components:**
 *
 * - [`<wy-buttons>`](./ui/wy-button.ts)
 * - [`<wy-button>`](./ui/wy-button.ts)
 *
 * @slot - Content to override the filtering buttons.
 * @slot actions - Additional action buttons next to the filtering buttons.
 *
 * @csspart wy-pane-toolbar - Toolbar area containing tabs and actions.
 *
 * @fires {NotificationFilterEventType} filter - Any user selected filter. Can be prevented.
 */
export declare class WyNotificationHeader extends LitElement {
    static styles: import('lit').CSSResult[];
    /** @internal */
    protected exportParts: ShadowPartsController;
    /**
     * The selected filtering.
     *
     * @type {"" | "activity" | "mention" | "reaction"}
     * @default ""
     */
    typeFilter: NotificationTypes;
    /**
     * Currently active filter stored for local button state.
     *
     * @internal
     */
    activeFilter: NotificationTypes;
    /**
     * Any nodes assigned to the default slot.
     *
     * @internal
     */
    private _slotDefault;
    /**
     * Trigger `filter` event.
     *
     * @param typeFilter - Filter to emit.
     * @returns Whether the event was dispatched successfully.
     */
    dispatchFilter(typeFilter: NotificationTypes): boolean;
    render(): import('../../node_modules/lit-html/node/lit-html.js').TemplateResult<1>;
}
//# sourceMappingURL=wy-notification-list.d.ts.map