UNPKG

@kitn.ai/ui

Version:

Framework-agnostic, Shadow-DOM web components for building AI chat interfaces — works in React, Vue, Angular, Svelte, or plain HTML. Authored in SolidJS.

23 lines (22 loc) 1.38 kB
import { ChatMessage } from '../elements/chat-types'; import { ToolPart } from '../components/tool-types'; /** The one universal contract: a functional-updater setter (React setState shape). */ export type SetMessages = (updater: (prev: ChatMessage[]) => ChatMessage[]) => void; /** A fluent builder for one in-flight assistant message. Owns no state. */ export interface AssistantStream { readonly id: string; appendText(delta: string): AssistantStream; setText(content: string): AssistantStream; appendReasoning(delta: string, label?: string): AssistantStream; setReasoning(text: string, label?: string): AssistantStream; upsertTool(tool: ToolPart): AssistantStream; updateTool(toolCallId: string, patch: Partial<ToolPart>): AssistantStream; patch(patch: Partial<ChatMessage>): AssistantStream; done(final?: Partial<ChatMessage>): void; abort(reason?: string): void; } /** Start an assistant message and drive it through `set`. New refs on every mutation. */ export declare function createAssistantStream(set: SetMessages, init?: Partial<ChatMessage>): AssistantStream; /** Wrap a stream so `onSettle` fires on done/abort (used to toggle a `loading` flag). * Preserves the fluent chain by returning the wrapper from every mutator. */ export declare function onStreamSettled(inner: AssistantStream, onSettle: () => void): AssistantStream;