@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
TypeScript
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;