import type { InteractionResult } from '@genesislcap/foundation-ai';
import { GenesisElement } from '@genesislcap/web-core';
export type ChatInteractionEventsMap = {
    'interaction-completed': InteractionResult<unknown> & {
        interactionId: string;
    };
};
/**
 * Detail payload for the `interaction-completed` event.
 * @public
 */
export type InteractionCompletedEventDetail = ChatInteractionEventsMap['interaction-completed'];
/**
 * Hosts an interactive AI chat sub-component by tag name.
 * @public
 *
 * @fires interaction-completed - Fired when the interaction finishes. detail: `InteractionCompletedEventDetail`
 */
export declare class AiChatInteractionWrapper extends GenesisElement {
    /** @internal */
    componentName: string;
    /** @internal */
    data: any;
    /** @internal */
    interactionId: string;
    /** The resolved result once the interaction has completed. Forwarded to the rendered component. @internal */
    resolved: InteractionResult<unknown> | undefined;
    /** @internal */
    container: HTMLElement;
    /** Observes the rendered widget for mid-lifecycle size changes — see {@link observeWidgetResize}. */
    private _resizeObserver?;
    connectedCallback(): void;
    disconnectedCallback(): void;
    componentNameChanged(): void;
    /**
     * Re-render the hosted widget when the interaction identity changes. This
     * ensures widgets don't go stale with them being rendered with `recycle: true`
     * when messages are dynamically filtered, showing/hiding thinking/tool calls
     *
     * `interactionId` is a per-interaction UUID, so it changes exactly when the
     * hosted interaction does. Property bindings apply in template order
     * (componentName, data, interactionId), so `data` is already rebound by the
     * time this fires and the fresh widget is built with the correct data.
     */
    interactionIdChanged(): void;
    resolvedChanged(): void;
    /**
     * Watch the rendered widget element for box-size changes. When the widget
     * grows or shrinks mid-lifecycle (e.g. expanding a "More info" panel,
     * appending an SSE status row, revealing generated code), bubble a
     * `request-scroll-to-bottom` event so `FoundationAiAssistant` re-snaps to
     * the bottom. `scrollToBottom` respects `_userScrolledAway`, so a user
     * reading old messages is not yanked back.
     *
     * The first ResizeObserver callback fires synchronously with the initial
     * size when `observe()` is called; we skip it so freshly-rendered widgets
     * don't double up with the existing `handleMessagesUpdate` auto-scroll for
     * new messages.
     */
    private observeWidgetResize;
    private renderComponent;
    /**
     * Project the wrapper's current `data`/`resolved`/`interactionId` into the
     * discriminated {@link AiChatInteraction} the widget consumes (GENC-1390).
     */
    private buildInteraction;
}
//# sourceMappingURL=chat-interaction-wrapper.d.ts.map