mcpField
S
syncfusion-javascript-chat-ui

syncfusion-javascript-chat-ui

github.com/syncfusion设计与 UI061 次安装1 周前更新
代码仓库

关于 syncfusion-javascript-chat-ui

面向构建聊天、客服和协作界面的开发者的 Syncfusion TypeScript Chat UI 指南,涵盖消息工具、附件、提及、建议回复和按需加载历史消息。

主要功能

  1. 01消息展示与管理
  2. 02输入状态和消息状态
  3. 03文件附件与上传
  4. 04提及和快捷回复
  5. 05消息模板与操作
  6. 06按需延迟加载会话

适用场景

  1. 01客户支持聊天
  2. 02AI 聊天机器人界面
  3. 03团队协作聊天
  4. 04嵌入式实时帮助组件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/javascript-ui-controls-skills --skill syncfusion-javascript-chat-ui

安装后在 Claude Code 中输入/syncfusion-javascript-chat-ui确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
events.md
file-attachments.md
getting-started.md
header-footer.md
load-on-demand.md
mention.md
message-toolbar-appearance.md
messages.md
methods.md
suggestions.md
templates.md
timebreak-timestamp.md
typing-indicator.md

详细介绍

实现 Syncfusion TypeScript 聊天 UI

概述

聊天 UI 组件提供了现代化、功能丰富的界面,可用于构建对话应用,包括客户支持聊天、AI 聊天机器人、消息系统和协作沟通工具。

Syncfusion 聊天 UI(ChatUI)控件来自 @syncfusion/ej2-interactive-chat 包,提供以下功能:

  • 消息管理 - 显示、发送和管理包含丰富内容的聊天消息
  • 用户区分 - 以视觉方式区分当前用户和其他参与者
  • 实时指示器 - 显示活跃参与者的输入指示器
  • 文件附件 - 上传并在消息中显示文件、图像和文档
  • 智能功能 - @提及、快速回复建议、消息回复
  • 自定义 - 支持自定义消息、空状态、页眉和页脚的模板
  • 无障碍功能 - 键盘导航、ARIA 支持、RTL 布局
  • 消息工具栏 - 每条消息的操作(复制、回复、固定、删除)
  • 按需加载 - 为较长的对话历史记录提供延迟加载

包: @syncfusion/ej2-interactive-chat

依赖项: ej2-base、ej2-navigations、ej2-inputs、ej2-buttons、ej2-dropdowns、ej2-popups


文档与导航指南

入门

📄 阅读: references/getting-started.md

  • 安装包
  • 主题 CSS 导入(material、bootstrap、fabric 等)
  • 基本聊天 UI 初始化
  • UserModel 配置(当前用户和参与者)
  • 初始消息的 MessageModel 结构
  • 组件尺寸(宽度、高度)
  • created 事件和组件生命周期
消息配置

📄 阅读: references/messages.md

  • MessageModel 属性(id、text、author、timestamp、status)
  • messages 属性 - 初始消息集合
  • 消息状态指示器(已发送、已接收、已读)
  • 消息回复(replyTo、MessageReplyModel)
  • 消息标记(isForwarded、isPinned)
  • 自动滚动行为(autoScrollToBottom)
  • 按发送者对消息分组
  • 消息中的提及(mentionUsers 数组)
  • 消息中的附件
页眉和页脚配置

📄 阅读: references/header-footer.md

  • 显示/隐藏页眉和页脚(showHeader、showFooter)
  • 页眉文本和图标(headerText、headerIconCss)
  • 页眉工具栏配置(headerToolbar、ToolbarSettingsModel)
  • 工具栏项设置(包含 text、icon、alignment、tooltip 的 ToolbarItemModel)
  • 工具栏项点击事件(itemClicked)
  • 自定义页脚占位文本
  • 用于自定义布局的页脚模板
输入指示器

📄 阅读: references/typing-indicator.md

  • 显示/隐藏输入指示器(typingUsers 属性)
  • 动态更新输入用户(UserModel 数组)
  • 多个用户同时输入的场景
  • 自定义输入指示器模板(typingUsersTemplate)
  • userTyping 事件(isTyping、message、user)
模板与自定义

📄 阅读: references/templates.md

  • 空聊天模板(emptyChatTemplate)
  • 消息模板(messageTemplate)及其上下文
  • 输入用户模板(typingUsersTemplate)
  • 时间分隔模板(timeBreakTemplate)
  • 建议模板(suggestionTemplate)
  • 页脚模板(footerTemplate)
  • 模板上下文和数据绑定模式
时间分隔与时间戳

📄 阅读: references/timebreak-timestamp.md

  • 显示时间分隔(showTimeBreak),按日期分组
  • 自定义时间分隔模板
  • 按消息显示时间戳(showTimeStamp)
  • 全局时间戳格式(timeStampFormat)
  • 覆盖单条消息的时间戳格式
  • 日期/时间格式模式
  • 基于区域设置的格式化
文件附件

📄 阅读: references/file-attachments.md

  • 启用附件(enableAttachments)
  • 附件设置(attachmentSettings、FileAttachmentSettingsModel)
  • 服务端上传配置(saveUrl、removeUrl)
  • 保存格式选项(Base64 与 Blob)
  • 文件类型限制(allowedFileTypes)
  • 文件大小限制(maxFileSize)
  • 最大附件数量(maximumCount)
  • 支持拖放(enableDragAndDrop)
  • 自定义附件模板(attachmentTemplate、previewTemplate)
  • 附件事件(click、upload、success、failure、removed)
@提及集成

📄 阅读: references/mention.md

  • 提及触发字符(mentionTriggerChar,默认为 '@')
  • 提及用户列表(mentionUsers 属性)
  • 用于提及的 UserModel 配置
  • 提及弹窗筛选
  • mentionSelect 事件及取消操作
  • 消息中的提及数据
  • 自定义提及处理
建议

📄 阅读: references/suggestions.md

  • 快捷回复建议(suggestions 属性)
  • 自定义建议模板(suggestionTemplate)
  • 在输入框上方显示建议
  • 建议点击行为
  • 动态更新建议
按需加载

📄 阅读: references/load-on-demand.md

  • 启用延迟加载(loadOnDemand 属性)
  • 滚动触发消息加载
  • 大型会话的性能优化
  • 分页模式
  • 以编程方式添加较早的消息
方法

📄 阅读: references/methods.md

  • addMessage() - 添加字符串或 MessageModel
  • updateMessage() - 修改现有消息
  • scrollToBottom() - 滚动到最新消息
  • scrollToMessage() - 按 ID 滚动到指定消息
  • focus() - 将焦点设到输入文本区域
  • 用于更新的 refresh() 和 dataBind()
  • 其他组件方法
事件

📄 阅读: references/events.md

  • created - 组件初始化
  • messageSend - 发送消息前触发(可取消)
  • userTyping - 输入状态更新
  • mentionSelect - 提及选择处理
  • itemClicked - 工具栏项目点击(标题栏和消息工具栏)
  • 附件事件(click、beforeUpload、uploadSuccess、uploadFailure、removed)
  • 事件处理模式
消息工具栏与外观

📄 阅读: references/message-toolbar-appearance.md

  • 消息工具栏设置(messageToolbarSettings)
  • 单条消息的工具栏项目(Copy、Reply、Pin、Delete)
  • 自定义工具栏项目
  • 消息工具栏点击事件
  • 紧凑模式(enableCompactMode)- 将所有消息左对齐
  • CSS 自定义(cssClass)
  • 主题集成
  • RTL 支持(enableRtl)
  • 本地化(locale)
  • 持久化(enablePersistence)
  • 无障碍功能

快速开始

基本聊天界面设置
import { ChatUI, UserModel, MessageModel } from '@syncfusion/ej2-interactive-chat';
import { enableRipple } from '@syncfusion/ej2-base';

enableRipple(true);

// Define current user
let currentUser: UserModel = {
    id: "user1",
    user: "Albert",
    avatarUrl: "https://example.com/avatar1.png"
};

// Define other participant
let participantUser: UserModel = {
    id: "user2",
    user: "Michale Suyama",
    avatarUrl: "https://example.com/avatar2.png"
};

// Initial messages
let chatMessages: MessageModel[] = [
    {
        author: currentUser,
        text: "Hi Michale, are we on track for the deadline?"
    },
    {
        author: participantUser,
        text: "Yes, the design phase is complete."
    },
    {
        author: currentUser,
        text: "Great! I'll review it and send feedback by today."
    }
];

// Initialize Chat UI
let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    messages: chatMessages,
    headerText: 'Michale Suyama',
    showTimeStamp: true,
    autoScrollToBottom: true
});

// Render
chatUI.appendTo('#chatUI');
HTML 结构
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Chat UI Example</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    
    
    <link href="https://cdn.syncfusion.com/ej2/32.1.19/fluent2.css" rel="stylesheet" />
</head>
<body>
    <div class="chatui-container" style="height: 500px; width: 400px;">
        <div id="chatUI"></div>
    </div>
</body>
</html>
CSS 导入(通过 npm)
@import "../../node_modules/@syncfusion/ej2-fluent2-theme/styles/chat-ui/index.css";

常见模式

以编程方式添加新消息
// Add as string (uses current user)
chatUI.addMessage("This is a new message");

// Add as MessageModel (any user)
chatUI.addMessage({
    text: "Response from bot",
    author: botUser,
    timestamp: new Date()
});
处理消息发送事件
let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    messageSend: (args: MessageSendEventArgs) => {
        console.log("Message being sent:", args.message.text);
        
        // Cancel send if needed
        if (args.message.text.trim() === '') {
            args.cancel = true;
        }
        
        // Send to server/API
        sendToServer(args.message);
    }
});
显示输入指示器
// Show user is typing
chatUI.typingUsers = [participantUser];

// Hide typing indicator (after message received)
chatUI.typingUsers = [];
启用带上传功能的文件附件
let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    enableAttachments: true,
    attachmentSettings: {
        saveUrl: 'https://your-server.com/api/upload',
        removeUrl: 'https://your-server.com/api/remove',
        allowedFileTypes: '.jpg,.png,.pdf,.docx',
        maxFileSize: 5242880, // 5MB in bytes
        maximumCount: 3
    },
    attachmentUploadSuccess: (args) => {
        console.log("File uploaded successfully:", args.file.name);
    }
});
添加 @提及支持
let mentionableUsers: UserModel[] = [
    { id: "user1", user: "Albert" },
    { id: "user2", user: "Michale" },
    { id: "user3", user: "Janet" }
];

let chatUI: ChatUI = new ChatUI({
    user: currentUser,
    mentionTriggerChar: '@',
    mentionUsers: mentionableUsers,
    mentionSelect: (args: MentionSelectEventArgs) => {
        console.log("Mentioned user:", args.itemData);
    }
});
更新现有消息
// Update message content
chatUI.updateMessage({
    text: "Updated message content",
    author: currentUser
}, "message-id-123");
滚动到指定消息
// Scroll to bottom (latest message)
chatUI.scrollToBottom();

// Scroll to specific message by ID
chatUI.scrollToMessage("message-id-456");

关键属性摘要

属性类型描述
userUserModel当前与聊天互动的用户
messagesMessageModel[]聊天消息集合
showHeaderboolean显示/隐藏页眉(默认:true)
showFooterboolean显示/隐藏页脚(默认:true)
headerTextstring页眉中显示的文本
placeholderstring输入框占位文本
typingUsersUserModel[]当前正在输入的用户
showTimeStampboolean显示消息时间戳(默认:true)
showTimeBreakboolean按日期对消息分组(默认:false)
autoScrollToBottomboolean收到新消息时自动滚动(默认:false)
enableAttachmentsboolean启用文件附件(默认:false)
attachmentSettingsFileAttachmentSettingsModel文件上传配置
mentionTriggerCharstring触发提及的字符(默认:'@')
mentionUsersUserModel[]可供 @mention 的用户
suggestionsstring[]快捷回复建议
loadOnDemandboolean延迟加载消息(默认:false)
enableCompactModeboolean将所有消息左对齐(默认:false)
messageToolbarSettingsMessageToolbarSettingsModel单条消息的工具栏配置
headerToolbarToolbarSettingsModel页眉工具栏配置
widthstring | number组件宽度(默认:'100%')
heightstring | number组件高度(默认:'100%')
cssClassstring自定义 CSS 类
enableRtlboolean从右向左布局(默认:false)
localestring本地化区域设置

常见用例

客户支持聊天
  • 实时 Agent 与客户对话
  • 通过输入状态指示 Agent 是否可用
  • 通过文件附件发送屏幕截图/文档
  • 消息状态(已发送、已送达、已读)
  • 为常见回复提供快捷回复建议
AI 聊天机器人界面
  • 区分用户与机器人的消息
  • AI 处理期间显示输入状态指示
  • 建议回复和快捷操作
  • 用于丰富回复的消息模板
  • 显示欢迎消息的空状态
团队协作工具
  • @提及团队成员
  • 回复消息并进行串联讨论
  • 置顶重要消息
  • 支持预览的文件共享
  • 长对话按需加载
实时帮助小组件
  • 嵌入式小组件采用紧凑模式
  • 带有 Agent 信息的自定义页眉
  • 显示输入状态的页脚
  • 自动滚动到最新消息
  • 最小化/最大化功能
文档问答
  • 采用问答格式,清楚区分用户
  • 附加代码片段
  • 按对话会话显示时间分隔
  • 带有复制功能的消息工具栏
  • 搜索并滚动到指定消息

评论

支持 Markdown