/**
 * @file ChatMessageList.tsx
 * @input Uses React, StyleX, ChatListContext, theme tokens, spacing step utilities
 * @output Exports ChatMessageList component and ChatMessageListProps
 * @position Presentational message container — holds ChatMessage children
 *
 * Renders a container with role="log" for chat message histories.
 * Handles density context, configurable gap, empty state,
 * a spacer that pushes messages to the bottom, and an infinite scroll sentinel.
 *
 * Auto-scroll and the scroll-to-bottom button are owned by
 * ChatLayout. When used standalone (without a layout), the list
 * is purely presentational — compose useChatStreamScroll yourself if needed.
 *
 * SYNC: When modified, update these files to stay in sync:
 * - /packages/core/src/Chat/index.ts (exports)
 * - /apps/storybook/stories/Chat.stories.tsx
 * - /packages/cli/assets/templates/blocks/components/ChatMessageList/ (block examples)
 */
import { type ReactNode } from 'react';
import { type ChatDensity } from './ChatContext';
import type { BaseProps } from '../BaseProps';
import type { SpacingStep } from '../utils/types';
export interface ChatMessageListProps extends BaseProps<HTMLDivElement> {
    /** Ref forwarded to the root element */
    ref?: React.Ref<HTMLDivElement>;
    /**
     * Message elements — typically ChatMessage components.
     * Also accepts Divider (date separators) or any ReactNode.
     */
    children: ReactNode;
    /**
     * Custom content when the list has no messages.
     */
    emptyState?: ReactNode;
    /**
     * Async action when the user scrolls to the top.
     * Use for loading older messages. Wrapped in useTransition —
     * shows a spinner at the top while pending.
     */
    scrollToTopAction?: () => Promise<void>;
    /**
     * Visual density — flows to child messages via context.
     * Individual messages can override.
     * @default 'balanced'
     */
    density?: ChatDensity;
    /**
     * Gap between top-level message rows, using the spacing scale.
     * Defaults to the selected density's gap. Override this when each
     * row is independent (for example, LLM event streams where messages cannot
     * be grouped) and row spacing should be tuned separately from density.
     */
    gap?: SpacingStep;
    /**
     * Whether an assistant message is actively streaming into the list.
     *
     * The list is a `role="log"` / `aria-live="polite"` region, so while a
     * message streams in token-by-token, screen readers would otherwise
     * re-announce the accumulating partial text on every mutation. Set
     * `isStreaming` to `true` for the duration of a stream: it marks the log
     * `aria-busy="true"` so assistive tech waits and announces the completed
     * message once, when `isStreaming` returns to `false`.
     *
     * @default false
     */
    isStreaming?: boolean;
}
/**
 * Presentational container for chat messages.
 *
 * Renders messages in a flex column with density-based spacing.
 * Override gap to tune row spacing separately from density.
 * A spacer pushes content to the bottom when the list isn't full.
 * Supports loading older messages via `scrollToTopAction`.
 *
 * Auto-scroll and the scroll-to-bottom button are owned by
 * ChatLayout. Use useChatStreamScroll for standalone scroll control.
 *
 * @example
 * ```
 * <ChatMessageList>
 *   <ChatMessage sender="assistant" name="Navi" avatar={<Avatar name="Navi" size="md" />}>
 *     <ChatMessageBubble>Hello!</ChatMessageBubble>
 *   </ChatMessage>
 * </ChatMessageList>
 * ```
 */
export declare function ChatMessageList({ children, emptyState, scrollToTopAction, density, gap, isStreaming, xstyle, className, style, 'data-testid': testId, ref, ...rest }: ChatMessageListProps): import("react").JSX.Element;
export declare namespace ChatMessageList {
    var displayName: string;
}
//# sourceMappingURL=ChatMessageList.d.ts.map