import { PropertyValues } from 'lit';
import { PersistStateController } from './controllers/persist-state-controller';
import { ThemeController } from './controllers/theme-controller';
import { AppType, AppTypeGuid } from './types/app.types';
import { QueryController } from './controllers/query-controller';
import { WeavyTypeComponent } from './classes/weavy-type-component';
import { ComponentFeatures } from './contexts/features-context';
import { ConversationFilterProps, UnreadConversationsController, UnreadConversationsProps } from './controllers/unread-conversations-controller';
import { CreateConversationController } from './controllers/create-conversation-controller';
import { MemberIdType } from './types/members.types';
import { BadgeAppearanceType, OverlayAppearanceType, PositionType } from './types/ui.types';
declare global {
    interface HTMLElementTagNameMap {
        "wy-messenger-button": WyMessengerButton;
    }
}
/**
 * @import { WyAppEventType } from "./types/app.events"
 * @import { WyPreviewOpenEventType } from "./types/files.events"
 * @import { WyPreviewCloseEventType } from "./types/files.events"
 * @import { WyUnreadEventType } from "./types/ui.events"
 */
/**
 * The Weavy Messenger button component renders a Messenger button complete with a realtime badge for the number of unread conversations. When clicked, the button opens a built in overlay displaying the full [`<wy-messenger>`](./wy-messenger.ts) component for multiple one-to-one conversations, group chats or agent conversations.
 *
 * The Messenger displays a list of all conversations with possibility to pin, star and mark conversations as read.
 * Each conversation item displays an avatar, the participants or the room name as title, a line with the latest message.
 * It also indicates if the conversation is read/unread and if anyone in the conversation is typing.
 *
 * The list has a search in the top and can open a modal for creating new conversations where the user can search for other people or agents to create private chats or chat rooms.
 *
 * When a user clicks a conversation item, the conversation is loaded.
 * The conversation can show rich messages with markdown formatting including code syntax highlight.
 * Messages can have uploaded images, attached files and cloud files with full browser preview of 100+ formats.
 * Polls, video meetings, rich link embeds, tags and mentions can be used in messages.
 * Users can react with predefined emojis to each message.
 *
 * Read receipts indicate which messages that has been sent and read.
 * The online presence for users is indicated both in the conversation list as well as in the conversation.
 *
 * Typing indicators are shown when other users are typing in a conversation.
 *
 * New messages are indicated as new when received.
 *
 * For chat rooms, the name and avatar for the chat room can be edited. Members can be added or removed from the chat room.
 *
 * The editor features markdown preview, including code syntax highlighting.
 * It has buttons for adding polls, video meetings, images, files and cloud files.
 * Mentions brings up a user selector.
 * Drafts are automatically saved for each conversation.
 *
 * The Messenger button component can optionally be configured in _agent mode_, by defining the `agent` property, to only show conversations with a given [AI agent](https://www.weavy.com/docs/learn/integrations/agents).
 * In agent mode, the create conversation button instantly creates a new conversation with the agent when clicked, instead of opening a create conversation modal.
 *
 * > Complement this with the [`<wy-notification-toasts>`](./wy-notification-toasts.ts) component to also get realtime _in-app notifications_ or _browser notifications_ when new messages arrive.
 *
 * ** Component layout **
 *
 * The button is displayed as a clickable icon that acts as a button.
 * The default size of the button is the icon size `1.5rem`/`24px` together with the set `--wy-padding` (which defaults to `0.5rem`/`8px`) on every side of the icon, which makes a total of `2.5rem`/`40px` per default.
 *
 * The openable Messenger renders in a drawer overlay on the right side in the [top layer](https://developer.mozilla.org/en-US/docs/Glossary/Top_layer).
 * That means that the Messenger does not occupy any visual layout space where it's placed in the DOM, it only renders in the top layer.
 * The drawer can be maximized by the user to get more visual space for the Messenger.
 *
 * You can add additional styling using _CSS Custom Properties_ and _CSS Shadow Parts_ and further customization using _slots_.
 *
 * **Used sub components:**
 *
 * - [`<wy-badge>`](./components/ui/wy-badge.ts)
 * - [`<wy-button>`](./components/ui/wy-button.ts)
 * - [`<wy-conversation>`](./components/wy-conversation.ts)
 * - [`<wy-conversation-header>`](./components/wy-conversation-header.ts)
 * - [`<wy-conversation-list>`](./components/wy-conversation-list.ts)
 * - [`<wy-conversation-new>`](./components/wy-conversation-new.ts)
 * - [`<wy-context-data-progress>`](./components/wy-context-data.ts)
 * - [`<wy-empty>`](./components/wy-empty.ts)
 * - [`<wy-icon>`](./components/ui/wy-icon.ts)
 * - [`<wy-overlay>`](./components/wy-overlay.ts)
 * - [`<wy-titlebar>`](./components/wy-titlebar.ts)
 *
 * @tagname wy-messenger-button
 * @fires {WyActionEventType} wy-action - Emitted when a conversation is created or an action is performed on a conversation.
 * @fires {WyPreviewOpenEventType} wy-preview-open - Fired when a preview overlay is about to open.
 * @fires {WyPreviewCloseEventType} wy-preview-close - Fired when a preview overlay is closed.
 * @fires {WyUnreadEventType} wy-unread - Emitted when the number of unread notifications change.
 *
 * @slot header - Header content rendered at the top of the conversation list overlay.
 * @slot title - Title content displayed within the overlay header.
 * @slot actions - Buttons placed in the top right of the conversation list.
 * @slot conversation-new - Custom content for the new-conversation button.
 *
 * @csspart wy-messenger-overlay-container - Container for the Messenger within the overlay.
 * @csspart wy-messenger-layout - Outermost messenger layout wrapper inside the overlay.
 * @csspart wy-messenger-overlay-container - Container that positions the messenger content in the overlay.
 * @csspart wy-scroll-y - Scrollable surface used by list and conversation sections.
 * @csspart wy-messenger-conversation-list - Container for conversation list.
 * @csspart wy-messenger-conversation - Container for the active conversation.
 * @csspart wy-close-conversation - Wrapper for the close-conversation icon and badge.
 *
 * @example <caption>Messenger button with openable Messenger overlay</caption>
 *
 * Displays a button with a badge that tracks unread conversations and can open a side drawer overlay with the Messenger on click.
 *
 * ```html
 * <wy-messenger-button></wy-messenger-button>
 * ```
 *
 * @example <caption>Messenger button component in agent mode</caption>
 *
 * Display a button that opens a Messenger in agent mode. Also, show a dot instead of a count when there are unread notifications.
 *
 * ```html
 * <wy-messenger-button agent="assistant" badge="dot"></wy-messenger-button>
 * ```
 */
export declare class WyMessengerButton extends WeavyTypeComponent implements UnreadConversationsProps, ConversationFilterProps {
    static styles: import('lit').CSSResult[];
    /** @internal */
    componentFeatures: ComponentFeatures;
    /** @internal */
    protected theme: ThemeController;
    /** @internal */
    protected unreadConversationsController: UnreadConversationsController;
    /** @internal */
    protected createConversationController: CreateConversationController;
    /**
     * Overlay appearance used for the conversation list.
     *
     * @type {"modal" | "sheet" | "drawer" | "full" | "none"}
     * @default "drawer"
     */
    overlay: OverlayAppearanceType;
    /**
     * Badge appearance variant.
     *
     * @type {"count" | "compact" | "dot" | "none"}
     * @default "compact"
     */
    badge: BadgeAppearanceType;
    /**
     * Badge position relative to the messenger button.
     *
     * @type {"inline" | "top-right" | "bottom-right" | "bottom-left" | "top-left"}
     * @default "top-right"
     */
    badgePosition: PositionType;
    /** Conversation types included in the messenger list. */
    componentTypes: AppTypeGuid[];
    /** Check visibility on the Messenger */
    protected get visibilityElement(): HTMLElement | undefined;
    /**
     * Agent uid filter. When set, conversations are limited to the agent chat.
     */
    set agent(agent: string | undefined);
    get agent(): string | undefined;
    /** Current unread conversation count. */
    get unread(): number;
    /**
     * Optional agent instructions appended to submitted messages.
     */
    instructions?: string;
    /**
     * Placeholder text for the message editor.
     */
    placeholder?: string;
    /** Active conversation id. */
    conversationId?: number | null;
    /** @internal */
    show: boolean;
    /** @internal */
    maximized: boolean;
    /** @internal */
    protected conversationQuery: QueryController<AppType>;
    /** @internal */
    protected persistState: PersistStateController<this>;
    /** @internal */
    private messengerRef;
    /** @internal */
    private conversationListRef;
    /** @internal */
    private conversationNewRef;
    /**
     * Creates a new conversation.
     *
     * - When in agent mode, a conversation is created instantly.
     *
     * @param members {(number|string)[] | undefined} - Optional array of member id or member uid.
     */
    createConversation(members?: MemberIdType[]): Promise<AppType>;
    /**
     * Opens the select member dialog to let the user select members for creating a conversation.
     *
     * @returns Any selected member ids or uids.
     */
    selectMembers(): Promise<MemberIdType[] | undefined>;
    protected willUpdate(changedProperties: PropertyValues<this>): Promise<void>;
    render(): import('../node_modules/lit-html/node/lit-html.js').TemplateResult<1>;
}
//# sourceMappingURL=wy-messenger-button.d.ts.map