@hkyhy/marsun-components-core 0.1.35 → 0.1.37

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,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageItem/index.tsx"],"sourcesContent":["import { BookOpen, Bot, User } from '@/components/Icons';\nimport type { ChatMessage, ChatWidget, Citation } from '@/components/AgentHub/types';\nimport ChatWidgetBlock from '@/components/AgentHub/Chat/Detail/ChatWidgetBlock';\nimport { message as antdMessage, Avatar, Typography } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTypewriter } from '../../hooks';\nimport { countUniqueCitedSources, normalizeDisplayText, parseAssistantContent } from '../../utils';\nimport CitationMarkdownContent from '../CitationMarkdownContent';\nimport MessageActions, {\n createAssistantMessageActions,\n createUserMessageActions,\n} from '../MessageActions';\nimport ThinkingSection from '../ThinkingSection';\nimport styles from './style.module.scss';\n\nconst { Text } = Typography;\n\nexport interface MessageItemProps {\n message: ChatMessage;\n onCitationClick?: (citations: Citation[], index?: number) => void;\n onTypingChange?: (typing: boolean) => void;\n onEditMessage?: (messageId: string, content: string) => void;\n onResendMessage?: (content: string) => void;\n onMessageFeedback?: (messageId: string, thumbup: boolean) => void | Promise<void>;\n editDisabled?: boolean;\n feedbackDisabled?: boolean;\n}\n\nconst MessageItem: React.FC<MessageItemProps> = ({\n message,\n onCitationClick,\n onTypingChange,\n onEditMessage,\n onResendMessage,\n onMessageFeedback,\n editDisabled,\n feedbackDisabled,\n}) => {\n const isUser = message.role === 'user';\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(message.content);\n const [feedbackSubmitting, setFeedbackSubmitting] = useState(false);\n const [localThumbup, setLocalThumbup] = useState<boolean | null | undefined>(message.thumbup);\n const parsedContent = useMemo(\n () => parseAssistantContent(message.content, !!message.streaming),\n [message.content, message.streaming],\n );\n\n const shouldAnimateThinking = !!message.streaming && parsedContent.isThinking;\n const { displayed: displayedThinking, isTyping: isThinkingTyping } = useTypewriter(\n parsedContent.thinking,\n shouldAnimateThinking,\n );\n const thinkingToShow = parsedContent.isThinking ? displayedThinking : parsedContent.thinking;\n\n const { displayed: displayedContent, isTyping } = useTypewriter(\n parsedContent.answer,\n !!message.streaming,\n );\n\n const citations = useMemo(() => message.citations ?? [], [message.citations]);\n const messageWidgets = useMemo(\n () => (Array.isArray(message.widgets) ? (message.widgets as ChatWidget[]) : []),\n [message.widgets],\n );\n const citationSourceContent = useMemo(\n () => `${parsedContent.thinking}\\n${parsedContent.answer}`,\n [parsedContent.thinking, parsedContent.answer],\n );\n const uniqueCitedCount = useMemo(\n () => countUniqueCitedSources(citationSourceContent, citations.length),\n [citationSourceContent, citations.length],\n );\n\n const citationSummaryLabel = useMemo(() => {\n if (citations.length === 0) return '';\n if (uniqueCitedCount > 0 && uniqueCitedCount < citations.length) {\n return `检索 ${citations.length} 个来源 · 正文引用 ${uniqueCitedCount} 处`;\n }\n return `引用了 ${citations.length} 个来源`;\n }, [citations.length, uniqueCitedCount]);\n\n const effectiveThinkingTyping = parsedContent.isThinking && isThinkingTyping;\n\n useEffect(() => {\n if (isUser) return;\n onTypingChange?.(isTyping || effectiveThinkingTyping);\n }, [isUser, isTyping, effectiveThinkingTyping, onTypingChange]);\n\n useEffect(() => {\n setLocalThumbup(message.thumbup);\n }, [message.id, message.thumbup]);\n\n const hasAnswerContent = normalizeDisplayText(displayedContent).trim().length > 0;\n const showWidgets = !isUser && messageWidgets.length > 0;\n const showAnswerCursor = (message.streaming || isTyping) && hasAnswerContent;\n const isContentTyping = isTyping || effectiveThinkingTyping;\n const deferMermaid = !!message.streaming || isContentTyping;\n\n const handleSummaryClick = useCallback(() => {\n if (!citations.length || !onCitationClick) return;\n onCitationClick(citations);\n }, [citations, onCitationClick]);\n\n const copyText = useCallback(async (text: string) => {\n if (!text.trim()) return;\n try {\n await navigator.clipboard.writeText(text);\n antdMessage.success('已复制');\n } catch {\n antdMessage.error('复制失败');\n }\n }, []);\n\n const assistantCopyText = normalizeDisplayText(parsedContent.answer);\n const showAssistantActions =\n !isUser && !message.streaming && !isContentTyping && assistantCopyText.trim().length > 0;\n\n const handleEditCancel = useCallback(() => {\n setEditOpen(false);\n setEditValue(message.content);\n }, [message.content]);\n\n const handleEditConfirm = useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || trimmed === message.content.trim() || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setEditOpen(false);\n }, [editValue, message.content, message.id, onEditMessage]);\n\n const handleFeedback = useCallback(\n async (thumbup: boolean) => {\n if (feedbackSubmitting || feedbackDisabled) return;\n if (localThumbup === thumbup) return;\n\n if (onMessageFeedback) {\n setFeedbackSubmitting(true);\n try {\n await onMessageFeedback(message.id, thumbup);\n setLocalThumbup(thumbup);\n } catch {\n // 错误提示由上层处理\n } finally {\n setFeedbackSubmitting(false);\n }\n return;\n }\n\n setLocalThumbup(thumbup);\n antdMessage.success('感谢反馈');\n },\n [feedbackDisabled, feedbackSubmitting, localThumbup, message.id, onMessageFeedback],\n );\n\n const actionItems = isUser\n ? createUserMessageActions({\n onEdit: onEditMessage\n ? () => {\n setEditValue(message.content);\n setEditOpen(true);\n }\n : undefined,\n onCopy: () => copyText(message.content),\n onResend: onResendMessage ? () => onResendMessage(message.content) : undefined,\n editDisabled,\n })\n : createAssistantMessageActions({\n onLike: () => {\n void handleFeedback(true);\n },\n onDislike: () => {\n void handleFeedback(false);\n },\n onCopy: () => copyText(assistantCopyText),\n thumbup: localThumbup,\n feedbackDisabled: feedbackDisabled || feedbackSubmitting,\n });\n\n const editPopoverProps = onEditMessage\n ? {\n open: editOpen,\n value: editValue,\n originalContent: message.content,\n onOpenChange: (open: boolean) => {\n setEditOpen(open);\n if (!open) setEditValue(message.content);\n },\n onChange: setEditValue,\n onConfirm: handleEditConfirm,\n onCancel: handleEditCancel,\n }\n : undefined;\n\n const userMessageBubble = (\n <div\n className={classNames(\n 'message-item-message-user-bubble',\n styles['message-item-message-user-bubble'],\n 'bg-primary',\n )}\n >\n <span\n className={classNames(\n 'message-item-message-user-bubble-text',\n styles['message-item-message-user-bubble-text'],\n )}\n >\n {message.content}\n </span>\n </div>\n );\n\n return (\n <div\n className={classNames(\n 'group',\n 'message-row',\n styles['message-item-message-row'],\n isUser && 'message-item-message-row-reverse',\n isUser && styles['message-item-message-row-reverse'],\n )}\n >\n <Avatar\n size={34}\n icon={isUser ? <User /> : <Bot />}\n className={classNames(\n 'message-item-message-avatar',\n styles['message-item-message-avatar'],\n !isUser && 'message-item-message-avatar-assistant',\n !isUser && styles['message-item-message-avatar-assistant'],\n )}\n style={isUser ? {} : { color: 'var(--primary-color)' }}\n />\n\n <div\n className={classNames(\n 'message-item-message-content',\n styles['message-item-message-content'],\n isUser\n ? classNames(\n 'message-item-message-content-user',\n styles['message-item-message-content-user'],\n )\n : classNames(\n 'message-item-message-content-assistant',\n styles['message-item-message-content-assistant'],\n ),\n )}\n >\n <div\n className={\n isUser\n ? undefined\n : classNames(\n 'message-item-message-assistant-bubble',\n styles['message-item-message-assistant-bubble'],\n )\n }\n >\n {isUser ? (\n userMessageBubble\n ) : message.streaming &&\n !parsedContent.thinking &&\n !parsedContent.isThinking &&\n !hasAnswerContent &&\n !showWidgets ? (\n <div\n className={classNames(\n 'message-item-message-loading-dots',\n styles['message-item-message-loading-dots'],\n )}\n >\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n </div>\n ) : (\n <>\n {(parsedContent.thinking || parsedContent.isThinking) && (\n <ThinkingSection\n thinking={thinkingToShow}\n isThinking={parsedContent.isThinking}\n isTyping={effectiveThinkingTyping}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n )}\n {showWidgets ? (\n <ChatWidgetBlock\n widgets={messageWidgets}\n compact\n leading\n className={classNames(\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-widgets-after-thinking'],\n )}\n />\n ) : null}\n {hasAnswerContent && (\n <div\n className={classNames(\n 'markdown-preview',\n 'message-answer-markdown',\n styles['message-item-message-answer-markdown'],\n (parsedContent.thinking || parsedContent.isThinking) &&\n 'message-answer-markdown-spaced',\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-answer-markdown-spaced'],\n showWidgets && styles['message-item-message-answer-markdown-after-widgets'],\n )}\n >\n <CitationMarkdownContent\n content={displayedContent}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n {showAnswerCursor && (\n <span\n className={classNames(\n 'message-item-message-typing-cursor',\n styles['message-item-message-typing-cursor'],\n )}\n />\n )}\n </div>\n )}\n </>\n )}\n </div>\n\n {(isUser || showAssistantActions) && (\n <MessageActions\n items={actionItems}\n align={isUser ? 'right' : 'left'}\n editPopover={editPopoverProps}\n actionsVisible={editOpen}\n />\n )}\n\n {!isUser && citations.length > 0 && !isContentTyping && (\n <button\n type=\"button\"\n onClick={handleSummaryClick}\n className={classNames(\n 'message-item-citation-summary-button',\n styles['message-item-citation-summary-button'],\n )}\n >\n <BookOpen\n className={classNames(\n 'text-primary',\n 'citation-summary-icon',\n styles['message-item-citation-summary-icon'],\n )}\n />\n <Text\n className={classNames(\n 'text-primary',\n 'citation-summary-text',\n styles['message-item-citation-summary-text'],\n )}\n >\n {citationSummaryLabel}\n </Text>\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n"],"names":["Text","Typography","MessageItem","message","onCitationClick","onTypingChange","onEditMessage","onResendMessage","onMessageFeedback","editDisabled","feedbackDisabled","isUser","editOpen","setEditOpen","useState","editValue","setEditValue","feedbackSubmitting","setFeedbackSubmitting","localThumbup","setLocalThumbup","parsedContent","useMemo","parseAssistantContent","shouldAnimateThinking","displayedThinking","isThinkingTyping","useTypewriter","thinkingToShow","displayedContent","isTyping","citations","messageWidgets","citationSourceContent","uniqueCitedCount","countUniqueCitedSources","citationSummaryLabel","effectiveThinkingTyping","useEffect","hasAnswerContent","normalizeDisplayText","showWidgets","showAnswerCursor","isContentTyping","deferMermaid","handleSummaryClick","useCallback","copyText","text","antdMessage","assistantCopyText","showAssistantActions","handleEditCancel","handleEditConfirm","trimmed","handleFeedback","thumbup","actionItems","createUserMessageActions","createAssistantMessageActions","editPopoverProps","open","userMessageBubble","jsx","classNames","styles","jsxs","Avatar","User","Bot","Fragment","ThinkingSection","ChatWidgetBlock","CitationMarkdownContent","MessageActions","BookOpen"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageItem/index.tsx"],"sourcesContent":["import { BookOpen, Bot, User } from '@/components/Icons';\nimport type { ChatMessage, ChatWidget, Citation } from '@/components/AgentHub/types';\nimport ChatWidgetBlock from '@/components/AgentHub/Chat/Detail/ChatWidgetBlock';\nimport { message as antdMessage, Avatar, Typography } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTypewriter } from '../../hooks';\nimport { countUniqueCitedSources, normalizeDisplayText, parseAssistantContent } from '../../utils';\nimport CitationMarkdownContent from '../CitationMarkdownContent';\nimport MessageActions, {\n createAssistantMessageActions,\n createUserMessageActions,\n} from '../MessageActions';\nimport ThinkingSection from '../ThinkingSection';\nimport styles from './style.module.scss';\n\nconst { Text } = Typography;\n\nexport interface MessageItemProps {\n message: ChatMessage;\n onCitationClick?: (citations: Citation[], index?: number) => void;\n onTypingChange?: (typing: boolean) => void;\n onEditMessage?: (messageId: string, content: string) => void;\n onResendMessage?: (content: string) => void;\n onMessageFeedback?: (messageId: string, thumbup: boolean) => void | Promise<void>;\n editDisabled?: boolean;\n feedbackDisabled?: boolean;\n}\n\nconst MessageItem: React.FC<MessageItemProps> = ({\n message,\n onCitationClick,\n onTypingChange,\n onEditMessage,\n onResendMessage,\n onMessageFeedback,\n editDisabled,\n feedbackDisabled,\n}) => {\n const isUser = message.role === 'user';\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(message.content);\n const [feedbackSubmitting, setFeedbackSubmitting] = useState(false);\n const [localThumbup, setLocalThumbup] = useState<boolean | null | undefined>(message.thumbup);\n const parsedContent = useMemo(\n () => parseAssistantContent(message.content, !!message.streaming),\n [message.content, message.streaming],\n );\n\n const shouldAnimateThinking = !!message.streaming && parsedContent.isThinking;\n const { displayed: displayedThinking, isTyping: isThinkingTyping } = useTypewriter(\n parsedContent.thinking,\n shouldAnimateThinking,\n );\n const thinkingToShow = parsedContent.isThinking ? displayedThinking : parsedContent.thinking;\n\n const { displayed: displayedContent, isTyping } = useTypewriter(\n parsedContent.answer,\n !!message.streaming,\n );\n\n const citations = useMemo(() => message.citations ?? [], [message.citations]);\n const messageWidgets = useMemo(\n () => (Array.isArray(message.widgets) ? (message.widgets as ChatWidget[]) : []),\n [message.widgets],\n );\n const citationSourceContent = useMemo(\n () => `${parsedContent.thinking}\\n${parsedContent.answer}`,\n [parsedContent.thinking, parsedContent.answer],\n );\n const uniqueCitedCount = useMemo(\n () => countUniqueCitedSources(citationSourceContent, citations.length),\n [citationSourceContent, citations.length],\n );\n\n const citationSummaryLabel = useMemo(() => {\n if (citations.length === 0) return '';\n if (uniqueCitedCount > 0 && uniqueCitedCount < citations.length) {\n return `检索 ${citations.length} 个来源 · 正文引用 ${uniqueCitedCount} 处`;\n }\n return `引用了 ${citations.length} 个来源`;\n }, [citations.length, uniqueCitedCount]);\n\n const effectiveThinkingTyping = parsedContent.isThinking && isThinkingTyping;\n\n useEffect(() => {\n if (isUser) return;\n onTypingChange?.(isTyping || effectiveThinkingTyping);\n }, [isUser, isTyping, effectiveThinkingTyping, onTypingChange]);\n\n useEffect(() => {\n setLocalThumbup(message.thumbup);\n }, [message.id, message.thumbup]);\n\n const hasAnswerContent = normalizeDisplayText(displayedContent).trim().length > 0;\n const showWidgets = !isUser && messageWidgets.length > 0;\n const showAnswerCursor = (message.streaming || isTyping) && hasAnswerContent;\n const isContentTyping = isTyping || effectiveThinkingTyping;\n const deferMermaid = !!message.streaming || isContentTyping;\n\n const handleSummaryClick = useCallback(() => {\n if (!citations.length || !onCitationClick) return;\n onCitationClick(citations);\n }, [citations, onCitationClick]);\n\n const copyText = useCallback(async (text: string) => {\n if (!text.trim()) return;\n\n const verifyClipboard = async () => {\n if (!navigator.clipboard?.readText) return null;\n try {\n return await navigator.clipboard.readText();\n } catch {\n return null;\n }\n };\n\n const copyWithClipboardApi = async () => {\n if (!navigator.clipboard) return false;\n\n if (typeof ClipboardItem !== 'undefined' && typeof navigator.clipboard.write === 'function') {\n try {\n const item = new ClipboardItem({\n 'text/plain': Promise.resolve(new Blob([text], { type: 'text/plain' })),\n });\n await navigator.clipboard.write([item]);\n const got = await verifyClipboard();\n // got === null:无读权限,信任 write;空串则视为未写入\n if (got === null || got === text) return true;\n if (got === '') return false;\n } catch {\n /* fall through to writeText */\n }\n }\n\n if (typeof navigator.clipboard.writeText !== 'function') return false;\n await navigator.clipboard.writeText(text);\n const got = await verifyClipboard();\n if (got === '') return false;\n return got === null || got === text;\n };\n\n const copyWithSelection = () => {\n const el = document.createElement('div');\n el.textContent = text;\n el.setAttribute('contenteditable', 'true');\n el.style.cssText =\n 'position:fixed;top:0;left:0;width:2px;height:2px;padding:0;margin:0;border:none;outline:none;opacity:0.01;overflow:hidden;z-index:2147483647;white-space:pre;user-select:text;-webkit-user-select:text;';\n document.body.appendChild(el);\n\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(el);\n selection?.removeAllRanges();\n selection?.addRange(range);\n el.focus();\n\n let ok = false;\n try {\n ok = document.execCommand('copy');\n } finally {\n selection?.removeAllRanges();\n document.body.removeChild(el);\n }\n return ok;\n };\n\n try {\n if (await copyWithClipboardApi()) {\n antdMessage.success('已复制');\n return;\n }\n } catch {\n /* 继续 selection 回退 */\n }\n\n try {\n if (copyWithSelection()) {\n const got = await verifyClipboard();\n if (got === null || got === text) {\n antdMessage.success('已复制');\n return;\n }\n }\n } catch {\n /* fall through */\n }\n\n antdMessage.error('复制失败,请手动选择文本复制');\n }, []);\n\n const assistantCopyText = normalizeDisplayText(parsedContent.answer);\n const showAssistantActions =\n !isUser && !message.streaming && !isContentTyping && assistantCopyText.trim().length > 0;\n\n const handleEditCancel = useCallback(() => {\n setEditOpen(false);\n setEditValue(message.content);\n }, [message.content]);\n\n const handleEditConfirm = useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || trimmed === message.content.trim() || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setEditOpen(false);\n }, [editValue, message.content, message.id, onEditMessage]);\n\n const handleFeedback = useCallback(\n async (thumbup: boolean) => {\n if (feedbackSubmitting || feedbackDisabled) return;\n if (localThumbup === thumbup) return;\n\n if (onMessageFeedback) {\n setFeedbackSubmitting(true);\n try {\n await onMessageFeedback(message.id, thumbup);\n setLocalThumbup(thumbup);\n } catch {\n // 错误提示由上层处理\n } finally {\n setFeedbackSubmitting(false);\n }\n return;\n }\n\n setLocalThumbup(thumbup);\n antdMessage.success('感谢反馈');\n },\n [feedbackDisabled, feedbackSubmitting, localThumbup, message.id, onMessageFeedback],\n );\n\n const actionItems = isUser\n ? createUserMessageActions({\n onEdit: onEditMessage\n ? () => {\n setEditValue(message.content);\n setEditOpen(true);\n }\n : undefined,\n onCopy: () => copyText(message.content),\n onResend: onResendMessage ? () => onResendMessage(message.content) : undefined,\n editDisabled,\n })\n : createAssistantMessageActions({\n onLike: () => {\n void handleFeedback(true);\n },\n onDislike: () => {\n void handleFeedback(false);\n },\n onCopy: () => copyText(assistantCopyText),\n thumbup: localThumbup,\n feedbackDisabled: feedbackDisabled || feedbackSubmitting,\n });\n\n const editPopoverProps = onEditMessage\n ? {\n open: editOpen,\n value: editValue,\n originalContent: message.content,\n onOpenChange: (open: boolean) => {\n setEditOpen(open);\n if (!open) setEditValue(message.content);\n },\n onChange: setEditValue,\n onConfirm: handleEditConfirm,\n onCancel: handleEditCancel,\n }\n : undefined;\n\n const userMessageBubble = (\n <div\n className={classNames(\n 'message-item-message-user-bubble',\n styles['message-item-message-user-bubble'],\n 'bg-primary',\n )}\n >\n <span\n className={classNames(\n 'message-item-message-user-bubble-text',\n styles['message-item-message-user-bubble-text'],\n )}\n >\n {message.content}\n </span>\n </div>\n );\n\n return (\n <div\n className={classNames(\n 'group',\n 'message-row',\n styles['message-item-message-row'],\n isUser && 'message-item-message-row-reverse',\n isUser && styles['message-item-message-row-reverse'],\n )}\n >\n <Avatar\n size={34}\n icon={isUser ? <User /> : <Bot />}\n className={classNames(\n 'message-item-message-avatar',\n styles['message-item-message-avatar'],\n !isUser && 'message-item-message-avatar-assistant',\n !isUser && styles['message-item-message-avatar-assistant'],\n )}\n style={isUser ? {} : { color: 'var(--primary-color)' }}\n />\n\n <div\n className={classNames(\n 'message-item-message-content',\n styles['message-item-message-content'],\n isUser\n ? classNames(\n 'message-item-message-content-user',\n styles['message-item-message-content-user'],\n )\n : classNames(\n 'message-item-message-content-assistant',\n styles['message-item-message-content-assistant'],\n ),\n )}\n >\n <div\n className={\n isUser\n ? undefined\n : classNames(\n 'message-item-message-assistant-bubble',\n styles['message-item-message-assistant-bubble'],\n )\n }\n >\n {isUser ? (\n userMessageBubble\n ) : message.streaming &&\n !parsedContent.thinking &&\n !parsedContent.isThinking &&\n !hasAnswerContent &&\n !showWidgets ? (\n <div\n className={classNames(\n 'message-item-message-loading-dots',\n styles['message-item-message-loading-dots'],\n )}\n >\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n </div>\n ) : (\n <>\n {(parsedContent.thinking || parsedContent.isThinking) && (\n <ThinkingSection\n thinking={thinkingToShow}\n isThinking={parsedContent.isThinking}\n isTyping={effectiveThinkingTyping}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n )}\n {showWidgets ? (\n <ChatWidgetBlock\n widgets={messageWidgets}\n compact\n leading\n className={classNames(\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-widgets-after-thinking'],\n )}\n />\n ) : null}\n {hasAnswerContent && (\n <div\n className={classNames(\n 'markdown-preview',\n 'message-answer-markdown',\n styles['message-item-message-answer-markdown'],\n (parsedContent.thinking || parsedContent.isThinking) &&\n 'message-answer-markdown-spaced',\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-answer-markdown-spaced'],\n showWidgets && styles['message-item-message-answer-markdown-after-widgets'],\n )}\n >\n <CitationMarkdownContent\n content={displayedContent}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n {showAnswerCursor && (\n <span\n className={classNames(\n 'message-item-message-typing-cursor',\n styles['message-item-message-typing-cursor'],\n )}\n />\n )}\n </div>\n )}\n </>\n )}\n </div>\n\n {(isUser || showAssistantActions) && (\n <MessageActions\n items={actionItems}\n align={isUser ? 'right' : 'left'}\n editPopover={editPopoverProps}\n actionsVisible={editOpen}\n />\n )}\n\n {!isUser && citations.length > 0 && !isContentTyping && (\n <button\n type=\"button\"\n onClick={handleSummaryClick}\n className={classNames(\n 'message-item-citation-summary-button',\n styles['message-item-citation-summary-button'],\n )}\n >\n <BookOpen\n className={classNames(\n 'text-primary',\n 'citation-summary-icon',\n styles['message-item-citation-summary-icon'],\n )}\n />\n <Text\n className={classNames(\n 'text-primary',\n 'citation-summary-text',\n styles['message-item-citation-summary-text'],\n )}\n >\n {citationSummaryLabel}\n </Text>\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n"],"names":["Text","Typography","MessageItem","message","onCitationClick","onTypingChange","onEditMessage","onResendMessage","onMessageFeedback","editDisabled","feedbackDisabled","isUser","editOpen","setEditOpen","useState","editValue","setEditValue","feedbackSubmitting","setFeedbackSubmitting","localThumbup","setLocalThumbup","parsedContent","useMemo","parseAssistantContent","shouldAnimateThinking","displayedThinking","isThinkingTyping","useTypewriter","thinkingToShow","displayedContent","isTyping","citations","messageWidgets","citationSourceContent","uniqueCitedCount","countUniqueCitedSources","citationSummaryLabel","effectiveThinkingTyping","useEffect","hasAnswerContent","normalizeDisplayText","showWidgets","showAnswerCursor","isContentTyping","deferMermaid","handleSummaryClick","useCallback","copyText","text","verifyClipboard","_a","copyWithClipboardApi","item","got","copyWithSelection","el","selection","range","ok","antdMessage","assistantCopyText","showAssistantActions","handleEditCancel","handleEditConfirm","trimmed","handleFeedback","thumbup","actionItems","createUserMessageActions","createAssistantMessageActions","editPopoverProps","open","userMessageBubble","jsx","classNames","styles","jsxs","Avatar","User","Bot","Fragment","ThinkingSection","ChatWidgetBlock","CitationMarkdownContent","MessageActions","BookOpen"],"mappings":"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"}
@@ -1,24 +1,24 @@
1
1
  const e = {
2
- "message-item-message-row": "_message-item-message-row_1ig20_1",
3
- "message-item-message-row-reverse": "_message-item-message-row-reverse_1ig20_7",
4
- "message-item-message-avatar": "_message-item-message-avatar_1ig20_11",
5
- "message-item-message-avatar-assistant": "_message-item-message-avatar-assistant_1ig20_15",
6
- "message-item-message-content": "_message-item-message-content_1ig20_19",
7
- "message-item-message-content-user": "_message-item-message-content-user_1ig20_26",
8
- "message-item-message-content-assistant": "_message-item-message-content-assistant_1ig20_30",
9
- "message-item-message-user-bubble": "_message-item-message-user-bubble_1ig20_35",
10
- "message-item-message-user-bubble-text": "_message-item-message-user-bubble-text_1ig20_47",
11
- "message-item-message-assistant-bubble": "_message-item-message-assistant-bubble_1ig20_51",
12
- "message-item-message-loading-dots": "_message-item-message-loading-dots_1ig20_69",
13
- "message-item-message-loading-dot": "_message-item-message-loading-dot_1ig20_69",
14
- "message-item-message-answer-markdown": "_message-item-message-answer-markdown_1ig20_92",
15
- "message-item-message-answer-markdown-spaced": "_message-item-message-answer-markdown-spaced_1ig20_131",
16
- "message-item-message-answer-markdown-after-widgets": "_message-item-message-answer-markdown-after-widgets_1ig20_135",
17
- "message-item-message-widgets-after-thinking": "_message-item-message-widgets-after-thinking_1ig20_141",
18
- "message-item-message-typing-cursor": "_message-item-message-typing-cursor_1ig20_145",
19
- "message-item-citation-summary-button": "_message-item-citation-summary-button_1ig20_155",
20
- "message-item-citation-summary-icon": "_message-item-citation-summary-icon_1ig20_174",
21
- "message-item-citation-summary-text": "_message-item-citation-summary-text_1ig20_179"
2
+ "message-item-message-row": "_message-item-message-row_5rf2x_1",
3
+ "message-item-message-row-reverse": "_message-item-message-row-reverse_5rf2x_10",
4
+ "message-item-message-avatar": "_message-item-message-avatar_5rf2x_14",
5
+ "message-item-message-avatar-assistant": "_message-item-message-avatar-assistant_5rf2x_18",
6
+ "message-item-message-content": "_message-item-message-content_5rf2x_22",
7
+ "message-item-message-content-user": "_message-item-message-content-user_5rf2x_29",
8
+ "message-item-message-content-assistant": "_message-item-message-content-assistant_5rf2x_33",
9
+ "message-item-message-user-bubble": "_message-item-message-user-bubble_5rf2x_38",
10
+ "message-item-message-user-bubble-text": "_message-item-message-user-bubble-text_5rf2x_50",
11
+ "message-item-message-assistant-bubble": "_message-item-message-assistant-bubble_5rf2x_55",
12
+ "message-item-message-loading-dots": "_message-item-message-loading-dots_5rf2x_73",
13
+ "message-item-message-loading-dot": "_message-item-message-loading-dot_5rf2x_73",
14
+ "message-item-message-answer-markdown": "_message-item-message-answer-markdown_5rf2x_96",
15
+ "message-item-message-answer-markdown-spaced": "_message-item-message-answer-markdown-spaced_5rf2x_135",
16
+ "message-item-message-answer-markdown-after-widgets": "_message-item-message-answer-markdown-after-widgets_5rf2x_139",
17
+ "message-item-message-widgets-after-thinking": "_message-item-message-widgets-after-thinking_5rf2x_145",
18
+ "message-item-message-typing-cursor": "_message-item-message-typing-cursor_5rf2x_149",
19
+ "message-item-citation-summary-button": "_message-item-citation-summary-button_5rf2x_159",
20
+ "message-item-citation-summary-icon": "_message-item-citation-summary-icon_5rf2x_178",
21
+ "message-item-citation-summary-text": "_message-item-citation-summary-text_5rf2x_183"
22
22
  };
23
23
  export {
24
24
  e as default
@@ -1,202 +1,182 @@
1
- import { jsx as l, jsxs as S, Fragment as I } from "react/jsx-runtime";
2
- import { useState as w, useCallback as x, useMemo as j } from "react";
3
- import { Popover as W, Tooltip as J, Collapse as Q, Input as R, Space as X, Button as V, Empty as A, Checkbox as Y } from "antd";
4
- import { Settings as Z, Undo2 as $, ChevronDown as q, ChevronRight as ee } from "../Icons/index.js";
5
- import { mergePanelWithConfig as ne, splitVisibleHidden as re, panelItemsToConfig as le } from "./columnConfigUtils.js";
6
- import o from "./columnConfig.module.scss.js";
7
- function F(t, n) {
8
- if (!n) return !0;
9
- const a = n.toLowerCase();
10
- return t.some(
11
- (e) => e.label.toLowerCase().includes(a) || e.id.toLowerCase().includes(a) || (e.children ? F(e.children, n) : !1)
1
+ import { jsx as e, jsxs as v, Fragment as B } from "react/jsx-runtime";
2
+ import { useState as S, useCallback as E, useMemo as z } from "react";
3
+ import { Popover as J, Tooltip as Q, Collapse as X, Input as R, Space as Y, Button as V, Empty as A, Checkbox as Z } from "antd";
4
+ import { Settings as $, Undo2 as q, ChevronDown as ee, ChevronRight as ne } from "../Icons/index.js";
5
+ import { mergePanelWithConfig as re, splitVisibleHidden as te, panelItemsToConfig as ae } from "./columnConfigUtils.js";
6
+ import i from "./columnConfig.module.scss.js";
7
+ function j(s, r) {
8
+ if (!r) return !0;
9
+ const l = r.toLowerCase();
10
+ return s.some(
11
+ (t) => t.label.toLowerCase().includes(l) || t.id.toLowerCase().includes(l) || (t.children ? j(t.children, r) : !1)
12
12
  );
13
13
  }
14
- const E = ({ items: t, search: n, onChange: a, onToggle: e, depth: h = 0, collapsedIds: d, onToggleCollapse: u }) => {
15
- const [g, k] = w(null), T = !!n.trim(), z = j(() => n.trim() ? t.map((r, c) => ({ it: r, i: c })).filter(({ it: r }) => F([r], n.trim())) : t.map((r, c) => ({ it: r, i: c })), [t, n]), H = (r, c) => {
16
- k(c), r.dataTransfer.effectAllowed = "move", r.dataTransfer.setData("text/plain", String(c));
17
- }, B = (r, c) => {
18
- r.preventDefault();
19
- const m = g ?? Number(r.dataTransfer.getData("text/plain"));
20
- if (k(null), !Number.isFinite(m) || m === c) return;
21
- const p = [...t], [y] = p.splice(m, 1);
22
- y && (p.splice(c, 0, y), a(p));
14
+ const H = ({ items: s, search: r, onChange: l, onToggle: t, depth: f = 0, collapsedIds: h, onToggleCollapse: c }) => {
15
+ const [g, y] = S(null), w = !!r.trim(), D = z(() => r.trim() ? s.map((n, o) => ({ it: n, i: o })).filter(({ it: n }) => j([n], r.trim())) : s.map((n, o) => ({ it: n, i: o })), [s, r]), L = (n, o) => {
16
+ y(o), n.dataTransfer.effectAllowed = "move", n.dataTransfer.setData("text/plain", String(o));
17
+ }, T = (n, o) => {
18
+ n.preventDefault();
19
+ const m = g ?? Number(n.dataTransfer.getData("text/plain"));
20
+ if (y(null), !Number.isFinite(m) || m === o) return;
21
+ const p = [...s], [C] = p.splice(m, 1);
22
+ C && (p.splice(o, 0, C), l(p));
23
23
  };
24
- return z.length ? /* @__PURE__ */ l("ul", { className: o.list, style: { paddingLeft: h ? 12 : 0 }, children: z.map(({ it: r, i: c }) => {
25
- var y;
26
- const m = !!((y = r.children) != null && y.length), p = T || !d.has(r.id);
27
- return /* @__PURE__ */ S("li", { className: o.listItem, children: [
28
- /* @__PURE__ */ S(
24
+ return D.length ? /* @__PURE__ */ e("ul", { className: i.list, style: { paddingLeft: f ? 12 : 0 }, children: D.map(({ it: n, i: o }) => {
25
+ var C;
26
+ const m = !!((C = n.children) != null && C.length), p = w || !h.has(n.id);
27
+ return /* @__PURE__ */ v("li", { className: i.listItem, children: [
28
+ /* @__PURE__ */ v(
29
29
  "div",
30
30
  {
31
- className: o.row,
32
- draggable: !T,
33
- onDragStart: (i) => H(i, c),
34
- onDragOver: (i) => i.preventDefault(),
35
- onDrop: (i) => B(i, c),
31
+ className: i.row,
32
+ draggable: !w,
33
+ onDragStart: (d) => L(d, o),
34
+ onDragOver: (d) => d.preventDefault(),
35
+ onDrop: (d) => T(d, o),
36
36
  children: [
37
- m ? /* @__PURE__ */ l(
37
+ m ? /* @__PURE__ */ e(
38
38
  "button",
39
39
  {
40
40
  type: "button",
41
- className: o.foldBtn,
41
+ className: i.foldBtn,
42
42
  "aria-label": p ? "折叠" : "展开",
43
43
  "aria-expanded": p,
44
- onClick: (i) => {
45
- i.stopPropagation(), u(r.id);
44
+ onClick: (d) => {
45
+ d.stopPropagation(), c(n.id);
46
46
  },
47
- children: p ? /* @__PURE__ */ l(q, { size: 14 }) : /* @__PURE__ */ l(ee, { size: 14 })
47
+ children: p ? /* @__PURE__ */ e(ee, { size: 14 }) : /* @__PURE__ */ e(ne, { size: 14 })
48
48
  }
49
- ) : /* @__PURE__ */ l("span", { className: o.foldSpacer, "aria-hidden": !0 }),
50
- /* @__PURE__ */ l("span", { className: o.grip, "aria-hidden": !0, children: "⠿" }),
51
- /* @__PURE__ */ l(Y, { checked: !r.hidden, onChange: (i) => e(r.id, !i.target.checked), children: /* @__PURE__ */ l("span", { className: o.label, children: r.label || r.id }) })
49
+ ) : /* @__PURE__ */ e("span", { className: i.foldSpacer, "aria-hidden": !0 }),
50
+ /* @__PURE__ */ e("span", { className: i.grip, "aria-hidden": !0, children: "⠿" }),
51
+ /* @__PURE__ */ e(Z, { checked: !n.hidden, onChange: (d) => t(n.id, !d.target.checked), children: /* @__PURE__ */ e("span", { className: i.label, children: n.label || n.id }) })
52
52
  ]
53
53
  }
54
54
  ),
55
- m && p ? /* @__PURE__ */ l(
56
- E,
55
+ m && p ? /* @__PURE__ */ e(
56
+ H,
57
57
  {
58
- items: r.children,
59
- search: n,
60
- depth: h + 1,
61
- collapsedIds: d,
62
- onToggleCollapse: u,
63
- onChange: (i) => {
64
- const b = t.map(
65
- (N) => N.id === r.id ? { ...N, children: i } : N
58
+ items: n.children,
59
+ search: r,
60
+ depth: f + 1,
61
+ collapsedIds: h,
62
+ onToggleCollapse: c,
63
+ onChange: (d) => {
64
+ const x = s.map(
65
+ (N) => N.id === n.id ? { ...N, children: d } : N
66
66
  );
67
- a(b);
67
+ l(x);
68
68
  },
69
- onToggle: (i, b) => {
70
- const N = t.map((v) => {
71
- if (v.id !== r.id || !v.children) return v;
72
- const L = v.children.map(
73
- (f) => f.id === i ? { ...f, hidden: b } : f.children ? {
74
- ...f,
75
- children: O(f.children, i, b)
76
- } : f
77
- ), P = L.every((f) => f.hidden);
78
- return { ...v, children: L, hidden: P ? !0 : b ? v.hidden : !1 };
79
- });
80
- a(N);
81
- }
69
+ onToggle: t
82
70
  }
83
71
  ) : null
84
- ] }, r.id);
85
- }) }) : /* @__PURE__ */ l(A, { image: A.PRESENTED_IMAGE_SIMPLE, description: "暂无数据" });
72
+ ] }, n.id);
73
+ }) }) : /* @__PURE__ */ e(A, { image: A.PRESENTED_IMAGE_SIMPLE, description: "暂无数据" });
86
74
  };
87
- function O(t, n, a) {
88
- return t.map((e) => {
89
- if (e.id === n) return { ...e, hidden: a };
90
- if (e.children) {
91
- const h = O(e.children, n, a);
92
- return {
93
- ...e,
94
- children: h,
95
- hidden: h.every((d) => d.hidden) ? !0 : e.hidden && a
96
- };
75
+ function F(s, r, l) {
76
+ return s.map((t) => {
77
+ var f;
78
+ if (t.id === r) {
79
+ const h = (f = t.children) == null ? void 0 : f.map((c) => O(c, l));
80
+ return { ...t, hidden: l, children: h };
97
81
  }
98
- return e;
99
- });
100
- }
101
- function _(t, n, a) {
102
- return t.map((e) => {
103
- var h;
104
- if (e.id === n) {
105
- const d = (h = e.children) == null ? void 0 : h.map((u) => G(u, a));
106
- return { ...e, hidden: a, children: d };
107
- }
108
- if (e.children) {
109
- const d = _(e.children, n, a), u = d.every((g) => g.hidden);
82
+ if (t.children) {
83
+ const h = F(t.children, r, l), c = h.every((g) => g.hidden);
110
84
  return {
111
- ...e,
112
- children: d,
113
- hidden: u ? !0 : !a && e.id !== n ? !1 : e.hidden
85
+ ...t,
86
+ children: h,
87
+ hidden: c ? !0 : !l && t.id !== r ? !1 : t.hidden
114
88
  };
115
89
  }
116
- return e;
90
+ return t;
117
91
  });
118
92
  }
119
- function G(t, n) {
120
- var a;
93
+ function O(s, r) {
94
+ var l;
121
95
  return {
122
- ...t,
123
- hidden: n,
124
- children: (a = t.children) == null ? void 0 : a.map((e) => G(e, n))
96
+ ...s,
97
+ hidden: r,
98
+ children: (l = s.children) == null ? void 0 : l.map((t) => O(t, r))
125
99
  };
126
100
  }
127
- function M(t, n) {
128
- return [...t, ...n];
101
+ function M(s, r) {
102
+ return [...s, ...r];
129
103
  }
130
- const ae = ({
131
- open: t,
132
- onOpenChange: n,
133
- defaultItems: a,
134
- savedConfig: e,
135
- onConfirm: h,
136
- children: d
104
+ const le = ({
105
+ open: s,
106
+ onOpenChange: r,
107
+ defaultItems: l,
108
+ savedConfig: t,
109
+ onConfirm: f,
110
+ children: h
137
111
  }) => {
138
- const [u, g] = w([]), [k, T] = w(""), [z, H] = w(""), [B, r] = w(!1), [c, m] = w(() => /* @__PURE__ */ new Set()), p = x(() => {
139
- g(ne(a, e)), T(""), H(""), m(/* @__PURE__ */ new Set());
140
- }, [a, e]), y = (s) => {
141
- s && p(), n(s);
142
- }, { visible: i, hidden: b } = j(() => re(u), [u]), N = (s) => {
143
- g(M(s, b));
144
- }, v = (s) => {
145
- g(M(i, s));
146
- }, L = (s, D) => {
147
- g((C) => _(C, s, D));
148
- }, P = x((s) => {
149
- m((D) => {
150
- const C = new Set(D);
151
- return C.has(s) ? C.delete(s) : C.add(s), C;
112
+ const [c, g] = S([]), [y, w] = S(""), [D, L] = S(""), [T, n] = S(!1), [o, m] = S(() => /* @__PURE__ */ new Set()), p = E(() => {
113
+ g(re(l, t)), w(""), L(""), m(/* @__PURE__ */ new Set());
114
+ }, [l, t]), C = (a) => {
115
+ a && p(), r(a);
116
+ }, { visible: d, hidden: x } = z(() => te(c), [c]), N = z(() => c.filter((a) => a.hidden), [c]), _ = (a) => {
117
+ g(M(a, N));
118
+ }, G = (a) => {
119
+ const b = new Set(N.map((k) => k.id)), u = a.filter((k) => b.has(k.id));
120
+ g(
121
+ M(
122
+ c.filter((k) => !k.hidden),
123
+ u
124
+ )
125
+ );
126
+ }, I = (a, b) => {
127
+ g((u) => F(u, a, b));
128
+ }, P = E((a) => {
129
+ m((b) => {
130
+ const u = new Set(b);
131
+ return u.has(a) ? u.delete(a) : u.add(a), u;
152
132
  });
153
- }, []), f = () => {
154
- g(a.map((s) => {
155
- var D;
156
- return { ...s, children: (D = s.children) == null ? void 0 : D.map((C) => ({ ...C })) };
133
+ }, []), K = () => {
134
+ g(l.map((a) => {
135
+ var b;
136
+ return { ...a, children: (b = a.children) == null ? void 0 : b.map((u) => ({ ...u })) };
157
137
  })), m(/* @__PURE__ */ new Set());
158
- }, K = async () => {
159
- r(!0);
138
+ }, U = async () => {
139
+ n(!0);
160
140
  try {
161
- await h(le(u)), n(!1);
141
+ await f(ae(c)), r(!1);
162
142
  } finally {
163
- r(!1);
143
+ n(!1);
164
144
  }
165
- }, U = /* @__PURE__ */ S("div", { className: o.panel, "data-ui": "table-column-config", children: [
166
- /* @__PURE__ */ S("div", { className: o.header, children: [
167
- /* @__PURE__ */ l("span", { className: o.title, children: "编辑表格" }),
168
- /* @__PURE__ */ l(J, { title: "恢复默认", children: /* @__PURE__ */ l("button", { type: "button", className: o.resetBtn, onClick: f, "aria-label": "恢复默认", children: /* @__PURE__ */ l($, { size: 16 }) }) })
145
+ }, W = /* @__PURE__ */ v("div", { className: i.panel, "data-ui": "table-column-config", children: [
146
+ /* @__PURE__ */ v("div", { className: i.header, children: [
147
+ /* @__PURE__ */ e("span", { className: i.title, children: "编辑表格" }),
148
+ /* @__PURE__ */ e(Q, { title: "恢复默认", children: /* @__PURE__ */ e("button", { type: "button", className: i.resetBtn, onClick: K, "aria-label": "恢复默认", children: /* @__PURE__ */ e(q, { size: 16 }) }) })
169
149
  ] }),
170
- /* @__PURE__ */ l(
171
- Q,
150
+ /* @__PURE__ */ e(
151
+ X,
172
152
  {
173
- className: o.collapse,
153
+ className: i.collapse,
174
154
  defaultActiveKey: ["visible", "hidden"],
175
155
  ghost: !0,
176
156
  items: [
177
157
  {
178
158
  key: "visible",
179
159
  label: "显示的信息",
180
- children: /* @__PURE__ */ S(I, { children: [
181
- /* @__PURE__ */ l(
160
+ children: /* @__PURE__ */ v(B, { children: [
161
+ /* @__PURE__ */ e(
182
162
  R,
183
163
  {
184
164
  allowClear: !0,
185
165
  size: "small",
186
- className: o.search,
166
+ className: i.search,
187
167
  placeholder: "搜索",
188
- value: k,
189
- onChange: (s) => T(s.target.value)
168
+ value: y,
169
+ onChange: (a) => w(a.target.value)
190
170
  }
191
171
  ),
192
- /* @__PURE__ */ l(
193
- E,
172
+ /* @__PURE__ */ e(
173
+ H,
194
174
  {
195
- items: i,
196
- search: k,
197
- onChange: N,
198
- onToggle: L,
199
- collapsedIds: c,
175
+ items: d,
176
+ search: y,
177
+ onChange: _,
178
+ onToggle: I,
179
+ collapsedIds: o,
200
180
  onToggleCollapse: P
201
181
  }
202
182
  )
@@ -205,26 +185,26 @@ const ae = ({
205
185
  {
206
186
  key: "hidden",
207
187
  label: "隐藏的信息",
208
- children: /* @__PURE__ */ S(I, { children: [
209
- /* @__PURE__ */ l(
188
+ children: /* @__PURE__ */ v(B, { children: [
189
+ /* @__PURE__ */ e(
210
190
  R,
211
191
  {
212
192
  allowClear: !0,
213
193
  size: "small",
214
- className: o.search,
194
+ className: i.search,
215
195
  placeholder: "搜索",
216
- value: z,
217
- onChange: (s) => H(s.target.value)
196
+ value: D,
197
+ onChange: (a) => L(a.target.value)
218
198
  }
219
199
  ),
220
- /* @__PURE__ */ l(
221
- E,
200
+ /* @__PURE__ */ e(
201
+ H,
222
202
  {
223
- items: b,
224
- search: z,
225
- onChange: v,
226
- onToggle: L,
227
- collapsedIds: c,
203
+ items: x,
204
+ search: D,
205
+ onChange: G,
206
+ onToggle: I,
207
+ collapsedIds: o,
228
208
  onToggleCollapse: P
229
209
  }
230
210
  )
@@ -233,55 +213,55 @@ const ae = ({
233
213
  ]
234
214
  }
235
215
  ),
236
- /* @__PURE__ */ l("div", { className: o.footer, children: /* @__PURE__ */ S(X, { children: [
237
- /* @__PURE__ */ l(V, { size: "small", onClick: () => n(!1), children: "取消" }),
238
- /* @__PURE__ */ l(V, { type: "primary", size: "small", loading: B, onClick: () => void K(), children: "确定" })
216
+ /* @__PURE__ */ e("div", { className: i.footer, children: /* @__PURE__ */ v(Y, { children: [
217
+ /* @__PURE__ */ e(V, { size: "small", onClick: () => r(!1), children: "取消" }),
218
+ /* @__PURE__ */ e(V, { type: "primary", size: "small", loading: T, onClick: () => void U(), children: "确定" })
239
219
  ] }) })
240
220
  ] });
241
- return /* @__PURE__ */ l(
242
- W,
221
+ return /* @__PURE__ */ e(
222
+ J,
243
223
  {
244
224
  trigger: "click",
245
225
  placement: "bottomRight",
246
- open: t,
247
- onOpenChange: y,
248
- content: U,
249
- overlayClassName: o.overlay,
226
+ open: s,
227
+ onOpenChange: C,
228
+ content: W,
229
+ overlayClassName: i.overlay,
250
230
  arrow: !1,
251
- children: d
231
+ children: h
252
232
  }
253
233
  );
254
234
  };
255
- function he({
256
- open: t,
257
- onOpenChange: n,
258
- defaultItems: a,
259
- savedConfig: e,
260
- onConfirm: h
235
+ function me({
236
+ open: s,
237
+ onOpenChange: r,
238
+ defaultItems: l,
239
+ savedConfig: t,
240
+ onConfirm: f
261
241
  }) {
262
- return /* @__PURE__ */ l(
263
- ae,
242
+ return /* @__PURE__ */ e(
243
+ le,
264
244
  {
265
- open: t,
266
- onOpenChange: n,
267
- defaultItems: a,
268
- savedConfig: e,
269
- onConfirm: h,
270
- children: /* @__PURE__ */ l(
245
+ open: s,
246
+ onOpenChange: r,
247
+ defaultItems: l,
248
+ savedConfig: t,
249
+ onConfirm: f,
250
+ children: /* @__PURE__ */ e(
271
251
  "button",
272
252
  {
273
253
  type: "button",
274
- className: o.gearBtn,
254
+ className: i.gearBtn,
275
255
  "aria-label": "编辑表格",
276
- onClick: (d) => d.stopPropagation(),
277
- children: /* @__PURE__ */ l(Z, { size: 14 })
256
+ onClick: (h) => h.stopPropagation(),
257
+ children: /* @__PURE__ */ e($, { size: 14 })
278
258
  }
279
259
  )
280
260
  }
281
261
  );
282
262
  }
283
263
  export {
284
- ae as ColumnConfigPopover,
285
- he as ColumnConfigTrigger
264
+ le as ColumnConfigPopover,
265
+ me as ColumnConfigTrigger
286
266
  };
287
267
  //# sourceMappingURL=ColumnConfigPanel.js.map