import * as _websolutespa_bom_mixer_llm from '@websolutespa/bom-mixer-llm';
import { LlmChunkText, 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 LlmChunkWideCard = {
    type: 'wideCard';
    id: string;
    title?: string;
    abstract?: string;
    cta?: {
        title: string;
        url: string;
    };
    media?: {
        type: 'image';
        src: string;
    };
    switch?: boolean;
};

type LlmChunkWideCardGroup = {
    type: 'wideCardGroup';
    id: string;
    items: LlmChunkWideCard[];
};

type LlmChunkWaitingMessage = {
    type: 'waitingMessage';
    id: string;
    items: LlmChunkText[];
};

type UserMessageProps = LlmTextBlock<'user'>;

type LlmChunkTextCard = {
    type: 'textCard';
    id: string;
    title?: string;
    abstract?: string;
    nav?: {
        title: string;
        url: string;
    };
};

type LlmChunkTextCardGroup = {
    type: 'textCardGroup';
    id: string;
    items: LlmChunkTextCard[];
};

type LlmChunkTextBox = {
    type: 'textBox';
    id: string;
    number?: string;
    title?: string;
    description?: string;
    cta?: {
        title: string;
        url: string;
    };
};

type LlmChunkSmallCard = {
    type: 'smallCard';
    id: string;
    title?: string;
    abstract?: string;
    cta?: {
        title: string;
        url: string;
    };
    media?: {
        type: 'image';
        src: string;
    };
};

type LlmChunkSmallCardGroup = {
    type: 'smallCardGroup';
    id: string;
    items: LlmChunkSmallCard[];
};

type LlmChunkGalleryCard = {
    type: 'galleryCard';
    id: string;
    media?: {
        type: 'image';
        src: string;
    };
};

type LlmChunkGalleryCardGroup = {
    type: 'galleryCardGroup';
    id: string;
    items: LlmChunkGalleryCard[];
};

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 LlmChunkComboBoxSwitch = {
    type: 'comboBoxSwitch';
    id: string;
    number: string;
    title?: string;
    description?: string;
    media?: {
        type: 'image';
        src: string;
    };
};

type LlmChunkComboBox = {
    type: 'comboBox';
    id: string;
    number: string;
    title?: string;
    description?: string;
    cta?: {
        title: string;
        url: string;
    };
    media?: {
        type: 'image';
        src: string;
    };
};

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>;
    comboBox: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkComboBox>>;
    comboBoxSwitch: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkComboBoxSwitch>>;
    customCard: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkCustomCard>>;
    customCardGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkCustomCardGroup>>;
    error: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<_websolutespa_bom_mixer_llm.LlmChunkError>>;
    formRecap: react.FC<{}>;
    formRecapError: react.FC<{}>;
    formRecapSuccess: react.FC<{}>;
    formRequest: react.FC<{
        last: boolean;
    }>;
    galleryCard: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkGalleryCard>>;
    galleryCardGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkGalleryCardGroup>>;
    notFound: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<{
        [x: string]: unknown;
        id: _websolutespa_bom_core.IEquatable;
    }>>;
    skeleton: react.FC<LlmBlock<LlmChunkSkeleton>>;
    skeletonGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<any>>;
    smallCard: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkSmallCard>>;
    smallCardGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkSmallCardGroup>>;
    textBox: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkTextBox>>;
    textCard: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkTextCard>>;
    textCardGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkTextCardGroup>>;
    userMessage: react.FC<UserMessageProps>;
    waitingMessage: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkWaitingMessage>>;
    wideCard: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkWideCard>>;
    wideCardGroup: react.FC<_websolutespa_bom_mixer_llm.LlmBlock<LlmChunkWideCardGroup>>;
};

type PageThreadProps = {};

type StreamProps = {
    index: number;
    className?: string;
};

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

declare const components: {
    PageLoading: react.FC<{}>;
    PageRoot: react.ForwardRefExoticComponent<PageRootProps & react.RefAttributes<HTMLDivElement>>;
    PageStreamingIndicator: react.FC<{}>;
    PageTrigger: react.FC<{}>;
    BusyIndicator: react.FC<{}>;
    Stream: react.FC<StreamProps>;
    PageThread: react.FC<PageThreadProps>;
};

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 };
