@apteva/apteva-kit 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Chat/Chat.tsx","../src/components/Chat/MessageList.tsx","../src/utils/cn.ts","../src/utils/mock-data.ts","../src/components/Widgets/Widgets.tsx","../src/components/Widgets/widget-library/Card.tsx","../src/components/Widgets/widget-library/List.tsx","../src/components/Widgets/widget-library/Button.tsx","../src/components/Widgets/WidgetRenderer.tsx","../src/components/Chat/Message.tsx","../src/components/Chat/Composer.tsx","../src/components/Command/Command.tsx","../src/components/Prompt/Prompt.tsx","../src/components/Stream/Stream.tsx","../src/components/Threads/ThreadList.tsx","../src/components/Threads/ThreadItem.tsx","../src/components/Threads/Threads.tsx","../src/utils/theme-script.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { ChatProps } from '../../types/components';\nimport { Message as MessageType } from '../../types/messages';\nimport { MessageList } from './MessageList';\nimport { Composer } from './Composer';\nimport { cn, mockMessages, generateMockResponse } from '../../utils';\n\nexport function Chat({\n agentId,\n threadId,\n initialMessages = [],\n onThreadChange,\n onMessageSent,\n onAction,\n placeholder = 'Type a message...',\n showHeader = true,\n headerTitle = 'Chat',\n className,\n}: ChatProps) {\n const [messages, setMessages] = useState<MessageType[]>(initialMessages.length > 0 ? initialMessages : mockMessages);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n // Load messages when threadId changes\n if (threadId) {\n // In real implementation, fetch messages from API\n console.log('Loading thread:', threadId);\n onThreadChange?.(threadId);\n }\n }, [threadId, onThreadChange]);\n\n const handleSendMessage = async (text: string) => {\n // Add user message\n const userMessage: MessageType = {\n id: `msg-${Date.now()}`,\n role: 'user',\n content: text,\n timestamp: new Date(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n onMessageSent?.(userMessage);\n\n // Simulate AI response\n setIsLoading(true);\n try {\n const response = await generateMockResponse(1000);\n setMessages((prev) => [...prev, response]);\n } catch (error) {\n console.error('Error generating response:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <div className={cn('apteva-chat-container', className)}>\n {showHeader && (\n <div className=\"border-b border-gray-200 dark:border-gray-700 px-4 py-3\">\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">{headerTitle}</h2>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">Agent: {agentId}</p>\n </div>\n )}\n\n <MessageList messages={messages} onAction={onAction} />\n\n {isLoading && (\n <div className=\"px-4 py-2 text-sm text-gray-500 italic\">AI is thinking...</div>\n )}\n\n <Composer onSendMessage={handleSendMessage} placeholder={placeholder} disabled={isLoading} />\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { Message as MessageType } from '../../types/messages';\nimport { Message } from './Message';\nimport { ActionEvent } from '../../types/actions';\n\ninterface MessageListProps {\n messages: MessageType[];\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function MessageList({ messages, onAction }: MessageListProps) {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n // Auto-scroll to bottom when new messages arrive\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }\n }, [messages]);\n\n return (\n <div ref={listRef} className=\"apteva-message-list\">\n {messages.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-gray-500\">\n <div className=\"text-center space-y-2\">\n <div className=\"text-4xl\">💬</div>\n <p>No messages yet. Start a conversation!</p>\n </div>\n </div>\n ) : (\n messages.map((message) => <Message key={message.id} message={message} onAction={onAction} />)\n )}\n </div>\n );\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Message, Thread } from '../types/messages';\nimport { Widget } from '../types/widgets';\n\nexport const mockMessages: Message[] = [\n {\n id: 'msg-1',\n role: 'assistant',\n content: 'Hello! I\\'m your AI assistant. How can I help you today?',\n timestamp: new Date(Date.now() - 3600000),\n },\n {\n id: 'msg-2',\n role: 'user',\n content: 'I want to plan a trip to Europe',\n timestamp: new Date(Date.now() - 3500000),\n },\n {\n id: 'msg-3',\n role: 'assistant',\n content: 'Great choice! Europe has amazing destinations. What\\'s your budget and how many days do you have?',\n timestamp: new Date(Date.now() - 3400000),\n },\n {\n id: 'msg-4',\n role: 'user',\n content: 'Around $2000 for 5 days',\n timestamp: new Date(Date.now() - 3300000),\n },\n {\n id: 'msg-5',\n role: 'assistant',\n content: 'Perfect! I found some great destinations that fit your budget:',\n widgets: [\n {\n type: 'list',\n id: 'destinations-1',\n props: {\n items: [\n {\n id: 'paris',\n title: 'Paris, France',\n subtitle: '5 days • $1,850',\n description: 'The City of Light with iconic landmarks',\n metadata: { city: 'Paris', country: 'France', lat: 48.8566, lng: 2.3522, price: 1850, days: 5 },\n },\n {\n id: 'rome',\n title: 'Rome, Italy',\n subtitle: '5 days • $1,650',\n description: 'Ancient history meets modern culture',\n metadata: { city: 'Rome', country: 'Italy', lat: 41.9028, lng: 12.4964, price: 1650, days: 5 },\n },\n {\n id: 'barcelona',\n title: 'Barcelona, Spain',\n subtitle: '5 days • $1,450',\n description: 'Beautiful beaches and Gaudí architecture',\n metadata: { city: 'Barcelona', country: 'Spain', lat: 41.3851, lng: 2.1734, price: 1450, days: 5 },\n },\n ],\n },\n actions: [\n {\n type: 'select_destination',\n label: 'Select',\n handler: 'client',\n payload: {},\n },\n {\n type: 'view_details',\n label: 'Details',\n handler: 'server',\n payload: {},\n },\n ],\n },\n ],\n timestamp: new Date(Date.now() - 3200000),\n },\n];\n\nexport const mockThreads: Thread[] = [\n {\n id: 'thread-1',\n title: 'Trip to Europe',\n preview: 'Planning a 5-day trip...',\n createdAt: new Date(Date.now() - 86400000),\n updatedAt: new Date(Date.now() - 3600000),\n messageCount: 12,\n },\n {\n id: 'thread-2',\n title: 'Restaurant Recommendations',\n preview: 'Looking for good places...',\n createdAt: new Date(Date.now() - 172800000),\n updatedAt: new Date(Date.now() - 86400000),\n messageCount: 8,\n },\n {\n id: 'thread-3',\n title: 'Budget Planning',\n preview: 'Help with monthly budget',\n createdAt: new Date(Date.now() - 259200000),\n updatedAt: new Date(Date.now() - 172800000),\n messageCount: 15,\n },\n];\n\nexport const mockWidgets: Widget[] = [\n {\n type: 'card',\n id: 'card-1',\n props: {\n title: 'Paris, France',\n description: '5-day adventure in the City of Light',\n image: 'https://images.unsplash.com/photo-1502602898657-3e91760cbb34',\n footer: 'Total: $1,850',\n },\n actions: [\n {\n type: 'book_trip',\n label: 'Book Now',\n handler: 'client',\n payload: { tripId: 'trip-paris' },\n },\n ],\n },\n {\n type: 'card',\n id: 'card-2',\n props: {\n title: 'Rome, Italy',\n description: 'Explore ancient wonders',\n image: 'https://images.unsplash.com/photo-1552832230-c0197dd311b5',\n footer: 'Total: $1,650',\n },\n actions: [\n {\n type: 'book_trip',\n label: 'Book Now',\n handler: 'client',\n payload: { tripId: 'trip-rome' },\n },\n ],\n },\n];\n\nexport function generateMockResponse(delay: number = 1000): Promise<Message> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n id: `msg-${Date.now()}`,\n role: 'assistant',\n content: 'This is a mock response. In production, this would come from your AI agent API.',\n timestamp: new Date(),\n });\n }, delay);\n });\n}\n\nexport function generateMockStreamingResponse(\n text: string,\n onChunk: (chunk: string) => void,\n typingSpeed: number = 30\n): Promise<void> {\n return new Promise((resolve) => {\n const words = text.split(' ');\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n if (currentIndex < words.length) {\n onChunk(words[currentIndex] + ' ');\n currentIndex++;\n } else {\n clearInterval(interval);\n resolve();\n }\n }, typingSpeed);\n });\n}\n","import { useEffect } from 'react';\nimport { WidgetsProps } from '../../types/components';\nimport { WidgetRenderer } from './WidgetRenderer';\nimport { cn } from '../../utils';\n\nexport function Widgets({\n widgets,\n onAction,\n onWidgetMount,\n layout = 'stack',\n spacing = 'normal',\n columns = 3,\n className,\n}: WidgetsProps) {\n useEffect(() => {\n widgets.forEach((widget) => {\n onWidgetMount?.(widget.id);\n });\n }, [widgets, onWidgetMount]);\n\n const layoutClasses = {\n stack: 'flex flex-col',\n grid: `grid grid-cols-1 md:grid-cols-${columns}`,\n masonry: 'columns-1 md:columns-2 lg:columns-3',\n };\n\n const spacingClasses = {\n tight: 'gap-2',\n normal: 'gap-4',\n loose: 'gap-6',\n };\n\n return (\n <div className={cn(layoutClasses[layout], spacingClasses[spacing], className)}>\n {widgets.map((widget) => (\n <WidgetRenderer key={widget.id} widget={widget} onAction={onAction} />\n ))}\n </div>\n );\n}\n","// No direct imports needed 'react';\nimport { CardWidget } from '../../../types/widgets';\nimport { ActionEvent } from '../../../types/actions';\n\ninterface CardProps {\n widget: CardWidget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function Card({ widget, onAction }: CardProps) {\n const { title, description, image, footer } = widget.props;\n\n return (\n <div className=\"apteva-widget-card\">\n {image && <img src={image} alt={title} className=\"w-full h-48 object-cover\" />}\n\n <div className=\"p-4\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">{title}</h3>\n {description && <p className=\"text-gray-600 dark:text-gray-400 mt-2\">{description}</p>}\n </div>\n\n {(footer || (widget.actions && widget.actions.length > 0)) && (\n <div className=\"border-t border-gray-200 dark:border-gray-700 p-4 flex justify-between items-center\">\n {footer && <span className=\"text-sm text-gray-600 dark:text-gray-400\">{footer}</span>}\n\n {widget.actions && widget.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {widget.actions.map((action, idx) => (\n <button\n key={idx}\n onClick={() =>\n onAction?.({\n type: action.type,\n payload: action.payload,\n widgetId: widget.id,\n timestamp: new Date(),\n })\n }\n className=\"apteva-widget-button\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","// No direct imports needed 'react';\nimport { ListWidget } from '../../../types/widgets';\nimport { ActionEvent } from '../../../types/actions';\n\ninterface ListProps {\n widget: ListWidget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function List({ widget, onAction }: ListProps) {\n const { items } = widget.props;\n\n return (\n <div className=\"apteva-widget-list\">\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center p-4 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\">\n {item.image && <img src={item.image} alt={item.title} className=\"w-16 h-16 rounded object-cover\" />}\n\n <div className=\"flex-1 ml-4\">\n <h4 className=\"font-semibold text-gray-900 dark:text-white\">{item.title}</h4>\n {item.subtitle && <p className=\"text-sm text-gray-600 dark:text-gray-400\">{item.subtitle}</p>}\n {item.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-500 mt-1\">{item.description}</p>\n )}\n </div>\n\n {widget.actions && widget.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {widget.actions.map((action, idx) => (\n <button\n key={idx}\n onClick={() =>\n onAction?.({\n type: action.type,\n payload: item.metadata || item,\n widgetId: widget.id,\n timestamp: new Date(),\n })\n }\n className=\"px-3 py-1.5 text-sm rounded-lg font-medium transition-colors bg-apteva-500 text-white hover:bg-apteva-600\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n","// No direct imports needed 'react';\nimport { ButtonWidget } from '../../../types/widgets';\nimport { ActionEvent } from '../../../types/actions';\nimport { cn } from '../../../utils';\n\ninterface ButtonProps {\n widget: ButtonWidget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function Button({ widget, onAction }: ButtonProps) {\n const { label, variant = 'primary', disabled = false } = widget.props;\n\n const variantClasses = {\n primary: 'bg-apteva-500 text-white hover:bg-apteva-600',\n secondary: 'bg-gray-500 text-white hover:bg-gray-600',\n outline: 'border-2 border-apteva-500 text-apteva-500 hover:bg-apteva-50',\n ghost: 'text-apteva-500 hover:bg-apteva-50',\n };\n\n return (\n <button\n onClick={() =>\n widget.actions?.[0] &&\n onAction?.({\n type: widget.actions[0].type,\n payload: widget.actions[0].payload,\n widgetId: widget.id,\n timestamp: new Date(),\n })\n }\n disabled={disabled}\n className={cn('px-4 py-2 rounded-lg font-medium transition-colors', variantClasses[variant], {\n 'opacity-50 cursor-not-allowed': disabled,\n })}\n >\n {label}\n </button>\n );\n}\n","// No direct imports needed 'react';\nimport { Widget } from '../../types/widgets';\nimport { ActionEvent } from '../../types/actions';\nimport { Card, List, Button } from './widget-library';\n\ninterface WidgetRendererProps {\n widget: Widget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function WidgetRenderer({ widget, onAction }: WidgetRendererProps) {\n switch (widget.type) {\n case 'card':\n return <Card widget={widget as any} onAction={onAction} />;\n case 'list':\n return <List widget={widget as any} onAction={onAction} />;\n case 'button':\n return <Button widget={widget as any} onAction={onAction} />;\n default:\n return (\n <div className=\"p-4 border border-yellow-300 bg-yellow-50 rounded-lg\">\n <p className=\"text-sm text-yellow-800\">Unknown widget type: {widget.type}</p>\n <pre className=\"text-xs mt-2 overflow-auto\">{JSON.stringify(widget, null, 2)}</pre>\n </div>\n );\n }\n}\n","// No direct imports needed 'react';\nimport { Message as MessageType } from '../../types/messages';\nimport { cn } from '../../utils';\nimport { Widgets } from '../Widgets';\nimport { ActionEvent } from '../../types/actions';\n\ninterface MessageProps {\n message: MessageType;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function Message({ message, onAction }: MessageProps) {\n const isUser = message.role === 'user';\n\n return (\n <div className={cn('apteva-message', isUser ? 'apteva-message-user' : 'apteva-message-assistant')}>\n <div className=\"whitespace-pre-wrap\">{message.content}</div>\n\n {message.widgets && message.widgets.length > 0 && (\n <div className=\"mt-4\">\n <Widgets widgets={message.widgets} onAction={onAction} layout=\"stack\" />\n </div>\n )}\n\n <div className=\"text-xs opacity-70 mt-2\">\n {message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n </div>\n );\n}\n","import { useState, KeyboardEvent, useRef } from 'react';\n\ninterface ComposerProps {\n onSendMessage: (text: string) => void;\n placeholder?: string;\n disabled?: boolean;\n}\n\nexport function Composer({ onSendMessage, placeholder = 'Type a message...', disabled = false }: ComposerProps) {\n const [text, setText] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n const handleSend = () => {\n if (text.trim() && !disabled) {\n onSendMessage(text.trim());\n setText('');\n // Reset textarea height\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n }\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setText(e.target.value);\n // Auto-resize textarea\n e.target.style.height = 'auto';\n e.target.style.height = `${e.target.scrollHeight}px`;\n };\n\n return (\n <div className=\"apteva-composer\">\n <div className=\"flex gap-2\">\n <textarea\n ref={textareaRef}\n value={text}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className=\"apteva-composer-input\"\n rows={1}\n style={{ maxHeight: '200px' }}\n />\n <button\n onClick={handleSend}\n disabled={!text.trim() || disabled}\n className=\"px-6 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors font-medium\"\n >\n Send\n </button>\n </div>\n <div className=\"text-xs text-gray-500 mt-2\">Press Enter to send, Shift+Enter for new line</div>\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { CommandProps, CommandResult } from '../../types/components';\nimport { cn, generateMockResponse } from '../../utils';\n\nexport function Command({\n agentId,\n command: initialCommand,\n context,\n autoExecute = false,\n allowInput = true,\n placeholder = 'Enter your command...',\n submitButtonText = 'Execute',\n variant = 'default',\n onStart,\n onProgress,\n onChunk,\n onComplete,\n onError,\n loadingText = 'Processing...',\n showProgress = true,\n enableStreaming = false,\n resultRenderer,\n className,\n}: CommandProps) {\n const [state, setState] = useState<'idle' | 'loading' | 'success' | 'error'>('idle');\n const [result, setResult] = useState<CommandResult | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [progress, setProgress] = useState(0);\n const [command, setCommand] = useState(initialCommand || '');\n const [streamedContent, setStreamedContent] = useState('');\n\n useEffect(() => {\n if (autoExecute && state === 'idle' && command) {\n executeCommand();\n }\n }, [autoExecute]);\n\n const executeCommand = async () => {\n if (!command.trim()) {\n setError(new Error('Please enter a command'));\n setState('error');\n return;\n }\n setState('loading');\n setError(null);\n setProgress(0);\n setStreamedContent('');\n onStart?.();\n\n try {\n if (enableStreaming) {\n // Simulate streaming response with status messages\n const mockStreamChunks = [\n 'Initializing...',\n 'Connecting to agent...',\n 'Processing your request...',\n 'Analyzing data sources...',\n 'Gathering information...',\n 'Generating response...',\n 'Finalizing results...',\n ];\n\n for (let i = 0; i < mockStreamChunks.length; i++) {\n await new Promise((resolve) => setTimeout(resolve, 600 + Math.random() * 400));\n const chunk = mockStreamChunks[i];\n setStreamedContent(chunk);\n onChunk?.(chunk);\n setProgress(Math.round(((i + 1) / mockStreamChunks.length) * 100));\n onProgress?.(Math.round(((i + 1) / mockStreamChunks.length) * 100));\n }\n\n const mockResult: CommandResult = {\n success: true,\n data: {\n summary: `Successfully processed: \"${command}\"`,\n agentId,\n context,\n timestamp: new Date().toISOString(),\n },\n message: 'Command executed successfully',\n };\n\n setResult(mockResult);\n setState('success');\n setProgress(100);\n onComplete?.(mockResult);\n } else {\n // Original non-streaming behavior\n const progressInterval = setInterval(() => {\n setProgress((prev) => {\n const next = Math.min(prev + 10, 90);\n onProgress?.(next);\n return next;\n });\n }, 200);\n\n await new Promise((resolve) => setTimeout(resolve, 2000));\n clearInterval(progressInterval);\n\n const mockResult: CommandResult = {\n success: true,\n data: {\n summary: `Command \"${command}\" executed successfully`,\n agentId,\n context,\n timestamp: new Date().toISOString(),\n },\n message: 'Execution complete',\n };\n\n setResult(mockResult);\n setState('success');\n setProgress(100);\n onComplete?.(mockResult);\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Unknown error');\n setError(error);\n setState('error');\n onError?.(error);\n }\n };\n\n const resetCommand = () => {\n setState('idle');\n setResult(null);\n setError(null);\n setProgress(0);\n setCommand('');\n };\n\n const isCompact = variant === 'compact';\n\n return (\n <div\n className={cn(\n 'relative border-2 rounded-xl bg-white dark:bg-gray-900 transition-all duration-300 flex flex-col',\n state === 'loading' && 'animate-pulse-border',\n state === 'idle' && 'border-gray-300 dark:border-gray-700',\n state === 'loading' && 'border-apteva-500',\n state === 'success' && 'border-green-500',\n state === 'error' && 'border-red-500',\n className\n )}\n style={{ minHeight: isCompact ? 'auto' : '180px' }}\n >\n {/* Input/Display Area */}\n <div className={cn('flex-1 flex', isCompact ? 'flex-row items-center p-3 gap-3' : 'flex-col p-4')}>\n {state === 'idle' && allowInput && !isCompact && (\n <textarea\n value={command}\n onChange={(e) => setCommand(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n executeCommand();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1 w-full resize-none bg-transparent border-none focus:outline-none text-gray-900 dark:text-white placeholder-gray-400\"\n rows={6}\n />\n )}\n\n {state === 'idle' && allowInput && isCompact && (\n <>\n <input\n type=\"text\"\n value={command}\n onChange={(e) => setCommand(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n executeCommand();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent border-none focus:outline-none text-gray-900 dark:text-white placeholder-gray-400 py-1\"\n />\n <button\n onClick={executeCommand}\n disabled={!command.trim()}\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-700 dark:text-gray-300',\n 'hover:bg-gray-50 dark:hover:bg-gray-700',\n 'disabled:opacity-30 disabled:cursor-not-allowed',\n !command.trim() && 'border-gray-200 dark:border-gray-700 text-gray-400 dark:text-gray-600'\n )}\n title=\"Execute\"\n >\n ↑\n </button>\n </>\n )}\n\n {state === 'loading' && !isCompact && (\n <div className=\"flex-1 flex flex-col items-center justify-center space-y-4 py-8\">\n <div className=\"w-6 h-6 border-2 border-gray-300 border-t-apteva-500 rounded-full animate-spin\"></div>\n <div className=\"text-gray-600 dark:text-gray-400 text-sm text-center max-w-md\">\n {enableStreaming && streamedContent ? streamedContent : loadingText}\n </div>\n {showProgress && (\n <div className=\"w-full max-w-sm\">\n <div className=\"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1.5\">\n <div\n className=\"bg-apteva-500 h-1.5 rounded-full transition-all duration-300\"\n style={{ width: `${progress}%` }}\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">{progress}%</p>\n </div>\n )}\n </div>\n )}\n\n {state === 'loading' && isCompact && (\n <>\n <div className=\"flex-1 flex items-center gap-3 py-1\">\n <div className=\"w-4 h-4 border-2 border-gray-300 border-t-apteva-500 rounded-full animate-spin\"></div>\n <div className=\"text-gray-600 dark:text-gray-400 text-sm truncate\">\n {enableStreaming && streamedContent ? streamedContent : loadingText}\n </div>\n </div>\n <button\n disabled\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0',\n 'border border-gray-200 dark:border-gray-700',\n 'bg-white dark:bg-gray-800',\n 'text-gray-400 dark:text-gray-600',\n 'opacity-30 cursor-not-allowed'\n )}\n >\n ↑\n </button>\n </>\n )}\n\n {state === 'error' && (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"mb-4 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg\">\n <div className=\"flex items-start gap-2\">\n <svg className=\"w-5 h-5 text-red-600 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <div>\n <h3 className=\"text-sm font-semibold text-red-800 dark:text-red-400\">Error</h3>\n <p className=\"text-red-700 dark:text-red-300 text-sm mt-1\">{error?.message}</p>\n </div>\n </div>\n </div>\n {allowInput && (\n <textarea\n value={command}\n onChange={(e) => setCommand(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n executeCommand();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1 w-full resize-none bg-transparent border-none focus:outline-none text-gray-900 dark:text-white placeholder-gray-400\"\n rows={4}\n />\n )}\n </div>\n )}\n\n {state === 'success' && result && !isCompact && (\n <div className=\"flex-1 overflow-auto\">\n {resultRenderer ? (\n resultRenderer(result.data)\n ) : (\n <div>\n <div className=\"flex items-start gap-3 mb-3 p-3 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg\">\n <svg className=\"w-5 h-5 text-green-600 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <div className=\"flex-1\">\n <h3 className=\"text-sm font-semibold text-green-800 dark:text-green-400 mb-1\">Success</h3>\n <p className=\"text-green-700 dark:text-green-300 text-sm\">{result.message || 'Command executed successfully'}</p>\n </div>\n </div>\n {result.data?.summary && (\n <div className=\"text-gray-700 dark:text-gray-300 text-sm leading-relaxed\">\n {result.data.summary}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {state === 'success' && result && isCompact && (\n <>\n <div className=\"flex-1 flex items-center gap-2 py-1\">\n <svg className=\"w-4 h-4 text-green-600 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <div className=\"text-green-700 dark:text-green-300 text-sm truncate\">\n {resultRenderer ? resultRenderer(result.data) : (result.message || 'Command executed successfully')}\n </div>\n </div>\n <button\n disabled\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0',\n 'border border-gray-200 dark:border-gray-700',\n 'bg-white dark:bg-gray-800',\n 'text-gray-400 dark:text-gray-600',\n 'opacity-30 cursor-not-allowed'\n )}\n >\n ↑\n </button>\n </>\n )}\n </div>\n\n {/* Bottom Action Bar - Only show for default variant when not in compact mode */}\n {!isCompact && (\n <div className=\"p-3 flex items-center justify-end gap-2\">\n {(state === 'success' || state === 'error') && allowInput && (\n <button\n onClick={resetCommand}\n className=\"px-3 py-1.5 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\"\n >\n Reset\n </button>\n )}\n\n {(state === 'idle' || state === 'error') && (\n <button\n onClick={executeCommand}\n disabled={!command.trim()}\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-700 dark:text-gray-300',\n 'hover:bg-gray-50 dark:hover:bg-gray-700',\n 'disabled:opacity-30 disabled:cursor-not-allowed',\n !command.trim() && 'border-gray-200 dark:border-gray-700 text-gray-400 dark:text-gray-600'\n )}\n title={state === 'error' ? 'Retry' : 'Execute'}\n >\n {state === 'error' ? '↻' : '↑'}\n </button>\n )}\n </div>\n )}\n\n\n <style dangerouslySetInnerHTML={{\n __html: `\n @keyframes pulse-border {\n 0%, 100% {\n border-color: rgb(59, 130, 246);\n }\n 50% {\n border-color: rgb(147, 197, 253);\n }\n }\n .animate-pulse-border {\n animation: pulse-border 2s ease-in-out infinite;\n }\n `\n }} />\n </div>\n );\n}\n","import { useState, KeyboardEvent } from 'react';\nimport { PromptProps } from '../../types/components';\nimport { cn } from '../../utils';\n\nexport function Prompt({\n agentId,\n placeholder = 'Enter your prompt...',\n initialValue = '',\n submitOn = 'button',\n debounceMs = 0,\n minLength = 0,\n maxLength,\n onSubmit,\n onResult,\n onChange,\n variant = 'inline',\n showSuggestions = false,\n className,\n}: PromptProps) {\n const [value, setValue] = useState(initialValue);\n const [isLoading, setIsLoading] = useState(false);\n const [suggestions] = useState(['Plan a trip', 'Write a description', 'Analyze data']);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (!maxLength || newValue.length <= maxLength) {\n setValue(newValue);\n onChange?.(newValue);\n }\n };\n\n const handleSubmit = async () => {\n if (value.length < minLength) return;\n\n onSubmit?.(value);\n setIsLoading(true);\n\n try {\n // Mock AI processing\n await new Promise((resolve) => setTimeout(resolve, 1500));\n const mockResult = `Enhanced version: ${value} [AI-generated content]`;\n onResult?.(mockResult);\n setValue('');\n } catch (error) {\n console.error('Error processing prompt:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (submitOn === 'enter' && e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const handleBlur = () => {\n if (submitOn === 'blur' && value.trim()) {\n handleSubmit();\n }\n };\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={isLoading}\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apteva-500 dark:bg-gray-800 dark:border-gray-600 dark:text-white\"\n />\n\n {submitOn === 'button' && (\n <button\n onClick={handleSubmit}\n disabled={isLoading || value.length < minLength}\n className=\"px-6 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors font-medium\"\n >\n {isLoading ? 'Processing...' : 'Generate'}\n </button>\n )}\n </div>\n\n {maxLength && (\n <p className=\"text-xs text-gray-500\">\n {value.length} / {maxLength} characters\n </p>\n )}\n\n {showSuggestions && !value && (\n <div className=\"flex flex-wrap gap-2\">\n {suggestions.map((suggestion, idx) => (\n <button\n key={idx}\n onClick={() => setValue(suggestion)}\n className=\"px-3 py-1 text-sm bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-full transition-colors\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n )}\n\n {isLoading && (\n <div className=\"flex items-center gap-2 text-sm text-gray-500\">\n <div className=\"w-4 h-4 border-2 border-apteva-500 border-t-transparent rounded-full animate-spin\" />\n <span>AI is processing your request...</span>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { StreamProps } from '../../types/components';\nimport { cn, generateMockStreamingResponse } from '../../utils';\n\nexport function Stream({\n agentId,\n prompt,\n context,\n autoStart = false,\n onStart,\n onChunk,\n onComplete,\n onError,\n variant = 'prose',\n showCursor = true,\n typingSpeed = 30,\n className,\n}: StreamProps) {\n const [text, setText] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [isComplete, setIsComplete] = useState(false);\n\n useEffect(() => {\n if (autoStart && !isStreaming && !isComplete) {\n startStreaming();\n }\n }, [autoStart]);\n\n const startStreaming = async () => {\n setIsStreaming(true);\n onStart?.();\n\n const mockText =\n 'This is a simulated streaming response from the AI agent. ' +\n 'In a real implementation, this would stream data from your backend API. ' +\n 'The text appears word by word to simulate the streaming effect. ' +\n 'You can customize the typing speed and styling based on your needs.';\n\n try {\n await generateMockStreamingResponse(\n mockText,\n (chunk) => {\n setText((prev) => prev + chunk);\n onChunk?.(chunk);\n },\n typingSpeed\n );\n\n setIsComplete(true);\n setIsStreaming(false);\n onComplete?.(text + mockText);\n } catch (error) {\n const err = error instanceof Error ? error : new Error('Streaming error');\n onError?.(err);\n setIsStreaming(false);\n }\n };\n\n const variantClasses = {\n prose: 'prose prose-sm max-w-none dark:prose-invert',\n code: 'font-mono text-sm bg-gray-900 text-green-400 p-4 rounded-lg',\n plain: 'text-gray-900 dark:text-gray-100',\n };\n\n if (!isStreaming && !isComplete) {\n return (\n <div className={cn('p-4', className)}>\n <button\n onClick={startStreaming}\n className=\"px-6 py-3 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 transition-colors font-medium\"\n >\n Start Streaming\n </button>\n </div>\n );\n }\n\n return (\n <div className={cn(variantClasses[variant], className)}>\n {text}\n {isStreaming && showCursor && <span className=\"apteva-stream-cursor\" />}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Thread } from '../../types/messages';\nimport { ThreadItem } from './ThreadItem';\n\ninterface ThreadListProps {\n threads: Thread[];\n currentThreadId?: string;\n onThreadSelect?: (threadId: string) => void;\n onThreadDelete?: (threadId: string) => void;\n showSearch?: boolean;\n groupBy?: 'date' | 'agent' | 'none';\n}\n\nexport function ThreadList({\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n showSearch = false,\n groupBy = 'none',\n}: ThreadListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n\n const filteredThreads = threads.filter(\n (thread) =>\n thread.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\n thread.preview?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n const groupedThreads = groupBy === 'date' ? groupThreadsByDate(filteredThreads) : { All: filteredThreads };\n\n return (\n <div className=\"flex flex-col h-full\">\n {showSearch && (\n <div className=\"p-3 border-b border-gray-200 dark:border-gray-700\">\n <input\n type=\"text\"\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apteva-500 dark:bg-gray-800 dark:border-gray-600 dark:text-white\"\n />\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto\">\n {Object.entries(groupedThreads).map(([group, groupThreads]) => (\n <div key={group}>\n {groupBy !== 'none' && (\n <div className=\"px-3 py-2 text-xs font-semibold text-gray-500 uppercase\">{group}</div>\n )}\n {groupThreads.map((thread) => (\n <ThreadItem\n key={thread.id}\n thread={thread}\n isActive={thread.id === currentThreadId}\n onSelect={() => onThreadSelect?.(thread.id)}\n onDelete={() => onThreadDelete?.(thread.id)}\n />\n ))}\n </div>\n ))}\n\n {filteredThreads.length === 0 && (\n <div className=\"p-8 text-center text-gray-500\">\n <div className=\"text-4xl mb-2\">💬</div>\n <p>No conversations found</p>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction groupThreadsByDate(threads: Thread[]): Record<string, Thread[]> {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n const lastWeek = new Date(today);\n lastWeek.setDate(lastWeek.getDate() - 7);\n\n return threads.reduce(\n (groups, thread) => {\n const threadDate = new Date(thread.updatedAt);\n let group = 'Older';\n\n if (threadDate >= today) {\n group = 'Today';\n } else if (threadDate >= yesterday) {\n group = 'Yesterday';\n } else if (threadDate >= lastWeek) {\n group = 'Last 7 Days';\n }\n\n if (!groups[group]) groups[group] = [];\n groups[group].push(thread);\n return groups;\n },\n {} as Record<string, Thread[]>\n );\n}\n","// No direct imports needed 'react';\nimport { Thread } from '../../types/messages';\nimport { cn } from '../../utils';\n\ninterface ThreadItemProps {\n thread: Thread;\n isActive?: boolean;\n onSelect?: () => void;\n onDelete?: () => void;\n}\n\nexport function ThreadItem({ thread, isActive = false, onSelect, onDelete }: ThreadItemProps) {\n return (\n <div\n className={cn('apteva-thread-item', {\n 'apteva-thread-item-active': isActive,\n })}\n onClick={onSelect}\n >\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"font-semibold text-gray-900 dark:text-white truncate\">{thread.title}</h4>\n {thread.preview && <p className=\"text-sm text-gray-600 dark:text-gray-400 truncate\">{thread.preview}</p>}\n <div className=\"flex items-center gap-2 mt-1 text-xs text-gray-500\">\n <span>{thread.messageCount} messages</span>\n <span>•</span>\n <span>{formatRelativeTime(thread.updatedAt)}</span>\n </div>\n </div>\n\n {onDelete && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDelete();\n }}\n className=\"p-2 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors\"\n title=\"Delete thread\"\n >\n 🗑️\n </button>\n )}\n </div>\n );\n}\n\nfunction formatRelativeTime(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n}\n","// No direct imports needed 'react';\nimport { ThreadsProps } from '../../types/components';\nimport { ThreadList } from './ThreadList';\nimport { cn } from '../../utils';\n\nexport function Threads({\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n onNewThread,\n variant = 'sidebar',\n showSearch = false,\n showNewButton = true,\n groupBy = 'none',\n className,\n}: ThreadsProps) {\n const variantClasses = {\n sidebar: 'h-full border-r border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900',\n dropdown: 'absolute top-full left-0 right-0 mt-2 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-h-96 overflow-hidden',\n tabs: 'flex gap-2 border-b border-gray-200 dark:border-gray-700 overflow-x-auto',\n };\n\n if (variant === 'tabs') {\n return (\n <div className={cn(variantClasses[variant], className)}>\n {threads.slice(0, 5).map((thread) => (\n <button\n key={thread.id}\n onClick={() => onThreadSelect?.(thread.id)}\n className={cn(\n 'px-4 py-2 whitespace-nowrap font-medium transition-colors',\n thread.id === currentThreadId\n ? 'border-b-2 border-apteva-500 text-apteva-500'\n : 'text-gray-600 hover:text-gray-900'\n )}\n >\n {thread.title}\n </button>\n ))}\n {showNewButton && onNewThread && (\n <button\n onClick={onNewThread}\n className=\"px-4 py-2 text-gray-600 hover:text-apteva-500 transition-colors font-medium\"\n >\n + New\n </button>\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(variantClasses[variant], 'flex flex-col', className)}>\n {showNewButton && onNewThread && (\n <div className=\"p-3 border-b border-gray-200 dark:border-gray-700\">\n <button\n onClick={onNewThread}\n className=\"w-full px-4 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 transition-colors font-medium\"\n >\n + New Conversation\n </button>\n </div>\n )}\n\n <ThreadList\n threads={threads}\n currentThreadId={currentThreadId}\n onThreadSelect={onThreadSelect}\n onThreadDelete={onThreadDelete}\n showSearch={showSearch}\n groupBy={groupBy}\n />\n </div>\n );\n}\n","/**\n * Theme initialization script that runs before React hydration\n * This prevents flickering by setting the theme before the page renders\n * Must be inlined in the HTML <head> as a blocking script\n */\n\nexport const themeScript = `\n(function() {\n try {\n // Get system preference\n const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n const colorMode = isDark ? 'dark' : 'light';\n\n // Set attributes before render\n document.documentElement.setAttribute('data-color-mode', colorMode);\n\n // Add dark class for Tailwind\n if (isDark) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {\n console.error('Failed to initialize theme:', e);\n }\n})();\n`;\n\nexport function getThemeScript() {\n return themeScript;\n}\n"],"mappings":"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","names":["useState","useEffect","useEffect","jsx","jsxs","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","jsx","jsxs","useState","useEffect","useState","useEffect","jsx","jsxs","useState","useEffect","error","useState","jsx","jsxs","useState","useState","useEffect","jsx","jsxs","useState","useEffect","useState","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/components/Chat/Chat.tsx","../src/components/Chat/MessageList.tsx","../src/utils/cn.ts","../src/utils/mock-data.ts","../src/components/Widgets/Widgets.tsx","../src/components/Widgets/widget-library/Card.tsx","../src/components/Widgets/widget-library/List.tsx","../src/components/Widgets/widget-library/Button.tsx","../src/components/Widgets/WidgetRenderer.tsx","../src/components/Chat/Message.tsx","../src/components/Chat/Composer.tsx","../src/components/Command/Command.tsx","../src/components/Prompt/Prompt.tsx","../src/components/Stream/Stream.tsx","../src/components/Threads/ThreadList.tsx","../src/components/Threads/ThreadItem.tsx","../src/components/Threads/Threads.tsx","../src/utils/theme-script.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { ChatProps } from '../../types/components';\nimport { Message as MessageType } from '../../types/messages';\nimport { MessageList } from './MessageList';\nimport { Composer } from './Composer';\nimport { cn, mockMessages, generateMockResponse } from '../../utils';\n\nexport function Chat({\n agentId,\n threadId,\n initialMessages = [],\n onThreadChange,\n onMessageSent,\n onAction,\n placeholder = 'Type a message...',\n showHeader = true,\n headerTitle = 'Chat',\n className,\n}: ChatProps) {\n const [messages, setMessages] = useState<MessageType[]>(initialMessages.length > 0 ? initialMessages : mockMessages);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n // Load messages when threadId changes\n if (threadId) {\n // In real implementation, fetch messages from API\n console.log('Loading thread:', threadId);\n onThreadChange?.(threadId);\n }\n }, [threadId, onThreadChange]);\n\n const handleSendMessage = async (text: string) => {\n // Add user message\n const userMessage: MessageType = {\n id: `msg-${Date.now()}`,\n role: 'user',\n content: text,\n timestamp: new Date(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n onMessageSent?.(userMessage);\n\n // Simulate AI response\n setIsLoading(true);\n try {\n const response = await generateMockResponse(1000);\n setMessages((prev) => [...prev, response]);\n } catch (error) {\n console.error('Error generating response:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <div className={cn('apteva-chat-container', className)}>\n {showHeader && (\n <div className=\"border-b border-gray-200 dark:border-gray-700 px-4 py-3\">\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">{headerTitle}</h2>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">Agent: {agentId}</p>\n </div>\n )}\n\n <MessageList messages={messages} onAction={onAction} />\n\n {isLoading && (\n <div className=\"px-4 py-2 text-sm text-gray-500 italic\">AI is thinking...</div>\n )}\n\n <Composer onSendMessage={handleSendMessage} placeholder={placeholder} disabled={isLoading} />\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { Message as MessageType } from '../../types/messages';\nimport { Message } from './Message';\nimport { ActionEvent } from '../../types/actions';\n\ninterface MessageListProps {\n messages: MessageType[];\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function MessageList({ messages, onAction }: MessageListProps) {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n // Auto-scroll to bottom when new messages arrive\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }\n }, [messages]);\n\n return (\n <div ref={listRef} className=\"apteva-message-list\">\n {messages.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-gray-500\">\n <div className=\"text-center space-y-2\">\n <div className=\"text-4xl\">💬</div>\n <p>No messages yet. Start a conversation!</p>\n </div>\n </div>\n ) : (\n messages.map((message) => <Message key={message.id} message={message} onAction={onAction} />)\n )}\n </div>\n );\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Message, Thread } from '../types/messages';\nimport { Widget } from '../types/widgets';\n\nexport const mockMessages: Message[] = [\n {\n id: 'msg-1',\n role: 'assistant',\n content: 'Hello! I\\'m your AI assistant. How can I help you today?',\n timestamp: new Date(Date.now() - 3600000),\n },\n {\n id: 'msg-2',\n role: 'user',\n content: 'I want to plan a trip to Europe',\n timestamp: new Date(Date.now() - 3500000),\n },\n {\n id: 'msg-3',\n role: 'assistant',\n content: 'Great choice! Europe has amazing destinations. What\\'s your budget and how many days do you have?',\n timestamp: new Date(Date.now() - 3400000),\n },\n {\n id: 'msg-4',\n role: 'user',\n content: 'Around $2000 for 5 days',\n timestamp: new Date(Date.now() - 3300000),\n },\n {\n id: 'msg-5',\n role: 'assistant',\n content: 'Perfect! I found some great destinations that fit your budget:',\n widgets: [\n {\n type: 'list',\n id: 'destinations-1',\n props: {\n items: [\n {\n id: 'paris',\n title: 'Paris, France',\n subtitle: '5 days • $1,850',\n description: 'The City of Light with iconic landmarks',\n metadata: { city: 'Paris', country: 'France', lat: 48.8566, lng: 2.3522, price: 1850, days: 5 },\n },\n {\n id: 'rome',\n title: 'Rome, Italy',\n subtitle: '5 days • $1,650',\n description: 'Ancient history meets modern culture',\n metadata: { city: 'Rome', country: 'Italy', lat: 41.9028, lng: 12.4964, price: 1650, days: 5 },\n },\n {\n id: 'barcelona',\n title: 'Barcelona, Spain',\n subtitle: '5 days • $1,450',\n description: 'Beautiful beaches and Gaudí architecture',\n metadata: { city: 'Barcelona', country: 'Spain', lat: 41.3851, lng: 2.1734, price: 1450, days: 5 },\n },\n ],\n },\n actions: [\n {\n type: 'select_destination',\n label: 'Select',\n handler: 'client',\n payload: {},\n },\n {\n type: 'view_details',\n label: 'Details',\n handler: 'server',\n payload: {},\n },\n ],\n },\n ],\n timestamp: new Date(Date.now() - 3200000),\n },\n];\n\nexport const mockThreads: Thread[] = [\n {\n id: 'thread-1',\n title: 'Trip to Europe',\n preview: 'Planning a 5-day trip...',\n createdAt: new Date(Date.now() - 86400000),\n updatedAt: new Date(Date.now() - 3600000),\n messageCount: 12,\n },\n {\n id: 'thread-2',\n title: 'Restaurant Recommendations',\n preview: 'Looking for good places...',\n createdAt: new Date(Date.now() - 172800000),\n updatedAt: new Date(Date.now() - 86400000),\n messageCount: 8,\n },\n {\n id: 'thread-3',\n title: 'Budget Planning',\n preview: 'Help with monthly budget',\n createdAt: new Date(Date.now() - 259200000),\n updatedAt: new Date(Date.now() - 172800000),\n messageCount: 15,\n },\n];\n\nexport const mockWidgets: Widget[] = [\n {\n type: 'card',\n id: 'card-1',\n props: {\n title: 'Paris, France',\n description: '5-day adventure in the City of Light',\n image: 'https://images.unsplash.com/photo-1502602898657-3e91760cbb34',\n footer: 'Total: $1,850',\n },\n actions: [\n {\n type: 'book_trip',\n label: 'Book Now',\n handler: 'client',\n payload: { tripId: 'trip-paris' },\n },\n ],\n },\n {\n type: 'card',\n id: 'card-2',\n props: {\n title: 'Rome, Italy',\n description: 'Explore ancient wonders',\n image: 'https://images.unsplash.com/photo-1552832230-c0197dd311b5',\n footer: 'Total: $1,650',\n },\n actions: [\n {\n type: 'book_trip',\n label: 'Book Now',\n handler: 'client',\n payload: { tripId: 'trip-rome' },\n },\n ],\n },\n];\n\nexport function generateMockResponse(delay: number = 1000): Promise<Message> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n id: `msg-${Date.now()}`,\n role: 'assistant',\n content: 'This is a mock response. In production, this would come from your AI agent API.',\n timestamp: new Date(),\n });\n }, delay);\n });\n}\n\nexport function generateMockStreamingResponse(\n text: string,\n onChunk: (chunk: string) => void,\n typingSpeed: number = 30\n): Promise<void> {\n return new Promise((resolve) => {\n const words = text.split(' ');\n let currentIndex = 0;\n\n const interval = setInterval(() => {\n if (currentIndex < words.length) {\n onChunk(words[currentIndex] + ' ');\n currentIndex++;\n } else {\n clearInterval(interval);\n resolve();\n }\n }, typingSpeed);\n });\n}\n","import { useEffect } from 'react';\nimport { WidgetsProps } from '../../types/components';\nimport { WidgetRenderer } from './WidgetRenderer';\nimport { cn } from '../../utils';\n\nexport function Widgets({\n widgets,\n onAction,\n onWidgetMount,\n layout = 'stack',\n spacing = 'normal',\n columns = 3,\n className,\n}: WidgetsProps) {\n useEffect(() => {\n widgets.forEach((widget) => {\n onWidgetMount?.(widget.id);\n });\n }, [widgets, onWidgetMount]);\n\n const layoutClasses = {\n stack: 'flex flex-col',\n grid: `grid grid-cols-1 md:grid-cols-${columns}`,\n masonry: 'columns-1 md:columns-2 lg:columns-3',\n };\n\n const spacingClasses = {\n tight: 'gap-2',\n normal: 'gap-4',\n loose: 'gap-6',\n };\n\n return (\n <div className={cn(layoutClasses[layout], spacingClasses[spacing], className)}>\n {widgets.map((widget) => (\n <WidgetRenderer key={widget.id} widget={widget} onAction={onAction} />\n ))}\n </div>\n );\n}\n","// No direct imports needed 'react';\nimport { CardWidget } from '../../../types/widgets';\nimport { ActionEvent } from '../../../types/actions';\n\ninterface CardProps {\n widget: CardWidget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function Card({ widget, onAction }: CardProps) {\n const { title, description, image, footer } = widget.props;\n\n return (\n <div className=\"apteva-widget-card\">\n {image && <img src={image} alt={title} className=\"w-full h-48 object-cover\" />}\n\n <div className=\"p-4\">\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-white\">{title}</h3>\n {description && <p className=\"text-gray-600 dark:text-gray-400 mt-2\">{description}</p>}\n </div>\n\n {(footer || (widget.actions && widget.actions.length > 0)) && (\n <div className=\"border-t border-gray-200 dark:border-gray-700 p-4 flex justify-between items-center\">\n {footer && <span className=\"text-sm text-gray-600 dark:text-gray-400\">{footer}</span>}\n\n {widget.actions && widget.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {widget.actions.map((action, idx) => (\n <button\n key={idx}\n onClick={() =>\n onAction?.({\n type: action.type,\n payload: action.payload,\n widgetId: widget.id,\n timestamp: new Date(),\n })\n }\n className=\"apteva-widget-button\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","// No direct imports needed 'react';\nimport { ListWidget } from '../../../types/widgets';\nimport { ActionEvent } from '../../../types/actions';\n\ninterface ListProps {\n widget: ListWidget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function List({ widget, onAction }: ListProps) {\n const { items } = widget.props;\n\n return (\n <div className=\"apteva-widget-list\">\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center p-4 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\">\n {item.image && <img src={item.image} alt={item.title} className=\"w-16 h-16 rounded object-cover\" />}\n\n <div className=\"flex-1 ml-4\">\n <h4 className=\"font-semibold text-gray-900 dark:text-white\">{item.title}</h4>\n {item.subtitle && <p className=\"text-sm text-gray-600 dark:text-gray-400\">{item.subtitle}</p>}\n {item.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-500 mt-1\">{item.description}</p>\n )}\n </div>\n\n {widget.actions && widget.actions.length > 0 && (\n <div className=\"flex gap-2\">\n {widget.actions.map((action, idx) => (\n <button\n key={idx}\n onClick={() =>\n onAction?.({\n type: action.type,\n payload: item.metadata || item,\n widgetId: widget.id,\n timestamp: new Date(),\n })\n }\n className=\"px-3 py-1.5 text-sm rounded-lg font-medium transition-colors bg-apteva-500 text-white hover:bg-apteva-600\"\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n","// No direct imports needed 'react';\nimport { ButtonWidget } from '../../../types/widgets';\nimport { ActionEvent } from '../../../types/actions';\nimport { cn } from '../../../utils';\n\ninterface ButtonProps {\n widget: ButtonWidget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function Button({ widget, onAction }: ButtonProps) {\n const { label, variant = 'primary', disabled = false } = widget.props;\n\n const variantClasses = {\n primary: 'bg-apteva-500 text-white hover:bg-apteva-600',\n secondary: 'bg-gray-500 text-white hover:bg-gray-600',\n outline: 'border-2 border-apteva-500 text-apteva-500 hover:bg-apteva-50',\n ghost: 'text-apteva-500 hover:bg-apteva-50',\n };\n\n return (\n <button\n onClick={() =>\n widget.actions?.[0] &&\n onAction?.({\n type: widget.actions[0].type,\n payload: widget.actions[0].payload,\n widgetId: widget.id,\n timestamp: new Date(),\n })\n }\n disabled={disabled}\n className={cn('px-4 py-2 rounded-lg font-medium transition-colors', variantClasses[variant], {\n 'opacity-50 cursor-not-allowed': disabled,\n })}\n >\n {label}\n </button>\n );\n}\n","// No direct imports needed 'react';\nimport { Widget } from '../../types/widgets';\nimport { ActionEvent } from '../../types/actions';\nimport { Card, List, Button } from './widget-library';\n\ninterface WidgetRendererProps {\n widget: Widget;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function WidgetRenderer({ widget, onAction }: WidgetRendererProps) {\n switch (widget.type) {\n case 'card':\n return <Card widget={widget as any} onAction={onAction} />;\n case 'list':\n return <List widget={widget as any} onAction={onAction} />;\n case 'button':\n return <Button widget={widget as any} onAction={onAction} />;\n default:\n return (\n <div className=\"p-4 border border-yellow-300 bg-yellow-50 rounded-lg\">\n <p className=\"text-sm text-yellow-800\">Unknown widget type: {widget.type}</p>\n <pre className=\"text-xs mt-2 overflow-auto\">{JSON.stringify(widget, null, 2)}</pre>\n </div>\n );\n }\n}\n","// No direct imports needed 'react';\nimport { Message as MessageType } from '../../types/messages';\nimport { cn } from '../../utils';\nimport { Widgets } from '../Widgets';\nimport { ActionEvent } from '../../types/actions';\n\ninterface MessageProps {\n message: MessageType;\n onAction?: (action: ActionEvent) => void;\n}\n\nexport function Message({ message, onAction }: MessageProps) {\n const isUser = message.role === 'user';\n\n return (\n <div className={cn('apteva-message', isUser ? 'apteva-message-user' : 'apteva-message-assistant')}>\n <div className=\"whitespace-pre-wrap\">{message.content}</div>\n\n {message.widgets && message.widgets.length > 0 && (\n <div className=\"mt-4\">\n <Widgets widgets={message.widgets} onAction={onAction} layout=\"stack\" />\n </div>\n )}\n\n <div className=\"text-xs opacity-70 mt-2\">\n {message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n </div>\n );\n}\n","import { useState, KeyboardEvent, useRef } from 'react';\n\ninterface ComposerProps {\n onSendMessage: (text: string) => void;\n placeholder?: string;\n disabled?: boolean;\n}\n\nexport function Composer({ onSendMessage, placeholder = 'Type a message...', disabled = false }: ComposerProps) {\n const [text, setText] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n const handleSend = () => {\n if (text.trim() && !disabled) {\n onSendMessage(text.trim());\n setText('');\n // Reset textarea height\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n }\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setText(e.target.value);\n // Auto-resize textarea\n e.target.style.height = 'auto';\n e.target.style.height = `${e.target.scrollHeight}px`;\n };\n\n return (\n <div className=\"apteva-composer\">\n <div className=\"flex gap-2\">\n <textarea\n ref={textareaRef}\n value={text}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className=\"apteva-composer-input\"\n rows={1}\n style={{ maxHeight: '200px' }}\n />\n <button\n onClick={handleSend}\n disabled={!text.trim() || disabled}\n className=\"px-6 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors font-medium\"\n >\n Send\n </button>\n </div>\n <div className=\"text-xs text-gray-500 mt-2\">Press Enter to send, Shift+Enter for new line</div>\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { CommandProps, CommandResult } from '../../types/components';\nimport { cn, generateMockResponse } from '../../utils';\n\nexport function Command({\n agentId,\n command: initialCommand,\n context,\n autoExecute = false,\n allowInput = true,\n placeholder = 'Enter your command...',\n submitButtonText = 'Execute',\n variant = 'default',\n onStart,\n onProgress,\n onChunk,\n onComplete,\n onError,\n loadingText = 'Processing...',\n showProgress = true,\n enableStreaming = false,\n resultRenderer,\n className,\n}: CommandProps) {\n const [state, setState] = useState<'idle' | 'loading' | 'success' | 'error'>('idle');\n const [result, setResult] = useState<CommandResult | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [progress, setProgress] = useState(0);\n const [command, setCommand] = useState(initialCommand || '');\n const [streamedContent, setStreamedContent] = useState('');\n\n useEffect(() => {\n if (autoExecute && state === 'idle' && command) {\n executeCommand();\n }\n }, [autoExecute]);\n\n const executeCommand = async () => {\n if (!command.trim()) {\n setError(new Error('Please enter a command'));\n setState('error');\n return;\n }\n setState('loading');\n setError(null);\n setProgress(0);\n setStreamedContent('');\n onStart?.();\n\n try {\n if (enableStreaming) {\n // Simulate streaming response with status messages\n const mockStreamChunks = [\n 'Initializing...',\n 'Connecting to agent...',\n 'Processing your request...',\n 'Analyzing data sources...',\n 'Gathering information...',\n 'Generating response...',\n 'Finalizing results...',\n ];\n\n for (let i = 0; i < mockStreamChunks.length; i++) {\n await new Promise((resolve) => setTimeout(resolve, 600 + Math.random() * 400));\n const chunk = mockStreamChunks[i];\n setStreamedContent(chunk);\n onChunk?.(chunk);\n setProgress(Math.round(((i + 1) / mockStreamChunks.length) * 100));\n onProgress?.(Math.round(((i + 1) / mockStreamChunks.length) * 100));\n }\n\n const mockResult: CommandResult = {\n success: true,\n data: {\n summary: `Successfully processed: \"${command}\"`,\n agentId,\n context,\n timestamp: new Date().toISOString(),\n },\n message: 'Command executed successfully',\n };\n\n setResult(mockResult);\n setState('success');\n setProgress(100);\n onComplete?.(mockResult);\n } else {\n // Original non-streaming behavior\n const progressInterval = setInterval(() => {\n setProgress((prev) => {\n const next = Math.min(prev + 10, 90);\n onProgress?.(next);\n return next;\n });\n }, 200);\n\n await new Promise((resolve) => setTimeout(resolve, 2000));\n clearInterval(progressInterval);\n\n const mockResult: CommandResult = {\n success: true,\n data: {\n summary: `Command \"${command}\" executed successfully`,\n agentId,\n context,\n timestamp: new Date().toISOString(),\n },\n message: 'Execution complete',\n };\n\n setResult(mockResult);\n setState('success');\n setProgress(100);\n onComplete?.(mockResult);\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Unknown error');\n setError(error);\n setState('error');\n onError?.(error);\n }\n };\n\n const resetCommand = () => {\n setState('idle');\n setResult(null);\n setError(null);\n setProgress(0);\n setCommand('');\n };\n\n const isCompact = variant === 'compact';\n\n return (\n <div\n className={cn(\n 'relative border-2 rounded-xl bg-white dark:bg-gray-900 transition-all duration-300 flex flex-col',\n state === 'loading' && 'animate-pulse-border',\n state === 'idle' && 'border-gray-300 dark:border-gray-700',\n state === 'loading' && 'border-blue-500',\n state === 'success' && 'border-green-500',\n state === 'error' && 'border-red-500',\n className\n )}\n style={{ minHeight: isCompact ? 'auto' : '180px' }}\n >\n {/* Input/Display Area */}\n <div className={cn('flex-1 flex', isCompact ? 'flex-row items-center p-3 gap-3' : 'flex-col p-4')}>\n {state === 'idle' && allowInput && !isCompact && (\n <textarea\n value={command}\n onChange={(e) => setCommand(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n executeCommand();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1 w-full resize-none bg-transparent border-none focus:outline-none text-gray-900 dark:text-white placeholder-gray-400\"\n rows={6}\n />\n )}\n\n {state === 'idle' && allowInput && isCompact && (\n <>\n <input\n type=\"text\"\n value={command}\n onChange={(e) => setCommand(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n executeCommand();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent border-none focus:outline-none text-gray-900 dark:text-white placeholder-gray-400 py-1\"\n />\n <button\n onClick={executeCommand}\n disabled={!command.trim()}\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-700 dark:text-gray-300',\n 'hover:bg-gray-50 dark:hover:bg-gray-700',\n 'disabled:opacity-30 disabled:cursor-not-allowed',\n !command.trim() && 'border-gray-200 dark:border-gray-700 text-gray-400 dark:text-gray-600'\n )}\n title=\"Execute\"\n >\n ↑\n </button>\n </>\n )}\n\n {state === 'loading' && !isCompact && (\n <div className=\"flex-1 flex flex-col items-center justify-center space-y-4 py-8\">\n <div className=\"w-6 h-6 border-2 border-gray-300 border-t-blue-500 rounded-full animate-spin\"></div>\n <div className=\"text-gray-600 dark:text-gray-400 text-sm text-center max-w-md\">\n {enableStreaming && streamedContent ? streamedContent : loadingText}\n </div>\n {showProgress && (\n <div className=\"w-full max-w-sm\">\n <div className=\"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1.5\">\n <div\n className=\"bg-blue-500 h-1.5 rounded-full transition-all duration-300\"\n style={{ width: `${progress}%` }}\n />\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">{progress}%</p>\n </div>\n )}\n </div>\n )}\n\n {state === 'loading' && isCompact && (\n <>\n <div className=\"flex-1 flex items-center gap-3 py-1\">\n <div className=\"w-4 h-4 border-2 border-gray-300 border-t-blue-500 rounded-full animate-spin\"></div>\n <div className=\"text-gray-600 dark:text-gray-400 text-sm truncate\">\n {enableStreaming && streamedContent ? streamedContent : loadingText}\n </div>\n </div>\n <button\n disabled\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0',\n 'border border-gray-200 dark:border-gray-700',\n 'bg-white dark:bg-gray-800',\n 'text-gray-400 dark:text-gray-600',\n 'opacity-30 cursor-not-allowed'\n )}\n >\n ↑\n </button>\n </>\n )}\n\n {state === 'error' && (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"mb-4 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg\">\n <div className=\"flex items-start gap-2\">\n <svg className=\"w-5 h-5 text-red-600 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <div>\n <h3 className=\"text-sm font-semibold text-red-800 dark:text-red-400\">Error</h3>\n <p className=\"text-red-700 dark:text-red-300 text-sm mt-1\">{error?.message}</p>\n </div>\n </div>\n </div>\n {allowInput && (\n <textarea\n value={command}\n onChange={(e) => setCommand(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n executeCommand();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1 w-full resize-none bg-transparent border-none focus:outline-none text-gray-900 dark:text-white placeholder-gray-400\"\n rows={4}\n />\n )}\n </div>\n )}\n\n {state === 'success' && result && !isCompact && (\n <div className=\"flex-1 overflow-auto\">\n {resultRenderer ? (\n resultRenderer(result.data)\n ) : (\n <div>\n <div className=\"flex items-start gap-3 mb-3 p-3 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg\">\n <svg className=\"w-5 h-5 text-green-600 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <div className=\"flex-1\">\n <h3 className=\"text-sm font-semibold text-green-800 dark:text-green-400 mb-1\">Success</h3>\n <p className=\"text-green-700 dark:text-green-300 text-sm\">{result.message || 'Command executed successfully'}</p>\n </div>\n </div>\n {result.data?.summary && (\n <div className=\"text-gray-700 dark:text-gray-300 text-sm leading-relaxed\">\n {result.data.summary}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {state === 'success' && result && isCompact && (\n <>\n <div className=\"flex-1 flex items-center gap-2 py-1\">\n <svg className=\"w-4 h-4 text-green-600 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <div className=\"text-green-700 dark:text-green-300 text-sm truncate\">\n {resultRenderer ? resultRenderer(result.data) : (result.message || 'Command executed successfully')}\n </div>\n </div>\n <button\n disabled\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all flex-shrink-0',\n 'border border-gray-200 dark:border-gray-700',\n 'bg-white dark:bg-gray-800',\n 'text-gray-400 dark:text-gray-600',\n 'opacity-30 cursor-not-allowed'\n )}\n >\n ↑\n </button>\n </>\n )}\n </div>\n\n {/* Bottom Action Bar - Only show for default variant when not in compact mode */}\n {!isCompact && (\n <div className=\"p-3 flex items-center justify-end gap-2\">\n {(state === 'success' || state === 'error') && allowInput && (\n <button\n onClick={resetCommand}\n className=\"px-3 py-1.5 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white transition-colors\"\n >\n Reset\n </button>\n )}\n\n {(state === 'idle' || state === 'error') && (\n <button\n onClick={executeCommand}\n disabled={!command.trim()}\n className={cn(\n 'w-8 h-8 rounded-lg flex items-center justify-center font-bold transition-all',\n 'border border-gray-300 dark:border-gray-600',\n 'bg-white dark:bg-gray-800',\n 'text-gray-700 dark:text-gray-300',\n 'hover:bg-gray-50 dark:hover:bg-gray-700',\n 'disabled:opacity-30 disabled:cursor-not-allowed',\n !command.trim() && 'border-gray-200 dark:border-gray-700 text-gray-400 dark:text-gray-600'\n )}\n title={state === 'error' ? 'Retry' : 'Execute'}\n >\n {state === 'error' ? '↻' : '↑'}\n </button>\n )}\n </div>\n )}\n\n\n <style dangerouslySetInnerHTML={{\n __html: `\n @keyframes pulse-border {\n 0%, 100% {\n border-color: rgb(59, 130, 246);\n }\n 50% {\n border-color: rgb(147, 197, 253);\n }\n }\n .animate-pulse-border {\n animation: pulse-border 2s ease-in-out infinite;\n }\n `\n }} />\n </div>\n );\n}\n","import { useState, KeyboardEvent } from 'react';\nimport { PromptProps } from '../../types/components';\nimport { cn } from '../../utils';\n\nexport function Prompt({\n agentId,\n placeholder = 'Enter your prompt...',\n initialValue = '',\n submitOn = 'button',\n debounceMs = 0,\n minLength = 0,\n maxLength,\n onSubmit,\n onResult,\n onChange,\n variant = 'inline',\n showSuggestions = false,\n className,\n}: PromptProps) {\n const [value, setValue] = useState(initialValue);\n const [isLoading, setIsLoading] = useState(false);\n const [suggestions] = useState(['Plan a trip', 'Write a description', 'Analyze data']);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (!maxLength || newValue.length <= maxLength) {\n setValue(newValue);\n onChange?.(newValue);\n }\n };\n\n const handleSubmit = async () => {\n if (value.length < minLength) return;\n\n onSubmit?.(value);\n setIsLoading(true);\n\n try {\n // Mock AI processing\n await new Promise((resolve) => setTimeout(resolve, 1500));\n const mockResult = `Enhanced version: ${value} [AI-generated content]`;\n onResult?.(mockResult);\n setValue('');\n } catch (error) {\n console.error('Error processing prompt:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (submitOn === 'enter' && e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const handleBlur = () => {\n if (submitOn === 'blur' && value.trim()) {\n handleSubmit();\n }\n };\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={isLoading}\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apteva-500 dark:bg-gray-800 dark:border-gray-600 dark:text-white\"\n />\n\n {submitOn === 'button' && (\n <button\n onClick={handleSubmit}\n disabled={isLoading || value.length < minLength}\n className=\"px-6 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors font-medium\"\n >\n {isLoading ? 'Processing...' : 'Generate'}\n </button>\n )}\n </div>\n\n {maxLength && (\n <p className=\"text-xs text-gray-500\">\n {value.length} / {maxLength} characters\n </p>\n )}\n\n {showSuggestions && !value && (\n <div className=\"flex flex-wrap gap-2\">\n {suggestions.map((suggestion, idx) => (\n <button\n key={idx}\n onClick={() => setValue(suggestion)}\n className=\"px-3 py-1 text-sm bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-full transition-colors\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n )}\n\n {isLoading && (\n <div className=\"flex items-center gap-2 text-sm text-gray-500\">\n <div className=\"w-4 h-4 border-2 border-apteva-500 border-t-transparent rounded-full animate-spin\" />\n <span>AI is processing your request...</span>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { StreamProps } from '../../types/components';\nimport { cn, generateMockStreamingResponse } from '../../utils';\n\nexport function Stream({\n agentId,\n prompt,\n context,\n autoStart = false,\n onStart,\n onChunk,\n onComplete,\n onError,\n variant = 'prose',\n showCursor = true,\n typingSpeed = 30,\n className,\n}: StreamProps) {\n const [text, setText] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [isComplete, setIsComplete] = useState(false);\n\n useEffect(() => {\n if (autoStart && !isStreaming && !isComplete) {\n startStreaming();\n }\n }, [autoStart]);\n\n const startStreaming = async () => {\n setIsStreaming(true);\n onStart?.();\n\n const mockText =\n 'This is a simulated streaming response from the AI agent. ' +\n 'In a real implementation, this would stream data from your backend API. ' +\n 'The text appears word by word to simulate the streaming effect. ' +\n 'You can customize the typing speed and styling based on your needs.';\n\n try {\n await generateMockStreamingResponse(\n mockText,\n (chunk) => {\n setText((prev) => prev + chunk);\n onChunk?.(chunk);\n },\n typingSpeed\n );\n\n setIsComplete(true);\n setIsStreaming(false);\n onComplete?.(text + mockText);\n } catch (error) {\n const err = error instanceof Error ? error : new Error('Streaming error');\n onError?.(err);\n setIsStreaming(false);\n }\n };\n\n const variantClasses = {\n prose: 'prose prose-sm max-w-none dark:prose-invert',\n code: 'font-mono text-sm bg-gray-900 text-green-400 p-4 rounded-lg',\n plain: 'text-gray-900 dark:text-gray-100',\n };\n\n if (!isStreaming && !isComplete) {\n return (\n <div className={cn('p-4', className)}>\n <button\n onClick={startStreaming}\n className=\"px-6 py-3 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 transition-colors font-medium\"\n >\n Start Streaming\n </button>\n </div>\n );\n }\n\n return (\n <div className={cn(variantClasses[variant], className)}>\n {text}\n {isStreaming && showCursor && <span className=\"apteva-stream-cursor\" />}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Thread } from '../../types/messages';\nimport { ThreadItem } from './ThreadItem';\n\ninterface ThreadListProps {\n threads: Thread[];\n currentThreadId?: string;\n onThreadSelect?: (threadId: string) => void;\n onThreadDelete?: (threadId: string) => void;\n showSearch?: boolean;\n groupBy?: 'date' | 'agent' | 'none';\n}\n\nexport function ThreadList({\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n showSearch = false,\n groupBy = 'none',\n}: ThreadListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n\n const filteredThreads = threads.filter(\n (thread) =>\n thread.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\n thread.preview?.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n const groupedThreads = groupBy === 'date' ? groupThreadsByDate(filteredThreads) : { All: filteredThreads };\n\n return (\n <div className=\"flex flex-col h-full\">\n {showSearch && (\n <div className=\"p-3 border-b border-gray-200 dark:border-gray-700\">\n <input\n type=\"text\"\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apteva-500 dark:bg-gray-800 dark:border-gray-600 dark:text-white\"\n />\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto\">\n {Object.entries(groupedThreads).map(([group, groupThreads]) => (\n <div key={group}>\n {groupBy !== 'none' && (\n <div className=\"px-3 py-2 text-xs font-semibold text-gray-500 uppercase\">{group}</div>\n )}\n {groupThreads.map((thread) => (\n <ThreadItem\n key={thread.id}\n thread={thread}\n isActive={thread.id === currentThreadId}\n onSelect={() => onThreadSelect?.(thread.id)}\n onDelete={() => onThreadDelete?.(thread.id)}\n />\n ))}\n </div>\n ))}\n\n {filteredThreads.length === 0 && (\n <div className=\"p-8 text-center text-gray-500\">\n <div className=\"text-4xl mb-2\">💬</div>\n <p>No conversations found</p>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction groupThreadsByDate(threads: Thread[]): Record<string, Thread[]> {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n const lastWeek = new Date(today);\n lastWeek.setDate(lastWeek.getDate() - 7);\n\n return threads.reduce(\n (groups, thread) => {\n const threadDate = new Date(thread.updatedAt);\n let group = 'Older';\n\n if (threadDate >= today) {\n group = 'Today';\n } else if (threadDate >= yesterday) {\n group = 'Yesterday';\n } else if (threadDate >= lastWeek) {\n group = 'Last 7 Days';\n }\n\n if (!groups[group]) groups[group] = [];\n groups[group].push(thread);\n return groups;\n },\n {} as Record<string, Thread[]>\n );\n}\n","// No direct imports needed 'react';\nimport { Thread } from '../../types/messages';\nimport { cn } from '../../utils';\n\ninterface ThreadItemProps {\n thread: Thread;\n isActive?: boolean;\n onSelect?: () => void;\n onDelete?: () => void;\n}\n\nexport function ThreadItem({ thread, isActive = false, onSelect, onDelete }: ThreadItemProps) {\n return (\n <div\n className={cn('apteva-thread-item', {\n 'apteva-thread-item-active': isActive,\n })}\n onClick={onSelect}\n >\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"font-semibold text-gray-900 dark:text-white truncate\">{thread.title}</h4>\n {thread.preview && <p className=\"text-sm text-gray-600 dark:text-gray-400 truncate\">{thread.preview}</p>}\n <div className=\"flex items-center gap-2 mt-1 text-xs text-gray-500\">\n <span>{thread.messageCount} messages</span>\n <span>•</span>\n <span>{formatRelativeTime(thread.updatedAt)}</span>\n </div>\n </div>\n\n {onDelete && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDelete();\n }}\n className=\"p-2 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors\"\n title=\"Delete thread\"\n >\n 🗑️\n </button>\n )}\n </div>\n );\n}\n\nfunction formatRelativeTime(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n}\n","// No direct imports needed 'react';\nimport { ThreadsProps } from '../../types/components';\nimport { ThreadList } from './ThreadList';\nimport { cn } from '../../utils';\n\nexport function Threads({\n threads,\n currentThreadId,\n onThreadSelect,\n onThreadDelete,\n onNewThread,\n variant = 'sidebar',\n showSearch = false,\n showNewButton = true,\n groupBy = 'none',\n className,\n}: ThreadsProps) {\n const variantClasses = {\n sidebar: 'h-full border-r border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900',\n dropdown: 'absolute top-full left-0 right-0 mt-2 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-h-96 overflow-hidden',\n tabs: 'flex gap-2 border-b border-gray-200 dark:border-gray-700 overflow-x-auto',\n };\n\n if (variant === 'tabs') {\n return (\n <div className={cn(variantClasses[variant], className)}>\n {threads.slice(0, 5).map((thread) => (\n <button\n key={thread.id}\n onClick={() => onThreadSelect?.(thread.id)}\n className={cn(\n 'px-4 py-2 whitespace-nowrap font-medium transition-colors',\n thread.id === currentThreadId\n ? 'border-b-2 border-apteva-500 text-apteva-500'\n : 'text-gray-600 hover:text-gray-900'\n )}\n >\n {thread.title}\n </button>\n ))}\n {showNewButton && onNewThread && (\n <button\n onClick={onNewThread}\n className=\"px-4 py-2 text-gray-600 hover:text-apteva-500 transition-colors font-medium\"\n >\n + New\n </button>\n )}\n </div>\n );\n }\n\n return (\n <div className={cn(variantClasses[variant], 'flex flex-col', className)}>\n {showNewButton && onNewThread && (\n <div className=\"p-3 border-b border-gray-200 dark:border-gray-700\">\n <button\n onClick={onNewThread}\n className=\"w-full px-4 py-2 bg-apteva-500 text-white rounded-lg hover:bg-apteva-600 transition-colors font-medium\"\n >\n + New Conversation\n </button>\n </div>\n )}\n\n <ThreadList\n threads={threads}\n currentThreadId={currentThreadId}\n onThreadSelect={onThreadSelect}\n onThreadDelete={onThreadDelete}\n showSearch={showSearch}\n groupBy={groupBy}\n />\n </div>\n );\n}\n","/**\n * Theme initialization script that runs before React hydration\n * This prevents flickering by setting the theme before the page renders\n * Must be inlined in the HTML <head> as a blocking script\n */\n\nexport const themeScript = `\n(function() {\n try {\n // Get system preference\n const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n const colorMode = isDark ? 'dark' : 'light';\n\n // Set attributes before render\n document.documentElement.setAttribute('data-color-mode', colorMode);\n\n // Add dark class for Tailwind\n if (isDark) {\n document.documentElement.classList.add('dark');\n }\n } catch (e) {\n console.error('Failed to initialize theme:', e);\n }\n})();\n`;\n\nexport function getThemeScript() {\n return themeScript;\n}\n"],"mappings":"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","names":["useState","useEffect","useEffect","jsx","jsxs","jsx","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","jsx","jsxs","useState","useEffect","useState","useEffect","jsx","jsxs","useState","useEffect","error","useState","jsx","jsxs","useState","useState","useEffect","jsx","jsxs","useState","useEffect","useState","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs"]}
package/dist/styles.css CHANGED
@@ -1,2 +1 @@
1
- /*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-divide-y-reverse:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-apteva-50:var(--apteva-50);--color-apteva-100:var(--apteva-100);--color-apteva-500:var(--apteva-500);--color-apteva-600:var(--apteva-600);--color-apteva-800:var(--apteva-800);--color-apteva-900:var(--apteva-900);--animate-stream-cursor:blink 1s ease-in-out infinite;--animate-slide-up:slideUp .3s ease-out}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.top-4{top:calc(var(--spacing)*4)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-4{left:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-12{margin-top:calc(var(--spacing)*12)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.ml-4{margin-left:calc(var(--spacing)*4)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-16{height:calc(var(--spacing)*16)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing)*96)}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-16{width:calc(var(--spacing)*16)}.w-80{width:calc(var(--spacing)*80)}.w-96{width:calc(var(--spacing)*96)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.translate-x-1{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.columns-1{columns:1}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-apteva-500{border-color:var(--color-apteva-500)}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-green-200{border-color:var(--color-green-200)}.border-green-500{border-color:var(--color-green-500)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-500{border-color:var(--color-red-500)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-t-apteva-500{border-top-color:var(--color-apteva-500)}.border-t-transparent{border-top-color:#0000}.bg-apteva-500{background-color:var(--color-apteva-500)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-50{--tw-gradient-to:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-apteva-500{color:var(--color-apteva-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:bg-apteva-50:hover{background-color:var(--color-apteva-50)}.hover\:bg-apteva-600:hover{background-color:var(--color-apteva-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:text-apteva-500:hover{color:var(--color-apteva-500)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-apteva-500:focus{--tw-ring-color:var(--color-apteva-500)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:48rem){.md\:columns-2{columns:2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:64rem){.lg\:columns-3{columns:3}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (prefers-color-scheme:dark){.dark\:border-gray-600{border-color:var(--color-gray-600)}.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark\:bg-green-900\/20{background-color:#0d542b33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}}.dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-gray-100{color:var(--color-gray-100)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-white{color:var(--color-white)}@media (hover:hover){.dark\:group-hover\:text-blue-400:is(:where(.group):hover *){color:var(--color-blue-400)}.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:text-white:hover{color:var(--color-white)}}}}:root{--apteva-50:#f0f9ff;--apteva-100:#e0f2fe;--apteva-200:#bae6fd;--apteva-300:#7dd3fc;--apteva-400:#38bdf8;--apteva-500:#0ea5e9;--apteva-600:#0284c7;--apteva-700:#0369a1;--apteva-800:#075985;--apteva-900:#0c4a6e;--apteva-950:#082f49}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.apteva-chat-container{background-color:var(--color-white);flex-direction:column;height:100%;display:flex}@media (prefers-color-scheme:dark){.apteva-chat-container{background-color:var(--color-gray-900)}}.apteva-message-list{flex:1}:where(.apteva-message-list>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.apteva-message-list{padding:calc(var(--spacing)*4);overflow-y:auto}.apteva-message{max-width:80%;animation:var(--animate-slide-up);border-radius:var(--radius-lg);padding:calc(var(--spacing)*4)}.apteva-message-user{background-color:var(--color-apteva-500);color:var(--color-white);margin-left:auto}.apteva-message-assistant{background-color:var(--color-gray-100);color:var(--color-gray-900);margin-right:auto}@media (prefers-color-scheme:dark){.apteva-message-assistant{background-color:var(--color-gray-800);color:var(--color-gray-100)}}.apteva-composer{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-gray-200);padding:calc(var(--spacing)*4)}@media (prefers-color-scheme:dark){.apteva-composer{border-color:var(--color-gray-700)}}.apteva-composer-input{resize:none;border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-300);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3)}.apteva-composer-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-apteva-500);--tw-outline-style:none;outline-style:none}@media (prefers-color-scheme:dark){.apteva-composer-input{border-color:var(--color-gray-600);background-color:var(--color-gray-800);color:var(--color-white)}}.apteva-widget{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-200);background-color:var(--color-white);overflow:hidden}@media (prefers-color-scheme:dark){.apteva-widget{border-color:var(--color-gray-700);background-color:var(--color-gray-800)}}.apteva-widget-card{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-200);background-color:var(--color-white);overflow:hidden}@media (prefers-color-scheme:dark){.apteva-widget-card{border-color:var(--color-gray-700);background-color:var(--color-gray-800)}}:where(.apteva-widget-list>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)));border-color:var(--color-gray-200)}.apteva-widget-list{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-200);background-color:var(--color-white);overflow:hidden}@media (prefers-color-scheme:dark){:where(.apteva-widget-list>:not(:last-child)),.apteva-widget-list{border-color:var(--color-gray-700)}.apteva-widget-list{background-color:var(--color-gray-800)}}.apteva-widget-button{border-radius:var(--radius-lg);background-color:var(--color-apteva-500);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-white);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.apteva-widget-button:hover{background-color:var(--color-apteva-600)}}.apteva-widget-button:disabled{cursor:not-allowed;opacity:.5}.apteva-command-loading{flex-direction:column;justify-content:center;align-items:center;display:flex}:where(.apteva-command-loading>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.apteva-command-loading{padding:calc(var(--spacing)*8)}.apteva-command-spinner{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12);animation:var(--animate-spin);border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--color-apteva-500);border-radius:3.40282e38px}.apteva-stream-cursor{margin-left:calc(var(--spacing)*1);height:calc(var(--spacing)*4);width:calc(var(--spacing)*1);animation:var(--animate-stream-cursor);background-color:currentColor;display:inline-block}.apteva-thread-item{cursor:pointer;align-items:center;gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);padding:calc(var(--spacing)*3);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));display:flex}@media (hover:hover){.apteva-thread-item:hover{background-color:var(--color-gray-100)}}@media (prefers-color-scheme:dark){@media (hover:hover){.apteva-thread-item:hover{background-color:var(--color-gray-800)}}}.apteva-thread-item-active{background-color:var(--color-apteva-50)}@media (hover:hover){.apteva-thread-item-active:hover{background-color:var(--color-apteva-100)}}@media (prefers-color-scheme:dark){.apteva-thread-item-active{background-color:var(--color-apteva-900)}@media (hover:hover){.apteva-thread-item-active:hover{background-color:var(--color-apteva-800)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}
1
+ @layer components{@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apteva/apteva-kit",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "AI-powered React component library for building interactive agent interfaces",
5
5
  "author": "Apteva",
6
6
  "license": "MIT",