@llamaindex/ui
Version:
A comprehensive UI component library built with React, TypeScript, and Tailwind CSS for LlamaIndex applications
340 lines (327 loc) • 15.8 kB
text/typescript
export { c as FILE_TYPE_GROUPS, b as FileType, m as FileUploadData, a as FileUploader, F as FileUploaderProps, I as InputField, U as UploadResult, n as UseFileUploadOptions, o as UseFileUploadReturn, h as createFileTypeValidator, j as formatFileSize, d as getFileExtensions, e as getFileMimeTypes, g as getFileTypeDefinition, f as getFileTypesByCategory, l as isCryptoSupported, k as isFileApiSupported, i as isFileTypeMatch, u as useFileUpload, v as validateFile } from './file-uploader-DZW0tk1P.mjs';
export { FileUploadProgress, UploadProgress, UploadProgressProps, UseUploadProgressReturn, useUploadProgress } from './file-uploader/index.mjs';
export { AcceptReject, ConfidenceThresholdSettings, EditableField, ExtractedDataDisplay, ExtractedDataDisplayProps, ItemHookData, JsonObject, JsonShape, JsonValue, ListRenderer, PrimitiveValue, PropertyRenderer, RendererMetadata, TableRenderer, UseItemDataOptions, getConfidenceBackgroundClass, useItemData } from './extracted-data/index.mjs';
export { BoundingBox, FileData, FilePreview, FilePreviewProps, Highlight, PageData, PdfNavigator, PdfPreview, useFileData } from './file-preview/index.mjs';
export { BuiltInColumnConfig, BusinessConfig, Column, ColumnHeader, EXTRACTED_DATA_COLUMN_NAMES, ExtractedDataItemGrid, FormattedDate, ItemGrid, PaginationControls, PaginationState, ReviewStatusBadge, STATUS_OPTIONS, SortDirection, SortState, SyncedIcon, createExtractedDataColumn, getItemsToReviewCount, useItemGridData } from './item-grid/index.mjs';
import { WorkflowEvent } from './workflows/index.mjs';
export { AgentStreamDisplay, RunStatus, WorkflowHandlerSummary, WorkflowProgressBar, WorkflowProgressState, WorkflowTrigger, createHandlerStore, useHandlerStore, useWorkflowHandler, useWorkflowHandlerList, useWorkflowProgress, useWorkflowRun } from './workflows/index.mjs';
export { IndexPipeline, useIndex, useIndexList, useIndexStore } from './indexes/index.mjs';
export { ItemCount, ItemCountProps } from './item-count/index.mjs';
export { ApiClients, ApiProvider, ApiProviderProps, CloudApiClient, createMockClients, useAgentDataClient, useApiClients, useCloudApiClient, useWorkflowsClient } from './lib/index.mjs';
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './base/accordion.mjs';
export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './base/alert-dialog.mjs';
export { Avatar, AvatarFallback, AvatarImage } from './base/avatar.mjs';
export { Badge, badgeVariants } from './base/badge.mjs';
export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from './base/breadcrumb.mjs';
export { Button, buttonVariants } from './base/button.mjs';
export { Calendar, CalendarDayButton } from './base/calendar.mjs';
export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './base/card.mjs';
export { Checkbox } from './base/checkbox.mjs';
export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from './base/command.mjs';
export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger } from './base/context-menu.mjs';
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './base/dialog.mjs';
export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './base/drawer.mjs';
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './base/dropdown-menu.mjs';
export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField } from './base/form.mjs';
export { HoverCard, HoverCardContent, HoverCardTrigger } from './base/hover-card.mjs';
export { Input } from './base/input.mjs';
export { Label } from './base/label.mjs';
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from './base/menubar.mjs';
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle } from './base/navigation-menu.mjs';
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from './base/pagination.mjs';
export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './base/popover.mjs';
export { Progress } from './base/progress.mjs';
export { RadioGroup, RadioGroupItem } from './base/radio-group.mjs';
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from './base/resizable.mjs';
export { ScrollArea, ScrollBar } from './base/scroll-area.mjs';
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './base/select.mjs';
export { Separator } from './base/separator.mjs';
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from './base/sheet.mjs';
export { Skeleton } from './base/skeleton.mjs';
export { Slider } from './base/slider.mjs';
export { Toaster } from './base/sonner.mjs';
export { Switch } from './base/switch.mjs';
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './base/table.mjs';
export { Tabs, TabsContent, TabsList, TabsTrigger } from './base/tabs.mjs';
export { Textarea } from './base/textarea.mjs';
export { Toggle, toggleVariants } from './base/toggle.mjs';
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './base/tooltip.mjs';
export { c as cn } from './utils-Cbsgs0XP.mjs';
export { AgentClient as CloudAgentClient, createAgentDataClient as createCloudAgentClient } from 'llama-cloud-services/beta/agent';
export { Client as WorkflowsClient, createClient as createWorkflowsClient, createConfig as createWorkflowsConfig, client as workflowsClient } from '@llamaindex/workflows-client';
export { client as cloudApiClient } from 'llama-cloud-services/api';
import 'react/jsx-runtime';
import 'react';
import 'zod/v4/core';
import 'zustand';
import '@radix-ui/react-accordion';
import '@radix-ui/react-alert-dialog';
import '@radix-ui/react-avatar';
import 'class-variance-authority/types';
import 'class-variance-authority';
import 'react-day-picker';
import '@radix-ui/react-checkbox';
import 'cmdk';
import '@radix-ui/react-dialog';
import '@radix-ui/react-context-menu';
import 'vaul';
import '@radix-ui/react-dropdown-menu';
import 'react-hook-form';
import '@radix-ui/react-label';
import '@radix-ui/react-slot';
import '@radix-ui/react-hover-card';
import '@radix-ui/react-menubar';
import '@radix-ui/react-navigation-menu';
import '@radix-ui/react-popover';
import '@radix-ui/react-progress';
import '@radix-ui/react-radio-group';
import 'react-resizable-panels';
import '@radix-ui/react-scroll-area';
import '@radix-ui/react-select';
import '@radix-ui/react-separator';
import '@radix-ui/react-slider';
import 'sonner';
import '@radix-ui/react-switch';
import '@radix-ui/react-tabs';
import '@radix-ui/react-toggle';
import '@radix-ui/react-tooltip';
import 'clsx';
type FileData = {
filename: string;
mediaType: string;
url: string;
};
type MessagePart = TextPart | DataPart | FilePart | AnyPart;
declare const TextPartType: "text";
declare const FilePartType: "data-file";
type TextPart = {
type: typeof TextPartType;
text: string;
};
type DataPart<T extends `data-${string}` = `data-${string}`, D = any> = {
id?: string;
type: T;
data: D;
};
type FilePart = DataPart<typeof FilePartType, FileData>;
type AnyPart<T extends string = any> = {
id?: string;
type: T;
data?: any;
};
declare const MessageRole: {
readonly System: "system";
readonly User: "user";
readonly Assistant: "assistant";
};
type MessageRoleType = (typeof MessageRole)[keyof typeof MessageRole];
interface Message {
id: string;
role: MessageRoleType;
parts: MessagePart[];
}
type ChatRequestOptions = {
headers?: Record<string, string> | Headers;
body?: object;
};
type ChatHandler = {
messages: Message[];
status: "idle" | "submitted" | "streaming" | "ready" | "error";
sendMessage: (msg: Message, opts?: ChatRequestOptions) => Promise<void>;
stop?: () => Promise<void>;
regenerate?: (opts?: {
messageId?: string;
} & ChatRequestOptions) => void;
setMessages?: (messages: Message[]) => void;
};
/**
* StreamingMessage Class
* Manages event accumulation and parsing for streaming messages
*
* Problem:
* - During streaming, delta events contain partial text (e.g., "```py", "thon\n", "def ")
* - Parsing each event individually breaks markdown/XML syntax detection
* - Different event types (delta, tool call, etc.) should not be merged together
*
* Solution:
* - Only merge **adjacent** delta events
* - When a non-delta event arrives, flush the current text buffer
* - Maintain two lists: finalized parts + current text parts
* - Incrementally update for O(1) getParts()
*
* Example flow:
* 1. delta1 + delta2 + delta3 → merged in buffer, parsed as TextPart(s)
* 2. tool_call_event → flush buffer to finalized, append ToolCallPart to finalized
* 3. delta4 + delta5 → merged in new buffer, parsed as TextPart(s)
* 4. InputRequiredEvent → flush buffer to finalized, append InputRequiredPart to finalized
*
* Usage in chat-store:
* - Create instance when streaming starts (with messageId)
* - Call addEvent() for each incoming event (triggers incremental parse)
* - Call getParts() to get current MessagePart[] (returns finalized + current)
* - Call complete() when streaming ends (flushes remaining buffer)
*/
declare class StreamingMessage {
private events;
private currentTextBuffer;
private currentTextParts;
private finalizedParts;
private _status;
readonly messageId: string;
constructor(messageId: string);
/**
* Get current status
*/
get status(): "streaming" | "completed";
/**
* Add a new event and incrementally update the parsed result
* Only adjacent delta events are merged together
*/
addEvent(event: WorkflowEvent): void;
/**
* Mark the streaming as completed and flush any remaining text
*/
complete(): void;
/**
* Get current MessagePart[] (returns finalized + current, O(1))
*/
getParts(): MessagePart[];
/**
* Get accumulated events (mainly for debugging)
*/
getEvents(): WorkflowEvent[];
/**
* Get current text buffer (mainly for debugging)
*/
getTextBuffer(): string;
/**
* Clear all accumulated state
*/
clear(): void;
/**
* Flush the current text buffer (finalize adjacent delta events)
* This is called when a non-delta event arrives or streaming completes
*/
private flushTextBuffer;
}
/**
* Chat Store Types
* Based on contracts/chat-store.contract.ts
*/
/**
* Chat session state
*
* NOTE: sessionId conceptually equals handlerId
* One chat session = one handler
* (run_id exists in telemetry but not tracked in state)
*/
interface ChatSession {
handlerId: string;
workflowName: string;
messages: Message[];
status: "idle" | "submitted" | "streaming" | "ready" | "error";
error: Error | null;
streamingMessage: StreamingMessage | null;
}
/**
* Options for creating a chat session
*/
interface CreateSessionOptions {
workflowName: string;
handlerId?: string;
initialMessages?: Message[];
}
/**
* Chat store state and actions
*/
interface ChatStoreState {
sessions: Record<string, ChatSession>;
createSession(options: CreateSessionOptions): Promise<string>;
deleteSession(handlerId: string): void;
getSession(handlerId: string): ChatSession | undefined;
sendMessage(handlerId: string, message: Message, opts?: ChatRequestOptions): Promise<void>;
setMessages(handlerId: string, messages: Message[]): void;
_appendMessage(handlerId: string, message: Message): void;
_updateAssistantMessage(handlerId: string, messageId: string, parts: MessagePart[]): void;
setStatus(handlerId: string, status: ChatSession["status"]): void;
setError(handlerId: string, error: Error | null): void;
stop(handlerId: string): Promise<void>;
regenerate(handlerId: string, messageId?: string): Promise<void>;
_setStreamingMessage(handlerId: string, streamingMessage: StreamingMessage | null): void;
}
/**
* Chat Store Hook with Auto-Singleton Pattern
* Provides both selector API and direct store access
* Pattern: Similar to workflows/hooks/use-handler-store.ts
*/
declare function useChatStore(): ChatStoreState;
declare function useChatStore<T>(selector: (state: ChatStoreState) => T): T;
/**
* useChat Hook - Bridge Chat UI to Workflow
* Implements ChatHandler interface backed by Zustand store
*/
interface UseChatOptions {
/**
* Workflow name to use for this chat session
*/
workflowName: string;
/**
* Optional handler ID to reuse existing session
* If not provided, a new session will be created
*/
handlerId?: string;
/**
* Optional initial messages to populate the chat
*/
initialMessages?: Message[];
/**
* Callback when chat session is initialized and handlerId is available
* - If handlerId is provided: fires on mount
* - If no handlerId: fires when first message is sent (lazy initialization)
*/
onReady?: (handlerId: string) => void;
/**
* Callback on error
*/
onError?: (error: Error) => void;
}
/**
* Hook to manage a chat session as a workflow
*
* Session initialization is lazy by default - the session is created when the first message is sent.
* If you provide a handlerId, the session is initialized immediately on mount.
*
* @example
* ```tsx
* // Lazy initialization - session created on first message
* function MyChat() {
* const chat = useChat({
* workflowName: "my-chat-workflow",
* onReady: (handlerId) => {
* // Called when first message is sent
* console.log("Chat ready:", handlerId);
* },
* });
*
* return <ChatSection handler={chat} />;
* }
*
* // Eager initialization - session created on mount
* function MyResumableChat() {
* const chat = useChat({
* workflowName: "my-chat-workflow",
* handlerId: "existing-session-123",
* onReady: (handlerId) => {
* // Called immediately on mount
* console.log("Chat ready:", handlerId);
* },
* });
*
* return <ChatSection handler={chat} />;
* }
* ```
*/
declare function useChat(options: UseChatOptions): ChatHandler & {
handlerId: string | null;
};
export { type UseChatOptions, WorkflowEvent, useChat, useChatStore };