@scenemesh/entity-engine-aimodule 1.0.0

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.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +854 -0
  3. package/dist/ai-core-LBGYFGOK.mjs +17 -0
  4. package/dist/ai-core-LBGYFGOK.mjs.map +1 -0
  5. package/dist/ai-core-UGJWSCQN.js +17 -0
  6. package/dist/ai-core-UGJWSCQN.js.map +1 -0
  7. package/dist/ai-core-manager-B3Z34RHA.mjs +9 -0
  8. package/dist/ai-core-manager-B3Z34RHA.mjs.map +1 -0
  9. package/dist/ai-core-manager-W7SSDCG5.js +9 -0
  10. package/dist/ai-core-manager-W7SSDCG5.js.map +1 -0
  11. package/dist/ai-embeddings-5ED5LDXX.mjs +17 -0
  12. package/dist/ai-embeddings-5ED5LDXX.mjs.map +1 -0
  13. package/dist/ai-embeddings-WCXZMMTZ.js +17 -0
  14. package/dist/ai-embeddings-WCXZMMTZ.js.map +1 -0
  15. package/dist/ai-form-renderer-24IWNMX5.js +233 -0
  16. package/dist/ai-form-renderer-24IWNMX5.js.map +1 -0
  17. package/dist/ai-form-renderer-BORQABF2.mjs +233 -0
  18. package/dist/ai-form-renderer-BORQABF2.mjs.map +1 -0
  19. package/dist/ai-provider-3PSCVEEN.mjs +17 -0
  20. package/dist/ai-provider-3PSCVEEN.mjs.map +1 -0
  21. package/dist/ai-provider-WMPMVZFL.js +17 -0
  22. package/dist/ai-provider-WMPMVZFL.js.map +1 -0
  23. package/dist/ai-renderer-7WGGWH5D.mjs +134 -0
  24. package/dist/ai-renderer-7WGGWH5D.mjs.map +1 -0
  25. package/dist/ai-renderer-OILYWAJV.js +134 -0
  26. package/dist/ai-renderer-OILYWAJV.js.map +1 -0
  27. package/dist/ai-settings-DGCFPK3U.js +15 -0
  28. package/dist/ai-settings-DGCFPK3U.js.map +1 -0
  29. package/dist/ai-settings-DTXEAB64.mjs +15 -0
  30. package/dist/ai-settings-DTXEAB64.mjs.map +1 -0
  31. package/dist/ai-structured-EGZ26ZS4.mjs +13 -0
  32. package/dist/ai-structured-EGZ26ZS4.mjs.map +1 -0
  33. package/dist/ai-structured-N2FZLO4A.js +13 -0
  34. package/dist/ai-structured-N2FZLO4A.js.map +1 -0
  35. package/dist/ai-tools-B3R77HZ3.js +19 -0
  36. package/dist/ai-tools-B3R77HZ3.js.map +1 -0
  37. package/dist/ai-tools-JAPVYQGE.mjs +19 -0
  38. package/dist/ai-tools-JAPVYQGE.mjs.map +1 -0
  39. package/dist/ai.module-GAHVCBTP.js +7 -0
  40. package/dist/ai.module-GAHVCBTP.js.map +1 -0
  41. package/dist/ai.module-TTPMTPB3.mjs +7 -0
  42. package/dist/ai.module-TTPMTPB3.mjs.map +1 -0
  43. package/dist/chunk-25C2NRSD.mjs +611 -0
  44. package/dist/chunk-25C2NRSD.mjs.map +1 -0
  45. package/dist/chunk-4JQ7UOXH.js +427 -0
  46. package/dist/chunk-4JQ7UOXH.js.map +1 -0
  47. package/dist/chunk-6IUKES2L.js +290 -0
  48. package/dist/chunk-6IUKES2L.js.map +1 -0
  49. package/dist/chunk-COWPK7XN.mjs +834 -0
  50. package/dist/chunk-COWPK7XN.mjs.map +1 -0
  51. package/dist/chunk-CTEXPMVZ.js +512 -0
  52. package/dist/chunk-CTEXPMVZ.js.map +1 -0
  53. package/dist/chunk-DXQTHA75.js +573 -0
  54. package/dist/chunk-DXQTHA75.js.map +1 -0
  55. package/dist/chunk-DZFQ6I23.js +72 -0
  56. package/dist/chunk-DZFQ6I23.js.map +1 -0
  57. package/dist/chunk-J323UTPE.mjs +650 -0
  58. package/dist/chunk-J323UTPE.mjs.map +1 -0
  59. package/dist/chunk-LHNNALVF.js +834 -0
  60. package/dist/chunk-LHNNALVF.js.map +1 -0
  61. package/dist/chunk-O7SZSMXV.js +1621 -0
  62. package/dist/chunk-O7SZSMXV.js.map +1 -0
  63. package/dist/chunk-OTNOFOVW.js +650 -0
  64. package/dist/chunk-OTNOFOVW.js.map +1 -0
  65. package/dist/chunk-PRIGZEI4.mjs +72 -0
  66. package/dist/chunk-PRIGZEI4.mjs.map +1 -0
  67. package/dist/chunk-SBSZ3IPB.mjs +573 -0
  68. package/dist/chunk-SBSZ3IPB.mjs.map +1 -0
  69. package/dist/chunk-SXPA6SSD.mjs +1621 -0
  70. package/dist/chunk-SXPA6SSD.mjs.map +1 -0
  71. package/dist/chunk-T5A4KAVS.mjs +512 -0
  72. package/dist/chunk-T5A4KAVS.mjs.map +1 -0
  73. package/dist/chunk-TDRKKUNT.mjs +357 -0
  74. package/dist/chunk-TDRKKUNT.mjs.map +1 -0
  75. package/dist/chunk-TJFNODPE.js +357 -0
  76. package/dist/chunk-TJFNODPE.js.map +1 -0
  77. package/dist/chunk-V2SSI3SL.mjs +427 -0
  78. package/dist/chunk-V2SSI3SL.mjs.map +1 -0
  79. package/dist/chunk-X42L6MTY.mjs +290 -0
  80. package/dist/chunk-X42L6MTY.mjs.map +1 -0
  81. package/dist/chunk-YSVMY77H.js +611 -0
  82. package/dist/chunk-YSVMY77H.js.map +1 -0
  83. package/dist/core-ANYRS6EF.mjs +73 -0
  84. package/dist/core-ANYRS6EF.mjs.map +1 -0
  85. package/dist/core-K5K34DCS.js +73 -0
  86. package/dist/core-K5K34DCS.js.map +1 -0
  87. package/dist/core-index.d.mts +1668 -0
  88. package/dist/core-index.d.ts +1668 -0
  89. package/dist/core-index.js +101 -0
  90. package/dist/core-index.js.map +1 -0
  91. package/dist/core-index.mjs +101 -0
  92. package/dist/core-index.mjs.map +1 -0
  93. package/dist/index.d.mts +2911 -0
  94. package/dist/index.d.ts +2911 -0
  95. package/dist/index.js +1177 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/index.mjs +1177 -0
  98. package/dist/index.mjs.map +1 -0
  99. package/dist/tools-352X7A6X.mjs +366 -0
  100. package/dist/tools-352X7A6X.mjs.map +1 -0
  101. package/dist/tools-YLEX6GNO.js +366 -0
  102. package/dist/tools-YLEX6GNO.js.map +1 -0
  103. package/dist/ui-index.d.mts +627 -0
  104. package/dist/ui-index.d.ts +627 -0
  105. package/dist/ui-index.js +2354 -0
  106. package/dist/ui-index.js.map +1 -0
  107. package/dist/ui-index.mjs +2353 -0
  108. package/dist/ui-index.mjs.map +1 -0
  109. package/package.json +105 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ChatDialog/ChatDialog.tsx","../src/hooks/useChat.ts","../src/components/MessageBubble/MessageBubble.tsx","../src/components/DynamicUI/EntityEngineDynamicComponents.tsx","../src/components/DynamicUI/DynamicToolRenderer.tsx","../src/components/GenerativeUI/PrebuiltComponents.tsx","../src/utils/theme.ts"],"sourcesContent":["// 'use client' directive is added by tsup banner\n\n/**\n * Entity Engine AI - ChatDialog Component\n * \n * Main dialog component implementing complete AI chat interface\n * with support for all chat features.\n */\n\nimport type { FileUIPart, ChatDialogProps } from '../../types';\n\nimport { motion, AnimatePresence } from 'framer-motion';\nimport React, { useRef, useState, useEffect, useCallback } from 'react';\nimport { \n X,\n Send,\n Square, \n Paperclip, \n AlertCircle, \n SparklesIcon\n} from 'lucide-react';\nimport { Box, Text, Badge, Group, Paper, Stack, Title, Button, Textarea, ActionIcon, ScrollArea } from '@mantine/core';\n\nimport { useChat } from '../../hooks/useChat';\nimport { MessageBubble } from '../MessageBubble/MessageBubble';\nimport { componentStyles, getThemedTextProps } from '../../utils/theme';\n\n/**\n * Main chat dialog component\n */\nexport function ChatDialog({\n chatOptions = {},\n title = \"AI Assistant\",\n description = \"Chat with your AI assistant\",\n open = false,\n onOpenChange,\n placeholder = \"Type your message here...\",\n className,\n showHeader = true,\n allowFileUpload = true,\n acceptedFileTypes = ['image/*', 'text/*', 'application/pdf'],\n maxFileSize = 10 * 1024 * 1024, // 10MB\n messageRenderer,\n theme = 'system',\n // 新增的增强功能选项\n enableReasoning = true,\n enableGenerativeUI = true,\n showReasoningByDefault = false,\n}: ChatDialogProps) {\n \n // Frontend tool execution state\n const [frontendToolStatus, setFrontendToolStatus] = useState({\n isProcessing: false,\n currentTool: undefined as string | undefined,\n processedTools: new Set<string>() // 防止重复处理\n });\n \n // 创建友好的错误处理函数\n const handleError = useCallback((err: Error) => {\n console.error('ChatDialog useChat error:', err);\n \n // 创建友好的错误消息,避免泄漏服务器信息\n let friendlyError = err;\n const originalMessage = err.message || 'Unknown occurred';\n \n // 如果错误消息包含HTML标签或看起来像HTML响应\n if (originalMessage.includes('<!DOCTYPE') || originalMessage.includes('<html>') || originalMessage.includes('<body>')) {\n friendlyError = new Error('AI服务连接失败,请检查服务器是否正在运行');\n friendlyError.name = err.name;\n }\n // 检查常见的网络错误\n else if (originalMessage.includes('fetch') || originalMessage.includes('NetworkError') || originalMessage.includes('Failed to fetch')) {\n friendlyError = new Error('AI服务连接失败,请检查网络连接');\n friendlyError.name = err.name;\n }\n // 检查404错误 \n else if (originalMessage.includes('404') || originalMessage.includes('Not Found')) {\n friendlyError = new Error('AI API端点未找到,请确保AI服务器正在运行并且端点配置正确');\n friendlyError.name = err.name;\n }\n // 检查连接被拒绝\n else if (originalMessage.includes('ECONNREFUSED') || originalMessage.includes('Connection refused')) {\n friendlyError = new Error('AI服务器连接被拒绝');\n friendlyError.name = err.name;\n }\n \n \n // 调用原始错误处理器\n chatOptions.onError?.(friendlyError);\n }, [chatOptions]);\n\n\n // Chat hook implementation\n const {\n messages,\n status,\n error,\n sendMessage,\n stop,\n clearError,\n resumeStream,\n addToolResult,\n setMessages,\n } = useChat({\n // Use standard properties from chatOptions\n ...(chatOptions as any),\n // Standard onFinish callback\n onFinish: (options) => {\n // AI回复完成后重新聚焦输入框\n setTimeout(() => {\n inputRef.current?.focus();\n }, 100);\n // 调用原始onFinish回调\n chatOptions.onFinish?.(options);\n },\n onError: handleError,\n // Standard onToolCall - for listening only, no return value\n onToolCall: chatOptions.onToolCall,\n });\n\n // Frontend tool listener - monitors AI tool calls and sends HTTP requests\n useEffect(() => {\n const handleFrontendToolCall = async (toolName: string, input: any) => {\n // 前端工具名单\n const frontendToolNames = [\n 'recordGetValues',\n 'recordSetValues', \n 'recordGetFieldInfo',\n 'recordResetForm',\n 'recordValidateForm'\n ];\n \n if (!frontendToolNames.includes(toolName)) {\n return; // 不是前端工具,忽略\n }\n \n \n // 更新状态显示正在处理\n setFrontendToolStatus(prev => ({\n ...prev,\n isProcessing: true,\n currentTool: toolName\n }));\n \n // 生成等待ID(与后端匹配)\n const waitId = `frontend-${toolName}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n \n try {\n if ((window as any).__ENTITY_ENGINE_AI_BRIDGE__) {\n // 执行前端工具\n const result = await (window as any).__ENTITY_ENGINE_AI_BRIDGE__.executeViewControllerTool(\n toolName,\n input || {}\n );\n \n \n // 直接通过HTTP发送结果给后端\n const finalResult = typeof result === 'string' ? result : JSON.stringify(result, null, 2);\n \n // 发送HTTP请求到后端\n await fetch('/api/ee/servlet/ai/frontend-tool-result', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n waitId: `frontend-${toolName}`, // 简化waitId匹配\n result: finalResult,\n timestamp: Date.now()\n })\n });\n \n \n }\n \n } catch (_error) {\n \n // 发送错误给后端\n await fetch('/api/ee/servlet/ai/frontend-tool-result', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n waitId: `frontend-${toolName}`,\n error: (error as Error).message,\n timestamp: Date.now()\n })\n });\n \n } finally {\n // 重置状态\n setFrontendToolStatus(prev => ({\n ...prev,\n isProcessing: false,\n currentTool: undefined\n }));\n }\n };\n \n // 暴露给ai-form-renderer使用\n (window as any).__FRONTEND_TOOL_HANDLER__ = handleFrontendToolCall;\n \n return () => {\n if ((window as any).__FRONTEND_TOOL_HANDLER__) {\n delete (window as any).__FRONTEND_TOOL_HANDLER__;\n }\n };\n }, []);\n\n\n\n // Local input state management\n const [input, setInput] = useState('');\n const [attachedFiles, setAttachedFiles] = useState<FileUIPart[]>([]);\n\n // Refs\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom\n useEffect(() => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }, [messages, status]);\n\n // Focus input when dialog opens\n useEffect(() => {\n if (open && inputRef.current) {\n const timer = setTimeout(() => {\n inputRef.current?.focus();\n }, 100);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [open]);\n\n\n\n // Handle form submission with sendMessage API\n const handleFormSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n \n if (!input.trim() && attachedFiles.length === 0) return;\n if (status === 'streaming') return;\n\n try {\n // Use sendMessage API\n if (attachedFiles.length > 0) {\n // Send message with attachments\n sendMessage({\n text: input.trim(),\n files: attachedFiles\n });\n } else {\n // Send text-only message\n sendMessage({\n text: input.trim()\n });\n }\n\n // Reset form state\n setInput('');\n setAttachedFiles([]);\n \n // Reset file input\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n } catch (sendError) {\n console.error('Failed to send message:', sendError);\n }\n }, [input, attachedFiles, status, sendMessage]);\n\n // Handle file upload\n const handleFileUpload = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (!files) return;\n\n const newFiles: FileUIPart[] = [];\n\n Array.from(files).forEach((file, index) => {\n // Validate file size\n if (file.size > maxFileSize) {\n return;\n }\n\n // Validate file type\n const isAccepted = acceptedFileTypes.some(type => {\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.slice(0, -1));\n }\n return file.type === type;\n });\n\n if (!isAccepted) {\n return;\n }\n\n // Create file URL\n const fileUrl = URL.createObjectURL(file);\n\n newFiles.push({\n type: 'file',\n filename: file.name,\n mediaType: file.type,\n url: fileUrl,\n });\n });\n\n setAttachedFiles(prev => [...prev, ...newFiles]);\n }, [maxFileSize, acceptedFileTypes]);\n\n // Remove attached file\n const removeFile = useCallback((index: number) => {\n setAttachedFiles(prev => {\n const newFiles = prev.slice();\n // Revoke URL to prevent memory leaks\n URL.revokeObjectURL(newFiles[index].url);\n newFiles.splice(index, 1);\n return newFiles;\n });\n }, []);\n\n // Handle input key press\n const handleKeyPress = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n // Submit form (Shift+Enter for newline)\n e.preventDefault();\n handleFormSubmit(e as any);\n }\n }, [handleFormSubmit]);\n\n\n const isLoading = status === 'streaming' || status === 'submitted';\n const canSend = !isLoading && (input.trim() || attachedFiles.length > 0);\n\n return (\n <Box\n style={{\n height: '100%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 'auto',\n minHeight: 0,\n overflow: 'hidden',\n background: `\n radial-gradient(\n circle at 85% 85%,\n rgba(34, 139, 230, 0.18) 0%,\n rgba(34, 139, 230, 0.09) 25%,\n rgba(34, 139, 230, 0.03) 50%,\n rgba(255, 255, 255, 1) 75%\n )\n `,\n }}\n >\n {/* Header - 精致标题栏 */}\n {showHeader && (\n <Paper \n p=\"lg\"\n bg=\"white\"\n radius={0}\n style={{\n position: 'sticky',\n top: 0,\n zIndex: 100\n }}\n >\n <Group justify=\"space-between\" align=\"center\" style={{ width: '100%' }}>\n <Group gap=\"md\" style={{ flex: 1 }}>\n <Box\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 8px rgba(25, 118, 210, 0.3)'\n }}\n >\n <SparklesIcon size={24} color=\"#1976d2\" />\n </Box>\n <div>\n <Title order={4} c=\"var(--mantine-color-gray-9)\" mb={2}>\n {title}\n </Title>\n <Group gap=\"xs\" align=\"center\">\n <Badge \n size=\"xs\" \n color={error ? \"red\" : \"green\"} \n variant=\"light\"\n leftSection={\n <Box w={6} h={6} bg={error ? \"red\" : \"green\"} style={{ borderRadius: '50%' }} />\n }\n >\n {error ? 'Offline' : 'Online'}\n </Badge>\n \n {description && (\n <Text size=\"xs\" c=\"var(--mantine-color-gray-6)\">\n {description}\n </Text>\n )}\n </Group>\n </div>\n </Group>\n \n <ActionIcon \n variant=\"subtle\" \n color=\"gray\" \n size=\"lg\"\n onClick={() => onOpenChange?.(false)}\n aria-label=\"关闭对话框\"\n style={{ flexShrink: 0 }}\n >\n <X size={18} />\n </ActionIcon>\n </Group>\n </Paper>\n )}\n\n {/* Messages Area */}\n <ScrollArea style={{ flex: 1 }} p=\"xl\">\n <Stack gap=\"md\" maw=\"none\" w=\"100%\">\n <AnimatePresence mode=\"popLayout\">\n {messages.map((message, index) => (\n <motion.div\n key={message.id}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -20 }}\n transition={{ duration: 0.3, delay: index * 0.1 }}\n >\n {messageRenderer ? (\n React.createElement(messageRenderer, { message: message as any })\n ) : (\n <MessageBubble\n message={message as any}\n showAvatar\n showTimestamp\n enableReasoning={enableReasoning}\n enableGenerativeUI={enableGenerativeUI}\n showReasoningByDefault={showReasoningByDefault}\n />\n )}\n </motion.div>\n ))}\n </AnimatePresence>\n\n {/* Loading indicator */}\n {isLoading && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n >\n <Group gap=\"sm\" justify=\"space-between\">\n <Group gap=\"sm\">\n <Group gap=\"xs\">\n <Box w={8} h={8} bg=\"gray.4\" style={{ borderRadius: '50%', animation: 'bounce 1s infinite' }} />\n <Box w={8} h={8} bg=\"gray.4\" style={{ borderRadius: '50%', animation: 'bounce 1s infinite 0.1s' }} />\n <Box w={8} h={8} bg=\"gray.4\" style={{ borderRadius: '50%', animation: 'bounce 1s infinite 0.2s' }} />\n </Group>\n <Text size=\"sm\" {...getThemedTextProps('muted')}>\n AI is thinking...\n </Text>\n </Group>\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n onClick={stop}\n size=\"sm\"\n >\n <Square size={16} />\n </ActionIcon>\n </Group>\n </motion.div>\n )}\n\n <div ref={messagesEndRef} />\n </Stack>\n </ScrollArea>\n\n {/* Error Display */}\n {error && (\n <motion.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n style={{ margin: '1rem' }}\n >\n <Paper\n p=\"md\"\n style={{\n backgroundColor: componentStyles.status.error.background,\n borderLeft: `4px solid ${componentStyles.status.error.border}`,\n }}\n >\n <Group align=\"flex-start\" gap=\"sm\">\n <AlertCircle size={20} color={componentStyles.status.error.text} />\n <Box style={{ flex: 1 }}>\n <Text size=\"sm\" fw={500} c={componentStyles.status.error.text}>\n Connection Error\n </Text>\n <Text size=\"sm\" c={componentStyles.status.error.text} mt=\"xs\">\n {error.message}\n </Text>\n <Group gap=\"sm\" mt=\"md\">\n <Button\n size=\"xs\"\n variant=\"light\"\n color=\"red\"\n onClick={() => clearError()}\n >\n Dismiss\n </Button>\n <Button\n size=\"xs\"\n variant=\"light\"\n color=\"blue\"\n onClick={() => resumeStream()}\n >\n Retry Connection\n </Button>\n </Group>\n </Box>\n </Group>\n </Paper>\n </motion.div>\n )}\n\n {/* File Attachments - 专业预览区域 */}\n {attachedFiles.length > 0 && (\n <Paper \n p=\"lg\" \n shadow=\"xs\"\n style={{ \n borderTop: '1px solid var(--mantine-color-gray-2)',\n backgroundColor: 'var(--mantine-color-gray-0)'\n }}\n >\n <Text size=\"sm\" fw={500} c=\"var(--mantine-color-gray-7)\" mb=\"md\">\n 📎 附件预览\n </Text>\n <Group gap=\"md\" wrap=\"wrap\">\n {attachedFiles.map((file, index) => (\n <Paper \n key={`${file.filename}-${index}`}\n p=\"sm\" \n shadow=\"xs\" \n withBorder\n style={{ \n maxWidth: '280px',\n backgroundColor: 'white',\n position: 'relative'\n }}\n >\n <Group gap=\"sm\" align=\"center\">\n <Box\n w={32}\n h={32}\n bg=\"var(--mantine-color-blue-light)\"\n style={{ \n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <Paperclip size={16} color=\"var(--mantine-color-blue-6)\" />\n </Box>\n <Box style={{ flex: 1, minWidth: 0 }}>\n <Text size=\"sm\" fw={500} truncate c=\"var(--mantine-color-gray-8)\">\n {file.filename}\n </Text>\n <Text size=\"xs\" c=\"var(--mantine-color-gray-6)\">\n {file.mediaType}\n </Text>\n </Box>\n <ActionIcon\n variant=\"subtle\"\n color=\"red\"\n size=\"sm\"\n onClick={() => removeFile(index)}\n style={{ flexShrink: 0 }}\n >\n <X size={14} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Group>\n </Paper>\n )}\n\n {/* Input Area - 专业级交互区域 */}\n <Paper \n p=\"lg\" \n shadow=\"md\"\n style={{ \n borderTop: '1px solid var(--mantine-color-gray-2)',\n backgroundColor: 'white',\n position: 'sticky',\n bottom: 0,\n zIndex: 50\n }}\n >\n <form onSubmit={handleFormSubmit}>\n <Stack gap=\"sm\">\n {/* 主输入区域 */}\n <Group align=\"center\" gap=\"md\">\n {/* 文件上传按钮 - 精致设计 */}\n {allowFileUpload && (\n <Box>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptedFileTypes.join(',')}\n onChange={handleFileUpload}\n style={{ display: 'none' }}\n />\n <ActionIcon\n variant=\"light\"\n color=\"gray\"\n size=\"lg\"\n onClick={() => fileInputRef.current?.click()}\n disabled={isLoading}\n style={{\n border: '2px solid var(--mantine-color-gray-3)',\n backgroundColor: 'var(--mantine-color-gray-0)',\n transition: 'all 0.2s ease',\n }}\n >\n <Paperclip size={20} />\n </ActionIcon>\n </Box>\n )}\n\n {/* 文本输入框 - 高端质感 */}\n <Box style={{ flex: 1 }}>\n <Textarea\n ref={inputRef}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyPress}\n placeholder={placeholder}\n disabled={isLoading}\n minRows={1}\n maxRows={4}\n autosize\n variant=\"filled\"\n styles={{\n input: {\n backgroundColor: 'var(--mantine-color-gray-0)',\n border: '2px solid var(--mantine-color-gray-2)',\n borderRadius: '12px',\n padding: '12px 16px',\n fontSize: '14px',\n lineHeight: '1.4',\n transition: 'all 0.2s ease',\n '&:focus': {\n backgroundColor: 'white',\n borderColor: 'var(--mantine-color-blue-4)',\n boxShadow: '0 0 0 3px var(--mantine-color-blue-1)',\n },\n '&::placeholder': {\n color: 'var(--mantine-color-gray-5)',\n }\n }\n }}\n />\n </Box>\n\n {/* 发送按钮 - 渐变高端效果 */}\n <ActionIcon\n type=\"submit\"\n disabled={!canSend}\n size=\"lg\"\n variant=\"filled\"\n style={{\n background: canSend \n ? 'linear-gradient(45deg, var(--mantine-color-blue-6), var(--mantine-color-blue-5))'\n : 'var(--mantine-color-gray-4)',\n color: 'white',\n border: 'none',\n borderRadius: '12px',\n boxShadow: canSend \n ? '0 4px 12px var(--mantine-color-blue-2)' \n : 'none',\n transform: canSend ? 'scale(1)' : 'scale(0.95)',\n transition: 'all 0.2s ease',\n cursor: canSend ? 'pointer' : 'not-allowed',\n '&:hover': canSend ? {\n transform: 'scale(1.05)',\n boxShadow: '0 6px 16px var(--mantine-color-blue-3)',\n } : {}\n }}\n >\n <Send size={20} />\n </ActionIcon>\n </Group>\n\n {/* 输入提示 - 微妙的状态指示 */}\n {input.length > 0 && (\n <Group justify=\"space-between\" align=\"center\">\n <Text size=\"xs\" c=\"var(--mantine-color-gray-6)\">\n {isLoading ? 'AI正在回复...' : 'Enter发送,Shift+Enter换行'}\n </Text>\n <Text size=\"xs\" c=\"var(--mantine-color-gray-5)\">\n {input.length}/2000\n </Text>\n </Group>\n )}\n </Stack>\n </form>\n </Paper>\n </Box>\n );\n}\n\n/**\n * 默认导出ChatDialog组件\n */\nexport default ChatDialog;","/**\n * Entity Engine AI - useChat Hook\n * \n * Official AI SDK useChat Hook implementation\n * Fully compatible with AI SDK API\n */\n\nimport { useChat as useAIChat } from '@ai-sdk/react';\n\n\nexport const useChat = useAIChat;\n\n/**\n * Default export useChat Hook\n */\nexport default useChat;","// 'use client' directive is added by tsup banner\n\n/**\n * Entity Engine AI - MessageBubble Component\n * \n * Complete message display component with support for various content types\n * 参考:docs/aisdkui/Generative User Interfaces.md\n * \n * 🏗️ 混合架构设计:\n * - GenerativeUI/: 固定UI组件(静态工具专用)\n * - DynamicUI/: 动态UI组件(动态工具专用)\n * - 支持两种渲染模式:tool-${name} 和 dynamic-tool\n * - Supports text, tool calls, data parts, and file attachments\n */\n\n\n\nimport type { MessageBubbleProps } from '../../types';\n\nimport React from 'react';\nimport { Box, Text, Badge, Group, Paper, Stack } from '@mantine/core';\n\n// 🔧 动态组件导入 - DynamicUI文件夹(动态工具专用)\nimport { DynamicToolRenderer } from '../DynamicUI';\n// 🎨 静态组件导入 - GenerativeUI文件夹(基础工具专用)\nimport { \n WeatherComponent, \n LocationComponent, \n CodeExecutionComponent\n} from '../GenerativeUI/PrebuiltComponents';\n\n// Components are directly imported and used\n// WeatherComponent, LocationComponent 等都从 PrebuiltComponents 导入\n\n// 推理显示组件 - 精简设计\nconst ReasoningDisplay = ({ reasoning, step }: { reasoning: string; step?: number }) => (\n <Paper\n p=\"sm\"\n withBorder\n style={{\n backgroundColor: 'var(--mantine-color-yellow-0)',\n borderColor: 'var(--mantine-color-yellow-2)',\n borderLeft: '3px solid var(--mantine-color-yellow-4)'\n }}\n >\n <Text size=\"xs\" fw={500} c=\"var(--mantine-color-yellow-8)\" mb={4}>\n 💭 {step ? `Step ${step}:` : 'Reasoning:'}\n </Text>\n <Text size=\"xs\" c=\"var(--mantine-color-gray-7)\" style={{ lineHeight: 1.3 }}>\n {reasoning}\n </Text>\n </Paper>\n);\n\n// 文件显示组件 - 精简设计\nconst FileDisplay = ({ file }: { file: any }) => {\n if (!file) return null;\n \n return (\n <Paper\n p=\"sm\"\n withBorder\n style={{\n backgroundColor: 'var(--mantine-color-gray-0)',\n borderColor: 'var(--mantine-color-gray-3)'\n }}\n >\n <Group gap=\"xs\" align=\"center\">\n <Box\n w={24}\n h={24}\n bg=\"var(--mantine-color-gray-1)\"\n style={{\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px'\n }}\n >\n 📎\n </Box>\n <Box style={{ flex: 1 }}>\n <Text size=\"xs\" fw={500} c=\"var(--mantine-color-gray-8)\">\n {file.name || 'File'}\n </Text>\n {file.size && (\n <Text size=\"xs\" c=\"var(--mantine-color-gray-6)\">\n {Math.round(file.size / 1024)}KB\n </Text>\n )}\n {file.url && (\n <Text \n size=\"xs\" \n component=\"a\" \n href={file.url} \n target=\"_blank\" \n rel=\"noopener noreferrer\"\n c=\"var(--mantine-color-blue-6)\"\n td=\"none\"\n style={{ cursor: 'pointer' }}\n >\n View File\n </Text>\n )}\n </Box>\n </Group>\n </Paper>\n );\n};\n\n/**\n * Message bubble component with hybrid architecture implementation\n * \n * Supports two rendering modes:\n * 1. 静态工具模式:tool-${toolName} → 使用GenerativeUI组件\n * 2. 动态工具模式:dynamic-tool → 使用DynamicUI组件\n * \n * Standard state handling and naming conventions\n */\nexport function MessageBubble({ \n message,\n showAvatar = false, // 不再使用头像\n showTimestamp = true,\n onToolResult,\n enableReasoning = true,\n enableGenerativeUI = true,\n showReasoningByDefault = false\n}: MessageBubbleProps) {\n\n const isUser = message.role === 'user';\n\n return (\n <Stack gap=\"xs\" mb=\"md\" style={{ width: '100%' }}>\n {/* 极简角色标识 - 用户消息右对齐 */}\n <Group \n gap=\"xs\" \n align=\"center\"\n justify={isUser ? \"flex-end\" : \"flex-start\"}\n >\n <Badge\n variant=\"light\"\n color={isUser ? \"blue\" : \"gray\"}\n size=\"xs\"\n radius=\"sm\"\n >\n {isUser ? \"You\" : \"AI\"}\n </Badge>\n {showTimestamp && (\n <Text size=\"xs\" c=\"var(--mantine-color-gray-5)\">\n {new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </Text>\n )}\n </Group>\n\n {/* 消息内容区域 - 用户消息右对齐 */}\n <Box \n style={{ \n width: '100%',\n display: 'flex',\n justifyContent: isUser ? 'flex-end' : 'flex-start'\n }}\n >\n <Box \n style={{ \n maxWidth: '100%',\n width: isUser ? 'fit-content' : '100%'\n }}\n >\n {message.parts.map((part: any, index: number) => {\n // Text part - simple and direct rendering\n if (part.type === 'text') {\n return (\n <Text \n key={index}\n size=\"sm\"\n style={{\n lineHeight: 1.5,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n textAlign: isUser ? 'right' : 'left'\n }}\n c=\"var(--mantine-color-text)\"\n >\n {part.text}\n </Text>\n );\n }\n\n // File part - standard file display\n if (part.type === 'file') {\n return <FileDisplay key={index} file={part} />;\n }\n\n // Data part - supports reasoning display\n if (part.type === 'data') {\n if (part.data?.type === 'reasoning' && enableReasoning) {\n return (\n <ReasoningDisplay \n key={index}\n reasoning={part.data.content}\n step={part.data.step}\n />\n );\n }\n // 其他数据类型可以在这里扩展\n return null;\n }\n\n // ================================\n // Static tool handling\n // 模式:part.type === 'tool-${toolName}' → GenerativeUI组件\n // 每个工具对应一个预构建的固定组件\n // ================================\n\n // getWeather tool handling\n if (part.type === 'tool-getWeather') {\n switch (part.state) {\n case 'input-streaming':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Preparing weather request...</Text>;\n case 'input-available':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Getting weather for {part.input?.location}...</Text>;\n case 'output-available':{\n // 触发回调\n if (onToolResult) {\n onToolResult({\n toolName: 'getWeather',\n input: part.input,\n output: part.output,\n state: part.state\n });\n }\n // 解包工具返回的数据:使用 part.output.data 而不是 part.output\n const rawData = part.output.data || part.output;\n // 适配字段名:condition -> weather\n const weatherData = {\n ...rawData,\n weather: rawData.condition || rawData.weather\n };\n return (\n <div key={index}>\n <WeatherComponent {...weatherData} />\n </div>\n );\n }\n case 'output-error':\n return (\n <Paper key={index} p=\"sm\" withBorder style={{\n backgroundColor: 'var(--mantine-color-red-0)',\n borderColor: 'var(--mantine-color-red-2)',\n borderLeft: '3px solid var(--mantine-color-red-4)'\n }}>\n <Text size=\"xs\" c=\"var(--mantine-color-red-8)\">\n ❌ Weather Error: {part.errorText}\n </Text>\n </Paper>\n );\n default:\n return null;\n }\n }\n\n // getLocation tool handling\n if (part.type === 'tool-getLocation') {\n switch (part.state) {\n case 'input-streaming':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Preparing location request...</Text>;\n case 'input-available':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Getting location for {part.input?.city}...</Text>;\n case 'output-available':{\n // 触发回调\n if (onToolResult) {\n onToolResult({\n toolName: 'getLocation',\n input: part.input,\n output: part.output,\n state: part.state\n });\n }\n // 解包工具返回的数据:使用 part.output.data 而不是 part.output\n const locationData = part.output.data || part.output;\n return (\n <div key={index}>\n <LocationComponent {...locationData} />\n </div>\n );\n }\n case 'output-error':\n return (\n <Paper key={index} p=\"sm\" withBorder style={{\n backgroundColor: 'var(--mantine-color-red-0)',\n borderColor: 'var(--mantine-color-red-2)',\n borderLeft: '3px solid var(--mantine-color-red-4)'\n }}>\n <Text size=\"xs\" c=\"var(--mantine-color-red-8)\">\n ❌ Location Error: {part.errorText}\n </Text>\n </Paper>\n );\n default:\n return null;\n }\n }\n\n // displayWeather tool handling\n if (part.type === 'tool-displayWeather') {\n switch (part.state) {\n case 'input-streaming':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Preparing weather display...</Text>;\n case 'input-available':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Loading weather display for {part.input?.location}...</Text>;\n case 'output-available':\n // 直接传递工具返回的数据到组件\n return (\n <div key={index}>\n <WeatherComponent {...part.output} />\n </div>\n );\n case 'output-error':\n return (\n <Paper key={index} p=\"sm\" withBorder style={{\n backgroundColor: 'var(--mantine-color-red-0)',\n borderColor: 'var(--mantine-color-red-2)',\n borderLeft: '3px solid var(--mantine-color-red-4)'\n }}>\n <Text size=\"xs\" c=\"var(--mantine-color-red-8)\">\n ❌ Weather Display Error: {part.errorText}\n </Text>\n </Paper>\n );\n default:\n return null;\n }\n }\n\n // executeCode tool handling\n if (part.type === 'tool-executeCode') {\n switch (part.state) {\n case 'input-streaming':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Preparing code execution...</Text>;\n case 'input-available':\n return <Text key={index} size=\"xs\" c=\"var(--mantine-color-gray-6)\">Executing code...</Text>;\n case 'output-available':\n // 触发回调\n if (onToolResult) {\n onToolResult({\n toolName: 'executeCode',\n input: part.input,\n output: part.output,\n state: part.state\n });\n }\n return (\n <div key={index}>\n <CodeExecutionComponent {...part.output} />\n </div>\n );\n case 'output-error':\n return (\n <Paper key={index} p=\"sm\" withBorder style={{\n backgroundColor: 'var(--mantine-color-red-0)',\n borderColor: 'var(--mantine-color-red-2)',\n borderLeft: '3px solid var(--mantine-color-red-4)'\n }}>\n <Text size=\"xs\" c=\"var(--mantine-color-red-8)\">\n ❌ Code Execution Error: {part.errorText}\n </Text>\n </Paper>\n );\n default:\n return null;\n }\n }\n\n // 实体数据查询已统一到动态工具 entityQuery\n // 使用 dynamic-tool 类型进行处理\n\n // ================================\n // Dynamic tool handling\n // 模式:part.type === 'dynamic-tool' → DynamicUI组件\n // 根据_renderHint智能选择合适的动态组件进行渲染\n // ================================\n \n if (part.type === 'dynamic-tool') {\n return (\n <DynamicToolRenderer\n key={index}\n toolName={part.toolName}\n input={part.input}\n output={part.output}\n state={part.state}\n />\n );\n }\n\n // Tool result part - simplified display\n if (part.type === 'tool-result') {\n return (\n <Paper key={index} p=\"sm\" withBorder style={{\n backgroundColor: 'var(--mantine-color-blue-0)',\n borderColor: 'var(--mantine-color-blue-2)',\n borderLeft: '3px solid var(--mantine-color-blue-4)'\n }}>\n <Text size=\"xs\" fw={500} c=\"var(--mantine-color-blue-8)\" mb={4}>\n 🔧 Tool Result\n </Text>\n <Text component=\"pre\" size=\"xs\" style={{ \n fontFamily: 'monospace', \n margin: 0, \n lineHeight: 1.3,\n overflow: 'auto'\n }} c=\"var(--mantine-color-gray-7)\">\n {JSON.stringify(part.result, null, 2)}\n </Text>\n </Paper>\n );\n }\n\n // Unknown type - return null\n return null;\n })}\n </Box>\n </Box>\n </Stack>\n );\n}\n\n/**\n * 默认导出MessageBubble组件\n */\nexport default MessageBubble;","// 'use client' directive is added by tsup banner\n\n/**\n * Entity Engine Integrated Dynamic Components\n * \n * Uses Entity Engine standard components for dynamic rendering\n * 专注于grid和form视图的集成,无冗余逻辑\n */\n\n\n\nimport React from 'react';\nimport { EntityViewContainer } from '@scenemesh/entity-engine';\n\n// ================================\n// Dynamic component type definitions\n// ================================\n\nexport interface DynamicEntityComponentProps {\n toolName: string;\n modelName?: string;\n displayMode?: string;\n data?: any[];\n totalCount?: number;\n pagination?: {\n pageSize: number;\n pageIndex: number;\n totalPages: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n };\n query?: {\n sortBy?: Record<string, 'asc' | 'desc'>;\n filters?: Record<string, any>;\n };\n executedAt?: string;\n toolCallId?: string;\n _renderHint?: {\n componentType: string;\n preferredLayout?: string;\n features?: string[];\n dataSchema?: string[];\n capabilities?: string[];\n };\n}\n\n// ================================\n// 📊 Entity Engine Grid 组件 - 数据表格显示\n// ================================\n\nexport interface DynamicEntityGridProps extends DynamicEntityComponentProps {\n displayMode?: 'table' | 'grid';\n}\n\nexport const DynamicEntityGridComponent: React.FC<DynamicEntityGridProps> = ({\n modelName = '',\n displayMode = 'table',\n toolName,\n _renderHint\n}) => {\n if (!modelName) {\n return (\n <div style={{\n padding: '1rem',\n border: '1px solid #e2e8f0',\n borderRadius: '0.5rem',\n backgroundColor: '#f8fafc'\n }}>\n <h4>⚠️ {toolName} 错误</h4>\n <p>缺少必需的 modelName 参数</p>\n </div>\n );\n }\n\n // 直接使用Entity Engine的标准组件\n return (\n <div>\n <EntityViewContainer\n modelName={modelName}\n viewType=\"grid\"\n behavior={{ mode: 'display' }}\n viewOptions={{\n mode: displayMode,\n hideToolbar: false,\n hideEditColumn: false,\n hidePagination: false\n }}\n />\n </div>\n );\n};\n\n// ================================\n// 📝 Entity Engine Form 组件 - 表单显示\n// ================================\n\nexport interface DynamicEntityFormProps extends DynamicEntityComponentProps {\n baseObjectId?: string;\n mode?: 'display' | 'edit';\n toCreating?: boolean; // 使用Entity Engine的标准方式表示创建模式\n}\n\n// ================================\n// 📋 Entity Engine Kanban 组件 - 看板视图\n// ================================\n\nexport interface DynamicEntityKanbanProps extends DynamicEntityComponentProps {\n displayMode?: 'kanban';\n}\n\n// ================================\n// 📊 Entity Engine Dashboard 组件 - 仪表板视图\n// ================================\n\nexport interface DynamicEntityDashboardProps extends DynamicEntityComponentProps {\n displayMode?: 'dashboard';\n}\n\n// ================================\n// 📑 Entity Engine Mastail 组件 - 主详视图\n// ================================\n\nexport interface DynamicEntityMastailProps extends DynamicEntityComponentProps {\n displayMode?: 'mastail';\n baseObjectId?: string;\n}\n\nexport const DynamicEntityFormComponent: React.FC<DynamicEntityFormProps> = ({\n modelName = '',\n baseObjectId,\n mode = 'display',\n toCreating = false,\n toolName\n}) => {\n if (!modelName) {\n return (\n <div style={{\n padding: '1rem',\n border: '1px solid #e2e8f0',\n borderRadius: '0.5rem',\n backgroundColor: '#f8fafc'\n }}>\n <h4>⚠️ {toolName} 错误</h4>\n <p>缺少必需的 modelName 参数</p>\n </div>\n );\n }\n\n // 直接使用Entity Engine的标准表单组件\n return (\n <div>\n <EntityViewContainer\n modelName={modelName}\n viewType=\"form\"\n baseObjectId={baseObjectId}\n behavior={{ \n mode,\n toCreating\n }}\n />\n </div>\n );\n};\n\n// ================================\n// 📋 Kanban 组件实现\n// ================================\n\nexport const DynamicEntityKanbanComponent: React.FC<DynamicEntityKanbanProps> = ({\n modelName = '',\n toolName,\n _renderHint\n}) => {\n if (!modelName) {\n return (\n <div style={{\n padding: '1rem',\n border: '1px solid #e2e8f0',\n borderRadius: '0.5rem',\n backgroundColor: '#f8fafc'\n }}>\n <h4>⚠️ {toolName} 错误</h4>\n <p>缺少必需的 modelName 参数</p>\n </div>\n );\n }\n\n return (\n <div>\n <EntityViewContainer\n modelName={modelName}\n viewType=\"kanban\"\n behavior={{ mode: 'display' }}\n viewOptions={{\n hideToolbar: false,\n hideEditColumn: false,\n hidePagination: false\n }}\n />\n </div>\n );\n};\n\n// ================================\n// 📊 Dashboard 组件实现\n// ================================\n\nexport const DynamicEntityDashboardComponent: React.FC<DynamicEntityDashboardProps> = ({\n modelName = '',\n toolName,\n _renderHint\n}) => {\n if (!modelName) {\n return (\n <div style={{\n padding: '1rem',\n border: '1px solid #e2e8f0',\n borderRadius: '0.5rem',\n backgroundColor: '#f8fafc'\n }}>\n <h4>⚠️ {toolName} 错误</h4>\n <p>缺少必需的 modelName 参数</p>\n </div>\n );\n }\n\n return (\n <div>\n <EntityViewContainer\n modelName={modelName}\n viewType=\"dashboard\"\n behavior={{ mode: 'display' }}\n viewOptions={{\n hideToolbar: false,\n hideEditColumn: false,\n hidePagination: false\n }}\n />\n </div>\n );\n};\n\n// ================================\n// 📑 Mastail 组件实现\n// ================================\n\nexport const DynamicEntityMastailComponent: React.FC<DynamicEntityMastailProps> = ({\n modelName = '',\n baseObjectId,\n toolName,\n _renderHint\n}) => {\n if (!modelName) {\n return (\n <div style={{\n padding: '1rem',\n border: '1px solid #e2e8f0',\n borderRadius: '0.5rem',\n backgroundColor: '#f8fafc'\n }}>\n <h4>⚠️ {toolName} 错误</h4>\n <p>缺少必需的 modelName 参数</p>\n </div>\n );\n }\n\n return (\n <div>\n <EntityViewContainer\n modelName={modelName}\n viewType=\"mastail\"\n baseObjectId={baseObjectId}\n behavior={{ mode: 'display' }}\n viewOptions={{\n hideToolbar: false,\n hideEditColumn: false,\n hidePagination: false\n }}\n />\n </div>\n );\n};\n\n// ================================\n// 🚫 错误显示组件 - 处理工具执行错误\n// ================================\n\nexport interface DynamicErrorDisplayProps extends DynamicEntityComponentProps {\n error: string;\n errorDetails?: string;\n errorType?: string;\n}\n\nexport const DynamicErrorDisplayComponent: React.FC<DynamicErrorDisplayProps> = ({\n toolName,\n error,\n errorDetails,\n errorType,\n executedAt,\n _renderHint\n}) => (\n <div style={{\n padding: '1rem',\n backgroundColor: '#fee2e2',\n border: '1px solid #fecaca',\n borderRadius: '0.5rem',\n color: '#dc2626',\n margin: '0.5rem 0'\n }}>\n <div style={{ fontWeight: '500', marginBottom: '0.5rem' }}>\n ❌ {toolName} 执行失败\n </div>\n <p style={{ margin: 0, fontSize: '0.875rem' }}>{error}</p>\n {errorDetails && (\n <details style={{ marginTop: '0.5rem' }}>\n <summary style={{ cursor: 'pointer', fontSize: '0.875rem' }}>详细错误信息</summary>\n <pre style={{ \n marginTop: '0.25rem', \n fontSize: '0.75rem', \n backgroundColor: '#fef2f2',\n padding: '0.5rem',\n borderRadius: '0.25rem',\n overflow: 'auto',\n whiteSpace: 'pre-wrap'\n }}>\n {errorDetails}\n </pre>\n </details>\n )}\n {executedAt && (\n <div style={{ \n fontSize: '0.75rem', \n color: '#991b1b', \n marginTop: '0.5rem',\n opacity: 0.8\n }}>\n 执行时间: {new Date(executedAt).toLocaleString()}\n </div>\n )}\n </div>\n );\n\n// ================================\n// Component type mapping for dynamic tools\n// ================================\n\nexport const ENTITY_DYNAMIC_COMPONENTS = {\n 'DynamicDataTable': DynamicEntityGridComponent,\n 'DynamicDataGrid': DynamicEntityGridComponent,\n 'DynamicDataList': DynamicEntityGridComponent,\n 'DynamicEntityForm': DynamicEntityFormComponent,\n 'DynamicEntityKanban': DynamicEntityKanbanComponent,\n 'DynamicEntityDashboard': DynamicEntityDashboardComponent,\n 'DynamicEntityMastail': DynamicEntityMastailComponent,\n 'DynamicErrorDisplay': DynamicErrorDisplayComponent,\n} as const;\n\nexport type EntityDynamicComponentType = keyof typeof ENTITY_DYNAMIC_COMPONENTS;","// 'use client' directive is added by tsup banner\n\n/**\n * Dynamic Tool Renderer - Integrated with Entity Engine components\n * \n * Features:\n * - 处理part.type === 'dynamic-tool' \n * - 支持工具状态管理\n * - 直接使用Entity Engine的grid和form组件\n * - 无冗余逻辑,保持简洁\n */\n\n\n\nimport React from 'react';\n\nimport {\n ENTITY_DYNAMIC_COMPONENTS,\n type EntityDynamicComponentType\n} from './EntityEngineDynamicComponents';\n\n// ================================\n// Standard type definitions\n// ================================\n\ninterface DynamicToolPartProps {\n toolName: string;\n input: any;\n output: any;\n state: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';\n}\n\n// ================================\n// Main renderer implementation\n// ================================\n\nexport function DynamicToolRenderer({ toolName, input, output, state }: DynamicToolPartProps) {\n switch (state) {\n case 'input-streaming':\n return (\n <div style={{ padding: '0.75rem', background: '#f8fafc', borderRadius: '0.5rem', border: '1px solid #e2e8f0' }}>\n <div style={{ fontWeight: '500', marginBottom: '0.25rem' }}>\n ⚡ {toolName} - 准备中...\n </div>\n <div style={{ fontSize: '0.875rem', color: '#64748b' }}>\n 正在解析工具参数...\n </div>\n </div>\n );\n\n case 'input-available':\n return (\n <div style={{ padding: '0.75rem', background: '#fef3c7', borderRadius: '0.5rem', border: '1px solid #f59e0b' }}>\n <div style={{ fontWeight: '500', marginBottom: '0.25rem' }}>\n 🔧 {toolName} - 执行中\n </div>\n <div style={{ fontSize: '0.875rem', color: '#92400e' }}>\n {input?.modelName && `查询模型:${input.modelName}`}\n {input?.displayMode && ` | 显示模式:${input.displayMode}`}\n </div>\n </div>\n );\n\n case 'output-available':\n return (\n <DynamicOutputRenderer \n toolName={toolName}\n input={input}\n output={output}\n />\n );\n\n case 'output-error':\n return (\n <div style={{ \n padding: '1rem', \n background: '#fee2e2', \n borderRadius: '0.5rem', \n border: '1px solid #fecaca',\n color: '#dc2626'\n }}>\n <div style={{ fontWeight: '500', marginBottom: '0.5rem' }}>\n ❌ {toolName} 执行失败\n </div>\n <p style={{ margin: 0 }}>{output?.error || '未知错误'}</p>\n {output?.errorDetails && (\n <details style={{ marginTop: '0.5rem' }}>\n <summary style={{ cursor: 'pointer' }}>详细信息</summary>\n <p style={{ marginTop: '0.25rem', fontSize: '0.875rem' }}>{output.errorDetails}</p>\n </details>\n )}\n </div>\n );\n\n default:\n return (\n <div style={{ padding: '0.75rem', background: '#f1f5f9', borderRadius: '0.5rem' }}>\n <h4>🔧 {toolName}</h4>\n <p>未知状态: {state}</p>\n </div>\n );\n }\n}\n\n// ================================\n// Output renderer - intelligent component selection\n// ================================\n\nfunction DynamicOutputRenderer({ toolName, input, output }: {\n toolName: string;\n input: any;\n output: any;\n}) {\n // 获取渲染提示\n const renderHint = output?._renderHint;\n const componentType = renderHint?.componentType;\n \n // 优先根据displayMode选择组件\n const displayMode = input?.displayMode || output?.displayMode;\n \n // 智能组件选择逻辑\n let selectedComponentType: EntityDynamicComponentType;\n \n if (componentType && componentType in ENTITY_DYNAMIC_COMPONENTS) {\n selectedComponentType = componentType as EntityDynamicComponentType;\n } else {\n // 根据显示模式智能选择,不设置默认值\n switch (displayMode) {\n case 'table':\n selectedComponentType = 'DynamicDataTable';\n break;\n case 'list':\n selectedComponentType = 'DynamicDataGrid'; // 使用grid视图的list模式\n break;\n case 'grid':\n selectedComponentType = 'DynamicDataGrid';\n break;\n case 'form':\n selectedComponentType = 'DynamicEntityForm';\n break;\n case 'kanban':\n selectedComponentType = 'DynamicEntityKanban';\n break;\n case 'dashboard':\n selectedComponentType = 'DynamicEntityDashboard';\n break;\n case 'mastail':\n selectedComponentType = 'DynamicEntityMastail';\n break;\n default:\n // 根据数据判断最合适的显示方式\n if (input?.baseObjectId || output?.baseObjectId) {\n selectedComponentType = 'DynamicEntityForm'; // 有ID则显示表单\n } else {\n selectedComponentType = 'DynamicDataGrid'; // 无ID则显示网格\n }\n }\n }\n \n // 获取对应的组件\n const SelectedComponent = ENTITY_DYNAMIC_COMPONENTS[selectedComponentType];\n \n // 组件属性映射\n const componentProps: any = {\n toolName,\n modelName: input?.modelName || output?.modelName,\n displayMode: displayMode || 'table',\n data: output?.data,\n totalCount: output?.totalCount,\n pagination: output?.pagination,\n query: output?.query || {\n sortBy: input?.sortBy,\n filters: input?.filters\n },\n baseObjectId: input?.baseObjectId,\n mode: input?.mode === 'create' ? 'edit' : (input?.mode || 'display'),\n toCreating: input?.mode === 'create',\n executedAt: output?.executedAt,\n toolCallId: output?.toolCallId,\n _renderHint: renderHint\n };\n\n // Add required error property for error display component\n if (selectedComponentType === 'DynamicErrorDisplay') {\n componentProps.error = output?.error || 'Unknown error';\n componentProps.errorDetails = output?.errorDetails || renderHint?.errorDetails;\n componentProps.errorType = output?.errorType || renderHint?.errorType || 'unknown';\n }\n\n return (\n <div style={{ margin: '0.5rem 0' }}>\n <div style={{ \n fontWeight: '500', \n marginBottom: '0.75rem',\n padding: '0.5rem',\n background: '#f0f9ff',\n borderRadius: '0.375rem',\n border: '1px solid #e0f2fe'\n }}>\n 🔧 {toolName} 结果\n {output?.executedAt && (\n <span style={{ \n fontSize: '0.75rem', \n color: '#64748b', \n marginLeft: '0.5rem' \n }}>\n {new Date(output.executedAt).toLocaleString()}\n </span>\n )}\n </div>\n <SelectedComponent {...componentProps} />\n </div>\n );\n}","/**\n * 🎨 预置生成式UI组件\n * \n * Pure component definitions without registration system\n * Reference: Generative User Interfaces documentation\n * 实现原理:直接导入使用,不再使用动态注册系统\n */\n\nimport React from 'react';\nimport { EntityViewContainer } from '@scenemesh/entity-engine';\n\n// ================================\n// Weather component example\n// ================================\n\ninterface WeatherProps {\n temperature?: number;\n weather?: string;\n location?: string;\n humidity?: number;\n windSpeed?: number;\n}\n\nconst WeatherComponent: React.FC<WeatherProps> = ({ \n temperature = 0, \n weather = '', \n location = '',\n humidity,\n windSpeed\n}) => (\n // <div style={{ \n // background: 'linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)',\n // color: 'white',\n // padding: '1.5rem',\n // borderRadius: '0.75rem',\n // margin: '0.5rem 0',\n // boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)'\n // }}>\n // <div style={{ display: 'flex', alignItems: 'center', marginBottom: '0.5rem' }}>\n // <span style={{ fontSize: '1.5rem', marginRight: '0.5rem' }}>🌤️</span>\n // <h3 style={{ margin: 0, fontSize: '1.25rem' }}>{location}</h3>\n // </div>\n // <p style={{ margin: '0.25rem 0', fontSize: '1rem' }}>{weather}</p>\n // <p style={{ margin: '0.25rem 0', fontSize: '1.5rem', fontWeight: 'bold' }}>{temperature}°C</p>\n // {humidity && <p style={{ margin: '0.25rem 0', fontSize: '0.875rem' }}>湿度: {humidity}%</p>}\n // {windSpeed && <p style={{ margin: '0.25rem 0', fontSize: '0.875rem' }}>风速: {windSpeed} km/h</p>}\n // </div>\n\n <EntityViewContainer modelName=\"product\" viewType='grid' behavior={{mode: 'edit'}} />\n);\n\n\n// ================================\n// 地理位置组件 - 匹配 getLocation 工具\n// ================================\n\ninterface LocationProps {\n city?: string;\n country?: string;\n province?: string;\n coordinates?: { lat: number; lng: number };\n timezone?: string;\n population?: number;\n area?: number;\n}\n\nconst LocationComponent: React.FC<LocationProps> = ({\n city = '',\n country = '',\n province = '',\n coordinates,\n timezone = '',\n population,\n area\n}) => (\n <div style={{\n background: 'linear-gradient(135deg, #fd79a8 0%, #e84393 100%)',\n color: 'white',\n padding: '1.5rem',\n borderRadius: '0.75rem',\n margin: '0.5rem 0',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)'\n }}>\n <div style={{ display: 'flex', alignItems: 'center', marginBottom: '0.5rem' }}>\n <span style={{ fontSize: '1.5rem', marginRight: '0.5rem' }}>📍</span>\n <h3 style={{ margin: 0, fontSize: '1.25rem' }}>{city}</h3>\n </div>\n {province && <p style={{ margin: '0.25rem 0', fontSize: '1rem' }}>{province}, {country}</p>}\n {coordinates && (\n <p style={{ margin: '0.25rem 0', fontSize: '0.875rem' }}>\n 坐标: {coordinates.lat.toFixed(4)}, {coordinates.lng.toFixed(4)}\n </p>\n )}\n {timezone && <p style={{ margin: '0.25rem 0', fontSize: '0.875rem' }}>时区: {timezone}</p>}\n {population && <p style={{ margin: '0.25rem 0', fontSize: '0.875rem' }}>人口: {population.toLocaleString()}万人</p>}\n {area && <p style={{ margin: '0.25rem 0', fontSize: '0.875rem' }}>面积: {area.toLocaleString()} km²</p>}\n </div>\n);\n\n// ================================\n// 代码执行组件\n// ================================\n\ninterface CodeExecutionProps {\n code?: string;\n language?: string;\n output?: string;\n status?: 'success' | 'error' | 'running';\n}\n\nconst CodeExecutionComponent: React.FC<CodeExecutionProps> = ({\n code = '',\n language = 'javascript',\n output = '',\n status = 'success'\n}) => (\n <div style={{\n background: '#f8fafc',\n border: '1px solid #e2e8f0',\n borderRadius: '0.75rem',\n margin: '0.5rem 0',\n overflow: 'hidden'\n }}>\n <div style={{\n background: '#334155',\n color: 'white',\n padding: '0.75rem 1rem',\n fontSize: '0.875rem',\n display: 'flex',\n alignItems: 'center'\n }}>\n <span style={{ marginRight: '0.5rem' }}>💻</span>\n <span>代码执行 ({language})</span>\n <span style={{ \n marginLeft: 'auto',\n fontSize: '0.75rem',\n color: status === 'success' ? '#10b981' : status === 'error' ? '#ef4444' : '#f59e0b'\n }}>\n {status === 'success' ? '✅ 成功' : status === 'error' ? '❌ 错误' : '⏳ 运行中'}\n </span>\n </div>\n {code && (\n <div style={{ padding: '1rem' }}>\n <pre style={{\n background: '#1e293b',\n color: '#e2e8f0',\n padding: '1rem',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n overflow: 'auto',\n margin: '0 0 1rem 0'\n }}>\n {code}\n </pre>\n </div>\n )}\n {output && (\n <div style={{ padding: '0 1rem 1rem' }}>\n <h4 style={{ margin: '0 0 0.5rem 0', fontSize: '0.875rem', color: '#64748b' }}>输出:</h4>\n <pre style={{\n background: status === 'error' ? '#fef2f2' : '#f0f9ff',\n color: status === 'error' ? '#dc2626' : '#0f172a',\n padding: '1rem',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n overflow: 'auto',\n margin: 0,\n border: `1px solid ${status === 'error' ? '#fecaca' : '#e0f2fe'}`\n }}>\n {output}\n </pre>\n </div>\n )}\n </div>\n);\n\n// ================================\n// Pure component exports without registration system\n// ================================\n\n// 实体数据组件已移除,统一使用DynamicUI中的动态组件\n\n// 直接导出基础组件供MessageBubble等使用\nexport {\n WeatherComponent,\n LocationComponent,\n CodeExecutionComponent\n};\n\n// 默认导出基础组件\nexport default {\n WeatherComponent,\n LocationComponent,\n CodeExecutionComponent\n};","/**\n * AI Module 主题色彩规范 - 完全基于 Mantine CSS 变量\n * 自动跟随主包的亮色/暗色模式切换,无需独立维护主题系统\n */\n\nexport const aiThemeColors = {\n // 主要文本颜色 - 使用 Mantine CSS 变量\n primaryText: 'var(--mantine-color-text)', // 主要文本颜色,自动适配主题\n secondaryText: 'var(--mantine-color-dimmed)', // 次要文本颜色\n headingText: 'var(--mantine-color-text)', // 标题文本颜色\n\n // 语义化文本颜色 - 优化深色模式\n mutedText: 'var(--mantine-color-dimmed)', // 静音文本,使用dimmed确保深色模式协调\n placeholderText: 'var(--mantine-color-placeholder)', // 占位符文本\n\n // 状态颜色 - 使用 Mantine 预定义颜色\n success: 'var(--mantine-color-green-filled)',\n warning: 'var(--mantine-color-yellow-filled)',\n error: 'var(--mantine-color-red-filled)',\n info: 'var(--mantine-color-blue-filled)',\n\n // 浅色状态颜色(用于背景)- 深色模式自动适配\n successLight: 'var(--mantine-color-green-light)',\n warningLight: 'var(--mantine-color-yellow-light)',\n errorLight: 'var(--mantine-color-red-light)',\n infoLight: 'var(--mantine-color-blue-light)',\n\n // 背景颜色 - 深色模式自动切换\n bodyBackground: 'var(--mantine-color-body)', // 主体背景\n cardBackground: 'var(--mantine-color-default)', // 卡片背景,使用default确保深色模式协调\n paperBackground: 'var(--mantine-color-default)', // 纸张背景\n codeBackground: 'var(--mantine-color-default)', // 代码背景,深色模式下自动变深\n\n // 边框和分隔线 - 深色模式自动适配\n border: 'var(--mantine-color-default-border)', // 默认边框\n borderLight: 'var(--mantine-color-default-border)', // 统一使用default-border\n divider: 'var(--mantine-color-default-border)', // 分隔线\n\n // 交互状态 - 深色模式友好\n hoverBackground: 'var(--mantine-color-default-hover)', // 悬浮背景,深色模式自动调整\n selectedBackground: 'var(--mantine-color-blue-light)', // 选中背景 - 使用蓝色,深色模式下更清晰\n selectedText: 'var(--mantine-color-blue-filled)', // 选中文本 - 使用蓝色,深色模式下更清晰\n\n // 输入组件 - 深色模式协调\n inputBackground: 'var(--mantine-color-default)', // 输入框背景\n inputBorder: 'var(--mantine-color-default-border)', // 输入框边框\n inputPlaceholder: 'var(--mantine-color-placeholder)', // 输入框占位符\n};\n\n/**\n * 获取主题适配的Text属性 - 深色模式优化版本\n */\nexport function getThemedTextProps(\n variant:\n | 'primary'\n | 'secondary'\n | 'heading'\n | 'muted'\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'subtitle'\n | 'caption' = 'primary'\n) {\n switch (variant) {\n case 'primary':\n return { c: aiThemeColors.primaryText };\n case 'secondary':\n return { c: aiThemeColors.secondaryText };\n case 'heading':\n return { c: aiThemeColors.headingText, fw: 600 };\n case 'muted':\n // 优化muted文字,深色模式下使用更清晰的颜色\n return { c: 'var(--mantine-color-gray-6)' }; // 深色模式下更清晰\n case 'subtitle':\n // 新增:副标题文字,介于primary和secondary之间\n return { c: 'var(--mantine-color-gray-7)', fw: 500 };\n case 'caption':\n // 新增:说明文字,比muted更清晰但比secondary更弱\n return { c: 'var(--mantine-color-gray-6)' };\n case 'success':\n return { c: aiThemeColors.success };\n case 'warning':\n return { c: aiThemeColors.warning };\n case 'error':\n return { c: aiThemeColors.error };\n case 'info':\n return { c: aiThemeColors.info };\n default:\n return { c: aiThemeColors.primaryText };\n }\n}\n\n/**\n * 获取主题适配的样式对象\n */\nexport function getThemedStyles() {\n return {\n // 背景样式\n cardBackground: aiThemeColors.cardBackground,\n paperBackground: aiThemeColors.paperBackground,\n bodyBackground: aiThemeColors.bodyBackground,\n codeBackground: aiThemeColors.codeBackground,\n\n // 边框样式\n border: aiThemeColors.border,\n borderLight: aiThemeColors.borderLight,\n divider: aiThemeColors.divider,\n\n // 交互状态样式\n hoverBackground: aiThemeColors.hoverBackground,\n selectedBackground: aiThemeColors.selectedBackground,\n selectedText: aiThemeColors.selectedText,\n\n // 文本样式\n primaryText: aiThemeColors.primaryText,\n secondaryText: aiThemeColors.secondaryText,\n mutedText: aiThemeColors.mutedText,\n\n // 状态样式\n successBackground: aiThemeColors.successLight,\n warningBackground: aiThemeColors.warningLight,\n errorBackground: aiThemeColors.errorLight,\n infoBackground: aiThemeColors.infoLight,\n };\n}\n\n/**\n * 获取适配特定组件的样式\n */\nexport const componentStyles = {\n // 共享基础样式\n cardBackground: aiThemeColors.cardBackground,\n\n // 聊天对话框样式 - 深色模式优化\n chatDialog: {\n titleColor: aiThemeColors.headingText,\n descriptionColor: aiThemeColors.secondaryText,\n cardBackground: aiThemeColors.cardBackground,\n border: aiThemeColors.border,\n },\n\n // 消息气泡样式\n messageBubble: {\n userBackground: 'var(--mantine-color-blue-filled)',\n userText: 'var(--mantine-color-white)',\n aiBackground: aiThemeColors.cardBackground,\n aiText: aiThemeColors.primaryText,\n border: aiThemeColors.border,\n },\n\n // 文件查看器样式\n fileViewer: {\n background: aiThemeColors.cardBackground,\n border: aiThemeColors.borderLight,\n text: aiThemeColors.primaryText,\n },\n\n // 代码背景\n codeBackground: aiThemeColors.codeBackground,\n\n // 工具栏样式\n toolbar: {\n background: aiThemeColors.bodyBackground,\n border: aiThemeColors.border,\n text: aiThemeColors.primaryText,\n },\n\n // 状态样式配置 - 深色模式完美适配\n status: {\n error: {\n background: 'var(--mantine-color-red-light)',\n border: 'var(--mantine-color-red-outline)',\n text: 'var(--mantine-color-red-light-color)',\n textSecondary: 'var(--mantine-color-red-light-color)',\n textLight: 'var(--mantine-color-red-light-color)',\n icon: 'var(--mantine-color-red-light-color)',\n progressColor: 'red',\n },\n warning: {\n background: 'var(--mantine-color-yellow-light)',\n border: 'var(--mantine-color-yellow-outline)',\n text: 'var(--mantine-color-yellow-light-color)',\n textSecondary: 'var(--mantine-color-yellow-light-color)',\n textLight: 'var(--mantine-color-yellow-light-color)',\n icon: 'var(--mantine-color-yellow-light-color)',\n progressColor: 'yellow',\n },\n success: {\n background: 'var(--mantine-color-green-light)',\n border: 'var(--mantine-color-green-outline)',\n text: 'var(--mantine-color-green-light-color)',\n textSecondary: 'var(--mantine-color-green-light-color)',\n textLight: 'var(--mantine-color-green-light-color)',\n icon: 'var(--mantine-color-green-light-color)',\n progressColor: 'green',\n },\n info: {\n background: 'var(--mantine-color-blue-light)',\n border: 'var(--mantine-color-blue-outline)',\n text: 'var(--mantine-color-blue-light-color)',\n textSecondary: 'var(--mantine-color-blue-light-color)',\n textLight: 'var(--mantine-color-blue-light-color)',\n icon: 'var(--mantine-color-blue-light-color)',\n progressColor: 'blue',\n },\n },\n\n // 文字颜色标准化系统 - 深色模式优化\n text: {\n // 主要文字级别\n primary: aiThemeColors.primaryText, // 主标题、重要内容\n heading: aiThemeColors.headingText, // 页面标题、section标题\n subtitle: 'var(--mantine-color-gray-7)', // 副标题,清晰但次要\n\n // 次要文字级别\n secondary: aiThemeColors.secondaryText, // 正文内容\n caption: 'var(--mantine-color-gray-6)', // 说明文字,比dimmed更清晰\n label: 'var(--mantine-color-gray-7)', // 标签文字\n\n // 弱化文字级别\n muted: 'var(--mantine-color-gray-6)', // 静音文字,深色模式优化\n placeholder: aiThemeColors.placeholderText, // 占位符文字\n disabled: 'var(--mantine-color-gray-5)', // 禁用状态文字\n\n // 状态文字\n success: aiThemeColors.success,\n warning: aiThemeColors.warning,\n error: aiThemeColors.error,\n info: aiThemeColors.info,\n },\n};\n\n/**\n * 标准化文字颜色使用指南\n *\n * 使用场景:\n * - text.primary: 最重要的文字内容,如数据值、用户输入内容\n * - text.heading: 页面标题、section标题(如\"AI Assistant\")\n * - text.subtitle: 副标题、卡片标题(如消息时间戳)\n * - text.secondary: 正文描述、一般性说明文字\n * - text.caption: 简短说明、提示文字(如文件大小)\n * - text.label: 表单标签、按钮标签\n * - text.muted: 不太重要的补充信息(如连接状态)\n * - text.placeholder: 输入框占位符\n * - text.disabled: 禁用状态的文字\n */\n"],"mappings":"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","names":["Box","Text","Badge","Group","Paper","Stack","jsx","jsxs","EntityViewContainer","jsx","jsxs","jsx","jsxs","jsx","jsxs","input","Box","Paper","Group","Badge","Text","Stack"]}