import { OpenAIChatKit, ChatKitOptions, ChatKitEvents } from '@openai/chatkit';
export * from '@openai/chatkit';
import * as React from 'react';

type DotToCamelCase<S extends string> = S extends `${infer Head}.${infer Tail}` ? `${Head}${Capitalize<DotToCamelCase<Tail>>}` : S;
declare const CHATKIT_METHOD_NAMES: readonly ["focusComposer", "setThreadId", "sendUserMessage", "setComposerValue", "fetchUpdates", "sendCustomAction", "showHistory", "hideHistory"];
type ChatKitMethod = (typeof CHATKIT_METHOD_NAMES)[number];
type ChatKitMethods = {
    [K in ChatKitMethod]: OpenAIChatKit[K];
};
type ToEventHandlerKey<K extends keyof ChatKitEvents> = DotToCamelCase<K> extends `chatkit${infer EventName}` ? `on${Capitalize<EventName>}` : never;
type ChatKitEventHandlers = Partial<{
    [K in keyof ChatKitEvents as ToEventHandlerKey<K>]: ChatKitEvents[K] extends CustomEvent<infer Detail> ? Detail extends undefined ? () => void : (event: Detail) => void : never;
}>;
type UseChatKitOptions = ChatKitOptions & ChatKitEventHandlers;
type ChatKitControl = {
    setInstance: (instance: OpenAIChatKit | null) => void;
    options: ChatKitOptions;
    handlers: ChatKitEventHandlers;
};
type UseChatKitReturn = ChatKitMethods & {
    control: ChatKitControl;
    ref: React.RefObject<OpenAIChatKit | null>;
};
declare function useChatKit(options: UseChatKitOptions): UseChatKitReturn;

interface ChatKitProps extends React.HTMLAttributes<OpenAIChatKit> {
    control: ChatKitControl;
}
declare module 'react' {
    namespace JSX {
        interface IntrinsicElements {
            'openai-chatkit': React.DetailedHTMLProps<React.HTMLAttributes<OpenAIChatKit>, OpenAIChatKit>;
        }
    }
}
declare const ChatKit: React.ForwardRefExoticComponent<ChatKitProps & React.RefAttributes<OpenAIChatKit>>;

export { ChatKit, type ChatKitControl, type UseChatKitOptions, type UseChatKitReturn, useChatKit };
