/**
 * State of the AI assistant component.
 *
 * `cancelling` is a refinement of `loading`: a stop was requested but the turn
 * is still winding down (e.g. a tool mid-execution finishing). It is "busy"
 * like `loading` — use the host's `busy` getter for "is a turn active" gates.
 *
 * @beta
 */
export type AiAssistantState = 'idle' | 'loading' | 'cancelling' | 'error';
/**
 * Controls the pop-out button shown in the assistant header.
 * - `"expand"` — assistant is embedded in the bubble dialog; button expands it to a layout panel.
 * - `"collapse"` — assistant is in a layout panel; button collapses it back to the bubble.
 *
 * @beta
 */
export type PopoutMode = 'expand' | 'collapse';
export type { AgentPickerMode } from '@genesislcap/foundation-ai';
/**
 * Result returned by {@link FoundationAiAssistant.submitMessage}.
 *
 * `ok` is `false` when the assistant is busy, the message is empty, or any
 * supplied file failed validation — in which case no send was dispatched and
 * `errors` lists the reasons.
 *
 * @beta
 */
export interface SubmitMessageResult {
    ok: boolean;
    errors: string[];
}
/**
 * `detail` of the `AiAssistantEvent.SessionCleared` event. Captured *before*
 * teardown so a host can tidy up whatever the active agent was working on
 * (generated files, server-side scratch, …). `agentSnapshot` is the agent's
 * `serialize()` output (a state-machine image for machine-backed agents).
 *
 * @beta
 */
export interface SessionClearedDetail {
    sessionKey: string | undefined;
    agentName: string | undefined;
    agentSnapshot: unknown;
}
/**
 * `detail` of the `AiAssistantEvent.ChatHeaderMouseDown` event.
 *
 * @beta
 */
export interface ChatHeaderMouseDownDetail {
    clientX: number;
    clientY: number;
}
/**
 * DOM events the `<foundation-ai-assistant>` element dispatches to its host.
 * All bubble and are `composed` (they cross the shadow boundary), so a host can
 * listen on the element — or any ancestor — to react. Use these constants to
 * wire listeners instead of hand-typing event-name strings.
 *
 * An `as const` map (not a TS `enum` — this package ships none), so it serves as
 * both the listener-name value and, via the same-named type below, a union.
 *
 * @example
 * ```ts
 * import { AiAssistantEvent, type SessionClearedDetail } from '@genesislcap/ai-assistant';
 *
 * el.addEventListener(AiAssistantEvent.SessionCleared, (e) => {
 *   const { agentName, agentSnapshot } = (e as CustomEvent<SessionClearedDetail>).detail;
 *   // …clean up external state the agent was working on…
 * });
 * ```
 *
 * @beta
 */
export declare const AiAssistantEvent: {
    /** Session wiped via the lifecycle menu's Clear. `detail`: `SessionClearedDetail`. */
    readonly SessionCleared: "session-cleared";
    /** Header pressed in `popout-mode="expand"` (drag-to-popout hosts). `detail`: `ChatHeaderMouseDownDetail`. */
    readonly ChatHeaderMouseDown: "chat-header-mousedown";
};
/**
 * One of the `AiAssistantEvent` event-name values.
 *
 * @beta
 */
export type AiAssistantEvent = (typeof AiAssistantEvent)[keyof typeof AiAssistantEvent];
/**
 * State of the chat suggestions feature.
 *
 * @beta
 */
export type SuggestionsState = {
    status: 'idle';
} | {
    status: 'loading';
} | {
    status: 'loaded';
    suggestions: string[];
} | {
    status: 'error';
    message: string;
};
/**
 * Metadata describing a UI animation in the assistant.
 *
 * @beta
 */
export interface AiAssistantAnimationDef {
    /** Display label shown in the settings multiselect. */
    label: string;
    /** Short description shown beneath the label in the categorized multiselect. */
    description: string;
    /** Group heading the option is listed under in the settings multiselect. */
    category: string;
}
/**
 * Registry of all available animations with their display metadata.
 * Adding an entry here automatically extends the {@link AiAssistantAnimation} type.
 *
 * @remarks
 * `loading` (dots), `waves`, `flowingWaves` and `plasma` are interchangeable
 * styles of the same "is the assistant working" indicator and are therefore
 * grouped under the same {@link AiAssistantAnimationDef.category}. They are
 * mutually exclusive — see `LOADING_STYLE_ANIMATIONS`.
 *
 * @beta
 */
export declare const ANIMATION_DEFS: {
    loading: {
        label: string;
        description: string;
        category: string;
    };
    waves: {
        label: string;
        description: string;
        category: string;
    };
    flowingWaves: {
        label: string;
        description: string;
        category: string;
    };
    plasma: {
        label: string;
        description: string;
        category: string;
    };
    halo: {
        label: string;
        description: string;
        category: string;
    };
};
/**
 * Union of all available animation names, derived from {@link ANIMATION_DEFS}.
 *
 * @beta
 */
export type AiAssistantAnimation = keyof typeof ANIMATION_DEFS;
/**
 * All available animation names, derived from the registry.
 *
 * @internal
 */
export declare const ALL_ANIMATIONS: AiAssistantAnimation[];
/**
 * The interchangeable "assistant is working" loading-indicator styles. At most
 * one of these may be enabled at a time — enabling one disables the other.
 *
 * @internal
 */
export declare const LOADING_STYLE_ANIMATIONS: readonly ["loading", "waves", "flowingWaves", "plasma"];
/**
 * Animations enabled by default when a consumer opts into the animations
 * feature without specifying an explicit `enabled` list. Keeps the dots loading
 * style (the long-standing default); the waves style is opt-in.
 *
 * @internal
 */
export declare const DEFAULT_ANIMATIONS: AiAssistantAnimation[];
//# sourceMappingURL=main.types.d.ts.map