UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

1 lines 3.61 kB
{"version":3,"file":"MessageContent.mjs","names":["EditableMessage","Flexbox"],"sources":["../../../../src/chat/ChatItem/components/MessageContent.tsx"],"sourcesContent":["import { cx, useResponsive } from 'antd-style';\nimport { type ReactNode, memo, useMemo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport type { MarkdownProps } from '@/Markdown';\nimport { ChatItemProps } from '@/chat/ChatItem';\nimport EditableMessage from '@/chat/EditableMessage';\n\nimport { styles } from '../style';\n\nexport interface MessageContentProps {\n editing?: ChatItemProps['editing'];\n fontSize?: number;\n markdownProps?: Omit<MarkdownProps, 'className' | 'style' | 'children'>;\n message?: ReactNode;\n messageExtra?: ChatItemProps['messageExtra'];\n onChange?: ChatItemProps['onChange'];\n onDoubleClick?: ChatItemProps['onDoubleClick'];\n onEditingChange?: ChatItemProps['onEditingChange'];\n placement?: ChatItemProps['placement'];\n primary?: ChatItemProps['primary'];\n renderMessage?: ChatItemProps['renderMessage'];\n text?: ChatItemProps['text'];\n variant?: ChatItemProps['variant'];\n}\n\nconst MessageContent = memo<MessageContentProps>(\n ({\n editing,\n onChange,\n onEditingChange,\n text,\n message,\n placement,\n messageExtra,\n renderMessage,\n variant,\n primary,\n onDoubleClick,\n fontSize,\n markdownProps,\n }) => {\n // placement and primary are part of the interface but not used in this component\n void placement;\n void primary;\n const { mobile } = useResponsive();\n\n const messageClassName = useMemo(() => {\n if (variant === 'bubble') return styles.messageBubble;\n // For docs variant, we need title info, but we don't have it here\n // Use withoutTitle as default\n return styles.messageDocsWithoutTitle;\n }, [variant]);\n\n const editingContainerClassName = useMemo(() => {\n return variant === 'docs' ? styles.editingContainerDocs : styles.editingContainer;\n }, [variant]);\n\n const content = (\n <EditableMessage\n classNames={{ input: styles.editingInput }}\n editButtonSize={'small'}\n editing={editing}\n fontSize={fontSize}\n fullFeaturedCodeBlock\n markdownProps={markdownProps}\n onChange={onChange}\n onEditingChange={onEditingChange}\n openModal={mobile ? editing : undefined}\n text={text}\n value={message ? String(message) : ''}\n />\n );\n const messageContent = renderMessage ? renderMessage(content) : content;\n\n return (\n <Flexbox\n className={cx(messageClassName, editing && editingContainerClassName)}\n onDoubleClick={onDoubleClick}\n >\n {messageContent}\n {messageExtra && !editing ? (\n <div className={styles.messageExtra}>{messageExtra}</div>\n ) : null}\n </Flexbox>\n );\n },\n);\n\nexport default MessageContent;\n"],"mappings":";;;;;;;;AA0BA,MAAM,iBAAiB,MACpB,EACC,SACA,UACA,iBACA,MACA,SACA,WACA,cACA,eACA,SACA,SACA,eACA,UACA,oBACI;CAIJ,MAAM,EAAE,WAAW,eAAe;CAElC,MAAM,mBAAmB,cAAc;AACrC,MAAI,YAAY,SAAU,QAAO,OAAO;AAGxC,SAAO,OAAO;IACb,CAAC,QAAQ,CAAC;CAEb,MAAM,4BAA4B,cAAc;AAC9C,SAAO,YAAY,SAAS,OAAO,uBAAuB,OAAO;IAChE,CAAC,QAAQ,CAAC;CAEb,MAAM,UACJ,oBAACA;EACC,YAAY,EAAE,OAAO,OAAO,cAAc;EAC1C,gBAAgB;EACP;EACC;EACV;EACe;EACL;EACO;EACjB,WAAW,SAAS,UAAU;EACxB;EACN,OAAO,UAAU,OAAO,QAAQ,GAAG;GACnC;CAEJ,MAAM,iBAAiB,gBAAgB,cAAc,QAAQ,GAAG;AAEhE,QACE,qBAACC;EACC,WAAW,GAAG,kBAAkB,WAAW,0BAA0B;EACtD;aAEd,gBACA,gBAAgB,CAAC,UAChB,oBAAC;GAAI,WAAW,OAAO;aAAe;IAAmB,GACvD;GACI;EAGf;AAED,6BAAe"}