import * as _websolutespa_bom_mixer_llm from '@websolutespa/bom-mixer-llm';
import { LlmTextBlock, LlmOptions } from '@websolutespa/bom-mixer-llm';
import * as _websolutespa_bom_core from '@websolutespa/bom-core';
import * as react from 'react';
import * as react_jsx_runtime from 'react/jsx-runtime';

type UserMessageProps = LlmTextBlock<'user'>;

type LlmChunkCustomCard = {
    type: 'customCard';
    id: string;
    title?: string;
    abstract?: string;
    media?: {
        type: 'image';
        url: string;
    };
    href?: string;
};

type LlmChunkCustomCardGroup = {
    type: 'customCardGroup';
    id: string;
    items: LlmChunkCustomCard[];
};

type AssistantMessageProps = LlmTextBlock<'assistant'>;

declare const blocks: {
    action: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<_websolutespa_bom_mixer_llm.LlmChunkAction | _websolutespa_bom_mixer_llm.LlmChunkActionItem>>;
    actionGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<_websolutespa_bom_mixer_llm.LlmChunkActionGroup>>;
    assistantMessage: react.FC<AssistantMessageProps>;
    customCard: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkCustomCard>>;
    customCardGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkCustomCardGroup>>;
    formRecap: react.FC<{}>;
    formRecapError: react.FC<{}>;
    formRecapSuccess: react.FC<{}>;
    formRequest: react.FC<{
        last: boolean;
    }>;
    notFound: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<{
        [x: string]: unknown;
        id: _websolutespa_bom_core.IEquatable;
    }>>;
    error: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<_websolutespa_bom_mixer_llm.LlmChunkError>>;
    userMessage: react.FC<UserMessageProps>;
};

type ThreadProps = {};

type RootProps = {
    mode: string;
    opened?: boolean;
    embedded?: boolean;
    customIntro?: boolean;
    shouldShowTrigger?: boolean;
};

declare const components: {
    Root: react.ForwardRefExoticComponent<RootProps & react.RefAttributes<HTMLDivElement>>;
    Thread: react.FC<ThreadProps>;
};

declare function Llm(): react_jsx_runtime.JSX.Element;

declare const mock: {
    app: _websolutespa_bom_mixer_llm.LlmMockApp;
    thread: _websolutespa_bom_mixer_llm.LlmMockThread;
};

declare function llmPlugin(options: LlmOptions): LlmOptions;

declare const initializer: (props: _websolutespa_bom_mixer_llm.LlmOptions) => (_websolutespa_bom_mixer_llm.LlmInstance & {
    dispose: () => void;
}) | undefined;
type LlmPlugin = typeof initializer;

export { Llm, LlmPlugin, blocks, components, llmPlugin, mock };
