/**
 * 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 const AiAssistantEvent = {
    /** Session wiped via the lifecycle menu's Clear. `detail`: `SessionClearedDetail`. */
    SessionCleared: 'session-cleared',
    /** Header pressed in `popout-mode="expand"` (drag-to-popout hosts). `detail`: `ChatHeaderMouseDownDetail`. */
    ChatHeaderMouseDown: 'chat-header-mousedown',
};
/**
 * 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 const ANIMATION_DEFS = {
    loading: {
        label: 'Dots',
        description: 'Shows pulsing dots while the assistant is generating a response.',
        category: 'Loading style',
    },
    waves: {
        label: 'Waves',
        description: 'Shows glowing sine waves inside a circle while the assistant is generating a response.',
        category: 'Loading style',
    },
    flowingWaves: {
        label: 'Flowing waves',
        description: 'Shows coloured waves rising and settling from a line while the assistant is generating a response.',
        category: 'Loading style',
    },
    plasma: {
        label: 'Plasma orb',
        description: 'Shows a glowing plasma sphere with drifting energy while the assistant is generating a response.',
        category: 'Loading style',
    },
    halo: {
        label: 'Halo',
        description: 'Displays a glowing halo around the assistant avatar while a response is streaming.',
        category: 'Effects',
    },
};
/**
 * All available animation names, derived from the registry.
 *
 * @internal
 */
export const ALL_ANIMATIONS = Object.keys(ANIMATION_DEFS);
/**
 * 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 const LOADING_STYLE_ANIMATIONS = [
    '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 const DEFAULT_ANIMATIONS = ['loading', 'halo'];
